<?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>La Fabrick &#187; AIR</title>
	<atom:link href="http://www.lafabrick.com/blog/tag/air/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lafabrick.com/blog</link>
	<description>Laboratoire d&#039;interfaces riches (Flex, Flash, Air ...)</description>
	<lastBuildDate>Mon, 28 Nov 2011 22:02:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>MdaME, ma résolution 2011 de génération de code AS3</title>
		<link>http://www.lafabrick.com/blog/2011/01/11/2349-mdame-generateur-code-xsd-as3-flex/</link>
		<comments>http://www.lafabrick.com/blog/2011/01/11/2349-mdame-generateur-code-xsd-as3-flex/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 21:50:00 +0000</pubDate>
		<dc:creator>La Fabrick</dc:creator>
				<category><![CDATA[La Fabrick]]></category>
		<category><![CDATA[Logiciels / extensions / plugins...]]></category>
		<category><![CDATA[Nos projets]]></category>
		<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[generateur de code]]></category>
		<category><![CDATA[InMarket]]></category>
		<category><![CDATA[MDA]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[xsd]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=2349</guid>
		<description><![CDATA[Voilà quelques temps que nous nous activions sans donner de nouvelles&#8230;, il est temps de corriger tout ça. Aussi, pour démarrer cette nouvelle année du bon pied, La Fabrick vous propose une petite application de génération de code AS3 à partir d&#8217;un schéma XSD. Ce petit outil nous a été utile pour pas mal de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">
<p><a href="http://www.lafabrick.com/blog/wp-content/uploads/2011/01/MdaMe.png"><img class="size-full wp-image-2372 alignnone" title="MdaMe" src="http://www.lafabrick.com/blog/wp-content/uploads/2011/01/MdaMe.png" alt="" width="499" height="64" /></a></p>
<p>Voilà quelques temps que nous nous activions sans donner de nouvelles&#8230;, il est temps de corriger tout ça.<br />
Aussi, pour démarrer cette nouvelle année du bon pied, La Fabrick vous propose une petite application de génération de code AS3 à partir d&#8217;un schéma XSD.</p>
<p>Ce petit outil nous a été utile pour pas mal de projets développés pour nos premiers clients, alors pourquoi ne pas vous en faire profiter ? Peut-être deviendrez-vous aussi MdaME-addict ?</p>
<p>Retrouvez toutes les infos sur <a href="http://mdame.lafabrick.com">http://mdame.lafabrick.com</a>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2006/12/21/23-api-de-dessin-en-as3/" rel="bookmark" title="21 décembre 2006">API de dessin en AS3</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/03/15/39-cre-ton-navigateur-perso-avec-5-lignes-de-code/" rel="bookmark" title="15 mars 2007">Crée ton navigateur perso avec 5 lignes de code !</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/02/27/309-flex-builder-3-et-le-php/" rel="bookmark" title="27 février 2008">Flex Builder 3 et le PHP ( PDT ) : installation</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/05/10/323-tuto-vido-skiner-un-composant-flex-3-avec-fireworks-cs3/" rel="bookmark" title="10 mai 2008">Skiner un composant Flex 3 avec Fireworks CS3 [Tutoriel Vidéo]</a></li>
</ul>
<p><!-- Similar Posts took 11.264 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2011/01/11/2349-mdame-generateur-code-xsd-as3-flex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RollingFileTarget pour AIR 2.0 : let&#8217;s roll !</title>
		<link>http://www.lafabrick.com/blog/2010/10/21/2272-rollingfiletarget-pour-air-2-0-lets-roll/</link>
		<comments>http://www.lafabrick.com/blog/2010/10/21/2272-rollingfiletarget-pour-air-2-0-lets-roll/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 17:35:00 +0000</pubDate>
		<dc:creator>Hervé</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[log]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=2272</guid>
		<description><![CDATA[Pour ceux qui utilisent l&#8217;API de logging de Flex, au sein d&#8217;une application AIR ont certainement remarque qu&#8217;il manquait cruellement une Target &#171;&#160;fichier&#160;&#187; pour tracer dans un fichier texte (même si le résultat de la fonction trace se retrouve enfoui quelque part dans les tréfonds du répertoire de données du Flash Player). Pour ceux qui [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://help.adobe.com/en_US/flex/using/images/lg_logger_target_dist_popup.png" alt="Flex Logging API" width="506" height="60" /></p>
<p>Pour ceux qui utilisent l&#8217;<a href="http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7f0f.html">API de logging de Flex</a>, au sein d&#8217;une application AIR ont certainement remarque qu&#8217;il manquait cruellement une Target &laquo;&nbsp;fichier&nbsp;&raquo; pour tracer dans un fichier texte (même si le résultat de la fonction <strong>trace</strong> se retrouve enfoui quelque part dans les tréfonds du répertoire de données du Flash Player).</p>
<p>Pour ceux qui se sont posés cette question, vous êtes sans doute tombés (Ô joie) sur la <a href="http://github.com/mikechambers/as3corelib/blob/master/src/com/adobe/air/logging/FileTarget.as">FileTarget</a> de notre ami <a href="http://twitter.com/#!/mesh">Mike Chambers</a> dans l&#8217;AS3 core lib.</p>
<p>Pour ceux qui se sont demandé s&#8217;il y avait un équivalent du <strong>RollingFileAppender</strong> de <strong>log4j</strong> en Flex (j&#8217;espère qu&#8217;il en reste, sinon restez, c&#8217;est bien quand même !), eh bien vous êtes certainement tombés sur l&#8217;ensemble vide.</p>
<p>N&#8217;y tenant plus, j&#8217;ai craqué sur une extension de la FileTarget pour créer le RollingFileTarget. Vous en voulez ?<br />
<span id="more-2272"></span></p>
<h2>Un rapide point sur l&#8217;API de logging</h2>
<p>Et pourquoi pas un bon vieux <code><strong>trace("qui tâche")</strong></code> ?<br />
Simplement parce que <strong><code>trace()</code></strong> trace tout, tout le temps, sans indication complémentaire sur le moment, ou la criticité de l&#8217;événement tracé. En clair, c&#8217;est très pratique pour en phase de test simple, lab ou autre, mais devient très vite inapproprié dès qu&#8217;on entre dans un développement structuré.</p>
<h2>Comment faire de jolies traces bien propres <span style="font-size: 8pt;">Aïe</span></h2>
<p>C&#8217;est très simple (cf. doc Flex) :</p>
<h3>La target</h3>
<pre class="brush: js">
/* Create a target. */
var logTarget:TraceTarget = new TraceTarget();

/* Log only messages for the classes in the mx.rpc.* and
mx.messaging packages. */
logTarget.filters=[&quot;mx.rpc.*&quot;,&quot;mx.messaging.*&quot;];

/* Log all log levels. */
logTarget.level = LogEventLevel.ALL;

/* Add date, time, category, and log level to the output. */
logTarget.includeDate = true;
logTarget.includeTime = true;
logTarget.includeCategory = true;
logTarget.includeLevel = true;

/* Begin logging. */
Log.addTarget(logTarget);
</pre>
<p>Vous noterez l&#8217;usage de la <strong>TraceTarget</strong> qui va indiquer d&#8217;envoyer les traces vers la console et donc faire comme la fonction <strong>trace()</strong>.<br />
La target permet d&#8217;aller un peu plus loin en indiquant notamment :</p>
<ul>
<li>le niveau de log : toute trace d&#8217;une criticité inférieure au niveau défini sera donc ignorée</li>
<li>des filtres sur les catégories de log : ces filtres vont permettre de n&#8217;envoyer sur la cible que les traces correspondantes</li>
</ul>
<h3>Le logger</h3>
<p>Nous avons donc une cible, maintenant il faut tracer ! Pour cela, il suffit de créer un logger :</p>
<pre class="brush: js">
private static var _logger:ILogger = Log.getLogger(&quot;com.lafabrick.classes.UneClasse&quot;);
</pre>
<p>Il est en général recommandé de créer un logger par classe de façon statique pour limiter le nombre d&#8217;instances en mémoire.<br />
Vous pouvez noter l&#8217;utilisation de la notation sous forme de packages permettant de faire le lien avec les filtres définis au niveau d&#8217;une target.<br />
Pour utiliser le <code>_logger</code>, vous pouvez appeler les méthodes suivantes :</p>
<pre class="brush: js">
_logger.debug(&quot;Trace niveau debug&quot;);
_logger.info(&quot;Trace niveau info&quot;);
_logger.warn(&quot;Trace niveau warning&quot;);
_logger.error(&quot;Trace niveau error&quot;);
_logger.fatal(&quot;Trace niveau fatal&quot;);
</pre>
<p>Les appels provoqueront l&#8217;ajout de votre trace à tout target définie correspondant au paramétrage de votre logger (catégorie et niveau).</p>
<h2>Faire sa target personnalisée</h2>
<p>Il ne reste plus qu&#8217;à écrire une target personnalisée qui va écrire dans un fichier au lieu d&#8217;écrire dans la console.</p>
<p>Vous pouvez pour cela étendre la classe <strong>AbstractTarget</strong> ou <strong>LineFormattedTarget </strong>(cette dernière prendra en charge la mise en forme du message pour vous, donc bien pratique).</p>
<p>C&#8217;est ce qu&#8217;a fait Mike avec sa <strong>FileTarget</strong> que je vous laisserai consulter sur <a href="http://github.com">Github</a>.</p>
<h2>La RollingFileTarget</h2>
<p>C&#8217;est sur ce modèle que j&#8217;ai développé la <strong>RollingFileTarget</strong> dont l&#8217;objectif est de pratiquer une rotation sur un fichier de log selon deux critères :</p>
<ol>
<li><strong>La date</strong><br />
Objectif : un fichier de log par jour, par mois ou par an</li>
<li><strong>Le poids</strong><br />
Objectif : la taille d&#8217;un fichier de log ne doit pas excéder N octets</li>
</ol>
<p><strong>Utilisation</strong></p>
<p>Il s&#8217;agit d&#8217;une target classique, utilisable comme la <strong>TraceTarget</strong> :</p>
<pre class="brush: js">
var fileTarget:RollingFileTarget = new RollingFileTarget(new File(&quot;app-storage:/logs/monappli.log&quot;));
fileTarget.filters = [&quot;*&quot;];
fileTarget.includeDate = true;
fileTarget.level = LogEventLevel.ERROR;
fileTarget.includeTime = true;
fileTarget.includeCategory = true;
fileTarget.includeLevel = true;
fileTarget.rollingInterval = RollingFileTarget.DAY_INTERVAL; // Un fichier de log par jour
fileTarget.maxLogFileWeight = 0; // Pas de limite de taille de fichier
fileTarget.maxLogBackups = 7; // Une semaine de roulement sur les fichiers de log
Log.addTarget(fileTarget);
</pre>
<p>A noter les trois propriétés suivantes :</p>
<ul>
<li><strong>rollingInterval</strong> : le mode de roulement par date. Vous avez le choix entre <strong>RollingFileTarget</strong>.<strong>DAY_INTERVAL</strong>, <strong>RollingFileTarget</strong>.<strong>MONTH_INTERVAL</strong>, <strong>RollingFileTarget</strong>.<strong>YEAR_INTERVAL</strong>, <strong>RollingFileTarget</strong>.<strong>NO_INTERVAL</strong><br />
Je ne traduis pas, j&#8217;imagine que vous comprenez <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><strong>maxLogFileWeight</strong> : la taille maximale d&#8217;un fichier de log, en octets.<br />
Pour limiter la taille d&#8217;un fichier de log à 5Mo par exemple, vous pouvez indiquer maxLogFileWeight = 5000000. Une valeur à zéro désactive la rotation selon la taille du fichier.</li>
<li><strong>maxLogBackups </strong>: le nombre maximum de backups à conserver.<br />
Le principe réside en la conservation d&#8217;un nombre suffisant de logs pour retrouver les éléments importants ayant pu se passer. En général, une semaine de log suffit pour retrouver ses petits pour une application utilisée raisonnablement.</li>
</ul>
<div>Cette target a pour particularité de renommer le fichier de log courant selon le motif suivant :</div>
<div>
<ol>
<li><strong><span style="color: #008000;">AAAA-MM-JJ</span></strong><strong>-nom.log</strong> pour une rotation par date (<strong>année</strong> sur 4 chiffres, <strong>mois </strong>sur deux chiffres, <strong>jour </strong>sur deux chiffres)</li>
<li><strong>nom.log.</strong><strong><span style="color: #008000;">X</span></strong> pour une rotation par taille (X s&#8217;incrémentant de 1 à chaque rotation)</li>
</ol>
</div>
<p>A savoir que ce motif est utilisé par la target pour détecter les backups existants dans le répertoire de stockage de votre fichier de log principal et gérer ainsi proprement les backups entre deux lancements de l&#8217;application (oui, c&#8217;est rare de laisser tourner son appli pendant 2 semaines sans l&#8217;arrêter&#8230;)</p>
<p>Je n&#8217;ai donc pas préféré laisser le choix sur le motif de renommage pour éviter les problématiques pouvant évidemment en découler. En même temps, on a affaire à des fichiers de logs&#8230;</p>
<p><strong>Note importante :</strong> ces deux politiques sont combinables mais il est plus que conseillé de choisir entre un roulement sur le poids OU un roulement selon la date pour conserver des backup dans un ordre cohérent. En effet, si vous choisissez de combiner la rotation sur la taille ET sur le poids, vous aurez <em>maxLogBackups </em>fichiers de log suivant le motif <strong>AAAA-MM-JJ-nom.log</strong> et <em>maxLogBackups </em>fichiers de log suivant le motif <strong>nom.log.X</strong>.</p>
<p>J&#8217;envisage à terme que lors d&#8217;une rotation par date, l&nbsp;&raquo;ensemble des fichiers de backup par taille existants soient préfixés de la date du jour pour grouper correctement l&#8217;ensemble.</p>
<h3>Téléchargement</h3>
<p>Vous pouvez gracieusement télécharger, utiliser, modifier cette classe comme bon vous semble, La Fabrick déclinant toute responsabilité sur un quelconque dommage, problème ou perte d&#8217;information liée à son utilisation, de manière directe ou indirecte. Veillez également à respecter le copyright indiqué en entête du fichier, merci !</p>
<p><a href="http://github.com/hlabas/as3corelib/blob/master/src/com/adobe/air/logging/RollingFileTarget.as"><img class="aligncenter size-full wp-image-2281" title="Download" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/10/deb.png" alt="Télécharger" width="128" height="128" /></a></p>
<p>A noter bien entendu que cette classe utilise l&#8217;API d&#8217;accès au système de fichiers de AIR et ne peut donc être utilisée qu&#8217;au sein d&#8217;application compilées avec ce runtime.</p>
<p>Bons logs&#8230;Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2008/02/04/299-un-projet-java-flex-avec-maven-2/" rel="bookmark" title="4 février 2008">Un projet Java / Flex avec Maven 2</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/" rel="bookmark" title="20 août 2010">AIR 2 : appeler un JAR exécutable via un NativeProcess</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/02/19/1609-flashplayer-101-et-multi-toucher-caresse-moi-le-flex/" rel="bookmark" title="19 février 2010">Caresse-toi le flex : FlashPlayer 10.1 et Multi-toucher</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/07/28/2092-zxpackager-application-pour-l%e2%80%99empaquetage-zxp-d%e2%80%99extensions-cs5/" rel="bookmark" title="28 juillet 2010">ZXPackager : application pour l’empaquetage ZXP d’extensions CS5</a></li>
</ul>
<p><!-- Similar Posts took 12.234 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2010/10/21/2272-rollingfiletarget-pour-air-2-0-lets-roll/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>AIR 2 : appeler un JAR exécutable via un NativeProcess</title>
		<link>http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/</link>
		<comments>http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 00:21:08 +0000</pubDate>
		<dc:creator>Hervé</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[JAR]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[NativeProcess]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=2167</guid>
		<description><![CDATA[Vous avez certainement pu remarquer l&#8217;apparition attendue de la fonctionnalité d&#8217;exécution de code natif parmi les nouveautés de AIR 2.0. Les NativeProcess permettent d&#8217;étendre significativement les possibilités offertes par une application AIR. Mais, l&#8217;un des gros atouts d&#8217;Adobe AIR résidant dans sa nature multi-plateforme, il serait dommage de restreindre l&#8217;installation de votre application à un [...]]]></description>
			<content:encoded><![CDATA[<p>Vous avez certainement pu remarquer l&#8217;apparition attendue de la fonctionnalité d&#8217;exécution de code natif parmi les nouveautés de AIR 2.0. Les NativeProcess permettent d&#8217;étendre significativement les possibilités offertes par une application AIR.<br />
Mais, l&#8217;un des gros atouts d&#8217;Adobe AIR résidant dans sa nature multi-plateforme, il serait dommage de restreindre l&#8217;installation de votre application à un seul système d&#8217;exploitation&#8230; ça tombe bien, Java aussi est multi-plateforme (c&#8217;est bien l&#8217;open source) : OK du coup comment j&#8217;appelle du Java depuis mon AIR ?<br />
Explications&#8230;<br />
<span id="more-2167"></span></p>
<h2>Fonctionnement et limites d&#8217;un NativeProcess</h2>
<h3>Packaging de l&#8217;application</h3>
<p>Pour diverses raisons de sécurité, une application AIR utilisant un NativeProcess doit être packagée dans le format de la plateforme cible (exe pour Windows, dmg pour Mac, rpm / deb / &#8230; pour Linux). Fini donc dans ce cas le pratique fichier .air qui marche partout !<br />
Vous devez également indiquer dans le descripteur de l&#8217;application qu&#8217;il s&#8217;agit d&#8217;une application au profil &laquo;&nbsp;extendedDesktop&nbsp;&raquo; lui conférant donc les capacités d&#8217;exécuter un NativeProcess.<br />
Vous devez ouvrir le fichier <strong>monAppli-app.xml</strong> et modifier la balise <code>&lt;supportedProfiles&gt;</code></p>
<pre class="brush: xml">
&lt;supportedProfiles&gt;extendedDesktop&lt;/supportedProfiles&gt;
</pre>
<p>A partir de là, si vous tentez d&#8217;exporter un fichier .air, vous aurez un joli message d&#8217;erreur vous invitant à changer de profil.</p>
<h3>Considérations de sécurité</h3>
<p>Si AIR sans native process dispose de limitations de sécurité, dès lors que vous utilisez un native process, vous ouvrez la porte&#8230; Il est donc bon d&#8217;anticiper et de faire un maximum de vérifications sur vos appels pour éviter un remplacement d&#8217;un exécutable par un autre, moins sympathique, par exemple&#8230;</p>
<h2>Prêt ? On code</h2>
<h3>Paramétrage</h3>
<p>Un native process a besoin d&#8217;un contexte d&#8217;exécution. Ce contexte est défini à l&#8217;aide de l&#8217;objet <code>NativeProcessStartupInfo</code> décrivant notamment les éléments suivants :</p>
<ul>
<li><strong>workingDirectory</strong> : le répertoire d&#8217;exécution</li>
<li><strong>executableFile</strong> : l&#8217;exécutable à lancer</li>
<li><strong>arguments</strong> : la liste des arguments à passer à l&#8217;exécutable (<code>Vector.&lt;String&gt;</code> sous Flash Player 10, ou un bête <code>Array</code> sinon)</li>
</ul>
<p>Vous pourrez alors instancier un objet NativeProcess et lui passer cet objet de paramétrage avant de le lancer.</p>
<h3>Lancement &amp; suivi de l&#8217;exécution</h3>
<p>Le lancement d&#8217;un NativeProcess est asynchrone. Il propose donc un certain nombre d&#8217;événements vous permettant de suivre son exécution une fois lancé, notamment :</p>
<ul>
<li><strong>ProgressEvent.STANDARD_OUTPUT_DATA</strong> : écriture sur la sortie standard</li>
<li><strong>ProgressEvent.STANDARD_ERROR_DATA</strong> : écriture sur la sortie d&#8217;erreur</li>
<li><strong>IOErrorEvent.STANDARD_OUTPUT_IO_ERROR</strong> : déclenché lorsqu&#8217;une erreur apparaît en tentant de lire la sortie standard</li>
<li><strong>IOErrorEvent.STANDARD_ERROR_IO_ERROR</strong> : déclenché lorsqu&#8217;une erreur apparaît en tentant de lire la sortie d&#8217;erreur</li>
<li><strong>NativeProcessExitEvent.EXIT</strong> : déclenché lors que l&#8217;exécution du process est terminée</li>
</ul>
<h3>Lecture de l&#8217;entrée / sortie standard</h3>
<p>Bien que tout à fait possible, la lecture de la sortie standard ou d&#8217;erreur via le listener <code>ProgressEvent.STANDARD_OUTPUT_DATA</code> ou <code>ProgressEvent.STANDARD_ERROR_DATA</code> n&#8217;est pas fiable à 100% concernant le contenu retourné : la sortie étant &laquo;&nbsp;bufferisée&nbsp;&raquo;, vous n&#8217;aurez donc pas systématiquement le même résultat selon la machine exécutant le programme, à chaque appel de votre listener&#8230; N&#8217;utilisez donc la lecture de sortie standard que pour afficher ce qui se passe, ou à la limite récupérer la totalité du contenu écrit une fois le process terminé&#8230;</p>
<h2>Appeler un JAR</h2>
<h3>Rappels</h3>
<p>Pour appeler un JAR en Java, il doit être exécutable (bah oui&#8230;), et appelé en ligne de commande de la manière suivante :<br />
<code><br />
java -jar monJar.jar [-cp jars du classpath]<br />
</code><br />
Nous sommes dans une appli AIR, donc évitons de surcharger la commande à appeler avec un classpath, aussi je vous suggère d&#8217;utiliser les fonctionnalités d&#8217;export complets d&#8217;un JAR (si les licences associées vous l&#8217;autorisent) intégrant au final l&#8217;ensemble des sources dans un groooos JAR contenant tout ce qu&#8217;il lui faut pour fonctionner.<br />
<strong>Notes :</strong></p>
<ul>
<li>Les utilisateurs de Maven peuvent utiliser <a title="Plugin maven assembly et configuration associée" href="http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven">le plugin qui va bien pour ça</a>.</li>
<li>L&#8217;export eclipse, c&#8217;est pas mal non plus, il suffit de cocher la &laquo;&nbsp;case qui va bien&nbsp;&raquo; au moment d&#8217;exporter</li>
</ul>
<h3>Depuis un NativeProcess</h3>
<p>On voit mieux ce qui se dessine:</p>
<ol>
<li>Définir l&#8217;exécutable java dans vos &laquo;&nbsp;startup infos&nbsp;&raquo;</li>
<li>Définir les arguments
<ul>
<li>-jar</li>
<li>/chemin/vers/monJar.jar</li>
</ul>
</li>
<li>Ajouter les listeners permettant de savoir lorsque l&#8217;exécution est terminée</li>
<li>Lancer le native process</li>
</ol>
<h3>Restons multi plateforme</h3>
<p>Java est multi plateforme, oui, mais l&#8217;exécutable dépend de la plateforme, aussi il vous faudra récupérer le chemin vers votre JAVA_HOME (contenant le répertoire bin avec l&#8217;exécutable Java).<br />
Vous avez donc deux solutions maintenant:</p>
<ol>
<li><strong>La plus simple</strong> (pour le développeur) : demander à votre gentil utilisateur où est son JAVA_HOME. Ça peut le faire si c&#8217;est un geek velu qui a compris qu&#8217;on ne parlait pas de venir danser chez lui (aïe, elle est rude celle-ci)</li>
<li><strong>La plus compliquée</strong> (mais pratique pour l&#8217;utilisateur) : utiliser un autre exécutable (voire NativeProcess) qui remonte cette information ou permette de pointer directement sur l&#8217;exécutable en question</li>
</ol>
<p>La seconde solution bien que séduisante est un peu plus longue à implémenter.<br />
Pour les développeurs sous Windows, j&#8217;ai noté l&#8217;utilisation par <a href="www.webkitchen.be">Serge Jespers</a> d&#8217;un petit (mais pratique) exécutable &laquo;&nbsp;jexe.exe&nbsp;&raquo; lançant le java.exe présent dans le %JAVA_HOME%\bin de la machine. L&#8217;utiliser vous évitera la première solution, sans vous lancer dans un développement spécifiquement dédié à cela (merci Serge). En revanche, si votre application est diffusée à un public d&#8217;utilisateurs non avertis, ils sont tout à fait susceptibles de ne pas avoir de variable JAVA_HOME définie sur leur machine : pensez donc à déterminer précisément votre cible avant de choisir une solution.</p>
<p>J&#8217;ai également noté en relisant un extrait de la licence du JRE que la redistribution est autorisée sous certaines conditions. Si vous les remplissez, vous pourriez carrément embarquer le runtime java dans votre application AIR, au risque de la faire gonfler en taille&#8230;</p>
<h2>Un exemple ! Un exemple !</h2>
<p>Voici un petit exemple de code permettant de lancer un JAR exécutable depuis une application AIR :</p>
<pre class="brush: java">
package com.lafabrick.nativeprocess
{
import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.events.EventDispatcher;
import flash.events.NativeProcessExitEvent;
import flash.events.ProgressEvent;
import flash.filesystem.File;
import flash.system.Capabilities;

public class JarExec
{
protected var _process:NativeProcess;

public function JarExec()
{
}

public function getDefaultJavaExecutable():File
{
if (Capabilities.os.toLowerCase().indexOf(&quot;win&quot;) &gt; -1)
{
return File.applicationDirectory.resolvePath(&quot;native/jexe.exe&quot;);
}
if (Capabilities.os.toLowerCase().indexOf(&quot;mac&quot;) &gt; -1)
{
// TODO: Changer avec un paramètre de configuration
return new File(&quot;/System/Library/Frameworks/JavaVM.framework/Commands/java&quot;);
}
throw new Error(&quot;Système non pris en charge&quot;);
return null;
}

public function testJava(executablePath:String = null):void
{
// Tester le lancement de l&#039;exécutable &#039;java&#039;
try
{
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
nativeProcessStartupInfo.workingDirectory = File.applicationDirectory;
nativeProcessStartupInfo.executable = (executablePath == null ? getDefaultJavaExecutable() : new File(executablePath));

var args:Vector.&lt;String&gt; = new Vector.&lt;String&gt;();
args.push(&quot;-version&quot;);
nativeProcessStartupInfo.arguments = args;

_process = new NativeProcess();
_process.addEventListener(NativeProcessExitEvent.EXIT, onJavaTestExit);
_process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onStandardOut);
_process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, onErrorOut);
_process.start(nativeProcessStartupInfo);

trace(&quot;-- Début d&#039;exécution&quot;);
}
catch (e:Error)
{
trace(&quot;Impossible de lancer le process\n&quot; + e.message + &quot;\n&quot; + e.getStackTrace());
}
}
protected function onStandardOut(e:ProgressEvent):void
{
trace(&quot;STDOUT: &quot; + _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable));
}
protected function onErrorOut(e:ProgressEvent):void
{
trace(&quot;STDERR: &quot; + _process.standardError.readUTFBytes(_process.standardError.bytesAvailable));
}
protected function onJavaTestExit(e:NativeProcessExitEvent):void
{
trace(&quot;-- Fin d&#039;exécution&quot;);
}
}
}
</pre>
<p>Cet extrait donne un aperçu, mais vous pouvez vous lancer (soyons fous) à installer le package suivant :</p>
<table style="text-align: center;">
<tbody>
<tr>
<td><a href="http://www.lafabrick.com/labz/nativeprocess/NativeJarExec.dmg"><img title="Mac" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/mac.gif" alt="" width="50" height="50" /><br />
Pour Mac</a></td>
<td><a href="http://www.lafabrick.com/labz/nativeprocess/NativeJarExec.exe"><img title="Windows" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/windows.jpeg" alt="" width="50" height="50" /><br />
Pour Windows</a></td>
</tr>
</tbody>
</table>
<p>Pensez au clic droit &gt; View Source&#8230;</p>
<h2>Packager l&#8217;application</h2>
<p>Comme je le disais au début de ce post, il est nécessaire de packager votre application dans le format natif du système d&#8217;exploitation visé. Vous avez deux solutions pour cela :</p>
<ol>
<li>Passer par la dernière version de Flash Builder 4 qui propose cette fonctionnalité</li>
<li>Utiliser l&#8217;application <a href="http://www.webkitchen.be/package-assistant-pro/">PackageAssistantPro</a> proposée par <a href="http://www.webkitchen.be">Serge Jespers</a> (re merci Serge)</li>
</ol>
<p>Il s&#8217;agit d&#8217;une application AIR utilisant des NativeProcess (et packagée en ligne de commande vu que l&#8217;application n&#8217;existait pas avant&#8230; Remarquez, la version 2 et plus ont probablement été packagées avec la version 1&#8230; Mais je m&#8217;égare)</p>
<h2>Quelques liens</h2>
<ul>
<li>Un petit exemple d&#8217;application utilisant un NativeProcess : <a href="http://www.lafabrick.com/blog/2010/07/28/2092-zxpackager-application-pour-l%e2%80%99empaquetage-zxp-d%e2%80%99extensions-cs5/">ZXPackager</a></li>
<li><a lang="en_US" href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/desktop/NativeProcess.html">ASDoc de la classe NativeProcess [EN]</a></li>
<li><a lang="en_US" href="http://www.adobe.com/devnet/air/flex/quickstart/interacting_with_native_process.html">Un bon article pour démarrer [EN]</a></li>
</ul>
<p>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2008/02/04/299-un-projet-java-flex-avec-maven-2/" rel="bookmark" title="4 février 2008">Un projet Java / Flex avec Maven 2</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/04/06/1754-arduino-2-flash-socket-et-processing/" rel="bookmark" title="6 avril 2010">Arduino #2 : Flash, socket et Processing</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/07/28/2092-zxpackager-application-pour-l%e2%80%99empaquetage-zxp-d%e2%80%99extensions-cs5/" rel="bookmark" title="28 juillet 2010">ZXPackager : application pour l’empaquetage ZXP d’extensions CS5</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/10/21/2272-rollingfiletarget-pour-air-2-0-lets-roll/" rel="bookmark" title="21 octobre 2010">RollingFileTarget pour AIR 2.0 : let&#8217;s roll !</a></li>
</ul>
<p><!-- Similar Posts took 13.988 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ZXPackager : application pour l’empaquetage ZXP d’extensions CS5</title>
		<link>http://www.lafabrick.com/blog/2010/07/28/2092-zxpackager-application-pour-l%e2%80%99empaquetage-zxp-d%e2%80%99extensions-cs5/</link>
		<comments>http://www.lafabrick.com/blog/2010/07/28/2092-zxpackager-application-pour-l%e2%80%99empaquetage-zxp-d%e2%80%99extensions-cs5/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 21:10:53 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[La Fabrick]]></category>
		<category><![CDATA[Nos projets]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Lafabrick]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[zxp]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=2092</guid>
		<description><![CDATA[Vous l&#8217;aurez peut être remarqué, nous avons ajouté une rubrique Applications au blog. Nous travaillons actuellement sur plusieurs applications AIR orientées &#171;&#160;aide au développeur&#160;&#187;. ZXPackager est la première d&#8217;entre elles. Cette application propose un moyen simple de packager vos extensions CS5 développées avec le nouveau SDK Creative Suite. Les extensions ZXP Depuis la CS5, Adobe [...]]]></description>
			<content:encoded><![CDATA[<table width="100%">
<tbody>
<tr>
<td width="125px"><img class="aligncenter size-full wp-image-2099" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/logo128.png" alt="" width="128" height="128" /></td>
<td width="100%">Vous l&#8217;aurez peut être remarqué, nous avons ajouté une rubrique <a href="http://www.lafabrick.com/blog/applications/">Applications</a> au blog. Nous travaillons actuellement sur plusieurs applications AIR orientées &laquo;&nbsp;aide au développeur&nbsp;&raquo;. ZXPackager est la première d&#8217;entre elles.</p>
<p>Cette application propose un moyen simple de packager vos extensions CS5 développées avec le nouveau SDK Creative Suite.</td>
</tr>
</tbody>
</table>
<p><span id="more-2092"></span></p>
<h2>Les extensions ZXP</h2>
<p>Depuis la CS5, Adobe propose un nouveau SDK de développement et un format d&#8217;extension commun a toute la suite logicielle.<br />
Ce SDK, <a href="http://www.adobe.com/devnet/creativesuite/sdk/eula_cs5_toolkit.html">disponible ici</a>, vous permet de développer vos propres panneaux et autres menus CS5. Le premier format de sortie est le MXP, toujours disponible, vous permettant d&#8217;exporter votre extension pour un logiciel cible.<br />
Maintenant, avec la CS5, vous disposez d&#8217;un format commun, le ZXP, qui rend compatible votre extension avec toutes la suites CS.</p>
<p>Un fichier ZXP est défini par un manifeste xml, définissant le fonctionnement de l&#8217;extension (type, portée logiciel, &#8230;), et contient le (les) SWF de l&#8217;extension (une extension est en fait une pseudo application AIR, basée sur le SDK CS). Un fichier ZXP est signé numériquement. Vous devez donc avoir un certificat (PKCS12, PKCS11, JKS). Vous pouvez bien entendu utiliser votre certificat auto-signé préalablement créé avec Flash/Flex Buider.</p>
<p>Pour plus d&#8217;informations :</p>
<ul>
<li><a href="http://www.adobe.com/devnet/creativesuite/sdk/index.html">Creative Suite SDK</a></li>
<li><a href="http://blogs.adobe.com/cssdk/">le blog CSSDK</a></li>
</ul>
<p>Un fichier ZXP doit (habituellement) être compilé en utilisant le packager Java <a href="http://www.adobe.com/devnet/creativesuite/sdk/eula_cs5_toolkit.html">UCF</a>. Et c&#8217;est là l&#8217;idée de cette petite application : ne pas avoir a redéfinir vos certificats et autres options pour chaque package, et vous proposer une interface plus &laquo;&nbsp;user friendly&nbsp;&raquo; que le terminal.</p>
<h2>Fonctionnement</h2>
<h3>Démarrage, et préférences</h3>
<p>Au premier démarrage, l&#8217;application doit obtenir vos préférences de base.</p>
<p><img class="aligncenter size-full wp-image-2100" title="Preferences" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/Preferences.png" alt="Preferences" width="500" height="450" /></p>
<ul>
<li>
<h4>Java Home</h4>
<p>Vous devez indiquer le chemin vers votre JDK/JRE java, si celui-ci ne correspond pas à celui par défaut (l&#8217;application intègre le packager jar UCF, et elle doit connaître le répertoire racine de Java pour pouvoir le lancer). Les chemins racines par défaut sont:</p>
<ul>
<li>Pour Windows : <strong>&#8216;C:\Program Files\Java\jdk1.6.0&#8242;</strong></li>
<li>Pour Mac : <strong>&#8216;/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0&#8242;</strong></li>
</ul>
</li>
<li>
<h4>Certificat</h4>
<p>Vous devez préciser l&#8217;emplacement de votre certificat (généralement un fichier de type .p12 ou .p11), ainsi que votre mot de passe. Ces informations sont nécessaires pour la signature de l&#8217;extension.</p>
<ul>
<li>
<h4>Fichier cible</h4>
<p>Vous devez indiquer le fichier de destination. L&#8217;extension .zxp est ajoutée automatiquement.</li>
<li>
<h4>Source de l&#8217;extension</h4>
</li>
<p>Les sources de l&#8217;extension, comme défini dans la nomenclature du SDK CS, doivent correspondre à ce schéma:</p>
<p><img class="aligncenter size-full wp-image-2096" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/binPackageOverview.png" alt="" width="537" height="80" /><br />
Ce répertoire est construit préalablement par la tâche ant de compilation, dans votre projet (cf. en fin d&#8217;article, le téléchargement du projet test d&#8217;extension)<br />
Vous devez pointer sur le répertoire &laquo;&nbsp;bin&nbsp;&raquo;.</ul>
<ul>
<li>Démarrer un nouveau package;</li>
<li>Ouvrir et installer l&#8217;extension via Extension Manager (vous devez bien entendu avoir préalablement installé Extension Manager CS5)</li>
</ul>
<ul>
<li><a href="http://lafabrick.com/applications/zxpackager/extensionTest.fxp">Projet fxp</a></li>
<li><a href="http://lafabrick.com/applications/zxpackager/bin.zip">Archive zip du bin de test</a></li>
</ul>
</li>
<h3>Définition de votre extension</h3>
<p>Un package ZXP a besoin de 2 informations : le nom et l&#8217;emplacement de votre extension cible, et l&#8217;endroit où se trouve le répertoire &laquo;&nbsp;bin&nbsp;&raquo; de votre extension.</p>
<p><img class="aligncenter size-full wp-image-2102" title="StartProject" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/StartProject.png" alt="start package" width="500" height="450" /></p>
<p>Une fois le packaging démarré, un message d&#8217;attente s&#8217;affiche.</p>
<p><img class="aligncenter size-full wp-image-2103" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/waiting-mini.png" alt="" width="467" height="48" /></p>
<h3>Finalisation</h3>
<p>Une fois le package créé, l&#8217;application vous propose de :</p>
<p><img class="aligncenter size-full wp-image-2097" title="completed" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/completed.png" alt="" width="500" height="450" /></p>
<h2>Téléchargements</h2>
<h3>ZXPackager</h3>
<table>
<tbody>
<tr>
<td width="128"><a href="http://www.lafabrick.com/applications/zxpackager/ZXPackager-MAC.zip"><img class="aligncenter size-full wp-image-2137" title="macPackageExport" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/macPackageExport.png" alt="" width="128" height="128" /></a></td>
<td width="128"><a href="http://www.lafabrick.com/applications/zxpackager/ZXPackager-WIN.zip"><img class="aligncenter size-full wp-image-2137" title="winPackageExport" src="http://www.lafabrick.com/blog/wp-content/uploads/2010/07/winPackageExport.png" alt="" width="128" height="128" /></a></td>
</tr>
</tbody>
</table>
<h3>Extension de test</h3>
</ul>
<p>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/09/04/206-flex-3-beta-rsolution-de-bug-comment-placer-fichier-d-application/" rel="bookmark" title="4 septembre 2007">[Flex 3 Beta] bug : Application File doesn&#8217;t exist</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/02/04/299-un-projet-java-flex-avec-maven-2/" rel="bookmark" title="4 février 2008">Un projet Java / Flex avec Maven 2</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/08/20/2167-air-2-appeler-un-jar-executable-via-un-nativeprocess/" rel="bookmark" title="20 août 2010">AIR 2 : appeler un JAR exécutable via un NativeProcess</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/10/21/2272-rollingfiletarget-pour-air-2-0-lets-roll/" rel="bookmark" title="21 octobre 2010">RollingFileTarget pour AIR 2.0 : let&#8217;s roll !</a></li>
</ul>
<p><!-- Similar Posts took 13.300 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2010/07/28/2092-zxpackager-application-pour-l%e2%80%99empaquetage-zxp-d%e2%80%99extensions-cs5/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Caresse-toi le flex : FlashPlayer 10.1 et Multi-toucher</title>
		<link>http://www.lafabrick.com/blog/2010/02/19/1609-flashplayer-101-et-multi-toucher-caresse-moi-le-flex/</link>
		<comments>http://www.lafabrick.com/blog/2010/02/19/1609-flashplayer-101-et-multi-toucher-caresse-moi-le-flex/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 16:11:39 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Expériences utilisateur]]></category>
		<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[FlashPlayer]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[multitouch]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1609</guid>
		<description><![CDATA[Vous le savez surement, la beta de Flash Player 10.1 nous permet maintenant à nous aussi, practiciens de la flash platform, d&#8217;entrer dans l&#8217;ère de l&#8217;expérience tactile. &#171;&#160;Pretty exciting&#160;&#187;! pourrait-on s&#8217;exclamer, mais puisque l&#8217;air du temps est plutôt à l&#8217;identitaire national, faisons un effort et parlons &#171;&#160;franc&#160;&#187; : le multi-toucher, çà envoie bien du cervelas [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lafabrick.com/blog/wp-content/uploads/2010/02/gesturenotifierbandeau.jpg" alt="gesturenotifierbandeau" title="gesturenotifierbandeau" width="520" height="130" class="alignnone size-medium wp-image-1612" /></p>
<p>Vous le savez surement, la beta de Flash Player 10.1  nous permet maintenant à nous aussi, practiciens de la flash platform, d&#8217;entrer dans l&#8217;ère de l&#8217;expérience tactile. &laquo;&nbsp;Pretty exciting&nbsp;&raquo;!  pourrait-on s&#8217;exclamer, mais puisque l&#8217;air du temps est plutôt à l&#8217;identitaire national, faisons un effort et parlons &laquo;&nbsp;franc&nbsp;&raquo; : le multi-toucher, çà envoie bien du cervelas en croûte !!!</p>
<p><span id="more-1609"></span></p>
<p>Bon alors par contre pour profiter dès aujourd&#8217;hui du jouet, il est nécessaire de valider une des conditions suivantes :<br />
- posséder un macbook (pro) récent sous snow leopard ( 10.6 ) (je sais pas trop si ca marche avec les magic mouse)<br />
- posséder un pc sous windows 7&#8230; avec écran multitouch<br />
- ou encore plus rare, faire partie des betatesteurs du prochain flash CS(x)&#8230; et d&#8217;une licence de dev iphone&#8230; et d&#8217;un iphone&#8230; ( d&#8217;ici quelques mois, les possesseurs de <a href="http://tv.adobe.com/watch/adobe-at-mobile-world-congress-2010/nvidia-runs-flash-player-101-and-adobe-air-on-tablet-devices/"> la plupart téléphones/tablettes tactiles</a> et du prochain flash CS(x) pourront eux aussi jouer ).</p>
<h2>Installation</h2>
<p>Si tu as passé la 1ère épreuve, il te reste l&#8217;épreuve pratique : <a href="http://labs.adobe.com/technologies/air2/">l&#8217;installation du SDK et du runtime AIR 2.0 ( beta1 ou beta2 )</a></p>
<p>Pour une installation &laquo;&nbsp;optimale&nbsp;&raquo; :<br />
- Flash Builder Beta2 : <a href="http://labs.adobe.com/technologies/flashbuilder4/">http://labs.adobe.com/technologies/flashbuilder4/</a><br />
- une version stable récente du SDK Flex : 4.0.0.13875 datée du 29.01.2010 <a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4">http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4</a> ( pas mal de choses ont évoluées depuis la version 4.0.0.10485 distribuées avec Flash Builder beta 2 )<br />
- placez le contenu du SDK téléchargé dans : Dossier Flash Builder Beta2/sdks/<br />
- Installez le runtime et téléchargez le SDK <a href="http://labs.adobe.com/technologies/air2/">AIR 2 beta 2</a> cf. <a href="http://labs.adobe.com/wiki/index.php/AIR_2:Release_Notes">guide d&#8217;installation du SDK</a><br />
- Dans les préférences de FlashBuilder/Eclipse : Flash Builder / installed Flex SDKs / , ajoutez le SDK modifié pour AIR 2.</p>
<p>Et maintenant, la création du projet :<br />
Nouveau projet Flex : Application Type : Desktop / AIR, SDK version : 4.0 ( celle avec mise à jour du SDK AIR 2  )</p>
<p><img src="http://www.lafabrick.com/blog/wp-content/uploads/2010/02/flextouchproject.jpg" alt="flextouchproject" title="flextouchproject" width="619" height="372" class="alignnone size-full wp-image-1644" /></p>
<h2>AS3 et le multi-toucher, comment çà marche ?</h2>
<p>Premièrement, on trouve maintenant dans le package flash.ui une nouvelle classe <b>Multitouch</b>.<br />
Elle permet de tester les <b>compatibilités de l&#8217;environnement</b> ( nombre de pressions/doigts gérés, combinaisons tactiles gérés&#8230; ) , et de définir le <b>&laquo;&nbsp;mode tactile&nbsp;&raquo;</b> : Gesture ou TouchPoint.<br />
Ce dernier précise si l&#8217;on veut capter les &laquo;&nbsp;combinaisons tactiles&nbsp;&raquo; classiques : Rotation, Glisser, Zoom et &laquo;&nbsp;Grand coup&nbsp;&raquo; ( NDLR = Swipe, déplacement de trois pression/doigts ) ou le détail de chaque pression/doigts. Dans la beta actuelle, <strong>seul Windows 7 permet la gestion du mode &laquo;&nbsp;TouchPoint&nbsp;&raquo;</strong>, les utilisateurs de OSX devront se &laquo;&nbsp;contenter&nbsp;&raquo; des combinaisons classiques.</p>
<pre class="brush: js">
trace( &#039;max touch : &#039; , Multitouch.maxTouchPoints );
trace( &#039;supportsGestureEvents : &#039; , Multitouch. supportsGestureEvents );
trace( &#039;supportsTouchEvents : &#039; , Multitouch. supportsTouchEvents );
trace( &#039;supportedGestures : &#039; , Multitouch. supportedGestures );
if( Multitouch. supportsTouchEvents )
     Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
// par défaut = MultitouchInputMode.GESTURE
</pre>
<p><img src="http://www.lafabrick.com/blog/wp-content/uploads/2010/02/gesturesvisualisation.jpg" alt="gesturesvisualisation" title="gesturesvisualisation" width="595" height="134" class="alignnone size-full wp-image-1634" /></p>
<p>Ensuite c&#8217;est l&#8217;autoroute :ajout des écouteurs d&#8217;événements qui vont bien, et c&#8217;est bon&#8230; tu peux caresser ton flex. Chaque transformGestureEvent contient, en fonction de son type, un offSetX/offSetY ( pan &#038; swipe ), un scaleX/scaleY ( zoom ) ou une rotation.</p>
<pre class="brush: js">
// gestures prises en charge par OSX 10.6 avec FP 10.1 b2
interactiveObject.addEventListener( TransformGestureEvent.GESTURE_PAN, onGesture );
interactiveObject.addEventListener( TransformGestureEvent.GESTURE_SWIPE, onGesture );
interactiveObject.addEventListener( TransformGestureEvent.GESTURE_ROTATE, onGesture );
interactiveObject.addEventListener( TransformGestureEvent.GESTURE_ZOOM, onGesture );

public function onGesture( e:TransformGestureEvent ):void
{
     // phase = GesturePhase.BEGIN, GesturePhase.UPDATE ou GesturePhase.END
     trace( &#039;Gesture :&#039;, e.type, &#039; phase :&#039;, e.phase );

     // tu fais des trucs en fonctions du types de toucher
     switch( e.type )
     {
           case TransformGestureEvent.GESTURE_PAN:
                  interactiveObject.x += e.offsetX;
                  interactiveObject.y += e.offsetY;
           break;

           case TransformGestureEvent.GESTURE_SWIPE: // déplace de 50 pixels
                  interactiveObject.x += e.offsetX * 50;
                  interactiveObject.y += e.offsetY * 50;
           break;

           case TransformGestureEvent.GESTURE_ZOOM:
                  interactiveObject.scaleX +=  e.scaleX - 1 ;
                  interactiveObject.scaleY +=  e.scaleY - 1 ;
           break;

           case TransformGestureEvent.GESTURE_ROTATE:
                  interactiveObject.rotation += e.rotation;
           break;
     }
}
</pre>
<p>Plutôt simple, mais plein de potentiel&#8230;</p>
<p><object width="600" height="361"><param name="movie" value="http://images.tv.adobe.com/swf/player.swf"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="FlashVars" value="fileID=5117&#038;context=145&#038;embeded=true&#038;environment=production"></param><embed src="http://images.tv.adobe.com/swf/player.swf" flashvars="fileID=5117&#038;context=145&#038;embeded=true&#038;environment=production" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="351"></embed></object></p>
<p>Avec ces 4 gestures on peut quand même &laquo;&nbsp;gérer&nbsp;&raquo; 8 + 4 + 2 + 2 soit 16 combinaisons si on prend en compte les directions de chaque gesture. Exemple : SWIPE horizontal = 1 fonction, SWIPE vertical = 1 autre, PAN horizontal = 1 fonction&#8230;<br />
L&#8217;exemple du magazine interactif pourrait par exemple parfaitement bénéficier de ces différentes combinaisons. À ce niveau tout un vocabulaire tactile reste à imaginer/compléter.</p>
<p>Bref, moi je suis bien content de pouvoir me caresser le flex !!!</p>
<h2>GestureTracker</h2>
<p>Par contre, en vrai novice de la programmation orientée caresse, mes premières touches furent, comment dire&#8230; hésitantes; du coup je me suis créé un petit assistant pour m&#8217;aider à la tâche, ou à la touche : le <b>GestureTracker</b>, un petit système de notification de gestures. Le but : <b>calculer et visualiser les gestures en cours, leur valeurs et les transformations globales appliquées</b>.</p>
<img src="http://www.lafabrick.com/blog/wp-content/uploads/2010/02/gesturenotification.jpg" alt="GestureTracker" title="gesturenotification" width="620" height="256" class="size-full wp-image-1638" />
<p>Pour le moment c&#8217;est pour les projets AIR 2 sous Flex 4,  la version AS3 à suivre&#8230;</p>
<p>C&#8217;est tout pour le moment,  v&#8217;là pour <a href="http://lafabrick.com/labz/gesturetracker/GestureNotifier.air.zip">l&#8217;exemple air</a> ( <a href="http://labs.adobe.com/technologies/air2/"> AIR Runtime 2.0 beta 2 est requis</a>) , le <a href="http://lafabrick.com/labz/gesturetracker/GestureTracker.zip">swc du SparkGestureTracker</a> et les <a href="http://lafabrick.com/labz/gesturetracker/srcview/">sources</a>.</p>
<p>Pour plus d&#8217;infos :<br />
<a href="http://www.adobe.com/devnet/flash/articles/multitouch_gestures_print.html">Un tuto sur le multitouch</a> ,  une <a href="http://theflashblog.com/?p=1678">partie des réponses aux nombreuses interrogations</a> sur les compatibilités actuelles et à venir.</p>
<p>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/11/15/266-debuguer-un-projet-flex-distant-via-flex-builder/" rel="bookmark" title="15 novembre 2007">L&#8217;erreur est humaine&#8230; debuguer un projet Flex distant via Flex Builder</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/05/04/1130-interfaces-tangibles-le-futur-du-multitouch/" rel="bookmark" title="4 mai 2009">Interfaces tangibles : le futur du multitouch</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/10/09/1286-max-09-le-multitouch/" rel="bookmark" title="9 octobre 2009">MAX 09 &#8211; Le multitouch</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/10/21/2272-rollingfiletarget-pour-air-2-0-lets-roll/" rel="bookmark" title="21 octobre 2010">RollingFileTarget pour AIR 2.0 : let&#8217;s roll !</a></li>
</ul>
<p><!-- Similar Posts took 12.448 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2010/02/19/1609-flashplayer-101-et-multi-toucher-caresse-moi-le-flex/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>MAX 09 &#8211; Sneak Peeks !</title>
		<link>http://www.lafabrick.com/blog/2009/10/09/1245-max-09-sneak-peeks/</link>
		<comments>http://www.lafabrick.com/blog/2009/10/09/1245-max-09-sneak-peeks/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 02:33:14 +0000</pubDate>
		<dc:creator>La Fabrick</dc:creator>
				<category><![CDATA[Bientôt chez vous]]></category>
		<category><![CDATA[Expériences utilisateur]]></category>
		<category><![CDATA[Pure Style]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[MAX]]></category>
		<category><![CDATA[Sneak Peeks]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1245</guid>
		<description><![CDATA[Ah oui, au fait, juste avant de commencer : un mot sur les Awards. Nous avons eu droit à une présentation des MAX Awards par Mark Hamil juste avant la session Sneak Peeks. On ne reviens pas dessus tellement nous avons trouvé ça pauvre en information. Nous sommes certains que les projets choisis sont effectivement [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1322" title="sneakpeeksmosaic" src="http://www.lafabrick.com/blog/wp-content/uploads/2009/10/sneakpeeksmosaic.jpg" alt="sneakpeeksmosaic" width="512" height="192" /></p>
<p>Ah oui, au fait, juste avant de commencer : un mot sur les Awards. Nous avons eu droit à une présentation des MAX Awards par Mark Hamil juste avant la session Sneak Peeks. On ne reviens pas dessus tellement nous avons trouvé ça pauvre en information. Nous sommes certains que les projets choisis sont effectivement géniaux, mais nous n&#8217;avons vraiment pas eu l&#8217;occasion d&#8217;en voir suffisamment et d&#8217;en entendre parler leurs concepteurs pour se faire une quelconque idée de la chose.</p>
<p>Voici plutôt un aperçu de ces Sneak Peeks particulièrement intéressants sur les innovations en cours chez Adobe. Le principe est simple : prenez Mark Hamil (Luke Skywalker pour les intimes) comme présentateur qui ne comprend rien aux technologies montrées, déguisez les ingénieurs Adobe en chevaliers de l&#8217;empire, Chewbacca ou princesse Leïa et vous obtenez un show de geek vraiment sympa et impressionnant.</p>
<p><span id="more-1245"></span></p>
<h2>Principe</h2>
<p>Chaque équipe passe présenter son projet et doit rivaliser d&#8217;idées innovantes pour obtenir les clameurs de la foule en folie. Ca va vite, ils font souvent des blagues et vont parfois jusqu&#8217;à scénariser la présentation. C&#8217;est vraiment excellent ! Les infos passent très bien, on ne s&#8217;ennuie pas&#8230; Voyons voir.</p>
<h2>Mobile</h2>
<p>L&#8217;équipe mobile nous a présenté un jeu multi-joueurs utilisable depuis différents terminaux mobiles (Palm, Google Android, Nokia&#8230;), une application AIR sur portable et en mode web sur PC. Le principe technique est que ce jeu s&#8217;exécute côté serveur et que les images du jeu sont envoyées en streaming sur les terminaux (un peu comme une vidéo YouTube). Chaque commande est également envoyée au serveur pour lui permettre de calculer le comportement attendu pour le joueur.</p>
<p>Même si la technicité est certainement élevée et innovante, la pauvre bande passante du Wi-Fi disponible a montré les lacunes de l&#8217;outil. L&#8217;intérêt reste à notre sens assez limité, bien que nous ne soyons pas des spécialistes du jeu en ligne. On salue quand même la performance (faut le faire non ?)</p>
<h2>Flash</h2>
<p><img class="size-thumbnail wp-image-133" style="float: left; border: none" title="Flash pro" src="http://herve.lafabrick.com/blog/wp-content/uploads/2009/10/Fl-150x150.jpg" alt="Flash pro" width="54" height="54" /><img style="float: right;" title="Chewbacca" src="http://herve.lafabrick.com/blog/wp-content/uploads/2009/10/IMG_3276-300x225.jpg" alt="Chewbacca" width="138" height="104" />La démo Flash est assurée par Chewbacca en personne. Il nous montre comment la future version de Flash Professionnel permettra de générer des animations de formes à l&#8217;aide d&#8217;un moteur physique pour leur donner un aspect particulièrement réaliste. L&#8217;exemple ci-après est réalisé à partir de dessins de formes vectoriel et d&#8217;activation de quelques cases à cocher&#8230;</p>
<p style="text-align: center; "><object width="425" height="344" data="http://www.youtube.com/v/6SqZydjxziI&amp;hl=fr&amp;fs=1&amp;rel=0&amp;color1=0x5d1719&amp;color2=0xcd311b" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/6SqZydjxziI&amp;hl=fr&amp;fs=1&amp;rel=0&amp;color1=0x5d1719&amp;color2=0xcd311b" /><param name="allowfullscreen" value="true" /></object></p>
<p>On vous laisse imaginer les possibilités offertes au designer pour réaliser des animations réalistes et relativement complexes en quelques clics, c&#8217;est vraiment intéressant pour le monde de la création.</p>
<h2>Flex pour mobile</h2>
<p><img class="size-thumbnail wp-image-135" style="float: left; border: none" title="Fx" src="http://herve.lafabrick.com/blog/wp-content/uploads/2009/10/Fx-150x150.jpg" alt="Fx" width="54" height="54" />Cette fois, c&#8217;est princesse Leia qui procède à la présentation d&#8217;un développement en environnement Flex avec le framework mobile. Concrètement, il/elle utilise des composants liste et champ de recherche, compile et lance une application ressemblant plus que fortement à une application iPhone de recherche et affichage d&#8217;informations.</p>
<p><img class="aligncenter size-medium wp-image-126" title="Leia" src="http://herve.lafabrick.com/blog/wp-content/uploads/2009/10/IMG_3285-300x225.jpg" alt="Leia" width="300" height="225" /></p>
<p>Le résultat, affiché sur un iPhone (forcément&#8230;), est particulièrement réussi, très réactif. C&#8217;est impressionnant, en tant que développeurs Flex de voir la simplicité du développement Flex apportée sur un environnement de ce type !</p>
<h2>Photoshop</h2>
<p><img style="float: left; border: none" title="Ps" src="http://www.mti.epita.fr/blogs/wp-content/uploads/image1.png" alt="" width="61" height="61" />On ne sait plus à quoi s&#8217;attendre sur Photoshop. Le logiciel vit depuis un certain temps, et pourtant cette présentation nous a laissé sur le c&#8230; pardon, pantois.</p>
<p>Concrètement, l&#8217;équipe a travaillé sur une <strong>fonctionnalité de gommage intelligent (mathpatch)</strong>, interprétant la globalité de l&#8217;image pour remplacer le contenu supprimé par un contenu particulièrement réaliste. Le résultat est absolument hallucinant. Vous pouvez supprimer le fameux fil électrique qui rature le beau bâtiment à présent.</p>
<p>Ce fonctionnement a carrément été appliqué à des parties d&#8217;images : la démonstration montre le conférencier supprimer une usine de la vue de la photos. 20% de l&#8217;image est recomposée automatiquement. On constate déjà un peu plus l&#8217;intervention de la machine, mais en faisant attention. Bluffant !</p>
<h2>Fireworks</h2>
<p><img style="float: left; border: none" title="Fireworks" src="http://www.scl.utah.edu/computers/mac/software/images/softicons/Fireworks_CS3.png" alt="" width="64" height="64" />L&#8217;équipe Fireworks a présenté une fonctionnalité de <strong>retour arrière sur ses actions de manière ciblée</strong>. Concrètement, vous travaillez sur une partie de votre image, puis une seconde et ne voulez annuler que les changements effectués sur la première partie, mais pas sur la seconde, vous pouvez sélectionner ladite première partie et <strong>annuler uniquement ces changements</strong> : particulièrement pratique pour les designers habitués à ce genre d&#8217;outils !</p>
<h2>Dreamweaver</h2>
<p><img class="size-thumbnail wp-image-128" style="float: left; border: none" title="Dw" src="http://herve.lafabrick.com/blog/wp-content/uploads/2009/10/Dw-150x150.png" alt="Dw" width="63" height="63" />Nous n&#8217;avons pas particulièrement l&#8217;utilisation de Dreamweaver habituellement, mais on retient cette démonstration, particulièrement intéressante pour l&#8217;utilisation de la nouvelle norme HTML 5.</p>
<p>En l&#8217;occurrence, une nouvelle spécification est sortie (HTML 5) intégrant notamment un notion de Canvas, des interactions et animations pouvant être définies pour ce canvas. Adobe montre une forte volonté de tirer partie de cette nouvelle solution en permettant un <strong>copier coller depuis Flash dans Dreamweaver</strong> d&#8217;une animation Flash, Dreamweaver la transformant en animation native Canvas.</p>
<p>L&#8217;intérêt ? Pas de Flash Player, des performances excellentes, et une adéquation parfaite aux standards. Une excellente initiative pour tenter de se <strong>rapprocher du standard</strong> plutôt que chercher à l&#8217;évincer.</p>
<h2>AIR : Rome</h2>
<p><img class="size-thumbnail wp-image-129" style="float: left; border: none" title="AIR" src="http://herve.lafabrick.com/blog/wp-content/uploads/2009/10/AIR-150x150.png" alt="AIR" width="63" height="63" />Attention, énorme application. Le conférencier nous présente un outil à l&#8217;ergonomie particulièrement réfléchie et léchée regroupant en quelque sorte le principale de chaque outil d&#8217;Adobe. Vous pouvez dessiner en vectoriel (Illustrator / Fireworks), ajouter des animations (Flash), importer des calques Photoshop, ajouter des écrans et créer une interaction type navigation entre écrans (Flash Catalyst).</p>
<p>Enfin, vous pouvez exporter votre travail en SWF, AIR, SVG, image, page HTML, PDF&#8230; Tout cela étant, également fonctionnel en mode Internet : il y avait de la bave sur les sièges&#8230;</p>
<p>Pour nous, c&#8217;est le vainqueur. C&#8217;est absolument impressionnant à voir ! Ca montre notamment les capacités offertes par AIR et confirme son positionnement sur une application Internet mêlée à une application de bureau.</p>
<p style="text-align: center"><object width="425" height="344" data="http://www.youtube.com/v/nzXCadMUPCc&amp;hl=fr&amp;fs=1&amp;rel=0&amp;color1=0x006699&amp;color2=0x54abd6" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/nzXCadMUPCc&amp;hl=fr&amp;fs=1&amp;rel=0&amp;color1=0x006699&amp;color2=0x54abd6" /><param name="allowfullscreen" value="true" /></object>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/05/24/110-du-html-dans-mon-flex/" rel="bookmark" title="24 mai 2007">Du HTML dans mon Flex&#8230;</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/12/01/459-live-from-max-milan-hands-on-thermo/" rel="bookmark" title="1 décembre 2008">Live from MAX Milan : hands on thermo&#8230;</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/10/09/1286-max-09-le-multitouch/" rel="bookmark" title="9 octobre 2009">MAX 09 &#8211; Le multitouch</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/10/09/1243-max-09-ca-annonce/" rel="bookmark" title="9 octobre 2009">MAX 09 &#8211; Ça annonce !</a></li>
</ul>
<p><!-- Similar Posts took 12.633 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/10/09/1245-max-09-sneak-peeks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MAX 09 &#8211; Le multitouch</title>
		<link>http://www.lafabrick.com/blog/2009/10/09/1286-max-09-le-multitouch/</link>
		<comments>http://www.lafabrick.com/blog/2009/10/09/1286-max-09-le-multitouch/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 01:49:51 +0000</pubDate>
		<dc:creator>La Fabrick</dc:creator>
				<category><![CDATA[Bientôt chez vous]]></category>
		<category><![CDATA[Expériences utilisateur]]></category>
		<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[MAX]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1286</guid>
		<description><![CDATA[Un conférence sur le multitouch, un thème qui nous tenait à coeur pour cet événement ! MAX a été l&#8217;occasion pour Adobe d&#8217;aborder le multitouch de manière plus détaillée. En effet, le matériel commence à devenir disponible pour le grand public et le succès de l&#8217;iPhone montre déjà l&#8217;intérêt des utilisateurs pour ce type d&#8217;interactions [...]]]></description>
			<content:encoded><![CDATA[<div class="mceTemp">
<dl id="attachment_1317" class="wp-caption alignnone" style="width: 530px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-1317" title="multitouch" src="http://www.lafabrick.com/blog/wp-content/uploads/2009/10/multitouch.jpg" alt="table multitouch" width="520" height="130" /> </dt>
</dl>
</div>
<p>Un conférence sur le multitouch, un thème qui nous tenait à coeur pour cet événement !</p>
<p>MAX a été l&#8217;occasion pour Adobe d&#8217;aborder le multitouch de manière plus détaillée. En effet, le matériel commence à devenir disponible pour le grand public et le succès de l&#8217;iPhone montre déjà l&#8217;intérêt des utilisateurs pour ce type d&#8217;interactions et la nécessité d&#8217;anticiper cette composante dans la conception des nouvelles Interfaces Homme Machine.</p>
<p>Nous résumerons ici deux conférences auxquelles nous avons pu assister : la première &laquo;&nbsp;officielle&nbsp;&raquo; assurée par une personne du groupe Cynergy, relativement générale et montrant quelques exemples intéressants. La seconde, appelée &laquo;&nbsp;unconference&nbsp;&raquo;, assurée par une personne d&#8217;Adobe, en charge de la prise en compte du multitouch au niveau du Flash Player 10.1, celle-ci plus technique et orientée sur les bonnes pratiques, particulièrement intéressantes.</p>
<p>Essayons de ressortir les principales idées et conclusions de tout cela.</p>
<p><span id="more-1286"></span></p>
<p>La présentation s&#8217;articule autour des axes suivants :</p>
<ul>
<li>Matériel et principaux environnements de prise en charge, à disposition du grand public</li>
<li>Types de mouvements reconnus nativement sur ces matériels</li>
<li>Implémentation avec AIR 2.0 et bonnes pratiques</li>
</ul>
<div>L&#8217;un des points clés du multitouch est qu&#8217;il dépend fortement du matériel sur lequel l&#8217;application est mise à disposition.</div>
<h2>Matériel et principaux environnements</h2>
<p>Aujourd&#8217;hui, le multitouch est accessible au grand public via :</p>
<div><strong>Matériel</strong></div>
<div>
<ul>
<li>Tablet PC (ex. <a href="http://h10010.www1.hp.com/wwpc/fr/fr/ho/WF06a/321957-321957-3835812-3835813-3835813-3945160.html" target="_blank">HP TouchSmart</a>) : l&#8217;écran détecte jusqu&#8217;à 4 points simultanément</li>
<li>MAC : le trackpad utilisé pour la souris est capable de détecter plusieurs doigts de façon distincte</li>
</ul>
</div>
<div><strong>Logiciels</strong></div>
<div>
<ul>
<li>Windows 7</li>
<li>MAC OSX Leopard</li>
</ul>
</div>
<h2>Types de mouvements et informations reconnus</h2>
<ul>
<li>Natifs
<ul>
<li>Zoom,</li>
<li>Swipe (action de faire glisser à deux doigts),</li>
<li>Rotation</li>
<li>Taille d&#8217;appui sur l&#8217;écran</li>
</ul>
</li>
<li>Personnalisés (permet d&#8217;implémenter ses propres interprétations de mouvement)</li>
</ul>
<p>C&#8217;est peu mais suffisant pour la plupart des actions connues.</p>
<p>On regrettera le fait que seul un mouvement natif est reconnu par le système à la fois, impliquant qu&#8217;on ne peut zoomer et faire pivoter un élément en même temps. Il faut dans ce dernier cas se débrouiller.</p>
<p>On appréciera aussi le fait que le &laquo;&nbsp;standard&nbsp;&raquo; établi par l&#8217;iPhone se retrouve dans les mouvements reconnus et pris en charge pour tous ces systèmes. A savoir que les mouvements natifs ne peuvent être utilisés en concurrence avec les événements personnalisés. Aussi, soit vous faites du natif, soit vous vous démerdez&#8230; Why not !</p>
<h2>Implémentation avec AIR 2.0 et bonnes pratiques</h2>
<p>La nouveauté est que AIR 2.0 écoute les événements envoyés par les systèmes multitouch et offre une API assez simple permettant d&#8217;y réagir. nous ne rentrerons pas dans les détails, mais plusieurs choses doivent être prises en compte avec attention pour produire une &laquo;&nbsp;bonne&nbsp;&raquo; application multitouch :</p>
<ul>
<li>Il est important de pouvoir gérer <strong>les événement Souris et les événements Touch de manière unifiée</strong> pour que l&#8217;application reste compatible avec un système standard. N&#8217;oublions pas que le multitouch est loin d&#8217;être encore accessible à tous</li>
<li>Il faut <strong>penser à la taille des doigts</strong> : un bouton sera certainement plus gros dans une application multitouch, l&#8217;homme étant moins précis que la souris (désolé pour la blague de geek).</li>
<li>De ce fait, il faut idéalement être capable d&#8217;<strong>adapter son application à des résolutions différentes</strong> : certaines applications multitouch prennent tout leur sens sur des écrans très grands (table type Microsoft Surface), mais peuvent être amenées sur des écrans plus petits (tablet PC par exemple). Selon la résolution cible, un pixel n&#8217;aura absolument pas la même taille et l&#8217;application pourra devenir totalement inutilisable</li>
<li><strong>Utiliser un gestionnaire personnalisé d&#8217;interprétation de mouvement en ActionScript </strong>(type <a href="http://www.nuigroup.com/touchlib/">touchLib</a>) se révèle être une solution généralement plus flexible voire performante que l&#8217;usage de la détection native de mouvements simples. D&#8217;autant plus quand on repense à la restriction de non parallélisation de mouvement natifs simples (zoom + rotation).</li>
</ul>
<h2>Conclusion</h2>
<p>Nous arrivons à un moment où les outils se présentent pour proposer des interface apportant réellement quelque chose en terme d&#8217;innovation et d&#8217;interactivité. C&#8217;est donc naturellement qu&#8217;Adobe s&#8217;insère dans cette voie et propose de reprendre la main sur les technologies déjà existantes dans ce domaine (type TUIO, touchLib&#8230;) et se tient prêt pour le matériel de demain !</p>
<p>A quand les éléments tangibles dans les boutiques Adobe ?</p>
<p>À noter : vous pouvez retrouver  les conférences sur le multitouch, sur Adobe TV :</p>
<ul>
<li><a href="http://tv.adobe.com/watch/max-2009-develop/multitouch-development-with-flex/">Multitouch Development with flex</a></li>
<li><a href="http://tv.adobe.com/watch/max-2009-design/multitouch-and-the-flash-platform/">Multitouch and the flash plateform</a></li>
</ul>
<p>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2009/10/08/1266-max-09-ou-est-passe-le-text-layout-framework/" rel="bookmark" title="8 octobre 2009">MAX 09 &#8211; Où est passé le Text Layout Framework ?</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/10/09/1245-max-09-sneak-peeks/" rel="bookmark" title="9 octobre 2009">MAX 09 &#8211; Sneak Peeks !</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/10/09/1243-max-09-ca-annonce/" rel="bookmark" title="9 octobre 2009">MAX 09 &#8211; Ça annonce !</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/02/19/1609-flashplayer-101-et-multi-toucher-caresse-moi-le-flex/" rel="bookmark" title="19 février 2010">Caresse-toi le flex : FlashPlayer 10.1 et Multi-toucher</a></li>
</ul>
<p><!-- Similar Posts took 13.119 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/10/09/1286-max-09-le-multitouch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing r.CØ &#8230; First &#171;&#160;Cocomo ready&#160;&#187; Air Wiibot&#8230;</title>
		<link>http://www.lafabrick.com/blog/2008/12/23/591-cocomo-wiibot/</link>
		<comments>http://www.lafabrick.com/blog/2008/12/23/591-cocomo-wiibot/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 17:49:58 +0000</pubDate>
		<dc:creator>La Fabrick</dc:creator>
				<category><![CDATA[Bientôt chez vous]]></category>
		<category><![CDATA[La Fabrick]]></category>
		<category><![CDATA[Nos projets]]></category>
		<category><![CDATA[Pure Style]]></category>
		<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[cocomo]]></category>
		<category><![CDATA[labz]]></category>
		<category><![CDATA[Merapi]]></category>
		<category><![CDATA[MindStorms]]></category>
		<category><![CDATA[NXT]]></category>
		<category><![CDATA[wiiFlash]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=591</guid>
		<description><![CDATA[Notre premier prototype de robot Lego Mindstorms contrôlé par une wiimote à travers le web grâce au service Cocomo d&#8217;Adobe &#8230; Réalisé à l&#8217;aide de Lejos , Merapi, Air, Wiiflash, Cocomo.Autres articles sur le même sujet Cocomo est là et personne me prévient ??!! Developing with AFCS a.k.a Cocomo &#8211; Introduction Hello AFCS ( bye Cocomo ) : [...]]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="445" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/wJuNVgshSDI&amp;hl=fr&amp;fs=1" /><embed type="application/x-shockwave-flash" width="550" height="445" src="http://www.youtube.com/v/wJuNVgshSDI&amp;hl=fr&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Notre premier prototype de robot Lego Mindstorms contrôlé par une wiimote à travers le web grâce au service Cocomo d&#8217;Adobe &#8230; <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Réalisé à l&#8217;aide de <a title="Lejos, Mindstorms Java access " href="http://lejos.sourceforge.net" target="_blank">Lejos</a> , <a title="Merapi : Java / Air Bridge" href="http://merapiproject.net" target="_blank">Merapi</a>, <a title="Présentation de Adobe Air" href="http://www.adobe.com/fr/products/air/" target="_blank">Air</a>, <a title="Wiiflash, AS3 Wiimote Access" href="http://wiiflash.org/" target="_blank">Wiiflash</a>, <a title="Cocomo, Flex collaborating service" href="http://labs.adobe.com/technologies/cocomo" target="_blank">Cocomo</a>.Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/12/07/274-cocomo-dbarque-et-personne-me-prvient/" rel="bookmark" title="7 décembre 2007">Cocomo est là et personne me prévient ??!!</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/01/21/999-what-is-adobe-cocomo/" rel="bookmark" title="21 janvier 2009">Developing with AFCS a.k.a Cocomo &#8211; Introduction</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/01/31/1040-hello-cocomo-first-app/" rel="bookmark" title="31 janvier 2009">Hello AFCS ( bye Cocomo ) : première application multi-utilisateurs</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/03/02/1079-fitc09-twiidee-wiiflash-and-rock-n-roll/" rel="bookmark" title="2 mars 2009">FITC#09 : TwiiDee, WiiFlash and Rock &#8216;n&#8217; Roll</a></li>
</ul>
<p><!-- Similar Posts took 12.422 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2008/12/23/591-cocomo-wiibot/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Quoi de neuf dans la béta 2 de AIR ?</title>
		<link>http://www.lafabrick.com/blog/2007/10/01/245-quoi-de-neuf-dans-la-bta-2-de-air/</link>
		<comments>http://www.lafabrick.com/blog/2007/10/01/245-quoi-de-neuf-dans-la-bta-2-de-air/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 11:49:09 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Logiciels / extensions / plugins...]]></category>
		<category><![CDATA[Vu sur le web (2.0)]]></category>
		<category><![CDATA[AIR]]></category>

		<guid isPermaLink="false">http://92.243.2.196/lafabrick/blog/?p=245</guid>
		<description><![CDATA[<p><img src="http://www.lafabrick.com/blog/images/erick/Adobe_AIR_Setup-20071001-141210.jpg" alt="" /></p> <p>Un peu moins de 4 mois après la sortie de la beta1 , AIR poursuit son développement et passe en beta2. Voici la liste des nouveautés annoncées, ainsi que le lien vers les docs qui vont bien&#160;:</p>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lafabrick.com/blog/images/erick/Adobe_AIR_Setup-20071001-141210.jpg" alt="" /></p>
<p>Un peu moins de 4 mois après la sortie de la beta1 , AIR poursuit son développement et passe en beta2. Voici la liste des nouveautés annoncées, ainsi que le lien vers les docs qui vont bien :</p>
<p><span id="more-245"></span></p>
<ul>
<li>amélioration de la <strong>gestion des icones</strong> du &laquo;&nbsp;system tray&nbsp;&raquo; ou du &laquo;&nbsp;dock&nbsp;&raquo;, possibilité de :
<ul>
<li>définir une image ou une animation pour l&#8217;icone du dock</li>
<li>gérer les mouse Events sur celui-ci</li>
<li>activer le &laquo;&nbsp;icon Bounce&nbsp;&raquo;   ( sur mac )</li>
</ul>
</li>
</ul>
<ul>
<li><strong><a hreflang="en" href="http://livedocs.adobe.com/labs/air/1/devappsflex/help.html?content=SQL_23.html#1096192">Synchronous database API</a></strong> :</li>
</ul>
<p>il est possible de définir au moment de la création de l&#8217;instance de la connexion à la BDD locale (SQLConnection ) si les opérations seront synchrones ou asynchrones.</p>
<ul>
<li><strong><a hreflang="en" href="http://livedocs.adobe.com/labs/air/1/devappsflex/help.html?content=Menus_01.html">Native menus</a></strong> :</li>
</ul>
<p>Possibilité d&#8217;insérer la barre des menus propre à chaque OS</p>
<p><img src="http://www.lafabrick.com/blog/images/erick/airB2_nativeWin-20071001-132545.jpg" alt="" /></p>
<ul>
<li><strong>Améliorations et modification du système de DRAG&#8217;n'Drop</strong>:</li>
</ul>
<p>Disparition des classes TransferableData and ClipboardManager pour laisser place à un Clipboard.generalClipboard ( Singleton ) Drag and drop enhancements including bitmap support</p>
<ul>
<li><strong>Amélioration du modèle sécurité</strong> ( <a hreflang="en" href="http://labs.adobe.com/wiki/index.php/AIR:HTML_Security_FAQ">plus d&#8217;infos</a> )</li>
</ul>
<ul>
<li><a hreflang="en" href="http://livedocs.adobe.com/labs/air/1/devappsflex/help.html?content=PDF_1.html">gestion du plugin Acrobat reader 8.1</a> pour affichage des pdf dans les HTMLControl</li>
</ul>
<ul>
<li>Gestion des <a hreflang="en" href="http://livedocs.adobe.com/labs/air/1/devappsflex/help.html?content=QuckStart_ZOrder_1.html">profondeurs de fenêtres</a> et des multi-Ecrans</li>
</ul>
<ul>
<li><strong>Amélioration de la fenêtre d&#8217;installation et du système des installations <a hreflang="en" href="http://livedocs.adobe.com/labs/air/1/devappsflex/help.html?content=distributing_apps_3.html#1031339">&#8216;seamless&#8217;</a></strong></li>
</ul>
<ul>
<li>Activation et gestion du Focus</li>
</ul>
<ul>
<li>Gestion des mises à jour d&#8217;applications ( classe Updater )</li>
</ul>
<ul>
<li>gestion du double-clic et de la molette des souris</li>
</ul>
<ul>
<li>Améliorations des performances et  de la gestion de la mémoire</li>
</ul>
<ul>
<li><strong><a hreflang="en" href="http://livedocs.adobe.com/labs/air/1/devappsflex/help.html?content=distributing_apps_1.html">gestion de la &laquo;&nbsp;signature d&#8217;applications&nbsp;&raquo;</a></strong></li>
</ul>
<ul>
<li>support du XSLT</li>
</ul>
<ul>
<li>compatibilité avec Windows 2000</li>
</ul>
<ul>
<li>des centaines de bugs fixés&#8230;</li>
</ul>
<p>A lire aussi :</p>
<ul>
<li><a hreflang="en" href="http://labs.adobe.com/wiki/index.php/AIR:Migration">guide de migration beta 1 -&gt; beta 2</a></li>
<li><a hreflang="en" href="http://livedocs.adobe.com/labs/air/1/devappsflex/help.html?content=dg_part_11_1.html">Air security Documentation</a></li>
</ul>
<p>Tous les infos nécessaires dans la <a hreflang="en" href="http://livedocs.adobe.com/labs/air/1/devappsflex/help.html?content=dg_part_11_1.html">doc officielle</a>.</p>
<p>Bon ben au boulot maintenant <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  !!!Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/06/29/173-adobe-air-comment-proposer-une-air-express-install/" rel="bookmark" title="29 juin 2007">Adobe Air : comment proposer une &quot;air express install&quot; ?</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/06/11/141-l-re-de-l-air/" rel="bookmark" title="11 juin 2007">L&#8217;ère de l&#8217;AIR</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/10/01/240-labsadobecom-c-est-nol-avant-l-heure/" rel="bookmark" title="1 octobre 2007">Noël avant l&#8217;heure : la journée de la béta 2 sur Labs.adobe.com</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/02/19/1609-flashplayer-101-et-multi-toucher-caresse-moi-le-flex/" rel="bookmark" title="19 février 2010">Caresse-toi le flex : FlashPlayer 10.1 et Multi-toucher</a></li>
</ul>
<p><!-- Similar Posts took 24.903 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2007/10/01/245-quoi-de-neuf-dans-la-bta-2-de-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe Air : comment proposer une &quot;air express install&quot; ?</title>
		<link>http://www.lafabrick.com/blog/2007/06/29/173-adobe-air-comment-proposer-une-air-express-install/</link>
		<comments>http://www.lafabrick.com/blog/2007/06/29/173-adobe-air-comment-proposer-une-air-express-install/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 14:47:30 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://92.243.2.196/lafabrick/blog/?p=173</guid>
		<description><![CDATA[<p><strong>UPDATE</strong> cet article est rendu obsolète par la sortie de la béta 2 :<a href="http://lafabrick.com/blog/index.php/2007/10/01/309-quoi-de-neuf-dans-la-bta-2-de-air" hreflang="fr"> voir nouveau système de seamless.</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE</strong> cet article est rendu obsolète par la sortie de la béta 2 :<a hreflang="fr" href="http://lafabrick.com/blog/index.php/2007/10/01/309-quoi-de-neuf-dans-la-bta-2-de-air"> voir nouveau système de seamless.</a></p>
<p><span id="more-173"></span></p>
<p>L&#8217;un des problèmes avec les applications Air, c&#8217;est qu&#8217;elles nécessitent&#8230; AIR justement. Ce qui veut dire télécharger l&#8217;installeur, installer le runtime, ensuite télcharger et installer l&#8217;appli. Comme pour le lecteur flash depuis la version 8, Air permet heureusement de proposer une &laquo;&nbsp;air express install&nbsp;&raquo;, beaucoup plus simple pour l&#8217;utilisateur. Je ne sais pas si vous avez jeté un coup d&#8217;oeil à <a hreflang="en" href="http://www.adobe.com/products/digitaleditions/">Adobe &#8216;Digital Edition&#8217;</a>, une appli de lecture/gestion de pdf. Sur la page Adobe, le lien proposant l&#8217;installation, on voit un petit bandeau &laquo;&nbsp;Install now&nbsp;&raquo;. Ce lien est en fait un fichier swf capable d&#8217;installer de manière transparente le runtime air ainsi que l&#8217;application .air souhaitée sur la machine de l&#8217;utilisateur. Cet installeur automatisé vérifie la présence du Runtime, le télécharge et l&#8217;installe si nécessaire, télécharge le .air, l&#8217;installe et &#8216;boooom&#8217;&#8230; l&#8217;appli est lancée <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . On a tout simplement l&#8217;impression d&#8217;avoir ouvert une &laquo;&nbsp;popup Air&nbsp;&raquo;.</p>
<p>-UPDATE : &#8211; Comme Tekool me l&#8217;a fait remarqué, et l&#8217;explique  <a hreflang="fr" href="http://www.tekool.net">dans son article</a>, la fonctionnalité n&#8217;est pas entièrement supportée par la version béta de Air, et pour le moment seule l&#8217;installation du runtime peut être faite via le navigateur, ensuite, contrairement à Digital Edition, c&#8217;est une fenêtre &laquo;&nbsp;applicative&nbsp;&raquo; qui propose l&#8217;installation du fichier .air. &#8211;</p>
<p>Pour proposer l&#8217;installation &laquo;&nbsp;express&nbsp;&raquo; du runtime Adobe Air :</p>
<ol>
<li>récupérez le <a hreflang="en" href="http://labs.adobe.com/downloads/airsdk.html">SDK Air</a></li>
<li>à l&#8217;intérieur, vous trouverez un dossier source contenant un fichier &#8216;badge.fla&#8217; et un &#8216;install.as&#8217;, copiez les et placer les dans le dossier de votre projet.</li>
<li>vous pouvez &laquo;&nbsp;personnaliser&nbsp;&raquo; le Fla</li>
<li>Publiez votre swf</li>
</ol>
<p>Une fois le swf prêt il ne reste plus qu&#8217;à l&#8217;intégrer dans un page html. Pour fonctionner le badge à besoin de trois variables obligatoires :</p>
<ul>
<li>appname : le nom de l&#8217;application</li>
<li>appurl : l&#8217;adresse du fichier</li>
<li>airversion : pour le moment : 1.0.M4</li>
</ul>
<p>Vous pouvez également transmetre une couleur de fond pour le bouton :</p>
<ul>
<li>buttoncolor</li>
</ul>
<p>Il va donc falloir transmettre ces variables depuis la page html, grâce aux FlashVars. Au final, avec le AC_RunActiveContent.js ( script de gestion du Active Content pour tous navigateurs, automatique avec Flash CS3 mais nécessite cette extension pour <a hreflang="fr" href="http://download.macromedia.com/pub/flash/updates/8/activecontent/flash8_ac_update_fr.zip">Flash 8</a> ), ca donne :</p>
<p><a hreflang="fr" href="http://www.lafabrick.com/lab/air_install/ok.badge.html">voir l&#8217;exemple</a> / <a hreflang="fr" href="http://www.lafabrick.com/lab/air_install/axi.zip">Télécharger les sources de l&#8217;exemple</a></p>
<p>Chose un peu étonnante, j&#8217;ai regardé comment Adobe l&#8217;avait intégré sur leur site, et j&#8217;ai eu la surprise de voir qu&#8217;il préfére le JS de swfobject, à celui qu&#8217;ils fournissent eux même pour gérer l&#8217;Active content (AC_RunActiveContent.js )&#8230; J&#8217;ai essayé vite fait de faire pareil, mais j&#8217;ai dû faire une bourde, çà bug ! à suivre&#8230;Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/06/11/141-l-re-de-l-air/" rel="bookmark" title="11 juin 2007">L&#8217;ère de l&#8217;AIR</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/03/19/50-air-ca-commence-mal/" rel="bookmark" title="19 mars 2007">et Adobe créa l&#8217;.air!!!</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/02/27/309-flex-builder-3-et-le-php/" rel="bookmark" title="27 février 2008">Flex Builder 3 et le PHP ( PDT ) : installation</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/01/16/807-developper-une-application-iphone-xcode-et-interface-builder-passes-au-crible/" rel="bookmark" title="16 janvier 2009">Développer une application iPhone &#8211; XCode et Interface Builder passés au crible</a></li>
</ul>
<p><!-- Similar Posts took 21.873 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2007/06/29/173-adobe-air-comment-proposer-une-air-express-install/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

