<?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>Blog de Fennecos</title>
	<atom:link href="http://emmanuelgarnier.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://emmanuelgarnier.net/blog</link>
	<description>Un blog Flex!!</description>
	<lastBuildDate>Fri, 21 May 2010 08:50:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Flex-iframe, SWFObject et IE!!!</title>
		<link>http://emmanuelgarnier.net/blog/2010/05/flex-iframe-swfobject-et-ie/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/05/flex-iframe-swfobject-et-ie/#comments</comments>
		<pubDate>Fri, 21 May 2010 08:46:24 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[bug]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=99</guid>
		<description><![CDATA[Pour plusieurs raisons, j'ai dû ajouter une iframe par dessus mon application Flex, j'ai donc utiliser Flex-iframe (dont j'ai déjà parlé dans un ancien billet).
Cette bibliothèque fonctionne très bien, mais j'ai remarqué que les iframes ne se plaçaient pas comme il fallait dans Internet Explorer!!
En effet, l'iframe prends bien les positions dans flash, mais n'y [...]]]></description>
			<content:encoded><![CDATA[<p>Pour plusieurs raisons, j'ai dû ajouter une iframe par dessus mon application Flex, j'ai donc utiliser <a href="http://code.google.com/p/flex-iframe/">Flex-iframe</a> (dont j'ai déjà parlé dans un ancien billet).</p>
<p>Cette bibliothèque fonctionne très bien, mais j'ai remarqué que <strong>les iframes ne se plaçaient pas comme il fallait dans Internet Explorer</strong>!!<br />
En effet, l'iframe prends bien les positions dans flash, mais n'y ajoute pas la position du swf dans la page!</p>
<p>J'ai donc regardé de plus près la fonction FUNCTION_MOVEIFRAME dans IFrameExternalCalls.as</p>
<p>Pour placé l'iframe, la classe utilise l'attribut javascript <em>offsetLeft</em>  et <em>offsetTop</em> du swfObject.</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="st0">&quot;frameRef.style.left = x + swfObject.offsetLeft + 'px'; &quot;</span> <span class="sy0">+</span> <br />
&nbsp;<span class="st0">&quot;frameRef.style.top = x + swfObject.offsetTop + 'px'; &quot;</span> <span class="sy0">+</span></div>
</div>
<p><span id="more-99"></span></p>
<p>J'ai donc testé cet attribut sous IE7 et 8 et sous Firefox, Firefox me renvoie tout le temps la bonne valeur alors que IE 0 px...</p>
<p>IE prends en fait la position de l'élément mais en relatif.</p>
<p>Voici donc la solution que j'ai trouvé pour remédier à ce problème :</p>
<p>Dans <em>IFrameExternalCalls.as</em> ajouter le code suivant :</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="coMULTI">/**<br />
* The name of the JavaScript function that find the position of the swf.<br />
*/</span><br />
<span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">var</span> FUNCTION_FINDXY:<span class="kw3">String</span> = <span class="st0">&quot;FindXY&quot;</span>;</p>
<p><span class="coMULTI">/**<br />
* The JavaScript code to call to insert the function that find the position of the swf.<br />
*/</span><br />
<span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">var</span> INSERT_FUNCTION_FINDXY:<span class="kw3">String</span> = <br />
&nbsp; &nbsp; <span class="st0">&quot;document.insertScript = function () &quot;</span> +<br />
&nbsp; &nbsp; <span class="st0">&quot;{ &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;if (document.&quot;</span> + FUNCTION_FINDXY + <span class="st0">&quot;==null) &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;{ &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FUNCTION_FINDXY + <span class="st0">&quot; = function(obj) &quot;</span> + <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;{&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;var x=0,y=0;&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;while (obj!=null){&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;x+=obj.offsetLeft-obj.scrollLeft;&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;y+=obj.offsetTop-obj.scrollTop;&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;obj=obj.offsetParent;&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;}&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;return {x:x,y:y};&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;}&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;}&quot;</span> +<br />
&nbsp; &nbsp; <span class="st0">&quot;}&quot;</span>;</div>
</div>
<p>Nous allons changer lignes qui posent problème dans INSERT_FUNCTION_MOVEIFRAME, ce qui donne :</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">var</span> INSERT_FUNCTION_MOVEIFRAME:<span class="kw3">String</span> = <br />
&nbsp; &nbsp; <span class="st0">&quot;document.insertScript = function () &quot;</span> +<br />
&nbsp; &nbsp; <span class="st0">&quot;{ &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;if (document.&quot;</span> + FUNCTION_MOVEIFRAME + <span class="st0">&quot;==null) &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;{ &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FUNCTION_MOVEIFRAME + <span class="st0">&quot; = function(frameID,iframeID,x,y,w,h,objectID) &quot;</span> + <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;{&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;var frameRef = document.getElementById(frameID); &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;var swfObject = document.getElementById(objectID); &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;frameRef.style.left = x + FindXY(swfObject).x + 'px'; &quot;</span> + <span class="co1">//ligne qui a été modifiée</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;frameRef.style.top = y + FindXY(swfObject).y + 'px'; &quot;</span> + <span class="co1">//ligne qui a été modifiée</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;frameRef.style.width = w + 'px'; &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;frameRef.style.height = h + 'px'; &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;frameRef.style.overflow ='hidden';&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;var iFrameRef = document.getElementById(iframeID); &quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;iFrameRef.width = w;&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;iFrameRef.height = h;&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;}&quot;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;}&quot;</span> +<br />
&nbsp; &nbsp; <span class="st0">&quot;}&quot;</span>;</div>
</div>
<p>puis dans <em>IFrame.as</em> dans la fonction <em>setupExternalInterface()</em> ajouter la fonction :</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;">ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span>IFrameExternalCalls.<span class="me1">INSERT_FUNCTION_CREATEIFRAME</span><span class="br0">&#41;</span>;<br />
ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span>IFrameExternalCalls.<span class="me1">INSERT_FUNCTION_FINDXY</span><span class="br0">&#41;</span>; <span class="co1">//fonction à ajouter!</span><br />
ExternalInterface.<span class="kw3">call</span><span class="br0">&#40;</span>IFrameExternalCalls.<span class="me1">INSERT_FUNCTION_MOVEIFRAME</span><span class="br0">&#41;</span>;</div>
</div>
<p>Et maintenant l'iframe se place bien pour tous les navigateurs! =)</p>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/05/flex-iframe-swfobject-et-ie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FileStream readBytes et offset</title>
		<link>http://emmanuelgarnier.net/blog/2010/05/filestream-readbytes-et-offset/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/05/filestream-readbytes-et-offset/#comments</comments>
		<pubDate>Wed, 12 May 2010 12:40:35 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Air]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=95</guid>
		<description><![CDATA[J'avais besoin de lire les derniers octets d'un fichier en Air. Je me suis donc servi de la fonction readBytes de la classe FileStream. En regardant la signature de la fonction readBytes readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void je me suis arrêté sur le paramètre offset.
La doc disait donc : "offset : The offset [...]]]></description>
			<content:encoded><![CDATA[<p>J'avais besoin de lire les derniers octets d'un fichier en Air. Je me suis donc servi de la fonction <em>readBytes</em> de la classe <em>FileStream</em>. En regardant la signature de la fonction <em>readBytes</em> readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void je me suis arrêté sur le paramètre offset.</p>
<p>La doc disait donc : "offset : The offset into the bytes parameter at which data read should begin."</p>
<p>J'ai donc appelé la fonction readBytes avec un offset pour pointer vers un point précis du fichier.</p>
<p>Cependant, mon ByteArray était de la taille du fichier! En faisant quelques tests je me suis rendu compte que la taille de mon ByteArray était la somme du paramètre <em>offset</em> et <em>length</em><br />
Je me suis donc rendu compte que ce paramètre <em>offset </em>de la <em>readBytes </em>n'était pas l'offset dans le fichier mais l'index à laquel le ByteArray commence à écrire!</p>
<p>La bonne méthode pour lire un des octets précis d'un <em>FileStream</em> et de placer l'attribut <em>position </em>du <em>FileStream</em> et de faire un readBytes (mais avec un offset de 0 ;^) )</p>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/05/filestream-readbytes-et-offset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Air Amazon&#8217;s S3 et metadata</title>
		<link>http://emmanuelgarnier.net/blog/2010/05/air-amazons-s3-et-metadata/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/05/air-amazons-s3-et-metadata/#comments</comments>
		<pubDate>Tue, 04 May 2010 11:28:13 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Air]]></category>
		<category><![CDATA[Amazon S3]]></category>
		<category><![CDATA[api]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=82</guid>
		<description><![CDATA[Amazon S3 est  une solution d'hébergements offert par Amazon que j'utilise pour un logiciel devant sauvegarder des medias en ligne.
Pour ce faire, j'utilise donc la bibliothèque as3awss3lib de google permettant d'uploader et de downloader mes fichiers très simplement sur mon espace S3.
Très rapidement, j'ai donc eu besoin de comparer les fichiers locaux et les [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aws.amazon.com/s3/">Amazon S3</a> est  une solution d'hébergements offert par Amazon que j'utilise pour un logiciel devant sauvegarder des medias en ligne.</p>
<p>Pour ce faire, j'utilise donc la bibliothèque <a href="http://code.google.com/p/as3awss3lib/">as3awss3lib</a> de google permettant d'uploader et de downloader mes fichiers très simplement sur mon espace S3.</p>
<p>Très rapidement, j'ai donc eu besoin de comparer les fichiers locaux et les fichiers en ligne afin de vérifier leurs intégrités. Je ne pouvais pas simplement comparer leurs dates de modifications car les fichiers présents sur le serveur ont comme date de modification la date d'upload bien sûr.</p>
<p>La solution a donc été d'<strong>enregistrer cette information dans les metadatas du fichier sur S3</strong>.</p>
<p><span id="more-82"></span><br />
En effet Amazon S3 offre la possibilité d'héberger un fichier jusqu'à 5Go accompagné de  2 ko de metadatas.</p>
<p>Pour ce faire j'ai donc dû modifier <a href="http://code.google.com/p/as3awss3lib/">as3awss3lib</a> en offrant la possibilité d'enregistrer la date de modification du fichier local dans les metas.</p>
<p>Voici donc la fonction pour retrouver le metadata "last-modifed" d'un fichiers donner dans le fichier AWSS3.as</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw3">public</span> <span class="kw2">function</span> getObjectProperties<span class="br0">&#40;</span>bucketName:<span class="kw3">String</span>, objectName:<span class="kw3">String</span><span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> stream:URLStream = getURLStream<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">contentType</span>:<span class="kw3">String</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; stream.<span class="me1">addEventListener</span><span class="br0">&#40;</span>HTTPStatusEvent.<span class="me1">HTTP_RESPONSE_STATUS</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span><span class="br0">&#40;</span><span class="kw3">e</span>:HTTPStatusEvent<span class="br0">&#41;</span>:<span class="kw3">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//on ferme le stream car utilisation de GET au lieu de HEAD...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stream.<span class="kw3">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> obj:S3MetaObject = <span class="kw2">new</span> S3MetaObject<span class="br0">&#40;</span><span class="br0">&#41;</span>;<span class="co1">//S3MetaObject étant une simple classe contenant un attribut name et lastModified...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="kw3">name</span> = objectName;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span><span class="st0">&quot;HTTP_RESPONSE_STATUS&quot;</span>, objectName<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="kw1">each</span> <span class="br0">&#40;</span><span class="kw2">var</span> h:URLRequestHeader <span class="kw1">in</span> <span class="kw3">e</span>.<span class="me1">responseHeaders</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Can get other headers like ETag and Content-Length to add to the S3Object...</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>h.<span class="kw3">name</span>.<span class="me1">toLocaleLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="st0">&quot;x-amz-meta-last-modifed&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">lastModified</span> = DateUtil.<span class="me1">parseW3CDTF</span><span class="br0">&#40;</span>h.<span class="me1">value</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>obj.<span class="me1">lastModified</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">lastModified</span> = <span class="kw2">new</span> <span class="kw3">Date</span><span class="br0">&#40;</span>1900<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> aee:AWSS3Event;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aee = <span class="kw2">new</span> AWSS3Event<span class="br0">&#40;</span>AWSS3Event.<span class="me1">OBJECT_METADATA</span><span class="br0">&#41;</span>;<span class="co1">//En ayant au préalable ajouter le type d'évenement OBJECT_METADATA dans AWSS3Event</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aee.<span class="kw3">data</span> = obj;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dispatchEvent<span class="br0">&#40;</span>aee<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Air ne semble pas autoriser les requêtes HEAD... (seulement dans la version compilé)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> req:URLRequest = getURLRequest<span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>, <span class="st0">&quot;/&quot;</span> + escape<span class="br0">&#40;</span>bucketName<span class="br0">&#41;</span> + <span class="st0">&quot;/&quot;</span> + escape<span class="br0">&#40;</span>escape<span class="br0">&#40;</span>objectName<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//var req:URLRequest = getURLRequest(&quot;HEAD&quot;, &quot;/&quot; + escape(bucketName) + &quot;/&quot; + escape(objectName));</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; stream.<span class="kw3">load</span><span class="br0">&#40;</span>req<span class="br0">&#41;</span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="br0">&#125;</span></div>
</div>
<p>Et voici comment enregistrer ce metadata au moment de l'upload du fichier!</p>
<p>- Il faut ajouter le paramètre "lastmodif:Date = null" fans la fonction <em>getURLRequest</em><br />
- toujours dans la fonction <em>getURLRequest</em> ajouter les lignes suivante avant le return :</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw1">if</span><span class="br0">&#40;</span>lastmodif<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> dateString2:<span class="kw3">String</span> = DateUtil.<span class="me1">toW3CDTF</span><span class="br0">&#40;</span>lastmodif<span class="br0">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> metaHeader:URLRequestHeader = <span class="kw2">new</span> URLRequestHeader<span class="br0">&#40;</span><span class="st0">&quot;x-amz-meta-last-modifed&quot;</span>,dateString2<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; req.<span class="me1">requestHeaders</span>.<span class="kw3">push</span><span class="br0">&#40;</span>metaHeader<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="co1">//end SBNOTE</span></div>
</div>
<p>-enfin ajouter le metadata dans l'authentification de la requête dans la fonction <em>getAuthenticationString</em> en ayant ajouter le paramètre "lastmodif:Date = null"</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">//code juste après &quot;toSign += dateString + &quot;\n&quot;;&quot;</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span>lastmodif<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> dateString2:<span class="kw3">String</span> = DateUtil.<span class="me1">toW3CDTF</span><span class="br0">&#40;</span>lastmodif<span class="br0">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; toSign += <span class="st0">&quot;x-amz-meta-last-modifed:&quot;</span>+dateString2 + <span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>Et voilà! maintenant il est possible d'enregistrer un metadata et de le retrouver pour faire la comparaison.</p>
<p>Pour une meilleur comparaison il est bien sur aussi possible d'enregistrer le checksum du fichier et de le mettre à la place de "last-modified"</p>
<p>=^)</p>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/05/air-amazons-s3-et-metadata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>API Dailymotion AS3</title>
		<link>http://emmanuelgarnier.net/blog/2010/04/api-dailymotion-as3/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/04/api-dailymotion-as3/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 13:14:31 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[api]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=80</guid>
		<description><![CDATA[Il y a quelques semaines ou je présentais une technique pour inclure une vidéo Dailymotion dans Flex avec la bibliothèque de google flexiframe.
Il n'y a plus a utiliser cette méthode car Dailymotion vient de mettre à jour son API en AS3!
A noté que les fonctions et événements ont les même noms que ceux de l'API [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a quelques semaines ou je présentais une technique pour inclure une vidéo Dailymotion dans Flex avec la bibliothèque de google flexiframe.</p>
<p>Il n'y a plus a utiliser cette méthode car Dailymotion vient de mettre à jour son <a href="http://www.dailymotion.com/fr/doc/api/player/flash_api">API en AS3</a>!</p>
<p>A noté que les fonctions et événements ont les même noms que ceux de l'API Youtube. Ce qui simplifie largement les chose!</p>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/04/api-dailymotion-as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integration video Dailymotion dans Flex</title>
		<link>http://emmanuelgarnier.net/blog/2010/03/video-dailymotion-dans-flex/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/03/video-dailymotion-dans-flex/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 09:02:41 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[dailymotion]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=61</guid>
		<description><![CDATA[Voilà un petit moment que j'essayais d'insérer une vidéo dailymotion dans Flex!
Le problème étant que l'api dailymotion pour flash est codé en AS2, il donc est impossible de mettre une vidéo dans son application Flex comme on peut très simplement le faire avec l'api youtube...
Il y a tout de même une solution! Pas très élégante, [...]]]></description>
			<content:encoded><![CDATA[<p>Voilà un petit moment que j'essayais d'insérer une vidéo dailymotion dans Flex!</p>
<p>Le problème étant que l'<a href="http://www.dailymotion.com/en/doc/api/player/flash_api">api dailymotion pour flash</a> est codé en AS2, il donc est impossible de mettre une vidéo dans son application Flex comme on peut très simplement le faire avec l'api youtube...</p>
<p>Il y a tout de même une solution! Pas très élégante, mais qui fonctionne!<br />
La solution est créer une iframe au beau milieu de l'application et de la faire pointer vers la vidéo dailymotion.<br />
<span id="more-61"></span></p>
<p>Le truc est donc d'utiliser cette petite bibliothèque de google, <a href="http://code.google.com/p/flex-iframe/">flex-iframe</a>, qui permet de créer une iframe via du code javascript exécuté depuis flex.</p>
<p>voilà donc un code tout simple pour intégrer une vidéo dailymotion dans son application Flex :</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="sy0">&lt;</span>mx:Application xmlns:mx=<span class="st0">&quot;http://www.adobe.com/2006/mxml&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlns:flexiframe=<span class="st0">&quot;com.google.code.flexiframe.*&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layout=<span class="st0">&quot;absolute&quot;</span><span class="sy0">&gt;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>flexiframe:IFrame id=<span class="st0">&quot;googleIFrame&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;800&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;600&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; source=<span class="st0">&quot;http://www.dailymotion.com/swf/video/VIDEO_ID&quot;</span><span class="sy0">/&gt;</span>&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span class="sy0">&lt;/</span>mx:Application<span class="sy0">&gt;</span></div>
</div>
<p>Il est à noter que ça ne fonctionne pas en plein écran, l'iframe se retrouvant derrière...</p>
<p>J'espère cependant que Dailymotion aura bientot une api as3 après la sortie de son nouveau player...</p>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/03/video-dailymotion-dans-flex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajout de sous-titres sur Video</title>
		<link>http://emmanuelgarnier.net/blog/2010/03/ajout-de-sous-titres-sur-video/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/03/ajout-de-sous-titres-sur-video/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 09:38:23 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[subtitle]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=53</guid>
		<description><![CDATA[Voilà comment ajouter  simplement dans Flex des sous titres à un VideoDisplay grâce à la classe CuePointManager.
Nous avons donc au départ un vidéo display ayant pour id "video"

&#60;mx:VideoDisplay id=&#34;video&#34; /&#62;

Il nous faut ensuite un tableau associatif dans lequel il y aura tous les sous-titres

private var _subs:Array/*de sous-titres*/ = new Array&#40;&#41;;

On utilise maintenant la classe [...]]]></description>
			<content:encoded><![CDATA[<p>Voilà comment ajouter  simplement dans Flex des sous titres à un VideoDisplay grâce à la classe CuePointManager.</p>
<p>Nous avons donc au départ un vidéo display ayant pour id "video"</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="sy0">&lt;</span>mx:VideoDisplay id=<span class="st0">&quot;video&quot;</span> <span class="sy0">/&gt;</span></div>
</div>
<p>Il nous faut ensuite un tableau associatif dans lequel il y aura tous les sous-titres</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw3">private</span> <span class="kw2">var</span> _subs:<span class="kw3">Array</span><span class="coMULTI">/*de sous-titres*/</span> = <span class="kw2">new</span> <span class="kw3">Array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</div>
<p>On utilise maintenant la classe CuePointManager pour ajouter des cuepoints à notre VideoDisplay<br />
<span id="more-53"></span></p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">//sous-titre à la 12ème seconde</span><br />
<span class="kw2">var</span> <span class="kw3">time</span>:<span class="kw3">Number</span> = <span class="nu0">12</span>;<br />
<span class="co1">//ayant pour nom subtitle01</span><br />
<span class="kw2">var</span> <span class="kw3">name</span>:<span class="kw3">String</span> = subtitle01;<br />
<span class="co1">//Texte du sous-titre</span><br />
<span class="kw2">var</span> texte:<span class="kw3">String</span> = <span class="st0">&quot;Voici un exemple de sous-titre&quot;</span>;<br />
<span class="co1">//on assigne un nouveau CuePoint à notre FLV</span><br />
CuePointManager<span class="br0">&#40;</span><span class="kw3">video</span>.<span class="me1">cuePointManager</span><span class="br0">&#41;</span>.<span class="me1">addCuePoint</span><span class="br0">&#40;</span><span class="br0">&#123;</span><span class="kw3">name</span>:<span class="kw3">name</span>, <span class="kw3">time</span>:<span class="kw3">time</span><span class="br0">&#125;</span> <span class="br0">&#41;</span>;</p>
<p><span class="co1">//Et enfin on rentre le texte dans un tableau associatif&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
_subs<span class="br0">&#91;</span><span class="kw3">name</span><span class="br0">&#93;</span> = texte;</div>
</div>
<p>On ajoute ensuite un texte qui se placera en bas du vidéo display, ainsi qu'un écouteur sur le cuePoint</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;mx:Canvas</span> <span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mx:VideoDisplay</span> <span class="re0">id</span>=<span class="st0">&quot;video&quot;</span> <span class="re0">cuePointManagerClass</span>=<span class="st0">&quot;mx.controls.videoClasses.CuePointManager&quot;</span> <span class="re0">cuePoint</span>=<span class="st0">&quot;onCuePoint(event)&quot;</span><span class="re2">/&gt;</span></span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mx:Text</span> <span class="re0">id</span>=<span class="st0">&quot;sub&quot;</span> <span class="re0">width</span>=<span class="st0">&quot;100%&quot;</span> <span class="re0">bottom</span>=<span class="st0">&quot;0&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">paddingLeft</span>=<span class="st0">&quot;20&quot;</span> <span class="re0">paddingRight</span>=<span class="st0">&quot;20&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">fontWeight</span>=<span class="st0">&quot;bold&quot;</span> <span class="re0">fontFamily</span>=<span class="st0">&quot;Arial&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">textAlign</span>=<span class="st0">&quot;center&quot;</span> <span class="re0">color</span>=<span class="st0">&quot;#fFFF00&quot;</span> <span class="re0">fontSize</span>=<span class="st0">&quot;12&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">selectable</span>=<span class="st0">&quot;false&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mx:filters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mx:DropShadowFilter</span> <span class="re0">id</span>=<span class="st0">&quot;shadowFilter&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">angle</span>=<span class="st0">&quot;45&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">blurX</span>=<span class="st0">&quot;2&quot;</span> <span class="re0">blurY</span>=<span class="st0">&quot;2&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">distance</span>=<span class="st0">&quot;1&quot;</span> <span class="re0">alpha</span>=<span class="st0">&quot;1&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">quality</span>=<span class="st0">&quot;1&quot;</span> <span class="re0">strength</span>=<span class="st0">&quot;6&quot;</span></span><br />
<span class="sc3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">color</span>=<span class="st0">&quot;#000000&quot;</span> <span class="re0">knockout</span>=<span class="st0">&quot;false&quot;</span><span class="re2">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/mx:filters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/mx:Text<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/mx:Canvas<span class="re2">&gt;</span></span></span></div>
</div>
<p>Et au final on renseigne le champs texte par le sous-titre correspondant dans l'écouteur onCuePoint</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw3">private</span> <span class="kw2">function</span> onCuePoint<span class="br0">&#40;</span><span class="kw3">e</span>:CuePointEvent<span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; sub.<span class="kw3">text</span> = _subs<span class="br0">&#91;</span><span class="kw3">e</span>.<span class="me1">cuePointName</span><span class="br0">&#93;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>Et c'est tout! =^)</p>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/03/ajout-de-sous-titres-sur-video/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>contentPane de Container et MouseEvent</title>
		<link>http://emmanuelgarnier.net/blog/2010/03/contentpane-de-container-et-mouseevent/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/03/contentpane-de-container-et-mouseevent/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 07:28:56 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[ContentPane]]></category>
		<category><![CDATA[monkeyPatch]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=46</guid>
		<description><![CDATA[Voilà un autre problème bien étrange que j'ai rencontré.
J'ai  donc un Canvas dans lequel j'ai de nombreux composants cliquables.
Sous ce Canvas j'ai d'autre boutons... Mon souhait est donc qu'aux endroits ou il n'y a pas de composant cliquable sur le canvas, les boutons en dessous le soient! Mais pour une raison inconnue ce n'était [...]]]></description>
			<content:encoded><![CDATA[<p>Voilà un autre problème bien étrange que j'ai rencontré.</p>
<p>J'ai  donc un Canvas dans lequel j'ai de nombreux composants cliquables.<br />
Sous ce Canvas j'ai d'autre boutons... Mon souhait est donc qu'aux endroits ou il n'y a pas de composant cliquable sur le canvas, les boutons en dessous le soient! Mais pour une raison inconnue ce n'était pas la cas...<br />
Ma première idée a donc été de mettre mouseEnabled = false sur le Canvas comme je le fais d'habitude.</p>
<p>Mais là, en affichant l'objet qui dispatchait l'événement souris, je me suis rendu compte que c'était en fait le <strong>contentPane du Canvas qui était à l'origine du MouseEvent</strong>... Le contentPane étant un conteneur supplémentaire de la classe Container où les objets sont réellement placés. En effet, l'osque l'on appelle la methode addChild d'un Container, l'enfant est placé dans le contentPane et non dans le Container lui-même.<br />
<span id="more-46"></span></p>
<p>La seul solution que j'ai trouvé à été de monkeyPatché la classe Container<br />
Et voilà ce que j'ai rajouté a la fin de la fonction createContentPane():void :</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;">contentPane.<span class="me1">mouseEnabled</span> = <span class="kw2">false</span>;</div>
</div>
<p>Je ne sais pas si c'est la meilleure solution mais en tout cas ça marche! =^)</p>
<p>Je ne sais pas pourquoi j'ai eu ce bug, mais surement parce que j'utilisais l'attribut clipContent à true...</p>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/03/contentpane-de-container-et-mouseevent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le Challenge, le proces du petrole en Amazonie</title>
		<link>http://emmanuelgarnier.net/blog/2010/03/le-challenge-le-proces-du-petrole-en-amazonie/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/03/le-challenge-le-proces-du-petrole-en-amazonie/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 09:40:30 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[webdoc]]></category>
		<category><![CDATA[honkytonk]]></category>
		<category><![CDATA[le challenge]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=31</guid>
		<description><![CDATA[Je présente Le Challenge, le procès du pétrole en Amazonie diffusé sur le site de canal+.
C'est un web-documentaire de Honkytonk Films (où je suis développeur Flex) sur l'exploitation du pétrole en Amazonie pour faire le lien avec la diffusion à l'antenne, le 3 mars, d'un documentaire "Une idée simple et révolutionnaire" sur une proposition originale [...]]]></description>
			<content:encoded><![CDATA[<p>Je présente Le Challenge, <a href="http://lechallenge.canaplus.fr">le procès du pétrole en Amazonie</a> diffusé sur le site de <a href="http://canalplus.fr">canal+</a>.</p>
<p>C'est un web-documentaire de Honkytonk Films (où je suis développeur Flex) sur l'exploitation du pétrole en Amazonie pour faire le lien avec la diffusion à l'antenne, le 3 mars, d'un documentaire "<a href="http://www.canalplus.fr/pid3406.htm?parent_id=1762&#038;nav=1">Une idée simple et révolutionnaire</a>" sur une proposition originale de l'Equateur.</p>
<p>Pendant 30 ans, la compagnie pétrolière Texaco, devenue par la suite Chevron, a exploité la région de Lago Agrio sans respecter l'environnement, y déversant l'équivalent de 30 fois la cargaison de l'Exxon-Valdez.</p>
<p>Sur ce projet j'ai donc était en charge de l'amélioration du player, faisant suite à celui de "<a href="http://www.curiosphere.tv/ressource/22876-lobesite-est-elle-une-fatalite">L'obésité est-elle une fatalité</a>" diffusé sur <a href="http://www.curiosphere.tv">curiosphère</a>, mais aussi du logiciel <a href="http://www.honkytonk.fr/index.php/klynt/">Klynt</a> qui est l'éditeur du webdoc.</p>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/03/le-challenge-le-proces-du-petrole-en-amazonie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SpaceBar, Button &amp; focus!</title>
		<link>http://emmanuelgarnier.net/blog/2010/03/spacebar-button-focus/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/03/spacebar-button-focus/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 09:32:47 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[focus]]></category>
		<category><![CDATA[spacebar]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=34</guid>
		<description><![CDATA[Suite a mon précédent post sur le mise en pause avec le la touche espace voici une petite astuce...
Par défaut, lorsque l'on appuie sur la touche espace dans une application, flex déclenche le dernier bouton sur lequel l'on à appuyer car le focus est dessus.
Mais dans mon application, je veux que la vidéo se mette [...]]]></description>
			<content:encoded><![CDATA[<p>Suite a mon précédent post sur le mise en pause avec le la touche espace voici une petite astuce...</p>
<p>Par défaut, lorsque l'on appuie sur la touche espace dans une application, flex déclenche le dernier bouton sur lequel l'on à appuyer car le focus est dessus.<br />
Mais dans mon application, je veux que la vidéo se mette en pause et c'est tout! et qu'il ne déclenche pas un autre bouton.</p>
<p>Donc voici la solution, il suffit juste de remettre le focus sur le bouton pause dans la fonction de gestion de clavier :</p>
<p><span id="more-34"></span></p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw3">private</span> <span class="kw2">function</span> keyPressHandler<span class="br0">&#40;</span> <span class="kw3">e</span>:KeyboardEvent <span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// if the spaceBar est appuyé on déclenche le bouton play/pause</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span> <span class="kw3">e</span>.<span class="me1">keyCode</span> == 32 <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span> <span class="kw3">this</span>.<span class="me1">focusManager</span>.<span class="kw3">getFocus</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!</span>= Pause_btn <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">focusManager</span>.<span class="kw3">setFocus</span><span class="br0">&#40;</span> Pause_btn <span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; onClickPause<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <br />
<span class="br0">&#125;</span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/03/spacebar-button-focus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bug FullScreen et SpaceBar</title>
		<link>http://emmanuelgarnier.net/blog/2010/03/bug-fullscreen-et-spacebar/</link>
		<comments>http://emmanuelgarnier.net/blog/2010/03/bug-fullscreen-et-spacebar/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 08:05:39 +0000</pubDate>
		<dc:creator>Fennecös</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[fullscreen]]></category>
		<category><![CDATA[spacebar]]></category>

		<guid isPermaLink="false">http://emmanuelgarnier.net/blog/?p=28</guid>
		<description><![CDATA[J'ai récemment rencontré un bug étrange dans un player vidéo en Flex.
Dans cette application, l'utilisateur avait la possibilité de mettre en pause et reprendre la vidéo en appuyant sur la touche espace (spacebar). L'utilisateur avait aussi la possibilité de mettre l'application en plein écran (fullscreen) via un bouton prévu à cet effet.
Cependant, à chaque fois [...]]]></description>
			<content:encoded><![CDATA[<p>J'ai récemment rencontré un bug étrange dans un player vidéo en Flex.</p>
<p>Dans cette application, l'utilisateur avait la possibilité de mettre en pause et reprendre la vidéo en appuyant sur la touche espace (spacebar). L'utilisateur avait aussi la possibilité de mettre l'application en plein écran (fullscreen) via un bouton prévu à cet effet.</p>
<p>Cependant, à chaque fois que l'on mettait l'application en plein écran, la vidéo se mettait en pause!</p>
<p>Après plusieurs essais, je me suis rendu compte que la mise en plein écran déclenchait un évenement clavier sur la touche espace.<br />
<span id="more-28"></span></p>
<p>La solution que j'ai trouvé (peut être pas la meilleure...) est donc de désactiver le clavier au moment de la mise en plein écrant, puis de le réactiver après un Timer.</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw3">private</span> <span class="kw2">var</span> _timerFullScreen:Timer = <span class="kw2">new</span> Timer<span class="br0">&#40;</span>100,1<span class="br0">&#41;</span>;</div>
</div>
<p>puis dans la fonction de passage en fullsreen :</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw3">stage</span>.<span class="me1">removeEventListener</span><span class="br0">&#40;</span> KeyboardEvent.<span class="me1">KEY_DOWN</span>, keyPressHandler <span class="br0">&#41;</span>;<br />
<span class="kw3">stage</span>.<span class="me1">displayState</span> = StageDisplayState.<span class="me1">FULL_SCREEN</span>;<br />
<span class="co1">//timer pour éviter bug sous firefox (fullscreen qui déclenche un événement spacebar...)</span><br />
timerFullScreen.<span class="me1">addEventListener</span><span class="br0">&#40;</span>TimerEvent.<span class="me1">TIMER_COMPLETE</span>, onFullScreen<span class="br0">&#41;</span>;<br />
timerFullScreen.<span class="kw3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</div>
<p>Et enfin la fonction onFullscreen :</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="kw3">private</span> <span class="kw2">function</span> onFullScreen<span class="br0">&#40;</span><span class="kw3">e</span>:Event<span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; timerFullScreen.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; timerFullScreen.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>TimerEvent.<span class="me1">TIMER_COMPLETE</span>, onFullScreen<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span> KeyboardEvent.<span class="me1">KEY_DOWN</span>, keyPressHandler <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://emmanuelgarnier.net/blog/2010/03/bug-fullscreen-et-spacebar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
