<?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>iq¹²</title>
	<atom:link href="http://iq12.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://iq12.com/blog</link>
	<description>The drooling company</description>
	<lastBuildDate>Wed, 24 Mar 2010 12:42:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Zookeeper from the past</title>
		<link>http://iq12.com/blog/2010/03/24/zookeeper-from-the-past/</link>
		<comments>http://iq12.com/blog/2010/03/24/zookeeper-from-the-past/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 12:35:03 +0000</pubDate>
		<dc:creator>fu</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[jeu]]></category>
		<category><![CDATA[minigame]]></category>
		<category><![CDATA[prod]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=421</guid>
		<description><![CDATA[<script type="text/javascript" src="http://iq12.com/blog/wp-includes/js/jquery/jquery.js"></script><script type="text/javascript" src="http://iq12.com/blog/wp-content/plugins/pb-embedflash/js/sbadapter/shadowbox-jquery.js"></script><script type="text/javascript" src="http://iq12.com/blog/wp-content/plugins/pb-embedflash/js/shadowbox.js"></script><script type="text/javascript"><!--
window.onload = function() {var options ={assetURL:'',loadingImage:'http://iq12.com/blog/wp-content/plugins/pb-embedflash/css/images/loading.gif',flvPlayer:'http://iq12.com/blog/wp-content/plugins/pb-embedflash/swf/mediaplayer.swf',animate:true,animSequence:'wh',overlayColor:'#000',overlayOpacity:0.85,overlayBgImage:'http://iq12.com/blog/wp-content/plugins/pb-embedflash/css/images/overlay-85.png',listenOverlay:true,autoplayMovies:true,showMovieControls:true,resizeDuration:0.35,fadeDuration:0.35,displayNav:true,continuous:false,displayCounter:true,counterType:'default',viewportPadding:20,handleLgImages:'resize',initialHeight:160,initialWidth:320,enableKeys:true,keysClose:['c', 'q', 27],keysPrev:['p', 37],keysNext:['n', 39],handleUnsupported:'',text: {cancel:'Cancel',loading: 'loading',close:'<span class="shortcut">C</span>lose',next:'<span class="shortcut">N</span>ext',prev:'<span class="shortcut">P</span>revious',errors:{single: 'You must install the <a href="{0}">{1}</a> browser plugin to view this content.',shared: 'You must install both the <a href="{0}">{1}</a> and <a href="{2}">{3}</a> browser plugins to view this content.',either: 'You must install either the <a href="{0}">{1}</a> or the <a href="{2}">{3}</a> browser plugin to view this content.'}}};Shadowbox.init(options);}
--></script>I am on a posting frenzy today . I just remembered a minigame i&#8217;ve been asked about. I did it years ago for a site that disappeared since. It&#8217;s your Bejeweled/Zookeeper standard port, with the added feature of being able to manipulate bricks even when the board is not &#8220;stable&#8221;. Very very high combo have [...]]]></description>
			<content:encoded><![CDATA[<p>I am on a posting frenzy today <img src='http://iq12.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . I just remembered a minigame i&#8217;ve been asked about. I did it years ago for a site that disappeared since.</p>
<p>It&#8217;s your Bejeweled/Zookeeper standard port, with the added feature of being able to manipulate bricks even when the board is not &#8220;stable&#8221;. Very very high combo have been obtained thanks to this, but the highscores scripts and database are gone (ignore the scoring screens).</p>
<p>This was for the old <a href="http://www.puydufou.com/">Puy du Fou website</a>, so don&#8217;t mind the ugly icons. The rest of the design was done by <a href="http://www.wonderkoolor.com/">Koo@Wonderkoolor</a>.</p>
<p style="text-align: center;"><small>(Please open the article to see the flash file or player.)</small><em>Click the picture to open</em></p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2010/03/24/zookeeper-from-the-past/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Hot Searches, Yahoo Buzz and Twitter trendings topics at a glance</title>
		<link>http://iq12.com/blog/2010/03/24/google-hot-searches-yahoo-buzz-and-twitter-trendings-topics-at-a-glance/</link>
		<comments>http://iq12.com/blog/2010/03/24/google-hot-searches-yahoo-buzz-and-twitter-trendings-topics-at-a-glance/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 12:15:04 +0000</pubDate>
		<dc:creator>fu</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[lab]]></category>
		<category><![CDATA[Veille]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=413</guid>
		<description><![CDATA[Here&#8217;s an old module done for a website which will propably never see the light of day (no, not iq12.com ^^). I find it very useful to check what&#8217;s buzzing out there. It combines on the same wheel Google Hot Searches, Yahoo Buzz top searches and Twitter trendings topics. (Please open the article to see [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an old module done for a website which will propably never see the light of day (no, not iq12.com ^^). I find it very useful to check what&#8217;s buzzing out there.</p>
<p>It combines on the same wheel <a href="http://www.google.com/trends/hottrends?sa=X">Google Hot Searches</a>, <a href="http://buzzlog.buzz.yahoo.com/overall/">Yahoo Buzz top searches</a> and <a href="http://search.twitter.com/">Twitter trendings topics</a>.</p>
<p style="text-align: center;"><small>(Please open the article to see the flash file or player.)</small><em>Click the picture to open, then use your mousewheel or the scroller</em></p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2010/03/24/google-hot-searches-yahoo-buzz-and-twitter-trendings-topics-at-a-glance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Employee of the Month</title>
		<link>http://iq12.com/blog/2009/11/19/employee_of_the_month/</link>
		<comments>http://iq12.com/blog/2009/11/19/employee_of_the_month/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 20:07:37 +0000</pubDate>
		<dc:creator>fu</dc:creator>
				<category><![CDATA[Français]]></category>
		<category><![CDATA[AS3 good practices]]></category>
		<category><![CDATA[concours]]></category>
		<category><![CDATA[iq12]]></category>
		<category><![CDATA[optimisation]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=384</guid>
		<description><![CDATA[Mike Chambers a organisé une compétition de programmation AS3 la semaine dernière : AS3DTC_1. J&#8217;aime bien les concours simples qui ne prennent pas trop de temps. Monumentale erreur : j&#8217;ai du écrire beaucoup de code. Du coup mes estimés collègues m&#8217;ont demandé d&#8217;écrire ce post sur la manière que j&#8217;ai utilisée pour prendre la 1ère [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.cartoonstock.com/"><img src="http://iq12.com/blog/wp-content/uploads/2009/11/rnin306l.jpg" alt="Employee of the Month" title="Employee of the Month" width="400" height="354" class="aligncenter size-full wp-image-400" /></a></p>
<p><a href="http://www.mikechambers.com/blog/">Mike Chambers</a> a organisé une compétition de programmation AS3 la semaine dernière : <a href="http://www.mikechambers.com/blog/2009/11/12/update-on-actionscript-3-development-task-contest-1/">AS3DTC_1</a>. J&#8217;aime bien les concours simples qui ne prennent pas trop de temps. Monumentale erreur : j&#8217;ai du écrire <a href="http://github.com/mikechambers/ActionScript-3-Development-Task-Contests/blob/master/AS3DTC_1/entries/ArnaudGatouillat/ProximityManager.as">beaucoup de code</a>.</p>
<p>Du coup mes estimés collègues m&#8217;ont demandé d&#8217;écrire ce post sur la manière que j&#8217;ai utilisée pour <a href="http://www.mikechambers.com/blog/2009/11/16/results-from-as3-development-task-contest-1/">prendre la 1ère place (yaisse !)</a>, en profiter pour en faire un cours sur l&#8217;optimisation, tout ça quoi &#8230;</p>
<p><span id="more-384"></span>L&#8217;objet du concours était d&#8217;avoir une scène découpée en cases (une grille donc), avec dessus un grand nombre de points (10000) et 4 objets à tester. Pour chacun des objets à tester, il est demandé de renvoyer les points voisins (points présents dans la case de l&#8217;objet et les 8 cases adjacentes). Grant Skinner a posté un <a title="AS3 ProximityManager V2" href="http://www.gskinner.com/blog/archives/2009/11/as3_proximityma.html" target="_blank">exemple</a> un peu plus visuel de l&#8217;interêt du problème à résoudre :</p>
<p style="text-align: center;"><script type="text/javascript" src="http://iq12.com/blog/wp-content/plugins/pb-embedflash/js/swfobject.js"></script><span class="embedflash" id="swfidb8284a4e6c892260176d8aaa5f3f0a85"><small>(Please open the article to see the flash file or player.)</small></span><script type="text/javascript">
				var flashvars = {}; var params = {}; var attributes = {};params.allowfullscreen = "true"; params.allowscriptaccess = "always";
				swfobject.embedSWF("http://www.gskinner.com/blog/assets/ProximityTest.swf","swfidb8284a4e6c892260176d8aaa5f3f0a85","400","400","9.0.0","http://iq12.com/blog/wp-content/plugins/pb-embedflash/swf/expressInstall.swf",flashvars,params,attributes);
		</script></p>
<p>A chaque appel (il faut imaginer à chaque frame), une liste complète des points est envoyée via un appel à une méthode <strong>update()</strong>. Ensuite pour chaque objet à tester les voisins sont demandés via <strong>getNeighbours()</strong>. Les participations sont départagées par leur vitesse d&#8217;exécution, donc il faut faire le code le plus speed possible.</p>
<p><strong>update()</strong> est donc appelé une seule fois contre plusieurs pour <strong>getNeighbours()</strong>, et toujours avant, <em>il faut donc effectuer un maximum de calculs dans <strong>update()</strong></em>.</p>
<p>L&#8217;autre idée primordiale est de ne faire <em>qu&#8217;une seule boucle sur les 10000 points</em>.</p>
<p>L&#8217;implémentation la plus évidente à mes yeux (mais pas forcement la meilleure, il y a eu des méthodes innovantes à ce niveau, en particulier celle de <a href="http://github.com/mikechambers/ActionScript-3-Development-Task-Contests/blob/master/AS3DTC_1/entries/GrantSkinner/ProximityManager.as">Grant Skinner</a>), est la suivante :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">cases = tableau<span style="color: #66cc66;">&#91;</span>nombre_identifiant<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>points<span style="color: #66cc66;">&#93;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span>points<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>point <span style="color: #b1b100;">in</span> points<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		cases<span style="color: #66cc66;">&#91;</span>identifiant_de_case<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span> point <span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> getNeighbours<span style="color: #66cc66;">&#40;</span>test<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	case_centrale = cases<span style="color: #66cc66;">&#91;</span>identifiant_de_case<span style="color: #66cc66;">&#93;</span>
	<span style="color: #b1b100;">return</span> case_centrale.<span style="color: #0066CC;">concat</span><span style="color: #66cc66;">&#40;</span> cases_voisines_1...8 <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Le calcul d&#8217;<strong>identifiant_de_case</strong> est effectué plus de 10000 fois, c&#8217;est le principal élément à optimiser. Dans sa forme la plus basique, on veut quelque chose du type :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">identifiant_de_case = caseX <span style="color: #66cc66;">*</span> hauteurGrille + caseY</pre></td></tr></table></div>

<p>avec :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">caseX = uint<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">round</span><span style="color: #66cc66;">&#40;</span>point.<span style="color: #006600;">x</span><span style="color: #66cc66;">/</span>tailleGrille<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">// et pareil pour caseY</span></pre></td></tr></table></div>

<p>&gt;&gt; on optimise ce bout de code et on obtient :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// les multiplications sont plus rapides que les divisions (à effectuer une seule fois, dans le constructeur)</span>
ratioTailleGrille = <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">/</span>tailleGrille;
<span style="color: #66cc66;">&#91;</span>...<span style="color: #66cc66;">&#93;</span>
caseX = <span style="color: #0066CC;">int</span><span style="color: #66cc66;">&#40;</span>point.<span style="color: #006600;">x</span><span style="color: #66cc66;">*</span>ratioTailleGrille<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>Pour optimiser encore plus, il est possible d&#8217;utiliser des opérateurs sur les bits (les opérations au niveau bit sont très rapides). Rappel: le but de créer un identifiant unique pour chaque case : on cherche donc à obtenir un <strong>int</strong> qui contient en même temps caseX et caseY.</p>
<p>Pour expliquer la méthode, voir le code d&#8217;exemple suivant :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">caseX = <span style="color: #cc66cc;">12</span>;    <span style="color: #808080; font-style: italic;">// en binaire : 00001100</span>
caseY = <span style="color: #cc66cc;">19</span>;    <span style="color: #808080; font-style: italic;">// en binaire : 00010011</span>
<span style="color: #808080; font-style: italic;">// on décale vers la gauche les bits de caseX pour laisser assez de place à caseY</span>
<span style="color: #808080; font-style: italic;">// ici 8 bits (dans ma classe j'ai poussé le vice à calculer le nombre de bits nécessaires)</span>
<span style="color: #808080; font-style: italic;">// puis on utilise le OU binaire ( | ) pour fusionner les 2 valeurs</span>
identifiant_de_case =
		<span style="color: #66cc66;">&#40;</span>caseX <span style="color: #66cc66;">&lt;&lt;</span> <span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span>		<span style="color: #808080; font-style: italic;">// en binaire : 0001001100000000</span>
			<span style="color: #66cc66;">|</span> caseY		<span style="color: #808080; font-style: italic;">// en binaire :         00010011</span>
<span style="color: #808080; font-style: italic;">// identifiant_de_case =		   en binaire : 0010011000010011</span></pre></td></tr></table></div>

<p>Le stockage des items en lui même se fait dans un Vecteur à 2 dimensions :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> cases:Vector.<span style="color: #66cc66;">&lt;</span>Vector.<span style="color: #66cc66;">&lt;</span>DisplayObject<span style="color: #66cc66;">&gt;&gt;</span></pre></td></tr></table></div>

<p>Un objet (ou Dictionary) liant chaque identifiant à son Vector.&lt;DisplayObject&gt; serait un choix plus logique pour le stockage, mais comme les valeur ne sont pas fortement typées dans un Object, c&#8217;est au final moins rapide.</p>
<p>Beaucoup d&#8217;autres optimisations sont connues (cf. <a href="http://wiki.joa-ebert.com/index.php/Category:Code_Optimization">wiki @joa</a>)</p>
<ul>
<li>remplacer les divisions par des multiplications tant que possible</li>
<li>for(i=0;i&lt;n;i++) est moins efficace que i=n; while(i) { &#8211;i }</li>
<li>vector.push(item) est moins efficace que vector[vector.length]=item;</li>
<li>il faut fortement typer un objet avant d&#8217;appeler une méthode dessus. Par exemple :

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #b1b100;">return</span> cases<span style="color: #66cc66;">&#91;</span>id1<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">concat</span><span style="color: #66cc66;">&#40;</span>cases<span style="color: #66cc66;">&#91;</span>id2<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">// est moins efficace que :</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #b1b100;">case</span>:Vector.<span style="color: #66cc66;">&lt;</span>DisplayObject<span style="color: #66cc66;">&gt;</span> = cases<span style="color: #66cc66;">&#91;</span>id1<span style="color: #66cc66;">&#93;</span>;
<span style="color: #b1b100;">return</span> <span style="color: #b1b100;">case</span>.<span style="color: #0066CC;">concat</span><span style="color: #66cc66;">&#40;</span>cases<span style="color: #66cc66;">&#91;</span>id2<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

</li>
</ul>
<p>Autre feinte :<br />
Dans <strong>getNeighbours()</strong>, normalement il faudrait tester si on est sur les bords, pour savoir si il faut concaténer 9 cases ou moins.<br />
Pour éviter ça, on crée une bande de cases vides autour de la grille réelle. Malheureusement il n&#8217;y a pas d&#8217;index négatif (pour la ligne du haut et la colonne de gauche) dans un stockage avec un Vector. Il faut encore tester ces deux cas.</p>
<p>Enfin, le <strong>vrai boost</strong> (50% de vitesse en plus environ) trouvé en fin de concours (et utilisé que dans mon code je crois) est de tester si les points ont bougé entre 2 appels à <strong>update()</strong>. Si rien n&#8217;a changé on évite de manipuler des données dans tous les sens et on gagne beaucoup de temps.</p>
<p>Depuis, la fonction <strong>update()</strong> ressemble plutôt à :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span>points<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>points.<span style="color: #0066CC;">length</span> <span style="color: #66cc66;">!</span>= oldPointLength<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">// (ré)initialisation</span>
		<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>point <span style="color: #b1b100;">in</span> points<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			cache<span style="color: #66cc66;">&#91;</span>point<span style="color: #66cc66;">&#93;</span> = identifiant_de_case
			cases<span style="color: #66cc66;">&#91;</span>identifiant_de_case<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span> point <span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #b1b100;">else</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>point <span style="color: #b1b100;">in</span> points<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>cache<span style="color: #66cc66;">&#91;</span>point<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">!</span>= identifiant_de_case<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// ce point à bougé</span>
				cache<span style="color: #66cc66;">&#91;</span>point<span style="color: #66cc66;">&#93;</span> = identifiant_de_case
				<span style="color: #808080; font-style: italic;">// effectuer le changement de case du point</span>
				<span style="color: #66cc66;">&#91;</span>...<span style="color: #66cc66;">&#93;</span>
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Voilà, j&#8217;espère que ça va donner de bonnes idées pour optimiser du code AS3. En vérité, ça ne sert que rarement à grand chose de pousser les choses à ce point, sauf quand un petit bout de code pompe une grosse partie des performances espérées.</p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/11/19/employee_of_the_month/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quand l&#8217;émergence se généralise&#8230;</title>
		<link>http://iq12.com/blog/2009/09/25/quand-lemergence-se-generalise/</link>
		<comments>http://iq12.com/blog/2009/09/25/quand-lemergence-se-generalise/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 11:35:19 +0000</pubDate>
		<dc:creator>16ames</dc:creator>
				<category><![CDATA[Français]]></category>
		<category><![CDATA[blabla]]></category>
		<category><![CDATA[Clip interactif]]></category>
		<category><![CDATA[Veille]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=367</guid>
		<description><![CDATA[En voilà du titre qui tape! C&#8217;est juste que ce matin me voici à nouveau titillé par un de ces sujets récurrents qui me travaillent parfois&#8230; C&#8217;est que depuis mon billet “De l’émergence du clip interactif”, et sa suite sommaire, l&#8217;idée fait son chemin et on voit régulièrement réapparaitre des exemples du genre, comme me [...]]]></description>
			<content:encoded><![CDATA[<p>En voilà du titre qui tape!</p>
<p>C&#8217;est juste que ce matin me voici à nouveau titillé par un de ces sujets récurrents qui me travaillent parfois&#8230;</p>
<p>C&#8217;est que depuis mon billet “<a href="http://iq12.com/blog/2008/09/17/de-lemergence-du-clip-interactif/"><em>De l’émergence du clip interactif</em></a>”, et sa <a href="http://iq12.com/blog/2008/12/06/clip-interactif-suite/"><em>suite sommaire</em></a>, l&#8217;idée fait son chemin et on voit régulièrement réapparaitre des exemples du genre, comme me l&#8217;ont fait remarquer les quelques personnes passant sur ce blog en laissant des commentaires&#8230;</p>
<p>Bien qu&#8217;il m&#8217;ait fait bloquer, que j&#8217;ai posté le lien partout où je le pouvais, que je l&#8217;ai cité par ci par là en référence à &#8220;<em>ce qui pouvait se faire dans le domaine</em>&#8220;, je n&#8217;ai pas parlé sur ce blog du clip de <a href="http://soytuaire.labuat.com/"><strong>Labuat</strong></a>, superbe réalisation , petite bombe du genre, se détachant complètement de la référence télévisuelle pour entrer dans quelque chose de &#8220;nouveau&#8221;.</p>
<p style="text-align: center;">
<div class="autoviewer" id="ngg_autoviewer9">
<div class="swfobject" id="fo9_1" style="width:625px; height:300px;">
<p>The <a href="http://www.macromedia.com/go/getflashplayer">Flash Player</a> and <a href="http://www.mozilla.com/firefox/">a browser with Javascript support</a> are needed..</p>
</div>
</div>
<script type="text/javascript" defer="defer">
var fo9_1 = {
	params : {
		wmode : "opaque",
		allowfullscreen : "true",
		bgcolor : "#FFFFFF"},
	flashvars : {
		langOpenImage : "Open Image in New Window",
		langAbout : "About",
		xmlURL : "http://iq12.com/blog/wp-content/plugins/nextgen-flashviewer/xml/autoviewer.php?gid=9"},
	attr : {
		styleclass : "autoviewer"},
	start : function() {
		swfobject.embedSWF("http://iq12.com/blog/wp-content/plugins/nggflash-swf/autoviewer.swf", "fo9_1", "625", "300", "7.0.0", false, this.flashvars, this.params , this.attr );
	}
}
fo9_1.start();
</script>
<p style="text-align: center;"><a href="http://soytuaire.labuat.com/">Labuat</a> /  <a href="http://www.herraizsoto.com/">Herraiz Soto &amp; Co.</a> / <a href="http://www.badabing.es/">badabing</a> / <a href="http://www.zumbakamera.com/">Zumbakamera</a></p>
<p>La première nouveauté qui me saute aux yeux étant le défilement latéral dans un espace fenêtré. En effet, contrairement aux exemples cités précédemment, le site s&#8217;adapte à la fenêtre&#8230; Il n&#8217;y a pas ici de format fermé, on sort du cadre contraignant de la télé et chacun, selon sa configuration matérielle et ses préférences, a une expérience différente, personnelle, du clip&#8230; Ca n&#8217;a l&#8217;air de rien comme ça, mais c&#8217;est énorme! Enfin, c&#8217;est personnellement, subjectivement, énorme!</p>
<p>Ensuite, comme pour une danse, le site nous propose une trame avec laquelle nous pouvons jouer. La ligne tracée, expression visuelle de la musique faisant habilement référence à la courbe de fréquence, pose une ambiance, et est agrémentée d&#8217;accidents visuels illustrant le texte et influant notre perception du morceau.</p>
<p>Enfin l&#8217;utilisation du pointeur de la souris comme &#8220;pinceau&#8221; joue un rôle hypnotique en nous laissant une sensation de contrôle sur le clip&#8230; Nous pouvons en effet laisser la ligne se dérouler ou jouer avec selon notre humeur, comme on laisserait trainer un doigt dans l&#8217;eau au bord d&#8217;un bateau (c&#8217;est joli comme image, non? :p).</p>
<p>Pourquoi reparler de tout ça aujourd&#8217;hui? Tout simplement parce que je viens de voir le site du jour de <a href="http://thefwa.com">theFWA</a>, et qu&#8217;il s&#8217;agit d&#8217;un clip interactif, pour le morceau &#8220;<em>T<a href="http://theneverendingwhy.placeboworld.co.uk/">he Never Ending Why</a></em>&#8221; tiré du nouvel album &#8220;<em>Battle For The Sun</em>&#8221; du groupe <strong>Placebo</strong>.</p>
<p style="text-align: center;">
<div class="autoviewer" id="ngg_autoviewer10">
<div class="swfobject" id="fo10_2" style="width:625px; height:300px;">
<p>The <a href="http://www.macromedia.com/go/getflashplayer">Flash Player</a> and <a href="http://www.mozilla.com/firefox/">a browser with Javascript support</a> are needed..</p>
</div>
</div>
<script type="text/javascript" defer="defer">
var fo10_2 = {
	params : {
		wmode : "opaque",
		allowfullscreen : "true",
		bgcolor : "#FFFFFF"},
	flashvars : {
		langOpenImage : "Open Image in New Window",
		langAbout : "About",
		xmlURL : "http://iq12.com/blog/wp-content/plugins/nextgen-flashviewer/xml/autoviewer.php?gid=10"},
	attr : {
		styleclass : "autoviewer"},
	start : function() {
		swfobject.embedSWF("http://iq12.com/blog/wp-content/plugins/nggflash-swf/autoviewer.swf", "fo10_2", "625", "300", "7.0.0", false, this.flashvars, this.params , this.attr );
	}
}
fo10_2.start();
</script>
<p style="text-align: center;"><a href="http://www.placeboworld.co.uk/">Placebo</a>, <a href="http://www.champagnevalentine.com/">Champagne Valentine</a>, <a href="http://www.random.nu/">Random</a></p>
<p style="text-align: left;">
<p style="text-align: left;">Bon, j&#8217;avoue que je ne suis ni fan de la musique, ni du graphisme, mais un nouveau pas a téé franchis dans le domaine et il me semble intéressant de la saluer. Bien sûr, nous ne sommes pas ici dans le même cas que Labuat. Le clip s&#8217;inscrit dans un cadre contraint. Oui, mais on retrouve cette &#8220;fluidité&#8221; de l&#8217;animation, l&#8217;utilisation en continu du déplacement de la souris, et la parallèle avec la courbe de fréquence (même si ici beaucoup plus à la manière d&#8217;un plug-in WinAmp). De plus il se distingue des exemples pré-cités par sa complexité visuelle. Ce n&#8217;est pas une simple animation &#8220;graphique&#8221; séquencée avec un jeu de clics de ci de là, mais bien une narration rythmée et interactive (même si celle-ci reste limitée)&#8230;</p>
<p style="text-align: left;">Bon, je ne suis plus très sûr d&#8217;où je voulais en venir avec ce billet, c&#8217;est qu&#8217;il fait faim et qu&#8217;on est vendredi, mais on va dire que c&#8217;est fini pour aujourd&#8217;hui :p &#8230; Ah si! ça me revient! Je voulais juste passer une annonce: &#8220;<em>Si tu es une boîte de prod, un groupe de musique, que tu as de l&#8217;argent, tu m&#8217;intéresses!</em>&#8220;</p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/09/25/quand-lemergence-se-generalise/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lucy in the sky with .. physics ?</title>
		<link>http://iq12.com/blog/2009/09/11/lucy-in-the-sky-with-physics/</link>
		<comments>http://iq12.com/blog/2009/09/11/lucy-in-the-sky-with-physics/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 15:13:38 +0000</pubDate>
		<dc:creator>ulu</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[box2d]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[lab]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=364</guid>
		<description><![CDATA[A Beatles tribute and a simple box2d cloud of words in the same SWF ! Just playing with world forces and bodies properties. The words try to align themselves in a readable way. (Please open the article to see the flash file or player.)Click the picture dude ! As a bonus it makes silly hippie [...]]]></description>
			<content:encoded><![CDATA[<p>A Beatles tribute and a simple box2d cloud of words in the same SWF ! Just playing with world forces and bodies properties. The words try to align themselves in a readable way.</p>
<p><center></p>
<p style="text-align: center;"><small>(Please open the article to see the flash file or player.)</small><br /><em>Click the picture dude !</em></p>
<p></center></p>
<p>As a bonus it makes silly hippie sentences</p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/09/11/lucy-in-the-sky-with-physics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Real-time pitch shifting (without change of duration)</title>
		<link>http://iq12.com/blog/2009/08/25/real-time-pitch-shifting/</link>
		<comments>http://iq12.com/blog/2009/08/25/real-time-pitch-shifting/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 16:03:20 +0000</pubDate>
		<dc:creator>fu</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash 10/CS4]]></category>
		<category><![CDATA[R&D]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=356</guid>
		<description><![CDATA[After reading Lee Brimelow&#8217;s post about Adjusting audio pitch in Flash Player 10, I&#8217;ve thinked about a real pitch shifting solution (adjusting pitch without change of duration). Then I found a great algorithm here: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/ and its C# port here http://sites.google.com/site/mikescoderama/pitch-shifting I&#8217;ve ported the code to AS3 then heavily optimized it to get it running [...]]]></description>
			<content:encoded><![CDATA[<p>After reading Lee Brimelow&#8217;s post about <a href="http://theflashblog.com/?p=1129">Adjusting audio pitch in Flash Player 10</a>, I&#8217;ve thinked about a real pitch shifting solution (adjusting pitch without change of duration).</p>
<p>Then I found a great algorithm here: <a href="http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/">http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/</a> and its C# port here <a href="http://sites.google.com/site/mikescoderama/pitch-shifting">http://sites.google.com/site/mikescoderama/pitch-shifting</a></p>
<p>I&#8217;ve ported the code to AS3 then heavily optimized it to get it running under 100% cpu use (of 1 cpu core). I get 45% cpu use with the default parameters on my 2.4GHz PC.</p>
<p>See it in action here (Flash Player 10 required):</p>
<p style="text-align: center;"><small>(Please open the article to see the flash file or player.)</small><br /><em>click to open</em></p>
<p>You can download the source code here: <a href="http://iq12.com/files/pitch_shift/pitch_shift.zip">http://iq12.com/files/pitch_shift/pitch_shift.zip</a></p>
<p>Music: More Frightened by <a href="http://www.myspace.com/candycashband">CandyCash</a> (with permission)</p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/08/25/real-time-pitch-shifting/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Frédéric, the happy hairy snail !</title>
		<link>http://iq12.com/blog/2009/08/04/frederic-the-happy-hairy-snail/</link>
		<comments>http://iq12.com/blog/2009/08/04/frederic-the-happy-hairy-snail/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 17:13:00 +0000</pubDate>
		<dc:creator>ulu</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[lab]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[pitrerie]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=351</guid>
		<description><![CDATA[Here&#8217;s Frédéric ! The only snail who needs shampoo. Come and marvel at his magnifiscent hair ! (Please open the article to see the flash file or player.)click the pretty picture to open And he comes with an enigmatic &#8220;pursuit mode&#8221;. Try it and you&#8217;ll be amazed !]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s Frédéric ! The only snail who needs shampoo. Come and marvel at his magnifiscent hair !</p>
<p><center></p>
<p style="text-align: center;"><small>(Please open the article to see the flash file or player.)</small><br /><em>click the pretty picture to open</em></p>
<p>And he comes with an enigmatic &#8220;pursuit mode&#8221;. Try it and you&#8217;ll be amazed !</p>
<p></center></p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/08/04/frederic-the-happy-hairy-snail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Le rébus du Lundi</title>
		<link>http://iq12.com/blog/2009/08/03/le-rebus-du-lundi/</link>
		<comments>http://iq12.com/blog/2009/08/03/le-rebus-du-lundi/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 19:49:24 +0000</pubDate>
		<dc:creator>ulu</dc:creator>
				<category><![CDATA[Français]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[pitrerie]]></category>
		<category><![CDATA[rebus]]></category>
		<category><![CDATA[série]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=339</guid>
		<description><![CDATA[A deviner : le titre français d&#8217;une série américaine. Postez vos réponses en commentaire. Un Internet tout neuf à gagner !]]></description>
			<content:encoded><![CDATA[<p><center></p>
<p><img src="http://iq12.com/files/ulu/mulderlocke.jpg" alt="rebus" width="500"/><br />
A deviner : <strong>le titre français d&#8217;une série américaine</strong>. Postez vos réponses en commentaire. Un Internet tout neuf à gagner !<br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/08/03/le-rebus-du-lundi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Des bétises &#8230;</title>
		<link>http://iq12.com/blog/2009/07/24/des-betises/</link>
		<comments>http://iq12.com/blog/2009/07/24/des-betises/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 16:07:02 +0000</pubDate>
		<dc:creator>ulu</dc:creator>
				<category><![CDATA[Français]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[b3ta]]></category>
		<category><![CDATA[photoshop]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=326</guid>
		<description><![CDATA[J&#8217;ai participé au b3ta image challenge de la semaine dernière, ce que je ne fais malheureusement pas assez souvent. le thème était : Take any film you wish, and photoshop the scenery, characters or titles into the style of a famous movie poster for a different film: The Dambusters in the style of Ghostbusters, Finding [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai participé au <a href="http://www.b3ta.com/challenge/moviemashups/">b3ta image challenge</a> de la semaine dernière, ce que je ne fais malheureusement pas assez souvent. le thème était :</p>
<blockquote><p>Take any film you wish, and photoshop the scenery, characters or titles into the style of a famous movie poster for a different film: The Dambusters in the style of Ghostbusters, Finding Nemo in the style of Jaws, etc. </p></blockquote>
<p>Donc, en gros, prendre un poster de film et photoshoper un autre film dedans. J&#8217;ai envoyé quelques propositions de qualité variable dont certaines dont j&#8217;étais pas peu fier. J&#8217;ai pas gagné, mais je me suis quand même placé dans les 20 premiers.<br />
A vous de retrouver les films ayant servis d&#8217;inspirations pour les posters ( ça va, c&#8217;est pas bien dur )</p>
<p><center><br />
<a href="http://iq12.com/files/ulu/dacingstar.jpg"><img src="http://iq12.com/files/ulu/dacingstar.jpg" alt="DancesWithWolves" width="140"/></a> <a href="http://iq12.com/files/ulu/duneofarabia.jpg"><img src="http://iq12.com/files/ulu/duneofarabia.jpg" alt="Dune" width="150"/></a> <a href="http://iq12.com/files/ulu/harryjones.jpg"><img src="http://iq12.com/files/ulu/harryjones.jpg" alt="Harry Potter" width="150"/></a> <a href="http://iq12.com/files/ulu/shaolineric.jpg"><img src="http://iq12.com/files/ulu/shaolineric.jpg" alt="Looking for Eric" width="150"/></a><br />
</center></p>
<p>Tous ça pour dire : visitez <a href="http://www.b3ta.com">b3ta</a>, c&#8217;est poilant !</p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/07/24/des-betises/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come &amp; play with my hairy balls &#8230;</title>
		<link>http://iq12.com/blog/2009/07/10/come-play-with-my-hairy-balls/</link>
		<comments>http://iq12.com/blog/2009/07/10/come-play-with-my-hairy-balls/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 12:04:41 +0000</pubDate>
		<dc:creator>ulu</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[lab]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=320</guid>
		<description><![CDATA[&#8230; because they&#8217;re made of PaperVision A little experiment with the line drawing capabilities of PaperVision. (Please open the article to see the flash file or player.)click the pretty picture to open Play with the sliders in the control panel to get various effect, but be careful not to put too many complicated hair ( [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; because they&#8217;re made of PaperVision </p>
<p>A little experiment with the line drawing capabilities of PaperVision.</p>
<p style="text-align: center;"><small>(Please open the article to see the flash file or player.)</small><br /><em>click the pretty picture to open</em></p>
<p>Play with the sliders in the control panel to get various effect, but be careful not to put too many complicated hair ( the &#8220;Nb hair&#8221; &#038; the &#8220;Nodes&#8221; sliders ) or you&#8217;ll break the Internet. The first four sliders are live, the others are not, you&#8217;ll have too wait a few seconds for the changes to be applied.</p>
<p>The thing is full 3D, rendered with PaperVision. The line drawing works very well, as does the Z-Sorting.</p>
<p>The hair roots are placed with the sphere distribution script of <a href="http://en.nicoptere.net/?p=12">Nicolas Barradeau</a>, so thank you Nicolas.</p>
<p><a href="http://iq12.com/blog/wp-content/uploads/2009/07/hairball/Hairball.rar">Here are the sources </a> but you&#8217;ll need <a href="http://code.google.com/p/papervision3d/downloads/list">Papervision3D</a> too.</p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/07/10/come-play-with-my-hairy-balls/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
