<?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>netinfluence&#039;s blog &#187; julien</title>
	<atom:link href="http://blog.netinfluence.com/author/julien/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.netinfluence.com</link>
	<description>le blog de l&#039;agence netinfluence</description>
	<lastBuildDate>Fri, 13 Jan 2012 10:39:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Bargento 4</title>
		<link>http://blog.netinfluence.com/2010/05/30/bargento-4/</link>
		<comments>http://blog.netinfluence.com/2010/05/30/bargento-4/#comments</comments>
		<pubDate>Sun, 30 May 2010 15:34:26 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[care]]></category>
		<category><![CDATA[bargento]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=1874</guid>
		<description><![CDATA[Le vendredi 28 mai dernier a eu lieu le Bargento 4 à Paris. Voici un petit résumé de l&#8217;événement qui a tout de même réuni 650 personnes autour de Magento Visiblement, Magento se porte plutôt bien ! Une nouvelle version &#8220;Professionnelle&#8221;, une version iPhone (native), des chiffres tous dans le noir. L&#8217;équipe de chaume pas ! L&#8217;essentiel des conférences ne s&#8217;adressent pas particulièrement aux développeurs, mais plus aux e-commerçants ou aux équipes commerciales des prestataires. Ceci dit, j&#8217;ai tout de même trouvé mon compte dans les rencontres et certaines présentations. Celle de Zend (Utiliser les outils Zend pour le développement et la production) par exemple abordant le monitoring d&#8217;application Php. J&#8217;avais déjà vu une présentation du genre, mais chaque fois [...]]]></description>
			<content:encoded><![CDATA[<p>Le vendredi 28 mai dernier a eu lieu le <a href="http://www.bargento.fr/bargento-4/presentation-du-bargento-4/">Bargento 4</a> à Paris. Voici un petit résumé de l&#8217;événement qui a tout de même réuni 650 personnes autour de <a href="http://www.magentocommerce.com/fr/">Magento</a></p>
<p>Visiblement, Magento se porte plutôt bien ! Une nouvelle version &#8220;Professionnelle&#8221;, une version iPhone (native), des chiffres tous dans le noir. L&#8217;équipe de chaume pas !</p>
<p>L&#8217;essentiel des conférences ne s&#8217;adressent pas particulièrement aux développeurs, mais plus aux e-commerçants ou aux équipes commerciales des prestataires. Ceci dit, j&#8217;ai tout de même trouvé mon compte dans les rencontres et certaines présentations.</p>
<p>Celle de Zend (Utiliser les outils Zend pour le développement et la production) par exemple abordant le monitoring d&#8217;application Php. J&#8217;avais déjà vu une présentation du genre, mais chaque fois que je revois le zend server en action, je me dis qu&#8217;il m&#8217;en faut un <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> Ca donne envie de faire des bugs, rien que pour utiliser l&#8217;outil. Pour faire simple, entre autres fonctionnalités, le zend server permet de générer une trace particulièrement complète (contenu de la requête, variables, liste des méthodes parcourues) lors d&#8217;une erreur. La détection et l&#8217;affichage des erreurs sont configurables. Vous pouvez par exemple spécifier à partir de combien de temps une requête est considérer comme lente. La trace peut finalement être exportée et visualisée sur Zend Studio par un développeur. Vous trouverez plus de détails sur le site de <a href="http://www.zend.com/fr/products/server/">zend</a>. En avant première, nous avons également appris qu&#8217;une nouvelle version du zend server (cluster manager) permettant de gérer des clusters de zend servers allait sortir dans peu de temps.</p>
<p>J&#8217;ai également beaucoup aimé la présentation de Cybercité (Les Do et les Don&#8217;t en matière de SEO sous Magento). Celle-ci a d&#8217;ailleurs dépassé le cadre de Magento pour aborder les aspects SEO en général. Il était intéressant d&#8217;apprendre par exemple que la première place sur Google n&#8217;est plus forcément la meilleure. Avec l&#8217;apparition des images dans les résultats des recherches sur Google, les positions autour de celles-ci, deviennent aussi particulièrement intéressantes.</p>
<p>Pour le reste, je pense que les participants ont largement trouvé leur compte et le networking a bien fonctionné. En tout cas, l&#8217;organisation a été remarquable malgré une demi-heure de retard, mais c&#8217;est une constatation très helvétique <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> Bref, globalement une très bonne journée !</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2010/05/30/bargento-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formation Magento</title>
		<link>http://blog.netinfluence.com/2010/02/24/formation-magento/</link>
		<comments>http://blog.netinfluence.com/2010/02/24/formation-magento/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 10:56:51 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[formation]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend Server]]></category>
		<category><![CDATA[Zend Studio]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=1053</guid>
		<description><![CDATA[La récente &#8220;Magento Academy&#8221; propose depuis peu une formation développeur en 5 jours (à Paris) à laquelle j&#8217;ai eu le plaisir d&#8217;assister la semaine dernière (semaine du 15 au 19 février). Les cours sont donnés par Gabriel Bouhatous, expert magento très actif de la communauté et co-organisateur des Bargentos. Voici un petit résumé de cette semaine. Jour 1 Tout d&#8217;abord, félicitation à l&#8217;équipe pour sa réactivité. En effet, 3 jours plus tôt (le vendredi 12 février) sortait une nouvelle version de Magento CE, la 1.4.0. Et ce lundi 15 février, nous apprenons que la formation portera sur cette nouvelle version et que même les supports de cours ont été mis à jour. Vous trouverez plus d&#8217;informations sur la 1.4 ici. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.netinfluence.com/2010/02/24/formation-magento/logo-2/" rel="attachment wp-att-1107"><img src="http://blog.netinfluence.ch/wp-content/uploads/2010/02/logo.jpg" alt="Magento Academy" title="Magento Academy" width="138" height="37" class="size-full wp-image-1107" align="left" style="padding-right:20px;padding-bottom:20px;" /></a>La récente &#8220;<a href="http://www.magento-academy.com/">Magento Academy</a>&#8221; propose depuis peu une formation développeur en 5 jours (à Paris) à laquelle j&#8217;ai eu le plaisir d&#8217;assister la semaine dernière (semaine du 15 au 19 février). Les cours sont donnés par <a href="http://fr.linkedin.com/in/gabrielbouhatous">Gabriel Bouhatous</a>, expert magento très actif de la communauté et co-organisateur des <a href="http://www.bargento.fr/">Bargentos</a>. Voici un petit résumé de cette semaine.<br />
<br/></p>
<h3>Jour 1</h3>
<p>Tout d&#8217;abord, félicitation à l&#8217;équipe pour sa réactivité. En effet, 3 jours plus tôt (le vendredi 12 février) sortait une nouvelle version de Magento CE, la 1.4.0. Et ce lundi 15 février, nous apprenons que la formation portera sur cette nouvelle version et que même les supports de cours ont été mis à jour. Vous trouverez plus d&#8217;informations sur la 1.4 <a title="Nouvelle version de Magento" href="http://blog.netinfluence.ch/2010/02/16/la-nouvelle-version-de-magento-ce-1-4/" target="_self">ici</a>.</p>
<p>Ce premier cours commence par les présentations et visiblement le niveau des participants est très varié. Certains sont débutants en Php et avec les concepts objets. Pour ma part, je suis <a href="http://www.zend.com/en/yellow-pages#show-ClientCandidateID=ZEND010156">certifié en Php et sur le Zend Framework</a> (sur lequel est construit magento). Nous enchaînons avec un petit historique et des exemples de sites sur magento.</p>
<p>L&#8217;essentiel de la journée est consacrée à l&#8217;installation de magento. Pour cela, l&#8217;académie met à disposition des postes Windows 7 avec tous les outils nécessaires : Zend Studio &amp; Zend Server. Personnellement, j&#8217;ai pris mon mac, je n&#8217;arrive plus à me servir d&#8217;un PC depuis une année <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> En parallèle de cette installation, les outils de développement Zend sont présentés, notamment les fonctions de profilage du Zend Server (la version payante est impressionnante !) et l&#8217;utilisation du Zend Studio. Gabriel évoque également la terminologie magento ainsi que quelques concepts objets comme le MVC. Pour finir, nous testons les fonctionnalités d&#8217;aide au développement offertes par magento, telles qu&#8217;un profilage intégré ou la visualisation des noms de blocks.</p>
<p>En résumé cette première journée s&#8217;adresse essentiellement à ceux qui n&#8217;ont jamais touché magento et si vous avez de bonnes bases en Php et que vous avez déjà installé magento, vous devriez pouvoir commencer votre semaine le mardi. Ceci étant dit, quelques astuces très pratiques sont tout de même délivrées dans le courant de la journée permettant par exemple de bien réaliser un import/export complet.</p>
<blockquote>
<ul><strong>Astuces import / export magento :</strong></p>
<li>cocher la non-vérification des contraintes d&#8217;intégrité lors du dump de la base (phpmyadmin)</li>
<li>la table core_config_data est à mettre à jour après l&#8217;import car elle contient les urls d&#8217;accès (web/unsecure/base_url et web/secure/base_url)</li>
<li>le fichier app/etc/local.xml contient les accès DB et autres éléments de configuration à changer lors du changement d&#8217;environnement</li>
<li>le fichier dowloader/pear.ini est à regénérer en cas de changement d&#8217;environnement, mais ceci ne peut pas être fait à la main. Pour cela, il faut l&#8217;effacer et resauvegarder la config dans magento connect.</li>
</ul>
</blockquote>
<br/></p>
<h3>Jour 2</h3>
<p>Ce deuxième jour est plus instructif. Nous abordons ce matin les concepts liés au templating. Comme beaucoup de choses dans magento, celui ci, pas toujours évident à bien comprendre, est très explosé. Du coup la présentation des différentes interactions entre les interfaces, les thèmes et les skins et surtout la configuration de ces interactions est essentielle pour appréhender toute intégration graphique. De l&#8217;association des interfaces ou thèmes différents à un shop dans l&#8217;administration magento (assez évident) à la mise en place de quelques retouches graphiques via des modifications du code (pas toujours intuitif dans un premier temps), de nombreux aspects sont abordés.</p>
<p>Le sujet, plustôt vaste, nous occupe toute la journée, mais c&#8217;est sans aucun doute les travaux pratiques qui m&#8217;instruisent le plus. La mise en place du fichier de configuration (xml) qui décrit les interactions entre les vues (fichiers .phtml) et les templates laisse entrevoir une puissance qui donne envie d&#8217;aller plus loin. Les possibilités de redéfinir le contenu d&#8217;un layout au fur et à mesure que l&#8217;on se ballade dans les fichiers de configuration sont plus qu&#8217;intéressantes. Si vous n&#8217;avez jamais approché magento, ceci n&#8217;est pas forcément très parlant, mais la curiosité du développeur en vous doit être titillée.</p>
<p>Bref, un deuxième jour très intéressant.</p>
<blockquote><p>Au moment de rendre une page, magento parse absolument tous les fichiers de config (pour autant que le module ou le thème soit inclu) afin de déduire la configuration souhaitée. Ceci permet de redéfinir des bouts de configuration dans son code, ce qui peut être très pratique. Évidemment, ce mécanisme est mis en cache (si celui ci est activé).</p></blockquote>
<p><br/></p>
<h3>Jour 3</h3>
<p>Pour commencer ce troisième jour, nous poursuivons les explications liés aux templates. Mais l&#8217;essentiel de la matinée est consacrée à l&#8217;analyse d&#8217;un module. Quelle arborescence constitue un module? Où se trouvent les fichiers ? Comment les lier entre eux ? On replonge du coup dans le fonctionnement des fichiers de configs XML qui décrivent tant de choses dans magento. Nous apprenons par exemple comment surcharger uniquement un produit ou une catégorie.</p>
<p>L&#8217;après-midi, le sujet principal est le modèle de données de magento et surtout le concept sur lequel il repose : <a href="http://en.wikipedia.org/wiki/Entity-attribute-value_model">EAV</a>. S&#8217;il est vrai que cette approche ne rend pas la modélisation plus simple, il la rend par contre beaucoup plus flexible, un atout indispensable qui explique aussi la modularité de magento.</p>
<p>Si la première journée m&#8217;a un peu inquiétée parce que pas très instructive, les deux jours suivants, avec leur lots d&#8217;astuces, de &#8220;how-to&#8217;s&#8221; et de &#8220;best practices&#8221; m&#8217;ont largement rassurés. Pourvu que ça dure !</p>
<blockquote><p>Dans la config, si vous n&#8217;avez pas de type particulier à attribuer à un Block, donnez lui le type par défaut &#8211; core/template :<br/><br/>&lt;block type=&quot;<b>core/template</b>&quot; name=&quot;monblock&quot; as=&quot;monblock&quot; &gt;</p></blockquote>
<p><br/></p>
<h3>Jour 4</h3>
<p>Aujourd&#8217;hui nous créons notre premier module. On commence par déclarer le module. Au début, il ne fait qu&#8217;afficher le fameux &#8220;Hello World !&#8221;. Puis, plus le cours avance, plus il se construit. </p>
<p>Tout y passe&#8230; scripts et configuration de l&#8217;installation, gestion des versions, création de blocks, de controllers, ajout d&#8217;un model, communication avec la base de données grâce aux &#8220;Resource Models&#8221;, surcharge du core. </p>
<p>Nous modifions les données sans faire une requête sql grâce aux &#8220;Varien_Object&#8221;. Ce concept, très inspiré du Zend Framework, permet d&#8217;avoir du code très lisible et facile à maintenir. Les listes sont affichées grâce à la classe &#8220;Varien_Data_Collection&#8221; qui facilite entre autres le filtrage des résultats ou encore la pagination.</p>
<p>Ce module interagis exclusivement avec le frontend magento, alors l&#8217;après-midi nous analysons un module existant (le module news créer par l&#8217;extension <a href="http://www.magentocommerce.com/wiki/custom_module_with_custom_database_table">Module Creator</a>) qui interagis également avec le backend. Nous voyons ainsi comment afficher très facilement une liste d&#8217;éléments dans l&#8217;admin, en sélectionner un pour le modifier, ajouter des fonctionnalités d&#8217;exports Excel ou XML et de &#8220;Mass Action&#8221;. </p>
<p>Que du bonheur !</p>
<blockquote><p>
La liste des modules installés sur votre instance de magento se trouve dans la table &#8220;core_resources&#8221;. Vous y trouverez aussi la version actuelle du module. Ceci peut être très pratique en développement pour manipuler ses modules.
</p></blockquote>
<p><br/></p>
<h3>Jour 5</h3>
<p>Dernier jour.  Gabriel passe la journée à répondre aux nombreuses questions et nous proposent quelques concepts pas encore abordés.</p>
<p>On survole ainsi le fonctionnement des événements et des observers qui permettent d&#8217;éviter parfois de surcharger le core de magento et donc d&#8217;être moins sensible aux mises à jour du produit. On complète notre module créé la veille avec des fonctionnalités de traductions et nous testons rapidement un webservice. Enfin, nous observons le fonctionnement des imports / export automatiques depuis l&#8217;admin (pas mal, mais un peu limité).</p>
<p>Cette dernière journée permet surtout de répondre aux interrogations de tout le monde et de présenter ses problèmes concrets. On obtient rapidement une solution, une direction à suivre ou à ne pas suivre. Encore une fois beaucoup de temps gagner grâce à l&#8217;expertise des membres de l&#8217;académie.<br />
<br/></p>
<h3>Conclusion</h3>
<p>Un détail, et pas des moindre, que je n&#8217;ai pas précisé est que le prix de la formation inclus le repas du midi qui est (à mon goût) très bon.</p>
<p>En résumé, je pense que cette formation me permettra de gagner énormément de temps sur mes futurs projets magento. Moins de temps sur Google, plus d&#8217;efficacité et une meilleure utilisation du framework magento (car c&#8217;est aussi un framework). Je dois dire donc, que cette semaine a été très positive et que j&#8217;encourage tout futur développeur magento à prendre ce temps pour parfaire ses compétences. Pour les articles techniques, ils arriveront au fur et à mesure que les projets avanceront.</p>
<p>Bonne journée <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> </p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2010/02/24/formation-magento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La nouvelle version de Magento CE – 1.4</title>
		<link>http://blog.netinfluence.com/2010/02/16/la-nouvelle-version-de-magento-ce-1-4/</link>
		<comments>http://blog.netinfluence.com/2010/02/16/la-nouvelle-version-de-magento-ce-1-4/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 14:24:13 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[magento]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=879</guid>
		<description><![CDATA[Vendredi dernier (le 12 février 2010), Varien a livré une nouvelle version de l&#8217;édition communautaire de Magento : la version 1.4 Cette version apporte son lot de corrections de bugs et de nouvelles fonctionnalités dont certaines particulièrement intéressantes. Vous trouverez la liste exhaustive des changements ici, ou encore dans cet article. WYSIWYG &#38; Widgets Personnellement, ce qui me plaît beaucoup c&#8217;est le nouveau WYSIWYG intégré dans le CMS. Ce WYSIWYG est très complet puisqu&#8217;il intègre également des widgets. Il est donc maintenant possible, sans une seule ligne de code, de configurer sa page d&#8217;accueil (ou un autre page du CMS) pour présenter un produit en particulier, les nouveaux produits, les derniers produits consultés ou encore des blocks statiques. Vous pourrez [...]]]></description>
			<content:encoded><![CDATA[<p>Vendredi dernier (le 12 février 2010), Varien a livré une nouvelle version de l&#8217;édition communautaire de Magento : la version 1.4</p>
<p>Cette version apporte son lot de corrections de bugs et de nouvelles fonctionnalités dont certaines particulièrement intéressantes.</p>
<p>Vous trouverez la liste exhaustive des changements <a href="http://www.magentocommerce.com/download/release_notes#Release%20Notes%20-%20Magento%201.4.0.0%20stable%20%28February%2012,%202010%29" target="_self">ici</a>, ou encore dans cet <a href="http://www.fragento.org/Actualite/Magento/magento-ce-140-stable-est-sortie.html" target="_self">article</a>.</p>
<h3>WYSIWYG &amp; Widgets</h3>
<p>Personnellement, ce qui me plaît beaucoup c&#8217;est le nouveau WYSIWYG intégré dans le CMS. Ce WYSIWYG est très complet puisqu&#8217;il intègre également des widgets.</p>
<p>Il est donc maintenant possible, sans une seule ligne de code, de configurer sa page d&#8217;accueil (ou un autre page du CMS) pour présenter un produit en particulier, les nouveaux produits, les derniers produits consultés ou encore des blocks statiques. Vous pourrez même créer vos propres widgets. Certains e-commerçants vont être contents.</p>
<h3>Custom variables</h3>
<p>Un nouveau système de &#8220;custom variables&#8221; a également été intégré. Ceci permet de créer une variable personnalisée grâce à une nouvelle interface utilisateur.</p>
<p>Cette variable peut contenir du html et/ou du texte simple. Le but étant ensuite d&#8217;intégrer cette variable dans le CMS (de la même manière qu&#8217;un widget) ou dans les emails transactionnels. Vous pourriez par exemple avoir votre signature d&#8217;email dans une de ces variables et ensuite l&#8217;intégrer dans vos emails. Le jour où la signature change, le travail n&#8217;est à faire qu&#8217;à un seul endroit.</p>
<h3>Templates</h3>
<p>Le système de gestion des templates a été légèrement modifié, mais à mon avis (et de l&#8217;avis de certains experts reconnus) cette modification n&#8217;apporte pas grand chose, au contraire.</p>
<p>En effet, un niveau supplémentaire (base) a été ajouté au niveau de la hiérarchie des designs, et même si Varien prétend que ce niveau permet d&#8217;améliorer la maintenance, il me semble pas que ce soit une réalité. Cela rend simplement plus sensible vos templates aux mises à jour de magento. La bonne nouvelle, c&#8217;est qu&#8217;on peut ne pas en tenir compte.</p>
<p>Pour le reste, les nouveautés concernent entre autres des améliorations du cache, des nouvelles possibilités de configurations, une gestion améliorée de la TVA, la possibilité de mettre son site en &#8220;maintenance&#8221; très facilement… Une belle liste de fonctionnalités qui donnent de bonnes raisons de se réjouir <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> </p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2010/02/16/la-nouvelle-version-de-magento-ce-1-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flex – Fade In, Fade Out Text</title>
		<link>http://blog.netinfluence.com/2009/11/12/flex-fade-in-fade-out-text/</link>
		<comments>http://blog.netinfluence.com/2009/11/12/flex-fade-in-fade-out-text/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 05:11:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=56</guid>
		<description><![CDATA[This one is a very small one but one that may proove usefull to more than one I was recently playing around with flex, having fun fading in and out stuff when I realized that text components such as LABEL or TEXT where not very &#8220;fade friendly&#8221;. There was nothing special with my code, no special font or anything, so I googled a little and found out that you need to embed a font for it to be &#8220;fadable&#8221;, event if it is a system font. Here is an example : &#60;?xml version="1.0" encoding="utf-8"?&#62; &#60;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="200" height="200" backgroundAlpha="0" backgroundColor="#FFFFFF"&#62; &#60;mx:Script&#62; &#60;![CDATA[ [Embed(systemFont='Verdana', fontName='myVerdana', mimeType='application/x-font')] public var myVerdana:Class; ]]&#62; &#60;/mx:Script&#62; &#60;mx:Canvas id="myCanvas" backgroundColor="#AAAAAA" backgroundAlpha="1" width="200" height="150" hideEffect="{myFade}" showEffect="{myFade}"&#62; &#60;mx:Text [...]]]></description>
			<content:encoded><![CDATA[<p>This one is a very small one but one that may proove usefull to more than one <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> </p>
<p>I was recently playing around with flex, having fun fading in and out stuff when I realized that text components such as LABEL or TEXT where not very &#8220;fade friendly&#8221;. There was nothing special with my code, no special font or anything, so I googled a little and found out that you need to embed a font for it to be &#8220;fadable&#8221;, event if it is a system font.</p>
<p>Here is an example :</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="200" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="/public/julien/textFadeDemo.swf" /><embed type="application/x-shockwave-flash" width="200" height="200" src="/public/julien/textFadeDemo.swf"></embed></object></p>
<pre class="brush: as3; html-script: true;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                layout="absolute"
                width="200" height="200"
                backgroundAlpha="0"
                backgroundColor="#FFFFFF"&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[
            [Embed(systemFont='Verdana', fontName='myVerdana', mimeType='application/x-font')]
            public var myVerdana:Class;
        ]]&gt;
    &lt;/mx:Script&gt;

    &lt;mx:Canvas id="myCanvas"
               backgroundColor="#AAAAAA"
               backgroundAlpha="1"
               width="200" height="150"
               hideEffect="{myFade}"
               showEffect="{myFade}"&gt;
        &lt;mx:Text horizontalCenter="0"
                 top="30"
                 color="#000000"
                 text="Embeded Font Text"
                 fontFamily="myVerdana"
                 fontSize="15"/&gt;
        &lt;mx:Text horizontalCenter="0"
                 top="80"
                 color="#000000"
                 text="Non Embeded Font Text"
                 fontSize="15"/&gt;
    &lt;/mx:Canvas&gt;

    &lt;mx:Fade id="myFade" duration="1000" /&gt;

    &lt;mx:Button click="{myCanvas.visible = !myCanvas.visible}"
                 horizontalCenter="0"
                 top="160"
                 label="Fade In/Out"/&gt;

&lt;/mx:Application&gt;</pre>
<p>Hope this helps&#8230;</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/11/12/flex-fade-in-fade-out-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le multilingue en Flex</title>
		<link>http://blog.netinfluence.com/2009/10/26/le-multilingue-en-flex/</link>
		<comments>http://blog.netinfluence.com/2009/10/26/le-multilingue-en-flex/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 09:13:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=54</guid>
		<description><![CDATA[Flex a tout ce qu&#8217;il faut pour gérer le multilingue de manière très simple et efficace. Mais cela demande tout de même à être mis en place puisque quelques subtilités existent. Tout d&#8217;abord, vérifiez que vous avez les locales nécessaires au niveau du sdk (/Adobe Flex Builder 3/sdks/3.2.0/frameworks/locale/). Pour chaque locale, vous devez avoir un répertoire correspondant (par exemple en_US ou fr_FR). S&#8217;il vous en manque un, il suffit simplement de copier un des répertoires existants et de le renommer. Pour commencer, il nous faut un fichier par langue pour y mettre les traductions nécessaires. Pour cela, il suffit de créer un répertoire locale/ dans votre répertoire src/ : Dans ce répertoire locale/ vous devrez ensuite créer un répertoire pour [...]]]></description>
			<content:encoded><![CDATA[<p>Flex a tout ce qu&#8217;il faut pour gérer le multilingue de manière très simple et efficace. Mais cela demande tout de même à être mis en place puisque quelques subtilités existent.</p>
<p>Tout d&#8217;abord, vérifiez que vous avez les locales nécessaires au niveau du sdk (/Adobe Flex Builder 3/sdks/3.2.0/frameworks/locale/). Pour chaque locale, vous devez avoir un répertoire correspondant (par exemple en_US ou fr_FR). S&#8217;il vous en manque un, il suffit simplement de copier un des répertoires existants et de le renommer.</p>
<p>Pour commencer, il nous faut un fichier par langue pour y mettre les traductions nécessaires. Pour cela, il suffit de créer un répertoire locale/ dans votre répertoire src/ :</p>
<p><img title="Arborescence ML, oct. 2009" src="/public/julien/arboML.png" alt="" /></p>
<p>Dans ce répertoire locale/ vous devrez ensuite créer un répertoire pour chaque langue que vous voulez traduire (ici l&#8217;allemand et le français). Enfin, chaque répertoire doit contenir le fichier de traduction qu&#8217;on appellera ici &#8220;monProjet.properties&#8221;.</p>
<p>Les fichiers .properties contiennent une ligne par traduction selon le format de l&#8217;exemple ci dessous :</p>
<pre class="brush: as3;">L_LOGIN=identifiant
L_PASSWORD=mot de passe
L_EXIT=quitter</pre>
<p>J&#8217;ai l&#8217;habitude (pour des raisons historiques <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> ) d&#8217;écrire mes clés de traduction en majuscule et de les faire commencer par un &#8220;L_&#8221; mais ce n&#8217;est pas une obligation.</p>
<p>Maintenant que nous avons nos fichiers de traductions, il faut dire à l&#8217;application qu&#8217;ils existent. Pour cela, il suffit de rajouter au fichier monProjet.mxml les quelques lignes suivantes :</p>
<pre class="brush: xml;">    &lt;mx:Metadata&gt;
        [ResourceBundle("monProjet")]
    &lt;/mx:Metadata&gt;</pre>
<p>Maintenant, chaque fois que vous voudrez traduire un texte, il faudra l&#8217;intégrer de la manière suivante à votre code :</p>
<pre class="brush: as3;">    resourceManager.getString('monProjet', 'L_LOGIN');</pre>
<p>Reste encore à préciser à votre application quelle est la langue actuellement sélectionnée. Rien de plus simple. La commande ci-dessous permet justement d&#8217;indiquer la langue choisie (quelle chance !) :</p>
<pre class="brush: as3;">    resourceManager.localeChain = ['fr_FR'];</pre>
<p>Evidemment, pour l&#8217;allemand, ça aurait donné :</p>
<pre class="brush: as3;">    resourceManager.localeChain = ['de_DE'];</pre>
<p>Une dernier petit détail… la compilation. En effet, lors de la compilation de votre projet, il faut préciser les langues utilisées et l&#8217;endroit où se trouvent les fichiers de traduction. Pour cela, dans les propriétés de votre projet, une section (&#8220;Flex Compiler&#8221;) traite de la compilation. Vous pouvez alors donner des arguments supplémentaires au compilateur. Pour la gestion multilingue, nous allons ajouter ceux-ci :</p>
<pre class="brush: plain; wrap-lines: false; light: true;">-locale=fr_FR,de_DE -allow-source-path-overlap=true -source-path=locale/{locale}</pre>
<p><img title="Compilation ML, oct. 2009" src="/public/julien/.compilationML_m.jpg" alt="" /></p>
<p>Cette fois le tour est joué, votre application est polyglotte.</p>
<p>Voici un très petit exemple qui permet de rapidement tester la fonctionalité :</p>
<pre class="brush: as3; html-script: true;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:WindowedApplication
    xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    creationComplete="init()"&gt;
    &lt;mx:Metadata&gt;
        [ResourceBundle("monProjet")]
    &lt;/mx:Metadata&gt;
    &lt;mx:Script&gt;
        &lt;![CDATA[
            private function init():void {
                resourceManager.localeChain = ['fr_FR'];
            }
        ]]&gt;
    &lt;/mx:Script&gt;
    &lt;mx:Label text="FR" x="10" y="10"
              click="{resourceManager.localeChain = ['fr_FR']}"/&gt;
    &lt;mx:Label text="DE" x="10" y="30"
              click="{resourceManager.localeChain = ['de_DE']}"/&gt;
    &lt;mx:Label x="50" y="20"
              text="{resourceManager.getString('monProjet', 'L_HELLO')}"/&gt;
&lt;/mx:WindowedApplication&gt;</pre>
<p>Bonne journée.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/10/26/le-multilingue-en-flex/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Flex – Play with pictures</title>
		<link>http://blog.netinfluence.com/2009/08/12/flex-play-with-pictures/</link>
		<comments>http://blog.netinfluence.com/2009/08/12/flex-play-with-pictures/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 13:57:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=48</guid>
		<description><![CDATA[Flex offers great functionalities to play around with the pictures you have in your application. I am far from being a design or photo expert but I did have fun modifying the pictures that were inside my latest flex app. My particular issue was the following. We had a list of products, each of them having a related picture. Some of these products could be bought, others not yet so we wanted to display the later as &#8220;disabled&#8221;. In other words, we wanted a nice colorfull picture for some products and a grayscale picture for others but the only picture available to us was the colorfull one. So we used the ColorMatrixFilter. Here is how : &#60;?xml version="1.0" encoding="utf-8"?&#62; &#60;mx:Application [...]]]></description>
			<content:encoded><![CDATA[<p>Flex offers great functionalities to play around with the pictures you have in your application. I am far from being a design or photo expert but I did have fun modifying the pictures that were inside my latest flex app.</p>
<p>My particular issue was the following. We had a list of products, each of them having a related picture. Some of these products could be bought, others not yet so we wanted to display the later as &#8220;disabled&#8221;. In other words, we wanted a nice colorfull picture for some products and a grayscale picture for others but the only picture available to us was the colorfull one.</p>
<p>So we used the ColorMatrixFilter. Here is how :</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="/public/julien/editImgDemo.swf" /><embed type="application/x-shockwave-flash" width="600" height="300" src="/public/julien/editImgDemo.swf"></embed></object></p>
<pre class="brush:xml;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    height="300"
    width="600"
    backgroundGradientAlphas="[0,0]"
    backgroundColor="#FFFFFF"&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[</pre>
<pre class="brush:as3;first-line:12">            private var rLum:Number = 0.212671;
            private var gLum:Number = 0.715160;
            private var bLum:Number = 0.072169;

            [Bindable]
            private var bwMatrix:Array =
                [rLum, gLum, bLum, 0, 0,
                 rLum, gLum, bLum, 0, 0,
                 rLum, gLum, bLum, 0, 0,
                 0, 0, 0, 0.5, 0];

            [Bindable]
            private var imgUrl:String = "http://blog.netinfluence.ch/public/julien/editImgDemo.png";</pre>
<pre class="brush:xml;first-line:25">        ]]&gt;
    &lt;/mx:Script&gt;

    &lt;mx:ColorMatrixFilter id="cmf" matrix="{bwMatrix}" /&gt;

    &lt;mx:Image source="{imgUrl}" height="300" width="300"/&gt;
    &lt;mx:Image source="{imgUrl}" height="300" width="300"
              left="300" filters="{[cmf]}"/&gt;

&lt;/mx:Application&gt;</pre>
<p>This is a very simple example. You can actually apply this method to other components than the image one. And if you play around with the matrix and the rgb values, you will find that you can change many things. The best way to see what you can do is to check out this little app : <a href="http://afoucal.free.fr/wp-content/ColorMatrixBuilder/ColorMatrix.html">http://afoucal.free.fr/wp-content/ColorMatrixBuilder/ColorMatrix.html</a></p>
<p>So go ahead and build you own photoshop <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> </p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/08/12/flex-play-with-pictures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A cool and flexible interface without images</title>
		<link>http://blog.netinfluence.com/2009/08/12/a-cool-and-flexible-interface-without-images/</link>
		<comments>http://blog.netinfluence.com/2009/08/12/a-cool-and-flexible-interface-without-images/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 12:32:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[interface]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=47</guid>
		<description><![CDATA[I recently had to develop a small widget with round corners that needed to be resized in all directions. Coming from the web, my first approach was to create this application using images. This approach is possible but you need to cut your images and the specificity of the layout made it impossible to manage auto-resize. Unsatisfied with this first approach, I looked for something else. I finally found that Flex offers a lot of possibilities allowing you to create cool layouts using only code. This makes global modifications to your application a lot easier to manage. Here is a simple example that does not use one single image : And here is the code /*mxml file*/ &#60;?xml version="1.0" encoding="utf-8"?&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had to develop a small widget with round corners that needed to be resized in all directions. Coming from the web, my first approach was to create this application using images. This approach is possible but you need to cut your images and the specificity of the layout made it impossible to manage auto-resize.</p>
<p>Unsatisfied with this first approach, I looked for something else. I finally found that Flex offers a lot of possibilities allowing you to create cool layouts using only code. This makes global modifications to your application a lot easier to manage.</p>
<p>Here is a simple example that does not use one single image :</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="200" height="200" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="/public/julien/noImgDemo.swf" /><embed type="application/x-shockwave-flash" width="200" height="200" src="/public/julien/noImgDemo.swf"></embed></object></p>
<p>And here is the code</p>
<pre class="brush: xml; wrap-lines: false;">/*mxml file*/
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    height="200"
    width="200"
    xmlns:geom="flash.geom.*"&gt;
    &lt;mx:Style source="css/style.css"/&gt;
    &lt;mx:Canvas styleName="outsideCanvas"
               height="190" width="190"&gt;
        &lt;mx:filters&gt;
            &lt;mx:DropShadowFilter distance="0"
                                 quality="15"
                                 alpha="0.5"
                                 inner="false"/&gt;
        &lt;/mx:filters&gt;
        &lt;mx:Canvas styleName="insideCanvas"
                   height="150" width="150"
                   verticalScrollBarStyleName="verticalScrollBar"&gt;
            &lt;mx:filters&gt;
                &lt;mx:DropShadowFilter distance="0"
                             quality="15"
                             alpha="0.5"
                             inner="true"/&gt;
            &lt;/mx:filters&gt;
            &lt;mx:Canvas verticalScrollPolicy="off"
                       horizontalScrollPolicy="off"
                       styleName="buttonStyle"
                       id="exampleButton" width="80"
                       horizontalCenter="0"
                       verticalCenter="0"&gt;
                &lt;mx:Canvas y="1" x="1"
                           width="{exampleButton.width-4}"
                           height="50%"
                           backgroundAlpha="0.5"
                           styleName="insideButton"/&gt;
                &lt;mx:Canvas y="0" x="0" width="100%"
                           height="100%"
                           backgroundAlpha="0.5"
                           visible="{!this.enabled}"
                           styleName="insideButton" /&gt;
                &lt;mx:Text text="OK"
                         verticalCenter="0"
                         horizontalCenter="0"
                         paddingTop="4"
                         color="#FFFFFF" /&gt;
                &lt;mx:mouseOver&gt;
                    &lt;![CDATA[
    exampleButton.setStyle('backgroundColor', '#DF0021');
                    ]]&gt;
                &lt;/mx:mouseOver&gt;
                &lt;mx:mouseOut&gt;
                    &lt;![CDATA[
    exampleButton.setStyle('backgroundColor', '#666666');
                    ]]&gt;
                &lt;/mx:mouseOut&gt;
            &lt;/mx:Canvas&gt;
        &lt;/mx:Canvas&gt;
    &lt;/mx:Canvas&gt;
&lt;/mx:Application&gt;</pre>
<pre class="brush: css;">/* CSS file */
Application {
     backgroundGradientAlphas: 1, 1;
     backgroundGradientColors: #FFFFFF, #FFFFFF;
}
.outsideCanvas {
     horizontalCenter:0;
     verticalCenter: 0;
     backgroundAlpha: 1;
     backgroundColor: #EEEEEE;
     cornerRadius: 8;
     borderStyle: solid;
     borderThickness: 2;
     borderColor: #FFFFFF;
}
.insideCanvas {
     horizontalCenter:0;
     verticalCenter: 0;
     backgroundAlpha: 1;
     backgroundColor: #FFFFFF;
     cornerRadius: 8;
     borderStyle: solid;
     borderThickness: 2;
     borderColor: #FFFFFF;
}
.buttonStyle {
     borderColor: #DDDDDD;
     borderStyle:solid;
     borderThickness: 1;
     focusThickness: 0;
     cornerRadius: 6;
     backgroundColor: #666666;
     backgroundAlpha: 1;
}
.insideButton {
     cornerRadius: 3;
     borderColor: #DDDDDD;
     borderStyle: solid;
     borderThickness: 0;
     backgroundColor: #FFFFFF;
}</pre>
<p>If this was not an example, the button would have been a component for obvious reusability reasons. You can do this sort of stuff for other components as well such as scrollbars, datagrids, etc&#8230; have fun !</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/08/12/a-cool-and-flexible-interface-without-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento – Datatrans configuration hint</title>
		<link>http://blog.netinfluence.com/2009/07/22/magento-datatrans-configuration-hint/</link>
		<comments>http://blog.netinfluence.com/2009/07/22/magento-datatrans-configuration-hint/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 05:37:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[magento]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=46</guid>
		<description><![CDATA[A customer we work with uses Magento with the Datatrans Paymentgateway extension and we recently had the following issue. Customers choosing to use datatrans as the payment method did not receive an order confirmation email, although the buy process was OK. After some time looking for a solution on the magento side, I finally found that the problem came from the datatrans configuration. The return URLs were wrong. They were logically set to the same values as you would expect for any other &#8220;non datatrans&#8221; process : Success URL : http://www.website.com/index.php/checkout/onepage/success/ Error URL: http://www.website.com/index.php/checkout/onepage/failure/ Cancel URL: http://www.website.com/index.php/checkout/cart/ The problem is that datatrans still has some stuff to do before you can return to the &#8220;standard process&#8221;, so the URLs you should [...]]]></description>
			<content:encoded><![CDATA[<p>A customer we work with uses Magento with the Datatrans Paymentgateway extension and we recently had the following issue. Customers choosing to use datatrans as the payment method did not receive an order confirmation email, although the buy process was OK.</p>
<p>After some time looking for a solution on the magento side, I finally found that the problem came from the datatrans configuration. The return URLs were wrong. They were logically set to the same values as you would expect for any other &#8220;non datatrans&#8221; process :</p>
<ul>
<li>Success URL : http://www.website.com/index.php/checkout/onepage/success/</li>
<li>Error URL: http://www.website.com/index.php/checkout/onepage/failure/</li>
<li>Cancel URL: http://www.website.com/index.php/checkout/cart/</li>
</ul>
<p>The problem is that datatrans still has some stuff to do before you can return to the &#8220;standard process&#8221;, so the URLs you should call look more like this :</p>
<ul>
<li>Success URL : http://www.website.com/index.php/datatrans/standard/success/</li>
<li>Error URL: http://www.website.com/index.php/checkout/onepage/failure/</li>
<li>Cancel URL: http://www.website.com/index.php/datatrans/standard/cancel/</li>
</ul>
<p>And you&#8217;re on the road again, again&#8230;<br />
Hope this helps !</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/07/22/magento-datatrans-configuration-hint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L’auto-update en Flex, c’est facile !</title>
		<link>http://blog.netinfluence.com/2009/06/16/flex-auto-update/</link>
		<comments>http://blog.netinfluence.com/2009/06/16/flex-auto-update/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 11:32:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=45</guid>
		<description><![CDATA[Quel bonheur de pouvoir mettre à jour son application sans se déplacer. C&#8217;est encore mieux lorsque ce genre de fonctionalité est facile à intégrer à son application. C&#8217;est justement le cas pour Flex et en voici la preuve. Le principe D&#8217;un côté, l&#8217;application AIR et de l&#8217;autre, le serveur sur lequel se trouve la nouvelle version de l&#8217;application AIR ainsi qu&#8217;un fichier update.xml qui décrit cette nouvelle version. Périodiquement, l&#8217;application AIR va vérifier sur le serveur la présence d&#8217;une nouvelle version et dans un tel cas, la télécharge et l&#8217;installe. Ainsi, mettre à jour un parc informatique devient simple et rapide. L&#8217;application AIR La première chose à faire est d&#8217;importer les librairies nécessaires à la mise à jour automatique : import [...]]]></description>
			<content:encoded><![CDATA[<p>Quel bonheur de pouvoir mettre à jour son application sans se déplacer. C&#8217;est encore mieux lorsque ce genre de fonctionalité est facile à intégrer à son application. C&#8217;est justement le cas pour Flex et en voici la preuve.</p>
<h2>Le principe</h2>
<p>D&#8217;un côté, l&#8217;application AIR et de l&#8217;autre, le serveur sur lequel se trouve la nouvelle version de l&#8217;application AIR ainsi qu&#8217;un fichier <em>update.xml</em> qui décrit cette nouvelle version. Périodiquement, l&#8217;application AIR va vérifier sur le serveur la présence d&#8217;une nouvelle version et dans un tel cas, la télécharge et l&#8217;installe. Ainsi, mettre à jour un parc informatique devient simple et rapide.</p>
<h2>L&#8217;application AIR</h2>
<p>La première chose à faire est d&#8217;importer les librairies nécessaires à la mise à jour automatique :</p>
<pre class="brush: as3;">import air.update.ApplicationUpdaterUI;
import air.update.events.UpdateEvent;</pre>
<p>Ensuite, il vous faut une méthode qui vérifie si la version présente sur le serveur est plus récente que la version actuelle. Cette méthode peut par exemple être appelée dans votre méthode init() (creationComplete=&#8217;init()&#8217;).</p>
<pre class="brush: as3;first-line: 2;">// Création de la variable appUpdater - merci Blindheit
public var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();
public function checkForUpdates():void
{
    appUpdater.addEventListener(UpdateEvent.INITIALIZED, updateCheckNow);
    appUpdater.updateURL = "http://server/update.xml";
    appUpdater.delay = 0.1;
    appUpdater.isCheckForUpdateVisible = false;
    appUpdater.initialize();
}</pre>
<p>Quelques petites explications supplémentaires :</p>
<ul>
<li><em>updateURL</em> est l&#8217;url du fichier update.xml qui se trouve sur le serveur</li>
<li>le <em>delay</em> est l&#8217;interval de temps (en jours) séparant deux vérifications de la version sur le seveur</li>
<li><em>isCheckForUpdateVisible</em> permet d&#8217;activer ou de désactiver la fenêtre qui demande à l&#8217;utilisateur si il veut en effet regarder si une mise à jour existe. Ici, elle est désactivée parce que je la trouve superflue. Il existe également d&#8217;autres options permettant de jouer avec l&#8217;affichage des fenêtres.</li>
<li><em>initialize()</em> active le processus</li>
<li>Enfin, grâce à l<em>&#8216;addEventListener</em>, la méthode <em>updateCheckNow</em> est appelée au retour de <em>initialize</em>. Ceci permet, grâce à la fonction <em>checkNow()</em>, de forcer un appel au serveur lors du lancement initial de l&#8217;application.</li>
</ul>
<pre class="brush: as3;">public function updateCheckNow(event:UpdateEvent):void
{
    appUpdater.checkNow();
}</pre>
<p>Voilà pour l&#8217;application AIR.</p>
<h2>Côté serveur</h2>
<p>Sur le serveur vous devez mettre l&#8217;application AIR et un fichier <em>update.xml</em> qui décrit la nouvelle version de l&#8217;application. Au niveau de l&#8217;application, vous devez mettre à jour le numéro de version qui se trouve dans le fichier nomxxx-app.xml. Ensuite ce numéro de version doit se retrouver dans le fichier <em>update.xml</em> :</p>
<pre class="brush: xml;wrap-lines:false;">&lt;update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"&gt;
    &lt;version&gt;0.2&lt;/version&gt;
    &lt;url&gt;http://server/nomxxx.air&lt;/url&gt;
    &lt;description&gt;
        Nouvelle version 0.2 de nomxxx
    &lt;/description&gt;
&lt;/update&gt;</pre>
<p>Il ne reste plus qu&#8217;à installer votre version 0.1 sur votre ordinateur, à déposer la version 0.2 sur le serveur et lorsque vous lancez la version 0.1, elle ira automatiquement vérifier le fichier update.xml qui se trouve sur le serveur et la mise à jour se fera ensuite automatiquement.</p>
<h4>Remarque :</h4>
<ul>
<li>Vérifier bien que l&#8217;application qui ouvre par défaut vos fichiers AIR est bien la bonne. Dans le cas contraire, la mise à jour plantera au moment de l&#8217;installation de la nouvelle version puisqu&#8217;elle ne pourra pas se lancer automatiquement.</li>
</ul>
<p>Voilà, bon devs !</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/06/16/flex-auto-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Une application AIR sans “window”</title>
		<link>http://blog.netinfluence.com/2009/05/15/une-application-air-sans-window/</link>
		<comments>http://blog.netinfluence.com/2009/05/15/une-application-air-sans-window/#comments</comments>
		<pubDate>Fri, 15 May 2009 09:06:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=41</guid>
		<description><![CDATA[Envie de faire une application AIR sans l&#8217;emprisonner dans une fenêtre dont le style est géré par l&#8217;OS sur lequel tourne votre programme ? Voici quelques simples étapes à suivre pour libérer votre oeuvre. 1- Si votre application s&#8217;appelle &#8220;demo&#8221;, vous devez avoir un fichier qui se nomme : demo-app.xml. Ouvrez ce fichier et faites les modifications suivantes : remplacez &#60;!&#8211; &#60;systemChrome&#62;&#60;/systemChrome&#62; &#8211;&#62; par &#60;systemChrome&#62;none&#60;/systemChrome&#62; selon le look de votre application, il peut être intéressant de rendre le fond transparent. Pour cela, remplacez &#60;!&#8211; &#60;transparent&#62;&#60;/transparent&#62; &#8211;&#62; par &#60;transparent&#62;true&#60;/transparent&#62; 2- Il ne reste plus qu&#8217;à modifier votre fichier demo.mxml en rajoutant dans la balise &#60;mx:WindowedApplication&#62; l&#8217;attribut showFlexChrome=&#8221;false&#8221; &#60;mx:WindowedApplication showFlexChrome=&#8221;false&#8221;&#62; Voilà, c&#8217;est déjà fini. Vous pouvez maintenant laissez exprimer votre esprit artistique [...]]]></description>
			<content:encoded><![CDATA[<p>Envie de faire une application AIR sans l&#8217;emprisonner dans une fenêtre dont le style est géré par l&#8217;OS sur lequel tourne votre programme ? Voici quelques simples étapes à suivre pour libérer votre oeuvre.</p>
<p>1- Si votre application s&#8217;appelle &#8220;demo&#8221;, vous devez avoir un fichier qui se nomme : demo-app.xml. Ouvrez ce fichier et faites les modifications suivantes :</p>
<ul>
<li>remplacez<br />
<strong><em>&lt;!&#8211; &lt;systemChrome&gt;&lt;/systemChrome&gt; &#8211;&gt;</em></strong><br />
par<br />
<strong><em>&lt;systemChrome&gt;none&lt;/systemChrome&gt;</em></strong></li>
<li>selon le look de votre application, il peut être intéressant de rendre le fond transparent. Pour cela, remplacez<br />
<strong><em>&lt;!&#8211; &lt;transparent&gt;&lt;/transparent&gt; &#8211;&gt;</em></strong><br />
par<br />
<strong><em>&lt;transparent&gt;true&lt;/transparent&gt;</em></strong></li>
</ul>
<p>2- Il ne reste plus qu&#8217;à modifier votre fichier demo.mxml en rajoutant dans la balise &lt;mx:WindowedApplication&gt; l&#8217;attribut showFlexChrome=&#8221;false&#8221;</p>
<ul>
<li><strong><em>&lt;mx:WindowedApplication showFlexChrome=&#8221;false&#8221;&gt;</em></strong></li>
</ul>
<p>Voilà, c&#8217;est déjà fini. Vous pouvez maintenant laissez exprimer votre esprit artistique sans barrières <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> </p>
<table border="0" width="100%">
<tbody>
<tr>
<td align="center">Avant</td>
<td align="center">Après</td>
</tr>
<tr>
<td align="center"><img style="margin: 0 1em 1em 0;" title="air avec fenetre, mai 2009" src="/public/julien/windowedair.png" alt="" /></td>
<td align="center"><img style="margin: 0 0 1em 1em;" title="air sans fenetre, mai 2009" src="/public/julien/windowfreeair.png" alt="" /></td>
</tr>
</tbody>
</table>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/05/15/une-application-air-sans-window/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passage au Zend Framework 1.8 et l’autoloader</title>
		<link>http://blog.netinfluence.com/2009/05/04/passage-au-zend-framework-1-8-et-l-autoloader/</link>
		<comments>http://blog.netinfluence.com/2009/05/04/passage-au-zend-framework-1-8-et-l-autoloader/#comments</comments>
		<pubDate>Mon, 04 May 2009 11:33:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=40</guid>
		<description><![CDATA[Si vous avez une application qui tourne parfaitement bien sur la version 1.7.8 du zend framework (ou une version plus ancienne d&#8217;ailleurs) et que vous voulez passer à la version 1.8, ceci pourra vous aider. En effet, vous aller vite remarquer que plus rien ne fonctionne et vous aurez une erreur du genre : Notice: Zend_Loader::Zend_Loader::registerAutoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in /path/Zend/Loader.php on line 207 Pas de panique, c&#8217;est simplement la nouvelle gestion des espaces de noms (namespaces) du Zend Framework qui n&#8217;est plus compatible. La solution présentée ici et que vous trouverez également dans cet article permet de contourner le problème. Si vous deviez refaire une application en 1.8, [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous avez une application qui tourne parfaitement bien sur la version 1.7.8 du zend framework (ou une version plus ancienne d&#8217;ailleurs) et que vous voulez passer à la version 1.8, ceci pourra vous aider. En effet, vous aller vite remarquer que plus rien ne fonctionne et vous aurez une erreur du genre :</p>
<p><strong>Notice</strong>: Zend_Loader::Zend_Loader::registerAutoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in <strong>/path/Zend/Loader.php</strong> on line <strong>207</strong></p>
<p>Pas de panique, c&#8217;est simplement la nouvelle gestion des espaces de noms (namespaces) du Zend Framework qui n&#8217;est plus compatible. La solution présentée ici et que vous trouverez également dans <a href="http://devzone.zend.com/article/4525-Developing-a-Comprehensive-Autoloader">cet article</a> permet de contourner le problème. Si vous deviez refaire une application en 1.8, il serait probablement préférable de passer par <a href="http://framework.zend.com/manual/en/zend.application.html">Zend_Application</a>, <a href="http://framework.zend.com/manual/en/zend.tool.framework.html">Zend_Tool_Framework</a> et <a href="http://framework.zend.com/manual/en/zend.tool.project.html">Zend_Tool_Project</a>.</p>
<p>Pour en revenir à notre cas, vous devez avoir un endroit dans votre code, probablement dans le bootstrap, où vous &#8220;lancer&#8221; l&#8217;autoload :</p>
<pre class="brush: php">require_once "../library/Zend/Loader.php";
Zend_Loader::registerAutoload();</pre>
<p>Il suffit de remplacer ces lignes par les suivantes, et le tour est joué :</p>
<pre class="brush: php">require_once "../library/Zend/Loader/Autoloader.php";
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader-&gt;setFallbackAutoloader(true);</pre>
<p>Amusez-vous bien avec le Zend Framework.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/05/04/passage-au-zend-framework-1-8-et-l-autoloader/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cours iPhone dans son canapé</title>
		<link>http://blog.netinfluence.com/2009/04/21/cours-iphone-dans-son-canape/</link>
		<comments>http://blog.netinfluence.com/2009/04/21/cours-iphone-dans-son-canape/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 09:08:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[care]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iTunes U]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=64</guid>
		<description><![CDATA[L&#8217;iPhone vous emballe et je comprends pourquoi. Mais vous voulez aller plus loin en développant votre propre application et la voir grimper dans la classements de l&#8217;AppStore. Le seul problème, c&#8217;est qu&#8217;il faut apprendre à développer en Objective-C. Voici une solution simple : iTunes U. En effet, iTunes U permet depuis quelques semaines un accès simple à une formation sur le développement sur iPhone. Il s&#8217;agit des cours donnés aux étudiants de Stanford qui ont été enregistrés et &#8220;podcastisés&#8221; sut iTune. C&#8217;est accès est gratuit et l&#8217;enseignement de qualité, c&#8217;est Stanford tout de même&#8230; Le seul pré-requis est d&#8217;avoir un mac avec Xcode et de bonnes bases dans un langage de programmation quelconque, ensuite on s&#8217;installe et on apprend. Le [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;iPhone vous emballe et je comprends pourquoi. Mais vous voulez aller plus loin en développant votre propre application et la voir grimper dans la classements de l&#8217;AppStore. Le seul problème, c&#8217;est qu&#8217;il faut apprendre à développer en Objective-C. Voici une solution simple : <span style="font-weight: bold;">iTunes U</span>.</p>
<p>En effet, iTunes U permet depuis quelques semaines un accès simple à une formation sur le développement sur iPhone. Il s&#8217;agit des cours donnés aux étudiants de Stanford qui ont été enregistrés et &#8220;podcastisés&#8221; sut iTune. C&#8217;est accès est gratuit et l&#8217;enseignement de qualité, c&#8217;est Stanford tout de même&#8230;</p>
<p>Le seul pré-requis est d&#8217;avoir un mac avec Xcode et de bonnes bases dans un langage de programmation quelconque, ensuite on s&#8217;installe et on apprend. Le cours vient avec son site web (slides, exercices, etc).</p>
<p>Bon cours <img src='http://blog.netinfluence.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> </p>
<p><span style="font-weight: bold;">Liens :</span></p>
<p><span style="font-weight: bold;"><span style="font-weight: normal;"><a href="http://itunes.stanford.edu/">http://itunes.stanford.edu/</a><br />
<a href="http://www.stanford.edu/class/cs193p/cgi-bin/index.php">http://www.stanford.edu/class/cs193p/cgi-bin/index.php</a><br />
</span></span></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/04/21/cours-iphone-dans-son-canape/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installez votre propre PHP sur MAC OSX (Leopard)</title>
		<link>http://blog.netinfluence.com/2009/03/19/installez-votre-propre-php-sur-mac-osx-leopard/</link>
		<comments>http://blog.netinfluence.com/2009/03/19/installez-votre-propre-php-sur-mac-osx-leopard/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 08:32:00 +0000</pubDate>
		<dc:creator>julien</dc:creator>
				<category><![CDATA[create]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.netinfluence.ch/?p=39</guid>
		<description><![CDATA[MAC LEOPARD propose une version intégrée de php. Le problème de cette version est qu&#8217;elle ne peut pas être manipulée selon les besoins spécifiques du projet. Il est donc très intéressant de pouvoir utiliser une version personnelle de php et ainsi de pouvoir en faire ce que l&#8217;on veut. Voici les étapes que j&#8217;ai suivi pour avoir ma propre version. SYSTEME : PHP 5.2.9 Mac OSX 10.5.6 LEOPARD 2.4 GHz Intel Core 2 Duo Darwin 9.6.0 TELECHARGEMENT : Téléchargez PHP depuis http://www.php.net/downloads.php Choisir une des deux archives suivantes : Déposez et ouvrez l&#8217;archive où vous voulez. Personnellement, je la conserve dans le répertoire &#8220;Téléchargements&#8221;, mais c&#8217;est un choix comme un autre. CONFIGURE : Si vous avez déjà la version php &#8220;par défaut&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>MAC LEOPARD propose une version intégrée de php. Le problème de cette version est qu&#8217;elle ne peut pas être manipulée selon les besoins spécifiques du projet. Il est donc très intéressant de pouvoir utiliser une version personnelle de php et ainsi de pouvoir en faire ce que l&#8217;on veut. Voici les étapes que j&#8217;ai suivi pour avoir ma propre version.</p>
<h2>SYSTEME :</h2>
<p>PHP 5.2.9<br />
Mac OSX 10.5.6 LEOPARD<br />
2.4 GHz Intel Core 2 Duo<br />
Darwin 9.6.0</p>
<h2>TELECHARGEMENT :</h2>
<ul>
<li>Téléchargez PHP depuis <a href="http://www.php.net/downloads.php">http://www.php.net/downloads.php</a></li>
<li>Choisir une des deux archives suivantes :<br />
<img title="Téléchargement de php5.2.9, mar. 2009" src="/public/julien/download_php.png" alt="" /></li>
<li>Déposez et ouvrez l&#8217;archive où vous voulez.<br />
Personnellement, je la conserve dans le répertoire &#8220;Téléchargements&#8221;, mais c&#8217;est un choix comme un autre.</li>
</ul>
<h2>CONFIGURE :</h2>
<p>Si vous avez déjà la version php &#8220;par défaut&#8221; qui fonctionne, vous pouvez récupérer votre chaîne &#8220;configure&#8221; avec un phpinfo().</p>
<p><img title="Configure d'un php info, mar. 2009" src="/public/julien/php_info_configure.png" alt="" /></p>
<p>La chaîne ci-dessous n&#8217;est qu&#8217;un exemple, il se peut qu&#8217;elle demande quelques modifications pour être cohérente avec votre système. Vous remarquerez le début de la chaîne qui indique que l&#8217;architecture qui sera utilisée est sur 64bits.</p>
<pre class="brush: plain;light: true;">CFLAGS="-arch x86_64" ./configure '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-dependency-tracking' '--with-apxs2=/usr/sbin/apxs' '--with-ldap=/usr' '--with-kerberos=/usr' '--enable-cli' '--with-zlib-dir=/usr' '--enable-trans-sid' '--with-xml' '--enable-exif' '--enable-ftp' '--enable-mbstring' '--enable-mbregex' '--enable-dbx' '--enable-sockets' '--with-iodbc=/usr' '--with-curl=/usr' '--with-config-file-path=/etc' '--sysconfdir=/private/etc' '--with-mysql-sock=/var/mysql' '--with-mysqli=/usr/bin/mysql_config' '--with-mysql=/usr/local/mysql' '--with-openssl' '--with-xmlrpc' '--with-xsl=/usr' '--without-pear'</pre>
<p>Dans le répertoire que vous venez de télécharger, vous trouverez le script configure.<br />
Vous pouvez donc lancez la commande ci-dessus (en ayant fait vos modifications si nécessaires).</p>
<h2>MAKE :</h2>
<p>Tapez ensuite la commande suivante :</p>
<p><span style="font-style: italic; font-weight: bold;">make test </span></p>
<p>Allez boire un café (ou autre chose, ça fonctionne aussi), parce que cette étape est assez longue (5/10 minutes). A la fin de cette étape, vous allez avoir un résumé des tests effectués et un certains nombre d&#8217;entre eux auront échoués (~20). Pas d&#8217;inquiétude, c&#8217;est normal.</p>
<h2>INSTALL :</h2>
<p>Il ne reste plus qu&#8217;à lancer la commande ci-dessous :</p>
<p><span style="font-style: italic; font-weight: bold;">sudo make install </span></p>
<p>et à redémarrer apache et Voilà !</p>
<h2>REMARQUES :</h2>
<ul>
<li>La string configure proposée est minimale, il vous faudra la compléter si vous voulez ajouter certaines options comme gd2 par exemple. Mais vous pouvez maintenant compilez votre php librement comme le demande bon nombre de tutoriaux.</li>
<li>FreeType pose quelques problèmes</li>
<li>Voici un lien intéressant pour ceux qui voudrait ajouter des modules sans les compilés. En effet, ce site propose une liste de modules déjà compilés en 64 bits : <a href="http://www.viames.it/mac-os-x.html">http://www.viames.it/mac-os-x.html</a></li>
<li>Tout ceci est-il bien nécessaire puisque ZendServer simplifie considérablement toutes ces procédures.</li>
</ul>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.netinfluence.com/2009/03/19/installez-votre-propre-php-sur-mac-osx-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

