<?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>Exponential Fault &#187; dev</title>
	<atom:link href="http://weblog.lo2k.net/tag/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.lo2k.net</link>
	<description></description>
	<lastBuildDate>Fri, 25 Feb 2011 16:26:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>5 outils que j&#8217;ai découvert en 5 mois de Java</title>
		<link>http://weblog.lo2k.net/2010/02/5-outils-que-jai-decouvert-en-5-mois-de-java/</link>
		<comments>http://weblog.lo2k.net/2010/02/5-outils-que-jai-decouvert-en-5-mois-de-java/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 11:06:15 +0000</pubDate>
		<dc:creator>X-Blaster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[guice]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://weblog.lo2k.net/?p=302</guid>
		<description><![CDATA[Venant d&#8217;un monde plus orienté PHP/Python/Ruby, j&#8217;ai envie de faire partager avec vous mes 6 premiers mois d&#8217;expérience &#8220;pro&#8221; en Java. De l&#8217;extérieur, je trouvais la communauté Java assez strict et remplit d&#8217;acronyme (J2EE, JPA, EJB3, WAR) mais une fois passé ce &#8220;langage&#8221; imposé surement par les téchnicos-commerciaux de chez Sun/Oracle, on se rend compte que Java [...]]]></description>
			<content:encoded><![CDATA[<p>Venant d&#8217;un monde plus orienté PHP/Python/Ruby, j&#8217;ai envie de faire partager avec vous mes 6 premiers mois d&#8217;expérience &#8220;pro&#8221; en Java.  De l&#8217;extérieur, je trouvais la communauté Java assez strict et remplit d&#8217;acronyme (J2EE, JPA, EJB3, WAR) mais une fois passé ce &#8220;langage&#8221; imposé surement par les téchnicos-commerciaux de chez Sun/Oracle, on se rend compte que Java n&#8217;a pas beaucoup a envié a d&#8217;autre langage &#8220;hype&#8221;.</p>
<p>Même si le langage reste très strict et fortement typés, certains outils ont réussi a le rendre flexible dans les méthodes de développement.</p>
<h2><a href="http://maven.apache.org/">Maven</a></h2>
<p>Si je dis que c&#8217;est une évolution de Ant, je vais me faire trucider et créer une guerre de religion <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Cet outil m&#8217;a permis de plus facilement structurer mes programmes. Déploiement automatique, test unitaire, Maven crée un squelette qui permet facilement de gérer tout le &#8220;cycle de vie&#8221; d&#8217;une application. Le système de dépendance (repris par Ivy) est plus qu&#8217;appreciable <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Le genre d&#8217;outil que j&#8217;affectionne particulièrement. Une ou deux lignes de code et tout fonctionne parfaitement, peut importe la plateforme <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2><a href="http://code.google.com/intl/fr/webtoolkit/">GWT</a></h2>
<p><a href="http://code.google.com/intl/fr/webtoolkit/"></a>Je sais que le Google Web Toolkit ne fait pas partit intégrante d&#8217;une application Java mais il faut avoué que sur ce coup là, Google a fait fort. Plus qu&#8217;un outil de transcodage Java-&gt;JavaScript, les différents design pattern (comme <a href="http://code.google.com/p/gwt-mvp-sample/">MVP</a>) qui sont proné dans GWT m&#8217;ont permis de faire un bon spectaculaire dans ma manière de coder.</p>
<h2><a href="http://code.google.com/p/google-guice/">Guice</a></h2>
<p>N&#8217;étant pas particulièrement fan des fichiers de conf en XML et n&#8217;étant pas habitué a Spring, je trouve que Guice a toutes les fonctionnalités pour faire de l&#8217;injection de dépendance en Java, simple et efficaces <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h2><a href="http://sonar.codehaus.org/">Sonar</a></h2>
<p>Il est toujours bon de développer avec une boussole, savoir où on va. Sonar permet d&#8217;avoir des indicateurs de qualité de code. Un petit &#8220;<code>mvn sonar:sonar</code>&#8221; sur un projet maven et zou ! On a une ribambelle d&#8217;indicateurs et le résultat des tests unitaires dans une interface vraiment très pratique.</p>
<h2><a href="http://fornax.itemis.de/confluence/display/fornax/Sculptor+(CSC)">Sculptor</a></h2>
<p>Si vous ne connaissez pas le concept de &#8220;<a href="http://fr.wikipedia.org/wiki/Model_driven_architecture">MDA</a>&#8220;, ce n&#8217;est pas bien grave. Sculptor vous permet de définir votre &#8220;model&#8221; et de générer toutes les parties de codes rébarbatives au possible.</p>
<p>Génération de code EJB3, JPA, Spring et même GoogleAppEngine <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Une fois correctement maitrisé, il vous fera économiser de nombreuses heures <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.lo2k.net/2010/02/5-outils-que-jai-decouvert-en-5-mois-de-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>4 excuses de collègues pour faire du code spaghetti</title>
		<link>http://weblog.lo2k.net/2010/02/4-excuses-de-collegues-pour-faire-du-code-spaghetti/</link>
		<comments>http://weblog.lo2k.net/2010/02/4-excuses-de-collegues-pour-faire-du-code-spaghetti/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 10:38:03 +0000</pubDate>
		<dc:creator>X-Blaster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://weblog.lo2k.net/?p=288</guid>
		<description><![CDATA[Vous avez un regard terrifié ! Les yeux en sangs, vous venez de voir 12 000 lignes de codes sans commentaire dans une classe statique. Vous demandez des explications ! Pourquoi ? Pourquoi tant de haine ? Voici les &#8220;réponses&#8221; les plus fréquentes. Pourquoi changer ? ça marche Pourquoi changer ? C&#8217;est une bonne question [...]]]></description>
			<content:encoded><![CDATA[<p>Vous avez un regard terrifié ! Les yeux en sangs, vous venez de voir 12 000 lignes de codes sans commentaire dans une classe statique. Vous demandez des explications ! Pourquoi ? Pourquoi tant de haine ?</p>
<p>Voici les &#8220;réponses&#8221; les plus fréquentes.</p>
<p><span id="more-288"></span></p>
<h2>Pourquoi changer ? ça marche</h2>
<p>Pourquoi changer ? C&#8217;est une bonne question et elle n&#8217;est pas si stupide que ça.</p>
<p>Vous avez déjà vu un ou deux stagiaires qui ont voulus optimiser un code backdoor qui n&#8217;est quasiment jamais appelé. Passer de 513ms a 437ms sur un code qui est appelé dans un CRON tout les mois&#8230; ça n&#8217;a pas forcément un grand intérêt. Mais il faut se poser quelques questions:</p>
<ul>
<li>Dois-je modifier ce code souvent ?</li>
<li>Ce code est-il appelé dans une boucle haptique a 1000Hz ?</li>
<li>Est-ce que ma fonction ressemble plus a une boite noire qui des fois me retourne des résultats &#8220;mystique&#8221; ?</li>
</ul>
<p>Si vous avez répondu &#8220;oui&#8221; a une seule de ses 3 réponses, OUI ! Il faut changer !</p>
<p><strong>solution: </strong> Expliquez que la machine à vapeur ça marche aussi et pourtant&#8230;</p>
<h2>On avait pas le temps</h2>
<blockquote><p>C&#8217;est la vie ! Dans une boite (une vrai comme nous), on nous demande des trucs et on a pas le temps de faire comme à l&#8217;univ !</p></blockquote>
<p>HAHAHAHA, celle là me fait bien rire <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . On a pas le temps de reviewer un peu son code mais on a la temps de rester 3 jours jusqu&#8217;a minuit juste avant la prod ! Là on peut bosser !</p>
<p>Le temps ça se trouve. La plupart des entreprises devrait fixer un créneau horaire pour revoir et remanier le code existant. Le temps passé a faire cela serait largement gagné sur les phases de debugging.</p>
<p><strong>solution:</strong> expliquez que ranger sa chambre tout les jours c&#8217;est moins chiant que de le faire une fois par an juste avant que maman passe en foutant tout sous le lit.</p>
<h2>C&#8217;est pour optimiser</h2>
<p>Il y a un petit coté &#8220;humain&#8221; derrière cette excuse. &#8220;J&#8217;aurais bien voulu mais c&#8217;est pas possible&#8221;.</p>
<p>Tout d&#8217;abord si la personne qui vous dit ça fait autre chose que du C ou C++ vous pouvez directement lui jeter des pierres. On &#8220;optimise&#8221; pas un code PHP ou Ruby en faisant du code crade. A partir du moment ou on ne sait pas comment l&#8217;interpréteur/compilateur fonctionne derrière. Le fait de tout mettre dans une fonction ne vous fait faire que des économies de bout de chandelles.</p>
<p>Le soucis d&#8217;optimisation pouvait s&#8217;expliquer encore il y a quelques années avec des machines plus lentes mais maintenant les machines sont suffisamment puissante.</p>
<p>Les solutions actuelles pour gérer de gros volumes de données se font surtout par des clustering/cloud car les processeurs ne montent plus en puissance mais en nombre. Il y a de forte chance pour qu&#8217;un code &#8220;optimiser&#8221; à l&#8217;ancienne ne puissent pas être réutiliser sur un cloud.</p>
<p><strong>solution:</strong> proposez de multi-threadé le code comme ça il sera encore plus performant ;). Les autres dev n&#8217;auront plus l&#8217;excuse de l&#8217;optimisation.</p>
<h2>C&#8217;est trop compliquer, on peut pas faire autrement !</h2>
<p>&#8220;Il y a trop de vérification a faire, on a besoin de ces 34 if/else imbriqués&#8221;.</p>
<p>Souvent les collègues se cachent derrière l&#8217;excuse du &#8220;trop compliqué&#8221;. C&#8217;est vrai que c&#8217;est facile. Le code est compliqué a lire on en déduit que ce que le code fait est&#8230; compliqué.</p>
<p>Si je pars sur l&#8217;exemple du &#8220;34 if/else&#8221;, on peut se poser la question &#8220;si c&#8217;est une vérification, ce code ne devrait t&#8217;il pas être déporté dans une classe Validator ?&#8221;. Sémantiquement, les &#8220;34 if/else&#8221; sont-il dissociable ?</p>
<blockquote><p>Un problème infiniment complexe n&#8217;est que la somme d&#8217;une infinité de problème simple</p></blockquote>
<p>J&#8217;aime me dire que tout problème aussi compliqué soit-il peut être résumé par une somme de problème simple à comprendre.</p>
<p>Partant de ce principe, le code aura surement beaucoup plus de classe et pourra peut être effrayé des personnes de passé d&#8217;une classe statique a une douzaine de petite classe mais pour autant le code sera beaucoup plus simple et raisonné.</p>
<p><strong>solution:</strong> expliquez qu&#8217;un code complexe peut être subdivisé en code plus simple.</p>
<h2>Quelques &#8220;autres&#8221; excuses bidons envoyés par twitter <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </h2>
<ul>
<li>cette appli a pas loin de 7 ans, on va pas s&#8217;amuser à tout reprendre maintenant !</li>
<li>mais si, c&#8217;est bien codé, toi tu sais !</li>
<li>w3c c&#8217;est pour les low</li>
<li>je mets pas de commentaire parce que j&#8217;ai peur de pas comprendre ce que j&#8217;ai voulu dire</li>
</ul>
<p><strong>N&#8217;hésitez pas a en laisser en commentaire <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.lo2k.net/2010/02/4-excuses-de-collegues-pour-faire-du-code-spaghetti/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Faire des tests unitaires FUN avec Cucumber et Watir</title>
		<link>http://weblog.lo2k.net/2009/02/faire-des-tests-unitaires-fun-avec-cucumber-et-watir/</link>
		<comments>http://weblog.lo2k.net/2009/02/faire-des-tests-unitaires-fun-avec-cucumber-et-watir/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 12:49:15 +0000</pubDate>
		<dc:creator>X-Blaster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://weblog.lo2k.net/?p=173</guid>
		<description><![CDATA[On vous demande pour la 3459eme fois de tester votre application web. Vous entendez déjà votre patron &#8220;Pourtant quand j&#8217;appuie sur SAVE, ça devrait sauvegarder ! C&#8217;est si dûr que ça ? Hein ? Non mais ! Jte paye a faire quoi ?!? A écrire des billets débiles pendant tes pauses sur ton blog ?!?&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>On vous demande pour la 3459eme fois de tester votre application web. Vous entendez déjà votre patron <strong>&#8220;Pourtant quand j&#8217;appuie sur SAVE, ça devrait sauvegarder ! C&#8217;est si dûr que ça ? Hein ? Non mais ! Jte paye a faire quoi ?!? A écrire des billets débiles pendant tes pauses sur ton blog ?!?&#8221;</strong></p>
<p>On sent le vécu hein ? <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Non bon serieusement, on va essayer de rendre ça &#8220;FUN&#8221; avec un cocombre et un renard de feux. Déjà on va définir notre vocabulaire.</p>
<ul>
<li><a href="http://cukes.info/">Cucumber</a> est un &#8220;framework&#8221; de test unitaire ou on écrit tout en langage &#8220;humain&#8221;. Genre &#8220;là j&#8217;ouvre ma page web et j&#8217;epluche des carottes&#8221;.</li>
<li><a href="http://wiki.openqa.org/display/WTR/Project+Home">Watir</a> c&#8217;est une bibliothèque pour faire des tests unitaires sur une interface web.</li>
</ul>
<p>Et si comme <a href="http://redsquirrel.com/dave/">Dave Hoover</a>, on combine les 2, ça donne quoi ?</p>
<p><span id="more-173"></span></p>
<h2>Installation de Cucumber et FireWatir</h2>
<p>Simple. Après avoir installé gem (le systeme de packaging de ruby) on tape</p>
<pre class="css">gem install cucumber
gem install firewatir</pre>
<p>Vous aurez aussi besoin d&#8217;un petit plugin firefox disponible <a href="http://wiki.openqa.org/display/WTR/FireWatir+Installation">ici</a></p>
<h2>En route pour notre premier test.</h2>
<p>On nomme les test de cucumber &#8220;feature&#8221;. La syntaxe d&#8217;une feature de cucumber est assez libre mais se base essentiellemet sur 3 mots clé &#8220;When&#8221;, &#8220;Given&#8221; et &#8220;Then&#8221;. On peut assimiler ça a &#8220;Hypothèse, developpement et conclusion&#8221;.</p>
<p>Ici j&#8217;utilise Cucumber en anglais (car les clients que l&#8217;on a sont essentiellement anglais) mais il existe une version française de cucumber.</p>
<pre class="css">Feature: "lab" section Menu
  In order to ensure that the lab menu
  Verify that the "lab" menu entry exist on lo2k websites

Scenario: Check if "lab" menu exist
  Given I am on website "http://www.lo2k.net"
  Then "lab" is present in the menu</pre>
<p>Voici le contenu du fichier &#8220;lab.feature&#8221;</p>
<p>Si je lance cucumber avec la commande &#8220;cucumber lab.feature&#8221; j&#8217;ai le resultat suivant.</p>
<pre class="css">Feature: "lab" section Menu  # features/lab.feature
  In order to ensure that the lab menu
  Verify that the "lab" menu entry exist on lo2k websites
  Scenario: Check if "lab" menu exist           # features/lab.feature:5
    Given I'm on website "http://www.lo2k.net"  # features/lab.feature:6
    Then "lab" is present in the menu           # features/lab.feature:7

1 scenario
2 steps pending (2 with no step definition)

You can use these snippets to implement pending steps which have no step definit
ion:

Given /^I am on website "http:\/\/www\.lo2k\.net"$/ do
end

Then /^"lab" is present in the menu$/ do
end</pre>
<p>Sympa, il me definie des templates pour mes &#8220;steps&#8221;. Comme vous pouvez le voir, les steps sont definis par des expressions regulières. COOL !!! On va donc ecrire nos &#8220;steps&#8221; dans un repertoire que nous allons nommer  &#8220;step_definitions&#8221;.<br />
Nous allons a l&#8217;interieur nous constituer une &#8220;bibliotheque&#8221; de &#8220;step&#8221;. Peut importe le nom du fichier ici.</p>
<p>Je définis donc un fichier &#8220;bootstrap.rb&#8221;</p>
<pre class="ruby">#Include the FireWatir file.
require 'firewatir'

#include the FireWatir Module.
include FireWatir

Before do
	@browser = Firefox.new
end

After do
	@browser.close
end</pre>
<p>Puis mes steps.</p>
<pre class="ruby">Given /^I am on website "(.*)"$/ do |url|
	@browser.goto(url)
end

Then /^"(.*)" is present in the menu$/ do |menu|
	@browser.link( :text, 'lab').exists?
end</pre>
<p>J&#8217;ai profité ici de redefinir avec des parenthèses les elements succeptible de changer.</p>
<p>Bingo, le scenario passe sans aucun soucis <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>On améliore un peu</h2>
<p>Maintenant je peux réecrire mon script comme suit.</p>
<pre class="css">Feature: "lab" section Menu
  In order to ensure that the lab menu
  Verify that the "lab" menu entry exist on lo2k websites

Scenario: Check if "lab" menu exist
  Given I am on website "http://www.lo2k.net"
  Then "lab" is present in the menu
  And "timeline" is present in the menu</pre>
<p>Et <strong>avoir le resultat directement</strong> car ayant définis un pattern qui match, il ne me demande même pas de réecrire un bout de code <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre class="css">Feature: "lab" section Menu  # features/lab.feature
  In order to ensure that the lab menu
  Verify that the "lab" menu entry exist on lo2k websites
  Scenario: Check if "lab" menu exist            # features/lab.feature:5
    Given I am on website "http://www.lo2k.net"  # features/step_definitions/step1.rb:27
    Then "lab" is present in the menu            # features/step_definitions/step1.rb:31
    And "timeline" is present in the menu        # features/step_definitions/step1.rb:31

1 scenario
3 steps passed</pre>
<h2>Et si je veux m&#8217;y mettre serieusement ?</h2>
<p>Vous remarquerez déjà quelques erreurs dans mon test que j&#8217;ai fait précipitement.</p>
<ul>
<li>Je fais le test que le lien &#8220;existe&#8221; pas qu&#8217;il est bien situé dans le menu</li>
<li>Je ne simule pas d&#8217;action sur d&#8217;autre page.</li>
</ul>
<p>Vous pouvez facilement mettre des informations dans des champs, simuler des clicks sur des boutons. Voici un exemple de code ci dessous.</p>
<pre class="ruby">When /^with password "(.*)"$/ do |password|
	@browser.text_field(:name,"passw").set(password)
end

Given /^I press the "(.*)" button$/ do |button_name|
	@browser.button(:value,button_name).click
end</pre>
<p>Watir est assez exhaustif et montre une flexibilité très interessante qui couvre la plupart des cas, vous n&#8217;aurez pas trop de soucis a lui faire ce que vous voulez.</p>
<h2>Conclusion</h2>
<p>Enfin quelque chose de clair a montrer a votre client et quelque chose d&#8217;assez simple a mettre en place.</p>
<p>Quelques idées en vrac que j&#8217;ai dans mon cerveau bouillonant:</p>
<ul>
<li>Faire un serveur web pour taper vos &#8220;features&#8221; avec autocompletion basé sur votre bibliothèque de mots clés déjà définis</li>
<li>Integrer ça a un systeme de builbot pour verifier que les scenarios de votre application marche correctement <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</li>
</ul>
<p>Enfin bref&#8230; ya du &#8220;potentiel&#8221; (et du boulot) <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.lo2k.net/2009/02/faire-des-tests-unitaires-fun-avec-cucumber-et-watir/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PS3 slideshow on flickr with HTML5 canvas</title>
		<link>http://weblog.lo2k.net/2009/02/ps3-slideshow-on-flickr-with-html5-canvas/</link>
		<comments>http://weblog.lo2k.net/2009/02/ps3-slideshow-on-flickr-with-html5-canvas/#comments</comments>
		<pubDate>Tue, 03 Feb 2009 21:41:18 +0000</pubDate>
		<dc:creator>X-Blaster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[lo2k]]></category>
		<category><![CDATA[ps3]]></category>
		<category><![CDATA[slideshow]]></category>

		<guid isPermaLink="false">http://weblog.lo2k.net/?p=155</guid>
		<description><![CDATA[This is short mockup on how you can use canvas. I was quite attracted by the style of the PS3 slideshow and I my idea is just to see if we can create the same feeling with the HTML5 canvas component (instead of an heavy flash animation). The javascript code is quite dirt and was [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.lo2k.net/v7/lab/flickr"><img class="alignnone size-medium wp-image-156" title="image-8" src="http://weblog.lo2k.net/wp-content/uploads/2009/02/image-8-300x117.png" alt="image-8" width="300" height="117" /></a></p>
<p>This is short mockup on how you can use canvas.</p>
<p>I was quite attracted by the style of the PS3 slideshow and I my idea is just to see if we can create the same feeling with the HTML5 canvas component (instead of an heavy flash animation).</p>
<p>The javascript code is quite dirt and was just a one shot proof of concept. </p>
<p>Enter your flickrid and enjoy <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>See it on the <a href="http://www.lo2k.net/v7/lab/flickr">PS3 slideshow with canvas</a></p>
<h3><span id="more-155"></span>For french readers</h3>
<p>Oui je fais un post en anglais pour toucher un plus large public. Pour les nouveautés, une section &#8220;<a href="http://www.lo2k.net/v7/lab">lab</a>&#8221; a été rajouté sur <a href="http://www.lo2k.net">lo2k</a> pour mes experimentations. Elle est dispo dans l&#8217;url du site standard sous &#8220;<a href="http://www.lo2k.net/v7/lab">lab</a>&#8220;. (elle apparaitra dans le weblog surement bientôt aussi)</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.lo2k.net/2009/02/ps3-slideshow-on-flickr-with-html5-canvas/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ameliorer un réseau de neurones avec un algorithme génétique ?</title>
		<link>http://weblog.lo2k.net/2008/12/ameliorer-un-reseau-de-neurones-avec-un-algorithme-genetique/</link>
		<comments>http://weblog.lo2k.net/2008/12/ameliorer-un-reseau-de-neurones-avec-un-algorithme-genetique/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 12:29:35 +0000</pubDate>
		<dc:creator>X-Blaster</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[experimental]]></category>

		<guid isPermaLink="false">http://weblog.lo2k.net/?p=84</guid>
		<description><![CDATA[En ce moment, je me pose plein de questions sur les réseaux de neurones. Ce n&#8217;est pas mon domaine de predilection mais&#8230; je pense que c&#8217;est un grand rêve . Il y a quelques années j&#8217;ai eu l&#8217;idée de faire ça. Et comme vous pouvez le constater&#8230; on l&#8217;a déjà fait pour moi . Mais [...]]]></description>
			<content:encoded><![CDATA[<p>En ce moment, je me pose plein de questions sur les réseaux de neurones. Ce n&#8217;est pas mon domaine de predilection mais&#8230; je pense que c&#8217;est un grand rêve <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Il y a quelques années j&#8217;ai eu l&#8217;idée de faire <a href="http://www.psi.toronto.edu/~vincent/videoepitome.html">ça</a>. Et comme vous pouvez le constater&#8230; on l&#8217;a déjà fait pour moi <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Mais voilà, j&#8217;ai quand même envie de le refaire pour comprendre comment ça marche.</p>
<h2>Mon objectif</h2>
<p><img class="alignleft size-full wp-image-85" title="sample" src="http://weblog.lo2k.net/wp-content/uploads/2008/12/sample.jpg" alt="sample" width="160" height="80" />Ce que je souhaite faire est assez simple. Voir si je peux affiner une image avec des contours simples en noir et blanc a partir d&#8217;une image low res.</p>
<p>Il faudrait donc que l&#8217;algorithme &#8220;invente&#8221; des details qui n&#8217;existent pas.</p>
<p><span id="more-84"></span></p>
<h2>Un réseau de neurones en bref</h2>
<p>Un réseau neuronale au final c&#8217;est quelque chose d&#8217;assez simple.</p>
<ul>
<li>Des valeurs en entrée</li>
<li>Des valeurs en sortie</li>
<li>Un gros schmilblick entre</li>
</ul>
<p>Pour comprendre un peu le systeme, essayons de le <strong>restreindre à 3D </strong>avec deux points en entrée et un point en sortie.</p>
<ul>
<li>Si la vitesse est a 45 et la limitation a 50, j&#8217;accelere un peu (pedale accel= 0.1)</li>
<li>Si la vitesse est a 60 et la limitation a 50, je freine un peu. (pedale accel = -0.2)</li>
<li>Si la vitesse est a 90 et la limitation a 90, je freine brutalement (pedale accell = -3).</li>
</ul>
<p>Les valeurs ici sont arbitraires et juste donné a titre d&#8217;exemple. Ce qu&#8217;ils faut comprendre c&#8217;est que lors de l&#8217;entrainement, le réseau va s&#8217;autoadapter avec un algorithme d&#8217;ajustement (que je n&#8217;expliquerais pas ici) pour coller un maximum aux valeurs de sorties en fonction des valeurs d&#8217;entrées.</p>
<div id="attachment_86" class="wp-caption alignleft" style="width: 306px"><img class="size-full wp-image-86" title="rm23b04b" src="http://weblog.lo2k.net/wp-content/uploads/2008/12/rm23b04b.gif" alt="Approximation d'un signal carré avec une multitude de sinusoide" width="296" height="217" /><p class="wp-caption-text">Approximation d&#39;un signal carré avec une multitude de sinusoide</p></div>
<p>Si l&#8217;on compare cela a des frequences, en additionant une multitude de frequences, on peut obtenir une courbe en sortie qui est proche de ce que l&#8217;on désire. Ici ce n&#8217;est pas une seule courbe qui passe par tout les points de l&#8217;entrainement mais une addition de courbes.</p>
<p>Il est maintenant facile de comprendre qu&#8217;avec une infinité de neurones, on peut avoir une courbe qui passe par tout les points. Ce n&#8217;est pourtant pas ce que l&#8217;on désire. Si l&#8217;on passe par tout les points, nous pouvons avoir des extremes que l&#8217;on ne souhaite pas prendre en compte (cas bien particulier).</p>
<p>L&#8217;autre soucis d&#8217;un réseau de neurones est la vitesse d&#8217;apprentissage. Un peu comme un humain il faut commencer par des problèmes simples et venir sur des problèmes plus complexe peu a peu. Si le niveau est trop haut, le réseau va apprendre trop vite et se specialiser dans un domaine. Trop lent et il n&#8217;apprendra clairement pas assez vite et restera &#8220;débile&#8221; <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<h2>Ce n&#8217;est pas magique !</h2>
<p>Au final un réseau de neurones doit être bien pensé. Il faut lui attribué un bon nombre de neurones, un bon seuil d&#8217;apprentissage et même une topologie qui correspond au problème (je n&#8217;aborde pas ici les problemes de loop back, de plusieurs couches hidden ni même le type de fonction des neurones sygmoid, linear, &#8230;) et au final je ne suis pas expert.</p>
<h2>Application d&#8217;un algo génétique par dessus</h2>
<p>Et si au final je ne m&#8217;en souciais pas ? <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Pourquoi ne pas mettre en place un algorithme génétique qui etudierait les réseaux de neurones ?</p>
<p>Je pourrais très bien avoir une population de réseau de neurones généré aléatoirement. Comme parametre génétique je pourrais avoir:</p>
<ul>
<li>Le nombre de couches</li>
<li>le nombre de neurones par couche</li>
<li>le type de couche</li>
<li>la valeur de l&#8217;apprentissage</li>
<li>les liaisons entre les couches</li>
</ul>
<p>Ensuite, lors de l&#8217;experimentation sur par exemple 10 000 images générés aléatoirement (même jeux de test pour tout les algos)  je prend les 4 meilleurs algo (basé sur celui qui est plus proche de mes images de reférences), je crée des enfants en gerant des mutations et je continue le processus.</p>
<p>J&#8217;estime qu&#8217;au bout d&#8217;un certain nombre de génération, j&#8217;obtiendrais des réseaux de neurones qui auront un contenu que je ne connais pas mais surtout avec une structure de neurones que je ne connais pas non plus mais qui en théorie devrait fonctionner.</p>
<p>Voila&#8230; c&#8217;est une idée comme ça, j&#8217;attend vos commentaires <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> &#8230; si vous en avez <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Si j&#8217;ai le temps d&#8217;implementer cela, je vous en reparle <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . Au passage si vous avez de la doc ou que vous êtes au courant que c&#8217;est une perte de temps et que quelqu&#8217;un a déjà tenté avant moi, faite le moi savoir <img src='http://weblog.lo2k.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.lo2k.net/2008/12/ameliorer-un-reseau-de-neurones-avec-un-algorithme-genetique/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

