<?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>Objectif Weblog</title>
	<atom:link href="http://blog.objectif-informatique.fr/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.objectif-informatique.fr</link>
	<description>Un site utilisant WordPress</description>
	<lastBuildDate>Wed, 07 Dec 2011 15:54:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Devoxx 2011 &#8211; What&#8217;s new and important in android</title>
		<link>http://blog.objectif-informatique.fr/devoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html</link>
		<comments>http://blog.objectif-informatique.fr/devoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html#comments</comments>
		<pubDate>Mon, 28 Nov 2011 22:48:43 +0000</pubDate>
		<dc:creator>Cédric BEURTHERET</dc:creator>
				<category><![CDATA[Devoxx]]></category>

		<guid isPermaLink="false">http://blog.objectif-informatique.fr/?p=266</guid>
		<description><![CDATA[<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=20320310172&amp;xfbml=1"></script><script language="JavaScript">
					FB.Event.subscribe('edge.create', function(response) {
						_gaq.push(['_trackEvent','SocialSharing','Facebook - like button',unescape(String(response).replace(/\+/g, " "))]);
					});
				</script><script type="text/javascript">
				  (function() {
				    var po = document.createElement("script"); po.type = "text/javascript"; po.async = true;
				    po.src = "https://apis.google.com/js/plusone.js";
				    var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s);
				  })();
				</script>Cette conférence animée par Richard Hyndman, développeur chez Google,  présente les nouveautées d&#8217;Android 4.0,   Ice Cream Sandwich. Le tour des nouveautés Une interface revue Ics s&#8217;inspire beaucoup d&#8217;Honeycomb, la version d&#8217;android dédiée aux tablettes. Nouveau look. Multitâche mis en avant Un gestionnaire de fenêtres lancé à partir de la barre système. Des widgets redimensionnables Il [...]]]></description>
			<content:encoded><![CDATA[<p>Cette conférence animée par Richard Hyndman, développeur chez Google,  présente les nouveautées<br />
d&#8217;Android 4.0,   <span style="color: #ff0000;"><em><strong>Ice Cream Sandwich</strong></em></span>.</p>
<h3>Le tour des nouveautés</h3>
<ul>
<li><strong>Une interface revue</strong></li>
</ul>
<div>Ics s&#8217;inspire beaucoup d&#8217;Honeycomb, la version d&#8217;android dédiée aux tablettes. Nouveau look.</div>
<ul>
<li><strong>Multitâche mis en avant</strong></li>
</ul>
<div>Un gestionnaire de fenêtres lancé à partir de la barre système.</div>
<ul>
<li><strong>Des widgets redimensionnables</strong></li>
</ul>
<div>Il sera possible de redimensionner les widgets que vous placerez sur votre écran d&#8217;accueil, en l&#8217;étirant sur l&#8217;un des ses côtés.</div>
<ul>
<li><strong>L&#8217;action bar (barre système)  ou la fin des boutons physiques</strong></li>
</ul>
<div>Une barre système qui remplace les boutons physiques habituels.</div>
<h3>Le régal des mobiles</h3>
<ul>
<li><strong>Un meilleur navigateur</strong></li>
</ul>
<div>Il permet de se synchroniser ses favoris avec la version chrome desktop et serait plus rapide.</div>
<ul>
<li><strong>Android Beam</strong></li>
</ul>
<div>Cette fonction profite du NFC du téléphone pour transmettre de l&#8217;information à un autre terminal NFC en un clic.</div>
<div>Il suffit de rapprocher  l&#8217;un de l&#8217;autre pour partager un lien ou  une carte de visite.</div>
<ul>
<li><strong>Face unlock</strong></li>
</ul>
<p>Au déverrouillage classique par code, android 4.0 ajoute un module de reconnaissance faciale qui permet de débloquer votre téléphone.</p>
<ul>
<li><strong>Application People</strong></li>
</ul>
<div>L&#8217;application contact évolue. Elle rassemble maintenant les infos que vos contacts ont publiées sur les réseaux sociaux.</div>
<p><em><span style="text-decoration: underline;">Ces différentes fonctions sont incluses respectivement dans Android Beam API, Camera API et social API.</span></em></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html&text=Devoxx+2011+%26%238211%3B+What%26%238217%3Bs+new+and+important+in+android" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html&title=Devoxx+2011+%26%238211%3B+What%26%238217%3Bs+new+and+important+in+android&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html&title=Devoxx+2011+%26%238211%3B+What%26%238217%3Bs+new+and+important+in+android" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=Devoxx+2011+%26%238211%3B+What%26%238217%3Bs+new+and+important+in+android&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/devoxx-28_11_2011-266-devoxx-2011-whats-new-and-important-in-android.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Devoxx 2011 &#8211; Slides Catalog</title>
		<link>http://blog.objectif-informatique.fr/devoxx-23_11_2011-161-devoxx-2011-slides-catalog.html</link>
		<comments>http://blog.objectif-informatique.fr/devoxx-23_11_2011-161-devoxx-2011-slides-catalog.html#comments</comments>
		<pubDate>Wed, 23 Nov 2011 13:18:28 +0000</pubDate>
		<dc:creator>Cédric BEURTHERET</dc:creator>
				<category><![CDATA[Devoxx]]></category>

		<guid isPermaLink="false">http://blog.objectif-informatique.fr/?p=161</guid>
		<description><![CDATA[Pour ceux/celles qui n&#8217;ont pas eu la chance d&#8217;aller au DEVOX 2011, voici une collection des présentations récoltées sur la timeline twitter. Bleeding Edge HTML5 Modern Web Apps with HTML5 Jruby Enhancing Java Developers lives Working off the grid: HTML5 Offline Flying with Griffon Jboss AS5 &#8211; Death of slow Cracking Clojure Mongo DB Workshop [...]]]></description>
			<content:encoded><![CDATA[<p>Pour ceux/celles qui n&#8217;ont pas eu la chance d&#8217;aller au DEVOX 2011, voici une collection des présentations récoltées sur la timeline twitter.</p>
<ul>
<li><a href="http://kinlan-presentations.appspot.com/bleeding/index.html#1" hreflang="fr">Bleeding Edge HTML5</a></li>
<li><a href="http://www.dartlang.org/slides/2011/11/devoxx/index.html#1" hreflang="fr">Modern Web Apps with HTML5</a></li>
<li><a href="http://www.slideshare.net/hiroasari/jruby-enhancing-java-developers-lives" hreflang="fr">Jruby Enhancing Java Developers lives</a></li>
<li><a href="http://html5-offline.appspot.com/#1" hreflang="fr">Working off the grid: HTML5 Offline</a></li>
<li><a href="http://www.slideshare.net/aalmiray/devoxx-flying-with-griffon" hreflang="fr">Flying with Griffon</a></li>
<li><a href="http://www.slideshare.net/ALRubinger/devoxx-2011-jboss-as7-death-of-the-slow" hreflang="fr">Jboss AS5 &#8211; Death of slow</a></li>
<li><a href="http://www.slideshare.net/alexmiller/cracking-clojure" hreflang="fr">Cracking Clojure</a></li>
<li><a href="http://speakerdeck.com/u/bwmcadams/p/mongodb-devoxx-2011-workshop" hreflang="fr">Mongo DB Workshop</a></li>
<li><a href="http://www.slideshare.net/cmoulliard/devoxx-2011-integrationcamelcxfservicemixactivemq" hreflang="fr">Integation Camel CXF ServiceMix ActiveMQ</a>r</li>
<li><a href="http://www.slideshare.net/wakaleo/jenkins-from-continuous-integration-to-continuous-delivery" hreflang="fr">Jenkins From Continuous Integration to Continuous Delivery</a></li>
<li><a href="http://www.slideshare.net/ertmanb/devoxx-building-nextgeneration-enterprise-applications-in-java" hreflang="fr">Building Next Generation Enterprise App in Java</a></li>
<li><a href="http://webintents-preso.appspot.com/#1" hreflang="fr">Introduction to WebIntents</a></li>
<li><a href="http://www.yonita.com/2011_11_16_PERFORMANCE_ANTIPATTERNS_DEVOXX.pdf" hreflang="fr">Hibernate Performance AntiPattern</a></li>
<li><a href="http://www.slideshare.net/ecspike/intro-to-html5-game-programming" hreflang="fr">Intro to HTML5 Game Programming</a></li>
<li><a href="http://www.slideshare.net/msohn/code-review-with-git-and-gerrit-devoxx-tools-in-action-20111114" hreflang="fr">Code Review with Git and Gerrit</a></li>
<li><a href="http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf" hreflang="fr">Language, Library, VM Co Evolution in JAVA SE 8</a></li>
</ul>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html&text=Devoxx+2011+%26%238211%3B+Slides+Catalog" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html&title=Devoxx+2011+%26%238211%3B+Slides+Catalog&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html&title=Devoxx+2011+%26%238211%3B+Slides+Catalog" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=Devoxx+2011+%26%238211%3B+Slides+Catalog&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-161-devoxx-2011-slides-catalog.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/devoxx-23_11_2011-161-devoxx-2011-slides-catalog.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Devoxx 2011 &#8211; Impressions</title>
		<link>http://blog.objectif-informatique.fr/devoxx-23_11_2011-159-devoxx-2011-impressions.html</link>
		<comments>http://blog.objectif-informatique.fr/devoxx-23_11_2011-159-devoxx-2011-impressions.html#comments</comments>
		<pubDate>Wed, 23 Nov 2011 13:17:23 +0000</pubDate>
		<dc:creator>Cédric BEURTHERET</dc:creator>
				<category><![CDATA[Devoxx]]></category>

		<guid isPermaLink="false">http://blog.objectif-informatique.fr/?p=159</guid>
		<description><![CDATA[Pour nous, le devoxx se termine ce soir&#8230; Retour sur Paris &#38; Retour aux réalités client demain. C&#8217;est le moment de livrer nos premières impressions à chaud. D&#8217;abord, on a été impressionné par la foule cette année (Bon on s&#8217;y attendu puisque l&#8217;événnement était sold out). Mais c&#8217;est encore une fois la preuve de l&#8217;immense [...]]]></description>
			<content:encoded><![CDATA[<p>Pour nous, le devoxx se termine ce soir&#8230; Retour sur Paris &amp; Retour aux réalités client demain. C&#8217;est le moment de livrer nos premières impressions à chaud. <strong>D&#8217;abord, on a été impressionné par la foule cette anné</strong>e (Bon on s&#8217;y attendu puisque l&#8217;événnement était sold out). Mais c&#8217;est encore une fois la preuve de l&#8217;immense vitalité de notre chère communauté.</p>
<p>Ensuite, cette conférence marque vraiment un virage: on sent que l&#8217;on passe du domaine JAVA EE à celui du Web &amp; de la mobilité.</p>
<p>Clairement<strong> DEVOXX 2011 a été sous le signe de HTML5, ANDROID</strong> avec dans leur sillage respectif tout l&#8217;écosystème des solutions WEB (explosion technologique 1 : on a parlé de Play, Scala, Ruby&#8230;) &amp; celui de la mobilité (explosition technologique 2: première conférence sur PhoneGap par exemple).</p>
<p>Pour le Web, cela a été mis en avant dans le <a href="http://raibledesigns.com/" hreflang="fr">talk</a> de Matt Raible, développeur avec un certain talent de speaker. Il fait pas dans la démesure mais c&#8217;est simple et efficace. Matt nous a montré comment développer une application web mobile (thanks phonegap) avec des technologies émergentes (<a href="http://www.scala-lang.org/" hreflang="fr">Scala</a>, <a href="http://www.playframework.org/" hreflang="fr">Play</a>, <a href="http://jade-lang.com/" hreflang="fr">Jade</a>, <a href="http://jashkenas.github.com/coffee-script/" hreflang="fr">CofeeScript</a>, <a href="http://lesscss.org/" hreflang="fr">Less)</a></p>
<p>Pour le mobile, cela a bien été mis en avant dans la keynote du day 2 de TimBray: le développeur qui ne va pas sur le mobile n&#8217;a pas d&#8217;avenir a t&#8217;il dit en substance &#8230; un brin provocateur.</p>
<p><strong>HTML5 a été la grande star avec les 2 présentations</strong> (<a href="http://kinlan-presentations.appspot.com/bleeding/index.html#1" hreflang="fr">ici</a> &amp; <a href="http://www.dartlang.org/slides/2011/11/devoxx/index.html#1" hreflang="fr">ici</a>) de Google ou l&#8217;on a eu droit à des démos bluffantes: interaction avec le bureau, mode offline, détection du réseau, speech recognation, web intent dans l&#8217;esprit Android ou comment en quelques lignes de code pouvoir s&#8217;interfacer avec n&#8217;importe quel réseau social.</p>
<p><strong>Plus que jamais le browser est la plate-forme.</strong> Ce qui veut donc dire que<strong> JS en sera le langage?</strong> On a jamais été fan, c&#8217;est bien pour cela qu&#8217;on fait du GWT. Mais entre les lacunes de JS (faiblement typée &amp; difficilement debuggable), celle de GWT (complexité de code),<strong> Google pense qu&#8217;il y a une ligne médiane: DART</strong>. Dart, c&#8217;est quoi donc &#8230; aller sur le<a href="http://blog.xebia.fr/2011/11/17/devoxx-les-nouvelles-applications-html-5-et-dart/" hreflang="fr"> blog de nos amis de Xebia</a> pour en savoir plus</p>
<p>One more thing &#8230;.bien sur l&#8217;annonce de la première keynote. <strong>Devoxx a fait un petit:<a href="http://www.devoxx.com/display/FR12/Accueil" hreflang="fr"> Devoxx France</a>.</strong> Le lancement est programmé au printemps 2012. Même format qu&#8217;Anvers mais à Paris. On en a de la chance! Bravo en tout cas à Antonio &amp; son équipe pour leur abnégation à lancer cette entreprise.</p>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html&text=Devoxx+2011+%26%238211%3B+Impressions" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html&title=Devoxx+2011+%26%238211%3B+Impressions&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html&title=Devoxx+2011+%26%238211%3B+Impressions" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=Devoxx+2011+%26%238211%3B+Impressions&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fdevoxx-23_11_2011-159-devoxx-2011-impressions.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/devoxx-23_11_2011-159-devoxx-2011-impressions.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML 5 l&#8217;arme absolue ?</title>
		<link>http://blog.objectif-informatique.fr/html5-23_11_2011-285-html-5-larme-absolue.html</link>
		<comments>http://blog.objectif-informatique.fr/html5-23_11_2011-285-html-5-larme-absolue.html#comments</comments>
		<pubDate>Wed, 23 Nov 2011 11:05:25 +0000</pubDate>
		<dc:creator>Cédric BEURTHERET</dc:creator>
				<category><![CDATA[Html5]]></category>

		<guid isPermaLink="false">http://blog.objectif-informatique.fr/?p=285</guid>
		<description><![CDATA[En avril dernier dans l&#8217;article Quelles nouvelles d&#8217;HTML5 ? j&#8217;indiquais que Microsoft avait même déclaré que l&#8217;avenir du Web était dans HTML5).Aujourd&#8217;hui, Adobe rejoint aussi le train de ceux qui pensent que l&#8217;avenir appartient à HTML5. Dans un article parut hier, InfoQ explique qu&#8217;après les annonces de la semaine dernière où Adobe indiquait abandonner le [...]]]></description>
			<content:encoded><![CDATA[<p><strong>En avril dernier dans l&#8217;article <a href="http://www.objectif-informatique.fr/weblog/index.php?2011/03/07/96-quelles-nouvelles-d-html5" hreflang="fr">Quelles nouvelles d&#8217;HTML5 ?</a> j&#8217;indiquais que <a href="http://www.zdnet.com/blog/service-oriented/microsoft-favoring-html5-over-silverlight-reports/6056?tag=rbxccnbzd1" hreflang="en">Microsoft avait même déclaré que l&#8217;avenir du Web était dans HTML5</a>).</strong>Aujourd&#8217;hui, Adobe rejoint aussi le train de ceux qui pensent que l&#8217;avenir appartient à HTML5.</p>
<p>Dans <a href="http://www.infoq.com/news/2011/11/flex-adandoned" hreflang="en">un article parut hier</a>, InfoQ explique qu&#8217;après <a href="http://www.infoq.com/news/2011/11/No-More-Flash" hreflang="en">les annonces de la semaine dernière</a> où Adobe indiquait abandonner le développement de Flash pour les plateformes mobile et TV, Adobe envisage de donner Flex à une fondation Open Source. Dans la FAQ officielle de Flex, Adobe écrit même : <strong><em>«In the long-term, we believe HTML5 will be the best technology for enterprise application development.»</em></strong>. En outre, les investissements important annoncés dans les outils de création orientés HTML5 laissent penser qu&#8217;Adobe se recentre sur les outils, domaine où il reste tout à faire, et où leur savoir faire est manifeste.</p>
<p>Oracle, avec sa solution de RIA JavaFx, reste donc le dernier grand à n&#8217;avoir pas succombé au chants du HTML5. JavaFx, n&#8217;est pas seulement vu comme une solution de RIA, mais il se positionne aussi comme un remplaçant de Swing.<br />
Cette approche est-elle encore d&#8217;actualité ? L&#8217;avenir nous dira si JavaFx trouve son public.</p>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html&text=HTML+5+l%26%238217%3Barme+absolue+%3F" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html&title=HTML+5+l%26%238217%3Barme+absolue+%3F&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html&title=HTML+5+l%26%238217%3Barme+absolue+%3F" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=HTML+5+l%26%238217%3Barme+absolue+%3F&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fhtml5-23_11_2011-285-html-5-larme-absolue.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/html5-23_11_2011-285-html-5-larme-absolue.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhoneGap et GWT</title>
		<link>http://blog.objectif-informatique.fr/android-29_07_2011-6-104-phonegap-et-gwt.html</link>
		<comments>http://blog.objectif-informatique.fr/android-29_07_2011-6-104-phonegap-et-gwt.html#comments</comments>
		<pubDate>Fri, 29 Jul 2011 13:22:16 +0000</pubDate>
		<dc:creator>Romain Flanet</dc:creator>
				<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.objectif-informatique.fr/wordpress/?p=6</guid>
		<description><![CDATA[Phonegap est un projet visant à écrire une seule application et de la publier sur différentes cibles mobiles (android, iphone, blackberry, &#8230;). Le projet recense les fonctionnalités des appareils mobiles (gps, contacts, stockage de fichier,&#8230;) et les expose via une api javascript. La création d&#8217;applications avec phonegap consiste donc à écrire une application en html/javascript. [...]]]></description>
			<content:encoded><![CDATA[<p>Phonegap est un projet visant à écrire une seule application et de la publier sur différentes cibles mobiles (android, iphone, blackberry, &#8230;). Le projet recense les fonctionnalités des appareils mobiles (gps, contacts, stockage de fichier,&#8230;) et les expose via une api javascript. La création d&#8217;applications avec phonegap consiste donc à écrire une application en html/javascript. Ensuite, il faut packager l&#8217;application pour chacun des mobiles. Cette opération peut être effectuée avec un environnement pour chaque cible ou via le service proposé par phonegap. Toutes les applications sont ensuite déployables sur les différents market (Apple store, market Android, &#8230;) et les différentes plateformes mobiles.</p>
<p>Les développements phonegap semblent tout indiqués pour s&#8217;orienter vers une solution GWT. Plusieurs bibliothèques proposent déjà des implémentations phonegap / GWT.</p>
<h1>Les différents projets GWT pour phonegap</h1>
<h2>GWT-Phonegap (<a href="http://code.google.com/p/gwt-phonegap/" hreflang="fr">http://code.google.com/p/gwt-phonegap/</a>)</h2>
<p>GWT-Phonegap est un wrapper gwt pour la librairie javascript phonegap. Au menu de ce projet, on retrouve la géolocalisation, l&#8217;utilisation de l&#8217;accéléromètre, la caméra, le vibreur et l&#8217;utilisation du réseau. L&#8217;implémentation n&#8217;est testée que sur Iphone et Android. Ce projet intègre des bouchons utilisés lorsque l&#8217;application est utilisée sur un navigateur dépourvu de phonegap. Le développement consiste à tester la présence de chaque fonctionnalité et fournir un développement spécifique en fonction des capacités du navigateur hôte.</p>
<p><strong>Pourquoi le choisir ? </strong> Si le choix est motivé par la création d&#8217;un site Web et d&#8217;une version mobile peu évoluée sur Iphone et Android seulement.</p>
<h2>GWTMobile (<a href="http://code.google.com/p/gwtmobile/" hreflang="fr">http://code.google.com/p/gwtmobile/</a>)</h2>
<p>GWTMobile est un autre wrapper pour phonegap. Contrairement au précédent, il couvre l&#8217;ensemble des fonctionnalités de phonegap. Il propose en plus, un ensemble de composants graphiques adaptés aux mobiles dont le but annoncé est de se rapprocher du rendu natif. Il ne prévoit aucun bouchon pour les navigateurs hors mobile. Toutefois, cette orientation est intéressante puisque GWT se suffit à lui même pour développer des rendus et fonctionnalités différentes en fonction du navigateur.</p>
<p>Ce projet est à privilégier si le choix est motivé par la création d&#8217;une application mobile multi-plateformes.</p>
<h1>Développement d&#8217;un projet phonegap avec GWT</h1>
<p>Le développement d&#8217;un projet phonegap avec GWT ne diffère pas d&#8217;un projet GWT classique. Vous pouvez utiliser vos outils habituelles (eclipse, plugin GWT, maven, &#8230;) vos patterns préférés (MVC, MVP).</p>
<p>La contrainte de la solution réside dans les tests sur mobiles. En effet, le devmode de GWT n&#8217;est pas accessible depuis les mobiles. Le développement se fait donc en dehors d&#8217;un mobile et il faut compiler le javascript pour tester sur mobile. Cela oblige à prévoir des bouchons pour tester les fonctionnalités nécessitant la puissance de phonegap.</p>
<p>Il faut noter que le pattern MVP, préconisé par Google, est à privilégier puisqu&#8217;il permet de facilement créer des vues adaptées aux mobiles et des vues adaptées aux navigateurs de bureau.</p>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html&text=PhoneGap+et+GWT" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html&title=PhoneGap+et+GWT&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html&title=PhoneGap+et+GWT" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=PhoneGap+et+GWT&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fandroid-29_07_2011-6-104-phonegap-et-gwt.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/android-29_07_2011-6-104-phonegap-et-gwt.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Retour sur la soirée JUG sur le theme du Cloud</title>
		<link>http://blog.objectif-informatique.fr/jug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html</link>
		<comments>http://blog.objectif-informatique.fr/jug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html#comments</comments>
		<pubDate>Wed, 06 Jul 2011 00:20:19 +0000</pubDate>
		<dc:creator>Cédric BEURTHERET</dc:creator>
				<category><![CDATA[Jug]]></category>

		<guid isPermaLink="false">http://www.objectif-informatique.fr/wordpress/?p=65</guid>
		<description><![CDATA[Une salle comble, 100 pers en liste d&#8217;attente, Un super theme, Des bons speakers &#8230; bref retour sur cette soirée réussie (bravo au staff du JUG). Le cloud selon P. Chanezon (Google) En intro, Patrick s&#8217;étonne du peu de gain de productivité sur la partie logicielle par rapport au gain sur le hardware (loi de [...]]]></description>
			<content:encoded><![CDATA[<p>Une salle comble, 100 pers en liste d&#8217;attente, Un super theme, Des bons speakers &#8230; bref retour sur cette soirée réussie (bravo au staff du JUG).</p>
<h3>Le cloud selon <a href="http://twitter.com/#!/chanezon" hreflang="fr">P. Chanezon</a> (Google)</h3>
<p>En intro, Patrick s&#8217;étonne du peu de gain de productivité sur la partie logicielle par rapport au gain sur le hardware (loi de Moore). Il nous décrit ensuite les grands changement d&#8217;architecture survenu dans les dernières décennies</p>
<ul>
<li>60 Mainframe,</li>
<li>80 Client / Serveur</li>
<li>90 Web,</li>
<li>2010 Cloud, HTML5, Mobile&#8230; le browser devient l&#8217;OS</li>
</ul>
<p>L&#8217;histoire du cloud démarre avec les sites grands publics (Google, Amazon, Facebook&#8230;) avec un passage de la scalabilité verticale (toujours de + gros serveur) à horizontal (standardisation du pc pas cher) et l’émergence de stack open source (Linux).</p>
<p>Il décrit ensuite la stack technique google sur le cloud:</p>
<ul>
<li>Storage distribué à tolérance de panne : <a href="http://labs.google.com/papers/gfs.html" hreflang="fr">Google File System</a></li>
<li>Mémoire partagée distribuée : <a href="http://labs.google.com/papers/bigtable.html" hreflang="fr">Bigtable</a></li>
<li>Programmation abstraite : <a href="http://labs.google.com/papers/mapreduce.html" hreflang="fr">MapReduce</a></li>
<li>DSL : <a href="http://labs.google.com/papers/sawzall.html" hreflang="fr">Sawzall</a></li>
</ul>
<p>Il nous explique ensuite que les développeurs devront s&#8217;adapter à cette nouvelle donne &amp; réfléchir autrement (Ne plus faire de l’ACID &amp; de la jointure, <a href="http://eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf" hreflang="fr">Ne plus faire des transactions à 2 phases</a>Voilà plutôt ce qui devrait les préocupper pour les prochaines années :</p>
<ul>
<li>Langage : Go,<a href="http://www.scala-lang.org/" hreflang="fr"> Scala</a></li>
<li>NoSql : BigTable, <a href="http://hbase.apache.org/" hreflang="fr">Hbase</a>, <a href="http://www.mongodb.org/" hreflang="fr">MongoDb</a>, <a href="http://cassandra.apache.org/" hreflang="fr">Cassandra</a></li>
<li>Map/Reduce : <a href="http://hadoop.apache.org/" hreflang="fr">Apache Hadoop</a></li>
<li><a href="http://en.wikipedia.org/wiki/Paxos_(computer_science)" hreflang="fr">Paxos</a></li>
<li>Rest</li>
</ul>
<p>Pour Patrick, le cloud peut être vu principalement sous les angles suivants:</p>
<ul>
<li>Le delivery (SAAS) type <a href="http://www.google.com/apps/intl/fr/business/index.html" hreflang="fr">Google Apps</a>, App Store Mobile &#8230; ou le constat actuel est la fragmentation de l&#8217;offre</li>
<li>L&#8217;Infrastructure (IAAS) type Amazon &#8230; ou le constat actuel est le manque de standard</li>
<li>Le plateforme as service (PAAS) type G<a href="http://code.google.com/intl/fr-FR/appengine/" hreflang="fr">oogle App Engine</a>, <a href="http://www.joyent.com/" hreflang="fr">Joyent</a>, <a href="http://www.heroku.com/" hreflang="fr">Heroku</a>, Stax (Cloudbees), <a href="http://aws.amazon.com/fr/" hreflang="fr">Amazon</a> &#8230;ou le constat actuel est également le manque de standard &amp; le risque d&#8217;une forte dépendance au fournisseur (Vendor Lock In)</li>
</ul>
<p>Sa vision pour le futur:</p>
<ul>
<li>Le software devient comme la mode : les objets de production sont industrialisés mais cela devient un métier d’artisan</li>
<li>Il faut faire face au chaos de productivité : émergence de nouvelles offres, de nouveaux langages, des DSL … l’application va être un assemblage de composants hétérogènes</li>
</ul>
<p>Ses conseils pour &laquo;&nbsp;survivre&nbsp;&raquo; :</p>
<ul>
<li>S&#8217;intéresser à l&#8217;Agile, Ui design, Javascript, HTML5</li>
<li>Monétiser les applications</li>
<li>Etre indépendant (be your own bitch)</li>
</ul>
<h1>Le cloud selon <a href="http://twitter.com/#!/DidierGirard" hreflang="fr">D. Girard</a> (Sfeir)</h1>
<p>Didier dresse le panorama de ce qui sont les inducteurs des solutions cloud:</p>
<ul>
<li>Pas les coûts</li>
<li>Mais la réactivité / l&#8217;innovation / le marketing / l&#8217;ambition / l&#8217;agressivité / la démocratisation / la performance / le mérite (permet à de petites SSII de pouvoir monter des gros projets) / la sérénité (par rapport au montée en charge)</li>
</ul>
<p>Il nous livre les outils qui ont été utilisés sur plusieurs projets</p>
<ul>
<li><a href="http://www.assembla.com/" hreflang="fr">Assembla</a> /<a href="https://github.com/" hreflang="fr">Github</a> pour la gestion des source</li>
<li><a href="http://www.cloudbees.com/" hreflang="fr">CloudBees</a> pour l&#8217;usine logicielle (build, déploiement)</li>
<li><a href="http://code.google.com/intl/fr-FR/appengine/" hreflang="fr">Appengine</a> (bigtable, mysql)</li>
</ul>
<p>Le cloud représente 10% du CA de SFEIR. A son sens, le cloud est inévitable. Il va induire de nouveaux modèles organisationnels en SSII.</p>
<h1>Le cloud selon <a href="http://twitter.com/#!/glaforge" hreflang="fr">G. Laforge</a> (VMWare)</h1>
<p>G. Laforge (Groovy, Grails, Gaelyk) bosse maintenant pour <a href="http://www.cloudfoundry.com/" hreflang="fr">CloudFoundry</a>&amp; nous présente leur solution:</p>
<ul>
<li>PAAS de VmWare</li>
<li>Open Source</li>
<li>Multi Langage (Java,.Net, Js, Ruby) / Multi framework</li>
<li>Moteur d’exécution d’app (node, rails, servlet, Spring)</li>
<li>Stack de services intégrés (App Engine, <a href="http://www.microsoft.com/windowsazure/" hreflang="fr">Azure</a>, <a href="http://www.rabbitmq.com/" hreflang="fr">RabbitMq</a>, <a href="http://www.mysql.fr/" hreflang="fr">Mysql</a>, <a href="http://www.mongodb.org/" hreflang="fr">MongoDb</a>…)</li>
<li>Unité de travail : l’application (pas l’infra…)</li>
<li>Approche indépendante d&#8217;un fournisseur (CloudFoundry, Amazon AWS, Cloud privé)</li>
<li>IDE : Eclipse Spring Source Tool</li>
</ul>
<h1>Le cloud selon <a href="http://twitter.com/#!/ndeloof" hreflang="fr">N. De Loof</a> (CloudBees)</h1>
<p><a href="http://www.cloudbees.com/platform-overview.cb" hreflang="fr">CloudBees</a> permet d&#8217;une part d&#8217;avoir une usine logicielle sur le cloud. Cette stack est basée sur GIT/SVN/MAVEN &amp; surtout <a href="http://jenkins-ci.org/" hreflang="fr">JENKINS</a>. Elle est manipulable via divers clients (HTTP, WEB UI, ECLIPSE Plugin). La solution est extensible La facturation s&#8217;effectue à la minute de build (tiens cela nous rappelle étrangement la facturation IBM à l&#8217;époque des mainframes &#8230; marrant ce pouvoir de l&#8217;IT de se ré-inventer). D&#8217;autre part, elle permet de déployer immédiatement des applications sur une stack d&#8217;exécution JAVA (TOMCAT/MYSQL actuellement). L&#8217;intérêt de la solution est de pouvoir ensuite tourner sur différentes infrastructures cloud (AMAZON WS actuellement mais aussi <a href="http://www.vmware.com/fr/" hreflang="fr">VMWARE</a>, <a href="http://www.ovh.com/fr/cloud/" hreflang="fr">OVH</a>&#8230;)</p>
<h1>Le cloud selon <a href="http://twitter.com/#!/zuzur" hreflang="fr">Erwan</a> (RunMyProcess)</h1>
<p><a href="http://www.runmyprocess.com/" hreflang="fr">RunMyProcess</a> est une solution cloud de workflow. Plutot que présenter sa solution, Erwan nous rappelle que le cloud c&#8217;est aussi des risques liés au trou noir (comme c&#8217;est arrivé suite à la <a href="http://www.lemagit.fr/article/cloud-computing-sla-panne-amazon/8658/1/panne-amazon-une-mauvaise-operation-mise-jour-origine-trouble/" hreflang="fr">panne de l&#8217;infrastructure AMAZON WS</a>) et donc des bonnes pratiques comme</p>
<ul>
<li>Redonder son application sur différentes zones de CLOUD</li>
<li>Faire un programme « CrashMonkey » pour tenter de faire planter son infra &amp; voir si tout va bien réagir</li>
<li>Faire du monitoring (<a href="http://www.nagios.org/" hreflang="fr">Nagios</a>)</li>
</ul>
<p>J&#8217;ai bien aimé son discours pragmatique qui nous rappelle aux tristes réalités des infrastructures IT &amp; qu&#8217;il convient (même sur le cloud) de se préocupper de la disponibilité &amp; du SLA dès lors qu&#8217;il y a de l&#8217;enjeu dans l&#8217;applicatif exposé.</p>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html&text=Retour+sur+la+soir%C3%A9e+JUG+sur+le+theme+du+Cloud" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html&title=Retour+sur+la+soir%C3%A9e+JUG+sur+le+theme+du+Cloud&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html&title=Retour+sur+la+soir%C3%A9e+JUG+sur+le+theme+du+Cloud" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=Retour+sur+la+soir%C3%A9e+JUG+sur+le+theme+du+Cloud&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fjug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/jug-06_07_2011-65-103-retour-sur-la-soiree-jug-sur-le-theme-du-cloud.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment écrire un plugin pour PhoneGap</title>
		<link>http://blog.objectif-informatique.fr/phonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html</link>
		<comments>http://blog.objectif-informatique.fr/phonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html#comments</comments>
		<pubDate>Mon, 27 Jun 2011 17:31:55 +0000</pubDate>
		<dc:creator>Mathieu BROUTIN</dc:creator>
				<category><![CDATA[PhoneGap]]></category>

		<guid isPermaLink="false">http://www.objectif-informatique.fr/wordpress/?p=79</guid>
		<description><![CDATA[<p>Dans le cadre d'un projet mobile qui cible plusieurs plateformes, il y a deux solutions pour réaliser le projet.</p> <ul> <li>Soit réaliser un développement par plateforme, ce qui implique une multiplication du nombre de projet par le nombre de plateformes</li> <li>Soit réaliser un développement "cross-plateform"</li> </ul> <p>Dans le deuxième cas, il est possible de réaliser un seul développement qui tournera sur toutes les plateformes grâce au framework <a href="www.phonegap.com">PhoneGap</a>.</p> <p>Le principale avantage et inconvénient de ce framework est que tout le code se fait en HTML, JS et CSS. L'avantage est la facilité du code (tout le monde ou presque sait faire du HTML), l'inconvénient majeur est l'utilisation des ressources du téléphone en dehors du domaine d'utilisation de phonegap.</p> <p>PhoneGap étant une plateforme extensible, regardons dans cette article comment réaliser un plugin dans PhoneGap.</p>]]></description>
			<content:encoded><![CDATA[<p>Dans le cadre d&#8217;un projet mobile qui cible plusieurs plateformes, il y a deux solutions pour réaliser le projet.</p>
<ul>
<li>Soit réaliser un développement par plateforme, ce qui implique une multiplication du nombre de projet par le nombre de plateformes</li>
<li>Soit réaliser un développement &laquo;&nbsp;cross-plateform&nbsp;&raquo;</li>
</ul>
<p>Dans le deuxième cas, il est possible de réaliser un seul développement qui tournera sur toutes les plateformes grâce au framework <a href="www.phonegap.com">PhoneGap</a>.</p>
<p>Le principale avantage et inconvénient de ce framework est que tout le code se fait en HTML, JS et CSS. L&#8217;avantage est la facilité du code (tout le monde ou presque sait faire du HTML), l&#8217;inconvénient majeur est l&#8217;utilisation des ressources du téléphone en dehors du domaine d&#8217;utilisation de phonegap.</p>
<p>PhoneGap étant une plateforme extensible, regardons dans cette article comment réaliser un plugin dans PhoneGap.</p>
<h2>Mise en place de l’environnement de travail</h2>
<p>Avant toute chose, il faut commencer par créer un nouveau projet PhoneGap.</p>
<p>Sous eclipse créer un nouveau projet Android.</p>
<p>A la racine du projet créer 2 répertoires :</p>
<ul>
<li>/libs</li>
<li>/assets/www</li>
</ul>
<p>Copier <strong>phonegap.jar</strong> dans le répertoire libs, puis l’ajouter au classpath (disponible dans PHONEGAP_HOME/Android/phonegap-version.jar). Ajouter cette librairie au classpath du projet eclipse.</p>
<p>Copier <strong>phonegap.js</strong> dans le repertoire /assets/www copier (disponible dans PHONEGAP_HOME/Android/phonegap-version.js)</p>
<p>Copier le code suivant dans votre Activity principale.</p>
<div class="code">
<div class="java">
<p><span class="kw1">package</span> <span class="co2">fr.objectif.android.plugin</span><span class="sy0">;</span><span class="kw1">import</span> <span class="co2">com.phonegap.DroidGap</span><span class="sy0">;</span></p>
<p><span class="kw1">import</span> <span class="co2">android.os.Bundle</span><span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw1">class</span> MainActivity <span class="kw1">extends</span> DroidGap <span class="br0">{</span><br />
<span class="co3">/** Called when the activity is first created. */</span><br />
@Override<br />
<span class="kw1">public</span> <span class="kw4">void</span> onCreate<span class="br0">(</span>Bundle savedInstanceState<span class="br0">)</span><span class="br0">{</span><br />
<span class="kw1">super</span>.<span class="me1">onCreate</span><span class="br0">(</span>savedInstanceState<span class="br0">)</span><span class="sy0">;</span><br />
<span class="kw1">super</span>.<span class="me1">loadUrl</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;file:///android_asset/www/index.html&nbsp;&raquo;</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><br />
<span class="br0">}</span></p>
</div>
</div>
<p>Ajouter les permissions suivantes dans le fichier manifest du projet (après la balise root du fichier xml)</p>
<div class="code">
<div class="xml"><span class="sc3"><span class="re1">&lt;supports-screens</span> <span class="re0">android:largeScreens</span>=<span class="st0">&laquo;&nbsp;true&nbsp;&raquo;</span> <span class="re0">android:normalScreens</span>=<span class="st0">&laquo;&nbsp;true&nbsp;&raquo;</span> </span><br />
<span class="sc3">      <span class="re0">android:smallScreens</span>=<span class="st0">&laquo;&nbsp;true&nbsp;&raquo;</span> <span class="re0">android:resizeable</span>=<span class="st0">&laquo;&nbsp;true&nbsp;&raquo;</span> <span class="re0">android:anyDensity</span>=<span class="st0">&laquo;&nbsp;true&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.CAMERA&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.VIBRATE&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.ACCESS_COARSE_LOCATION&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.ACCESS_FINE_LOCATION&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.ACCESS_LOCATION_EXTRA_COMMANDS&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.READ_PHONE_STATE&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.INTERNET&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.RECEIVE_SMS&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.RECORD_AUDIO&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.MODIFY_AUDIO_SETTINGS&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.READ_CONTACTS&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.WRITE_CONTACTS&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.WRITE_EXTERNAL_STORAGE&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&laquo;&nbsp;android.permission.ACCESS_NETWORK_STATE&nbsp;&raquo;</span> <span class="re2">/&gt;</span></span></div>
</div>
<p>Pour finir il faut le fichier html qui est affiché par l’activité principale (à placer dans /assets/www/index.html)</p>
<div class="code">
<div class="html4strict"><span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>PhoneGap<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;Content-Type&nbsp;&raquo;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;text/html; charset=utf-8&#8243;</span> <span class="sy0">/</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;viewport&nbsp;&raquo;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;width=device-width, initial-scale=1, maximum-scale=1&#8243;</span> <span class="sy0">/</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;text/javascript&nbsp;&raquo;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;utf-8&#8243;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;phonegap.js&nbsp;&raquo;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a>&gt;</span>PhoneGap est correctement installé<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/h1.html"><span class="kw2">h1</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div>
</div>
<p>Exécuter le projet pour voir si une page s’affiche sur le device.</p>
<p>&nbsp;</p>
<h2>Fonctionnement des plugins sous phonegap</h2>
<p>Pour créer un nouveau plugin sous phonegap il faut définir au moins 2 fichiers :</p>
<ul>
<li>Un fichier JS qui correspond à l’appel du code natif (wrapper JS)</li>
<li>Un fichier “natif” par plateforme qui correspond à l’implémentation du plugin.</li>
</ul>
<p>Exemple (Hello World):</p>
<h3>Fichier Java</h3>
<p>La première étape consiste à écrire le plugin en Java. Pour cela créer une simple classe Java qui étend la classe Plugin.</p>
<div class="code">
<div class="java"><span class="kw1">package</span> <span class="co2">fr.objectif.demopg</span><span class="sy0">;</span></div>
</div>
<p><span class="kw1">import</span> <span class="co2">org.json.JSONArray</span><span class="sy0">;</span></p>
<p><span class="kw1">import</span> <span class="co2">android.util.Log</span><span class="sy0">;</span></p>
<p><span class="kw1">import</span> <span class="co2">com.phonegap.api.Plugin</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">com.phonegap.api.PluginResult</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">com.phonegap.api.PluginResult.Status</span><span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw1">class</span> HelloWorldPlugin <span class="kw1">extends</span> Plugin <span class="br0">{</span></p>
<p>@Override<br />
<span class="kw1">public</span> PluginResult execute<span class="br0">(</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> action,<br />
JSONArray data, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> callbackId<span class="br0">)</span> <span class="br0">{</span><br />
Log.<span class="me1">d</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;HelloWorldPlugin&nbsp;&raquo;</span>, <span class="st0">&laquo;&nbsp;Plugin HelloWorld est executé&nbsp;&raquo;</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="kw1">return</span> <span class="kw1">new</span> PluginResult<span class="br0">(</span>Status.<span class="me1">OK</span>, <span class="st0">&laquo;&nbsp;Hello World from Java !!!&nbsp;&raquo;</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><br />
<span class="br0">}</span></p>
<h3>Fichier Javascript</h3>
<p>La deuxième étape est double, car elle consiste à crée le stub javascript (définir la signature de notre plugin java en javascript), puis de référencer ce stub auprès de PhoneGap.</p>
<div class="code">
<div class="javascript"><span class="coMULTI">/**<br />
* Object servant à définir notre object javascript<br />
* @return Une instance de HelloWorld<br />
*/</span><br />
<span class="kw2">var</span> HelloWorld <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span><span class="coMULTI">/**<br />
* Définition de la méthod sayHello en javascript<br />
* @param successCallback Fonction de callback lors de la réussite de l’execution<br />
* @param failureCallback Fonction de callback lors de l’échec de l’execution.<br />
*/</span><br />
HelloWorld.<span class="me1">prototype</span>.<span class="me1">sayHello</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">(</span>successCallback<span class="sy0">,</span> failureCallback<span class="br0">)</span> <span class="br0">{</span><br />
<span class="kw1">return</span> PhoneGap.<span class="me1">exec</span><span class="br0">(</span><br />
successCallback<span class="sy0">,</span><br />
failureCallback<span class="sy0">,</span><br />
<span class="st0">&#8216;HelloWorldPlugin&#8217;</span><span class="sy0">,</span>    <span class="co1">//Défini le service à executer            </span><br />
<span class="st0">&#8216;sayHello&#8217;</span><span class="sy0">,</span> <span class="co1">//Paramètre action de la fonction java</span><br />
<span class="br0">[</span><span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span>        <span class="co1">//Les parametres (data dans la fonction java)</span><br />
<span class="br0">}</span><span class="sy0">;</span><span class="coMULTI">/**<br />
* Enregistre une nouvelle bibliothèque de fonctions<br />
* auprès de PhoneGap<br />
*/</span><br />
PhoneGap.<span class="me1">addConstructor</span><span class="br0">(</span><span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><br />
<span class="co1">//Register the javascript plugin with PhoneGap</span><br />
PhoneGap.<span class="me1">addPlugin</span><span class="br0">(</span><span class="st0">&#8216;hellojs&#8217;</span><span class="sy0">,</span> <span class="kw2">new</span> HelloWorld<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span></div>
</div>
<p><span class="co1">//Register the native class of plugin with PhoneGap </span><br />
PluginManager.<span class="me1">addService</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;HelloWorldPlugin&nbsp;&raquo;</span><span class="sy0">,</span><br />
<span class="st0">&laquo;&nbsp;fr.objectif.demopg.HelloWorldPlugin&nbsp;&raquo;</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span></p>
<h3>La partie cliente</h3>
<p>Pour finir dans notre application, il suffit d&#8217;appeler notre plugin en javascript, via PhoneGap</p>
<p>L’appel du plugin (index.html)</p>
<div class="code">
<div class="html4strict"><span class="sc0">&lt;!DOCTYPE HTML&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>PhoneGap<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;Content-Type&nbsp;&raquo;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;text/html; charset=utf-8&#8243;</span> <span class="sy0">/</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;viewport&nbsp;&raquo;</span></span><br />
<span class="sc2">    <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;width=device-width, initial-scale=1, maximum-scale=1&#8243;</span> <span class="sy0">/</span>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;text/javascript&nbsp;&raquo;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;utf-8&#8243;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;phonegap.js&nbsp;&raquo;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;text/javascript&nbsp;&raquo;</span> <span class="kw3">charset</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;utf-8&#8243;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;hello.js&nbsp;&raquo;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;text/javascript&nbsp;&raquo;</span>&gt;</span><br />
function onload() {<br />
document.addEventListener(&#8216;deviceready&#8217;, onDeviceReady, true);<br />
}     // Cette méthode est appelée lorsque PhoneGap est fini d’être chargé<br />
function onDeviceReady() {<br />
window.plugins.hellojs.sayHello(function(txt){<br />
alert(txt);<br />
}, null);<br />
}<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span><br />
<span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a> <span class="kw3">onload</span><span class="sy0">=</span><span class="st0">&laquo;&nbsp;onload()&nbsp;&raquo;</span>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span><br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div>
</div>
<p>&nbsp;</p>
<h2>Exemple plus complet</h2>
<p>Voici un exemple avec le listing des calendriers disponibles dans l’agenda :</p>
<p>Partie Java</p>
<div class="code">
<div class="java"><span class="kw1">package</span> <span class="co2">fr.objectif.demopg</span><span class="sy0">;</span></div>
</div>
<p><span class="kw1">import</span> <span class="co2">org.json.JSONArray</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.json.JSONException</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.json.JSONObject</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">org.json.JSONStringer</span><span class="sy0">;</span></p>
<p><span class="kw1">import</span> <span class="co2">android.database.Cursor</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">android.net.Uri</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">android.os.Build</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">android.util.Log</span><span class="sy0">;</span></p>
<p><span class="kw1">import</span> <span class="co2">com.phonegap.api.Plugin</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">com.phonegap.api.PluginResult</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">com.phonegap.api.PluginResult.Status</span><span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw1">class</span> CalendarPlugin <span class="kw1">extends</span> Plugin <span class="br0">{</span></p>
<p><span class="kw1">enum</span> CALENDAR_ACTION<span class="br0">{</span><br />
get<br />
<span class="br0">}</span><br />
@Override<br />
<span class="kw1">public</span> PluginResult execute<span class="br0">(</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> action, JSONArray data,<br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> callbackId<span class="br0">)</span> <span class="br0">{</span><br />
CALENDAR_ACTION act <span class="sy0">=</span> CALENDAR_ACTION.<span class="me1">valueOf</span><span class="br0">(</span>action<span class="br0">)</span><span class="sy0">;</span><br />
<span class="kw1">try</span><span class="br0">{</span><br />
<span class="kw1">switch</span><span class="br0">(</span>act<span class="br0">)</span><span class="br0">{</span><br />
<span class="kw1">case</span> get<span class="sy0">:</span><br />
<span class="kw1">return</span> getCalendars<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><br />
<span class="br0">}</span><span class="kw1">catch</span> <span class="br0">(</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> e<span class="br0">)</span> <span class="br0">{</span><br />
Log.<span class="me1">e</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;Calendar Plugin&nbsp;&raquo;</span>, e.<span class="me1">getMessage</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="kw1">return</span> <span class="kw1">new</span> PluginResult<span class="br0">(</span>Status.<span class="me1">ERROR</span>, e.<span class="me1">getMessage</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><br />
<span class="kw1">return</span> <span class="kw2">null</span><span class="sy0">;</span><br />
<span class="br0">}</span></p>
<p><span class="kw1">private</span> PluginResult getCalendars<span class="br0">(</span><span class="br0">)</span> <span class="kw1">throws</span> JSONException <span class="br0">{</span><br />
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">[</span><span class="br0">]</span> projection <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">[</span><span class="br0">]</span> <span class="br0">{</span> <span class="st0">&laquo;&nbsp;_id&nbsp;&raquo;</span>, <span class="st0">&laquo;&nbsp;name&nbsp;&raquo;</span>, <span class="st0">&laquo;&nbsp;displayname&nbsp;&raquo;</span> <span class="br0">}</span><span class="sy0">;</span><br />
Uri calendars <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span><br />
<span class="kw1">if</span> <span class="br0">(</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a>.<span class="me1">parseInt</span><span class="br0">(</span>Build.<span class="me1">VERSION</span>.<span class="me1">SDK</span><span class="br0">)</span> <span class="sy0">&gt;=</span> <span class="nu0">8</span><span class="br0">)</span><br />
calendars <span class="sy0">=</span> Uri.<span class="me1">parse</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;content://com.android.calendar/calendars&nbsp;&raquo;</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="kw1">else</span><br />
calendars <span class="sy0">=</span> Uri.<span class="me1">parse</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;content://calendar/calendars&nbsp;&raquo;</span><span class="br0">)</span><span class="sy0">;</span></p>
<p><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Acursor+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Cursor</span></a> managedCursor <span class="sy0">=</span> ctx.<span class="me1">managedQuery</span><span class="br0">(</span>calendars, projection, <span class="kw2">null</span>,<br />
<span class="kw2">null</span>, <span class="kw2">null</span><span class="br0">)</span><span class="sy0">;</span><br />
JSONArray returnArray <span class="sy0">=</span> <span class="kw1">new</span> JSONArray<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="kw1">while</span> <span class="br0">(</span>managedCursor.<span class="me1">moveToNext</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span><br />
JSONStringer stringer <span class="sy0">=</span> <span class="kw1">new</span> JSONStringer<span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span><br />
stringer.<span class="me1">object</span><span class="br0">(</span><span class="br0">)</span><br />
.<span class="me1">key</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;id&nbsp;&raquo;</span><span class="br0">)</span>.<span class="me1">value</span><span class="br0">(</span>managedCursor.<span class="me1">getString</span><span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="br0">)</span><br />
.<span class="me1">key</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;name&nbsp;&raquo;</span><span class="br0">)</span>.<span class="me1">value</span><span class="br0">(</span>managedCursor.<span class="me1">getString</span><span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="br0">)</span><br />
.<span class="me1">endObject</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span><br />
returnArray.<span class="me1">put</span><span class="br0">(</span><span class="kw1">new</span> JSONObject<span class="br0">(</span>stringer.<span class="me1">toString</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><br />
<span class="kw1">return</span> <span class="kw1">new</span> PluginResult<span class="br0">(</span>Status.<span class="me1">OK</span>, returnArray<span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><br />
<span class="br0">}</span></p>
<p>Pour la partie Javascript</p>
<div class="code">
<div class="javascript"><span class="kw2">var</span> CCalendar <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span><br />
CCalendar.<span class="me1">prototype</span>.<span class="me1">get</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">(</span>successCallback<span class="sy0">,</span> failureCallback<span class="br0">)</span> <span class="br0">{</span><br />
<span class="kw1">return</span> PhoneGap.<span class="me1">exec</span><span class="br0">(</span>successCallback<span class="sy0">,</span> failureCallback<span class="sy0">,</span><br />
<span class="st0">&#8216;CalendarPlugin&#8217;</span><span class="sy0">,</span>  <span class="st0">&#8216;get&#8217;</span><span class="sy0">,</span> <span class="br0">[</span><span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><span class="sy0">;</span>PhoneGap.<span class="me1">addConstructor</span><span class="br0">(</span><span class="kw2">function</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><br />
PhoneGap.<span class="me1">addPlugin</span><span class="br0">(</span><span class="st0">&#8216;calendar&#8217;</span><span class="sy0">,</span> <span class="kw2">new</span> CCalendar<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span><br />
PluginManager.<span class="me1">addService</span><span class="br0">(</span><span class="st0">&#8216;CalendarPlugin&#8217;</span><span class="sy0">,</span><br />
<span class="st0">&#8216;fr.objectif.demopg.CalendarPlugin&#8217;</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span><span class="kw2">function</span> onDeviceReady<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><br />
window.<span class="me1">plugins</span>.<span class="me1">calendar</span>.<span class="me1">get</span><span class="br0">(</span><span class="kw2">function</span><span class="br0">(</span>events<span class="br0">)</span><span class="br0">{</span><br />
<span class="kw2">var</span> div <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">(</span><span class="st0">&laquo;&nbsp;hello&nbsp;&raquo;</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="kw2">var</span> html <span class="sy0">=</span> <span class="st0">&laquo;&nbsp;&lt;select id=&#8217;calendarList&#8217;&gt;&nbsp;&raquo;</span><span class="sy0">;</span><br />
events.<span class="me1">forEach</span><span class="br0">(</span><span class="kw2">function</span><span class="br0">(</span>event<span class="br0">)</span><span class="br0">{</span><br />
html<span class="sy0">+=</span><span class="st0">&laquo;&nbsp;&lt;option id=&#8217;&nbsp;&raquo;</span><span class="sy0">+</span>event.<span class="me1">id</span><span class="sy0">+</span><span class="st0">&laquo;&nbsp;&#8216;&gt;&nbsp;&raquo;</span><span class="sy0">+</span>event.<span class="kw3">name</span><span class="sy0">+</span><span class="st0">&laquo;&nbsp;&lt;/option&gt;&nbsp;&raquo;</span><span class="sy0">;</span><br />
<span class="br0">}</span><span class="br0">)</span><span class="sy0">;</span><br />
div.<span class="me1">innerHTML</span> <span class="sy0">=</span> html <span class="sy0">+</span> <span class="st0">&laquo;&nbsp;&lt;/select&gt;&nbsp;&raquo;</span><span class="sy0">;</span><br />
<span class="br0">}</span><span class="sy0">,</span> <span class="kw2">null</span><span class="br0">)</span><span class="sy0">;</span><br />
<span class="br0">}</span></div>
</div>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html&text=Comment+%C3%A9crire+un+plugin+pour+PhoneGap" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html&title=Comment+%C3%A9crire+un+plugin+pour+PhoneGap&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html&title=Comment+%C3%A9crire+un+plugin+pour+PhoneGap" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=Comment+%C3%A9crire+un+plugin+pour+PhoneGap&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fphonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/phonegap-27_06_2011-79-102-comment-ecrire-un-plugin-pour-phonegap.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java vs .NET</title>
		<link>http://blog.objectif-informatique.fr/java-j2ee-20_06_2011-62-101-java-vs-net.html</link>
		<comments>http://blog.objectif-informatique.fr/java-j2ee-20_06_2011-62-101-java-vs-net.html#comments</comments>
		<pubDate>Mon, 20 Jun 2011 18:06:17 +0000</pubDate>
		<dc:creator>Julien DELOBEL</dc:creator>
				<category><![CDATA[Java J2EE]]></category>

		<guid isPermaLink="false">http://www.objectif-informatique.fr/wordpress/?p=62</guid>
		<description><![CDATA[Quelques notes de la présentation faite par Jean-Philippe Guigoux (.NET) et Nicolas De Loof (Java) au Breizhcamp de Rennes.]]></description>
			<content:encoded><![CDATA[<p>Quelques notes de la présentation faite par Jean-Philippe Guigoux (.NET) et Nicolas De Loof (Java) au Breizhcamp de Rennes. <strong>&laquo;&nbsp;On gagne plus à connaître les bonnes qualités de son ennemi, qu’à être instruit de ses fautes&nbsp;&raquo;</strong> (Proverbes Chinois)</p>
<p>Java, .Net, les deux frères ennemis ? En y regardant de près, les deux plateformes ont pas mal de choses en commun et de bonnes raisons pour s&#8217;inspirer l&#8217;une de l&#8217;autre sur les aspects qui marchent bien, ou de tirer des leçons de leurs erreurs respectives.</p>
<p>On commence la présentation sur un schéma détaillant la stack de Java et .NET. On remarque que la JVM et la CLR de .NET ont une architecture très semblable. Les interlocuteurs retracent l’histoire des plateformes sur plusieurs sujets: On est tous d’accord sur le fait que .NET 1.0 ne vaut rien face au Java de l’époque <img src='http://blog.objectif-informatique.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Round 1 : la persistance</strong></p>
<p><img src="http://www.objectif-informatique.fr/weblog/images/persis.PNG" alt="" /></p>
<p><strong>Round 2 : les POJO et POCO</strong></p>
<p>Dans cette section, pas grand-chose à dire. On a eu le droit à un bref historique :</p>
<p>JAVA :</p>
<p>EJB 1 puis EJB 2 pour ensuite laisser place à Spring ! Puis viens ensuite EJB 3 les injections de dépendance et les annotations.</p>
<p>.NET :</p>
<p>ADO.NET Entity Framework puis Linq to Entity. Ensuite 3 les injections de dépendance en.NET 2.0 (NInject,Unity,etc.) puis en .NET 4.0 (MEF) CDI intégré.</p>
<p><strong>Round 3 : les frameworks Orientés web</strong></p>
<p>JAVA :</p>
<p>On a l’embarras du choix ! Qui ne trouve pas sont framework préféré dans cette liste : JSF/Seam/Wicket/SpringMVC/Stripes/Struts/Tapestry/GWT/…</p>
<p>.NET :</p>
<p>On n’a pas le choix du framework vu que la plateforme est propriétaire, tous les outils sont intégrés dans Visual Studio. D’un coté ce n’est pas plus mal.</p>
<p>-ASP.NET Designer graphique</p>
<p>- Silverlight3, 4,5!(Silverlight2 # JavaFX2). Le point faible pour Java.</p>
<p><strong>Round 4 : les web services</strong></p>
<p>JAVA :</p>
<p>Au début des WS, nous avons seulement les RPC. Ensuite Java doit rattraper son retard car .NET a pris de l’avant et gère mieux les WS notamment avec le protocole SOAP en matière d’interopérabilité. Java crée donc JAX-RPC et la renomme plus tard JAX-WS car ce n’est plus du RPC ! Viens ensuite JAXB plus mature. Pour le REST nous avons JAX-RS.</p>
<p>.NET</p>
<p>-Les web Method</p>
<p>-WCF: framework de communication complet (RMI,SOAP,REST,JSON…)</p>
<p><strong>Round 5 : le Cloud</strong></p>
<p>JAVA :</p>
<p>Plusieurs plateformes disponibles :</p>
<p>-Google App Engine</p>
<p>-Amazon ElasticBeans</p>
<p>-RedHat</p>
<p>-CloudBees</p>
<p>Une standardisation est prévue dans JavaEE 7 tant attendu</p>
<p>.NET :</p>
<p>Une seule plateforme :<br />
-Azure</p>
<p>Il est intéressant de noter que 50% des applications hébergées sur Azure sont écrites en Java ou PHP (les autre 50% en .NET bien sur).</p>
<p><strong>Round 6 : les outils</strong></p>
<p>JAVA :</p>
<p>IDE : Eclipse,NetBeans,Idea…</p>
<p>Build: Maven,Ant,Gradle</p>
<p>Intégration continue: Jenkins,Hudson</p>
<p>Qualimétrie: Sonar</p>
<p>.NET: Encore une fois un seul outil ou devrais-je dire plutôt un seul produit : L’aspect propriétaire a ses avantages</p>
<p>Visual Studio 2010 :</p>
<p>Touts les outils sont intégrés même pour l’intégration continue(TFS). Pas de plugin ou autre chose à installer.</p>
<p><strong>Round 7 : langage supporté</strong></p>
<p>JAVA :</p>
<p>Java n’est pas juste un langage, c’est une plateforme !</p>
<p>-Jruby</p>
<p>-Jython</p>
<p>-Scala</p>
<p>-Groovy et bien d’autre !</p>
<p>.NET :</p>
<p>-IronRuby</p>
<p>-IronPython et quelque autre</p>
<p><strong>Round 8 : interoperabilité</strong></p>
<p>JAVA :</p>
<p>On aurait tendance à dire que Java est une plateforme « run everywhere ». D’après les interlocuteurs…pas vraiment (il suffit de porter une application JavaFX sur un autre OS pour voir sont comportement…l’appli ne se lance même pas !). Pareil pour JME, il faut limite une version spécifique pour chaque modèle de téléphone&#8230;</p>
<p>.NET : n’en parlons pas</p>
<p><strong>Conclusion</strong></p>
<p>.NET:</p>
<ul>
<li>Ecosystème OpenSource riche (Aforge)</li>
<li>F#,Async,Tinq,TPL</li>
<li>Force d’intégration (TFS)</li>
<li>Combien de temps pour un Linq en Java ?</li>
</ul>
<p>JAVA :</p>
<ul>
<li>Depuis la sortie de Java 6 (2006), gros coup de frein dans le monde Java :</li>
</ul>
<pre>      - Conflits politiques dans le JCP
      - Départ des spec-leads</pre>
<ul>
<li>Un nouveau lead apparait</li>
</ul>
<pre>      - JBoss via l’opensource et en collaboration avec le JCP
      - Oracle reprend la main et passe en force</pre>
<p>On a donc deux plateformes mâtures. Java avance avec des spécifications ce qui permet à plusieurs acteurs de créer des outils performant. Mais je trouve qu’il faudrait mieux un outil standard qui marche bien plutôt que d’avoir trop de choix.</p>
<p>.Net est propriétaire il n’y a donc pas de spécifications à implémenter. Un produit, Visual Studio 2010 embarque avec lui tout les outils nécessaires pour la création d’applications web.</p>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html&text=Java+vs+.NET" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html&title=Java+vs+.NET&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html&title=Java+vs+.NET" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=Java+vs+.NET&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fjava-j2ee-20_06_2011-62-101-java-vs-net.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/java-j2ee-20_06_2011-62-101-java-vs-net.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conférence &#8211; Cassandra (Présenté par Michaël Figuière)</title>
		<link>http://blog.objectif-informatique.fr/produit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html</link>
		<comments>http://blog.objectif-informatique.fr/produit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html#comments</comments>
		<pubDate>Mon, 20 Jun 2011 17:57:50 +0000</pubDate>
		<dc:creator>Cédric BEURTHERET</dc:creator>
				<category><![CDATA[Produit]]></category>

		<guid isPermaLink="false">http://www.objectif-informatique.fr/wordpress/?p=81</guid>
		<description><![CDATA[Haute disponibilité et élasticité avec Cassandra]]></description>
			<content:encoded><![CDATA[<p>Haute disponibilité et élasticité avec Cassandra. Cassandra est une base de données NoSQL peer-to-peer. C’est un projet d’Apache initialement créé par Facebook. Leur but était de pouvoir rechercher dans les messages de plus de 500 Millions d’utilisateurs. Il leur fallait alors une base de données assurant :</p>
<ul>
<li>Une faible latence</li>
<li>Une très haute disponibilité</li>
<li>Une scalabilité massive</li>
</ul>
<p>La version actuelle est la 0.8. Elle est stable et a déjà été déployée en production chez de nombreux “Grands du web”.</p>
<p><strong>Architecture</strong></p>
<p><img src="http://www.objectif-informatique.fr/weblog/images/Cassandra_Archi.png" alt="" /></p>
<p>Cassandra est composée d’un anneau de noeuds. et chacun des noeuds possède plusieurs réplicats.</p>
<p>L’organisation en anneau permet d’affecter un intervalle à chaque partition, facilitant ainsi les ajouts et suppressions d’instances. Les réplicas permettent de récupérer facilement d’une défaillance.</p>
<p>Chaque client a la connaissance de 1 ou n noeuds. S’il ne connait pas le noeud auquel il doit réellement se connecter, il s’adresse à un des noeuds connus et ce dernier agit alors en tant que proxy et redirige l’information au destinataire.</p>
<p><strong>Gestion des défaillances</strong></p>
<p>Plusieurs mécanismes sont mis en place à fin de résister aux défaillances:</p>
<ul>
<li>Mécanisme d’anti-entropie, assurant des réplicas identiques</li>
<li>Hinted-Handoff stocke les écritures pendant l’absence d’un noeud (comme une file de message). Lorsque le noeud redevient disponible, les requêtes lui sont transmises.</li>
</ul>
<p><strong>Stockage sur disque</strong></p>
<p>L’écriture séquentielle sur disque est le plus efficace. Cassandra assure cela en chargeant d’abord les requêtes dans la mémoire du noeud et les exécute lorsqu’il y en a un certain nombre. En même temps, afin d’être sûr de ne pas perdre l’information, la requète est écrite dans un fichier de log (Ceci est une écriture séquentielle également puisqu’on l’ajoute en fin de fichier).</p>
<p><em>Note :</em> Ce principe est également vrai pour les SSD. Bien que cette technologie réduise considérablement les temps d’accès, l’écriture séquentielle reste plus efficace.</p>
<p><strong>ACID (atomicity, consistency, isolation, durability)</strong></p>
<p>Une base de données doit assurer plusieurs propriétés afin d’assurer la bonne exécution des transactions :</p>
<ul>
<li>Atomicité : Toutes les opérations d’une transaction sont effectuées, ou aucune.</li>
<li>Consistence : Validité des informations.</li>
<li>Isolation : Peut y avoir plusieurs transactions en même temps. Une transaction ne verra pas les modifications apportées par une autre.</li>
<li>Durabilité : Lorsqu’une transaction est faite, elle sera commitée. Après cela elle ne pourra plus être annulée.</li>
</ul>
<pre>   <em><strong>Le théorème CAP</strong></em></pre>
<p><img src="http://www.objectif-informatique.fr/weblog/images/Cassandra_CAP.png" alt="" /></p>
<p>Le théorème de CAP dit qu’une base de données ne peut assurer les trois propriétés suivantes en même temps :</p>
<ul>
<li>Consistance</li>
<li>Disponibilité</li>
<li>Tolérance aux défaillances</li>
</ul>
<p>Seules deux de ces propriétés peuvent être assurées. Cassandra assure à tout moment la disponibilité et la tolérance aux défaillances. La consistance des données n’est alors que partielle. L’inconsistance des données vient de la répartition et la réplication des données entre les noeuds. Afin de réduire le risque de récupération d’informations erronées, pour chaque lecture on doit respecter la formule : R+ W &gt; N où :</p>
<ul>
<li>R est le nombre de noeud lu</li>
<li>W le nombre de noeud écrit</li>
<li>N le nombre total de noeud</li>
</ul>
<p>Ainsi si une information incorrecte est lue, ce sera détecté et Cassandra effectuera la validation par rapport au moment de la création de l’information pour retourner la donnée valide. Le nombre d’écriture et de lecture attendues peut être paramétré, laissant ainsi le choix aux développeurs entre efficacité et consistance.</p>
<pre>   <em><strong>Atomicité et Isolation</strong></em></pre>
<p>Les données ne sont plus co-localisées et les transactions distribuées nuiraient à la disponibilité et aux performances, mais l’atomicité et l’isolation sont obtenus par opération sur une clé.</p>
<pre>   <em><strong>Durabilité</strong></em></pre>
<p>Les écritures multiples en mémoire apportent la durabilité. Cette dernière est renforcée par l’écriture sur un ou plusieurs disques.</p>
<p><strong>Modèle de données</strong></p>
<p><img src="http://www.objectif-informatique.fr/weblog/images/Cassandra_Colonnes.png" alt="" /></p>
<p>Chaque id de ligne correspond à une liste de couples clé-valeur.</p>
<p>Cassandra définit également des Super-colonnes dont les valeurs sont des collections de colonnes.</p>
<p>Le modèle de données de Cassandra est cependant peu intuitif, la compréhension des super-colonnes n’étant pas aisée.</p>
<p><strong>APIs disponibles</strong></p>
<p>Différentes API sont disponibles pour accéder à Cassandra :</p>
<ul>
<li>Thrift, un RPC développé par Facebook. Il est disponible pour les principaux langages.</li>
<li>Hector qui est un client de haut niveau pour Java. Il offre un mapping de type JPA.</li>
<li>PhpCassa qui est un client pour PHP et PyCassa qui est un client pour python</li>
</ul>
<p><strong>Cassandra en production</strong></p>
<p>Cassandra est en production chez de nombreux “Grands du web”. Il est cependant important de noter que les backups peuvent être problématiques avec des volumes importants et que la gestion du cluster requiert une équipe d’exploitation expérimentée. De plus son outillage est encore réduit.</p>
<p><strong>L’intérêt pour l’entreprise</strong></p>
<p>Un certain nombre d’avantages ont été avancés :</p>
<ul>
<li>Stockage polyglotte : une meilleure adéquation entre la BDD et les données</li>
<li>Scalabilité linéaire : être à même de répondre aux besoins les plus gourmands</li>
<li>Haute disponibilité : du multi-serveurs au multi-datacenters</li>
<li>Elasticité : une intégration naturelle à la logique du Cloud Computing</li>
<li>Curseur pour s’adapter : + de consistence ou + de fiabilité (Quorums)</li>
</ul>
<p>Site officiel : <a href="http://cassandra.apache.org/" hreflang="en">ici</a></p>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html&text=Conf%C3%A9rence+%26%238211%3B+Cassandra+%28Pr%C3%A9sent%C3%A9+par+Micha%C3%ABl+Figui%C3%A8re%29" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html&title=Conf%C3%A9rence+%26%238211%3B+Cassandra+%28Pr%C3%A9sent%C3%A9+par+Micha%C3%ABl+Figui%C3%A8re%29&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html&title=Conf%C3%A9rence+%26%238211%3B+Cassandra+%28Pr%C3%A9sent%C3%A9+par+Micha%C3%ABl+Figui%C3%A8re%29" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=Conf%C3%A9rence+%26%238211%3B+Cassandra+%28Pr%C3%A9sent%C3%A9+par+Micha%C3%ABl+Figui%C3%A8re%29&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fproduit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/produit-20_06_2011-81-100-conference-cassandra-presente-par-michael-figuiere.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slide conferences Breizhcamp</title>
		<link>http://blog.objectif-informatique.fr/conferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html</link>
		<comments>http://blog.objectif-informatique.fr/conferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html#comments</comments>
		<pubDate>Mon, 20 Jun 2011 14:51:47 +0000</pubDate>
		<dc:creator>Julien DELOBEL</dc:creator>
				<category><![CDATA[Conférences Breizhcamp]]></category>

		<guid isPermaLink="false">http://www.objectif-informatique.fr/wordpress/?p=8</guid>
		<description><![CDATA[Le 17 juin a eu lieu le breizhcamp, une journée conférence organisée par les communautés techniques de Rennes. Cliquez ici pour accéder aux ressources. Partager]]></description>
			<content:encoded><![CDATA[<p>Le 17 juin a eu lieu le breizhcamp, une journée conférence organisée par les communautés techniques de Rennes. <a href="https://github.com/breizhjug/breizhcamp">Cliquez ici </a>pour accéder aux ressources.</p>
<div class="trackable_sharing"><div class="trackable_sharing_text"><b>Partager</b></div><a href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html" style="text-decoration: none; white-space: nowrap;" title="Facebook" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//facebook.png" alt="Facebook" width="16" height="16"></a> <a href="http://twitter.com/share?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html&text=Slide+conferences+Breizhcamp" style="text-decoration: none; white-space: nowrap;" title="Twitter" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//twitter.png" alt="Twitter" width="16" height="16"></a> <a href="mailto:?subject=Check out http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html" style="text-decoration: none; white-space: nowrap;" title="Email"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//email.png" alt="Email" width="16" height="16"></a> <a href="http://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html&ro=false&summary=&source=" style="text-decoration: none; white-space: nowrap;" title="Linkedin" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//linkedin.png" alt="Linkedin" width="16" height="16"></a> <a href="http://digg.com/submit?partner=addthis&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html&title=Slide+conferences+Breizhcamp&bodytext=" style="text-decoration: none; white-space: nowrap;" title="Digg" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//digg.png" alt="Digg" width="16" height="16"></a> <a href="http://www.delicious.com/save?v=5&noui&jump=close&url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html&title=Slide+conferences+Breizhcamp" style="text-decoration: none; white-space: nowrap;" title="Delicious" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=550,height=350'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//delicious.png" alt="Delicious" width="16" height="16"></a> <a href="http://www.reddit.com/login?dest=%2Fsubmit%3Furl=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html" style="text-decoration: none; white-space: nowrap;" title="Reddit" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=700,height=500'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//reddit.png" alt="Reddit" width="16" height="16"></a> <a href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html&title=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html" style="text-decoration: none; white-space: nowrap;" title="Stumbleupon" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=750,height=450'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//stumbleupon.png" alt="Stumbleupon" width="16" height="16"></a> <a href="http://www.tumblr.com/login?s=&t=Slide+conferences+Breizhcamp&u=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html&v=3&o=0" style="text-decoration: none; white-space: nowrap;" title="Tumblr" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=500,height=400'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//tumblr.png" alt="Tumblr" width="16" height="16"></a> <a href="http://posterous.com/share?linkto=http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html" style="text-decoration: none; white-space: nowrap;" title="Posterous" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=900,height=600'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//posterous.png" alt="Posterous" width="16" height="16"></a> <a href="http://www.ecreativeim.com/snailmail.php" style="text-decoration: none; white-space: nowrap;" title="Snailmail" target="_blank" onclick="_trackableshare_window = window.open(this.href,'share','menubar=0,resizable=1,width=310,height=310'); _trackableshare_window.focus(); return false;"><img align="absmiddle" src="http://blog.objectif-informatique.fr/wp-content/plugins/trackable-social-share-icons/buttons/f4//snailmail.png" alt="Snailmail" width="16" height="16"></a> <br /><div style="padding: 5px 0 0;"><fb:like href="http%3A%2F%2Fblog.objectif-informatique.fr%2Fconferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html" send="false" width="450" show_faces="false" font=""></fb:like></div><br /><g:plusone annotation="inline"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://blog.objectif-informatique.fr/conferences-breizhcamp-20_06_2011-8-99-slide-conferences-breizhcamp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

