<?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>Aerilys Blog</title>
	<atom:link href="http://aerilys.fr/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://aerilys.fr/blog</link>
	<description>.NET, mobile, web and cappuccino</description>
	<lastBuildDate>Tue, 14 May 2013 20:43:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Vers Pagespeed et au-delà</title>
		<link>http://aerilys.fr/blog/?p=1293</link>
		<comments>http://aerilys.fr/blog/?p=1293#comments</comments>
		<pubDate>Tue, 14 May 2013 10:40:29 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Pagespeed]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1293</guid>
		<description><![CDATA[Introduction De nos jours, de nombreux développeurs web utilisent Pagespeed pour optimiser leurs applications. Cet outil est facile à utiliser, très clair, et donne de nombreux conseils sur comment améliorer la rapidité de ses pages. Et une fois que les développeurs ont fini de résoudre certains problèmes ainsi détectés, ils affichent fièrement leur score tel [...]]]></description>
				<content:encoded><![CDATA[<h2>Introduction</h2>
<p>De nos jours, de nombreux développeurs web utilisent <i>Pagespeed</i> pour optimiser leurs applications. Cet outil est facile à utiliser, très clair, et donne de nombreux conseils sur comment améliorer la rapidité de ses pages. Et une fois que les développeurs ont fini de résoudre certains problèmes ainsi détectés, ils affichent fièrement leur score tel un trophée prestigieux. </p>
<p><i>Regarde moi maman ! J&#8217;ai un score de 92 sur Pagespeed !</i></p>
<p>Ok mon garçon. C&#8217;est vraiment très bien. Ton site est certainement plus rapide que jamais, aucun doute. Mais peut-être que parfois, tu te demandes s&#8217;il y a autre chose au-delà de Pagespeed. Et bien la réponse est oui ! De nombreuses optimisations sont possibles, des techniques oubliées de certains, mais pas de tous, et qui étaient utilisées avant le règne de l&#8217;outil de Google.</p>
<p><b>Note: </b>Cet article n&#8217;est pas un réquisitoire contre Pagespeed. J&#8217;adore cet outil. J&#8217;explore simplement quelques possibilités pour aller plus loin</p>
<p>&nbsp;</p>
<h2>Auditer votre code</h2>
<p>Chrome developer tools inclut de nombreux onglets, mais certains d&#8217;entre eux sont délaissés par les développeurs. Des fonctionnalités comme la Timeline, le profiling, ou encore les audits, semblent effrayantes. Quoi, vous voulez vraiment que j&#8217;audite mon code ? Et que je fasse du profiling dessus ? Non merci.</p>
<p>En réalité, vous devriez, ces outils sont vraiment puissants. L&#8217;onglet Timeline par exemple, vous permet de visualiser quelle partie de votre application consomment de la mémoire et du temps. Ainsi, vous pouvez savoir précisément quels scripts et quelles ressources ralentissent votre chargement. Monitorer la mémoire est quelque chose de très important, surtout sur mobile où elle est limitée. Vous croyez vraiment que le navigateur a accès à 2Go de mémoire sur un Nexus 4 ?</p>
<p>L&#8217;onglet &#8220;Profile&#8221; lui, permet de monitorer l&#8217;usage de la mémoire et la consommation CPU dans votre application, et tout spécialement par les scripts. Ainsi, vous pouvez voir quelles fonctions sont gourmandes en ressources. Cela vous permet aussi de vérifier que vous n&#8217;avez pas de comportement anormal dans votre code. Cependant, si vous utilisez un framework, vous verrez que la plupart des fonctions consommatrices sont faites par lui. Concernant le profiling CSS, j&#8217;en parlerai dans la prochaine section.</p>
<p>&nbsp;</p>
<p><img class="  alignnone" alt="Audit for Javascript" src="http://i.imgur.com/FwiH5zz.png" width="643" height="378" /></p>
<p>&nbsp;</p>
<p>L&#8217;onglet audit est relativement similaire à ce que Pagespeed fait maintenant: donner des conseils par ordre d&#8217;importance sur comment améliorer votre code (et particulièrement côté serveur comme Pagespeed). Cependant, une partie est consacrée au CSS. Elle vous permet de voir le pourcentage de code CSS non utilisé sur votre page, et quels sont les sélecteurs concernés. Très pratique si vous utilisez des librairies CSS comme Bootstrap.</p>
<p><img class="alignnone" alt="Unused CSS in Google developer tools" src="http://i.imgur.com/kPirIX5.png" width="691" height="177" /></p>
<p>A présent, vous devriez être convaincu que ces outils sont très utiles !</p>
<p><img class="alignnone" alt="LSD is awesome" src="http://cdn.memegenerator.net/instances/250x250/37824880.jpg" width="250" height="250" /></p>
<p>Vous voulez aller plus loin ? Voilà une vidéo de Google sur ses developer tools : </p>
<p><a href="http://www.youtube.com/watch?v=BaneWEqNcpE">http://www.youtube.com/watch?v=BaneWEqNcpE</a></p>
<p>&nbsp;</p>
<h2>Optimiser votre CSS</h2>
<p>Si vous avez profiler votre CSS, vous avez sûrement remarqué que certaines parties de votre CSS ne sont pas otpmisées. C&#8217;est généralement dû au fait que vous utilisez des règles CSS trop génériques, et donc le navigateur essaye de les appliquer à des endroits où ces règles ne sont pas utilisées.</p>
<p>Par exemple, avec le code suivant :</p>
<p><b>HTML</b></p>
<pre class="html" name="code"><div class=”myAwesomeDiv”><div id=”mySuperDiv”><h3>My perfect title</h3></div></div></pre>
<p><b>CSS</b></p>
<pre class="css" name="code">h3{font-size: 3em;}</pre>
<p>Même si vous n&#8217;avez qu&#8217;un seul h3 dans votre CSS, le navigateur va essayer de trouver d&#8217;autres h3 pour leur appliquer cette règle. Mais vous, développeur, vous pouvez l&#8217;aider ! Dites-lui simplement que cette règle ne s&#8217;applique qu&#8217;à ce h3 en particulier (si c&#8217;est le cas bien entendu).</p>
<pre class="css" name="code">#myAwesomeDiv #mySuperDiv h3{font-size: 3em;}</pre>
<h2>De l&#8217;importance du chat ou la légende des cookies</h2>
<p>Si vous êtes un fan de Pagespeed, votre CSS et votre Javascript sont probablement déjà minifiés. Très utile, mais il y a mieux si vous utilisez plusieurs CSS ou JS dans votre page. Par exemple, si vous avez 3 feuilles de style, cela requiert 3 requêtes HTTP, probablement sur le même domaine que vos scripts et vos images. <i>Malheureusement</i>, les navigateur n&#8217;autorisent qu&#8217;un nombre limité de requêtes simultanées. Ce nombre est généralement de 6, mais peut descendre jusqu&#8217;à 2 sur certains vieux navigateurs. Vous pouvez voir ce nombre sur <a href="http://www.browserscope.org/?category=network">Browserscope</a>.</p>
<p>Donc, avec 3 CSS, 4 scripts et 12 images, cela peut prendre beaucoup de temps. Bien entendu, avec une connexion rapide, ce n&#8217;est pas gênant me dites-vous. Mais nous vivons dans un monde mobile. Les requêtes HTTP consomment de la batterie et des ressources. Rappelez-vous lorsque la batterie de votre smartphone est presque vide alors que vous l&#8217;avez rechargé le matin même. Moins de requêtes HTTP signifie plus de batterie, et des chargements plus rapides. Pensez-y.</p>
<p>En fait, c&#8217;est un peu le problème du gros cookie et des petits cookies. Vaut-il mieux charger peu de grosses données, ou plein de petites ? Et bien la réponse est : le gros cookie est <b>généralement</b> plus optimisé. Reto Meier en parle très bien dans une de ses conférences sur Android lors de cette <a href="http://www.youtube.com/watch?v=PwC1OlJo5VM">session Google IO</a></p>
<p>Vous êtes convaincu à présent ? Et bien la solution est très simple: regrouper vos ressources dans un seul fichier. Un CSS, un fichier JS. Et si possible, faites de même pour vos images avec des sprites.</p>
<p>Vous pouvez utiliser des outils comme <a href="https://github.com/GoalSmashers/clean-css">CleanCSS</a> ou <a href="https://github.com/mishoo/UglifyJS/">uglifyJS</a> avec la ligne de commande <i>cat</i> (disponible dans le Git Bash si vous êtes sur Windows) pour regrouper ET minifier vos fichiers en même temps.</p>
<p>&nbsp;</p>
<h2>Ecrivez du code de meilleure qualité</h2>
<p>Même avec les meilleurs optimisations côté serveur de la Galaxie, si votre code est mauvais, tout ce travail fait ne sert à rien. Si vous utilisez un mobile sur du Wi-Fi par exemple, récupérer les ressources depuis le serveur pourra être rapide, mais le rendu de la page est une étape critique et peut être très longue. Peut-être trop longue. Et voilà que votre utilisateur est déjà sur un site concurrent.<br />
Vous ne voulez pas que cela arrive bien sûr. Alors allez voir quelques guidelines de différentes entreprises. Vous y trouverez de précieux conseils.</p>
<p><b>CSS de Github</b>: <a href="https://github.com/styleguide/css">https://github.com/styleguide/css</a></p>
<p><strong>JS de Github</strong>: <a href="https://github.com/styleguide/javascript">https://github.com/styleguide/javascript</a></p>
<p><strong>CSS de Blackberry</strong>: <a href="http://developer.blackberry.com/html5/documentation/css_best_practices.html#bpa1334600390421">http://developer.blackberry.com/html5/documentation/css_best_practices.html</a></p>
<p><strong>JS de Blackberry</strong>: <a href="http://developer.blackberry.com/html5/documentation/javascript_best_practices.html">http://developer.blackberry.com/html5/documentation/javascript_best_practices.html</a></p>
<p><strong>CSS de Google</strong>: <a href="http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml">http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml</a></p>
<p><strong>JS de Google</strong>: <a href="http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml">http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml</a></p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>Cet article n&#8217;est pas un guide complet sur l&#8217;optimisation de pages web, mais donne malgré tout quelques pistes en complément de Pagespeed, plus axé sur le côté client. N&#8217;hésitez pas à regarder les guidelines ci-dessus, et à chercher d&#8217;autres conseils sur Google, il y a de nombreuses astuces non présentées ici, et qui peuvent accélerer plus encore votre site !</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1293</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go faster than Pagespeed</title>
		<link>http://aerilys.fr/blog/?p=1273</link>
		<comments>http://aerilys.fr/blog/?p=1273#comments</comments>
		<pubDate>Tue, 14 May 2013 10:12:01 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Pagespeed]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1273</guid>
		<description><![CDATA[Introduction A lot of web developers nowadays heavily use the Google tool Pagespeed to optimize their applications. It’s easy to use, very clear, and gives a lot of advices on how to speed up your web page.  Then, when developers have finished resolving some pointed issues, they proudly expose their score like a trophy. Look [...]]]></description>
				<content:encoded><![CDATA[<h2>Introduction</h2>
<p>A lot of web developers nowadays heavily use the Google tool <i>Pagespeed</i> to optimize their applications. It’s easy to use, very clear, and gives a lot of advices on how to speed up your web page.  Then, when developers have finished resolving some pointed issues, they proudly expose their score like a trophy.</p>
<p><i>Look at me mum, I have a score of 95 on Pagespeed.</i></p>
<p>Ok boy, that’s really good. Your website is certainly faster than ever, no doubt about that. But maybe, sometimes, you’re wondering if there is something out there, beyond Pagespeed.  And the answer is yes! You can do a lot of things, sometimes done by web developers before the reign of the Google tool.</p>
<p><b>Note: </b>it’s not an article against Pagespeed. It’s a very useful tool. But if you want to go further, keep reading.</p>
<p>&nbsp;</p>
<h2>Audit your code</h2>
<p>Chrome developer tools include a lot of tabs, but some of them are not often used by web developers. Things like “Timeline”, “Profiles” and “Audits” sound scary. What, you want me to audit my code? And run a profiling tool? No thanks.</p>
<p>Actually, you should. These tools are really powerful. The timeline tab helps you to visualize which part of your code are memory and time consuming. Thus, you can see exactly which script or resource is slowing the page loading. Monitoring memory usage is also important, especially on mobile, where it is limited. Your Nexus device has maybe 2GB of RAM, but apps cannot access that much.</p>
<p>With the profile tab, you can monitor the CPU and memory usage of your app, especially for scripts. Hence, it’s possible to see exactly which function of your Javascript is taking too much time. For CSS, you can see which selectors are consuming resources (see <i>Optimize your CSS</i>). It’s important to check that you haven’t abnormal behaviors on your code. However, if you are using a framework, you will probably see that much of called functions are made by them.</p>
<p>&nbsp;</p>
<p><img class="  alignnone" alt="Audit for Javascript" src="http://i.imgur.com/FwiH5zz.png" width="643" height="378" /></p>
<p>&nbsp;</p>
<p>The Audit tab is quite similar to what Pagespeed does now: giving prioritized advices on how you can improve your code (especially on server-side, like Pagespeed). However, there is a part on CSS usage. You can exactly see which percentage of your CSS is actually not used. It’s quite useful if you are using CSS library like Bootstrap.</p>
<p><img class="alignnone" alt="Unused CSS in Google developer tools" src="http://i.imgur.com/kPirIX5.png" width="691" height="177" /></p>
<p>If you have now used these tools, you should see how useful they are!</p>
<p><img class="alignnone" alt="LSD is awesome" src="http://cdn.memegenerator.net/instances/250x250/37824880.jpg" width="250" height="250" /></p>
<p>And if you want to go further, here is a Youtube video on Chrome developer tools:</p>
<p><a href="http://www.youtube.com/watch?v=BaneWEqNcpE">http://www.youtube.com/watch?v=BaneWEqNcpE</a></p>
<p>&nbsp;</p>
<h2>Optimize your CSS</h2>
<p>If you have used profiling on your CSS, you should have notice that some parts of your CSS are probably not optimized. It’s generally because you have too generic CSS rules, and then your browser try to apply them, on places where they are not used.</p>
<p>For example, if you have the following code:</p>
<p><b>HTML</b></p>
<pre class="html" name="code"><div class=”myAwesomeDiv”><div id=”mySuperDiv”><h3>My perfect title</h3></div></div></pre>
<p><b>CSS</b></p>
<pre class="css" name="code">h3{font-size: 3em;}</pre>
<p>Even if you have a single h3 in your CSS, the browser will try to find other h3 to apply them this rule. But you, the developer, you can help the browser and say this rule can be applied only on this h3</p>
<pre class="css" name="code">#myAwesomeDiv #mySuperDiv h3{font-size: 3em;}</pre>
<p>Moreover, it’s probably better for your future code. What if you want to add other h3 but with a different style? In conclusion, avoid too generic CSS rules, and don’t forget to profile your CSS.</p>
<h2>Cat your files or the legend of cookies</h2>
<p>If you are a Pagespeed fan, your CSS code is probably already minified. Pretty useful, but it’s not totally optimized if you are using several CSS files. For examples, if you have three CSS stylesheets, it requires 3 HTTP requests, probably on the same domain that your scripts and images. Sadly, browsers authorize a very limited number of resources to be loaded on the same domain at the same time. This number is generally of 6, but can be of 2 on some old browsers. You can see this number on <a href="http://www.browserscope.org/?category=network">Browserscope</a>.</p>
<p>So if you have 3 CSS files, 4 scripts and 12 images, it can take a lot of time. Okay, with a fast connection, that’s not a big deal. But we live in a mobile world. HTTP requests consume battery and resources. Remember when your smartphone battery is almost empty at the end of day when you have recharged it in the morning. Less HTTP requests equal more battery. Think about it.</p>
<p>This problem can be easily summarized by cookies. A big cookie is <b>generally</b> better than a lot of little cookies. You can see more details on this <a href="http://www.youtube.com/watch?v=PwC1OlJo5VM">Google IO session</a></p>
<p>You are convinced? Right, the solution is quite simple: regroup your resources in one file: one for CSS, one for Javascript. And if you can, do the same for images with sprites.</p>
<p>You can use tools like <a href="https://github.com/GoalSmashers/clean-css">CleanCSS</a> or <a href="https://github.com/mishoo/UglifyJS/">uglifyJS</a> with the command line <i>cat</i> (available on Git bash if you are on Windows) to regroup AND minify your files at the same time.</p>
<p>&nbsp;</p>
<h2>Write better code!</h2>
<p>Even with the best server-side optimization in the Galaxy, if your code is bad, all the work done, especially with Pagespeed worth nothing.  If you are using a phone on a Wi-Fi network for example, getting resources from the network will be faster, but rendering the web page will be a critical part, and can take a lot of time. Maybe too much, so the user is already gone on a faster website. So always remember to always care about it. You can check these guidelines from various companies:</p>
<p><b>CSS from Github</b>: <a href="https://github.com/styleguide/css">https://github.com/styleguide/css</a></p>
<p><strong>JS from Github</strong>: <a href="https://github.com/styleguide/javascript">https://github.com/styleguide/javascript</a></p>
<p><strong>CSS from Blackberry</strong>: <a href="http://developer.blackberry.com/html5/documentation/css_best_practices.html#bpa1334600390421">http://developer.blackberry.com/html5/documentation/css_best_practices.html</a></p>
<p><strong>JS from Blackberry</strong>: <a href="http://developer.blackberry.com/html5/documentation/javascript_best_practices.html">http://developer.blackberry.com/html5/documentation/javascript_best_practices.html</a></p>
<p><strong>CSS from Google</strong>: <a href="http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml">http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml</a></p>
<p><strong>JS from Google</strong>: <a href="http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml">http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml</a></p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>This article is not a complete guide on web page optimization, but it’s a good complement to Pagespeed, and it is more focused on client-side. Feel free to check for guidelines and optimization advices on Google, there are a lot of tips not presented here, and which can speed up even more your web app!</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1273</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Devenez un magicien du JSON avec Gson</title>
		<link>http://aerilys.fr/blog/?p=1261</link>
		<comments>http://aerilys.fr/blog/?p=1261#comments</comments>
		<pubDate>Mon, 08 Apr 2013 10:12:27 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[Gson]]></category>
		<category><![CDATA[JSON]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1261</guid>
		<description><![CDATA[Beaucoup de développeurs débutants sur Android se demandent comment stocker leurs données dans leur application. Par exemple, si je souhaite afficher une liste de gâteaux à mes utilisateurs, il faut bien stocker ces données quelque part. Une manière simple et efficace de faire cela est d&#8217;utiliser du JSON. Android inclut une API pour travailler avec [...]]]></description>
				<content:encoded><![CDATA[<p>Beaucoup de développeurs débutants sur Android se demandent comment stocker leurs données dans leur application. Par exemple, si je souhaite afficher une liste de gâteaux à mes utilisateurs, il faut bien stocker ces données quelque part. Une manière simple et efficace de faire cela est d&#8217;utiliser du JSON.</p>
<p>Android inclut une API pour travailler avec du JSON. Néanmoins, Google a créé une librarie bien plus puissant appelée Gson. Cet article va vous expliquer comment serialiser et déserialiser des données JSON. La librairie est disponible sur <a href="https://code.google.com/p/google-gson/">Google code</a></p>
<p>Si vous ne savez pas ce qu&#8217;est JSON, allez voir sur <a href="http://en.wikipedia.org/wiki/JSON">Wikipedia</a>. Cela va changer votre vie !</p>
<p>&nbsp;</p>
<h1>Récupérer votre fichier JSON</h1>
<p>Il y a plusieurs manières de récupérer vos données. Si elles ne vont que peu ou pas changer, vous pouvez les stocker directement dans le dossier <i>assets</i> de votre application. De cette manière, le fichier sera packagé dans l&#8217;app, et pourra être lu très rapidement.</p>
<p>Si vous voulez utiliser un fichier local, vous devez utiliser un <i>InputStream</i> pour lire le fichier, et en extraire une <i>String</i> qui sera utilisée par Gson.</p>
<pre name="code" class="java">
InputStream is = this.getAssets().open("cakes.json");

int ch;
StringBuffer str = new StringBuffer();

while ((ch = is.read()) != -1)
	str.append((char) ch);

String result = str.toString();
</pre>
<p>Une autre solution est de récupérer le fichier depuis un serveur distant. Dans ce cas, vous devrez utiliser un traitement asynchrone, ce qui n&#8217;est pas le sujet de cet article. Si vous souhaitez utiliser cette solution, je vous suggère d&#8217;aller voir la documentation de <a href="http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html">DefaultHttpClient</a> et de<a href="http://developer.android.com/reference/android/os/AsyncTask.html">AsyncTask</a><br />
Google propose également un <a href="http://developer.android.com/training/basics/network-ops/connecting.html">article</a> sur le sujet.</p>
<p>&nbsp;</p>
<h1>Déserialiser les données</h1>
<p>Une fois que vous avez vos données sous forme de <i>String</i>, il est temps d&#8217;utiliser la magie de Gson.</p>
<p>D&#8217;abord, vous devez créer une classe qui correspond à vos données en JSON.</p>
<p>Par exemple, si mon fichier JSON est le suivant:</p>
<pre name="code" class="json">
[
    {
        "id": 0,
        "name": "Cupcake"
    },
    {
        "id": 1,
        "name": "Muffin"
    },
    {
        "id": 2,
        "name": "Cookie"
    }
]
</pre>
<p>Alors la classe correspondante sera:</p>
<pre name="code" class="java">
public class Cake
{
	public int id;
	public String name;
}
</pre>
<p>(Si vous criez à l&#8217;hérésie en voyant mes attributs publiques, je vous suggère d&#8217;aller faire un tour sur cet <a href="http://developer.android.com/training/articles/perf-tips.html">article</a>)</p>
<p>Une fois le modèle prêt, nous pouvons en créer une <i>List</i></p>
<pre name="code" class="java">List<Cake> listCakes;</pre>
<p>Vous êtes prêt à utiliser la magie Gson ? C&#8217;est parti !</p>
<pre name="code" class="java">
Gson gson = new Gson();
Type listType = new TypeToken<List<Cake>>()
{
}.getType();
listCakes = gson.fromJson(result, listType);
</pre>
<p>Et oui, c&#8217;est tout ! Vous avez juste à créer un objet <i>Gson</i>, un object <i>Type</i>  (<i>java.lang.reflect.Type</i>), et utiliser la méthode <i>fromJson</i>. Facile non ?</p>
<p>Félicitations, vous êtes maintenant un magicien du JSON ! Cette méthode est vraiment très simple, et très rapide à faire. Vous n&#8217;êtes pas obligé de l&#8217;utiliser dans un background thread. Cependant, je vous recommande de le faire malgré tout. Cela ne pourra jamais être un mal pour l&#8217;expérience utilisateur.</p>
<h1>Devenez un archimage</h1>
<p>Un dernier conseil de magicien pour vous. Maintenant que vous savez déserialiser des donnés, vous avez peut-être envie de les sérialiser ? C&#8217;est encore plus facile ! Tout ce que vous avez à faire est d&#8217;appeler la méthode <i>toJson</i> d&#8217;un objet <i>Gson</i>, avec votre liste de données en paramètre. Et c&#8217;est tout !</p>
<p>Cet article n&#8217;est qu&#8217;une rapide introduction à Gson. Il y a encore bien plus à découvrir, et je vous recommande de lire la documentation sur le site officiel. Mais pour l&#8217;instant, vous savez manipuler facilement vos données JSON. Rappelez-vous cependant, de grands pouvoirs impliquent de grandes responsabilités.</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1261</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to become a JSON wizard with Gson</title>
		<link>http://aerilys.fr/blog/?p=1251</link>
		<comments>http://aerilys.fr/blog/?p=1251#comments</comments>
		<pubDate>Mon, 08 Apr 2013 09:54:11 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[Gson]]></category>
		<category><![CDATA[JSON]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1251</guid>
		<description><![CDATA[A lot of beginners on Android development ask the same question: how to store data for your application. For example, if you want to display a list of cakes to your users, you have to store somewhere these data. An easy way to do it is to work with JSON data. Android includes a very [...]]]></description>
				<content:encoded><![CDATA[<p>A lot of beginners on Android development ask the same question: how to store data for your application. For example, if you want to display a list of cakes to your users, you have to store somewhere these data. An easy way to do it is to work with JSON data.</p>
<p>Android includes a very useful API to work with JSON. However, Google has released a much more powerful library called Gson. This article will explain how to serialize and unserialize data from a JSON file. You can get the library on <a href="https://code.google.com/p/google-gson/">Google code</a></p>
<p>If you have never heard of JSON, check it out on <a href="http://en.wikipedia.org/wiki/JSON">Wikipedia</a>. It will change your life!</p>
<p>&nbsp;</p>
<h1>Get your JSON file</h1>
<p>There are several ways to get your JSON file. If data you want are unlikely to change, you can store your file directly in your application <i>assets</i> folder. This way, the file is packaged within your app, and it can be accessed even if you are offline for example. It’s also very fast to load.</p>
<p>If you want to load a local file, you have to use an <i>InputStream</i> to read the file and extract a String, which can be used by Gson.</p>
<pre name="code" class="java">
InputStream is = this.getAssets().open("cakes.json");

int ch;
StringBuffer str = new StringBuffer();

while ((ch = is.read()) != -1)
	str.append((char) ch);

String result = str.toString();
</pre>
<p>Another solution is to get the file from a remote server. In this case, you have to retrieve data using an asynchronous request, which is out of the scope of this article. If it’s the solution you want, you can check <a href="http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html">DefaultHttpClient</a> with <a href="http://developer.android.com/reference/android/os/AsyncTask.html">AsyncTask</a>. Google also proposes a <a href="http://developer.android.com/training/basics/network-ops/connecting.html">tutorial</a> about requesting asynchronously data.</p>
<p>&nbsp;</p>
<h1>Unserialize data</h1>
<p>Once you have your JSON data as a String, you can use the magic of Gson.</p>
<p>First of all, you have to create a <i>class</i>, which has attributes corresponding to your data.</p>
<p>For example, if my JSON file is the following:</p>
<pre name="code" class="json">
[
    {
        "id": 0,
        "name": "Cupcake"
    },
    {
        "id": 1,
        "name": "Muffin"
    },
    {
        "id": 2,
        "name": "Cookie"
    }
]
</pre>
<p>Your model class should look like this:</p>
<pre name="code" class="java">
public class Cake
{
	public int id;
	public String name;
}
</pre>
<p>(If you’re wondering why I use public attribute without getter/setter, check out <a href="http://developer.android.com/training/articles/perf-tips.html">this post</a> on Android performance)</p>
<p>Once you have your model ready, you can create a <i>List</i> of them.</p>
<pre name="code" class="java">List<Cake> listCakes;</pre>
<p>Okay, you are now ready to use the magic powers of Gson.</p>
<pre name="code" class="java">
Gson gson = new Gson();
Type listType = new TypeToken<List<Cake>>()
{
}.getType();
listCakes = gson.fromJson(result, listType);
</pre>
<p>And… That’s all! Yes! You just create a <i>Gson</i> object, a <i>Type</i> object (<i>java.lang.reflect.Type</i>), and use a method.</p>
<p>Congratulations, you are now a JSON wizard! Easy right? And very fast! You don’t have to do it in background thread, however, I recommend you to do it anyway. It will be always better for the user experience, even with small JSON files.</p>
<p>&nbsp;</p>
<h1>How to become an Archwizard</h1>
<p>One last tip for you. You know how to deserialize data. And what if you want to serialize it? It’s even easier! Just call the method <i>toJson</i> of a <i>Gson</i> object, with your list as parameter. And that’s all!</p>
<p>This article is a quick introduction to Gson. There is much more to know about it, and I recommend you to read some documentation on the official website. But for now, you know how to manipulate data with JSON. Just remember, with great powers come great responsibilities.</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1251</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Angular.js : ajouter les évènements de clavier et de touch</title>
		<link>http://aerilys.fr/blog/?p=1236</link>
		<comments>http://aerilys.fr/blog/?p=1236#comments</comments>
		<pubDate>Fri, 08 Mar 2013 11:57:17 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[Angular.js]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1236</guid>
		<description><![CDATA[Angular.js est un excellent framework web, inculant de nombreuses fonctionnalités avancées et très utiles. Néanmoins, il possède un système de gestion des évènements qui empêche le développeur d&#8217;utiliser directement des attributs comme onclick ou keydown (en réalité vous pouvez essayer, mais il y a de fortes chances que vous ayez de graves problèmes de binding). [...]]]></description>
				<content:encoded><![CDATA[<p>Angular.js est un excellent framework web, inculant de nombreuses fonctionnalités avancées et très utiles. Néanmoins, il possède un système de gestion des évènements qui empêche le développeur d&#8217;utiliser directement des attributs comme <i>onclick</i> ou <i>keydown</i> (en réalité vous pouvez essayer, mais il y a de fortes chances que vous ayez de graves problèmes de binding). Le problème étant : Angular.js ne gère pas nativement les événements de clavier et de touch.</p>
<p>Certains plugins permettent d&#8217;ajouter facilement cette fonctionnalité, le plus connu étant AngularUI (<a href="http://angular-ui.github.com/">http://angular-ui.github.com/</a>). Cependant, si vous ne voulez pas vous encombrer d&#8217;un plugin, il est très simple d&#8217;ajouter vos propres événements.</p>
<p>Tout ce que vous avez à faire est de trouver dans Angular la ligne où tous les événements sont bindés, et ajouter ceux que vous voulez utiliser (en l’occurrence, keydown, ou touchstart par exemple). Pour trouver cette ligne, faites une recherche sur un événement comme <i>dblclick</i> (évitez <i>click</i>, il il est utilisé dans d&#8217;autres endroits du code).<br />
Vous devriez trouver une ligne comme </p>
<pre name="code" class="js">var ngEventDirectives = {};
forEach(
'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave'.split(' ')</pre>
<p>Vous n&#8217;avez plus qu&#8217;à ajouter les événements que vous voulez à la chaine, séparés par un espace, comme ceci: </p>
<pre class="js" name="code">'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup touchstart touchend'</pre>
<p>Cela va créer une directive Angular, utilisable dans votre html, comme n&#8217;importe quel autre évènement géré par Angular. Vous pouvez par exemple utiliser le code suivant pour gérer un <i>keydown</i></p>
<pre name="code" class="html"><div ng-keydown="handleKeyboard()"></div></pre>
<p>J&#8217;espère que cela sera utile à certains.</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1236</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking Angular.js: how to add keyboard and touch events</title>
		<link>http://aerilys.fr/blog/?p=1218</link>
		<comments>http://aerilys.fr/blog/?p=1218#comments</comments>
		<pubDate>Fri, 08 Mar 2013 11:31:05 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[Angular.js]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1218</guid>
		<description><![CDATA[Angular.js is a very good web framework, with a lot of cool features. However, it has a particular event handler, which prevent you to use normal Javascript events such as onclick and keydown (actually you can try to use them, but it causes a lot of binding problems). The problem is: Angular.js doesn&#8217;t handle keyboard [...]]]></description>
				<content:encoded><![CDATA[<p>Angular.js is a very good web framework, with a lot of cool features. However, it has a particular event handler, which prevent you to use normal Javascript events such as <i>onclick</i> and <i>keydown</i> (actually you can try to use them, but it causes a lot of binding problems). The problem is: Angular.js doesn&#8217;t handle keyboard and touch events.</p>
<p>There are some plugins on the Internet to add this functionality. The most important one is AngularUI (<a href="http://angular-ui.github.com/">http://angular-ui.github.com/</a>). However, if you don’t want to use a plugin, it’s very simple to add this feature to angular.js</p>
<p>All you have to do is find, in the angular Javascript file, the line where all events are binded, and add the ones you want to use. To do that, search for an event like <i>dblclick</i> (avoid <i>click</i>, since it’s used in other parts of the code).</p>
<p>You will find something like that:</p>
<pre name="code" class="js">var ngEventDirectives = {};
forEach(
'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave'.split(' ')</pre>
<p>Then, you just have to add the events you want in the string, separated by a space, like that:</p>
<pre class="js" name="code">'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup touchstart touchend'</pre>
<p>It will create a <i>ng</i> directive, usable in your html, and handling the event like the other ones.</p>
<p>Thus, for <i>keydown </i>event, you can use</p>
<pre name="code" class="html"><div ng-keydown="handleKeyboard()"></div></pre>
<p>I hope it will help some of you.</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1218</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emuler vos smartphones et tablettes sur Google Chrome</title>
		<link>http://aerilys.fr/blog/?p=1214</link>
		<comments>http://aerilys.fr/blog/?p=1214#comments</comments>
		<pubDate>Fri, 01 Mar 2013 22:41:36 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1214</guid>
		<description><![CDATA[Vous ne le savez peut-être pas, mais Google Chrome intègre dans ses outils de développement de quoi simuler un iPad ou une Galaxy Nexus 10 par exemple. Tout ce que vous avez à faire est d&#8217;aller dans les paramètres des dev tools. Vous aurez alors un onglet appelé &#8220;Overrides&#8221;, qui permet de choisir un User [...]]]></description>
				<content:encoded><![CDATA[<p>Vous ne le savez peut-être pas, mais Google Chrome intègre dans ses outils de développement de quoi simuler un iPad ou une Galaxy Nexus 10 par exemple.</p>
<p>Tout ce que vous avez à faire est d&#8217;aller dans les paramètres des dev tools.</p>
<p><img alt="Settings in Chrome dev tools" src="http://imgur.com/ykVxHU8.jpg" width="500" height="360" /></p>
<p>Vous aurez alors un onglet appelé &#8220;Overrides&#8221;, qui permet de choisir un User Agent.</p>
<p><img alt="User Agent emulation" src="http://imgur.com/SEgDBQz.jpg" width="506" height="116" /></p>
<p>Vous pouvez également spécifier un User Agent personnalisé (pratique pour émuler des plateformes récentes, comme Firefox OS).</p>
<p>Vous pouvez également cocher la case &#8220;Device Metrics&#8221;, et votre fenêtre prendra la taille du device sélectionné !</p>
<p><img alt="Device metrics Emulation" src="http://imgur.com/DLoGmvF.jpg" width="522" height="226" /></p>
<p>Il est possible que vous ayez à actualiser votre page pour prendre en compte les changements.</p>
<p>Dernière astuce : cette fenêtre de paramètre permet également de simuler les évènements liés au touch.</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1214</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Emulate devices on Google Chrome</title>
		<link>http://aerilys.fr/blog/?p=1210</link>
		<comments>http://aerilys.fr/blog/?p=1210#comments</comments>
		<pubDate>Fri, 01 Mar 2013 22:30:48 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1210</guid>
		<description><![CDATA[You might not know that Google Chrome dev tools integrates a tool to emulate predefined user-agents and form-factors. Thus, you can easily simulate a visit from an iPad or a Galaxy Nexus 10. All you have to do is to go in the dev tools settings: Then, you have a tab called Overrides, which allow [...]]]></description>
				<content:encoded><![CDATA[<p>You might not know that Google Chrome dev tools integrates a tool to emulate predefined user-agents and form-factors.</p>
<p>Thus, you can easily simulate a visit from an iPad or a Galaxy Nexus 10.</p>
<p>All you have to do is to go in the dev tools settings:</p>
<p><img class="alignnone" alt="Settings in Chrome dev tools" src="http://imgur.com/ykVxHU8.jpg" width="500" height="360" /></p>
<p>Then, you have a tab called Overrides, which allow you to choose the user agent.</p>
<p><img class="alignnone" alt="User Agent emulation" src="http://imgur.com/SEgDBQz.jpg" width="506" height="116" /></p>
<p>You can of course specify your own custom user agent (useful to emulate new OS like Firefox OS for example).</p>
<p>You can also check the <i>Device Metrics</i> option, and then, you window will adapt with chosen device resolution!</p>
<p><img class="alignnone" alt="Device metrics Emulation" src="http://imgur.com/DLoGmvF.jpg" width="522" height="226" /></p>
<p>You may have to refresh the page to apply all the changings.</p>
<p>Final tip: this window allows you to enable the touch emulation. Useful if you want to simulate touch!</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1210</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone VS Android : 3ème manche</title>
		<link>http://aerilys.fr/blog/?p=1170</link>
		<comments>http://aerilys.fr/blog/?p=1170#comments</comments>
		<pubDate>Fri, 01 Feb 2013 11:17:39 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Phone]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1170</guid>
		<description><![CDATA[Introduction 2013. Android est toujours là. Windows Phone aussi. Et les développeurs sont toujours là pour défendre leur plateforme favorite ! Il était donc normal d’écrire un 3ème article sur ces deux systèmes, du point de vue du développeur. Et en un an, il y a eu de nombreuses nouveautés ! Note : n’ayant pas Windows 8 sur [...]]]></description>
				<content:encoded><![CDATA[<h1><span style="color: #3366ff;">Introduction</span></h1>
<p>2013. Android est toujours là. Windows Phone aussi. Et les développeurs sont toujours là pour défendre leur plateforme favorite ! Il était donc normal d’écrire un 3<sup>ème</sup> article sur ces deux systèmes, du point de vue du développeur. Et en un an, il y a eu de nombreuses nouveautés !</p>
<p><i>Note : n’ayant pas Windows 8 sur mon ordinateur, et ne pouvant donc pas développer pour Windows Phone 8, j’ai demandé à Florian Rousselet de coécrire cet article. Si ça parle de WP, c’est donc lui qui tient la plume. Allez le spammer sur <a href="https://twitter.com/Flo_Rousselet" target="_blank">Twitter </a>ou sur son <a href="http://blog.florian-rousselet.fr/" target="_blank">blog</a>, ça lui fera plaisir !</i></p>
<p>&nbsp;</p>
<p><img class="size-medium wp-image-297 aligncenter" alt="windows-phone-7" src="http://aerilys.fr/blog/wp-content/uploads/2010/07/windows-phone-7-series-650x357-300x164.png" width="300" height="164" /></p>
<h1></h1>
<h1><span style="color: #3366ff;">One Year After</span></h1>
<p>2012 a été une année plutôt riche pour Android, notamment au travers de deux choses. La première est évidemment une nouvelle version (ou plutôt deux) du système : Jelly Bean, estampillé 4.<br />
La seconde nouveauté est l’extension de la gamme Nexus, qui est désormais dotée de trois appareils : le Nexus 4, remplaçant du Galaxy Nexus, la Nexus 7 (une tablette de 7 pouces) et la Nexus 10 (équivalent en 10 pouces). Désormais, les développeurs ont des appareils de référence pour tous les formats majeurs 4.1 à sa sortie en Juin, puis 4.2 lors d’une mise à jour en Novembre. Bien que les nouveautés apportées ne soient pas réellement majeures, elles apportent clairement des ajouts bienvenus, prouvant qu’Android commence à atteindre une certaine maturité.</p>
<p>En une année, le monde Microsoft  a aussi été marqué par plusieurs évènements majeurs. Le nouveau système d’exploitation Windows revient à la fin de l’été en version 8 avec l’intégration de l’interface Modern UI pour PC et Tablettes.</p>
<p>Seconde phase, quelques jours après, Microsoft nous propose Windows Phone 8. D’abord très controversée, cette nouvelle version n’étant pas disponible pour les téléphones de première génération, Windows Phone 8 frappe un grand coup en surprenant par des ventes 4 fois supérieures à celles de Windows phone 7 à la même période. La plupart des distributeurs sont en effet en rupture des téléphones phares à savoir le Nokia Lumia 920 et HTC 8X.</p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">Les outils</span></h1>
<p>En un an, de très nombreuses améliorations ont été faites au niveau des outils pour Android. Les versions 17 à 21 d’ADT sont sorties, avec à chaque fois des fonctionnalités vraiment intéressantes pour nous autres développeurs. On notera des améliorations de Lint, de nouveaux émulateurs, et de très grosses améliorations au niveau de l’éditeur d’interface. A présent, vous pouvez par exemple créer directement des fichiers de layout pour une plateforme spécifique, directement depuis le designer.</p>
<div class="wp-caption aligncenter" style="width: 537px"><img class=" " alt="Android - Create new" src="http://imgur.com/tPXvlI3.jpg" width="527" height="307" /><p class="wp-caption-text">Android &#8211; Create new</p></div>
<p>&nbsp;</p>
<p>Autre fonctionnalité très utile, la prévisualisation de votre layout sur plusieurs résolutions différentes. Très pratique pour éviter de switcher entre toutes les configurations possibles pour voir si vous n’avez pas de problèmes de positionnement.</p>
<div class="wp-caption aligncenter" style="width: 584px"><img class=" " alt="Android - Preview all sizes" src="http://imgur.com/PUdiYrP.jpg" width="574" height="386" /><p class="wp-caption-text">Android &#8211; Preview all sizes</p></div>
<p>&nbsp;</p>
<p>A noter également, l’arrivée de nouveaux assistants très pratiques lorsque vous créez votre application, ou ajoutez une nouvelle activité. Vous pouvez par exemple sélectionner des templates déjà préconstruits, pour gérer un système d’onglets par exemple, ou des paramètres.</p>
<div class="wp-caption aligncenter" style="width: 528px"><img alt="Android - Activity wizard" src="http://imgur.com/kzBFpKc.jpg" width="518" height="494" /><p class="wp-caption-text">Android &#8211; Activity wizard</p></div>
<p>&nbsp;</p>
<p>Ce n’est pas encore Visual Studio, mais le temps de développement est considérablement réduit lorsqu’il s’agit d’UI à présent.</p>
<p>Enfin, sachez que désormais, le package d’installation du SDK contient une version spéciale d’Eclipse, dédiée à Android. Ça évite d’aller chercher une bonne version d’Eclipse pour développer. Pratique pour les débutants.</p>
<p>Vous pouvez consulter toutes les nouveautés d’ADT à cette adresse :</p>
<p><a href="http://developer.android.com/tools/sdk/eclipse-adt.html">http://developer.android.com/tools/sdk/eclipse-adt.html</a></p>
<p>Coté Microsoft, une mise à jour de la suite de développement à tout faire Visual Studio, en version 2012 à présent, a été rendu disponible. Blend, pour les interfaces graphiques, est maintenant intégré au sein de la suite et ne fait plus partie du pack Expression.</p>
<p>Le SDK de Windows Phone est aussi mis à jour afin de pouvoir cibler Windows Phone 7.1 ou 8.0. Attention, Microsoft a pris l’option de passer ses émulateurs sous Hyper-V, cela implique donc l’utilisation de Windows 8 Pro et d’un processeur récent compatible SLAT.</p>
<p>Concernant ces émulateurs, avec Windows Phone 8 et ses 3 résolutions (480*800 – WVGA, 768*1280 – WXGA, 720*1280 – 720p) nous avons donc 3 nouveaux émulateurs disponibles dans Visual Studio. Pour les projets Windows Phone 7.1, nous avons en plus les émulateurs WVGA 512 et 256 Mo.<br />
Le 22 janvier, Microsoft propose même une mise à jour des SDK 7.1.1 et 8.0 afin d’ajouter 2 nouveaux émulateurs pour WP7.8. Ça commence à faire beaucoup.</p>
<p>Lors du développement, maintenant le fait de fermer son appli n’arrête pas le Debug ! Certaines parties sont maintenant beaucoup plus faciles à débugger qu’avant (Tuiles secondaires par exemple).</p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">Fonctionnalités</span></h1>
<p>Avec l’arrivée de Windows Phone 8, les nouvelles fonctionnalités et API disponibles sont légions.</p>
<p>Nous pouvons citer pêle-mêle, le développement C++, les fonctions de Text To Speech, la personnalisation du LockScreen, les nouvelles tuiles (tailles et types), Nokia Maps, Camera Lenses et VideoRecording, le NFC et ses énormes possibilités, l’écriture dans le calendrier et les contacts, l’association de fichier, le support de la mini-SDCard, le Bluetooth ou encore l’In App Purchase.</p>
<p>Toutes ces fonctionnalités sont cruciales et permettent soit de rattraper la concurrence (NFC, In App Purchase), soit de proposer encore plus de fonctionnalités propres à Windows Phone comme les nouvelles tuiles ou le LockScreen personnalisable.</p>
<p>Afin de retrouver en détails toutes les nouveautés de Windows Phone 8, vous pouvez regarder cet article du Wiki Nokia Developper : <a href="http://www.developer.nokia.com/Community/Wiki/What%27s_new_in_Windows_Phone_8">www.developer.nokia.com/Community/Wiki/What%27s_new_in_Windows_Phone_8</a></p>
<p>Bien que les mises à jour Jelly Bean n&#8217;aient pas apporté de nouveautés majeures sur Android, quelques nouveautés bienvenues ont vu le jour. La principale nouveauté que l&#8217;on peut citer est l&#8217;ajout de nombreuses possibilités pour les notifications. En effet, vous pouvez à présent créer des notifications au design bien plus travaillé qu&#8217;auparavant, avec des options rapides (comme pouvoir marquer un message comme lu directement depuis la notification). Plusieurs options sont possibles, et l&#8217;ensemble est facile à mettre en place</p>
<div class="wp-caption aligncenter" style="width: 522px"><img alt="Android - Jelly Bean Notifications" src="https://lh3.ggpht.com/gXOnxroGDR1K6C9SPyPHxhTxbPe77ebiyS85w0qI-vbZDJukMfPZ4jjNBSB47P_dcQ" width="512" height="320" /><p class="wp-caption-text">Android &#8211; Jelly Bean Notifications</p></div>
<p>&nbsp;</p>
<p>Google a aussi sorti la version 2 de sa librairie Google Maps, apportant enfin un vent de nouveautés pour les applications utilisant de la cartographie. Il est donc maintenant possible d&#8217;intégrer Street View, ou les bâtiments en 3D, directement dans vos applications.</p>
<p><a href="https://www.youtube.com/watch?v=97HLa739rXU">https://www.youtube.com/watch?v=97HLa739rXU</a></p>
<p>Autre nouvelle fonctionnalité : les Google Play Services, qui permettent d&#8217;accéder principalement à certaines informations du profil Google + de l&#8217;utilisateur. Notez que cela requiert l&#8217;installation d&#8217;une application à part (pas très pratique donc).</p>
<p><a href="http://developer.android.com/google/play-services/index.html">http://developer.android.com/google/play-services/index.html</a></p>
<p>Enfin, une autre nouveauté encore assez peu exploitée : Dream day. Il s&#8217;agit tout simplement d&#8217;une activité dans votre application, qui pourra être lancé lorsque l&#8217;appareil est en charge ou sur un dock. Cette activité peut être simplement une animation (une sorte d&#8217;écran de veille), ou une application à part entière, avec des interactions possibles avec l&#8217;utilisateur.</p>
<p><a href="http://android-developers.blogspot.co.uk/2012/12/daydream-interactive-screen-savers.html">http://android-developers.blogspot.co.uk/2012/12/daydream-interactive-screen-savers.html</a></p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">Ecosystème</span></h1>
<p>Aujourd&#8217;hui, l&#8217;écosystème Android est de plus en plus grand. Que cela soit au niveau des parts de marché, ou de l&#8217;extension de la gamme Nexus, le système est devenu totalement incontournable dans le monde mobile. Malgré cela, quelque chose manquait cruellement à Android : une véritable communauté pour les développeurs. Mais en un an, Google a fait de nombreux efforts, et la situation est aujourd&#8217;hui bien meilleure. L&#8217;exemple le plus flagrant est l&#8217;usage de Google + pour organiser des &#8220;hangouts&#8221; directement avec les membres de l&#8217;équipe Android. Ainsi, plusieurs fois par semaine, des conférences vidéo sont organisées, sur différents thèmes. Vous pouvez ainsi soumettre votre application à l&#8217;œil critique des ingénieurs de chez Google, ou encore obtenir leurs conseils en matière de design. Un vrai must à suivre pour tout développeur Android, et qui vous apprendre un tas de petites astuces très utiles au quotidien.</p>
<p><a href="http://www.youtube.com/user/androiddevelopers">http://www.youtube.com/user/androiddevelopers</a></p>
<p>Avec le lancement des communautés Google +, Android a bien sûr eu le droit à sa propre assemblée de développeurs, et c&#8217;est tant mieux, car la concurrence sur Windows Phone, en tout cas au niveau francophone, était rude. Il était dommage de voir le système au bugdroid ne pas avoir la communauté qu&#8217;il mérite.</p>
<p><a href="https://plus.google.com/+AndroidCommunity">https://plus.google.com/+AndroidCommunity</a></p>
<p><a href="https://plus.google.com/communities/106117639322093625029">https://plus.google.com/communities/106117639322093625029</a></p>
<p>Enfin, Google a très largement amélioré la console pour les développeurs. Bien que la nouvelle interface soit toujours en test, elle est bien plus agréable à utiliser. Parmi les nouveautés apportées, on peut noter la gestion de la traduction des images de l&#8217;application (pour avoir des visuels localisés), ou encore la réponse possible aux commentaires pour tous (la fonctionnalité était réservée aux &#8220;super-développeurs&#8221; auparavant).</p>
<p style="text-align: center;"><img class="aligncenter" alt="" src="http://imgur.com/TqJjpjy.jpg" width="350" height="251" /></p>
<p>Concernant l’écosystème Microsoft,  celui-ci a énormément évolué avec une unification des interfaces (Xbox, Windows 8, Windows Phone) et du développement pour Windows 8 et Windows Phone.</p>
<p>Maintenant, Windows Phone 8 intègre WinPRT (Windows Phone RT) qui est un sous ensemble de WinRT (Windows Runtime) de Windows 8. Pour en savoir plus sur ce sujet, vous pouvez regarder la vidéo de la Build 2012 (<a href="http://channel9.msdn.com/Events/Build/2012/3-043R">http://channel9.msdn.com/Events/Build/2012/3-043R</a> ).</p>
<p>Autre point important coté Microsoft, c’est la communauté de développeurs et de professionnels que possède Microsoft au travers de ces différents programmes et évènements, Accélérateur, App Campus, MSP, MVP, Hackatons, Concours et le salon Microsoft en France, les Techdays.</p>
<p>Vous pouvez retrouver la Communauté Windows Phone sur Facebook ici : https://www.facebook.com/groups/devwp7/</p>
<p>Concernant le Windows Phone Store, il permet maintenant (WP8 oblige) de gérer ses achats In App avec le type (consommable ou durable) et le coût associé mais aussi les XAP multiples afin de déployer sur Windows Phone 7.1 et 8.0.</p>
<p>Le compte PubCenter peut aussi être associé à son compte développeur afin de gérer ses bandeaux de publicités directement au sein du DevCenter. Les revenus et les rapports sont par contre toujours accessibles sur le portail PubCenter.</p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">Conclusion</span></h1>
<p>Sur un an, les nouveautés ont été nombreuses des deux côtés, mais pas aux mêmes niveaux. Si Google a surtout amélioré ses outils, et assez peu touché à son système suffisamment mature, Microsoft à lui voulut donner plus de possibilités aux développeurs. L’intégration de Windows Phone a son écosystème a également été mise en avant, afin d’offrir une « expérience Windows » complète et cohérente. On notera également que la communauté commence à vraiment grossir, des deux côtés, et c’est un plus considérable pour les développeurs.</p>
<p>En conclusion, il n’a jamais fait aussi bon d’être développeurs pour Android ou Windows Phone !</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1170</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speed up your productivity on Android : Android Annotations</title>
		<link>http://aerilys.fr/blog/?p=1136</link>
		<comments>http://aerilys.fr/blog/?p=1136#comments</comments>
		<pubDate>Sun, 14 Oct 2012 14:04:20 +0000</pubDate>
		<dc:creator>Aerilys</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Aerilys]]></category>
		<category><![CDATA[Android Annotations]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://aerilys.fr/blog/?p=1136</guid>
		<description><![CDATA[Introduction As an Android developer, you might sometimes ask yourself: “Why Android, which is a very cool platform, has so many lack in productivity when you have to develop?”. Of course Android is easy to use and offers a lot of really great stuff for developers. But yes, sometimes, there is a lot of boilerplate [...]]]></description>
				<content:encoded><![CDATA[<div>
<h1><span style="color: #3366ff;">Introduction</span></h1>
</div>
<p>As an Android developer, you might sometimes ask yourself: “Why Android, which is a very cool platform, has so many lack in productivity when you have to develop?”. Of course Android is easy to use and offers a lot of really great stuff for developers. But yes, sometimes, there is a lot of boilerplate and you lose a lot of time. Fortunately, some libraries make our developer life easier! Here’s the first article of a series about how to boost your productivity with awesome libraries. And the first one is <em>Android Annotations</em> !</p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">What’s <em>Android annotations</em>?</span></h1>
<p>Android annotations is a great open-source (and French) library to speed up your code writing (well, that’s the goal of the article, right?). How? It just simplifies a lot of stuff you don’t care about. For example, one of the most boilerplate you do as an Android developer is to get UI elements reference in your code.</p>
<pre name="code" class="java">TextView myTextView = (TextView) findViewById(R.id.myTextView)</pre>
<p>Okay, that’s easy, but it takes time. If you have one or two elements, that’s okay. If you have hundreds of them, you have a real lack of productivity. Moreover, if you want to reference your element as attribute of your class, you will have to split the code in two places (one to declare the attribute, the other to get it from the view). But here comes <em>Android Annotations</em>!</p>
<pre name="code" class="java">
@ViewById
TextView myTextView;
</pre>
<p>&nbsp;</p>
<p>Much easier right ? Here is the strength of the library, you use annotations everywhere and your development becomes suddenly so productive! But it’s just the beginning!</p>
<p>Are you convinced? Then go download the library right now on Github (and fork it)</p>
<p><a href="http://androidannotations.org/">http://androidannotations.org/</a></p>
<h1><span style="color: #3366ff;">Initialize your Activity</span></h1>
<p>Before using all the awesome stuff of the library, you have some steps to do. First of all, you have to add the library to your project. This step is very well documented on the Github project <a href="https://github.com/excilys/androidannotations/wiki/Eclipse-Project-Configuration">Github</a>. Once it’s done, you have to annotate your activity with the <em>@EActivity</em> annotation. Actually, this annotation will generate a subclass of your activity, which will be used in the application. Once your activity is annotated, go to your manifest, and replace the name of your Activity by the generated subclass name, which is the same, but with an underscore at the end. For example, if your activity was declared this way:</p>
<pre name="code" class="xml">&lt;activity
android:name=".MainActivity"/&gt;</pre>
<p>Now it’s:</p>
<pre class="xml" name="code">&lt;activity
android:name=".MainActivity_"/&gt;</pre>
<p>Once done, you can use all the features of <em>Android Annotations</em>.</p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">Use views with Android Annotations</span></h1>
<p>The <em>@ViewById</em> is not the only helpful annotations included in the library. A lot of stuff exists. But here is an important thing to know: don’t use your views directly in the <em>onCreate </em>method. Why? Because all your elements will be <em>null</em> and so you will think “What? This guy on the blog is a liar. It doesn’t work at all!”. Of course it works! But all your elements aren’t retrieved by the library yet. Instead, you should use them on a special method, which is annotated with <em>@AfterViews</em>:</p>
<pre class="java" name="code">
@ViewById
protected TextView myTextView;

@Override
protected void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);
     
     //Here you have to NOT use annotated elements
}

@AfterViews
protected void useElements()
{
     //Here you can use your annotated elements
}
</pre>
<p>&nbsp;</p>
<p>In this method, you can safely use your elements. By the way, you are not limited to UI elements. You can also get Animations or services with annotations!</p>
<pre class="java" name="code">
@AnimationRes
Animation fadeIn;
	
@SystemService
ClipboardManager clipboardManager;
</pre>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">Use events</span></h1>
<p>Okay, now you can get your elements with annotations. But it’s still not the end! The library allows you to handle events like click on your elements, without modifying the view! You just have to use the @<em>Click</em> annotation:</p>
<pre class="java" name="code">
@Click({R.id.button1, R.id.button2})
protected void buttonClick() 
{
     //Do what you want here
}
</pre>
<p>It’s not a top feature in my opinion but it can be quite useful!</p>
<h1><span style="color: #3366ff;">Background and UI threads</span></h1>
<p>Thanks to JDK, using threads is easy. But anyway, you still have to use an <em>AsyncTask</em>, or use callbacks to call UI thread from a background thread. Not really convenient. But once again, <em>Android Annotations</em> offers two awesome annotations to accelerate our development:</p>
<p>You want to put a method in a background thread? No problem, just use <em>@Background</em> annotation!</p>
<pre class="java" name="code">
@Background
protected void taskInBackground(String stuff) 
{
     //All the code of the method will not be executed in UI thread
}
</pre>
<p>Yes. That’s all. Your method is in a background thread. Just one thing to know: your method has to not be <strong>private</strong>.</p>
<p>And what about UI thread? Same way, use <em>@UIThread</em> annotation:</p>
<pre class="java" name="code">
@UiThread
protected void taskInBackgroundCompleted(String result)
{
     Toast.makeText(this, result, Toast.LENGTH_LONG).show();
}
</pre>
<p>Now you are all done. It is more convenient than usual threads right?</p>
<p>&nbsp;</p>
<h1><span style="color: #3366ff;">Conclusion</span></h1>
<p>This article is just an introduction, there is a lot more to discover on this library, like the @<em>Rest</em> annotation.  I hope it has given you some ideas and convince you to use <em>Android Annotations</em>. Don’t lose time with boilerplate stuff and spend time on the core of your app, not on <em>findViewById</em> method.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://aerilys.fr/blog/?feed=rss2&#038;p=1136</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
