<?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; Erick</title>
	<atom:link href="http://www.lafabrick.com/blog/author/Erick/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>Fireworks + Javascript = Spark Skin Pleasure !</title>
		<link>http://www.lafabrick.com/blog/2011/06/23/2598-fireworks-javascript-spark-skin-pleasure/</link>
		<comments>http://www.lafabrick.com/blog/2011/06/23/2598-fireworks-javascript-spark-skin-pleasure/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 15:02:15 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Expériences utilisateur]]></category>
		<category><![CDATA[Logiciels / extensions / plugins...]]></category>
		<category><![CDATA[Nos projets]]></category>
		<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=2598</guid>
		<description><![CDATA[J&#8217;pensais pas faire ça aujourd&#8217;hui&#8230;, mais bon&#8230; moultes skins Spark à tomber : j&#8217;ai décidé de me helper myself et de gagner de l&#8217;argent ( enfin du temps pour commencer ). Du coup est née la petite commande Fireworks copyMXMLSelectionToClipboard, qui comme son nom l&#8217;indique presque, permet de copier une sélection dans Fireworks directement en [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.lafabrick.com/blog/images/_erick/fw2mxml_cmd-1-20110623-170349.png"  alt="Copier le MXML / FXG dans le ClipBoard" /></p>
<p>J&#8217;pensais pas faire ça aujourd&#8217;hui&#8230;, mais bon&#8230; moultes skins Spark à tomber : j&#8217;ai décidé de me helper myself et de gagner de l&#8217;argent ( enfin du temps pour commencer ). Du coup est née la petite commande Fireworks <em>copyMXMLSelectionToClipboard</em>, qui comme son nom l&#8217;indique presque, permet de copier une sélection dans Fireworks directement en MXML dans le ClipBoard. Elle est pas belle la vie ?!</p>
<p><span id="more-2598"></span></p>
<p>En gros :<br />
1. tu dessines tes trucs dans Fireworks, tu fais tes jolies dégradés, tes reflets, tes subtils petits floutés&#8230;<br />
2. tu sélectionnes ce que tu veux mettre dans ta skin<br />
3. tu lances la commande &#8216;UIGFx/SelectionToMXMLClipboard&nbsp;&raquo;<br />
4. t&#8217;ouvres ta skinClass et pi t&#8217;y colle </p>
<p><img src="http://www.lafabrick.com/blog/images/_erick/fw2mxml_generatedcode-20110623-165951.png"  alt="Copier le MXML / FXG généré" /></p>
<p>5. et pi&#8230; tu souris !</p>
<p>Cette 1ère version permet d&#8217;exporter les Rect, les Path et des Groups ( de Rect et de Paths ! ),<br />
avec leur SolidColor / SolidColorStroke,  LinearGradient ou RadialGradient,<br />
et même quelques filtres : Blur / DropShadow / InnerShadow.</p>
<p>Les positions sont recalculées avec un sélection placée à l&#8217;origine xy.</p>
<p><a href="http://www.lafabrick.com/labz/uigfx/xtensions/mxmlclip.zip">Télécharger l&#8217;extension Fireworks (CS3 + )</a></p>
<p>Et c&#8217;est déjà çà de fait ! </p>
<p>Edit : et je rappelle qu&#8217;on peut mapper des raccourcis pour n&#8217;importe quel élément de menu&#8230; #jdcjdrAutres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/11/07/238-digimix-un-air-de-musique/" rel="bookmark" title="7 novembre 2007">Digimix : un Air de musique&#8230;</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>
<li><a href="http://www.lafabrick.com/blog/2009/12/04/1453-flex4-skin-et-primitives/" rel="bookmark" title="4 décembre 2009">Flex4 : skin et primitives</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/02/09/1964-uigfx-project-flex4-primitives-library-fireworks-extension/" rel="bookmark" title="9 février 2010">uigfx project : Flex4 primitives library / Fireworks extension</a></li>
</ul>
<p><!-- Similar Posts took 18.055 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2011/06/23/2598-fireworks-javascript-spark-skin-pleasure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proches de l&#8217;Ohio??? Les états esthètes de Flex4</title>
		<link>http://www.lafabrick.com/blog/2010/03/05/1675-proches-de-lohio-les-etats-esthetes-de-flex4/</link>
		<comments>http://www.lafabrick.com/blog/2010/03/05/1675-proches-de-lohio-les-etats-esthetes-de-flex4/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 16:05:47 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[flex4]]></category>
		<category><![CDATA[Spark]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1675</guid>
		<description><![CDATA[La gestion des States a été entièrement revue dans Flex 4. Déjà fervent utilisateur des states de flex2/3, j&#8217;ai entendu quelques critiques à leur propos, et il est vrai que les AddChild relativeTo et autres setEventHandler n&#8217;étaient peut-être pas&#8230; &#171;&#160;idéaux&#160;&#187;&#8230; Mais ils étaient utiles, car il est des situations, où au sein d&#8217;une application, l&#8217;utilisation [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://lafabrick.com/blog/images/erick/flexskin-20100305-170950.jpg" alt="Flex 4 States" /></p>
<p>La gestion des States a été entièrement revue dans Flex 4. Déjà fervent utilisateur des <em>states</em> de flex2/3, j&#8217;ai entendu quelques critiques à leur propos, et il est vrai que les <em>AddChild relativeTo</em> et autres <em>setEventHandler</em> n&#8217;étaient peut-être pas&#8230; &laquo;&nbsp;idéaux&nbsp;&raquo;&#8230; Mais ils étaient utiles, car il est des situations, où au sein d&#8217;une application, l&#8217;utilisation d&#8217;états est bien plus &laquo;&nbsp;cohérente&nbsp;&raquo;, voire performante, qu&#8217;une navigation &laquo;&nbsp;page à page&nbsp;&raquo; classique. Leur subtile utilité et leurs récentes améliorations, méritent de s&#8217;y intéresser.<br />
<span id="more-1675"></span></p>
<h3>Raison d&#8217;états</h3>
<p>La principale différence entre les states et la navigation &laquo;&nbsp;page à page&nbsp;&raquo; ( type &laquo;&nbsp;viewStack&nbsp;&raquo; dans Flex ), est selon moi, que les states permettent la réutilisation et le &laquo;&nbsp;partage&nbsp;&raquo; d&#8217;éléments : l&#8217;affichage de l&#8217;application/composant ne doit pas être entièrement recréé à chaque changement.<br />
Et c&#8217;est justement une des définitions des RIA. De même qu&#8217;un écran ne doit pas être entièrement &laquo;&nbsp;rechargé&nbsp;&raquo; à chaque chargement de données, il ne doit pas forcément être reconstruit entièrement à chaque changement &laquo;&nbsp;d&#8217;affichage&nbsp;&raquo;. En gros : contrairement à des pages, un même objet peut être facilement inclus/utilisé dans plusieurs états.<br />
L&#8217;exemple classique est un panel de login qui &laquo;&nbsp;contient&nbsp;&raquo; un état &laquo;&nbsp;inscription&nbsp;&raquo;, contenant les mêmes éléments que le state normal, mais qui y ajoute un champ de confirmation du mot de passe ( <a href="http://www.adobe.com/devnet/flex/tourdeflex/web/#sampleId=31620;illustIndex=0;docIndex=0">exemple dans Tour de Flex Online</a>) .<br/><br />
<img src="http://lafabrick.com/blog/images/erick/loginStates-20100305-133852.jpg" alt="Flex4 Spark Login panel states" /></p>
<p>Les states permettent de facilement ajouter/supprimer des éléments au cours &laquo;&nbsp;du cycle de vie d&#8217;un composant&nbsp;&raquo;.<br/><br />
Dans <a href="http://lafabrick.com/labz/fx4states1/">mon exemple</a>, c&#8217;est plus globalement l&#8217;apparence de l&#8217;application entière qui varie en fonction de son état.</p>
<p><img src="http://lafabrick.com/blog/images/erick/fx4stateslayoutbased-20100305-162000.jpg" alt="Flex 4 state based layout" /></p>
<p>Les states permettent de modifier les attributs des différents élements MXML inclus dans le composant ( propriétés publiques, styles, événements et effets d&#8217;événements ). Ainsi un composant et ses &laquo;&nbsp;enfants&nbsp;&raquo; peuvent avoir une taille, une couleur, un comportement différent à chaque état.<br />
Dans la <a href="http://opensource.adobe.com/wiki/display/flexsdk/Enhanced+States+Syntax">documentation officielle</a>, la définition d&#8217;un state est &laquo;&nbsp;une collection de changements applicables à une vue&nbsp;&raquo;. Avec Flex4, c&#8217;est principalement la syntaxe de la définitions de ces changements qui a été simplifiée.</p>
<h3>Coups d&#8217;états  : une nouvelle syntaxe </h3>
<p>La nouvelle syntaxe des états s&#8217;appuie sur l&#8217;évolution du MXML avec sa version 2009 ( <a href="http://opensource.adobe.com/wiki/display/flexsdk/MXML+2009">MXML 2009</a> ). Ce dernier intègre pleinement cette notion d&#8217;état, en permettant à chaque attribut de composant MXML d&#8217;être défini pour un état en particulier.<br/></p>
<h4>Déclaration</h4>
<p>La première chose à noter est la déclaration, en début de fichier, de la liste des états du composant.</p>
<pre class="brush: xml">
&lt;s:states&gt;
        &lt;s:State name=&quot;default&quot;/&gt;
        &lt;s:State name=&quot;Register&quot;/&gt;
&lt;/s:states&gt;
</pre>
<p>Les &laquo;&nbsp;changements /actions d&#8217;états&nbsp;&raquo; ne sont donc plus définis de manière hiérarchique au sein du noeud State lui même.</p>
<h4>Modification des propriétés de composants</h4>
<p>En parcourant le code source de l&#8217;exemple, on tombe sur la déclaration du bouton de validation du formulaire :</p>
<pre class="brush: xml">
&lt;s:Button id=&quot;button1&quot; click=&quot;clickHandler(event)&quot;
     label=&quot;Login&quot;
     label.Register=&quot;Register&quot;
/&gt;
</pre>
<p>Le label du <em>Button</em> varie en fonction de l&#8217;état du composant qui le contient, et une &laquo;&nbsp;<strong>syntaxe pointée</strong>&nbsp;&raquo; permet maintenant de préciser la valeur de l&#8217;attribut dans l&#8217;état &laquo;&nbsp;Register&nbsp;&raquo;.<br />
Dans la définition d&#8217;un attribut MXML, il est maintenant possible de définir si la valeur est &laquo;&nbsp;globale&nbsp;&raquo; ou liée à un état ( ou même à plusieurs, cf. <em>StateGroups</em> plus bas ). L&#8217;id ne peut évidement pas être &laquo;&nbsp;state based&nbsp;&raquo;.</p>
<pre class="brush: xml">
&lt;s:Button id=&quot;bt&quot;
     label.default=&quot;login&quot; label.Register=&quot;inscription&quot;
     width.default=&quot;80&quot; width.Register=&quot;120&quot;
     color.default=&quot;#000000&quot; color.Register=&quot;#0000FF&quot;
     click.default=&quot;trace(&#039;default»register&#039;);currentState = &#039;Register&#039;;&quot;
     click.Register=&quot;trace(&#039;register»default&#039;);currentState = &#039;default&#039;;&quot;
     rollOverEffect.default=&quot;{new Blur()}&quot;
     rollOverEffect.Register=&quot;{new Glow()}&quot;
     /&gt;
</pre>
<p>FlashBuilder 4 beta 2 intègre déjà une aide à l&#8217;édition d&#8217;attribut &laquo;&nbsp;state based&nbsp;&raquo;, et d&#8217;après ce que j&#8217;ai pu lire il y aura encore d&#8217;autres fonctionnalités liées dans la release&#8230;<br />
<img src="http://lafabrick.com/blog/images/erick/fb4_statesAttEdition-20100305-154737.jpg" alt="FlashBuilder state based attribut autocompletion" /></p>
<p>De même, il est possible de définir les propriétés d&#8217;un composant à l&#8217;aide d&#8217;un sous noeud plutôt qu&#8217;un attribut, et on peut, dans ce cas aussi,  préciser à quel état le noeud est associé.<br />
Dans mon exemple, profitant de la nouvelle gestion des Layouts de composants, mon Application peut être &laquo;&nbsp;verticale&nbsp;&raquo;, &laquo;&nbsp;horizontale&nbsp;&raquo; ou en &laquo;&nbsp;tile&nbsp;&raquo;. Il suffit de préciser la valeur du layout pour chaque état.</p>
<pre class="brush: xml">
&lt;s:Group id=&quot;content&quot; x=&quot;10&quot; y=&quot;40&quot;
			 &gt;
		&lt;s:layout.vList&gt;&lt;s:VerticalLayout /&gt;&lt;/s:layout.vList&gt;
		&lt;s:layout.hList&gt;&lt;s:HorizontalLayout /&gt;&lt;/s:layout.hList&gt;
		&lt;s:layout.tile&gt;&lt;s:TileLayout /&gt;&lt;/s:layout.tile&gt;
...
&lt;/s:Group&gt;
</pre>
<p>ou encore telle bordure FXG visible uniquement dans l&#8217;état &#8217;tile&#8217; :</p>
<pre class="brush: xml">
&lt;s:Group styleName=&quot;box&quot; &gt;
			&lt;s:Rect width=&quot;80&quot; height=&quot;80&quot; &gt;
				&lt;s:fill&gt;
					&lt;s:SolidColor color=&quot;#CCCCCC&quot;/&gt;
				&lt;/s:fill&gt;
				&lt;s:stroke.tile&gt;
					&lt;s:SolidColorStroke color=&quot;#999999&quot; /&gt;
				&lt;/s:stroke.tile&gt;
			&lt;/s:Rect&gt;
			&lt;!--...--&gt;
&lt;/s:Group&gt;
</pre>
<p>A l&#8217;heure des applications multi-devices, ce genre de souplesse est certainement bienvenue ( <a href="http://sujitreddyg.wordpress.com/2010/03/04/application-developed-using-flex-4-and-dcd-targeting-flash-player-on-android-device/">exemple d&#8217;application proposant un state &laquo;&nbsp;desktop&nbsp;&raquo; et un autre &laquo;&nbsp;mobile&nbsp;&raquo;</a> )&#8230;</p>
<h4>Inclusion / Exclusion</h4>
<p>En plus des évolutions syntaxiques, 2 nouveaux attributs ( des &laquo;&nbsp;directives de compilation&nbsp;&raquo; en fait ) ont été ajoutées : <strong>includeIn</strong> et <strong>ExcludeFrom</strong>, remplacant les mx:AddChild et mx:RemoveChild de Flex 3.</p>
<pre class="brush: xml">
&lt;mx:LinkButton id=&quot;registerLink&quot; color=&quot;0x336699&quot;
                                   includeIn=&quot;default&quot;
                                   label=&quot;Need to Register?&quot;
                                   click=&quot;currentState=&#039;Register&#039;&quot;/&gt;
</pre>
<p>Ici, le bouton d&#8217;inscription n&#8217;est visible que dans l&#8217;état &#8216;default&#8217;.<br />
Même fonctionnement, résultat inverse pour l&#8217;attribut <strong>excludeFrom</strong>, qui permet comme son nom l&#8217;indique de préciser qu&#8217;un &laquo;&nbsp;enfant&nbsp;&raquo; doit être supprimé de la liste d&#8217;affichage dans un état&#8230; ou dans un groupe d&#8217;état&#8230;</p>
<h3>Les stateGroups : des états unis&#8230;</h3>
<p>Une nouvelle propriété voit également le jour dans la définition des états : le stateGroups. Cette propriété permet de lier entre eux plusieurs états.<br />
Voici par exemple la définition des états du composant <a href="http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/skins/spark/ToggleButtonSkin.mxml">ToggleButton</a> version Spark.</p>
<pre class="brush: xml">
&lt;s:states&gt;
        &lt;s:State name=&quot;up&quot; /&gt;
        &lt;s:State name=&quot;over&quot; stateGroups=&quot;overStates&quot; /&gt;
        &lt;s:State name=&quot;down&quot; stateGroups=&quot;downStates&quot; /&gt;
        &lt;s:State name=&quot;disabled&quot; stateGroups=&quot;disabledStates&quot; /&gt;
        &lt;s:State name=&quot;upAndSelected&quot; stateGroups=&quot;selectedStates, selectedUpStates&quot; /&gt;
        &lt;s:State name=&quot;overAndSelected&quot; stateGroups=&quot;overStates, selectedStates&quot; /&gt;
        &lt;s:State name=&quot;downAndSelected&quot; stateGroups=&quot;downStates, selectedStates&quot; /&gt;
        &lt;s:State name=&quot;disabledAndSelected&quot; stateGroups=&quot;selectedUpStates, disabledStates, selectedStates&quot; /&gt;
    &lt;/s:states&gt;
</pre>
<p>Des groupes d&#8217;états sont ainsi définis, et vont nous permettre d&#8217;assigner des valeurs d&#8217;attributs non plus pour un, mais pour plusieurs états. Chaque state peut appartenir à un ou plusieurs groupes, et chacun de ces groupes n&#8217;est finalement défini que par une chaîne de caractères.</p>
<pre class="brush: xml">
&lt;s:Rect id=&quot;highlight&quot; left=&quot;1&quot; right=&quot;1&quot; top=&quot;1&quot; bottom=&quot;1&quot; radiusX=&quot;2&quot;&gt;
        &lt;s:fill&gt;
            &lt;s:LinearGradient rotation=&quot;90&quot;&gt;
                &lt;s:GradientEntry color=&quot;0xFFFFFF&quot;
                                 ratio=&quot;0.0&quot;
                                 alpha=&quot;0.33&quot;
                                 alpha.selectedUpStates=&quot;0.22&quot;
                                 alpha.overStates=&quot;0.22&quot;
                                 alpha.downStates=&quot;0.12&quot;/&gt;
                &lt;s:GradientEntry color=&quot;0xFFFFFF&quot;
                                 ratio=&quot;0.48&quot;
                                 alpha=&quot;0.33&quot;
                                 alpha.selectedUpStates=&quot;0.22&quot;
                                 alpha.overStates=&quot;0.22&quot;
                                 alpha.downStates=&quot;0.12&quot;/&gt;
                &lt;s:GradientEntry color=&quot;0xFFFFFF&quot;
                                 ratio=&quot;0.48001&quot;
                                 alpha=&quot;0&quot; /&gt;
            &lt;/s:LinearGradient&gt;
        &lt;/s:fill&gt;
    &lt;/s:Rect&gt;
</pre>
<p>Dans le ToggleButton, l&#8217;alpha du dégradé clair varie ici en fonction du groupe d&#8217;appartenance de l&#8217;état en cours.</p>
<p>En complément des groupes, la classe <strong>State</strong> propose toujours l&#8217;attribut <strong>basedOn</strong>, permettant à un état d&#8217;hériter de toutes les modifications définies pour un autre, et d&#8217;en ajouter.</p>
<h3>Event d&#8217;états&#8230;</h3>
<p>À l&#8217;instar des states Flex 3, des événements sont émis  à chaque changement : </p>
<ul>
<li><strong>enterState</strong></li>
<li><strong>exitState</strong> ( attention : si l&#8217;état B est &laquo;&nbsp;basedOn&nbsp;&raquo; l&#8217;état A, l&#8217;event exitState n&#8217;est pas émis au passage de A à B. )</li>
</ul>
<p>Toutefois, étant donné la séparation entre &laquo;&nbsp;logique&nbsp;&raquo; et &laquo;&nbsp;graphique&nbsp;&raquo; conseillée avec Spark, l&#8217;intérêt d&#8217;écouter ces événements &laquo;&nbsp;côté skin&nbsp;&raquo; devient à mon avis plus rare.</p>
<h3>Des états stylés&#8230;</h3>
<p>Les états ne sont pas les seuls à avoir connu une intéressante évolution dans Flex 4 : la gestion des styles CSS a également été considérablement enrichie. Cela pourrait constituer un article à part entière, mais je n&#8217;aborderais ici que les évolutions liées à notre sujet du jour.<br />
Grâce à des <a href="http://opensource.adobe.com/wiki/display/flexsdk/CSS+Advanced+Selectors">pseudo-selecteurs CSS</a>, il est maintenant possible de définir des styles basés sur l&#8217;état d&#8217;un composant.</p>
<pre class="brush: xml">
&lt;fx:Style&gt;
		@namespace &quot;library://ns.adobe.com/flex/spark&quot;;
		@namespace mx &quot;library://ns.adobe.com/flex/halo&quot;;

		Application:hList Label
		{
			color:#0CF;
		}

&lt;/fx:Style&gt;
</pre>
<p>ici, la feuille de style définit que le texte des composants Label de l&#8217;application en état hList doivent être bleus.</p>
<h3>Et puis quoi encore ?</h3>
<p><a href="http://lafabrick.com/labz/fx4states1/srcview/index.html">Code source de l&#8217;exemple du layout &laquo;&nbsp;state based&nbsp;&raquo;</a></p>
<p>Il y aurait encore pas mal de choses à aborder à propos de cette nouvelle gestion de states : gestion des transitions, &laquo;&nbsp;ré-adoption parentale&nbsp;&raquo; ( Reparent ),  &laquo;&nbsp;régles d&#8217;instanciation&nbsp;&raquo;&#8230;<br />
Mais je vais finir aujourd&#8217;hui par une petite interlude musicale&#8230; </p>
<p>Bon weekend&#8230;</p>
<p><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/oj2yNVWE9AM&#038;hl=fr_FR&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/oj2yNVWE9AM&#038;hl=fr_FR&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2009/11/27/1373-flex4-custom-component-skinnig/" rel="bookmark" title="27 novembre 2009">Flex4 : composant personnalisé et skinning</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/07/14/1920-flex-4-layouts-viewstack-pure-spark/" rel="bookmark" title="14 juillet 2010">Flex 4 et les layouts &#8211; Faire une ViewStack &laquo;&nbsp;pure&nbsp;&raquo; Spark</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/07/23/1989-primitive-dashedline-une-petite-ligne-bien-utile/" rel="bookmark" title="23 juillet 2010">Primitive DashedLine : une petite ligne bien utile</a></li>
<li><a href="http://www.lafabrick.com/blog/2010/05/04/1962-uigfx-practice-a-circularslider-component-2/" rel="bookmark" title="4 mai 2010">UIGFX practice : a CircularSlider component</a></li>
</ul>
<p><!-- Similar Posts took 16.063 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2010/03/05/1675-proches-de-lohio-les-etats-esthetes-de-flex4/feed/</wfw:commentRss>
		<slash:comments>2</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 17.211 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>Prenez vous au serious : Serious Drink Party vol. 05</title>
		<link>http://www.lafabrick.com/blog/2009/04/20/1120-prenez-vous-au-serious-serious-drink-party-vol-05/</link>
		<comments>http://www.lafabrick.com/blog/2009/04/20/1120-prenez-vous-au-serious-serious-drink-party-vol-05/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 21:59:41 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[La Fabrick]]></category>
		<category><![CDATA[Nawak]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1120</guid>
		<description><![CDATA[Bien le bonsoir, on avait imaginé une cinquième édition des Serious Drink complétement serious pour le coup&#8230; annoncée plusieurs semaines à l&#8217;avance&#8230; avec un videoproj, des beaux thèmes PowerPoint, des chips, des olives, et quelques rythmes neojazzy en interlude entre chaque présentations&#8230; la sseuclaaa ! mais bon le temps a passé, tout était bien parti&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://forestnet.blogit.fr/photos/c64f993bd6fd054c.jpg" alt="Bière et F." /><br />
<span id="more-1120"></span></p>
<p>Bien le bonsoir,<br />
on avait imaginé une cinquième édition des Serious Drink complétement serious pour le coup&#8230; annoncée plusieurs semaines à l&#8217;avance&#8230; avec un videoproj, des beaux thèmes PowerPoint, des chips, des olives, et quelques rythmes neojazzy en interlude entre chaque présentations&#8230; la sseuclaaa !<br />
mais bon le temps a passé, tout était bien parti&#8230; sauf les &laquo;&nbsp;invitations&nbsp;&raquo;&#8230; toujours pas parties elles&#8230; tanpis <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , on a quand même soif !!!<br />
Du coup on a une petite salle réservée, mais trève de sérieux, on garde le thème classique :</p>
<p>Soirée Bière et fleeex donc au 1er étage du Café Cousu Jeudi le 23 d&#8217;avril à partir de 19h30 !!!<br />
Viendez y !!!</p>
<p>Passage Thiaffait<br />
19,rue René Leynaud<br />
69001 Lyon<br />
Tel: 04 72 98 83 38</p>
<p><a href="http://maps.google.fr/maps?f=q&#038;source=s_q&#038;hl=fr&#038;geocode=&#038;q=passage+thiaffait+lyon&#038;sll=47.15984,2.988281&#038;sspn=24.227066,39.902344&#038;ie=UTF8&#038;z=16&#038;iwloc=A">Voir où que c&#8217;est sur une carte</a>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/12/03/275-climatus-et-lafabrick-sur-le-petit-cran/" rel="bookmark" title="3 décembre 2007">Climatus et lafabrick sur le petit écran&#8230;.</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/09/13/220-3-minutes-pour-sauver-vos-futurs-prsentations/" rel="bookmark" title="13 septembre 2007">3 minutes pour sauver vos futurs présentations&#8230;</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/03/03/313-l-universit-lyon1-cherche-aussi-2-stagiaires/" rel="bookmark" title="3 mars 2008">L&#8217;université Lyon1 cherche (aussi) 2 stagiaires</a></li>
<li><a href="http://www.lafabrick.com/blog/2009/01/06/647-serious-drink-0090108/" rel="bookmark" title="6 janvier 2009">Serious Drink 0.09.01.08&#8230;</a></li>
</ul>
<p><!-- Similar Posts took 11.498 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/04/20/1120-prenez-vous-au-serious-serious-drink-party-vol-05/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Vous reprendrez bien un set de travail !?</title>
		<link>http://www.lafabrick.com/blog/2009/04/14/1100-vous-reprendrez-bien-un-set-de-travail/</link>
		<comments>http://www.lafabrick.com/blog/2009/04/14/1100-vous-reprendrez-bien-un-set-de-travail/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 23:40:15 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Bientôt chez vous]]></category>
		<category><![CDATA[Logiciels / extensions / plugins...]]></category>
		<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[flex builder]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1100</guid>
		<description><![CDATA[[UPDATE] Si vous préférez la langue de Shakespeare, Tekool avait déjà écrit à ce propos il y a &#171;&#160;fort longtemps&#160;&#187;&#8230; je rends donc à César !&#8230; désolé&#8230; Vous venez de créer votre douzième workspace Eclipse/Flex Builder ??? Et vous en avez marre de recréer vos perspectives, et autres vues&#8230; à chaque fois ??? Mais pourquoi [...]]]></description>
			<content:encoded><![CDATA[<p>[UPDATE] Si vous préférez la langue de Shakespeare, <a href="http://www.tekool.net/blog/2008/05/26/%c2%abworking-sets%c2%bb-an-helpful-flex-navigator-functionality/">Tekool</a> avait déjà écrit à ce propos il y a &laquo;&nbsp;fort longtemps&nbsp;&raquo;&#8230; je rends donc à César <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  !&#8230; désolé&#8230;</p>
<p>Vous venez de créer votre douzième workspace Eclipse/Flex Builder ??? Et vous en avez marre de recréer vos perspectives, et autres vues&#8230; à chaque fois ???</p>
<p><img src="http://lafabrick.com/blog/images/erick//01_project_list-20090414-012817.png" alt="trop c'est trop !!!" /></p>
<p>Mais pourquoi diable n&#8217;utilisez vous pas les &laquo;&nbsp;fameux&nbsp;&raquo; &#8216;working sets&#8217; ?</p>
<p><span id="more-1100"></span></p>
<p>Et puisque quelques pixels valent pleins de mots&#8230;</p>
<p><img src="http://lafabrick.com/blog/images/erick//02_menuWorkingSet-20090414-013950.png" alt="Selection Working Set" /></p>
<p><img src="http://lafabrick.com/blog/images/erick//03_Select_Working_Set-20090414-013159.png" alt="Nouvea working set" /></p>
<p><img src="http://lafabrick.com/blog/images/erick//04_RessourceSet-20090414-013246.png" alt="Ressource Set type" /></p>
<p><img src="http://lafabrick.com/blog/images/erick//05_NewWorkingSet-20090414-013429.png" alt="Choix ressources" /></p>
<p><img src="http://lafabrick.com/blog/images/erick//06_selectWorkingSet-20090414-013547.png" alt="Selection working set" /></p>
<p><img src="http://lafabrick.com/blog/images/erick//07_workingSet1_result-20090414-013636.png" alt="un bol d'air" /></p>
<p>Les working sets ( prononcez &#8216;setss&#8217; )&#8230; tout simplement la solution moderne aux problèmes de congestion de projets dans Eclipse &#038; Flex Builder !Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/08/28/209-wtp-flex-buider-rsoudre-les-problmes-de-mmoire/" rel="bookmark" title="28 août 2007">WTP &#8211; Flex Buider : résoudre les problèmes de mémoire</a></li>
<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/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/01/15/291-flex-masquer-les-warnings-inutiles/" rel="bookmark" title="15 janvier 2008">Flex et les warnings inutiles&#8230;</a></li>
</ul>
<p><!-- Similar Posts took 13.077 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/04/14/1100-vous-reprendrez-bien-un-set-de-travail/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Hello AFCS ( bye Cocomo ) : première application multi-utilisateurs</title>
		<link>http://www.lafabrick.com/blog/2009/01/31/1040-hello-cocomo-first-app/</link>
		<comments>http://www.lafabrick.com/blog/2009/01/31/1040-hello-cocomo-first-app/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 21:48:24 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[cocomo]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[interactivité]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=1040</guid>
		<description><![CDATA[[ 5 mars 2009 : Mise à jour de l'article : Cocomo devient AFCS et passe en version 0.9.1, corrigeant quelques bugs ] Dans ce 1er exemple d’application Cocomo Adobe Flash Collaboration Services aka A.F.C.S, nous allons développer, à vrai dire «&#160;assembler&#160;», une application de visioconférence intégrant un tchat, des notes partagées et un gestionnaire [...]]]></description>
			<content:encoded><![CDATA[<p>[ 5 mars 2009 : Mise à jour de l'article : <del datetime="2009-03-05T19:23:22+00:00">Cocomo</del> devient AFCS et passe en version 0.9.1, corrigeant quelques bugs ]</p>
<p>Dans ce 1er exemple d’application <del datetime="2009-03-05T19:23:22+00:00">Cocomo</del> <strong>Adobe Flash Collaboration Services</strong> aka <strong>A.F.C.S</strong>, nous allons développer, à vrai dire «&nbsp;assembler&nbsp;», une application de <strong>visioconférence</strong> intégrant un <strong>tchat, </strong>des<strong> notes partagées </strong>et un gestionnaire de <strong>partage de fichiers</strong>. Pour cela nous allons utiliser des <strong>pods</strong>, les composants de plus haut-niveau fournis dans <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS .</p>
<p>L’un des principaux composants d’une application <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS  est le <strong>gestionnaire de session</strong>. C’est lui qui sera chargé de la communication avec les serveurs <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS , et donc de l’identification des utilisateurs, de la gestion de leur connexion, de la synchronisation des données… et plus encore…</p>
<p>Deux composants peuvent jouer ce rôle : <strong>ConnectSessionContainer</strong> et <strong>ConnectSession</strong> ( tous deux implémentent <em><strong>com.adobe.rtc.session.IConnectSession </strong></em>).</p>
<p><img src="http://lafabrick.free.fr/blogImg/Cocomo_prez1-20081218-051847.jpg" alt="Connexion Cocomo" /><br />
<span id="more-1040"></span></p>
<h3>Hello AFCS ( bye Cocomo )</h3>
<p>Pour commencer :</p>
<p>- créer un <strong>nouveau projet Flex</strong>,<br />
- <strong>copier le SWC <del datetime="2009-03-06T16:02:18+00:00">Cocomo</del> AFCS (depuis CocomoSDK_0.9/lib/player 9 ou 10/afcs.swc) et collez-le dans votre répertoire /libs/</strong></p>
<p>Il s’agit d’un composant basé sur la classe Canvas, et intégrant toute la «&nbsp;mécanique&nbsp;» nécessaire à la communication avec les serveurs <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS .</p>
<p>Il est à noter que le ConnectSessionContainer, et donc ses «&nbsp;composants-enfants&nbsp;», resteront invisibles tant que la communication avec salon ne sera pas établie. C’est pour cette raison que nous allons lui intégrer nos <strong><em>pods ( WebCamera, SimpleChat, Notes et FileShare ).</em></strong>Tant que la connexion ne sera pas établie, aucun des composants ne sera visible.</p>
<p>Pour débuter une session, nous devrons renseigner deux propriétés du <strong>container de session</strong> :</p>
<ul>
<li>l’adresse du salon: <strong>roomURL</strong> ( exemple : http://connectnow.acrobat.com/votreCompte/nomSalon )</li>
<li>les identifiants de connexion : <strong>authenticator</strong></li>
</ul>
<p>La transmission des identifiants se fait par l’intermédiaire de la classe <strong>AdobeHSAuthenticator</strong>.Elle a pour fonction d’encapsuler les informations relatives à l’identification( <strong>userName</strong>, <strong>password</strong> ). Plusieurs modes d’authentification sont possibles, nous nous y interresserons plus tard.</p>
<p>Dans un premier temps nous nous contenterons d’inscrire nos identifiants «&nbsp;en dur&nbsp;» dans notre application.</p>
<p>On peut noter que les composants liés à AFCS se référent au namespace ‘AfcsNameSpace’ ( anciennement ‘CocomoNameSpace’ dans version 0.9 )</p>
<pre class="brush: xml">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;mx:Application layout=&quot;absolute&quot;
 xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
 xmlns:rtc=&quot;AfcsNameSpace&quot;
 &gt;
&lt;rtc:ConnectSessionContainer id=&quot;sessionManager&quot; width=&quot;500&quot; height=&quot;400&quot;
 roomURL=&quot;http://connectnow.acrobat.com/yourAccount/roomName&quot;
 authenticator=&quot;{identificator}&quot;
 backgroundColor=&quot;#FFFFFF&quot;
/&gt;
&lt;rtc:AdobeHSAuthenticator id=&quot;identificator&quot;
 userName=&quot;votreLogin&quot; password=&quot;VotreMotDePasse&quot;
/&gt;
&lt;/mx:Application&gt;
</pre>
<p>À ce stade, l’application peut déjà se connecter. Par défaut, dès que le connectSessionContainer est créé, il tente d’initier la communication avec les serveurs. Dans cet exemple, j’ai ajouté une couleur de fond pour le container, de manière à pouvoir observer lorsque la connexion au salon est réussie.</p>
<p>Si vous publiez le projet en mode debug vous verrez les logs relatifs aux communications client/serveur.</p>
<p><img src="http://lafabrick.free.fr/blogImg/Flex_Builder-20081218-065625.jpg" alt="Logs Connexion Serveurs Cocomo" /></p>
<p>Pour vérifier si l’authentification est correcte, nous pouvons déclarer des écouteurs d’événements <strong>AuthenticationEvent.AUTHENTICATION_FAILURE </strong>et <strong>AuthenticationEvent.AUTHENTICATION_SUCCESS </strong>sur <strong>AdobeHSAuthenticator</strong>.</p>
<p>Pour capter le moment où notre application est connectée et synchronisée, nous pouvons ajouter un écouteur d’événement <strong>SessionEvent.SYNCHRONIZATION_CHANGE</strong> sur le container, et surveiller sa propriété ‘<strong>isSynchronized</strong>‘. Nous reviendrons prochainement sur les différents aspects et acteurs en jeu lors de cette synchronisation.</p>
<pre class="brush: xml">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;mx:Application layout=&quot;absolute&quot;
    xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
    xmlns:rtc=&quot;AfcsNameSpace&quot;
&gt;
     &lt;mx:Script&gt;
         &lt;![CDATA[
             import mx.controls.Alert;
             import com.adobe.rtc.events.SessionEvent;

             // session&#039;s state
             private var isConnected:Boolean = false;

			// when a &quot;server synchronization&quot; event is dispatched
             public function onSynchro( e:SessionEvent ):void
             {
                 if ( sessionManager.isSynchronized &amp;&amp;  ! isConnected )
                 {
                     Alert.show(&quot;Application connectée&quot;);
                     isConnected = true ;
                 }
             }
     ]]&gt;
 &lt;/mx:Script&gt;
&lt;rtc:ConnectSessionContainer id=&quot;sessionManager&quot;
    width=&quot;100%&quot; height=&quot;100%&quot; backgroundColor=&quot;#FFFFFF&quot;
    authenticator=&quot;{identificator}&quot;
    roomURL=&quot;http://connectnow.acrobat.com/regartdemo/meetingzone&quot;
    synchronizationChange=&quot;onSynchro( event )&quot;
/&gt;
&lt;!-- Authentication component --&gt;
 &lt;rtc:AdobeHSAuthenticator id=&quot;identificator&quot;
   userName=&quot;YourUserName&quot; password=&quot;YourPassword&quot;
   authenticationSuccess=&quot;Alert.show(&#039;authentication success&#039;)&quot;
   authenticationFailure=&quot;Alert.show(&#039;authentication failed&#039;)&quot;/&gt;
&lt;/mx:Application&gt;
</pre>
<p>Maintenant que notre connexion parvient à se connecter au salon, nous allons pouvoir intégrer les pods.</p>
<h3>Utilisation des pods</h3>
<p>Les pods sont des composants collaboratifs «&nbsp;<strong>prêt à l’emploi</strong>«&nbsp;. Lorsque vous utilisez un <strong>ConnectSessionContainer</strong>, il suffit d’insérer vos pods à l’intérieur pour qu’ils puissent repérer la connexion établie et l’utiliser.</p>
<p>À ce jour, les pods disponibles sont :</p>
<ul>
<li><strong>SimpleChat</strong> : composant de «&nbsp;clavardage&nbsp;» permettant l’envoi de messages publics et privés</li>
<li><strong>WebCamera</strong> : composant de visioconférences</li>
<li><strong>FileShare</strong> : composant de partage de fichier ( upload / download )</li>
<li><strong>Note</strong> : composant de partage de notes</li>
<li><strong>Roster</strong> et <strong>HorizontalRoster</strong> : composant de gestion d’utilisateurs</li>
<li><strong>SharedWhiteBoard</strong> : tableau blanc partagé</li>
</ul>
<p>Nous allons maintenant insérer les pods souhaités :</p>
<pre class="brush: xml">

&lt;rtc:ConnectSessionContainer id=&quot;sessionManager&quot; width=&quot;100%&quot; height=&quot;100%&quot; backgroundColor=&quot;#FFFFFF&quot;
   authenticator=&quot;{identificator}&quot;
   roomURL=&quot;http://connectnow.acrobat.com/votreCompte/nomSalon&quot;
   synchronizationChange=&quot;onSynchro( event )&quot;
   &gt;

   &lt;!-- PODS --&gt;
   &lt;mx:VBox width=&quot;50%&quot; height=&quot;100%&quot; horizontalAlign=&quot;center&quot;&gt;

      &lt;rtc:WebCamera id=&quot;webcam&quot; width=&quot;300&quot; /&gt;

      &lt;rtc:SimpleChat id=&quot;chat&quot; width=&quot;100%&quot; height=&quot;100%&quot; /&gt;

   &lt;/mx:VBox&gt;

   &lt;mx:VBox width=&quot;50%&quot; height=&quot;100%&quot;  right=&quot;0&quot;&gt;

     &lt;rtc:FileShare id=&quot;fileManager&quot; width=&quot;100%&quot; height=&quot;50%&quot; /&gt;

      &lt;rtc:Note id=&quot;notes&quot; width=&quot;100%&quot; height=&quot;50%&quot; /&gt;
   &lt;/mx:VBox&gt;
&lt;/rtc:ConnectSessionContainer&gt;
</pre>
<p><img src="http://lafabrick.free.fr/blogImg/hello_cocomo-20081218-081901.jpg" alt="Hello Cocomo" /></p>
<p>Les pods intégrent des mécanismes de gestion de droits. Nous y reviendrons …</p>
<p>Toujours est-il que voilà, vous avez créé votre première application <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS , ou devrais je dire votre première application de «&nbsp;communication en temps réelle&nbsp;». Mais comment faisait-on avant ???…</p>
<h3>Identification et gestion de la connexion aux serveurs</h3>
<p>Bon il manque encore quelque chose peut être… Pour un seul utilisateur çà irait presque… mais c’est pas le but :s…Comment fera-t-on si un jour on trouve des amis et qu’on veut collaborer avec eux ??? Tout le monde va se connecter avec le compte «&nbsp;d’admin&nbsp;» ??? Et n’importe quel décompileur AS3 va pouvoir récupérer les identifiants ? Pas très sécure… Heureusement <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS  nous permet de gérer facilement tous ces aspects.</p>
<p>Les serveurs <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS  permettent plusieurs types d’identification, notamment une connexion en tant que <strong>hôte</strong>, basée sur le compte <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS  Developper, et une connexion en tant <strong>qu’invité</strong>, ne nécessitant qu’un nom de participant.</p>
<p>Nous allons donc supprimer les attributs userName et password de l’AdobeHSAuthenticator, et ajouter un formulaire d’authentification à notre application. Ce formulaire permettra de choisir le type d’identification ( hôte ou invité ) :</p>
<pre class="brush: xml">

&lt;mx:Panel id=&quot;logPanel&quot; &gt;
   &lt;mx:Form&gt;

      &lt;mx:FormItem label=&quot;Login&quot;&gt;
         &lt;mx:TextInput id=&quot;chp_login&quot; /&gt;
      &lt;/mx:FormItem&gt;

      &lt;mx:FormItem label=&quot;your role :&quot; direction=&quot;horizontal&quot; &gt;

         &lt;mx:RadioButtonGroup id=&quot;userRole&quot; /&gt;

         &lt;mx:RadioButton id=&quot;isGuest&quot; groupName=&quot;userRole&quot;
            label=&quot;Guest&quot; value=&quot;{UserRoles.VIEWER}&quot;  selected=&quot;true&quot;
         /&gt;
         &lt;mx:RadioButton id=&quot;isOwner&quot; groupName=&quot;userRole&quot;
            label=&quot;Host&quot; value=&quot;{UserRoles.OWNER}&quot;
         /&gt;
      &lt;/mx:FormItem&gt;

      &lt;mx:FormItem label=&quot;Password&quot;  enabled=&quot;{ userRole.selectedValue == UserRoles.OWNER }&quot;&gt;
         &lt;mx:TextInput id=&quot;field_password&quot; displayAsPassword=&quot;true&quot;  /&gt;
      &lt;/mx:FormItem&gt;

      &lt;mx:FormItem &gt;
         &lt;mx:Button label=&quot;Enter&quot;
            click=&quot;login(chp_login.text , userRole.selectedValue == UserRoles.OWNER ? field_password.text : null  )&quot;
          /&gt;
      &lt;/mx:FormItem&gt;

   &lt;/mx:Form&gt;
&lt;/mx:Panel&gt;
</pre>
<p>La définition des <strong>rôles des utilisateurs</strong> est basée sur des valeurs numériques, définies dans des constantes de la classe <strong>UserRoles</strong>.</p>
<p>Les principaux rôles sont <strong>Owner</strong> ( hôte / propriétaire du salon ), <strong>Publisher</strong> ( participant autorisé à publier sur un ou plusieurs pods ) et <strong>Viewer</strong> ( invité seulement autorisé à utiliser le tchat ). Normallement, les invités ne peuvent utiliser un salon que si l’hôte est présent. Il est possible de modifier la configuration initiale des salons ( droit de publication automatique, persistence des données, entrée libre… ), ainsi que les rôles et les droits des utilisateurs connectés, pour cela nous pourrons utiliser l’application <del datetime="2009-03-05T19:23:22+00:00">CocomoDevConsole</del> AFCSDevConsole ou l’API directement. Mais c’est déjà une autre histoire…</p>
<p>Pour le moment, nous allons permettre à l’utilisateur de s’identifier à l’aide du formulaire. Pour cela nous devons <strong>désactiver la connexion automatique du gestionnaire de session</strong> en déclarant sa propriété <strong>autoLogin=&nbsp;»false&nbsp;»</strong>.</p>
<p>Pour finir, nous allons ajouter une méthode <strong><em>login()</em></strong> qui sera chargée de renseigner le <strong><em>AdobeHSAuthenticator</em></strong>, et de lancer la connexion du gestionnaire de session :</p>
<pre class="brush: js">

private function login ( login:String, password:String ):void
{
   identificator.userName = login;
	//if password is set : log as host
	//else log as guest
   identificator.password = password ;

	// run sessionManager connection
   sessionManager.login();
}
</pre>
<p>Nous allons ensuite rajouter un bouton et une fonction de déconnexion.</p>
<pre class="brush: js">

// disconnection
// in actual 0.9 beta, mostly pods, can&#039;t be re-connected after a disconnection

private function logout():void
{
    sessionManager.logout();

	// close() is supposed to disconnect et remove all childNodes, but seems not work yet
    //sessionManager.close();
}
</pre>
<pre class="brush: xml">

&lt;mx:VBox width=&quot;50%&quot; height=&quot;100%&quot; horizontalAlign=&quot;center&quot; right=&quot;0&quot;&gt;
    &lt;mx:Button label=&quot;Logout&quot; click=&quot;logout()&quot; /&gt;

    &lt;rtc:FileShare id=&quot;fileManager&quot; width=&quot;100%&quot; height=&quot;50%&quot; /&gt;

    &lt;rtc:Note id=&quot;notes&quot; width=&quot;100%&quot; height=&quot;50%&quot; /&gt;
&lt;/mx:VBox&gt;
</pre>
<p>Dès que l’application sera connectée, nous supprimerons le formulaire, et en cas de déconnexion le gestionnaire de session sera supprimé :</p>
<pre class="brush: js">

// for each synchronization event
// : connection, disconnection , state&#039;s change, ...
private function onSynchro( e:SessionEvent ):void
{

	// once application is successfully connected / synchronized
    if ( sessionManager.isSynchronized &amp;&amp; ! isConnected )
    {
        Alert.show(&quot;Application connectée&quot;);

        isConnected = true ;

        removeChild( logPanel );

    } else if ( ! sessionManager.isSynchronized &amp;&amp; isConnected ){
    // if disconnected
    isConnected = false ;

   /* remove the connectSessionContainer
   *  » in this version disconnected pods can&#039;t re-connect
   *
   *  » For re-connect, you can :
   *     - reload html page
   *     - dynamically re-create connectSession and pods
   */
   removeChild( sessionManager );

   // display logout message
   Alert.show( &#039;vous avez quitté la réunion, recharger la page pour entrer à nouveau&#039;);
   }
}
</pre>
<p><strong>La gestion des déconnexions / reconnexions semblent pour le moment un peu instables.</strong> Mais bon on est prévenu, c’est une béta. Après quelques tests, je crois que le meilleur moyen de revenir dans un salon après s’être déconnecté, est de recharger la page.</p>
<p>Accéder aux <a href="http://www.e-actif.com/lab/hello_cocomo">sources complétes</a></p>
<p>Voilà la fin de ce premier exemple d’utilisation de <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS , et il est bien entendu possible d’aller beaucoup plus loin. La prochaine fois nous nous intéresserons de plus près aux différents mécanismes articulés au sein de <del datetime="2009-03-05T19:23:22+00:00">cocomo</del> AFCS , et plus globalement à l’architecture du service. Nous utiliserons également la <del datetime="2009-03-05T19:23:22+00:00">CocomoDevConsole</del>AFCSDevConsole et le <strong>LocalConnectionServer</strong>, les deux outils AIR proposés dans le SDK.</p>
<p>D’ici là bonne collaboration !!! <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  </p>
<p>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/2008/12/22/568-cocomo-kezako/" rel="bookmark" title="22 décembre 2008">Cocomo ? Kezako ?</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/12/13/506-utiliser-le-dragmanager-de-flex-1ere-partie/" rel="bookmark" title="13 décembre 2008">Utiliser le DragManager de Flex ( 1ère partie )</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>
</ul>
<p><!-- Similar Posts took 19.020 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/01/31/1040-hello-cocomo-first-app/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Data visualization : BeeDocs 3D TimeLine Concept</title>
		<link>http://www.lafabrick.com/blog/2009/01/08/658-3d-timeline/</link>
		<comments>http://www.lafabrick.com/blog/2009/01/08/658-3d-timeline/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 01:00:16 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Expériences utilisateur]]></category>
		<category><![CDATA[Pure Style]]></category>
		<category><![CDATA[DataVisualisation]]></category>
		<category><![CDATA[UI Design]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=658</guid>
		<description><![CDATA[Si les interfaces 3D permettent de très jolis effets graphiques ( whitevoid par exemple ) , j&#8217;ai vu peu d&#8217;exemples dans lesquels la 3D apportait une réelle amélioration en terme &#171;&#160;d&#8217;ergonomie&#160;&#187;. Dans la présentation qui suit, BeeDocs propose un intéressant concept de visualisation 3D de chronologies. On dirait que les rotations 3D de FP10 arrivent [...]]]></description>
			<content:encoded><![CDATA[<p>Si les interfaces 3D permettent de très jolis effets graphiques ( <a href="http://www.whitevoid.com/application.html" alt="AS3 3D Navigation Exemple" )> whitevoid</a> par exemple  ) , j&#8217;ai vu peu d&#8217;exemples dans lesquels la 3D apportait une réelle amélioration en terme &laquo;&nbsp;d&#8217;ergonomie&nbsp;&raquo;. Dans la présentation qui suit, BeeDocs propose un intéressant concept de visualisation 3D de chronologies.</p>
<p><img src="http://lafabrick.free.fr/blogImg/beedocs3dTimeline-20090108-020049.jpg" alt="BeeDocs 3D Timeline Concept" /></p>
<p><span id="more-658"></span></p>
<p><object width="583" height="470"><param name="movie" value="http://www.youtube.com/v/0aimgEBJB3Y&#038;hl=fr&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/0aimgEBJB3Y&#038;hl=fr&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="583" height="470"></embed></object></p>
<p>On dirait que les rotations 3D de FP10 arrivent à point&#8230; ;-p</p>
<p>Et vous ? vous z&#8217;en connaissez des exemples d&#8217;interfaces &laquo;&nbsp;utilement&nbsp;&raquo; en 3D  ???</p>
<p>Plus d&#8217;info sur <a href="http://www.beedocs.com">BeeDocs</a></p>
<p>Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2007/08/31/210-flex-active-desktop-le-webgadgetos-qui-fait-de-l-effet/" rel="bookmark" title="31 août 2007">Flex Active Desktop : le webGadgetOS qui fait de l&#8217;effet !</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/08/07/197-tileui-un-bureau-raliste-en-as3/" rel="bookmark" title="7 août 2007">TileUI : un bureau &laquo;&nbsp;réaliste&nbsp;&raquo; en AS3</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/01/05/285-le-design-declaratif-un-nom-degrafa/" rel="bookmark" title="5 janvier 2008">Le design déclaratif à un nom : Degrafa</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/05/07/322-le-double-effet-java-fx/" rel="bookmark" title="7 mai 2008">JavaFX et Open Screen Project, ou la naissance des applications universelles&#8230;</a></li>
</ul>
<p><!-- Similar Posts took 16.977 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2009/01/08/658-3d-timeline/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cocomo ? Kezako ?</title>
		<link>http://www.lafabrick.com/blog/2008/12/22/568-cocomo-kezako/</link>
		<comments>http://www.lafabrick.com/blog/2008/12/22/568-cocomo-kezako/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 15:58:49 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[cocomo]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=568</guid>
		<description><![CDATA[LaFabrick invitée sur FlashXpress » votre première application collaborative en 15mn ! Mais pourquoi diable se priver !!??? Autres articles sur le même sujet Cocomo est là et personne me prévient ??!! L&#8217;erreur est humaine&#8230; debuguer un projet Flex distant via Flex Builder Developing with AFCS a.k.a Cocomo &#8211; Introduction Hello AFCS ( bye Cocomo [...]]]></description>
			<content:encoded><![CDATA[<p>LaFabrick invitée sur FlashXpress » <a title="FlashXpress : introduction à Cocomo ... by LaFabrick" href="http://www.flashxpress.net/category/ressources-flex/" target="_blank">votre première application collaborative</a> en 15mn ! Mais pourquoi diable se priver !!??? <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: center;"><a href="http://www.flashxpress.net/category/ressources-flex/" target="_blank"><img class="aligncenter" title="FlashXPress : introduction à Cocomo... by laFabrick" src="http://lafabrick.free.fr/blogImg/lien_tuto_cocomo-20081222-070459.jpg" alt="" width="520" height="168" /></a></p>
<p>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/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/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>
</ul>
<p><!-- Similar Posts took 11.926 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2008/12/22/568-cocomo-kezako/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Déjà Noël&#8230; Hello r.CØ&#8230;</title>
		<link>http://www.lafabrick.com/blog/2008/12/22/552-deja-noel-hello-rc%c3%b8/</link>
		<comments>http://www.lafabrick.com/blog/2008/12/22/552-deja-noel-hello-rc%c3%b8/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 05:17:16 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[Bientôt chez vous]]></category>
		<category><![CDATA[La Fabrick]]></category>
		<category><![CDATA[Nawak]]></category>
		<category><![CDATA[Nos projets]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[MindStorms]]></category>
		<category><![CDATA[rCØ]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=552</guid>
		<description><![CDATA[Et comme nous avons tous été très sages cette année : C&#8217;est le dernier moment pour compléter sa liste de Noël&#8230; Alors pour les plus sages, je ne saurais que trop conseiller cette énorme rechute en enfance : Quelques legos, une brique programmable ( un cerveau ), 3 moteurs, des capteurs ( sons, lumière, bouton [...]]]></description>
			<content:encoded><![CDATA[<p>Et comme nous avons tous été très sages cette année : C&#8217;est le dernier moment pour compléter sa liste de Noël&#8230;</p>
<p><img class="aligncenter" title="Tribot_alpha" src="http://lafabrick.free.fr/blogImg/Mindstorm_1.jpg_%40_50__%28Calque_0_copie%2C_RVB_8%29-20081222-063014.jpg" alt="" width="520" height="162" /></p>
<p><span id="more-552"></span></p>
<p>Alors pour les plus sages, je ne saurais que trop conseiller cette énorme rechute en enfance :</p>
<p><a href="http://mindstorms.lego.com/eng/NZ_dest_2/default.aspx"><img class="aligncenter" title="Lego MindStorms" src="http://lafabrick.free.fr/blogImg/legomindstorms-20081222-045841.jpg" alt="" width="453" height="253" /></a></p>
<p>Quelques legos, une brique programmable ( un cerveau ), 3 moteurs, des capteurs ( sons, lumière, bouton &#8230; ) : régression garantie !!! De quoi créer toutes sortes de <a title="Online Physics Puzzle" href="http://fantasticcontraption.com/" target="_blank">Fantastic Contraptions, </a> &#8230; mais en vrai <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p> </p>
<p>Par contre pour les absentéistes et les chahuteurs chroniques du dernier rang : pas de cadeaux !!! Des devoirs de vacances &#8230;<br />
 </p>
<p><a href="http://vod.elephorm.com/index.html#id=64;type=formation"><img class="aligncenter" title="Apprendre Flex 3 avec Erick Ghaumez" src="http://lafabrick.free.fr/blogImg/apprendre_flex_erick-20081222-050302.jpg" alt="" width="641" height="430" /></a></p>
<p> </p>
<p>Preuve que  j&#8217;ai vraiment été très sage cette année :p. Du coup j&#8217;ai commandé le gros jouet !!! Et comme Noël c&#8217;est quand même plus simple quand on est grand, j&#8217;ai commandé direct au <a title="Lego Mindstorms sur Amazon" href="http://www.amazon.fr/Lego-jeu-de-construction-Mindstorms/dp/B000RGSP0Y/ref=sr_1_2?ie=UTF8&amp;s=toys&amp;qid=1229919186&amp;sr=8-2" target="_blank">fournisseur du Père Nöel</a>&#8230; pratique ! Et puis vu que j&#8217;avais pas de sapin où le planquer, je l&#8217;ai posé au milieu du salon&#8230; et puis vu que je suis pas une moitié d&#8217;enfulte, le premier matin des &laquo;&nbsp;vacances&nbsp;&raquo; je me suis jeté dessus <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Et depuis 36h maintenant&#8230; j&#8217;ai 10 ans !!! <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p> </p>
<p>Et je vous présente <strong>r.CØ</strong>, notre nouveau copain d&#8217;aventures&#8230;</p>
<p> </p>
<p><img class="aligncenter" title="r_cØ" src="http://lafabrick.free.fr/blogImg/22122008049.jpg_%40_25__%28Calque_0_copie_3%2C_RVB_8%29-20081222-054539.jpg" alt="" width="482" height="557" /></p>
<p> </p>
<p>Joyeuses fêtes !!!Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2008/12/23/591-cocomo-wiibot/" rel="bookmark" title="23 décembre 2008">Introducing r.CØ &#8230; First &laquo;&nbsp;Cocomo ready&nbsp;&raquo; Air Wiibot&#8230;</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>
<li><a href="http://www.lafabrick.com/blog/2008/05/23/318-thanks-adobe-you-certified-me/" rel="bookmark" title="23 mai 2008">Thanks Adobe, U certified me !!! <img src='http://www.lafabrick.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </a></li>
</ul>
<p><!-- Similar Posts took 12.554 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2008/12/22/552-deja-noel-hello-rc%c3%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser le DragManager de Flex ( 1ère partie )</title>
		<link>http://www.lafabrick.com/blog/2008/12/13/506-utiliser-le-dragmanager-de-flex-1ere-partie/</link>
		<comments>http://www.lafabrick.com/blog/2008/12/13/506-utiliser-le-dragmanager-de-flex-1ere-partie/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 00:26:26 +0000</pubDate>
		<dc:creator>Erick</dc:creator>
				<category><![CDATA[[Dev] Flash / Flex / AIR...]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[interactivité]]></category>
		<category><![CDATA[Tutoriels]]></category>

		<guid isPermaLink="false">http://www.lafabrick.com/blog/?p=506</guid>
		<description><![CDATA[Les composants d&#8217;affichage de listes ( List, DataGrid, TileList &#8230; ) intègrent un mécanisme de drag&#8217;n'Drop natif très simple à utiliser. La classe DragManager permet quant à elle de définir des comportements de drag&#8217;n'drop avec n&#8217;importe quel composant graphique Flex. Certains composants propose des propriétés dragEnabled ou dropEnabled permettant de gérer les transferts depuis et vers [...]]]></description>
			<content:encoded><![CDATA[<p>Les composants d&#8217;affichage de listes ( List, DataGrid, TileList &#8230; ) intègrent un mécanisme de drag&#8217;n'Drop natif très simple à utiliser.</p>
<p>La classe <strong><em>DragManager</em></strong> permet quant à elle de définir des comportements de drag&#8217;n'drop avec n&#8217;importe quel composant graphique Flex.</p>
<div class="mceTemp mceIEcenter">
<dl class="wp-caption aligncenter" style="width: 456px;">
<dt class="wp-caption-dt"><a href="http://lafabrick.com/tutos/dragndrop/"><img class=" " src="http://lafabrick.free.fr/blogImg/dragdrop-20081213-015015.jpg" alt="Flex DragManager" width="446" height="157" /></a></dt>
</dl>
</div>
<p><span id="more-506"></span></p>
<p>Certains composants propose des propriétés dragEnabled ou dropEnabled permettant de gérer les transferts depuis et vers eux :</p>
<pre class="brush: xml">

&lt;dataGrid dragEnabled= &quot;true&quot;   dragMoveEnabled = &quot;true&quot; dropEnabled=&quot;true&quot; /&gt;
</pre>
<p>La classe DragManager va nous permettre de créer notre propre mécanisme de glisser / déposer. Voyons un exemple d&#8217;utilisation de cette classe à travers la création d&#8217;un jeu de &laquo;&nbsp;mot dans le désordre&nbsp;&raquo;.</p>
<p><a title="Exemple dragManager" href="http://lafabrick.com/tutos/dragndrop/" target="_blank">Exemple </a> / <a title="Source de l'exemple" href="http://lafabrick.com/tutos/dragndrop/srcview/index.html" target="_blank">Source</a></p>
<h2><strong><span style="color: #808080;"><span style="color: #999999;"><span style="color: #00ccff;">Fonctionnement</span></span></span><span style="color: #999999;"><span style="color: #00ccff;"> </span></span></strong></h2>
<p><strong></strong></p>
<p><strong>Une opération de &laquo;&nbsp;glisser / déposer&nbsp;&raquo; se fait en 3 étapes :</strong></p>
<p>1. le clic sur l&#8217;élément à déplacer </p>
<p>2. Le déplacement de l&#8217;élément</p>
<p>3. Le dépot de l&#8217;élément</p>
<p> </p>
<p>La classe <strong><em>DragManager</em></strong> va nous permettre de gérer  : </p>
<p>- la copie et le transfert des données</p>
<p>- la création d&#8217;une &laquo;&nbsp;image proxy&nbsp;&raquo; ( représentant l&#8217;objet pendant le déplacement )</p>
<p>- la vérification des droits de dépôt de l&#8217;élément</p>
<p><strong></strong></p>
<p> </p>
<p>Durant les trois étapes, nous aurons à écouter les événements de la classe <strong><em>DragEvent</em></strong> émis à la fois par le composant déplacé et par les &laquo;&nbsp;composants cibles potentiels&nbsp;&raquo; ( les composants survolés ).</p>
<p>Nous utiliserons également :</p>
<p><span> </span>- les méthodes statiques de la classe <strong><em>DragManager</em></strong> pour initier le déplacement ( <strong><em>doDrag</em></strong>( &#8230; ) ) et vérifier le droit de dépot ( <strong><em>acceptDragDrop</em></strong>(&#8230;) )</p>
<p><span> </span>-  un objet <strong><em>DragSource</em></strong> pour transférer les données.</p>
<p> </p>
<h2><strong><span style="color: #999999;"><span style="color: #00ccff;">1. Le déplacement</span></span></strong></h2>
<p><strong>1.1  Capter l&#8217;évenement mouseDown</strong></p>
<p>Pour permettre le déplacement d&#8217;un composant graphique Flex,, il faut créer un écouteur d&#8217;événement MouseEvent.<strong>MOUSE_DOWN </strong>sur les objets pouvant être déplacés :</p>
<pre class="brush: xml">

&lt;mx:Label id=&quot;l&quot;

fontSize=&quot;32&quot; text=&quot;{rpSrc.currentItem.lettre}&quot;

horizontalCenter=&quot;0&quot; verticalCenter=&quot;0&quot;

mouseDown=&quot;drag( event )&quot;

/&gt;
</pre>
<p> </p>
<p><strong>1.2  Stocker les données déplacées et initier le déplacement</strong></p>
<p>A chaque émission de cet événement, nous allons:</p>
<p>- créer une instance de <strong><em>DragSource</em></strong> et y rajouter les données à déplacer</p>
<p>-  appeler  la méthode statique <strong><em>DragManager</em></strong><em>.</em><strong><em>doDrag</em></strong>(&#8230;) pour initier le déplacement</p>
<pre class="brush: js">

private function drag( e:MouseEvent):void

{

var dgData:DragSource = new DragSource();
var dgText:String = (e.target.parent as Label).text ;
dgData.addData( dgText  , &quot;lettre&quot; );

dgData.addData( getLetterPosition(dgText) , &quot;position&quot; );

DragManager.doDrag( UIComponent(e.target.parent) , dgData, e );

}
</pre>
<p> </p>
<p>Pour stocker les données dans l&#8217;objet <strong><em>DragSource</em></strong>, on peut utiliser  la méthode <strong><em>addData( donnée</em></strong><em>:Object</em><strong><em> , nomPropriété:String ) </em></strong></p>
<p>Les données peuvent être utilisées pour vérifier les &laquo;&nbsp;droits de dépots&nbsp;&raquo; sur un composant cible.</p>
<p> </p>
<p>La méthode <strong><em>doDrag</em></strong>( &#8230; ) du composant <em>DragManager</em> nécessite quant à elle plusieurs paramètres :</p>
<p> - le <strong><em>dragInitiator</em></strong>  : <em>IUIComponent</em> ( obligatoire ) : le composant ayant initié le déplacement, généralement l&#8217;objet déplacé</p>
<p> - la <strong><em>dragSource</em></strong> : <em>DragSource</em> ( obligatoire ) : instance de DragSource contenant les données devant être déplacées</p>
<p>- le <strong><em>mouseEvent</em></strong> : <em>MouseEvent</em> ( obligatoire ) : événement à l&#8217;origine du déplacement ( MouseEvent.MOUSE_DOWN )</p>
<p>- la<em> </em><strong><em>dragImage</em></strong><em> : IFlexDisplayObject</em> ( optionnel / default = null ) : &laquo;&nbsp;Image proxy&nbsp;&raquo; utilisée pour représenter le composant déplacé durant le déplacement. Si aucune image n&#8217;est défini, un rectangle gris est dessiné par défaut.</p>
<p>- le<em> </em><strong><em>xOffSet</em></strong><em> : Number </em>( optionnel / default = 0) : position horizontale de l&#8217;image proxy par rapport au curseur.</p>
<p>- le<em> </em><strong><em>yOffSet</em></strong><em> : Number </em>( optionnel / default = 0 ) : position verticale de l&#8217;image proxy par rapport au curseur </p>
<p>- l&#8217;<em> </em><strong><em>imageAlpha</em></strong><em> : Number </em>( optionnel / default = 0.5 ) : opacité de l&#8217;image proxy</p>
<p>- <strong><em>allowMove</em></strong><em> </em>: Boolean ( optionnel / defaut = true ) : les données peuvent être transférées ( couper / glisser / coller ) sur un objet cible.</p>
<p> </p>
<p>Le composant n&#8217;est pas lui réellement déplacé avant le drop. <em>DragManager</em> crée une dragImage qui représente le composant déplacé. Une fois le dépôt effectué, si il est autorisé par le composant cible, les données peuvent être  transférées de &laquo;&nbsp;l&#8217;objet source&nbsp;&raquo; à &laquo;&nbsp;l&#8217;objet cible&nbsp;&raquo;.</p>
<p> </p>
<h2><strong><span style="color: #999999;"><span style="color: #00ccff;">2. Survol des cibles</span></span></strong></h2>
<p>Lorsque le composant déplacé survole des composants potentiellement &laquo;&nbsp;cibles&nbsp;&raquo;, ces derniers émettent des événements <strong><em>DragEvent.DRAG_ENTER.</em></strong></p>
<p><strong><em></em></strong></p>
<pre class="brush: xml">

&lt;local:DropableCanvas width=&quot;60&quot; height=&quot;80&quot;

    dragEnter=&quot;isDropable(event)&quot;

&gt;
</pre>
<p> </p>
<p>Nous allons pouvoir écouter ces événements afin de tester si l&#8217;objet peut être déposé sur l&#8217;objet survolé.</p>
<p>Le plus simple est de vérifier si le <strong><em>dragSource</em></strong> contenu dans le <strong><em>DragEvent.DRAG_ENTER</em></strong> contient certaines propriétés.</p>
<p>A chaque <strong><em>dragEnter</em></strong><em>, </em>la méthode <strong><em>isDropable</em></strong><em>()</em> est appelée.</p>
<p>Si la/les proprieté(s) recherchée(s) sont bien présente(s) dans le dragSource , on peut appeler la méthode  <strong><em>DragManager.acceptDragDrop</em></strong><em>( target : IUIComponent )</em> où <em>target</em> est le composant pouvant accepter le dépot des données.</p>
<pre class="brush: js">

private function isDropable( e:DragEvent ):void

{

    var dgData:DragSource = e.dragSource ;

    // référence du champ texte du Canvas Cible

    var cibleText:Label = Container(e.target).getChildAt(0) as Label ;

   // si le champ cible est différent du champ source et que le champ cible est vide : autoriser le drop

   if ( e.dragInitiator != cibleText &amp;amp;&amp;amp; cibleText.text == &quot;&quot; )

       if ( dgData.hasFormat(&quot;lettre&quot;) &amp;amp;&amp;amp; dgData.hasFormat(&quot;position&quot;) )

         DragManager.acceptDragDrop( UIComponent( e.target ) );

}
</pre>
<p>Si ce n&#8217;est pas le cas, l&#8217;objet déplacé sera signalé comme &laquo;&nbsp;non autorisé&nbsp;&raquo; à être déposé dans le composant cible courant ( curseur &laquo;&nbsp;interdit&nbsp;&raquo; ).</p>
<h2><strong><span style="color: #00ccff;">3. Dépot des données</span></strong></h2>
<p>Pour capter le dépot, on peut écouter :</p>
<p> </p>
<p>- l&#8217;événement <strong>DragEvent.dragDrop</strong> sur l&#8217;objet &laquo;&nbsp;cible&nbsp;&raquo;.</p>
<pre class="brush: xml">

&lt;local:DropableCanvas width=&quot;60&quot; height=&quot;80&quot;

 backgroundColor=&quot;#EFEFEF&quot; borderColor=&quot;#CCCCCC&quot; borderStyle=&quot;solid&quot;

 dragEnter=&quot;isDropable(event)&quot;

 dropData=&quot;{lettres[rpCibles.currentIndex]}&quot;

 dragDrop=&quot;addLettre( event )&quot;

&gt;
</pre>
<p>La méthode addLettre() est ici appelée lors d&#8217;un DragEvent.dragDrop. Cette méthode va nous permettre d&#8217;effectuer le transfert de données ( ici la lettre et sa position ).</p>
<pre class="brush: js">

private function addLettre( e:DragEvent ):void

{

 // récupération des données

 var dropLetter:String = String( e.dragSource.dataForFormat(&quot;lettre&quot;) );

 var dropPosition:uint = uint( e.dragSource.dataForFormat(&quot;position&quot;) );

 

 // référence du champ texte du Canvas Cible

 var cibleText:Label = Container(e.target).getChildAt(0) as Label ;

 

 // remplit le champ texte cible

 cibleText.text = dropLetter ;

 

 // si la lettre est déposé dans un Canvas cible : test si elle est déposé à la bonne position

 if ( e.target is DropableCanvas )

    if ( DropableCanvas(e.target).dropData.position == dropPosition )

      cibleText.setStyle( &quot;color&quot; , 0x00FF00 );

}
</pre>
<p>Dans cet exemple, j&#8217;ai ajouté un classe <em><strong>DropableCanvas</strong></em>. Cette classe possède un propriété publique <em><strong>dropData</strong></em>, qui permet de stocker les réponses correctes de chaque &laquo;&nbsp;composant de dépôt&nbsp;&raquo;. Au moment du drop, cela nous permet de tester si la lettre est bien posée au bon endroit.</p>
<p>- l&#8217;évenement <strong><em>DragEvent.dragComplete</em></strong> sur le composant &laquo;&nbsp;émetteur&nbsp;&raquo;.</p>
<p>Lorsque les données sont &laquo;&nbsp;lachées&nbsp;&raquo;, et quelque soit le résultat du drag&#8217;n'drop, l&#8217;objet émetteur émet un <em>dragComplete</em>.</p>
<pre class="brush: xml">

&lt;mx:Label id=&quot;cibleLabel&quot; fontSize=&quot;32&quot;

    horizontalCenter=&quot;0&quot; verticalCenter=&quot;0&quot;

    mouseDown=&quot;drag( event )&quot;

    dragComplete=&quot;onDragComplete( event )&quot;

/&gt;
</pre>
<p>Grâce à la propriété <em>action</em> de l&#8217;événement nous pouvons savoir le résultat du drop. ( move, link, none ou copy )</p>
<pre class="brush: js">

private function onDragComplete( e:DragEvent ):void

{

    if ( e.action == DragManager.MOVE )

       Label( e.target ).text = &quot;&quot;;

}
</pre>
<p><a title="DragManager les sources" href="http://lafabrick.com/tutos/dragndrop/srcview/index.html" target="_blank">Voir les sources</a></p>
<p>Dans un prochain tutoriel nous verrons comment personnaliser graphiquement cette opération.Autres articles sur le même sujet
<ul>
<li><a href="http://www.lafabrick.com/blog/2006/11/16/19-petit-cour-sur-lapi-de-dessin/" rel="bookmark" title="16 novembre 2006">Petit cours sur l’API de dessin</a></li>
<li><a href="http://www.lafabrick.com/blog/2007/10/03/256-titre/" rel="bookmark" title="3 octobre 2007">Utiliser Cairngorm dans un projet Flex / AMFPHP</a></li>
<li><a href="http://www.lafabrick.com/blog/2008/06/06/327-google-language-api-flex/" rel="bookmark" title="6 juin 2008">Google AJAX Language API&#8230; et ton Flex devient polyglotte !</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>
</ul>
<p><!-- Similar Posts took 13.082 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lafabrick.com/blog/2008/12/13/506-utiliser-le-dragmanager-de-flex-1ere-partie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

