<?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/"
	>

<channel>
	<title>Minuit4</title>
	<atom:link href="http://www.minuit4.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.minuit4.fr</link>
	<description>                   </description>
	<pubDate>Sat, 18 Sep 2010 22:52:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>A la découverte des ByteArray</title>
		<link>http://www.minuit4.fr/2009/11/flash/a-la-decouverte-des-bytearray/</link>
		<comments>http://www.minuit4.fr/2009/11/flash/a-la-decouverte-des-bytearray/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 15:15:29 +0000</pubDate>
		<dc:creator>Arno</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS3]]></category>

		<category><![CDATA[ByteArray]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=242</guid>
		<description><![CDATA[Voilà un petit moment qu&#8217;on en entend parler et malgré avoir lu pas mal d&#8217;articles (majoritairement sur le site d&#8217;<a href="http://www.adobe.com" target="_blank">Adobe</a>) que ce soit sur Flex ou sur AIR, je n&#8217;ai jamais trouvé la motivation et/ou l&#8217;idée d&#8217;application pouvant me permettre de me lancer et tenter l&#8217;expérience RIA à proprement parler.
Il y a 2 [...]]]></description>
			<content:encoded><![CDATA[<p>Voilà un petit moment qu&#8217;on en entend parler et malgré avoir lu pas mal d&#8217;articles (majoritairement sur le site d&#8217;<a href="http://www.adobe.com" target="_blank">Adobe</a>) que ce soit sur <strong>Flex </strong>ou sur <strong>AIR, </strong>je n&#8217;ai jamais trouvé la motivation et/ou l&#8217;idée d&#8217;application pouvant me permettre de me lancer et tenter l&#8217;expérience RIA à proprement parler.</p>
<p>Il y a 2 semaines une petite éclaircie dans nos projets m&#8217;a permis de me dégager suffisament de temps pour faire deux petites démos AIR. La première, une application interne permettant aux membres de l&#8217;équipe de prod&#8217; de CBi de remplir leurs taches journalières dans l&#8217;intranet tandis que la seconde m&#8217;a permis de me faire une première approche de l&#8217;API spécifique apportée par <strong>AIR </strong>(accès au système de fichier&#8230;).</p>
<p>La seconde application se présente plus comme une distraction avec la découverte des <a title="ByteArray" href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/utils/ByteArray.html" target="_blank"><em><strong>byteArray </strong></em></a>dans leur ensemble et des spécifications du format SWF. L&#8217;idée de départ était de récupérer le <em><strong>byteArray </strong></em>d&#8217;un fichier SWF, d&#8217;en parser chaque byte jusqu&#8217;à ce que mort s&#8217;en suive, et c&#8217;est le format SWF qui a eu raison de ma curiosité (temporairement tout du moins).</p>
<p>Comme la documentation AS3 le dit si bien : La classe <em><strong>ByteArray </strong></em>comporte des méthodes et des propriétés permettant d’optimiser la lecture, l’écriture et la manipulation des données binaires. Dans l&#8217;idée ce tableau de données est spécifique à chaque format de fichier, d&#8217;où la spécification de chacun des formats, ce qui ouvre comme perspective de pouvoir jouer avec tout un tas de type fichier tel que les pdf  (<a href="http://www.alivepdf.org/" target="_self">AlivePDF</a> par <a title="Dieu sur terre" href="http://www.bytearray.org/" target="_blank">Thibault Imbert</a> aka<a title="Thibault Imbert" href="http://www.bytearray.org/" target="_blank"> Dieu sur terre</a>).</p>
<p>Avant tout, afin de bien comprendre le contenu des <em><strong>ByteArray</strong></em> refaisons un point rapide sur ces histoires d&#8217;<strong>octets</strong>, <strong>bytes </strong>et <strong>bits</strong>, leurs différences ainsi que leurs liens. Le <strong>bit</strong> est un chiffre binaire : basiquement <strong>0 </strong>ou <strong>1</strong>, son exploitation se fait au niveau machine (soit &#8220;très&#8221; bas niveau). On peut facilement confondre les bytes et les bits - vu que pour nous, pauvres francais, les deux se prononcent de la même manière - mais non, le <strong>byte </strong>est un <strong>ensemble de bits</strong>, il peut aussi bien être constituer de 6 bits comme il peut en être constitué de 9. L&#8217;<strong>octet</strong>, quant à lui<strong>, </strong>peut être assimilé à un byte dont la taille est fixe et est de<strong> 8 bits</strong> (comme son nom l&#8217;indique). Pour résumé et avoir une explication un peu plus visuelle :</p>
<div id="attachment_245" class="wp-caption aligncenter" style="width: 325px"><a href="http://www.minuit4.fr/wp-content/uploads/2009/11/sans-titre-2.jpg"><img class="size-full wp-image-245" title="bit, Byte, Octet" src="http://www.minuit4.fr/wp-content/uploads/2009/11/sans-titre-2.jpg" alt="bit, Byte, Octet" width="315" height="295" /></a><p class="wp-caption-text">Bit, Byte, Octet</p></div>
<p>Donc avec un peu d&#8217;imagination, on peut en déduire que les ByteArray sont des tableaux de bytes (je sais&#8230; je me suis donné là). Il s&#8217;agit donc d&#8217;ensembles de bits à tailles variables. Ce schéma permet d&#8217;illustrer l&#8217;idée :</p>
<div id="attachment_247" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.minuit4.fr/wp-content/uploads/2009/11/sans-titre-3.jpg"><img class="size-full wp-image-247" title="ByteArray" src="http://www.minuit4.fr/wp-content/uploads/2009/11/sans-titre-3.jpg" alt="ByteArray" width="450" height="100" /></a><p class="wp-caption-text">ByteArray</p></div>
<p>Voilà à partir de maintenant, il ne nous reste plus qu&#8217;à cibler le format que l&#8217;on souhaite pouvoir interpréter, récupérer ses spécifications et prendre le temps d&#8217;en parser chaque byte. Les spécifications peuvent être vu comme un tableau d&#8217;équivalence c&#8217;est-à-dire qu&#8217;il nous indiquera ce que chaque byte signifie. Pour la petite application AIR, je me suis intéressé au format SWF donc premier réflex : récupérer et lire la spécification du format. Avec les différentes versions de Flash sont apparues autant de versions du format SWF et donc de spécifications, histoire de faire genre (et accessoirement parce qu&#8217;il s&#8217;agit de la version en cours) j&#8217;ai donc récupérer les spec&#8217; du format SWF dans sa version 10, celles-ci sont disponibles gratuitement sur le <a title="Spécification format SWF fp10" href="http://www.adobe.com/devnet/swf/pdf/swf_file_format_spec_v10.pdf" target="_blank">site d&#8217;Adobe</a> (lien direct).</p>
<p>Je n&#8217;ai, pour ainsi dire, aucune expérience dans ce genre de travaux, ni même dans ce genre de lectures, mais en tant que noob j&#8217;aurais tendance à penser que les informations proposées sont amplement suffisantes même pour débuter, le document est bien structurer et bien qu&#8217;il soit écrit en anglais, celà reste très clair. Alors attention, je parle en tant que développeur, celà reste du document très spécifique et je ne le conseillerais pas en lecture de chevet à n&#8217;importe qui, mais si vous êtes technique curieux et que vous avez un peu de temps à perdre, vous y trouverez l&#8217;information souhaitée.</p>
<p>Revenons-en plus particulièrement au petit applicatif que je vais présenter. Celui-ci va nous permettre de lire les informations contenues dans les <em>headers</em> du swf. Ces headers seront systématiquement présent au début du byteArray d&#8217;un fichier SWF, il s&#8217;agit d&#8217;informations qui lui sont spécifiques. Si l&#8217;on suit les spécifications (page 25), il y a 8 champs à lire pour ces headers :</p>
<ul>
<li>3 de signatures (permettra de savoir si il s&#8217;agit d&#8217;un SWF ou un SWC)</li>
<li>1 de version du flash player</li>
<li>1 champs indiquant la taille totale du fichier en bytes (après décompression si compression il y a)</li>
<li>1 permettant de connaitre les dimensions du SWF</li>
<li>1 pour le frameRate</li>
<li>Et 1 pour le nombre de frame totale contenu dans le SWF</li>
</ul>
<p>Dans les spécifications chacun de ces champs sont caractérisés par : un nom, un type (qui détermine vulgairement la taille de l&#8217;ensemble) et une description (histoire quand même de nous aider à comprendre ce qu&#8217;on récupère).</p>
<div id="attachment_251" class="wp-caption aligncenter" style="width: 593px"><a href="http://www.minuit4.fr/wp-content/uploads/2009/11/sans-titre-21.jpg"><img class="size-full wp-image-251" title="Documentation des bytes à récupérer" src="http://www.minuit4.fr/wp-content/uploads/2009/11/sans-titre-21.jpg" alt="Documentation des bytes à récupérer" width="583" height="148" /></a><p class="wp-caption-text">Documentation des bytes à récupérer</p></div>
<p>Chaque type est décrit plus en détails au chapitre 1 (page 11) des spec&#8217;, et pour chacun de ces types on retrouve des méthodes dans la classe <em><strong>ByteArray </strong></em>qui nous permette de les manipuler (lecture ou ecriture). Prenons l&#8217;exemple du type <em>UI8 </em>- <em>Unsigned 8-bit integer</em> - il s&#8217;agit du type de nos 4 premiers champs, la méthode à utiliser afin de lire leur contenu est <a title="ReadUnsignedByte" href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/utils/ByteArray.html#readUnsignedByte()" target="_blank">readUnsignedByte()</a>, cette méthode revoi une valeur située entre <em><strong>0</strong></em> et <strong><em>255 </em></strong>soit, si l&#8217;on se sépare de la base 10 et qu&#8217;on passe en base 16 (c&#8217;est-à-dire en hexadécimal) on récupère donc des valeurs comprises entre <em><strong>0&#215;00 </strong></em>et<em><strong> 0xff. </strong></em>Afin de pouvoir interpréter ces valeurs, nous trouverons des valeurs témoins dans les spécifications.</p>
<div id="attachment_258" class="wp-caption aligncenter" style="width: 580px"><a href="http://www.minuit4.fr/wp-content/uploads/2009/11/sans-titre-31.jpg"><img class="size-full wp-image-258" title="Apercu de l'application" src="http://www.minuit4.fr/wp-content/uploads/2009/11/sans-titre-31.jpg" alt="Apercu de l'application" width="570" height="238" /></a><p class="wp-caption-text">Apercu de l&#39;application</p></div>
<p>Après quelques bonnes heures de réflexion et d&#8217;appréhension de nouvelles notions j&#8217;ai fini par trouver le moyen de récupérer la totalité des informations comprises dans les headers - enfin presque la totalité car je dois reconnaitre que je me suis casser les dents sur les dimensions et le parsing du type Rect. Cependant en téléchargeant et testant l&#8217;application vous vous rendrez compte que ces informations sont présentes. Je tiens à remercier <a title="Julien Laurent" href="http://www.embruns-photographiques.com/" target="_blank">Julien LAURENT</a>, un collègue ayant bosser dans le monde du jeux-vidéo avant de venir se perdre dans le multimédia et le développement de cd-rom chez CBi, avec qui j&#8217;ai l&#8217;occasion d&#8217;échanger sur des réflexions de développement et bien que ces échanges soient encore trop peu fréquent malheuresement, je dois reconnaitre qu&#8217;ils sont toujours très constructifs. Et c&#8217;est à lui qu&#8217;on doit le parsing du type Rectangle et la récupération des dimensions.</p>
<p><a title="Application Gneuh Minuit4" href="http://www.minuit4.fr/wp-content/uploads/Gneuh.air" target="_blank">Télécharger et tester l&#8217;application AIR</a></p>
<p><a title="Sources Gneuh Minuit4" href="http://www.minuit4.fr/wp-content/uploads/GneuhSources.rar" target="_blank">Télécharger les sources</a></p>
<p>Si j&#8217;ai du temps, il se pourrait que je poursuive cette classe afin de permettre de récupérer le plus d&#8217;informations possibles,c&#8217;est toujours très instructif. Pour d&#8217;avantages d&#8217;informations sur le fonctionnement même de l&#8217;application, n&#8217;hésitez pas à me faire des retours et ce sera avec plaisir que je reposterais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/11/flash/a-la-decouverte-des-bytearray/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Coordonnées des points d&#8217;une sphère</title>
		<link>http://www.minuit4.fr/2009/11/flash/coordonnees-des-points-dune-sphere/</link>
		<comments>http://www.minuit4.fr/2009/11/flash/coordonnees-des-points-dune-sphere/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 21:22:46 +0000</pubDate>
		<dc:creator>Floz</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[bitmapdata]]></category>

		<category><![CDATA[coordonnées de points]]></category>

		<category><![CDATA[fp10]]></category>

		<category><![CDATA[matrix3D]]></category>

		<category><![CDATA[sphère]]></category>

		<category><![CDATA[vector3D]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=238</guid>
		<description><![CDATA[Vendredi, avec des potes de promo on s&#8217;est mis en tête de transformé un exercice de flash en l&#8217;occasion de se faire une petite battle expérimentale.
En gros, chacun de nous va faire une sorte de planète qui sera intégrée un swf final. Le but étant que lorsqu&#8217;on cliquera sur cette planète, des particules (ou autres) [...]]]></description>
			<content:encoded><![CDATA[<p>Vendredi, avec des potes de promo on s&#8217;est mis en tête de transformé un exercice de flash en l&#8217;occasion de se faire une petite battle expérimentale.<br />
En gros, chacun de nous va faire une sorte de planète qui sera intégrée un swf final. Le but étant que lorsqu&#8217;on cliquera sur cette planète, des particules (ou autres) en sortiront pour se balader dans l&#8217;écran ou attaquer les autres.<br />
Ça peut être bien funky, et puis c&#8217;est l&#8217;occasion de mettre les mains dans un taff un peu différent de ce que je fais en règle générale.</p>
<p>David (un des potes participant) m&#8217;avait fait rêver en me montrant <a href="http://wonderfl.net/code/03190641c00b157abc0dbe7d6a513fa80ec987db">ça</a>, que je trouve bien chouettos, et j&#8217;ai eu l&#8217;occasion de fouiller dans wonderfl pour regarder ce qui s&#8217;y trouve. Ben c&#8217;est violent. <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Je suis tombé sur <a href="http://wonderfl.net/code/c0f513f31389ba07e375331256c2bfa3a8b9006c">cette sphère en 3D</a> dont je me suis totalement inspiré.</p>
<p>Cet exercice aura été l&#8217;occasion pour moi de jouer avec l&#8217;api du flash player 10, notamment les <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/geom/Matrix3D.html#appendRotation%28%29">Matrix3D</a>, <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/geom/Utils3D.html#projectVector%28%29">Utils3D</a> et <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/geom/Vector3D.html">Vector3D</a>; qui sont des supers outils. Il va falloir que je continue à regarder de ce côté !</p>
<p>Le premier résultat :<br />
<object type="application/x-shockwave-flash" width="500" height="500">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/planet/planet1.swf" />
<embed type="application/x-shockwave-flash" width="500" height="500" src="http://www.minuit4.fr/blog_assets/swf/planet/planet1.swf" >
</object>
</p>
<p>Le plus chiant aura été de trouver les coordonnées des points sur une sphère. Sur un cercle, ok pas de souci, mais sur une sphère ça se complique.<br />
Je suis arrivé sur <a href="http://fr.wikipedia.org/wiki/Coordonn%C3%A9es_sph%C3%A9riques">cette page de wikipédia, qui parlait des coordonnées sphérique</a>, le seul problème c&#8217;est que leurs formules ne sont pas appropriées au repère de flash, mais à un repère cartésien. (Le repère de flash a l&#8217;axe des z inversé).</p>
<p>Du coup j&#8217;ai continué de googleisé, parce que mon pauvre savoir trigonométrique s&#8217;arrête au plan, et je suis tombé sur <a href="http://local.wasp.uwa.edu.au/~pbourke/geometry/spherepoints/">cette page</a>. Et là, jackpot; les sin/cos ne sont pas les même et fonctionnent parfaitement dans flash.<br />
Résultat :<br />
x = r * cos(phi) * cos(theta);<br />
y = r * cos(phi) * sin(theta);<br />
z = r * sin(phi);</p>
<p>&#8220;<strong>theta</strong>&#8221; doit être compris entre 0 et 360° et &#8220;<strong>phi</strong>&#8221; entre 0 et 90°, et &#8220;<strong>r</strong>&#8221; correspond au rayon de la sphère.</p>
<p>J&#8217;ai un peu continué pour tenté de mettre un noyau comme centre de la sphère, mais ça bougera surement par la suite.</p>
<p><object type="application/x-shockwave-flash" width="500" height="500">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/planet/planet2.swf" />
<embed type="application/x-shockwave-flash" width="500" height="500" src="http://www.minuit4.fr/blog_assets/swf/planet/planet2.swf" >
</object>
</p>
<p>Pour ceux qui seraient intéressés par <a href="http://www.minuit4.fr/uploads/planet.rar">les sources, elles sont téléchargeables ici</a>.</p>
<p>A suivre !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/11/flash/coordonnees-des-points-dune-sphere/feed/</wfw:commentRss>
		</item>
		<item>
		<title>M4Tween - Javascript</title>
		<link>http://www.minuit4.fr/2009/08/javascript/m4tween-javascript/</link>
		<comments>http://www.minuit4.fr/2009/08/javascript/m4tween-javascript/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 19:29:57 +0000</pubDate>
		<dc:creator>Arno</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[LinkedList]]></category>

		<category><![CDATA[M4Tween]]></category>

		<category><![CDATA[Prototype]]></category>

		<category><![CDATA[tween]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=216</guid>
		<description><![CDATA[Depuis que je me suis mis plus sérieusement au javascript, je me suis toujours dit que çà pourrait être interessant de coder un petit moteur de Tween pour gérer de l&#8217;animation de base ou encore faire des benchmarks.
Alors oui ça existe déjà, certains sont même très performants (Scriptaculous&#8230;), ou encore directement intégré dans une librairie [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis que je me suis mis plus sérieusement au javascript, je me suis toujours dit que çà pourrait être interessant de coder un petit moteur de Tween pour gérer de l&#8217;animation de base ou encore faire des benchmarks.<br />
Alors oui ça existe déjà, certains sont même très performants (Scriptaculous&#8230;), ou encore directement intégré dans une librairie (Jquery&#8230;) mais le but ici n&#8217;est pas de remplacer ces librairies, dans un premier temps il s&#8217;agit de me faire une petite expérience javascript ainsi que de me permettre de manipuler un pattern dont <a href="http://www.minuit4.fr/florian-zumbrunn/">Flo </a>m&#8217;a parler : les <a href="http://www.minuit4.fr/2009/05/flash/passer-par-des-linkedlist-pour-gagner-en-performances/">linkedList</a> (pour, ensuite, conquérir le monde). </p>
<p>Pour ce qui est de l&#8217;organisation générale, j&#8217;ai repris le principe que Flo avait déjà mis en place pour les <a href="http://www.minuit4.fr/2009/07/flash/m4tween-premier-jet/">M4Tween</a>, excepté pour ce qui est de d&#8217;<a href="http://www.minuit4.fr/2009/07/flash/object-pooling/">objet pooling</a> que j&#8217;implenterais sans doute plus tard.<br />
La classe M4Tween javascript requiert la librairie <a href="http://www.prototypejs.org/">Prototype</a> pour son excecution. On utilise notamment l&#8217;objet <a href="http://www.prototypejs.org/api/periodicalExecuter">PeriodicalExcecuter</a> pour émuler l&#8217;évènnement EnterFrame, ainsi que l&#8217;objet <a href="http://www.prototypejs.org/api/template">Template</a> afin de pouvoir gérer facilement les propriétés css particulières (telles que la rotation par exemple).</p>
<p>Plutôt que de m&#8217;arracher les cheveux avec un navigateur qui ne respecte pas grand chose, j&#8217;ai fais l&#8217;impasse sur IE. Les tests effectués se sont trouvés concluant pour <a href="http://www.mozilla-europe.org/fr/firefox/">firefox 3.5</a>, <a href="https://developer.mozilla.org/devnews/index.php/2009/08/07/firefox-3-6-alpha-1-now-available-for-download/">firefox 3.6 alpha1</a>, <a href="http://www.google.com/chrome/">Chrome 2.0</a>, <a href="http://www.google.com/chrome/">Chrome 3.0</a> ainsi qu&#8217;<a href="http://www.opera.com/browser/next/">Opéra 10 beta 2</a>.</p>
<p>Exemple d&#8217;utilisation simple de la classe : </p>
<pre class="brush: java">
&lt;div id=&quot;myDiv&quot;&gt;&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;path/to/prototype.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;path/to/M4Tween.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
//instanciation de la classe
M4Tween.create(&quot;myDiv&quot;, .7, {&quot;marginLeft&quot;:&quot;150px&quot;,&quot;opacity&quot;:.5});
&lt;/script&gt;
</pre>
<p>Pour ce qui est des propriétés que l&#8217;on peut modifier, il n&#8217;y a que quelques propriétés supportées pour le moment : marginLeft, marginTop, opacity, top, left, width, height&#8230;</p>
<p>Les paramètres attendus par la méthode d&#8217;instanciation sont : </p>
<p><strong>M4Tween.create(id, duree, params, onCompleteCallBack);</strong><br />
-id de l&#8217;élément du DOM à manipuler<br />
-durée de l&#8217;animation<br />
-paramètres ( {ease:Linera.easeNone, &#8220;marginLeft&#8221;:&#8221;140px&#8221;} )<br />
-fonction à appeler à la fin de l&#8217;animation</p>
<p>Les fonctions de easing sont les mêmes que pour la version AS3, il s&#8217;agit des équations de <a href="http://www.robertpenner.com/">Robet Penner</a>.</p>
<p>Enfin voici quelques démo du moteur en action sur <a href="http://arno.minuit-4.fr/M4Tween/50.html">50 div</a>, <a href="http://arno.minuit-4.fr/M4Tween/100.html">100 div</a>, <a href="http://arno.minuit-4.fr/M4Tween/150.html">150 div</a>, <a href="http://arno.minuit-4.fr/M4Tween/200.html">200 div </a>et <a href="http://arno.minuit-4.fr/M4Tween/250.html">250 div</a>.</p>
<p><a href="http://arno.minuit-4.fr/M4Tween/script/M4Tween.js">M4Tween.js</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/08/javascript/m4tween-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Object Pooling</title>
		<link>http://www.minuit4.fr/2009/07/flash/object-pooling/</link>
		<comments>http://www.minuit4.fr/2009/07/flash/object-pooling/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 11:21:58 +0000</pubDate>
		<dc:creator>Floz</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Design pattern]]></category>

		<category><![CDATA[LinkedList]]></category>

		<category><![CDATA[object pooling]]></category>

		<category><![CDATA[tween]]></category>

		<category><![CDATA[tweensy]]></category>

		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=205</guid>
		<description><![CDATA[Ça fait un moment que je veux mettre à plat ce que j&#8217;ai compris vis à vis des techniques d&#8217;Object Pooling et de Linked List, et nous y voilà. On va commencer par l&#8217;Object Pooling.
L&#8217;Object Pooling est une structure de programmation (ou Design Pattern) qui consiste en une liste d&#8217;objets disponibles à l&#8217;utilisation.
En gros, au [...]]]></description>
			<content:encoded><![CDATA[<p>Ça fait un moment que je veux mettre à plat ce que j&#8217;ai compris vis à vis des techniques d&#8217;Object Pooling et de Linked List, et nous y voilà. On va commencer par l&#8217;Object Pooling.</p>
<p>L&#8217;Object Pooling est une structure de programmation (ou Design Pattern) qui consiste en <strong>une liste d&#8217;objets disponibles à l&#8217;utilisation</strong>.</p>
<p>En gros, au lieu de passer par un <em>new PooledObject( params&#8230; )</em>, on utilisera une méthode similaire à <em>Pool.create( params&#8230; )</em>, qui nous renverra le <em>PooledObject</em> en question (comme nous l&#8217;aurait fait <em>new PooledObject( params&#8230; )). </em>La différence principale réside dans le fait que, derrière, la classe <em>Pool</em> regorge un certains nombres d&#8217;objets qui n&#8217;attendent qu&#8217;à être utilisés.</p>
<p>Instancier un objet, et passer par l&#8217;opérateur <em>new</em> s&#8217;avère assez gourmand en ressources. Du coup, créer une liste d&#8217;objet s&#8217;avère intéressant car :<br />
- On instancie les objets par pack (la quantité est à définir en fonction des besoins),<br />
- Une seule référence pour toute la liste (et donc tous les objets) est nécessaires.</p>
<p>Cette structure nous offre donc<strong> un gain en terme de performances, et de mémoire</strong>.</p>
<p>Voyons ce que ça donne au niveau du code. J&#8217;ai fais quelques schémas aussi pour représenter visuellement ce qu&#8217;il se passe <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
A noter que le modèle de code provient <a href="http://wiki.joa-ebert.com/index.php/Pool">du wiki de Joa Ebert</a>. C&#8217;est à partir de ce lien que j&#8217;ai appris quasiment tout ce que je sais à propos de l&#8217;Object Pooling.</p>
<p><strong>1) L&#8217;initialisation de la liste.</strong></p>
<p>Dans le lien ci dessus, l&#8217;initialisation de la liste se fait au premier appel de la méthode statique <em>create()</em>;</p>
<pre class="brush: java">
// - CONSTS ----------------------------------------------------------------------

private const GROWTH_RATE:int = 4;

// - PRIVATE VARIABLES -----------------------------------------------------------

private var _allowInstanciation:Boolean;
private var _availableInPool:int;
private var _currentPooledCircle:PooledCircle;

private var _next:PooledCircle;

public static function create():PooledCircle
{
var pooledCircle:PooledCircle;

if ( !_availableInPool )
{
var i:int = GROWTH_RATE;
while ( --i &gt; -1 )
{
_allowInstanciation = true; {
pooledCircle = new PooledCircle();
} _allowInstanciation = false;

pooledCircle._next = _currentPooledCircle;
_currentPooledCircle = pooledCircle;
}

_availableInPool = GROWTH_RATE;
}

pooledCircle = _currentPooledCircle;
_currentPooledCircle = pooledCircle._next;

--_availableInPool;

return pooledCircle;
}
</pre>
<p>Ici, l&#8217;instanciation des objets se fait à partir d&#8217;une boucle <em>while</em>.<strong> Dans cet exemple, le premier objet crée au sein de cette boucle, sera le dernier disponible de la liste</strong>.<br />
On note aussi l&#8217;existence d&#8217;une variable <em>_currentPooledCircle</em>. Celle ci contient la référence au prochain objet qui sera utilisé, et donc à l&#8217;objet renvoyé lors de l&#8217;appel de la méthode <em>create()</em>.</p>
<p>A l&#8217;appel de la méthode <em>create()</em>, la valeur de <em>_currentPooledCircle</em> change : elle devient <em>_currentPooledCircle._next</em>, soit le prochain objet disponible.</p>
<p>Si <em>_availableInPool</em> arrive à 0, c&#8217;est qu&#8217;il n&#8217;y a plus d&#8217;objets disponibles. Ainsi, nous devons &#8220;refaire le plein&#8221; d&#8217;objets. A noter que lorsque <em>_availableInPool</em> est égal à 0, la valeur de <em>_currentPoolCircle</em> est null.</p>
<p>Bon, visuellement ça donne ça :</p>
<div id="attachment_206" class="wp-caption aligncenter" style="width: 316px"><img class="size-full wp-image-206" title="initialization" src="http://www.minuit4.fr/wp-content/uploads/2009/07/initialization.jpg" alt="Initialisation de la liste d'objets" width="306" height="94" /><p class="wp-caption-text">Initialisation de la liste d&#39;objets</p></div>
<p><span style="color: #008000;">Les pastilles vertes</span> correspondent à des objets disponibles.<br />
<span style="color: #99cc00;">La pastille vertes clair/tournant au jaune</span> correspond à <em>_currentPooledCircle</em> et donc au prochain objet qui sera utilisé.<br />
<span style="color: #ff9900;">La pastille avec une croix orange</span> correspond à un élément <em>null</em>.<br />
Les flèches correspondent au lien entre chaque objet. Elles représentent la valeur de <em>_next.</em></p>
<p><strong>2) Création (récupération) d&#8217;un élément : appel à la méthode create().</strong></p>
<p>Dans notre cas, l&#8217;initialisation se fait lors du premier appel de la méthode <em>create()</em>. Ainsi, l&#8217;initialisation sera directement suivi de l&#8217;attribution du premier objet disponible. Il y aura donc un objet disponible en moins dans la liste.<br />
Le schéma qui va suivre représente plusieurs appel de la méthode <em>create()</em>, jusqu&#8217;à ce que _<em>availableInPool </em>soit égal à 0.</p>
<div id="attachment_207" class="wp-caption aligncenter" style="width: 316px"><img class="size-full wp-image-207" title="creation" src="http://www.minuit4.fr/wp-content/uploads/2009/07/creation.jpg" alt="Création des éléments jusqu'à saturation." width="306" height="269" /><p class="wp-caption-text">Création des éléments jusqu&#39;à saturation.</p></div>
<p>Une nouvelle pastille fait son apparition : <span style="color: #ff0000;">pastille rouge</span>, pour illustrer un élément &#8220;utilisé&#8221;.</p>
<p>A la fin du schéma, nous sommes donc à :<br />
- _<em>availableInPool </em>= 0;<br />
- _<em>currentPooledCircle </em>= <em>null</em>;</p>
<p>Sur le schéma, _<em>currentPooledCircle </em>est représenté par la pastille avec la croix orange.</p>
<p>Le prochain appel à la méthode<em> create() </em>se résultera par un nouveau remplissage de la liste.</p>
<p><strong>3) Ré-initialisation de la liste.</strong></p>
<p>Voici le schéma représentatif :</p>
<div id="attachment_208" class="wp-caption aligncenter" style="width: 316px"><img class="size-full wp-image-208" title="reinitilization" src="http://www.minuit4.fr/wp-content/uploads/2009/07/reinitilization.jpg" alt="Nouvel appel à la méthode create() à la fin du dernier schéma." width="306" height="142" /><p class="wp-caption-text">Nouvel appel à la méthode create() à la fin du dernier schéma.</p></div>
<p>Ainsi, on conserve bien nos anciens objets. Ils sont toujours &#8220;là&#8221;.<br />
Mais de nouveaux font leurs apparition, et eux ils sont disponibles à l&#8217;utilisation. A cet instant, la valeur de _<em>availableInPool </em>vient de passer à 4 (qui est la valeur de <em>GROWTH_RATE</em>).</p>
<p>Les deux dernières étapes se répèteront infiniment, au besoin.</p>
<p><strong>4) Suppression d&#8217;un élément de la liste.</strong></p>
<p>L&#8217;Object Pooling offrant comme principal avantage l&#8217;économisation de l&#8217;instanciation d&#8217;un objet (<strong>on privilégie la réutilisation</strong>), il serait intéressant de pouvoir rendre de nouveau disponible un objet qui ne l&#8217;est plus.</p>
<p>Dans la structure proposé par Joa Ebert, on a le modèle suivant :</p>
<pre class="brush: java">
public static function release( pooledCircle:PooledCircle ):void
{
pooledCircle._next = _currentPooledCircle;
_currentPooledCircle = pooledCircle;

++_availableInPool;
}

public function dispose():void
{
release( this );
}
</pre>
<p>Ainsi, rendre disponible un objet se fera par l&#8217;appel de la méthode <em>dispose()</em> <em>(public)</em> de celui ci.<br />
<em><strong>Ex :</strong> pooledCircle.dispose(); // Soit pooledCircle une instance renvoyée par la méthode create();<br />
</em></p>
<p>Ou par la méthode <em>release (public static)</em> de la classe PooledCircle.<br />
<em><strong>Ex :</strong> PooledCircle.release( pooledCircle );</em></p>
<p>Il s&#8217;en suit donc la remise en disposition de l&#8217;objet qui vient d&#8217;être libérer. La valeur de <em>_currentPooledCircle</em> devient donc égale à <em>pooledCircle </em>de nos exemples précédents.<br />
L&#8217;ancienne valeur de <em>_currentPooledCircle</em> est attribuée à <em>pooledCircle.next()</em>;</p>
<p>Le schéma représentatif :</p>
<div id="attachment_209" class="wp-caption aligncenter" style="width: 316px"><img class="size-full wp-image-209" title="deletion" src="http://www.minuit4.fr/wp-content/uploads/2009/07/deletion.jpg" alt="deletion" width="306" height="259" /><p class="wp-caption-text">Suppression des objets d&#39;une liste via la méthode dispose() ou release()</p></div>
<p style="text-align: left;">En 1), l&#8217;état de la liste après 3 appels de la méthode <em>create()</em>.<br />
En 2), l&#8217;état de la liste après un appel de la méthode <em>release( pooledCircle:PooledCircle )</em> ou <em>dispose()</em> (cf plus haut), sur le second objet qui a été récupéré via la méthode <em>create()</em>.<br />
En 3), l&#8217;état de la liste après un autre appel de la méthode <em>release( pooledCircle:PooledCircle )</em><em> </em>ou <em>dispose()</em>, sur le premier objet qui a été récupéré via la méthode <em>create()</em>.</p>
<p><strong>Il faut donc bien noter qu&#8217;on ne supprime pas un objet, on le rend de nouveau disponible</strong> (ne pas oublier de libérer les références de l&#8217;ancienne vie de l&#8217;objet, pour libérer la mémoire et éviter les comportements chelou au moment d&#8217;une nouvelle attribution).</p>
<p><strong>4) Conclusion</strong></p>
<p>Il est donc intéressant de passer par une liste d&#8217;objets de la sorte, notamment lorsqu&#8217;un certain nombre d&#8217;objets doit être crée.<br />
<a href="http://code.google.com/p/tweensy/">Tweensy, moteur de tween,</a> utilise d&#8217;ailleurs <a href="http://code.google.com/p/tweensy/source/browse/trunk/releases/source/cs3/original/com/flashdynamix/utils/ObjectPool.as">une structure d&#8217;Objet Pooling</a>, couplé a un <em>Array </em>pour pouvoir parcourir la liste des objets crées.</p>
<p>C&#8217;est aussi ce que j&#8217;ai souhaité faire avec M4Tween, couplé a une linked list (plus intéressant d&#8217;itérer de cette manière qu&#8217;à travers un tableau). Mais je dois revoir quelques trucs sur la classe de M4Tween&#8230;</p>
<p>Je pense que je posterai prochainement sur les LinkedList.<br />
En attendant, vous trouverez pas mal d&#8217;infos à ce sujet sur <a href="http://en.wikipedia.org/wiki/Linked_list">wikipedia</a> et encore et toujours sur <a href="http://wiki.joa-ebert.com/index.php/LinkedList">le wiki de Joa Ebert</a>. A noter que le wiki de Joa Ebert ne propose qu&#8217;une représentation unique d&#8217;une LinkedList. Vous verrez sur wikipedia qu&#8217;il en existe plusieurs <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Si des choses ne sont pas claires, n&#8217;hésitez pas !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/07/flash/object-pooling/feed/</wfw:commentRss>
		</item>
		<item>
		<title>M4Tween premier jet</title>
		<link>http://www.minuit4.fr/2009/07/flash/m4tween-premier-jet/</link>
		<comments>http://www.minuit4.fr/2009/07/flash/m4tween-premier-jet/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 16:35:48 +0000</pubDate>
		<dc:creator>Floz</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[joa ebert performances]]></category>

		<category><![CDATA[linked list]]></category>

		<category><![CDATA[M4Tween]]></category>

		<category><![CDATA[Pool]]></category>

		<category><![CDATA[Tween engine]]></category>

		<category><![CDATA[tweener]]></category>

		<category><![CDATA[Tweenlite]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=199</guid>
		<description><![CDATA[J&#8217;ai un peu mis en pause mon application en flex de peinture avec les rubans. J&#8217;y reviendrai surement plus tard : j&#8217;ai quelques projets en flash avant.
Quand on était à HETIC, on discutait avec Arno de mettre les mains soit dans un moteur de physique/détection de collisions, soit dans un moteur de tween. Le moteur [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai un peu mis en pause mon application en flex de peinture avec les rubans. J&#8217;y reviendrai surement plus tard : j&#8217;ai quelques projets en flash avant.<br />
Quand on était à HETIC, on discutait avec Arno de mettre les mains soit dans un moteur de physique/détection de collisions, soit dans un moteur de tween. Le moteur de tween étant plus simple à appréhender seul, du moins je pense, je me suis mis la tête dedans depuis une semaine.</p>
<p>Je suis pas mal le blog de Joa Ebert, notamment pour tout ce qui concerne l&#8217;optimisation des performances. J&#8217;en parlais dans mon post sur les LinkedList d&#8217;ailleurs. Il écrivait qu&#8217;il y avait fortement moyen d&#8217;obtenir de <a href="http://blog.joa-ebert.com/2008/05/07/tweening-and-object-pools/">meilleurs perfs en utilisant une structure d&#8217;objet pooling, et des linkedList, au lieu de passer par des Array</a>.<br />
C&#8217;est donc ce que j&#8217;ai voulu faire, puisqu&#8217;il a dit que c&#8217;était bien, et qu&#8217;en plus il l&#8217;avait testé pour obtenir un résultat&#8230; impressionnant ? (<a href="http://www.joa-ebert.com/swf/index.php?swf=tween/Hobnox">son moteur de tween chez Hobnox</a> contre <a href="http://www.joa-ebert.com/swf/index.php?swf=tween/TweenLite">tweenlite</a>).<br />
Bon, une chose est sure : la magie a moins (beaucoup moins ?) bien fonctionné de mon côté&#8230; <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>En tout cas, j&#8217;ai pas mal appris en terme de réflexion, ainsi que sur l&#8217;utilisation des Object, des <a href="http://en.wikipedia.org/wiki/Linked_list">Linked List</a>, et des <a href="http://wiki.joa-ebert.com/index.php/Pool">Pools</a>. Je pense d&#8217;ailleurs faire mon prochain post sur ce sujet, ça pourrait être intéressant (et plus clair que celui que j&#8217;avais fais pour l&#8217;effet de désintégration !).</p>
<p>Voilà ce que ça donne<strong><span style="color: #ff0000;"> (attention, 1000 objets qui bougent. Cliquez sur le swf pour lancer, et recliquez pour arrêter ;))</span></strong><br />
Avec Tweenlite :</p>
<p><object type="application/x-shockwave-flash" width="500" height="500">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/m4tween/TweenLite.swf" />
<embed type="application/x-shockwave-flash" width="500" height="500" src="http://www.minuit4.fr/blog_assets/swf/m4tween/TweenLite.swf" >
</object>
</p>
<p>Avec Tweener :</p>
<p><object type="application/x-shockwave-flash" width="500" height="500">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/m4tween/Tweener.swf" />
<embed type="application/x-shockwave-flash" width="500" height="500" src="http://www.minuit4.fr/blog_assets/swf/m4tween/Tweener.swf" >
</object>
</p>
<p>Avec M4Tween :</p>
<p><object type="application/x-shockwave-flash" width="500" height="500">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/m4tween/M4Tween.swf" />
<embed type="application/x-shockwave-flash" width="500" height="500" src="http://www.minuit4.fr/blog_assets/swf/m4tween/M4Tween.swf" >
</object>
</p>
<p>Du côté des résultats, j&#8217;ai ici 32/33 pour TweenLite et 36/37 pour M4Tween. Donc c&#8217;est assez similaire, et beaucoup moins ouf de ce que Joa Ebert à fait (gneuh). Les FPS oscille beaucoup aussi je trouve sur M4Tween&#8230;<br />
Bon, le but n&#8217;est pas de remplacer TweenLite (M4Tween peut juste bouger le bordel, il n&#8217;y a pas de plugins pour faire des transitions de couleurs etc.), mais d&#8217;avoir un moteur de tween interne au framework minuit4, pour nos propres outils.</p>
<p>Donc là, je me sors un peu la tête de ce code. Je verrais dans quelques jours si je vois pas des choses à changer/une partie de la structure à revoir.<br />
Arno pense le porter en JS, donc il y verra surement des choses à revoir. <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>En ce qui concerne son utilisation :<br />
<strong>Pour créer une Tween :</strong> <span style="color: #008080;">M4Tween</span>.create( l&#8217;objet sur lequel appliquer la tween, la durée de la tween en secondes, { x: la valeur, y: la valeur, &#8230;, easing: Quad.EaseIn, delay: la durée en seconde, onComplete : nomdefonction, onCompleteParams: [ param1, param2, ... ] });<br />
<strong>Pour supprimer une Tween :</strong> <span style="color: #008080;">M4Tween</span>.release( laTween );<br />
<strong>Pour supprimer une Tween (alternative) :</strong> laTween.dispose();<br />
<strong>Pour supprimer une Tween d&#8217;un objet :</strong> <span style="color: #008080;">M4Tween</span>.releaseTweenOf( l&#8217;objet sur lequel a été appliqué la tween );</p>
<p>Les commentaires sont légers pour le moment, j&#8217;y reviendrai prochainement.</p>
<p>Pour terminer, l&#8217;outil de mesure de performance de minuit4 se voit doté d&#8217;une nouvelle fonctionnalité : calculer la moyenne des FPS sur la durée !</p>
<p><a href="http://www.minuit4.fr/uploads/M4Tween.rar">Télécharger les sources de M4Tween ici.</a><br />
<a href="http://www.minuit4.fr/uploads/PerfsCheck.rar">Télécharger les sources de l&#8217;outil de mesure de performances ici.</a><br />
<a href="http://code.google.com/p/minuit4/source/browse/">Le lien vers le SVN de minuit4 ici.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/07/flash/m4tween-premier-jet/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Peindre avec des ribbons en flash</title>
		<link>http://www.minuit4.fr/2009/06/flash/playing-with-ribbons-en-flash/</link>
		<comments>http://www.minuit4.fr/2009/06/flash/playing-with-ribbons-en-flash/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 12:10:42 +0000</pubDate>
		<dc:creator>Floz</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Graphisme]]></category>

		<category><![CDATA[AS3]]></category>

		<category><![CDATA[natzke]]></category>

		<category><![CDATA[ribbons]]></category>

		<category><![CDATA[rotation point]]></category>

		<category><![CDATA[trigonométrie en flash]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=189</guid>
		<description><![CDATA[J&#8217;ai commencé à me mettre sérieusement à flash après avoir vu une conférence d&#8217;<a href="http://jot.eriknatzke.com/">Erik Natzke</a> lors de <a href="http://www.flashfestival.net/2007/index.php?r=Programme&#38;sr=Conf%E9rences">l&#8217;édition 2007 du web flash festival au centre george pompidou</a>. Et depuis ce moment, j&#8217;ai toujours bavé sur ses réalisations, et le fait de pouvoir créer une toile via du code.
Depuis une semaine je me suis [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai commencé à me mettre sérieusement à flash après avoir vu une conférence d&#8217;<a href="http://jot.eriknatzke.com/">Erik Natzke</a> lors de <a href="http://www.flashfestival.net/2007/index.php?r=Programme&amp;sr=Conf%E9rences">l&#8217;édition 2007 du web flash festival au centre george pompidou</a>. Et depuis ce moment, j&#8217;ai toujours bavé sur ses réalisations, et le fait de pouvoir créer une toile via du code.</p>
<p>Depuis une semaine je me suis mis à réfléchir et travailler sur : comment reproduire ces brushes en forme de rubans (ribbons) ?<br />
Je viens d&#8217;arriver à un résultat assez stable et plutôt convaincant, même si ce n&#8217;est qu&#8217;un début. Et ça m&#8217;a fait bosser de nouveau sur quelques formules trigonométriques <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>La difficulté principale de l&#8217;exercice était de dessiner à chaque fois un quadrilatère dont la taille et variable. Et ce n&#8217;est pas forcément un rectangle, il fallait donc non pas passer par la méthode drawRect(), mais par les bons vieux lineTo.<br />
Étant donné que le tracé sera en fonction de la position p1, puis p2 de la souris, il nous faut récupérer l&#8217;angle d&#8217;inclinaison de ce segment, et l&#8217;appliquer à chaque point du quadrilatère.</p>
<p>Dis comme ça, ça doit sembler assez fouilli, donc passons par des exemples :</p>
<p><span style="text-decoration: underline;">Tracer d&#8217;un segment d&#8217;après un angle.</span></p>
<p>Cette première expérience avait pour but de comprendre comment tracer un segment, d&#8217;après un angle et une distance (rayon). Autrement dit, d&#8217;appliquer une rotation à un point.<br />
La formule le permettant est la suivante :<br />
<em>p.x = rayon * cos( angle en radian );<br />
p.y = rayon * sin( angle en radian );</em></p>
<p>Pour récupérer un angle en fonction d&#8217;une trajectoire donnée, en flash, on passe par Math.atan2( y, x ).<br />
atan2 correspond à <a href="http://fr.wikipedia.org/wiki/Fonction_arctangente">arctan</a>. La méthode se base sur le point d&#8217;origine (0, 0 ).</p>
<p><object type="application/x-shockwave-flash" width="500" height="200">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/ribbons/degres01.swf" />
<embed type="application/x-shockwave-flash" width="500" height="200" src="http://www.minuit4.fr/blog_assets/swf/ribbons/degres01.swf" >
</object>
</p>
<p><a href="http://minuit4.fr/uploads/ribbons/degres01.fla">Télécharger le .fla (CS3)<br />
</a><a href="http://code.google.com/p/floz/source/browse/trunk/OFFLINE/RIBBONS/lib/degres01.as">Accéder au fichier .as</a></p>
<p><span style="text-decoration: underline;">Appliquer une rotation à un rectangle en appliquant une rotation à chacun de ses points.</span></p>
<p>Ma seconde expérience se porta sur la rotation d&#8217;un rectangle entier, autrement dit de ses 4 points.<br />
Au passage, je suis tombé sur une seconde formule, beaucoup plus bavarde, pour appliquer une rotation a un point :<br />
<em>p.x = cos( angle en radians ) * pointToRotate.x - sin( angle en radians ) * pointToRotate.y;<br />
p.y = sin( angle en radians ) * pointToRotate.x + cos( angle en radiants ) * pointToRotate.y;</em></p>
<p>On préfèrera donc la première, hein <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>A chaque clic sur la scène, la valeur de l&#8217;angle à ajouter à l&#8217;angle de base sera incrémenté de 10. Ainsi, le rectangle à gauche (angle = 0), deviendra celui de droite a chaque clic.<br />
Dans l&#8217;idée d&#8217;un point A( x, y ), on aurait donc :<br />
<em>x = rayon * Math.cos( Math.atan2( ya, xa ) + ( 10 * n ) * Math.PI / 180;<br />
y = rayon * Math.sin( Math.atan2( ya, xa ) + ( 10 * n ) * Math.PI / 180;</em></p>
<p><object type="application/x-shockwave-flash" width="500" height="300">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/ribbons/degres02.swf" />
<embed type="application/x-shockwave-flash" width="500" height="300" src="http://www.minuit4.fr/blog_assets/swf/ribbons/degres02.swf" >
</object>
</p>
<p><a href="http://minuit4.fr/uploads/ribbons/degres02.fla">Télécharger le .fla (CS3)<br />
</a><a href="http://code.google.com/p/floz/source/browse/trunk/OFFLINE/RIBBONS/lib/degres02.as">Accéder au fichier .as</a></p>
<p><span style="text-decoration: underline;">Combinaison des deux premières expériences.</span></p>
<p>Bon, à l&#8217;époque j&#8217;avais pas encore totalement assimilé les deux premières étapes, ni les formules. Du coup, je suis passé par une étape supplémentaire qui correspond à combinaison des deux premières : on trace un segment, et le rectangle se calque dessus.</p>
<p><object type="application/x-shockwave-flash" width="500" height="300">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/ribbons/degres03.swf" />
<embed type="application/x-shockwave-flash" width="500" height="300" src="http://www.minuit4.fr/blog_assets/swf/ribbons/degres03.swf" >
</object>
</p>
<p><a href="http://code.google.com/p/floz/source/browse/trunk/OFFLINE/RIBBONS/lib/degres02.as">Télécharger le .fla (CS3)<br />
</a><a href="http://code.google.com/p/floz/source/browse/trunk/OFFLINE/RIBBONS/lib/degres03.as">Accéder au fichier .as</a></p>
<p><span style="text-decoration: underline;">L&#8217;application dans un enterFrame.</span></p>
<p>Étant donné qu&#8217;à ce moment là, j&#8217;avais tout pour que ça fonctionne, j&#8217;ai commencé à exporter l&#8217;ensemble dans un enterFrame.</p>
<p><object type="application/x-shockwave-flash" width="500" height="300">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/ribbons/degres04.swf" />
<embed type="application/x-shockwave-flash" width="500" height="300" src="http://www.minuit4.fr/blog_assets/swf/ribbons/degres04.swf" >
</object>
</p>
<p><a href="http://minuit4.fr/uploads/ribbons/degres04.fla">Télécharger le .fla (CS3)<br />
</a><a href="http://code.google.com/p/floz/source/browse/trunk/OFFLINE/RIBBONS/lib/degres04.as">Accéder au fichier .as</a><a href="http://minuit4.fr/uploads/ribbons/degres04.fla"></a></p>
<p><span style="text-decoration: underline;">La même chose, en reliant chaque quadrilatère.</span></p>
<p><object type="application/x-shockwave-flash" width="500" height="300">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/ribbons/degres05.swf" />
<embed type="application/x-shockwave-flash" width="500" height="300" src="http://www.minuit4.fr/blog_assets/swf/ribbons/degres05.swf" >
</object>
</p>
<p><a href="http://minuit4.fr/uploads/ribbons/degres05.fla">Télécharger le .fla (CS3)<br />
</a><a href="http://code.google.com/p/floz/source/browse/trunk/OFFLINE/RIBBONS/lib/degres05.as">Accéder au fichier .as</a><a href="http://minuit4.fr/uploads/ribbons/degres05.fla"></a></p>
<p>Actuellement, je suis en train de bosser sur une version plus évoluée de tout ce que je viens de montrer.<br />
J&#8217;ai commencé à porter le tout en orienté objet, ça commence à s&#8217;organiser petit à petit. Le but étant de développer une structure évolutive, ou l&#8217;on peut rajouter des brushs etc. Et pourquoi pas développer une petite appli permettant de s&#8217;en servir plus aisément (combien de ribbons, quelles couleurs, quelles valeurs d&#8217;alphas&#8230;).<br />
Bref, à suivre.</p>
<p>Pour le moment, ça donne ceci (<span style="color: #ff0000;"><strong>Flash Player 10 requis</strong></span>) :</p>
<p><object type="application/x-shockwave-flash" width="500" height="500">
<param name="movie" value="http://www.minuit4.fr/blog_assets/swf/ribbons/ribbons.swf" />
<embed type="application/x-shockwave-flash" width="500" height="500" src="http://www.minuit4.fr/blog_assets/swf/ribbons/ribbons.swf" >
</object>
</p>
<p>Théoriquement c&#8217;est débuggé, mais si vous avez des soucis avec, n&#8217;hésitez pas à me les remonter dans les commentaires ! <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/06/flash/playing-with-ribbons-en-flash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Passer par des LinkedList pour gagner en performances</title>
		<link>http://www.minuit4.fr/2009/05/flash/passer-par-des-linkedlist-pour-gagner-en-performances/</link>
		<comments>http://www.minuit4.fr/2009/05/flash/passer-par-des-linkedlist-pour-gagner-en-performances/#comments</comments>
		<pubDate>Sat, 30 May 2009 17:16:03 +0000</pubDate>
		<dc:creator>Floz</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[AS3]]></category>

		<category><![CDATA[bitmapdata]]></category>

		<category><![CDATA[Equalizer]]></category>

		<category><![CDATA[LinkedList]]></category>

		<category><![CDATA[Performances flash]]></category>

		<category><![CDATA[Pool]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=184</guid>
		<description><![CDATA[En ce moment, je passe pas mal de temps à feuilleter le <a href="http://wiki.joa-ebert.com/index.php/Main_Page">wiki de Joa Ebert, afin de gagner en propreté de code et en performances</a>. Dans son wiki, il y est question de <a href="http://wiki.joa-ebert.com/index.php/LinkedList">LinkedList</a> ainsi que de <a href="http://wiki.joa-ebert.com/index.php/Pool">Pool</a>.
En lisant l&#8217;exemple, je ne comprenais pas vraiment à quoi cela pouvait il servir [...]]]></description>
			<content:encoded><![CDATA[<p>En ce moment, je passe pas mal de temps à feuilleter le <a href="http://wiki.joa-ebert.com/index.php/Main_Page">wiki de Joa Ebert, afin de gagner en propreté de code et en performances</a>. Dans son wiki, il y est question de <a href="http://wiki.joa-ebert.com/index.php/LinkedList">LinkedList</a> ainsi que de <a href="http://wiki.joa-ebert.com/index.php/Pool">Pool</a>.<br />
En lisant l&#8217;exemple, je ne comprenais pas vraiment à quoi cela pouvait il servir (même si, sur le papier ça avait l&#8217;air cool), ni comment s&#8217;en servir&#8230;</p>
<p>Puis j&#8217;ai commencé à m&#8217;y intéressé plus sérieusement et à utiliser une LinkedList en partiel de Flash.<br />
Il nous était demandé de faire un equalizer, et j&#8217;ai choisis de jouer avec du BitmapData et des modifications de pixels. En gros, une boucle plus ou moins grosse en enterFrame à manipuler.<br />
Sachant que les LinkedList permettent de gagner en performances car :</p>
<ul>
<li>Passer par ce type de structures permet de stocker des objets plus rapidement,</li>
<li> Itérer au sein d&#8217;une LinkedList est plus rapide que d&#8217;itérer un tableau ou autre (<a href="http://away3d.com/flash-10-speed-tests">ce n&#8217;est plus le cas avec le FlashPlayer 10 et les Vector typé et fixes ? cf. Away3D</a>)</li>
</ul>
<p>Je me suis dis que c&#8217;était le moment d&#8217;essayer. Le résultat :</p>
<p style="text-align: center;"><object type="application/x-shockwave-flash" width="400" height="400">
<param name="movie" value="/blog_assets/swf/linkedlist/HETICPARTIEL.swf" />
<embed type="application/x-shockwave-flash" width="400" height="400" src="/blog_assets/swf/linkedlist/HETICPARTIEL.swf" >
</object>
</p>
<p style="text-align: left;">Cliquez pour lancer l&#8217;anim. Recliquer pour la stopper. Sachant que le swf fait 1mo (il transporte le mp3 - Boards of Canada : Diving Station).<br />
Bref, le rendu me plait bien, et c&#8217;est fluide. Même s&#8217;il n&#8217;y a que 256 pixels par secondes à 30FPS. <a href="http://minuit4.fr/uploads/equalizer_sources.rar">Vous pouvez télécharger les sources en cliquant ici</a>.</p>
<p style="text-align: left;">Bossant sur un projet en parallèle, je commencais à réfléchir en terme de réorganisation de code. Et c&#8217;est là que j&#8217;en suis revenu à ces histoires de Pool (j&#8217;en parlerai dans un autre post, je n&#8217;ai pas encore assez fouillé là dessus) et de LinkedList.<br />
Du coup, je me suis dis que j&#8217;allais tenter de les utiliser <a href="http://www.minuit4.fr/2009/05/flash/effet-de-desintegration-en-as3-via-bitmap-et-bitmapdata/">au sein de mon effet de désintégration.</a></p>
<p style="text-align: left;">Résultat avec l&#8217;ancienne version :</p>
<p style="text-align: center;"><object type="application/x-shockwave-flash" width="500" height="450">
<param name="movie" value="/blog_assets/swf/linkedlist/main_old.swf" />
<embed type="application/x-shockwave-flash" width="500" height="450" src="/blog_assets/swf/linkedlist/main_old.swf" >
</object>
</p>
<p style="text-align: left;">Résultat avec la nouvelle version :</p>
<p style="text-align: center;"><object type="application/x-shockwave-flash" width="500" height="450">
<param name="movie" value="/blog_assets/swf/linkedlist/main_update.swf" />
<embed type="application/x-shockwave-flash" width="500" height="450" src="/blog_assets/swf/linkedlist/main_update.swf" >
</object>
</p>
<p style="text-align: left;">En fonction des pcs, les différences de résultat est plus ou moins flagrant.<br />
Les performances sont gagnées sur le fait qu&#8217;on ne passe plus par des tableaux, et que la manipulation performante au final. Cool <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Bon c&#8217;est bien tout ça, mais à quoi ça ressemble une LinkedList ? Je vous invite à regarder<a href="http://wiki.joa-ebert.com/index.php/LinkedList"> l&#8217;explication de Joa Ebert</a>.<br />
Puis, pour prendre mon equalizer comme exemple, ça donne :</p>
<p style="text-align: left;">En l&#8217;occurence, j&#8217;ai crée un objet Particle, qui correspond à des pixels de mon bitmapdata/equalizer :</p>
<pre class="brush: java">
package
{

public class Particle
{
public var px:Number = 0;
public var py:Number = 0;

public var next:Particle;
}

}
</pre>
<p style="text-align: left;">Une méthode d&#8217;instanciation de tous les objets de la LinkedList :</p>
<pre class="brush: java">
private function createParticles():void
{
// _particles sera la variable de référence de la LinkedList.
_particles = new Particle();

var currentParticle:Particle = _particles;
var numParticles:int = NUM_PARTICLES;

while ( --numParticles != 0 )
currentParticle = currentParticle.next = new Particle();
}
</pre>
<p style="text-align: left;">Un exemple d&#8217;itération au sein d&#8217;une LinkedList :</p>
<pre class="brush: java">
private function setParticlesPositions():void
{
// Comme je le disais précédemment : on crée une variable dans laquelle on stocke notre objet de référence de la LinkedList (notre point de départ, en quelque sorte).
var particle:Particle = _particles;

var px:Number = stage.stageWidth * .5;
var py:Number = stage.stageHeight * .5;

while ( particle )
{
particle.px = px;
particle.py = py;

// On passe à l&#039;élément suivant; jusqu&#039;à ce qu&#039;il n&#039;y en ait plus.
particle = particle.next;
}
}
</pre>
<p style="text-align: left;"><a href="http://blog.joa-ebert.com/2009/04/03/massive-amounts-of-3d-particles-without-alchemy-and-pixelbender/">Joa Ebert en parle aussi ici avec un superbe exemple.</a> Il disait qu&#8217;il s&#8217;en servait aussi dans son moteur de tween qui était, grâce à tout ça, plus performant que les Tweenlite ou Tweener.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/05/flash/passer-par-des-linkedlist-pour-gagner-en-performances/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Comment créer des projets en utilisant FlashDevelop ?</title>
		<link>http://www.minuit4.fr/2009/05/flash/creer-projets-as3-utilisant-flashdevelop/</link>
		<comments>http://www.minuit4.fr/2009/05/flash/creer-projets-as3-utilisant-flashdevelop/#comments</comments>
		<pubDate>Tue, 26 May 2009 18:37:21 +0000</pubDate>
		<dc:creator>Floz</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Flash IDE]]></category>

		<category><![CDATA[FlashDevelop]]></category>

		<category><![CDATA[Object oriented]]></category>

		<category><![CDATA[POO]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=160</guid>
		<description><![CDATA[Premièrement, je vous invite à lire le <a href="http://www.minuit4.fr/2009/05/flash/guide-installation-flashdevelop-flashide-as2-as3/">premier article sur minuit4 traitant de FlashDevelop</a>. Notamment si vous n&#8217;avez pas installé FlashDevelop. Vous y trouverez aussi quelques plugins sympa, que je vous conseille fortement.
L&#8217;introduction étant faite, regardons comment créer des projets avec FlashDevelop&#8230;
<a href="http://www.minuit4.fr/2009/05/flash/how-to-get-start-with-flashdevelop-an-as2-and-as3-ide/"></a>
1) Sans passer par l&#8217;IDE Flash

FlashDevelop permet de créer des projets AS2/AS3, [...]]]></description>
			<content:encoded><![CDATA[<p>Premièrement, je vous invite à lire le <a href="http://www.minuit4.fr/2009/05/flash/guide-installation-flashdevelop-flashide-as2-as3/">premier article sur minuit4 traitant de FlashDevelop</a>. Notamment si vous n&#8217;avez pas installé FlashDevelop. Vous y trouverez aussi quelques plugins sympa, que je vous conseille fortement.<br />
L&#8217;introduction étant faite, regardons comment créer des projets avec FlashDevelop&#8230;<br />
<a href="http://www.minuit4.fr/2009/05/flash/how-to-get-start-with-flashdevelop-an-as2-and-as3-ide/"></a></p>
<h3><strong>1) Sans passer par l&#8217;IDE Flash<br />
</strong></h3>
<p>FlashDevelop permet de créer des projets AS2/AS3, et donc de les compiler sous forme d&#8217;un SWF, sans passer par l&#8217;IDE Flash. Pour celà, il utilise le FlexSDK.<br />
Ainsi, si l&#8217;utilisation de Flash n&#8217;est pas nécessaire (pas de gros graphisme, pas d&#8217;animation fait main), vous pouvez opter ce type de projet.</p>
<p>Commencons :<br />
Lancez FlashDevelop et sélectionnez l&#8217;onglet <em>Project</em>, puis faites <em><strong>New Project -&gt; AS3 Project</strong></em>.</p>
<div class="wp-caption aligncenter" style="width: 570px"><img title="Start a new project without the Flash IDE by using FlashDevelop" src="http://minuit4.fr/blog_assets/img/flashdevelop/flashdev_noide.jpg" alt="Start a new project without the Flash IDE by using FlashDevelop" width="560" height="383" /><p class="wp-caption-text">Créer un nouveau projet sans passer par l&#39;IDE Flash</p></div>
<p>Choississez le chemin de votre projet, un nom, puis valider. A droite, vous avez l&#8217;explorateur de votre projet. Le dossier &#8220;<em>src</em>&#8221; contient tous vos fichiers de code .as. Notez que vous devrez obligatoirement avoir la classe principale, le Main.as en l&#8217;occurence, de votre projet en &#8220;Always Compile&#8221; (clic droit sur le fichier, Always Compile).</p>
<p>Si vous avez correctement installé les Flash Player Debug, vous devriez être capable de récupérer les trace de votre projet. Si ce n&#8217;est pas le cas, clic droit sur le nom de votre projet dans l&#8217;explorateur de fichier et sélectionnez &#8220;<em>Properties</em>&#8220;. Ici, vous pouvez sélectionnez le PlayMode de votre SWF. Choisissez &#8220;<em>PopUp</em>&#8220;. Si rien vous ne recevez toujours pas les trace&#8230; Vérifiez que vous avez bien installé <a href="http://www.adobe.com/support/flashplayer/downloads.html">les versions debug du flash player</a>.</p>
<div class="wp-caption aligncenter" style="width: 393px"><img title="Modify the SWF output of FlashDevelop" src="http://minuit4.fr/blog_assets/img/flashdevelop/flashdev_noide_testmovie.jpg" alt="Choose the manner of playing the .swf file" width="383" height="450" /><p class="wp-caption-text">Sélectionnez la manière dont seront lu les SWF</p></div>
<p>Félicitations ! Vous avez crée votre premier projet AS3 sans passer par l&#8217;IDE Flash <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3><strong>2) En passant par l&#8217;IDE Flash<br />
</strong></h3>
<p>Créez un nouveau projet mais cette fois sélectionnez <strong>Flash IDE Project</strong>. Répétez les manips précédentes pour initialiser le bouzin.</p>
<p>Pour ce tutorial, nous allons ajouter 3 dossiers à notre projet.</p>
<ul>
<li><em>src</em>, qui contiendra les fichiers .as.</li>
<li><em>fla</em>, qui contiendra les fichiers .fla.</li>
<li><em>bin</em>, qui contiendra les fichiers .swf.</li>
</ul>
<p>Pour les ajouter, clic droit sur le nom de votre projet dans l&#8217;explorateur.<br />
Maintenant, lancez flash et créez un <em>nouveau document AS3</em>. Sauvez le dans le dossier fla et créez une classe Main.as dans votre dossier src. Si vous avez correctement effectuez ces manips, vous devriez avoir cette organisation là :</p>
<div class="wp-caption aligncenter" style="width: 570px"><img title="The project tree of FlashDevelop" src="http://minuit4.fr/blog_assets/img/flashdevelop/flashdev_ide_projecttree.jpg" alt="The current project tree of FlashDevelop" width="560" height="233" /><p class="wp-caption-text">Le projet actuel vu sous FlashDevelop</p></div>
<p>Retournez dans l&#8217;IDE Flash et remplissez le champs &#8220;<em>Classe du Document</em>&#8221; du panneau Propriétés avec le nom de votre classe Main.as. Soit Main.<br />
Pour tous vos projets, la syntaxe correcte sera : <em><strong>nom_dossier</strong></em><strong><em>.nom_sous_dossier.nom_classe</em></strong><br />
<strong>Et n&#8217;ajoutez rien. Pas de .as, ni de&#8230; Rien.</strong></p>
<div class="wp-caption aligncenter" style="width: 570px"><img title="Flash document class" src="http://minuit4.fr/blog_assets/img/flashdevelop/flashdev_ide_classdoc.jpg" alt="Flash document class" width="560" height="222" /><p class="wp-caption-text">Remplissez la Classe du document, classe mère de votre projet</p></div>
<p>Bon, c&#8217;est cool tout ça, mais actuellement Flash ne sait pas où aller cherchez vos fichiers .as s&#8217;ils ne sont pas à côté du .fla courant. On va donc l&#8217;aider à y voir plus clair. Cliquez sur le bouton &#8220;<em>Paramètres</em>&#8221; à droite de &#8220;<em>Publier</em>&#8220;.<br />
Dans la nouvelle fenêtre, recliquez sur Paramètres, à droite de &#8220;<em>Version d&#8217;ActionScript</em>&#8220;.<br />
Cliquez sur le bouton &#8220;+&#8221; pour ajouter les dossiers dans lesquels se trouvent vos fichiers .as. Ici, &#8220;<em>../src</em>&#8220;.</p>
<div class="wp-caption aligncenter" style="width: 570px"><img title="ActionScript 3 parameters" src="http://minuit4.fr/blog_assets/img/flashdevelop/flashdev_ide_params.jpg" alt="ActionScript 3 parameters" width="560" height="469" /><p class="wp-caption-text">ActionScript 3 parameters</p></div>
<p><strong><em>Note :</em></strong> Ici,<strong> je vous suggère de décocher la case &#8220;Déclarer automatiquement les occurences sur votre scène&#8221;</strong>. Ainsi, vous devrez renseigner chacune des instances d&#8217;objet, posez sur votre scène, dans la classe correspondante. Exemple, je pose sur ma scène un clip que je nomme &#8220;<em>clip1</em>&#8220;. Dans ma classe Main.as j&#8217;ajouterai :  &#8220;<strong><em>public var clip1:MovieClip</em></strong>&#8220;, que je pourrais ainsi réutiliser avec l&#8217;autocomplétion.<br />
Revenons à nos moutons.</p>
<p>Sauvegardez, et copiez le code suivant dans votre Main.as :</p>
<pre class="brush: java">
package
{
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main()
{
trace( &quot;hello world !&quot; );
}
}

}
</pre>
<p>Maintenant, compilez en appuyant sur ctrl+entrée sous Flash ou FlashDevelop.</p>
<p>Tout fonctionne, mais il nous manque quelque chose&#8230; A savoir, indiquer le bon chemin pour les fichiers .swf.<br />
Pour celà, dans la fenêtre Propriétés de Flash,<strong><em> cliquez sur Paramètre -&gt; Sélectionnez l&#8217;onglet Formats -&gt; Remplissez le bon chemin pointant vers votre dossier bin</em></strong>.</p>
<p>Pendant vos développements orienté objet, vous pourriez avoir besoin de lier un objet de votre librairie à une classe. Cette partie est très utile, voire vitale pour l&#8217;organisation de vos boulots, donc suivez la bien.<br />
Ajoutez un objet (ex : un MovieClip nommé Symbole1) à votre librarie, et faites un clic droit dessus. Cliquez sur &#8220;Liaison&#8221; dans le menu contextuel, puis choisissez un nom de class et un chemin pour votre Symbole 1. Vous suivrez encore une fois la syntaxe suivante : <em><strong>nom_dossier</strong></em><strong><em>.nom_sous_dossier.nom_classe.</em></strong><em><strong></strong></em></p>
<p><em><strong></strong></em></p>
<div class="wp-caption aligncenter" style="width: 570px"><img title="Linkage of an object in the library to a class" src="http://minuit4.fr/blog_assets/img/flashdevelop/flashdev_ide_symbole.jpg" alt="Linkage of an object in the library to a class" width="560" height="334" /><p class="wp-caption-text">Lié un objet de votre librarie à une classe</p></div>
<p>Une fois cette démarche effectuée, ajoutez la classe correspondante dans le dossier src, et commencez à coder !</p>
<p>Ici, vous devriez être capable de faire des projets via FlashDevelop ! <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Je vous invite à aller voir <a href="http://www.flashdevelop.org/wikidocs/index.php?title=Main_Page">le wiki pour plus de documentation sur le soft</a>, notamment la partie des <a href="http://www.flashdevelop.org/wikidocs/index.php?title=Shortcuts">raccourcis de FlashDevelop</a>, <a href="http://www.flashdevelop.org/wikidocs/index.php?title=Features:Generation">très très intéressante</a> !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/05/flash/creer-projets-as3-utilisant-flashdevelop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Guide d&#8217;installation de FlashDevelop</title>
		<link>http://www.minuit4.fr/2009/05/flash/guide-installation-flashdevelop-flashide-as2-as3/</link>
		<comments>http://www.minuit4.fr/2009/05/flash/guide-installation-flashdevelop-flashide-as2-as3/#comments</comments>
		<pubDate>Mon, 25 May 2009 21:52:51 +0000</pubDate>
		<dc:creator>Floz</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Flash Builder]]></category>

		<category><![CDATA[Flash IDE]]></category>

		<category><![CDATA[FlashDevelop]]></category>

		<category><![CDATA[Flex Builder]]></category>

		<category><![CDATA[FlexSDK]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=143</guid>
		<description><![CDATA[<a href="http://www.flashdevelop.org">FlashDevelop est un IDE open source pour les projets en AS2/AS3</a>. Il s&#8217;agit d&#8217;une des meilleures alernatives à l&#8217;IDE Flash, qui, autant le dire, est totalement naze sur le plan du développement. Notamment pour ce qui est de l&#8217;autocomplétion de ses propres classes/classes importées. Alors que FlashDevelop lui, déchire, comme Flex Builder ou FDT; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flashdevelop.org">FlashDevelop est un IDE open source pour les projets en AS2/AS3</a>. Il s&#8217;agit d&#8217;une des meilleures alernatives à l&#8217;IDE Flash, qui, autant le dire, est totalement naze sur le plan du développement. Notamment pour ce qui est de l&#8217;autocomplétion de ses propres classes/classes importées. Alors que FlashDevelop lui, déchire, comme Flex Builder ou FDT; mais gratuitement. <a href="http://www.flashdevelop.org/community/viewtopic.php?t=23" target="_blank">Il possède en plus une bonne colloration synthaxique, ainsi que pas mal d&#8217;autres trucs de fou</a>. Par contre, il n&#8217;est actuellement disponible que pour Windows. <a href="http://www.adobe.com/products/flex/features/flex_builder/" target="_blank">Si vous êtes sous mac, jetez un oeil à Flex Builder</a>, qui va bientôt devenir <a href="http://theflashblog.com/?p=998" target="_blank">Flash builder</a>.</p>
<h3><strong>1) Comment installer FlashDevelop ? </strong></h3>
<p>Ici rien de compliqué. D&#8217;ailleurs, c&#8217;est expliqué plutôt clairement sur le forum officiel :</p>
<ul>
<li><a href="http://www.flashdevelop.org/community/viewforum.php?f=11">Téléchargez la dernière version de FlashDevelop</a> (actuellement 3.0.0 RC4) et installez le. Laissez les settings par défaut.</li>
<li> <a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3">Téléchargez la dernière version stable du Adoble Flex SDK</a> (environ 100mo). Dézippez le où vous le voulez sur votre HDD. Mais souvenez vous de son emplacement&#8230; <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li> Si vous n&#8217;avez pas <a href="http://www.java.com/fr/">la machine virtuelle java, téléchargez la et installez la ou FlashDevelop ne se lancera pas.</a></li>
</ul>
<p>Vérifiez ensuite que vous ayez bien d&#8217;installé les versions debug du flash player. Elles vous serviront à récupérer les traces et les erreurs lorsque vous ne passerez pas par l&#8217;IDE Flash pour compiler votre projet. <a href="http://www.adobe.com/support/flashplayer/downloads.html ">Prenez donc Windows Flash Player 10 ActiveX control debugger (for IE) et the Windows Player 10 content debugger (pour Netscape blabla).</a> Désinstallez les anciennes versions avant d&#8217;installer les nouvelles.</p>
<h3><strong>2) Quelle configuration pour FlashDevelop ?<br />
</strong></h3>
<p>Ici, vous devriez avoir réussi à installer FlashDevelop. Maintenant, configurons le afin de l&#8217;utiliser avec l&#8217;IDE de flash, ou sans l&#8217;IDE de flash.</p>
<p>Premièrement, cliquez sur l&#8217;onglet <em>Tools</em>.</p>
<div class="wp-caption aligncenter" style="width: 510px"><img title="FlashDevelop settings" src="http://minuit4.fr/blog_assets/img/flashdevelop/flashdev_settings.jpg" alt="Tools - Program Settings" width="500" height="300" /><p class="wp-caption-text">Tools -&gt; Program Settings</p></div>
<p><strong><em>Tools -&gt; Program Settings -&gt; AS3Context.</em></strong><br />
Ensuite, remplissez le champs &#8220;<em>Flex SDK Location</em>&#8221; avec le chemin vers votre dossier FlexSDK que vous avez tout à l&#8217;heure dézippé.</p>
<div class="wp-caption aligncenter" style="width: 510px"><img title="FlashDevelop Flash path ide &amp; flex sdk" src="http://minuit4.fr/blog_assets/img/flashdevelop/flashdev_flexsdk_pathide.jpg" alt="FlashDevelop Path to Flash IDE and Flex SDK Location" width="500" height="300" /><p class="wp-caption-text">FlashDevelop &quot;Path to Flash IDE&quot; and &quot;Flex SDK Location&quot;</p></div>
<p>Enfin, toujours dans <em>Program Settings, </em>sélectionnez l&#8217;onglet &#8220;<em>ASCompletion</em>&#8221; et cherchez la ligne &#8220;<em>Path to Flash IDE</em>&#8220;. Encore une fois, remplissez la avec le chemin vers votre version de Flash. CS3 ou CS4, peut importe, c&#8217;est selon ce que vous désirez.</p>
<h3><strong>3)	Plugins ?</strong></h3>
<p>Pour vous simplifiez la vie durant vos phase de débug, je vous conseille de télécharger 2 plugins, tous deux écris par Jérôme Decoster :<br />
-<a href="http://www.flashdevelop.org/community/viewtopic.php?f=4&amp;t=1128"> Trace plugin generator</a><br />
-	<a href="http://www.flashdevelop.org/community/viewtopic.php?f=4&amp;t=2993&amp;start=0">Duplicate plugin</a></p>
<p>En bas du premier post de chacune de ces pages se trouve les fichiers à téléchargez (pas les fichiers sources, mais le plugin en .fdz).<br />
Lancez les et rebootez FlashDevelop.</p>
<p>En appuyant sur F10, vous devriez voir &#8220;<em>Duplicate</em>&#8221; et&#8221;<em>Trace</em>&#8221; à la fin de la liste.<br />
Via le raccourcis<strong> Ctrl+0</strong> sur n&#8217;importe quel terme que vous avez écrit, vous utiliserez le trace plugin.<br />
Via le raccourcis <strong>Ctrl+alt+d</strong>, vous utiliserez le plugin duplicate. (<strong>ctrl+maj+d</strong> pour revenir en arrière).<br />
Sweet hein ? <img src='http://www.minuit4.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.minuit4.fr/2009/05/flash/creer-projets-as3-utilisant-flashdevelop/">Maintenant, jetons un oeil sur comment utiliser FlashDevelop avec nos projets AS3.<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/05/flash/guide-installation-flashdevelop-flashide-as2-as3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Comment utiliser Cron? Automatisation des tâches, lancement de script php</title>
		<link>http://www.minuit4.fr/2009/05/php/comment-utiliser-cron-automatisation-des-taches-lancement-de-script-php/</link>
		<comments>http://www.minuit4.fr/2009/05/php/comment-utiliser-cron-automatisation-des-taches-lancement-de-script-php/#comments</comments>
		<pubDate>Sun, 24 May 2009 17:46:02 +0000</pubDate>
		<dc:creator>Mikl</dc:creator>
		
		<category><![CDATA[Php]]></category>

		<category><![CDATA[cron]]></category>

		<category><![CDATA[cron tutorial]]></category>

		<category><![CDATA[cronjob]]></category>

		<category><![CDATA[crontab]]></category>

		<category><![CDATA[launch php script]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[regular interval]]></category>

		<category><![CDATA[scheduled task]]></category>

		<category><![CDATA[tâches planifiées]]></category>

		<guid isPermaLink="false">http://www.minuit4.fr/?p=132</guid>
		<description><![CDATA[Cron est un programme permettant de lancer automatiquement des tâches à des moments précis ou à des intervalles réguliers.  Plus précisément grâce à l&#8217;édition d&#8217;un fichier stockant toutes les tâches,  il est possible d&#8217;exécuter n&#8217;importe quelle commande shell. Très pratique donc, par exemple si on désire lancer un fichier php tout les jours à une [...]]]></description>
			<content:encoded><![CDATA[<p>Cron est un programme permettant de lancer automatiquement des tâches à des moments précis ou à des intervalles réguliers.  Plus précisément grâce à l&#8217;édition d&#8217;un fichier stockant toutes les tâches,  il est possible d&#8217;exécuter n&#8217;importe quelle commande shell. Très pratique donc, par exemple si on désire lancer un fichier php tout les jours à une heure précise. Il tourne en fond (ce type de programme est un daemon sous linux, un processus sous windows) et ne se &#8220;reveille&#8221; que lorsqu&#8217;il doit exécuter quelque chose.<br />
Ce programme n&#8217;est néanmoins disponible que sous linux, les utilisateurs de windows pourront se tourner vers <a title="Cygwin" href="http://cygwin.com/" target="_blank">Cygwin</a> (qui permet d&#8217;emuler un système linux sous windows) pour pouvoir utiliser tranquillement Cron.</p>
<p>Le fichier qu&#8217;il faut éditer est &#8216;crontab&#8217;. Pour se faire, il faut tout d&#8217;abord choisir l&#8217;éditeur de texte avec lequel nous allons l&#8217;ouvrir, par la commande suivante:  &#8216;<span style="color: #ff00ff;">$ export VISUAL=gedit</span>&#8216; gedi&#8217; représentant ici l&#8217;éditeur souhaité. Maintenant, lancer l&#8217;édition du fichier en tapant:  &#8216;<span style="color: #ff00ff;">$ crontab -e</span>&#8216; et y ajouter:</p>
<p><span style="color: #339966;"><strong>MAILTO=test@test.fr</strong></span> //cette première ligne permet de d&#8217;envoyer à l&#8217;email choisit un retour fait par cron.</p>
<p><strong><span style="color: #339966;">* * * * * commande à exécuter</span> </strong>//voici l&#8217;exemple de ligne permettant de lançer la commande que l&#8217;on désire.</p>
<p>Chaque étoile(*) correspond à une unité de temps: &#8216;Minute&#8217; &#8216;Heure&#8217; &#8216;Jour Du Mois&#8217; Mois &#8216;Jour De La Semaine&#8217;</p>
<p><span class="postbody"><span style="text-decoration: underline;">&#8216;Minute&#8217;</span> Correspond aux minutes par heure, valeurs possibles: 00 à 59.<br />
<span style="text-decoration: underline;">&#8216;Heure&#8217;</span> Correspond aux heures dans la journée, valeurs possibles: 00 à 23.<br />
<span style="text-decoration: underline;">&#8216;Jour Du Mois&#8217;</span> Correspond aux jours dans le mois, valeurs possibles: 1 à 31.<br />
<span style="text-decoration: underline;">&#8216;Mois&#8217;</span> Correspond au mois dans l&#8217;année, valeurs possibles: 1 to 12.<br />
<span style="text-decoration: underline;">&#8216;Jour De La Semaine&#8217;</span> Correspond aux jours de la semaine, valeurs possibles: 0 à 6 ou &#8216;mon&#8217;, &#8216;tue&#8217;, &#8216;wed&#8217; etc&#8230;</span></p>
<p>Si on met une &#8216;*&#8217; sans mettre de valeur, Cron considérera qu&#8217;il doit lançer la tache pour chaque unité de temps qui correspond à l&#8217;étoile. Concrètement, la ligne suivante exécutera la commande choisie (lancement de &#8216;monscript.php&#8217;) chaque minutes et chaque heures de chaque jour de chaque mois:</p>
<p><strong><span style="color: #339966;">* * * * * /chemin.vers.php/php mes.fichiers/monscript.php</span></strong></p>
<p>Pour lancer une commande toutes les 20 minutes par exemple, il suffit de rajouter après l&#8217;étoile(*) correspond aux minutes &#8216;/20&#8242;. Il en va de même pour toutes les 20 heures, 20 jours&#8230; Il faut juste placer le &#8216;/20&#8242; à coté de l&#8217;étoile correspond à l&#8217;unité de temps que l&#8217;on désire.</p>
<p><strong><span style="color: #339966;">*/20 * * * * /chemin.vers.php/php mes.fichiers/monscript.php</span> </strong> &#8212;&gt;  toutes les 20 minutes chaque jours chaque mois etc&#8230;</p>
<p><strong><span style="color: #339966;">00 */5 * * *  /chemin.vers.php/php mes.fichiers/monscript.php</span></strong> &#8212;&gt; toutes les 5 heures de chaque jours chaque mois etc&#8230;</p>
<p>On notera que pour toutes les 5 heures, on rajoute 00 à la place de l&#8217;étoile(*) correspondant au minutes. En effet, si on ne le fait pas, cron exécutera la commande à chaque minutes, ce qui n&#8217;est pas du tout le résultat attendu.</p>
<p>Enfin, il est également possible de remplacer &#8216;/20&#8242; par &#8216;0,20,40&#8242;, ce qui donnera:</p>
<p><strong><span style="color: #339966;">00 0,20,40 * * * /chemin.vers.php/php mes.fichiers/monscript.php</span> </strong> &#8212;&gt; toutes les 20 heures de chaque jours chaque mois etc&#8230;</p>
<p>Une fois les modifications faites, enregistrer et le fichier puis quitter. Pour tester si tout a bien fonctionner il est possible de lister ce que crontab contient par la commande suivante: <span style="color: #ff00ff;"><span style="color: #000000;">&#8216;</span>crontab -l<span style="color: #000000;">&#8216;  Notons que si le fichier &#8216;crontab&#8217; contient une erreur, il sera de toute manière impossible de l&#8217;enregistrer. </span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.minuit4.fr/2009/05/php/comment-utiliser-cron-automatisation-des-taches-lancement-de-script-php/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

