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

<channel>
	<title>Loïc Guillois</title>
	<atom:link href="http://www.loicguillois.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.loicguillois.fr</link>
	<description>conception d&#039;applications Web, Mobile et TV</description>
	<lastBuildDate>Mon, 26 Dec 2011 21:46:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>J&#8217;ai une application Play! en production</title>
		<link>http://www.loicguillois.fr/jai-une-application-play-en-production/</link>
		<comments>http://www.loicguillois.fr/jai-une-application-play-en-production/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 21:46:08 +0000</pubDate>
		<dc:creator>Loïc Guillois</dc:creator>
				<category><![CDATA[Administration système]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[hébergement]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Play! framework]]></category>

		<guid isPermaLink="false">http://www.loicguillois.fr/?p=77</guid>
		<description><![CDATA[Je tenais à faire un article sur un sujet bien précis qui reflète un retour d&#8217;expérience sur le déploiement d&#8217;applications Play! Framework en production. Je vais prendre l&#8217;exemple de ce site Web e-commerce : www.labottegardiane.com que j&#8217;ai développé from scratch à l&#8217;aide de Play! framework et jQuery en 2009 pour le compte d&#8217;un de mes [...]]]></description>
			<content:encoded><![CDATA[<p>Je tenais à faire un article sur un sujet bien précis qui reflète un retour d&#8217;expérience sur le déploiement d&#8217;applications Play! Framework en production. Je vais prendre l&#8217;exemple de ce site Web e-commerce : <strong>www.labottegardiane.com</strong> que j&#8217;ai développé <em>from scratch</em> à l&#8217;aide de <a href="http://www.playframework.org/">Play! framework</a> et jQuery en 2009 pour le compte d&#8217;un de mes clients. Il a été <strong>mis en production fin 2009</strong>, soit il y a plus de deux ans à l&#8217;écriture de cet article et ce sur un <a href="https://www.gandi.net/hosting/">serveur Gandi</a>. Il faut savoir qu&#8217;à l&#8217;époque c&#8217;était &laquo;&nbsp;osé&nbsp;&raquo; car l&#8217;offre ne proposait que des parts de 0,5 CPU et 128Mo de mémoire vive. Ces quota ont été doublé pour une part seule depuis mais la puissance disponible reste malgré tout un peu juste pour déployer du Java.</p>
<p>Donc comment faire pour héberger une application Java avec un minimum de performance ? Les premiers tests ont été désastreux avec uniquement quelques requêtes par secondes&#8230; J&#8217;ai donc effectuer du profiling du front avec notamment <a href="https://addons.mozilla.org/fr/firefox/addon/firebug/">Firebug</a> et <a href="http://developer.yahoo.com/yslow/">YSlow</a> afin d&#8217;apporter les optimisations nécessaires à mon code source. Ensuite, j&#8217;ai optimiser la configuration de mon application et mis en place un cache applicatif avec <strong>ehCache</strong> afin de soulager la base de donnée MySQL.</p>
<p>Cependant, la meilleur des optimisations a été de mettre en place un frontal Nginx avec une configuration des headers pour le cache et une compression zip adaptée couplés à la mise en place d&#8217;un webcache avec <a href="http://memcached.org/">Memcached</a>. Les performances sont désormais au rendez vous et le serveur ne pâti plus de pic de charges CPU sous mes agressions avec l&#8217;outil que j&#8217;utilisait à l&#8217;époque pour simuler la charge : <strong>apache-benchmark</strong>. Ainsi sur la page des produits, on obtient encore 124 requêtes par seconde aujourd&#8217;hui (je ne me rappel plus du score de l&#8217;époque qui était du même ordre) :</p>
<blockquote><p>Concurrency Level:      10<br />
Time taken for tests:   8.049 seconds<br />
Complete requests:      1000<br />
Failed requests:        0<br />
Write errors:           0<br />
Total transferred:      5478000 bytes<br />
HTML transferred:       5245000 bytes<br />
<strong>Requests per second:    124.25 [#/sec] (mean)</strong><br />
Time per request:       80.485 [ms] (mean)<br />
Time per request:       8.049 [ms] (mean, across all concurrent requests)<br />
Transfer rate:          664.67 [Kbytes/sec] received</p></blockquote>
<p>&nbsp;</p>
<p>L&#8217;application n&#8217;a pas été redémarré depuis plus d&#8217;un an et demi et les performances, comme le bon vin, ne font que s&#8217;améliorer. On remarque que le débit obtenu est très proche du débit théorique fourni par Gandi (5Mb). Pour preuve de l&#8217;ancienneté de l&#8217;application :</p>
<p><a href="http://www.loicguillois.fr/wp-content/uploads/2011/12/Sans-titre.jpg"><img class="alignnone size-full wp-image-79" title="Sans titre" src="http://www.loicguillois.fr/wp-content/uploads/2011/12/Sans-titre.jpg" alt="" width="653" height="305" /></a></p>
<p>&nbsp;</p>
<p>Aucun problème à signaler depuis malgré l&#8217;arrêt des mises à jour des logiciels suite à l&#8217;arrêt de la collaboration avec le commerçant pour le moment. Comme quoi performances et disponibilité ne sont pas si difficile a obtenir &#8230; même en environnement &laquo;&nbsp;hostile&nbsp;&raquo;. Cela dit, aujourd&#8217;hui je ne proposerais pas une telle solution à un client qui n&#8217;a pas de gros besoins de performances. Il faut savoir que la société derrière Play! framework (<strong>Zenexity</strong>) propose une plateforme d&#8217;hébergement d&#8217;applications : <a href="http://www.playapps.net"><strong>www.playapps.net</strong></a> Pour 10€, les résultats sont au rendez vous et c&#8217;est clef en main&#8230; pourquoi se priver ! Par ailleurs, d&#8217;autres plateformes &laquo;&nbsp;cloud&nbsp;&raquo; proposent de plus en plus une compatibilité avec Play! framework comme par exemple <a href="http://blog.heroku.com/archives/2011/8/29/play/">Heroku</a>. Peut être qu&#8217;un jour je ferais un article sur le sujet&#8230; <img src='http://www.loicguillois.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.loicguillois.fr/jai-une-application-play-en-production/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jouer avec l&#8217;open data</title>
		<link>http://www.loicguillois.fr/jouer-avec-lopen-data/</link>
		<comments>http://www.loicguillois.fr/jouer-avec-lopen-data/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 12:37:43 +0000</pubDate>
		<dc:creator>Loïc Guillois</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[open data]]></category>

		<guid isPermaLink="false">http://www.loicguillois.fr/?p=72</guid>
		<description><![CDATA[Récemment de nombreuses nouvelles sont arrivées autours du phénomène open data, et c&#8217;est une excellente chose Sur Nantes, il y a quelques temps déjà j&#8217;avais entendu parler de chantiers en cours notamment sous l&#8217;impulsion d&#8217;LibertTIC. Désormais les politiques ont compris tout l&#8217;intérêt d&#8217;ouvrir les données au public, le site internet http://data.nantes.fr en est le meilleur [...]]]></description>
			<content:encoded><![CDATA[<p>Récemment de nombreuses nouvelles sont arrivées autours du phénomène <strong>open data</strong>, et c&#8217;est une excellente chose <img src='http://www.loicguillois.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Sur <strong>Nantes</strong>, il y a quelques temps déjà j&#8217;avais entendu parler de chantiers en cours notamment sous l&#8217;impulsion d&#8217;<a href="http://www.atlantic2.org/index.php?mact=News,cntnt01,detail,0&amp;cntnt01articleid=258&amp;cntnt01returnid=15">LibertTIC</a>. Désormais les politiques ont compris tout l&#8217;intérêt d&#8217;ouvrir les données au public, le site internet <a href="http://data.nantes.fr">http://data.nantes.fr</a> en est le meilleur exemple. Mais avant tout, petite vidéo de circonstance pour tout comprendre en moins de 5 minutes:</p>
<p><iframe src="http://www.dailymotion.com/embed/video/xjcyvv" frameborder="0" width="480" height="270"></iframe><br />
<a href="http://www.dailymotion.com/video/xjcyvv_la-loire-atlantique-ouvre-les-donnees-publiques_news" target="_blank">La Loire-Atlantique ouvre les données publiques</a> <em>par <a href="http://www.dailymotion.com/Loire-atlantique" target="_blank">Loire-atlantique</a></em></p>
<p>&nbsp;</p>
<h1><strong>Ce qui est disponible à Nantes</strong></h1>
<p>Alors après ce beau discours, il est important de comprendre que les données proposées sont pour l&#8217;instant peuvent être de deux types : soit des fichiers mis à jour plus ou moins régulièrement, mais en général il s&#8217;agit d&#8217;un fichier par an, par exemple concernant <strong>la liste des installations sportives</strong> ou culturelles ou encore la liste des codes postaux de Nantes. Soit avec une fréquence bien plus rapide de mise à jour, comme <a href="http://data.nantes.fr/les-donnees/documentation-de-lapi/getdisponibiliteparkingspublics/">la disponibilité des places de parkings</a> ou encore les indices de qualité de l&#8217;air. Ces dernières sont appelées <strong>API</strong> sont de vrai bijoux qui permettent la création d&#8217;applications mobiles et/ou Web apportant une vrai valeur ajouté à l&#8217;usager. L&#8217;exemple le plus courant est très certainement les applications <strong>iPhone</strong> et <strong>Android</strong> qui permettent de tout savoir sur les transports en commun ou encore les <a href="http://www.bicloo.nantesmetropole.fr/">bicloo</a>. L&#8217;open data est également très friande d&#8217;écologie et on retrouve le retrouve donc ici avec notamment l&#8217;ensemble des données concernant les espaces verts ainsi que les indices de pollutions. Sur ce dernier point on a d&#8217;ailleurs accès à un grand nombre de paramètres : particules fines, dioxyde d&#8217;azote et dioxyde de souffre.</p>
<p>On remarquera que la majorité des fichiers sont disponibles en CSV ce qui est une bonne chose puisqu&#8217;il est encore monnaie courante de trouver des fichiers Excel ou pire des fichiers XLSX qui requièrent l&#8217;achat de logiciels Microsoft pour pouvoir être lu. Concernant les API, elles sont faciles à utiliser utiliser par les développeurs qui peuvent ainsi requêter une interface facile à comprendre et proposant des résultats au <strong>format XML</strong>, CSV ou KMZ. On pourra regretter que les API ne soit pas davantage unifiées et orienté <a href="http://fr.wikipedia.org/wiki/Representational_State_Transfer">REST</a>.</p>
<h1><strong>Et pour la France ?</strong></h1>
<p>Les Etats Unis ont été les premier à se lancer dans l&#8217;open data. Aujourd&#8217;hui la France rattrape son retard avec le site gouvernemental dédié à l&#8217;<a href="http://www.data.gouv.fr/">ouverture des données</a>. Les données qu&#8217;on y trouve concerne d&#8217;avantage des statistiques et les chiffres concernant la fiscalité. Le gouvernement a fait le choix de déléguer l&#8217;ouverture des données à chaque ministère sur son domaine de compétence, sous l&#8217;impulsion de <a href="https://www.facebook.com/etalab">Etalab présent sur Facebook</a>. On retrouve également l&#8217;<strong>INSEE</strong>, le <strong>CSA</strong> ou encore <strong>IGN</strong> en ce qui concerne les producteurs de données. http://data.gouv.fr se veut depuis le 5 décembre 2011 la plateforme française d’ouverture des données publiques.</p>
<p>Récemment une grande première s&#8217;est produite puisqu&#8217;il s&#8217;agit d&#8217;une société privée, la <strong>SNCF</strong>, qui a ouvert <a href="http://data.sncf.com/">sa propre plateforme open data</a>. A terme on peut espérer que tout ceux qui détiennent des données public les distribues librement. C&#8217;est ceux vers quoi la France se dirige pour le moment. Même si les jeux de données proposés sont encore limités et parfois peu commode à exploiter à cause du format des fichiers.</p>
<h1><strong>Un petit délire ?</strong></h1>
<p>Alors comme je cherchais une idée simple (je ne voulais pas y passer plus d&#8217;une soirée) et fun, j&#8217;ai choisi de créer un mini site Web qui permette (autant que possible) d&#8217;aider à <a href="http://www.jechercheunputaindeprenom.fr/">choisir des prénoms</a>. Pour cela j&#8217;ai écris une application avec <a href="http://www.loicguillois.fr/resume-play-framework-au-jug-de-nantes/">Play!</a> et <a href="http://www.loicguillois.fr/mettre-en-place-le-sharding-et-le-failover-avec-mongodb/">MongoDB</a>. Je me suis basé sur les prénoms les plus utilisés sur ces dernières années grâce aux plateformes open data de Nantes et Paris. J&#8217;ai ainsi pu récupérer <strong>1697 prénoms</strong>. Le résultat est ici : <a href="http://www.jechercheunputaindeprenom.fr/">http://www.jechercheunputaindeprenom.fr/</a></p>
<p><a href="http://www.jechercheunputaindeprenom.fr/"><img class="alignnone size-full wp-image-73" title="putain" src="http://www.loicguillois.fr/wp-content/uploads/2011/12/putain.jpg" alt="" width="500" height="185" /></a></p>
<p>Au final, il n&#8217;est pas très utile&#8230; mais j&#8217;ai déjà trouver d&#8217;autres idée bien plus utiles qui seront présentés dans un prochain article&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.loicguillois.fr/jouer-avec-lopen-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développement de l&#8217;application HbbTV Roland Garros</title>
		<link>http://www.loicguillois.fr/developpement-de-lapplication-hbbtv-roland-garros/</link>
		<comments>http://www.loicguillois.fr/developpement-de-lapplication-hbbtv-roland-garros/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 11:46:46 +0000</pubDate>
		<dc:creator>Loïc Guillois</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[HbbTV]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://www.loicguillois.fr/?p=44</guid>
		<description><![CDATA[Cela fait quelques temps que je devait écrire un billet sur le sujet du développement d&#8217;applications Web pour les TV. Je vais donc vous raconter l&#8217;aventure de ce mois de mai 2011 durant lequel avec quelques collègues et en collaboration avec IBM nous avont réussi à développer une application en 1 mois pour le compte [...]]]></description>
			<content:encoded><![CDATA[<p>Cela fait quelques temps que je devait écrire un billet sur le sujet du développement d&#8217;applications Web pour les TV. Je vais donc vous raconter l&#8217;aventure de ce mois de mai 2011 durant lequel avec quelques collègues et en collaboration avec IBM nous avont réussi à développer une application en 1 mois pour le compte de France Télévision.</p>
<h1><strong>Le développement Web sur TV</strong></h1>
<p>Chez <a href="http://www.wiztivi.com">Wiztivi</a>, nous sommes des pionniers de la télé connectée et forcément ça aide. Nous sommes en contact permanent avec les constructeurs et les différents acteurs de l&#8217;<strong>IPTV</strong>, y compris (bien sûr) notre principal actionnaire : SFR. L&#8217;environnement de développement classique d&#8217;un développeur d&#8217;applications TV, c&#8217;est un PC et pleins de TV : différentes marques, différents modèles, différents firmwares mais aussi quelques box ADSL et consoles de jeux <img src='http://www.loicguillois.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Du point de vue des technologies, ça reste du standard : <strong>HTML, CSS, Javascript</strong>. La plupart des TV intègre aujourd&#8217;hui WebKit ce qui nous facilite le travaille mais il reste malgré tout de nombreuses différences entre TV ce qui nécessite un effort particulier d&#8217;intégration et de tests. Il y a aussi les spécificités de chaque marque : API propriétaire et lecteurs vidéo différents. Finalement, l&#8217;environnement n&#8217;est pas plus contraignant que de réaliser une application Web classique qui soit fonctionnelle sur la majorité des navigateurs du marché (Firefox, Chrome/Safari, Internet Explorer, Opera).</p>
<p>En terme d&#8217;usage des applications, tout se pilote depuis la télécommande ce qui a notamment des impacts sur la gestion de la navigation et du focus. Il nous arrive également de devoir gérer des widgets spécifiques à la TV comme un clavier virtuel ou des players video.</p>
<h1><strong>La technologie HbbTV</strong></h1>
<p>Jusqu&#8217;à présent la solution la plus utilisée pour déployer des applications Web sur TV et box étaient d&#8217;héberger celles ci sur un serveur. Le constructeur intégrait le lien vers l&#8217;applications via son firmware. De ce fait, les communications passent par la prise ethernet de la TV/Box. HbbTV est une nouvelle approche qui permet au contraire de diffuser l&#8217;application dans le flux TV. L&#8217;idée est d&#8217;ajouter des informations au niveau de la TNT. Ainsi ce sont les chaînes qui peuvent désormais diffuser des applications.</p>
<p><a href="http://www.loicguillois.fr/wp-content/uploads/2011/08/Hbbtv-logo_source.png"><img class="size-full wp-image-49 aligncenter" title="Hbbtv-logo_source" src="http://www.loicguillois.fr/wp-content/uploads/2011/08/Hbbtv-logo_source.png" alt="" width="320" height="151" /></a></p>
<p>HbbTV propose deux modes de fonctionnement : <strong>broadband</strong> et broadcast. La première approche est assez classique : on va définir une URL dans le flux. Lorsque l&#8217;utilisateur arrive sur une chaîne, l&#8217;application est chargée depuis cette URL. La communication passe donc par la prise ethernet et fonctionne (presque) comme une application standard : on peut notamment faire des requêtes XHR. La seconde approche est différente. Elle permet de diffuser l&#8217;application dans son intégralité dans le flux. Les performances sont donc tributaire du débit <strong>TNT</strong> et nous oblige à restreindre la taille des images et la quantité d&#8217;informations à envoyer à la TV. L&#8217;application peut malgré tout se mettre à jour par des informations qui sont mise à jour au niveau du flux (le carousel et les stream events). Développer une application <strong>broadcast</strong> est donc très contraignante pour le développeur et ça on s&#8217;en rend compte quand on développe, pas en lisant les spécifications du standards qui de toute façon ne sont pas respectées à la lettre.</p>
<p>Les TV qui supportent cette technologie ont commencé à apparaître sur le marché français en début d&#8217;année. Elles devraient se démocratiser en 2012. On peut dors et déjà acheter, par exemple, cet <a href="http://www.lesnumeriques.com/toshiba-regza-46sl833-p303_11299_64.html">TV Toshiba de 42 pouces</a> (800€).</p>
<h1><strong>France Télévision et HbbTV</strong></h1>
<p>France Télévision avait déjà effectué une <a href="http://info.france2.fr/sciences-tech/france-televisions-se-lance-dans-la-tv-connectee-64645079.html">démonstration à l&#8217;IFA</a>. Cette application sera prochainement diffusée au niveau national mais pour la chaîne public le vrai grand test se déroulait en ce printemps 2011. L&#8217;idée du projet Roland Garros était de montrer que l&#8217;usage de l&#8217;HbbTV permet un usage enrichie de la TV. On parle d&#8217;ailleurs souvent de &laquo;&nbsp;télétexte HD&nbsp;&raquo;. France Télévision fait partie du consortium qui développe HbbTV et souhaite réellement devenir leader sur ce thème sur le plan national.</p>
<p><a href="http://www.loicguillois.fr/wp-content/uploads/2011/08/image_64657495.jpg"><img class="size-full wp-image-46 aligncenter" title="IFA : France TV HbbTV" src="http://www.loicguillois.fr/wp-content/uploads/2011/08/image_64657495.jpg" alt="" width="466" height="262" /></a><br />
<strong></strong></p>
<h1><strong>L&#8217;application Roland Garros</strong></h1>
<p>Les internationaux de Tennis intéressent énormément de monde et chaque jour France 2 et France 3 diffusaient de nombreux matchs. Le but de l&#8217;application est d&#8217;apportée le maximum d&#8217;information aux utilisateurs : résultats en direct (y compris pour les matchs qui ne sont pas en cours de diffusion), les fiches des joueurs et un album photo. Il y a différents modes d&#8217;affichages et on peut basculer à volonté entre le live et l&#8217;application grâce à la télécommande. L&#8217;application était disponible uniquement en broadband. Une popup &laquo;&nbsp;Veuillez connecter votre TV&nbsp;&raquo; apparaissait si nécessaire. Voici une vidéo de démonstration :<br />
<strong></strong></p>
<p><iframe src="http://www.youtube.com/embed/xJNR4inWxgI" frameborder="0" width="560" height="349"></iframe></p>
<h1><strong>Architecture nosql</strong></h1>
<p>Les données nous ont été <a href="http://www-03.ibm.com/press/fr/fr/presskit/24973.wss">mise à disposition par IBM</a>. De notre coté nous avons donc développé une application HTML/CSS full javascript. Pour les besoins de mise en forme des informations et de performances, nous avons mis en place un serveur d&#8217;application avec une application Spring connectée à la fois au backend IBM et à une instance <a href="http://www.loicguillois.fr/mettre-en-place-le-sharding-et-le-failover-avec-mongodb/"><strong>MongoDB</strong></a> hébergée localement. Ainsi nous avons mis en place un batch qui régulièrement importait et mettait en forme les données (XML) dans notre base. Il faut savoir que nous recevions énormément d&#8217;information pour tout les matchs en cours. En fin de tournois, nous avions plusieurs giga de base de donnée. Mongo nous a permis de construire un modèle de donnée prêt à l&#8217;emploi notamment pour le résultat des matchs et la construction du tableau de classement. Nous avons utilisé <a href="http://code.google.com/p/morphia/">Morphia</a> afin de conserver une approche objet au niveau de notre code Java. Nous utilisions <strong>Spring</strong> ensuite pour sérialiser ces données en JSON au travers de webservices directement exploitable par les frontend par requêtes Ajax.</p>
<h1><strong>Nos outils</strong></h1>
<p>Personnellement, je travaille sous Ubuntu. Nous avons utiliser Eclipse et essentiellement Chrome couplé à ses outils de développement pour le développement des interfaces Web. J&#8217;ai apprécié l&#8217;iPad et l&#8217;application France Télévision qui permet d&#8217;avoir le live sur mon bureau. C&#8217;est appréciable de voir que l&#8217;interface de notre application se rafraîchis plus vite que la plupart des sites Web en ligne publiant les résultats de <strong>Roland Garros</strong>.</p>
<p><a href="http://www.loicguillois.fr/wp-content/uploads/2011/08/Photo-23-05-11-14-11-27.jpeg"><img class="size-full wp-image-48 aligncenter" title="Photo 23-05-11 14 11 27" src="http://www.loicguillois.fr/wp-content/uploads/2011/08/Photo-23-05-11-14-11-27.jpeg" alt="" width="550" height="413" /></a><br />
<strong></strong></p>
<h1><strong>Conclusion</strong></h1>
<p>Au final, développer une application HbbTV demande surtout d&#8217;être en contact avec les constructeurs et d&#8217;être alaise techniquement en dehors des technologies Web. En interne, nous utilisions une carte de diffusion (Dektec) ainsi que la solution bien connu dans le milieu : <a href="http://www.avalpa.com/the-key-values/15-free-software/33-opencaster">OpenCaster</a>. Heureusement que <a href="http://karl-rousseau.blogspot.com/">Karl s&#8217;y connait bien</a>  <img src='http://www.loicguillois.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Sans lui ça aurait été difficile !</p>
<p>A noté que Wiztivi a également développé <a href="http://www.strategies.fr/actualites/medias/167058W/nrj-12-lance-une-application-pour-les-televiseurs-connectes-hbbtv.html">l&#8217;application HbbTV pour NRJ12</a>. De mon coté, le prochain article sur la thématique TV parlera de <strong>Google TV</strong> mais je suis de près aussi <strong>Apple TV</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.loicguillois.fr/developpement-de-lapplication-hbbtv-roland-garros/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mettre en place le sharding et le failover avec MongoDB</title>
		<link>http://www.loicguillois.fr/mettre-en-place-le-sharding-et-le-failover-avec-mongodb/</link>
		<comments>http://www.loicguillois.fr/mettre-en-place-le-sharding-et-le-failover-avec-mongodb/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 16:07:31 +0000</pubDate>
		<dc:creator>Loïc Guillois</dc:creator>
				<category><![CDATA[Administration système]]></category>
		<category><![CDATA[haute disponibilité]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://www.loicguillois.fr/?p=21</guid>
		<description><![CDATA[Cela fait quelques mois que j&#8217;utilise MongoDB au boulot dans le cadre du développement d&#8217;applications Web et ça marche plutôt pas mal. Dans cet article, on va voir comment mettre en place une architecture redondée qui permettra de profiter des joies de la scalabilité horizontale : il suffit d&#8217;ajouter des serveurs à la volée et comme [...]]]></description>
			<content:encoded><![CDATA[<p>Cela fait quelques mois que j&#8217;utilise MongoDB au boulot dans le cadre du développement d&#8217;applications Web et ça marche plutôt pas mal. Dans cet article, on va voir comment mettre en place une architecture redondée qui permettra de profiter des joies de la <strong>scalabilité horizontale</strong> : il suffit d&#8217;ajouter des serveurs à la volée et comme par magie notre application est capable d&#8217;absorber plus de charge.</p>
<p>Note : je préfère travaillé avec le paquet 10gen qui est celui qui est le plus à jour. Vous trouverez la procédure d&#8217;installation <a href="http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages">ici</a>.</p>
<p><code>$ mongo --version</code></p>
<p><code>MongoDB shell version: 1.8.2</code></p>
<h1><strong>On commence par mettre en place la réplication</strong></h1>
<p>Afin d&#8217;assurer la redondance et la haute disponibilité, MongoDB possède une fonctionnalité appelée « replica set » qui permet aux données d&#8217;être dupliquées de manière transparente pour le développeur. Le concept est de créer un groupe de serveur (set) qui possédera un nœud principal (primary) et n serveurs de backup (secondary). Si a un moment donné le nœud principal est inopérant, automatiquement l&#8217;un des serveurs de backup deviendra serveur primaire.</p>
<p>On commence par arrêter le daemon :</p>
<p><code># /etc/init.d/mongodb stop</code></p>
<p>Puis on crée les dossiers où seront stockées les bases :</p>
<p><code># mkdir /data/r0</code><br />
<code># mkdir /data/r1</code><br />
<code># mkdir /data/r2</code></p>
<p>Puis on lance les instances :</p>
<p><code># mongod --port 27017 --dbpath /data/r0 --replSet foo</code><br />
<code># mongod --port 27018 --dbpath /data/r1 --replSet foo</code><br />
<code># mongod --port 27019 --dbpath /data/r2 --replSet foo</code></p>
<p>Ici, on a appelé notre replica set « foo ». Libre à vous de l&#8217;appeler comme vous voulez et de mettre autant de serveurs que souhaité.</p>
<p>Ensuite on va configurer le replica set. On se connecte :</p>
<p><code>$ mongo</code></p>
<p>Puis on écris notre configuration :</p>
<p><code>&gt; cfg = {</code><br />
<code>_id : "foo",</code><br />
<code>members : [</code><br />
<code>{ _id : 0, host : "localhost:27017"},</code><br />
<code>{ _id : 1, host : "localhost:27018"},</code><br />
<code>{ _id : 2, host : "localhost:27019"},</code><br />
<code>] }</code></p>
<p>Et on initialise :</p>
<p><code>&gt; rs.initiate(cfg)</code><br />
<code>{</code><br />
<code>"info" : "Config now saved locally. Should come online in about a minute.",</code><br />
<code>"ok" : 1</code><br />
<code>}</code></p>
<p>Après quelques secondes, l&#8217;invite changera lorsque vous taperez « entrée » :</p>
<p><code>foo:PRIMARY&gt;</code></p>
<p>C&#8217;est bon : La réplication est active. A partir de maintenant vous pouvez connecter votre application sur l&#8217;instance MongoDB lancée sur le port 27017. Les données en insertions seront automatiquement répliquées sur les autres instances. Cependant, le <strong>failover</strong> n&#8217;est pas encore en place. Même si on constate que l&#8217;élection automatique du master est en place, notre application ne peut pas basculer seule d&#8217;une instance vers une autre.</p>
<p>Nous allons donc utiliser le sharding pour y parvenir de manière transparente pour l&#8217;application.</p>
<h1><strong>Mise en place du sharding</strong></h1>
<p><span style="font-family: arial,sans-serif;">Une infrastructure typique MongoDB consiste en plusieurs <strong>replica set</strong> ainsi que de plusieurs instances mongo dédiées à la configuration du sharding. Enfin, il faudra également une instance mongos par serveur d&#8217;application. Mongos n&#8217;est ni plus ni plus ni moins qu&#8217;un loadbalancer servant de point d&#8217;entrée/sortie pour les applications.</span></p>
<p><a href="http://www.loicguillois.fr/wp-content/uploads/2011/07/sharding.png"><img class="alignnone size-full wp-image-38" title="sharding" src="http://www.loicguillois.fr/wp-content/uploads/2011/07/sharding.png" alt="" width="572" height="333" /></a></p>
<p>&nbsp;</p>
<p><span style="font-family: arial,sans-serif;">Pour le vocabulaire, chaque replica set est aussi appelé shard<sub>n</sub>. Le <strong>sharding</strong> consiste en une distribution du stockage des données sur les différentes instances Mongo au sein de ce shard. Chaque machine stock donc un sous ensemble des données. Souvent, c&#8217;est la clef (id) de chaque document qui permet de définir le serveur qui stockera l&#8217;information.</span></p>
<p><span style="font-family: arial,sans-serif;">Concrètement, il nous faudra simplement arrêter nos trois instances et leur rajouter le paramètre suivant permettant d&#8217;activer le sharding :</span></p>
<p><code>--shardsvr</code></p>
<p><span style="font-family: arial,sans-serif;">Ensuite, on lance nos serveurs de configuration :</span></p>
<p><code># mkdir /data/configdb0</code><br />
<code># mkdir /data/configdb1</code><br />
<code># mkdir /data/configdb2</code><br />
<code># mongod --port 27020 --configsvr --dbpath /data/configdb0</code><br />
<code># mongod --port 27021 --configsvr --dbpath /data/configdb1</code><br />
<code># mongod --port 27022 --configsvr --dbpath /data/configdb2</code></p>
<p><span style="font-family: arial,sans-serif;">C&#8217;est ce serveur qui va stocker les informations utiles au bon fonctionnement du sharding. On lance ensuite le routeur :</span></p>
<p><code># mongos --port 27023 --configdb localhost:27020,localhost:27021,localhost:27022</code></p>
<p><span style="font-family: arial,sans-serif;">puis on se connecte sur le routeur :</span></p>
<p><code>$ mongo --port 27023</code></p>
<p><span style="font-family: arial,sans-serif;">Puis on ajoute les nœud au shard :</span></p>
<p><code>&gt; use admin</code><br />
<code>&gt; db.runCommand({addshard : "foo/localhost:27017,localhost:27018,localhost:27019"})</code></p>
<p><span style="font-family: arial,sans-serif;">Vous noterez la syntaxe particulière qui commence par le nom du replica set (foo) suivi d&#8217;un slash et de la liste des serveurs. Si tout c&#8217;est bien passé vous devriez avoir ce message :</span></p>
<p><code>{ "shardAdded" : "foo", "ok" : 1 }</code></p>
<h1><span style="font-family: arial,sans-serif;"><strong>Testons notre infrastructure</strong></span></h1>
<p><span style="font-family: arial,sans-serif;">Par défaut, le sharding n&#8217;est pas activé. On peut l&#8217;activer au niveau d&#8217;une base de donnée ou bien au niveau d&#8217;une collection. Ici nous activons le sharding sur toute la base de données.</span></p>
<p><code>&gt; db.runCommand({enablesharding: "test"})</code></p>
<p><span style="font-family: arial,sans-serif;">Puis nous définissons la clef à utiliser pour le sharding :</span></p>
<p><code>&gt; db.runCommand({shardcollection: "test.hits", key:{"_id":1}})</code></p>
<p><span style="font-family: arial,sans-serif;">On va commencer par charger un peu en données. J&#8217;ai pris ici l&#8217;exemple de hits de statistiques</span><br />
<code>&gt; use test</code><br />
<code>&gt; for(i=0;i&lt;1000000;i++) {</code><br />
<code>db.hits.insert({tag: "search", ctx : ["blah"] });</code><br />
<code>db.hits.insert({tag: "video", ctx : [parseInt(Math.random() * 100), "play"] });</code><br />
<code>db.hits.insert({tag: "video", ctx : [parseInt(Math.random() * 1000), "play"] });</code><br />
<code>} </code></p>
<p align="LEFT"><span style="font-family: DejaVu Sans,sans-serif;">On insère donc 3 millions de hits en base avec notamment des tags « video » dont l&#8217;identifiant est le premier élément du tableau de contexte (ctx). L&#8217;insertion va prendre quelques minutes et on pourra observer l&#8217;utilisation des ressources. On s&#8217;aperçoit que les traitement sont bien paralléliser et que l&#8217;utilisation mémoire est constante <img src='http://www.loicguillois.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </span></p>
<p align="LEFT"><a href="http://www.loicguillois.fr/wp-content/uploads/2011/07/Capture-Moniteur-syst%C3%A8me.png"><img class="alignnone size-full wp-image-39" title="Capture-Moniteur système" src="http://www.loicguillois.fr/wp-content/uploads/2011/07/Capture-Moniteur-syst%C3%A8me.png" alt="" width="749" height="591" /></a></p>
<p align="LEFT"><span style="font-family: DejaVu Sans,sans-serif;"><span>Une fois fini on peut constater que les différentes bases MongoDB utilisent 14Go. Attention : MongoDB pré-alloue les fichiers de stockage : 64Mo, 128Mo, 256Mo, 512Mo etc. jusqu&#8217;à créer des fichiers de 2Go. Les explications <a href="http://www.mongodb.org/display/DOCS/Excessive+Disk+Space">ici</a>.</span></span></p>
<p align="LEFT"> <span style="font-family: DejaVu Sans,sans-serif;">On peut avoir les statistiques de la collection :</span></p>
<p><code>&gt; db.hits.stats()</code></p>
<h1 align="LEFT"><span style="font-family: DejaVu Sans,sans-serif;"><strong>Conclusion</strong></span></h1>
<p align="LEFT"><span style="font-family: DejaVu Sans,sans-serif;">La mise en place du sharding et de la réplication est assez simple. Ainsi on peut rapidement mettre en place une infrastructure fiable. Pour augmenter la capacité de montée en charge il suffira d&#8217;ajouter des des réplica set au shard. MongoDB s&#8217;occupera automatiquement de répartir le stockage des données et l&#8217;exécution des différentes requêtes. Pour augmenter la fiabilité, on pourra également augmenter le nombre de noeud dans chaque replica set. Dans un prochain article je montrerais l&#8217;utilisation de <strong>map reduce</strong>.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.loicguillois.fr/mettre-en-place-le-sharding-et-le-failover-avec-mongodb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Résumé : Play! Framework au JUG de Nantes</title>
		<link>http://www.loicguillois.fr/resume-play-framework-au-jug-de-nantes/</link>
		<comments>http://www.loicguillois.fr/resume-play-framework-au-jug-de-nantes/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 10:28:34 +0000</pubDate>
		<dc:creator>Loïc Guillois</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[conférence]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Play! framework]]></category>

		<guid isPermaLink="false">http://32071hd45097.ikexpress.com/blog-lgu/?p=11</guid>
		<description><![CDATA[Le jeudi 31 mars a eu lieu à La Cantine Numérique de Nantes une conférence menée avec brio (comme d&#8217;habitude ) par le créateur du Play! Framework : Guillaume Bort. Cet article dresse un résumé de la soirée pour ceux qui n&#8217;ont pas eu la chance d&#8217;être parmi nous. La salle était pleine et pas [...]]]></description>
			<content:encoded><![CDATA[<p>Le jeudi 31 mars a eu lieu à La Cantine Numérique de Nantes une conférence menée avec brio (comme d&#8217;habitude <img src='http://www.loicguillois.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) par le créateur du <strong>Play! Framework</strong> : Guillaume Bort. Cet article dresse un résumé de la soirée pour ceux qui n&#8217;ont pas eu la chance d&#8217;être parmi nous. La salle était pleine et pas mal de monde ont eu dû rester debout (dommage que la Cantine n&#8217;est pas de salle plus grande). L&#8217;ambiance était très studieuse malgré quelques questions mal posées par certains mais rapidement taclées en touche avec humour par notre orateur !</p>
<p><center><a href="http://www.loicguillois.fr/wp-content/uploads/2011/07/jug_play_nantes.jpg"><img class="alignnone size-full wp-image-7" title="jug_play_nantes" src="http://www.loicguillois.fr/wp-content/uploads/2011/07/jug_play_nantes.jpg" alt="" width="600" height="448" /></a></center>Guillaume a commencé par nous a présenter <a href="http://www.playframework.org">Play! framework</a>. En bref, il s&#8217;agit d&#8217;un framework pour le développement d&#8217;applications Web en Java mais en s&#8217;affranchissant de l&#8217;API servlet et donc en proposant une solution réellement stateless. Au delà d&#8217;avoir une <strong>architecture propre</strong>, cela provoque des effets de bords intéressant dont les principaux restent quand même le grand respect du <strong>protocole HTTP</strong> (et donc un comportement parfait du navigateur lors d&#8217;un back ou d&#8217;un refresh sur un formulaire par exemple), le (re)chargement du code à chaud et la précision des logs d&#8217;erreurs.</p>
<p>Pour appuyer ce discours, on a eu le droit à une démo en live. Dans le désordre, nous avons eu des explication création d&#8217;un formulaire avec binding vers un objet, mise en place d&#8217;<a href="http://www.playframework.org/documentation/1.1.1/jpa">Hibernate</a>, <a href="http://www.playframework.org/documentation/1.1.1/i18n">internationalisation</a> avec i18n, <a href="http://www.playframework.org/documentation/1.1.1/validation">validation de formulaire</a>, redirections&#8230; et pour finir : les tests !</p>
<p>Le public était conquis. Cela montre que Play! commence à devenir une solution de plus en plus connue et de plus en plus acceptée et utilisée. C&#8217;est de bon augure pour les projets Web et surtout pour les projets d&#8217;entreprise. Trop souvent <a href="http://fr.wikipedia.org/wiki/Java_EE">JEE</a> est préféré encore aujourd&#8217;hui et cela pour des résultats souvent mitigés&#8230;</p>
<p>Guillaume nous a aussi présenté brièvement l&#8217;avenir proche de Play! avec la sortie de la 1.2 release candidate dans les prochains jours. Il en a profité également pour nous rassurer sur l&#8217;avenir de Play! : le framework a atteint sa maturité et il ne devrait plus y avoir de grands changements à l&#8217;avenir : <strong>Keep It Simple</strong> ! Et ça, ça fait plaisir <img src='http://www.loicguillois.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Pour résumer, voici les nouvelles fonctions de la prochaine version:</p>
<ul>
<li>Meilleur support des requêtes asynchrones dans le nouveau package play.libs.F (promises, continuations, WebSockets, streaming&#8230;)</li>
<li>Gestion des dépendances avec intégration de Ivy via un fichier de configuration dependency.yml</li>
<li>Passage à la base de donnée H2 pour les modes mem et fs avec en bonus l&#8217;accès à une interface d&#8217;administration sur http://localhost:9000/@db</li>
</ul>
<p>Bien sûr comme à chaque release, le framework gagne en performance et en stabilité. Pour rappel, il est possible de suivre la <a href="http://play.lighthouseapp.com/projects/57987-play-framework/milestones/current">roadmap du projet</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.loicguillois.fr/resume-play-framework-au-jug-de-nantes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Réinventer la roue : blog sur mesure</title>
		<link>http://www.loicguillois.fr/reinventer-la-roue-blog-sur-mesure/</link>
		<comments>http://www.loicguillois.fr/reinventer-la-roue-blog-sur-mesure/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 10:19:14 +0000</pubDate>
		<dc:creator>Loïc Guillois</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Play! framework]]></category>

		<guid isPermaLink="false">http://32071hd45097.ikexpress.com/blog-lgu/?p=1</guid>
		<description><![CDATA[Cela fait bien longtemps que je n’ai pas écris sur mon blog. L&#8217;année 2010 fut chargée et je n&#8217;ai eu que peu de temps à consacrer à ce blog et encore moins à l&#8217;idée que j&#8217;avais en tête: faire un moteur de blog avec mes petites mains. L’objectif affiché est de réinventer la roue. Mais [...]]]></description>
			<content:encoded><![CDATA[<p>Cela fait bien longtemps que je n’ai pas écris sur mon blog. L&#8217;année 2010 fut chargée et je n&#8217;ai eu que peu de temps à consacrer à ce blog et encore moins à l&#8217;idée que j&#8217;avais en tête: faire un moteur de blog avec mes petites mains. L’objectif affiché est de <strong>réinventer la roue</strong>. Mais contrairement à mon métier de tout les jours qui impose un certain pragmatisme pour mener à bien des projets réels: ici tout est expérimental. N&#8217;ayant ni contrainte de temps ni de cadre technique imposé, je me suis lâché. En revanche, tout est très conventionnel du point de vue fonctionnel. Je m&#8217;inspire beaucoup des plateformes <a href="https://www.blogger.com/">Blogger</a> et <a href="http://www.eklablog.com/">Eklablog</a> mais également de l&#8217;outil <a href="http://www.wordpress-fr.net/">WordPress</a> dont la réputation n&#8217;est plus à faire.</p>
<p>Le blog sur lequel j&#8217;écris possède donc le strict nécessaire: publication d&#8217;articles, commentaires et flux RSS. A l&#8217;avenir viendront s&#8217;ajouter la gestion des tags et un workflow de publication plus élaboré (brouillon, auteur, gestion multi-langue) ainsi que l&#8217;hébergement d&#8217;images (dans le cloud). Une <strong>version mobile et TV</strong> seront également de la partie.</p>
<p><center><a href="http://www.loicguillois.fr/wp-content/uploads/2011/07/Play-framework-Home_1300579445092.png"><img class="alignnone size-full wp-image-4" title="Play framework - Home_1300579445092" src="http://www.loicguillois.fr/wp-content/uploads/2011/07/Play-framework-Home_1300579445092.png" alt="" width="600" height="354" /></a></center>Concernant la technique, j&#8217;ai fait le choix de partir sur des technologies innovantes encore peu utilisées dans le monde de l&#8217;entreprise bien que cela devienne de moins en moins vrai maintenant. Pour commencer, l&#8217;application est développée avec le <a href="http://www.playframework.org/">framework Play!</a> Il s&#8217;agit d&#8217;un framework Web sur lequel j&#8217;ai déjà écris sur mon ancien blog en 2008. Je reviendrais dessus: il y a beaucoup à dire et de nombreuses nouveautés ont fait leur apparition depuis.</p>
<p>Pour faire (très) court, il s&#8217;agit d&#8217;un framework Java (non J2EE) apportant tout le nécessaire pour développer des applications Web selon le <strong>modèle MVC</strong>. Sa grande force est d&#8217;augmenter la productivité du développeur s&#8217;appuyant sur REST <a href="http://www.zengularity.com/item/1985200523/introduction-aux-webservices-rest-avec-play">pour bâtir des applications stateless réellement scalable et a maintenabilité augmentée</a>. Je l&#8217;utilise dès que j&#8217;en ai l&#8217;opportunité.</p>
<p><center><a href="http://www.loicguillois.fr/wp-content/uploads/2011/07/Dashboard-Blog-de-Loic-Guillois_1300578875883.png"><img class="alignnone size-full wp-image-6" title="Dashboard - Blog de Loic Guillois_1300578875883" src="http://www.loicguillois.fr/wp-content/uploads/2011/07/Dashboard-Blog-de-Loic-Guillois_1300578875883.png" alt="" width="600" height="360" /></a></center>Pour l’hébergement, j&#8217;ai opté pour le <strong>cloud computing</strong> avec <a href="http://code.google.com/intl/fr/appengine/">Google App Engine</a>. La grande force de Play! sur ce sujet est de fournir un <a href="http://www.playframework.org/modules/gae">module GAE</a> apportant une solution clef en main pour déployer n&#8217;importe quelle application Play! dans le nuage de la compagnie de Mountain View. Il y a bien quelques contraintes à respecter dont la plus impactante est l&#8217;absence de base de données relationnels. En effet, Google nous propose un datastore basé sur sa solution Big Table. J&#8217;ai choisis de me baser sur la librairie <a href="http://code.google.com/p/siena/">Siena</a> qui propose une couche ORM implémentant également la solution cloud concurrente <strong>SimpleDB d&#8217;Amazon</strong>. Un module est également <a href="http://www.playframework.org/modules/siena">disponible pour Play!</a>. Je ferais un article détaillé sur GAE datastore et Siena. La syntaxe est vraiment plaisante et finalement pas si éloignée de l&#8217;API que propose Play! (qui ne fait qu&#8217;étendre JPA <a href="http://www.playframework.org/documentation/1.1.1/jpa">en proposant des méthodes plus intuitives</a>). Google App Engine a également quelques restrictions concernant Java, notamment l&#8217;absence de support de la librairie AWT. Cela m&#8217;a empêcher dans un premier temps de réutiliser un mécanisme de captcha que j&#8217;avais développé pour la validation des commentaires. Finalement pour ce besoin précis, j&#8217;ai préférer me baser sur la solution SaaS <strong>Disqus</strong> et je ne le regrette pas.</p>
<p><center><a href="http://www.loicguillois.fr/wp-content/uploads/2011/07/Dashboard-DISQUS_1300577400961.png"><img class="alignnone size-full wp-image-5" title="Dashboard - DISQUS_1300577400961" src="http://www.loicguillois.fr/wp-content/uploads/2011/07/Dashboard-DISQUS_1300577400961.png" alt="" width="600" height="224" /></a></center>Le code source de ce projet est disponible sur la plateforme <a href="https://github.com/loicguillois/Smoke-Machine">GitHub</a>. Il est loin d&#8217;être parfait mais évoluera à l&#8217;avenir et notamment des tests fonctionnels et unitaires seront écrits et une plateforme d&#8217;intégration basée sur <a href="http://jenkins-ci.org/">Jenkins</a> (<a href="http://jenkins-ci.org/content/hudsons-future">RIP Hudson</a>) sera mise en place. Si vous avez des questions ou des suggestions, n&#8217;hésitez pas à laisser un commentaire.</p>
<p>Petite note aux courageux qui auront lu le billet jusqu&#8217;au bout, je serais présent à la soirée Play! framework organisé par le <a href="http://www.nantesjug.org/">JUG de Nantes</a> le jeudi 31 mars prochain. Elle sera présenté par l&#8217;auteur du framework, <a href="http://guillaume.bort.fr/">Guillaume Bort</a>. Venez nombreux!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.loicguillois.fr/reinventer-la-roue-blog-sur-mesure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: basic
Database Caching using disk: basic
Object Caching 425/481 objects using disk: basic

Served from: www.loicguillois.fr @ 2012-02-23 02:41:13 -->
