<?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>Anthony Dahanne's blog &#187; java</title>
	<atom:link href="http://blog.dahanne.net/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dahanne.net</link>
	<description>Open Source Software, Java, Ruby, Agility</description>
	<lastBuildDate>Tue, 20 Jul 2010 13:11:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>G2Android 1.5.0 is available : major release !</title>
		<link>http://blog.dahanne.net/2010/07/20/g2android-1-5-0-is-available-major-release/</link>
		<comments>http://blog.dahanne.net/2010/07/20/g2android-1-5-0-is-available-major-release/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 13:09:29 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=368</guid>
		<description><![CDATA[Finally !
During a long period of calm, I finally rele [...]]]></description>
			<content:encoded><![CDATA[<p>Finally !<br />
During a long period of calm, I finally released a new version (with new features) of the Android client for remote galleries Gallery2 (your photos on your website), G2Android.<br />
If you have a look at the <a href="http://code.google.com/p/g2android/"> G2Android project homepage</a>, you will see that the following issues (bug and enhancements) have been closed :<br />
Version 1.5.0, 19th of July 2010 Major release</p>
<ul>
<li>issue #33  Enable uploaded photo title modification</li>
<li>issue #41  Malformed Gallery 2 URL leads to G2Android forced close</li>
<li>issue #37  Uploaded photo looses .jpg file extension</li>
<li>issue #42  Feature Suggestion: Provide automatic login when started</li>
<li> issue #20  Share via camera app?</li>
<li>issue #15  Enhancement: Add multiple photo uploading </li>
</ul>
<p>The major new feature is clearly the &laquo;&nbsp;add photo to gallery&nbsp;&raquo; feature : I created a new Activity, <a href="http://code.google.com/p/g2android/source/browse/trunk/g2android/src/net/dahanne/android/g2android/activity/UploadPhoto.java">UploadPhoto</a> , which can be called from 2 external intents : </p>
<p><a href="http://code.google.com/p/g2android/source/browse/trunk/g2android/AndroidManifest.xml">AndroidManifest.xml </a></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"> <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;activity</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;.activity.UploadPhoto&quot;</span> <span style="color: #000066;">android:label</span>=<span style="color: #ff0000;">&quot;@string/upload_photo_title&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;intent</span> -filter<span style="color: #000000; font-weight: bold;">&gt;</span></span>
                                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.intent.action.SEND&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
                                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;action</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.intent.action.SEND_MULTIPLE&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
                                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;category</span> <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.intent.category.DEFAULT&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
                                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;data</span> <span style="color: #000066;">android:mimeType</span>=<span style="color: #ff0000;">&quot;image/*&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
                        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/intent<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/activity<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>So now the user can send a new photo or a batch of photos from another application, the android gallery app for example; the big work was then to decode the URIs of the photos to find the photo file on the phone, and then send it to the gallery; also I had to make sure that the user is still connected to the gallery, if not, he must login again.</p>
<p>Also, the user is now able to take a picture and send it to his gallery, without leaving g2android; this has been done adding the camera permission in the <a href="http://code.google.com/p/g2android/source/browse/trunk/g2android/AndroidManifest.xml">AndroidManifest.xml </a>:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uses</span> -permission <span style="color: #000066;">android:name</span>=<span style="color: #ff0000;">&quot;android.permission.CAMERA&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/uses<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>This is the easy part <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Then, when your app receive a photo from the Camera, it does not receive an URI pointing to a photo file; nope, you get a Bitmap  object you have transform into a file, to be able to send it to the remote gallery : </p>
<p><a href="http://code.google.com/p/g2android/source/browse/trunk/g2android/src/net/dahanne/android/g2android/activity/UploadPhoto.java">UploadPhoto</a></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">                                                Bundle extras <span style="color: #339933;">=</span> intent.<span style="color: #006633;">getExtras</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                Bitmap bm <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
                                                <span style="color: #003399;">Object</span> o <span style="color: #339933;">=</span> extras.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;data&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>o <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> o <span style="color: #000000; font-weight: bold;">instanceof</span> Bitmap<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                                        bm <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Bitmap<span style="color: #009900;">&#41;</span> o<span style="color: #339933;">;</span>
                                                        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                                                                StringBuilder stringBuilder <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                stringBuilder.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>Settings
                                                                                .<span style="color: #006633;">getG2AndroidPath</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                stringBuilder.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                StringBuilder stringBuilderFileName <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                stringBuilderFileName.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>fileName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                stringBuilderFileName
                                                                                .<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">System</span>.<span style="color: #006633;">currentTimeMillis</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                stringBuilderFileName.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;.jpg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                stringBuilder.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>stringBuilderFileName<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                imageFromCamera <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">File</span><span style="color: #009900;">&#40;</span>
                                                                                stringBuilder.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                <span style="color: #003399;">FileOutputStream</span> fos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FileOutputStream</span><span style="color: #009900;">&#40;</span>
                                                                                imageFromCamera<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                bm.<span style="color: #006633;">compress</span><span style="color: #009900;">&#40;</span>CompressFormat.<span style="color: #006633;">JPEG</span>, <span style="color: #cc66cc;">100</span>, fos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                fos.<span style="color: #006633;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                fos.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                                                                mImageUri<span style="color: #339933;">=</span>Uri.<span style="color: #006633;">fromFile</span><span style="color: #009900;">&#40;</span>imageFromCamera<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                                fileName <span style="color: #339933;">=</span> stringBuilderFileName.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                                                        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">FileNotFoundException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                                                ShowUtils.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">alertFileProblem</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,<span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                                                ShowUtils.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">alertFileProblem</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>,<span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                                        <span style="color: #009900;">&#125;</span>
&nbsp;
                                                <span style="color: #009900;">&#125;</span></pre></div></div>

<p>I also optimized the application, issue #37 (Uploaded photo looses .jpg file extension) was in fact due to the fact that I re created the photo file before sending it; instead of using a projection of the URI to get its path on the phone :</p>
<p><a href="http://code.google.com/p/g2android/source/browse/trunk/g2android/src/net/dahanne/android/g2android/utils/UriUtils.java">UriUtils</a></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> getFileNameFromUri<span style="color: #009900;">&#40;</span>Uri uri, Activity activity<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> projection <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> MediaStore.<span style="color: #006633;">Images</span>.<span style="color: #006633;">ImageColumns</span>.<span style="color: #006633;">DISPLAY_NAME</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
                <span style="color: #003399;">String</span> fileName<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
                <span style="color: #003399;">Cursor</span> c <span style="color: #339933;">=</span> activity.<span style="color: #006633;">managedQuery</span><span style="color: #009900;">&#40;</span>uri, projection, <span style="color: #000066; font-weight: bold;">null</span>, <span style="color: #000066; font-weight: bold;">null</span>, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>c <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> c.<span style="color: #006633;">moveToFirst</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        fileName <span style="color: #339933;">=</span> c.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #000000; font-weight: bold;">return</span> fileName<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Also shipping with this new version, <a href="http://goapk.com">Chinese i18n thanks to the chinese android market, GoAPK</a> and also new art from <a href="http://www.gdl3d.com/">Dan</a>, who just posted a comment to the blog proposing to add new art; thanks again to you both ! You make the application richer !</p>
<p>So now, what remains to be done ? well, the compatibility with Gallery3, as the G3 remote API is almost stable now, thanks to the work of Bharat, Tim, and many others; a java implementation is already under work, I will check if I can use it instead of&#8230; re inventing the wheel !<br />
More details to come, for sure !</p>
<p>You can download G2Android from the Android Market, SlideMe, Applibs, etc.. and also from the <a href="http://code.google.com/p/g2android/"> G2Android project homepage</a><br />
.<br />
Enjoy this app as much as I enjoy working on it, and if you like it, don&#8217;t forget to flattr me <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2010/07/20/g2android-1-5-0-is-available-major-release/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Debugging any Java Application</title>
		<link>http://blog.dahanne.net/2010/06/03/debugging-any-java-application/</link>
		<comments>http://blog.dahanne.net/2010/06/03/debugging-any-java-application/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 18:18:47 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[outils]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=351</guid>
		<description><![CDATA[As long as you're using a java application (ie an appli [...]]]></description>
			<content:encoded><![CDATA[<p>As long as you&#8217;re using a java application (ie an application calling your JVM), you can enable the debug mode with these parameters :</p>
<p><code>-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y</code></p>
<p>So for example, if you want to debug an ant launch (launched via &laquo;&nbsp;ant -f myBuild.xml&nbsp;&raquo; for example), you simply have to set ANT_OPTS; on windows :</p>
<p><code>set ANT_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y</code></p>
<p>Another example, with JBoss :</p>
<p><code>set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y</code></p>
<p>and then you can debug your launch with Eclipse, for example, creating a new debug configuration (remote java application on port 8787) !<br />
Option : you can choose whether or not the application should wait for your debugger setting suspend to y or n.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2010/06/03/debugging-any-java-application/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Analyse de trames HTTP : les outils</title>
		<link>http://blog.dahanne.net/2009/12/10/analyse-de-trames-http-les-outils/</link>
		<comments>http://blog.dahanne.net/2009/12/10/analyse-de-trames-http-les-outils/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 09:31:01 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[outils]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=252</guid>
		<description><![CDATA[Régulièrement, je me trouve face au dilemme suivant : [...]]]></description>
			<content:encoded><![CDATA[<p>Régulièrement, je me trouve face au dilemme suivant :  &laquo;&nbsp;Mais qu&#8217;est ce que mon application a bien pu envoyer au serveur ?&nbsp;&raquo;<br />
Il existe des outils pour répondre à cette question , et voici ma sélection :</p>
<ul>
<li><a href="http://www.wireshark.org/">Wireshark </a>(anciennement ethereal) / Linux<br />
Cet outil, c&#8217;est le couteau suisse de l&#8217;analyse réseau; et pas simplement HTTP : il peut analyser les trames TCP, UDP et tout ce qu&#8217;il y a au dessus (HTTP, FTP, SMTP, etc&#8230;)</li>
<li><a href="http://www.pocketsoap.com/tcptrace/">TCPTrace</a> / Windows<br />
Comme son nom l&#8217;indique, il permet d&#8217;analyser les trames TCP : spécifier un port d&#8217;écoute sur votre machine locale, un port de destination, une hôte de destination, configurer votre client HTTP que vous désirez tester; et le tour est joué : tous vos échanges seront loggés !</li>
<li><a href="http://www.rexswain.com/httpview.html">HttpViewer</a> , en ligne<br />
Il ne permet que d&#8217;analyser les trames HTTP, mais son gros avantage c&#8217;est qu&#8217;il n&#8217;y a aucune installation à effectuer, c&#8217;est un outil en ligne !</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/12/10/analyse-de-trames-http-les-outils/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>G2Android version 1.2.1 : bug fixes</title>
		<link>http://blog.dahanne.net/2009/10/15/g2android-version-1-2-1-bug-fixes/</link>
		<comments>http://blog.dahanne.net/2009/10/15/g2android-version-1-2-1-bug-fixes/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 20:51:09 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=262</guid>
		<description><![CDATA[You can now download the last G2Android update, version [...]]]></description>
			<content:encoded><![CDATA[<p>You can now download the last <a title="G2Android download page" href="http://code.google.com/p/g2android/downloads/list">G2Android update, version 1.2.1</a>.<br />
What&#8217;s new ?</p>
<ul>
<li> No more automatic connection at startup, the user has to push a button to connect to the gallery</li>
</ul>
<ul>
<li> Galleries with port different than 80 now work</li>
</ul>
<ul>
<li> I18n : the app now provide new languages, today only <a title="G2Android english strings file" href="http://code.google.com/p/g2android/source/browse/trunk/g2android/res/values/strings.xml">english</a> and <a title="G2Android french strings file" href="http://code.google.com/p/g2android/source/browse/trunk/g2android/res/values-fr/strings.xml">french</a> are supported, I&#8217;m expecting the community to provide new translations</li>
</ul>
<p>That&#8217;s all folks, expect better UIs and possibility to download pictures from the gallery to the phone soon.<br />
Have fun browsing your galleries !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/10/15/g2android-version-1-2-1-bug-fixes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>G2Android version 1.2.0 : photos upload and albums creation !</title>
		<link>http://blog.dahanne.net/2009/08/29/g2android-version-1-2-0-photos-upload-and-albums-creation/</link>
		<comments>http://blog.dahanne.net/2009/08/29/g2android-version-1-2-0-photos-upload-and-albums-creation/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 01:33:12 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=241</guid>
		<description><![CDATA[I'm writing this small post just to indicate that the n [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m writing this small post just to indicate that the new version of the open source <a href="http://gallery2.menalto.com">Gallery2</a> client for the android platform, <a href="http://code.google.com/p/g2android/">G2Android</a>, is out !</p>
<p>Now, you can still see your albums and pictures, but you can also :</p>
<ul>
<li>upload photos</li>
<li>create new albums</li>
</ul>
<p>The ergonomy is not yet perfect, as you may have already noticed, even though almost everything is multi threaded (using AsyncTask), meaning the ui won&#8217;t freeze anymore; the next features will probably will allow the user to insert a photo to his gallery from every picture context on the android platform (declaring a &laquo;&nbsp;share image&nbsp;&raquo; intent)</p>
<p>Stay tuned !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/08/29/g2android-version-1-2-0-photos-upload-and-albums-creation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>G2Android : a gallery2 client for the android platform</title>
		<link>http://blog.dahanne.net/2009/08/16/g2android-a-gallery2-client-for-the-android-platform/</link>
		<comments>http://blog.dahanne.net/2009/08/16/g2android-a-gallery2-client-for-the-android-platform/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 14:58:31 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=225</guid>
		<description><![CDATA[I recently started a new open source project : G2Androi [...]]]></description>
			<content:encoded><![CDATA[<p>I recently started a new open source project : <a title="G2android : a gallery2 client for Android" href="http://code.google.com/p/g2android">G2Android</a>, for the android platform, and mainly for 3 reasons :</p>
<ul>
<li>The main reason I Started this project was because there isn&#8217;t yet any <a title="Gallery2 project page" href="http://gallery2.menalto.com" target="_blank">gallery2</a> clients for the android platform and I needed one to access my galleries where I share photos with my family and friends</li>
</ul>
<p>Gallery2 is an open source project to easily share your photos with your friends and family : you can install it on Php/MySql enabled server : be it a shared server or dedicates server; Gallery2 is maybe the most popular project in this category ! (I know, Picasa and FlickR exist but&#8230; I&#8217;m not the kind of guy to upload 7 Gb of photos to companies I don&#8217;t know and I don&#8217;t trust&#8230;)</p>
<p>Well, there&#8217;s a client for uploading photos to a gallery2, picpush, but it&#8217;s not open source and it&#8217;s loaded with ads&#8230; And you can&#8217;t browse photos&#8230;</p>
<ul>
<li>I wanted to start a new Android project, to know better this platform !</li>
<li>Iwanted to compete on the <a title="ADC" href="http://code.google.com/android/adc/" target="_blank">ADC (Android Developer Challenge) 2009</a> : given the current features, I&#8217;m not sure I have a chance to win the competition, but, hey, the important is to particpate as we isay !</li>
</ul>
<p>As of version 1.0, G2Android can browse albums and pictures, for more details, you can check out the <a title="G2Android Features" href="http://code.google.com/p/g2android/wiki/SupportedFeatures" target="_blank">Features page of G2Android</a></p>
<p>Version 1.1, which will be out soon, will allow you to browse private galleries, ie gallery2 installations which need a password.</p>
<p>The project is open source, GPL v.2, so you want to join in, feel free to contact me !</p>
<p>Finally, you can download G2Android from the Android Market : just type &laquo;&nbsp;G2Android&nbsp;&raquo; in your search or <a title="G2Android on the Android market" href="market://search?q=pname:net.dahanne.android.g2android">simply click on this link if you&#8217;re browsing this page with an Android device</a> .</p>
<p>You can also <a title="Download G2Android" href="http://code.google.com/p/g2android/downloads/list" target="_blank">download it directly from the G2Android Google code site.</a></p>
<p>Have fun with it, and feel free to <a title="G2Android bug tracker" href="http://code.google.com/p/g2android/issues/list" target="_blank">submit new issues on the bugtracker</a> if you encounter a bug !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/08/16/g2android-a-gallery2-client-for-the-android-platform/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Different ways to access HTTP resources from Android</title>
		<link>http://blog.dahanne.net/2009/08/16/how-to-access-http-resources-from-android/</link>
		<comments>http://blog.dahanne.net/2009/08/16/how-to-access-http-resources-from-android/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 14:35:05 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=227</guid>
		<description><![CDATA[In this article, I invite the reader to discover the di [...]]]></description>
			<content:encoded><![CDATA[<p>In this article, I invite the reader to discover the different methods to access http resources from the Android platform.<br />
These methods can be adapted to access web services (using REST) or simply to download files !</p>
<h3>First Method : getting an input stream given a simple url from Android using HttpURLConnection</h3>
<p>This method is the most basic one : it allows you, using the basic HttpUrlConnection, ( contained in java.net) to get an InputStream from an Url :</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">InputStream</span> downloadUrl<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">HttpURLConnection</span> con <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">URL</span> url<span style="color: #339933;">;</span>
		<span style="color: #003399;">InputStream</span> is<span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			url <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">URL</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			con <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">HttpURLConnection</span><span style="color: #009900;">&#41;</span> url.<span style="color: #006633;">openConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			con.<span style="color: #006633;">setReadTimeout</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10000</span> <span style="color: #666666; font-style: italic;">/* milliseconds */</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			con.<span style="color: #006633;">setConnectTimeout</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">15000</span> <span style="color: #666666; font-style: italic;">/* milliseconds */</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			con.<span style="color: #006633;">setRequestMethod</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;GET&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			con.<span style="color: #006633;">setDoInput</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			con.<span style="color: #006633;">addRequestProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Referer&quot;</span>, <span style="color: #0000ff;">&quot;http://blog.dahanne.net&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// Start the query</span>
			con.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			is <span style="color: #339933;">=</span> con.<span style="color: #006633;">getInputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #666666; font-style: italic;">//handle the exception !</span>
			e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> is<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>You can also use the Post method, sending data in the HTTP POST payload :</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">InputStream</span> downloadUrl<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #003399;">InputStream</span> myInputStream <span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		StringBuilder sb <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #666666; font-style: italic;">//adding some data to send along with the request to the server</span>
		sb.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;name=Anthony&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">URL</span> url<span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			url <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">URL</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">HttpURLConnection</span> conn <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">HttpURLConnection</span><span style="color: #009900;">&#41;</span> url.<span style="color: #006633;">openConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			conn.<span style="color: #006633;">setDoOutput</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			conn.<span style="color: #006633;">setRequestMethod</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;POST&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">OutputStreamWriter</span> wr <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">OutputStreamWriter</span><span style="color: #009900;">&#40;</span>conn
					.<span style="color: #006633;">getOutputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #666666; font-style: italic;">// this is were we're adding post data to the request</span>
                        wr.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span>sb.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			wr.<span style="color: #006633;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			myInputStream <span style="color: #339933;">=</span> conn.<span style="color: #006633;">getInputStream</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			wr.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #666666; font-style: italic;">//handle the exception !</span>
			Log.<span style="color: #006633;">d</span><span style="color: #009900;">&#40;</span>TAG,e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
                <span style="color: #000000; font-weight: bold;">return</span> myInputStream<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>But there are better ways to achieve that, using Apache HttpClient, included in android.jar (no need to add another jar, it&#8217;s included in android core)</p>
<h3>Second Method : getting an input stream given a simple url from Android using HttpClient</h3>
<p>Why is it a better to do it ? because the simpler, the better ! See by yourself :</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">InputStream</span> getInputStreamFromUrl<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">InputStream</span> content <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			HttpGet httpGet <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HttpGet<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			HttpClient httpclient <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DefaultHttpClient<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// Execute HTTP Get Request</span>
			HttpResponse response <span style="color: #339933;">=</span> httpclient.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span>httpGet<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			content <span style="color: #339933;">=</span> response.<span style="color: #006633;">getEntity</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getContent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">//handle the exception !</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> content<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>But you maybe wondering if it&#8217;s still easy with HTTP Post method ? You won&#8217;t be deceived !</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">InputStream</span> getInputStreamFromUrl<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> url<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">InputStream</span> content <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
          		HttpClient httpclient <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DefaultHttpClient<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			HttpPost httpPost <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HttpPost<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003399;">List</span> nameValuePairs <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #666666; font-style: italic;">//this is where you add your data to the post method</span>
                        nameValuePairs.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BasicNameValuePair<span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">&quot;name&quot;</span>, <span style="color: #0000ff;">&quot;anthony&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			httpPost.<span style="color: #006633;">setEntity</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> UrlEncodedFormEntity<span style="color: #009900;">&#40;</span>nameValuePairs<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// Execute HTTP Post Request</span>
			HttpResponse response <span style="color: #339933;">=</span> httpclient.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span>httpPost<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			content <span style="color: #339933;">=</span> response.<span style="color: #006633;">getEntity</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getContent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		        <span style="color: #000000; font-weight: bold;">return</span> content<span style="color: #339933;">;</span>
	        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>But what if you want to read a cookie from the response ? And how can you send a cookie back to the server for the next request ?</p>
<h3>Reading / Sending a cookie along with the requests</h3>
<p>Using Apache HttpClient, it&#8217;s easy to retrieve cookies ! Everything is in the headers after all !</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>...<span style="color: #009900;">&#93;</span>
Cookie sessionCookie <span style="color: #339933;">=</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
HttpResponse response <span style="color: #339933;">=</span> httpclient.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span>httpPost<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Header<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> allHeaders <span style="color: #339933;">=</span> response.<span style="color: #006633;">getAllHeaders</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
CookieOrigin origin <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> CookieOrigin<span style="color: #009900;">&#40;</span>host, port,path, <span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Header header <span style="color: #339933;">:</span> allHeaders<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">List</span> parse <span style="color: #339933;">=</span> cookieSpecBase.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>header, origin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Cookie cookie <span style="color: #339933;">:</span> parse<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// THE cookie</span>
				<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>cookie.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>COOKIE_I_WAS_LOOKING_FOR<span style="color: #009900;">&#41;</span>
						<span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> cookie.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> cookie.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					sessionCookie <span style="color: #339933;">=</span> cookie<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>To send a cookie along with your request, keep it simple :</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">HttpPost httpPost <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HttpPost<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
CookieSpecBase cookieSpecBase <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> BrowserCompatSpec<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">List</span> cookies <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
cookies.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>sessionCookie<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">List</span> cookieHeader <span style="color: #339933;">=</span> cookieSpecBase.<span style="color: #006633;">formatCookies</span><span style="color: #009900;">&#40;</span>cookies<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// Setting the cookie</span>
httpPost.<span style="color: #006633;">setHeader</span><span style="color: #009900;">&#40;</span>cookieHeader.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>What about the resulting InputStream ? You definitely want to transform it into a String or an Drawable (to set it to an ImageView for example !) don&#8217;t you ?</p>
<h3>Converting the InputStream into a Drawable in Android</h3>
<p>The Drawable class already handles that for you :</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Drawable d <span style="color: #339933;">=</span> Drawable.<span style="color: #006633;">createFromStream</span><span style="color: #009900;">&#40;</span>myInputStream, <span style="color: #0000ff;">&quot;nameOfMyResource&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Converting the InputStream into a String in Android</h3>
<p>This is some classic java stuff (don&#8217;t tell about how easier it is in Ruby.. I know <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  &#8230; but hey ! Java SE7 at the rescue with NIO !!! maybe one day in 2010 ! )</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">BufferedReader</span> rd <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedReader</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">InputStreamReader</span><span style="color: #009900;">&#40;</span>myInputStreamToReadIntoAString<span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">4096</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">String</span> line<span style="color: #339933;">;</span>
StringBuilder sb <span style="color: #339933;">=</span>  <span style="color: #000000; font-weight: bold;">new</span> StringBuilder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>line <span style="color: #339933;">=</span> rd.<span style="color: #006633;">readLine</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		sb.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
rd.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">String</span> contentOfMyInputStream <span style="color: #339933;">=</span> sb.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
&nbsp;
That<span style="color: #0000ff;">'s it folks ! If you have any other methods to achieve these goals, feel free to share them sending a comment !</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/08/16/how-to-access-http-resources-from-android/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Jboss and java.lang.OutOfMemoryError: PermGen space</title>
		<link>http://blog.dahanne.net/2009/08/12/jboss-and-java-lang-outofmemoryerror-permgen-space/</link>
		<comments>http://blog.dahanne.net/2009/08/12/jboss-and-java-lang-outofmemoryerror-permgen-space/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 15:14:50 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=212</guid>
		<description><![CDATA[Once again, this infamous exception blew at my face whe [...]]]></description>
			<content:encoded><![CDATA[<p>Once again, this infamous exception blew at my face when starting JBoss 4.2.3.GA today !<br />
In fact, JBoss had to deploy 2 wars, one of them being a Web Service deploying war.<br />
This exception occurred for one simple reason : the permgenspace is where class properties, such as methods, fields, annotations, and also static variables, etc. are stored in the Java VM, but this space has the particularity to not being cleaned by the garbage collector.<br />
So if your webapp uses or creates a lot of classes (I&#8217;m thinking dynamic generations of classes), chances are you met this problem.<br />
Here are some solutions that helped me get rid of this exception :</p>
<ul>
<li>-XX:+CMSPermGenSweepingEnabled : this setting enables garbage collection in the permgenspace</li>
<li>-XX:+CMSClassUnloadingEnabled : allows the garbage collector to remove even classes from the memory</li>
<li><span style="font-size: x-small;">-XX:PermSize=64M<span> </span> -XX:MaxPermSize=128M : raises the amount of memory allocated to the permgenspace</span></li>
</ul>
<p>These options must be included in the JAVA_OPTS part of your Jboss run.bat or run.sh startup file.</p>
<p>Thank you <a href="http://www.linkedin.com/pub/stephane-malbequi/1/512/538" target="_blank">Stephane</a> for giving me the solution !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/08/12/jboss-and-java-lang-outofmemoryerror-permgen-space/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Eclipse Galileo 3.5 : problèmes de connexion à travers un proxy&#8230;</title>
		<link>http://blog.dahanne.net/2009/07/01/eclipse-galileo-3-5-problemes_proxy/</link>
		<comments>http://blog.dahanne.net/2009/07/01/eclipse-galileo-3-5-problemes_proxy/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 09:10:17 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=175</guid>
		<description><![CDATA[En installant Eclipse Galileo, sur un poste de travail  [...]]]></description>
			<content:encoded><![CDATA[<p>En installant Eclipse Galileo, sur un poste de travail en entreprise (donc utilisant derrière un proxy pour l&#8217;accès à internet) j&#8217;ai rencontré quelques problèmes pour me connecter aux update sites (via Help -&gt; install new software&#8230;).<br />
En fait, même en ayant bien régler les coordonnées du proxy dans Window -&gt; Preferences -&gt; general-&gt;network connections , dès que j&#8217;essayais d&#8217;installer des plugins via l&#8217;update manager, j&#8217;avais l&#8217;erreur suivante : (à peu près) :<br />
<code>!ENTRY org.eclipse.core.net 1 0 2009-04-16 18:12:18.427<br />
!MESSAGE System property socksProxyPort is not set but should be .<br />
</code><br />
Pas génial&#8230;<br />
EN fait, le bug est référencé sur cette page :</p>
<p>https://bugs.eclipse.org/bugs/show_bug.cgi?id=281472#c7</p>
<p>et en particulier, le moyen de contournement, à savoir ne pas utiliser Apache HTTPClient pour se connecter au réseau se trouve sur cette page :</p>
<p>http://wiki.eclipse.org/ECF_Filetransfer_Support_for_NTLMv2_Proxies</p>
<p>Il suffit de modifier son eclipse.ini et rajouter les valeurs suivantes :</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">-Dorg.eclipse.ecf.provider.filetransfer.excludeContributors<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">org.eclipse.ecf.provider.filetransfer.httpclient</span>
-Dhttp.proxyPort<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">8080</span>
-Dhttp.proxyHost<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">myproxy</span>
-Dhttp.proxyUser<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">mydomain\myusername</span>
-Dhttp.proxyPassword<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">mypassword</span>
-Dhttp.nonProxyHosts<span style="color: #000066; font-weight:bold;">=</span><span style="color: #000066; font-weight:bold;"><span style="color: #660066;">localhost|127.0.0.1</span></span></pre></div></div>

<p>Vous n&#8217;etes pas obligés de rajouter un utilisateur/mot de passe si votre proxy n&#8217;en a pas besoin.<br />
<strong>Attention ! bien placer ces propriétés juste en dessous de -vmargs !</strong><br />
Ainsi, au prochain redémarrage, vous aurez accès aux update sites eclipse à travers votre proxy (malgré 1 message d&#8217;erreur la première fois !)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/07/01/eclipse-galileo-3-5-problemes_proxy/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Jazoon 09 : third and last day, Thursday 25th of June</title>
		<link>http://blog.dahanne.net/2009/06/25/jazoon-09-third-and-last-day-thursday-25th-of-june/</link>
		<comments>http://blog.dahanne.net/2009/06/25/jazoon-09-third-and-last-day-thursday-25th-of-june/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 20:35:15 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jazoon 09]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=170</guid>
		<description><![CDATA[Vous pouvez lire cet article en français sur le blog d [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.valtech.fr/wordpress/2009/06/25/jazoon-3eme-et-dernier-jour-jeudi-25-juin/">Vous pouvez lire cet article en français sur le blog de valtech.</a></p>
<h3>The Changing Nature of Enterprise Java Application Development, 9:00 &#8211; 9:45 by Adrian Colyer</h3>
<p>During his talk, the speaker described the audience the future of a Java platform, because it is actually going to be there for a long time now.<br />
He mentioned the dynamic languages compatible with the JVM : Groovy, JRuby, Scala, and Clojure.<br />
He mainly focused on Groovy (which belongs to SpringSource by the way), even if he was not sure if whether JRuby or Groovy would win the &laquo;&nbsp;war of dynamic languages&nbsp;&raquo;.<br />
For the web platform, he mentioned Grails, built on top of Groovy, Rails running on top of Ruby, and Lift built on top of Scala.<br />
He finished his talk introducing OSGi and Spring DM; the future of enterpise is application may be in the cloud : easily to deploy and scale applications are to come.</p>
<h3>The android runtime environment, 10:30 &#8211; 11:20, by Joerg Pleumann</h3>
<p>The speaker first made an introduction to the Android system, as a platform competing windows mobile and palm.<br />
More technically speaking, it is based on a Linux kernel (along with necessary drivers : display, camera, sound, etc&#8230;).<br />
On top of it come the Android Runtime and libraries; the talk is about the Android Runtime and its Dalvik VM.<br />
Dalvik VM : CPU between 250 and 500 MHz, RAM >=64 (equivalent to a 1999 PC), but low power consumption is critical.<br />
The Dalvik VM is really efficient, using explicit registers to keep temporary values: the immediate benefit is the number of lines of the bytecode resulting from the DalvikVM compilation : nearly 30% less than a standard VM compilation.<br />
A dex file (Dalvik Executable) contains several files, and is not compressed.<br />
JNI is ready, a sdk for using JNI is about to come out in the next days; also an Android Debug Bridge is available from the beginning.<br />
The core libraries<br />
dalvik vm specific libraries : dalvik.*<br />
java compatibility libraries : java.* and javax.*<br />
and some apache libraries(mainly for http) : org.apache.*<br />
The core libraries are partly taken from Apache Harmony (a JDK implementation by Apache), partly written from scratch; and some of them have been optimized (using JNI)<br />
The core libraries are mostly compatible to a subset of J2SE 5.0.<br />
JDBC 2.0 is supported, but the SQLite driver is limited., but one can use the alternative in android.database.sqlite which are better integrated.<br />
To conclude with, with Android you can reuse your java knowledge and tools.</p>
<h3>Android Application Model, 11:30 &#8211; 12:20, by Dominik Gruntz</h3>
<p>4 main components :activities, services, content providers and broadcast receivers.<br />
A single class, uses intents to communicate with the other activities; when you launch an activity, you can (or not) expect a result; if this is the case, the method onIntentResult will be called.<br />
You can also define intent filters to describe the intents an activity can handle.<br />
An intent specification is on its way : http://www.openintents.org<br />
An application is packaged using an APK (Android package).<br />
Every activity has a lifecycle containing 4 steps : new, running, paused,  stopped, killed and the corresponding methods (onCreate, onStop etc..)<br />
For each activity a new process (with a single thread) is created.<br />
The Looper.loop() dispathes the actions to a queue.<br />
If an activity does not conume events in 5sec, the system issue a warning message.<br />
A service is running background and can communicate with an activity (in process if it&#8217;s the same application (APK)) or via AIDL.<br />
Finally, a content provider is the only way to share date between  Android applications; it can using SQLite, a file, or a remote storage. </p>
<h3>Scalable Agile Web Development: REST meets JCR meets OSGI, by Michael Marth</h3>
<p>JCR : JSR 270 for accessing content repository : located on a file or database; can be versioned; node ahave read/write group properties, etc&#8230;<br />
Apache Sling is a web framework, on top of REST/Scripting (Ruby, Groovy, etc&#8230;)/OSGi(in this case Apache Felix Container, to switch on/off part of the frameework live)/JCR.<br />
So basically Apache Sling allows the user to create/edit/read/update content in a restful manner (http methods), the data being created is then stored on the JCR repository, organized in a very similar WebUrlFriendly way (and then you can manipulate the data through rest or webdav and so on, thanks to JCR)<br />
The demo was really smooth and interesting !</p>
<h3>The charm of Mockito: Test Spies in action, 14:30 &#8211; 15:20, by Szczepan Faber</h3>
<p>The speaker begins asking who uses JMock : 2 or 3 people among an audience of 60 people, half of the audience using EasyMock.<br />
So let&#8217;s start with EasyMock : coding in TDD a dictionnary, (and its history) depending on a translator : the translator is mocked.<br />
With easymock the speaker keeps it old fadhioned : createMock/expect/replay/assert/verify , (his test extends Assert) and then refactor a bit in the @Before and @After test methods, nothing special here.<br />
Then Mockito : mock/when/assert/verify : it&#8217;s a lighter syntax indeeed!<br />
Szczepan insisted on the fact that usually developers using easymock create replayAll and verifyAll methods called in the @After method; which make Easymok fail when many behaviours are attached.<br />
The speaker uses BDD style template (given/when/then) in eclipse, when creating a test.<br />
Mockito eases the use of a given/when/then syntax when writing a test.<br />
Has good point of failure ?<br />
The failure trace in mockito is linked to the source code and more explicit about the error, it does not whow internal classes exceptions<br />
Mockito or mockito-like for python, flex, javascript, C++; there are mockito extensions<br />
He concluded with : &laquo;&nbsp;Do TDD and write great tests with whatever tools that work for you&nbsp;&raquo;<br />
May the force be with you !</p>
<h3>Eclipse Galileo and JBoss Tools, 16:30 &#8211; 16:50, by Max Andersen</h3>
<p>Galileo (3.5) is a huge release.<br />
Must-sees : Eclipse Memory Analyser (to see which plugin consumes all the memory for example), using jmap<br />
XML and XSL editor is really better.<br />
P2 (eclipse update manager) works for real; you shouldn&#8217;t use dropins anymore (single zip files to unpackage in /plugins and /features), for offline installation plugins providers should suggest copies of the update site, then you may use P2 to explore these files, as if you were online).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/06/25/jazoon-09-third-and-last-day-thursday-25th-of-june/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jazoon 09 : First day, first sessions</title>
		<link>http://blog.dahanne.net/2009/06/23/jazoon-09-first-day-first-sessions/</link>
		<comments>http://blog.dahanne.net/2009/06/23/jazoon-09-first-day-first-sessions/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 08:55:08 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jazoon 09]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=157</guid>
		<description><![CDATA[The following sessions were given during Jazoon 09, on  [...]]]></description>
			<content:encoded><![CDATA[<p>The following sessions were given during <a href="http://jazoon.com/en/conference/tuesday.html">Jazoon 09, on Tuesday the 23rd of June 2009</a>, <a href="http://blog.valtech.fr/wordpress/2009/06/23/jazoon-09-sessions-du-mardi-23-juin/">vous pouvez lire la traduction en français sur le blog de Valtech</a></p>
<h3>James Gosling keynote : 9:50 to 10:45</h3>
<p>First a nice little video from Java One, introducing the history of Java ! Very funny how Java conquered the world !<br />
Then James Gosling begins his speech.<br />
Today there are more JREs installed than people on earth ! It can be be smart cards, desktops, phones&#8230; 6M Java developers today in the world &#8230; 15M JRE downloads / week.<br />
You can now view Java as &laquo;&nbsp;Learn One, Work everywhere&nbsp;&raquo; because it&#8217;s really spread everywhere now !<br />
James Gosling then describes the brazilian healthcare, where every piece of paper is now on the network : prescriptions, x rays, everything is now on the network (thanks to Java !), ebay, metropolitan networks cards, web apps, games&#8230; Java is everywhere !<br />
But the main thing is not java as the language, but the JVM that now hosts Ruby, Scala, JavaScript, etc&#8230;<br />
James then showed us a bit of java code : a servlet for Java EE6 running on GlashFish v3, changed, saved and instantly shown just refreshing the browser ! No more deployment bottleneck !<br />
He also introduced Netbeans, as the best IDE ! version 6.7 now integrates with project kenai, a sourceforge like (you can check in/out merge your files, etc&#8230; from Netbeans to kenai), also some better maven support.<br />
Java is also used in the real time world, even in a car that James turns into electric : a lincoln (lincvolt.org) which is hybrid, connected to the internet, running java code for measurement and control.<br />
Now down to the performance part :  Java is highly optimized, genrally beats C/C++, GC is a lot faster than malloc/free !<br />
Multithreading is the future of software designing : because the processors speed is not evolving anymore, we&#8217;ve got to think multicore !<br />
Java is also running on cellphones, JSR 248, Mobile Service Architecture aggregates all Java mobile specs.<br />
JDK7 will be modular (see Mark Reinhold&#8217;s blog), dynamic language support will be available too (JSR 292?); waiting for Java 7, there are still Java SE 6 updates : better browser and desktop integration are on their way !<br />
Of course, we got a few slides about JavaFX, which can run on desktops, mobile phones, set top boxes, etc&#8230;<br />
To finish his speech, James reminded us with all the java communities : netbeans.org, java.net, glassfish.org, etc&#8230;</p>
<h3>Java EE 6 11:00 &#8211; 11:50 by Roberto Chinnici from Sun</h3>
<p>Java EE6 was too complicated, so they decided to make it more easy to use, more powerful, and more flexible.<br />
That&#8217;s why they created the profiles, letting the users choose the features they need.<br />
For example the web profile includes everything for the web development, including the EJB 3.1 lite, and bean validation.</p>
<h4>Servlet 3.0</h4>
<p>New annotations @WebServlet, @WebFilter, @WebListener, the possibility to register new web components just adding them to WEB-INF/lib directory, a new async mode using just a single thread for many requests</p>
<h4>JAX-RS 1.1 : RestFul webservices</h4>
<p>This API is there to abstract low level HTTP details : using @GET and @POST (etc..) you can define your retrieval and creation REST operations, JAX-RS translates the XML to the java entities (and back) automatically for you (you can also use JSON)</p>
<h4>Bean Validation 1.0 (JSR-303)</h4>
<p>This API is here to validate fields (text inputs for example)<br />
Seems to be really verbose just to define constraints&#8230; We&#8217;ll see&#8230;</p>
<h4>EJB 3.1</h4>
<p>No intefaces anymore ! One source file per bean.<br />
New timer annotation @Schedule allowing some cron-like scheduling in the container : a great example provided is the case of a cache refreshing ! No more Mbeans called externally with crons, everything can be integrated in the application code !<br />
EJB 3.1 lite can run on Java SE, great for testing and also in a war file !<br />
Oups, we&#8217;re running out of time, the speaker skipped JPA 2.0</p>
<h3>&laquo;&nbsp;Design Patterns&nbsp;&raquo; in Dynamic Languages 12:00 &#8211; 12:50 by <a href="http://www.nealford.com">Neal Ford from ThoughtWorks</a> (nealford.com)</h3>
<p>After comparing mixing dynamic languages with whisky blending, Neal Ford reminded us about the history of Design Patterns : basically for &laquo;&nbsp;making C++ code suck less&nbsp;&raquo; !<br />
But the point is : the design pattern designed in 1994 are not always useful today : for example the iterator is quite complicated, whereas today in dynamic languages, like Ruby a collection.each{[x| puts x} is so much more&#8230; efficient !<br />
Command design pattern is already built in closures !<br />
The same for strategy, template, interpreter (the example showed how easy it is to implement a DSL in Groovy, defining new behaviors in the Integer class), decorator, recorder, adapter<br />
Then Neal described some other desgn pattern for dynamic languages : the null pattern (?. in groovy) and the aridifier pattern.<br />
To conclude with, Neal suggest that we should try the tools provided with the languages we&#8217;re using instead of blindly trying to copy the patterns designed for older, other languages !</p>
<h3>Gradle : A build system for Java 14:00 &#8211; 14:50, by Hans Dockter</h3>
<p>First the speaker reminds us of Ant and Maven.<br />
With Ant, it&#8217;s always been repetitive, with a lot of copy and paste when a new project starts, due to Ant limited domain model (resources, target, properties,)<br />
There is no place for listener in an Ant build&#8230;<br />
A gradle script can import old ant build scripts.<br />
With Gradle, you can call ant tasks, and even implement listeners on your ant task&#8230; An ant task called in a gradle scrip can even be aware of the next task that will be called !<br />
Maven, on its side is a build by convention framework, which has introduced dependency management.<br />
But Maven uses XML, and 25 lines of XML are required to launch a simple build !<br />
Maven uses transitive dependency whereas Gradle is able to skip tasks (which can be handy when a Maven dependency is broken&#8230;)<br />
Gradle aims to be a build language rather than a build framework; because when a framework does not implement a functionality, you spend your time fighting against the framework to make him do something it was not intended to do.<br />
You can define your maven build with a groovy script using gradle.<br />
With gradle, it becomes easy to define usually manual and entreprise specific tasks like release management or deployment.<br />
Grandle can use Apache Ivy or Maven dependencies, it can even deploy a build to a maven repository.<br />
There is also a Gradle Wrapper to start using Gradle without installing it : the Continuous integration machine will download Gradle for you and execute the gradle script (which is a shell script downloading gradle) !<br />
What&#8217;s next? Gradle 1.0 will be out in Autumn.<br />
Q&#038;A :<br />
What open source projects are already using Gradle ?<br />
Grails, but others are to come.</p>
<h3>Next Generation Enterprise Builds: Maven, Mercury, and Tycho (for OSGi builds) by Jason van Zyl from Sonatype</h3>
<h4>Maven 3.0 </h4>
<p>Better integration in IDEs, faster, rewritten artifact resolution system, etc&#8230;<br />
Maven 3.0 is more focused on integration tests, provides a new version of the plugin manager, a queryable lifecycle to make the tools able to predict what&#8217;s going to be done and also able to ask to execute a particular step.<br />
Maven 3.0 uses Mercury : a new repository and transport layer, that can be used with others systems (Ruby gems, Eclipse P2 dependency management)</p>
<h4>M2eclipse</h4>
<p>M2eclipse has also been improved, now m2eclipse won&#8217;t call every maven tasks on a a save action, it will only call the appropriate ones.<br />
The m2eclipse team would like the users to be able to resolve every maven operations from Eclipse,<br />
M2eclipse is now compatible with Flex (out by october 2009).</p>
<h4>Nexus</h4>
<p>Only 5% of the maven users use a repository manager.<br />
Nexus is also for binary sharing inside the enterprise, it a repository manager, it&#8217;s like a source control management, but for binaries !<br />
Nexus main advantage is also the caching system it provides.<br />
Nexus can be queryed through m2eclipse, Nexus API can be used through REST, which makes it very easy to use.</p>
<h4>Hudson</h4>
<p>For its next version, hudson will integrate :d rools workflow integration (with a workflow editor), a rest layer to query hudson, unifying hudson m2eclipse, nexus better maven integration</p>
<h3>Testing Zen 16:00 &#8211; 16:20 by Thomas Mueller, Day</h3>
<p>In this session Thomas gave us the reasons why we should test our code.<br />
Then he continued giving us an example of fuzz testing (data generation to test)<br />
Code coverage (with Emma) to find untested and dead code.<br />
Database testing is often hard : a pain to install&#8230; so you can use a Java SQL Database like HSQL (a good one), H2 (the best, and also the one the speaker is working on ! <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ) or Derby (the worse).</p>
<h3>Creating Performance Test Data with benerator, by Volker Bergmann</h3>
<p>Usually performance testers prefer testing with production data, but sometimes it is not possible (for privacy reasons or if the system is new).<br />
In those cases, you have to use a data generator, like Benerator that can create and anonymize data, to DB, file, LDAP,  JCR, etc&#8230;</p>
<p>To finish the day, we had a really nice speech from Neal Ford, about technology predictability, that was real fun !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/06/23/jazoon-09-first-day-first-sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Soumission du projet WikiPlacesAndroid pour le concours SFR JTD</title>
		<link>http://blog.dahanne.net/2009/04/26/soumission-du-projet-wikiplacesandroid-pour-le-concours-sfr-jtd/</link>
		<comments>http://blog.dahanne.net/2009/04/26/soumission-du-projet-wikiplacesandroid-pour-le-concours-sfr-jtd/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 21:52:59 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=137</guid>
		<description><![CDATA[Cà y est, aujourd'hui, comme le veut la tradition des  [...]]]></description>
			<content:encoded><![CDATA[<p>Cà y est, aujourd&#8217;hui, comme le veut la tradition des deadlines, tout s&#8217;est mis à planter, à ne plus marcher dans l&#8217;application que j&#8217;ai développé conjointement avec Romain, pour le concours <a href="http://www.sfrjtd.fr/content/wikiplacesandroid">SFR JTD, WikiPlacesAndroid</a>.<br />
Faut dire que j&#8217;ai voulu rajouter plein de fonctionnalités (upload d&#8217;images, redimensionnement d&#8217;images sur le téléphone) et là, des catastrophes à répétition : memory leaks sur le téléphone android qui vit très mal le redimensionnement d&#8217;images de 2MegaPixels, l&#8217;appli serveur Rails qui elle vit très mal la lecture des blobs en base de données MySQL, bref, un %*$ de Dimanche, comme on s&#8217;en passerait bien.<br />
Enfin, j&#8217;ai posté l&#8217;application pour le concours, avec du coup moins de fonctionnalités que prévu, en tout cas elle fonctionne et bug (presque) plus.<br />
Vous avez un téléphone Android ? Essayez donc notre application, ci jointe à ce billet !<br />
\!/ le serveur de l&#8217;application correspondant étant offline, vous ne pourrez pas&#8230; faire grand chose avec l&#8217;appli <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  !<br />
<a href="http://blog.dahanne.net/wp-content/uploads/wikiplacesandroid.apk">Télécharger WikiPlacesAndroid</a> (développée avec le SDK 1.1)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/04/26/soumission-du-projet-wikiplacesandroid-pour-le-concours-sfr-jtd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jazoon 09 : le programme officiel de la conférence</title>
		<link>http://blog.dahanne.net/2009/04/05/jazoon-09-le-programme-officiel-de-la-conference/</link>
		<comments>http://blog.dahanne.net/2009/04/05/jazoon-09-le-programme-officiel-de-la-conference/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 13:25:28 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jazoon 09]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=127</guid>
		<description><![CDATA[çà y est, il est en ligne !
Vous pouvez jeter un cou [...]]]></description>
			<content:encoded><![CDATA[<p>çà y est, il est en ligne !<br />
Vous pouvez jeter un coup d&#8217;oeil au programme de Jazoon 2009 (qui aura lieu fin Juin) en cliquant sur ce lien :<br />
<a href="http://jazoon.com/en/conference/schedule.html">http://jazoon.com/en/conference/schedule.html</a><br />
Je commence à élaborer mon planning pour cette semaine (bien que j&#8217;ai énormément de mal à faire mon choix, beaucoup de sujets sont très intéressants)</p>
<ul>
<li>Lundi (si j&#8217;y suis):  Glassfish</li>
<li>Mardi : Java EE6, groovy, Spring 3.0, GWT, iphone, maven , mobile java</li>
<li>Mercredi : hudson, securing ajax,jsf 2,mule, android</li>
<li>Jeudi : android, rest, mockito, openjdk</li>
</ul>
<p>çà va être épuisant je sens !<br />
Trop hâte d&#8217;y être !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/04/05/jazoon-09-le-programme-officiel-de-la-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Premiere application android déployée sur mon HTC Dream (G1)</title>
		<link>http://blog.dahanne.net/2009/03/22/premiere-application-android-deployee-sur-mon-htc-dream-g1/</link>
		<comments>http://blog.dahanne.net/2009/03/22/premiere-application-android-deployee-sur-mon-htc-dream-g1/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 16:02:04 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=120</guid>
		<description><![CDATA[Depuis le temps que je l'attendais !
Sorti le jour de  [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis le temps que je l&#8217;attendais !<br />
Sorti le jour de mon anniversaire (12 Mars) chez Orange France, le HTC Dream (ou G1) est motorisé par l&#8217;OS open source Android, démarré par Google il y a presque 3 ans.<br />
Et oui, il y a désormais une alternative aux mondes cloisonnés sur portable comme Iphone ou Windows Mobile, une alternative aussi aux limitations de J2ME : Android est arrivé !</p>
<h3>Ecriture de ma première application Android</h3>
<h4>Ce qu&#8217;il faut sur le poste de développement : </h4>
<p>De retour de vacances, je me dirige sur http://developer.android.com/sdk/1.1_r1/installing.html où je découvre que dans eclipse je peux installer le plugin de développement ADT, qui, une fois connectée au SDK installée sur ma machine (sous windows pour commencer <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  ) me permet d&#8217;intéragir plus facilement avec ce SDK.<br />
En résumé il vous faut :</p>
<ul>
<li>Eclipse 3.4 avec une JRE 6</li>
<li>Le plugin ADT téléchargé via le &laquo;&nbsp;Software updates&nbsp;&raquo; d&#8217;Eclipse</li>
<li>Le SDK Android</li>
</ul>
<h4>Ecriture du Hello Android : première application Android</h4>
<p>Google fournit un tutorial très bien fait qui permet de se familiariser avec le concept d&#8217;activité et de création de vues via des fichiers XML (çà me rappelle une mission çà &#8230;), à l&#8217;adresse : http://developer.android.com/guide/tutorials/hello-world.html<br />
Oups !  quand on (contrôle) clique sur du code Android (comme Activity.class par exemple), on se rend compte que les source sne sont pas fournies ! Plutôt dur à digérer quand on a l&#8217;habitude d&#8217;avoir les sources des frameworks que l&#8217;on utilise et que l&#8217;on sait qu&#8217;Android est un produit Open Source ! Heureusement, <a href="http://code.google.com/p/android/issues/detail?id=979">le &laquo;&nbsp;bug&nbsp;&raquo; est signalé</a> et en supprimant la librairie Android (android.jar) dans le projet Eclipse et en la ré important en précisant le chemin du code source  (<a href="http://drupalmodules.com/sources.zip ">téléchargeable ici</a>), on a accès au code source du framework !<br />
On lance un &laquo;&nbsp;Run&nbsp;&raquo; et on a le plaisir de voir l&#8217;application se lancer dans l&#8217;émulateur d&#8217;Android !</p>
<h4>Déploiement de l&#8217;application Android sur le HTC Dream</h4>
<p>Il faut tout d&#8217;abord <a href="http://dl.google.com/android/android_usb_windows.zip">télécharger et installer les drivers USB sur votre poste de développement</a>.<br />
Pour installer les pilotes, dézippez les dans le répertoire de votre choix, et connectez en USB votre téléphone (en ayant pris soin au préalable de le mettre en mode Debug USB dans Parametres -> Applications -> Développement); Windows va détecter votre téléphone et vous demandez d&#8217;installer les pilotes.<br />
On y est presque !<br />
Il n&#8217;y a plus qu&#8217;à déployer l&#8217;application, pour cela, retournez dans Eclipse, dans votre &laquo;&nbsp;Run Configuration&#8230;&nbsp;&raquo; qui lance votre application Android dans l&#8217;émulateur, sélectionner dans &laquo;&nbsp;Target&nbsp;&raquo; Selection &laquo;&nbsp;Manual&nbsp;&raquo;, cliquez sur &laquo;&nbsp;Run&nbsp;&raquo; un dialogue apparaît, sélectionnez votre téléphone, et regardez votre application se lancer sur votre téléphone portable toujours connecté en USB bien sûr !<br />
Maintenant, laissez place à votre imagination et codez !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/03/22/premiere-application-android-deployee-sur-mon-htc-dream-g1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Jazoon Cutting Edge</title>
		<link>http://blog.dahanne.net/2009/03/22/jazoon-cutting-edge/</link>
		<comments>http://blog.dahanne.net/2009/03/22/jazoon-cutting-edge/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 13:31:37 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jazoon 09]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=117</guid>
		<description><![CDATA[Lors de la conférence Jazoon 2009 à Zurich, auront li [...]]]></description>
			<content:encoded><![CDATA[<p>Lors de la <a href="http://jazoon.com">conférence Jazoon 2009 à Zurich</a>, auront lieu les Jazoon Cutting Edge, des présentations de 20 minutes sur des développements Java récents; si vous êtes intéressés pour donner une de ces présentations, <a href="http://jazoon.com/en/contribute.html">proposer votre présentation à Jazoon</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/03/22/jazoon-cutting-edge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jazoon 2009 : j&#8217;y serai !</title>
		<link>http://blog.dahanne.net/2009/02/28/jazoon2009-j-y-serai/</link>
		<comments>http://blog.dahanne.net/2009/02/28/jazoon2009-j-y-serai/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 22:58:09 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jazoon 09]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=108</guid>
		<description><![CDATA[Fin Juin 2009 aura lieu à Zürich une conférence inte [...]]]></description>
			<content:encoded><![CDATA[<p>Fin Juin 2009 aura lieu à Zürich <a href="http://jazoon.com">une conférence internationale sur Java, Jazoon</a>.<br />
La première fois que j&#8217;en ai entendu parler était début Février, à l&#8217;anniversaire du ParisJug.<br />
Je reviendrai sur cet événement d&#8217;ici fin Juin (c&#8217;est du 22 au 25 Juin plus précisément), pour le moment, je sais qu&#8217;en plus d&#8217;avoir des acteurs connus du monde de Java, ils organisent les <a href="http://jazoon.com/en/contribute/rookie.html">Jazoon Rookie</a>, réservé aux moins de 26 ans, qui pourront venir concourir en présentant un sujet technique pendant 20 min devant un jury (clotûre des inscriptions : 15 mars 2009)<br />
A suivre !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/02/28/jazoon2009-j-y-serai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retour sur le premier anniversaire du ParisJug</title>
		<link>http://blog.dahanne.net/2009/02/11/retour-du-parisjug-1-an-10-02-2009/</link>
		<comments>http://blog.dahanne.net/2009/02/11/retour-du-parisjug-1-an-10-02-2009/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 06:57:40 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=104</guid>
		<description><![CDATA[Ce Mardi soir 10 Février au soir, avait lieu le 1er an [...]]]></description>
			<content:encoded><![CDATA[<p>Ce Mardi soir 10 Février au soir, avait lieu le 1er anniversaire du Paris Jug, au <a href="http://www.fiap.asso.fr/">Fiap Jean Monnet</a>, précisément là où avait lieu<a href="http://www.xpday.fr/"> XP Days 2008</a>.<br />
Après une présentation de<a href="http://jazoon.com/"> Jazoon</a> et de<a href="http://www.javablackbelt.com/"> JavaBlackBelt</a> (et aussi du massage proposé aux juggeurs, en fond de salle !), Antonio Goncalvès revenait sur cette 1ere année de Paris Jug (en remerciant bien sur l&#8217;Isep où se rencontrent les juggeurs parisiens d&#8217;habitude).<br />
Il en a profité pour revenir sur quelques chiffres : plus de 1200 inscrits sur la mailing list &laquo;&nbsp;announce&nbsp;&raquo; et 200 sur la mailing list &laquo;&nbsp;coeur&nbsp;&raquo;; 15000 visiteurs sur les 7 derniers mois !<br />
David, le trésorier est revenu sur le fait que ParisJug est une association 1901, qui trouve son financement de plusieurs sponsors !<br />
A la fin de cette introduction, tous les &laquo;&nbsp;Jug Leaders&nbsp;&raquo; de France (et Luxembourg) sont montés sur la scène se présenter.</p>
<p>Oups ! problème technique, on passe à la présentation du <a href="http://wicket.apache.org/">framework Web Wicket</a> par Tarik Filiali Ansary.<br />
Wicket utilise uniquement du code Java pour définir ses pages, on fait la liaison entre le modèle et la vue dans une classe Java par exemple !<br />
On peut non seulement créer ses propres composants, par simple héritage (çà me fait penser à GWT çà d&#8217;ailleurs), mais on peut aussi rajouter des comportements à des composants.</p>
<p>A la fin de cette présentation technique, les jug leaders ont cette fois ci pu présenter leur activité et objectifs, dans une ambiance très décontractée ! : BreizhJug (60 participants en moyenne), RivieraJug (80 participants en moyenne, 1 mois d&#8217;existence), BordeauxJug (30 particiapans en moyenne), ToursJug (35 participants en moyenne), LorraineJug (tres récent, depuis le 29 Janvier 2009), YaJug (du Luxembourg, depuis 2006, 30 à 50 personne présentes par événement) JugToulouse (1ère soirée en Mars), Lyon Jug (1ère soirée en Avril), Nantes Jug (30 personnes en moyenne par soirée). </p>
<p>Un organisateur de Jazoon est venu présenter la conférence 2009 (22-25 Juin) , à Zurich compter 1100 € pour les 3 jours. (plutôt 700 euros si on s&#8217;y prend en avance et qu&#8217;on évoque ParisJug)<br />
Juste avant le buffet, a eu lieu une séance de quizz (j&#8217;ai d&#8217;ailleurs gagné un bouquin sur Flex et <a href="http://yannick.ameur.free.fr/">Yannick</a> un bouquin sur Java 6 SE !) et ensuite a été lancé la roue de la fortune JavaFX (!) pour gagner des licences IntelliJ Idea.</p>
<p>Après un buffet où les plus de 200 participants ont pu se retrouver, nous avons eu une présentation de<a href="http://parleys.com"> parleys.com</a> par le créateur de Devoxx; parleys.com (en Flex) qui contient des centaines de présentations techniques (avec vidéo et diapositives des présentations) de conférences comme Spring One, Devoxx, JavaOne, etc&#8230; Nous avons ensuite eu droit à la démonstration de parleys.com en Java FX (où l&#8217;on peut glisser l&#8217;applet sur le bureau, plutôt impressionnant), et enfin en GWT.</p>
<p>Avant de partir (il se faisait tard!) j&#8217;ai pu assister à la présentation de Java SE 7 : j&#8217;ai en l&#8217;occurrence retenu que </p>
<ul>
<li>les .getProp()!=null pourront etre etre remplacés par ?.getProp()</li>
<li>nouveau garbage collector par segmentation</li>
<li>simplifaction sur l&#8217;ecriture des génériques : HashMap<Integer>,List<String>> toto = new HashMap<>()</li>
<li>nouvelles annotations pour poser des contraintes sur des champs (email par exemple)</li>
</ul>
<p>etc&#8230; la présentation allait vite il faut dire difficile de tout voir !.</p>
<p>Dommage pour la présentation de JOGL à laquelle je n&#8217;ai pu assister (il se faisait tard&#8230; 22h45) !<br />
L&#8217;ambiance était vraiment bonne, le nombre de participants impressionnant (plus de 200 entre 20h et 23h !), et comme d&#8217;habitude, la qualité des interventions était de très bonne facture ! Joyeux anniversaire ParisJug !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/02/11/retour-du-parisjug-1-an-10-02-2009/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JavaCamp à Paris, édition 3, Samedi 31 Janvier !</title>
		<link>http://blog.dahanne.net/2009/01/25/javacamp-a-paris-edition-3-samedi-31-janvier/</link>
		<comments>http://blog.dahanne.net/2009/01/25/javacamp-a-paris-edition-3-samedi-31-janvier/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 20:34:11 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=97</guid>
		<description><![CDATA[Eric Lefèvre-Ardant et moi-même avons le plaisir de v [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ericlefevre.net">Eric Lefèvre-Ardant</a> et moi-même avons le plaisir de vous proposer un <a href="http://fr.wikipedia.org/wiki/BarCamp">BarCamp</a>, plus particulièrement un <a href="http://barcamp.org/JavaCampParis3">barcamp orienté sur le langage Java</a>, ce samedi 31 janvier !<br />
Cette journée (9h30-16h30) sera l&#8217;occasion d&#8217;échanger vos idées, vos interrogations, vos problématiques autour de Java avec vos pairs.<br />
Comme dans tout <a href="http://www.sachal.fr/2007/06/15/10-etapes-pour-organiser-un-barcamp-crystal-williams-vous-dit-tout/">Barcamp, vous êtes invités à présenter</a>, aussi vous pouvez venir parler de votre dernière trouvaille !<br />
Ce Barcamp étant situé dans <a href="http://fr.sun.com/aboutsun/location/index.jsp?loc=FR-PARIS">les locaux de Sun, à Paris</a>, vous pourrez choisir quels sont les sujets qui vous intéressent le plus et rejoindre les salles en traitant.</p>
<p>Un buffet vous sera également proposé pour la pause déjeuner, par les sponsors de l&#8217;événement : <a href="http://www.valtech.fr">Valtech</a> et <a href="http://fr.sun.com">Sun</a>.<br />
<a href="http://www.parisjug.org">ParisJug</a> est également partenaire de l&#8217;événement!<br />
N&#8217;hésitez à diffuser l&#8217;info autour de vous, et n&#8217;oubliez pas de <a href="http://barcamp.org/JavaCampParis3">vous inscrire à JavaCampParis3</a> !<br />
A Samedi !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/01/25/javacamp-a-paris-edition-3-samedi-31-janvier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Afterwork GWT du 17 Décembre 2008 chez Valtech</title>
		<link>http://blog.dahanne.net/2008/12/25/afterwork-gwt-du-17-decembre-2008-chez-valtech/</link>
		<comments>http://blog.dahanne.net/2008/12/25/afterwork-gwt-du-17-decembre-2008-chez-valtech/#comments</comments>
		<pubDate>Thu, 25 Dec 2008 09:52:10 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[meeting]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=80</guid>
		<description><![CDATA[La semaine dernière, avec Pascal, nous présentions un [...]]]></description>
			<content:encoded><![CDATA[<p>La semaine dernière, avec Pascal, nous présentions une seconde fois l&#8217;after work GWT (<a href="http://blog.valtech.fr/wordpress/2008/11/30/presentation-de-gwt-a-lafterwork-du-25-novembre-2008/">voir le post précédent</a> pour le 1er afterwork).</p>
<p>Si vous n&#8217;êtes pas très saumon fumé ni champagne, mais plutôt Eclipse et Widget, je vous propose de réveillonner avec notre présentation mise à jour, ainsi que les workspaces d&#8217;execices et de correction ! <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Ces workspaces sont utilisables sous windows (avec un JDK 5 minimum).</p>
<p>Pour n&#8217;avoir aucun problème, vous devrez installer gwt et gwtext  C:\dev, selon l&#8217;arborescence suivante (des chemins en dur sont présents dans les .launch entre autres) :</p>
<p><code>C:\dev\gwt\gwt-windows-1.5.3</code></p>
<p><code>C:\dev\gwt\gwtext-2.0.5</code></p>
<p>Pour Linux et MacOsX, le mieux est de récupérer les projets et de corriger les chemins de lancement (.launch).</p>
<p>Le succès était encore une fois au rendez vous, je remercie encore l&#8217;organisation côté Valtech Technology Consulting et côté Valtech Training !</p>
<p>Joyeux Noël à tous !</p>
<ul>
<li><a title="Présentation AfterWork GWT" href="http://blog.dahanne.net/wp-content/uploads/cours_du_soir_gwt_maj_15_12_2008.ppt">Présentation AfterWork GWT</a></li>
<li><a href="http://blog.dahanne.net/wp-content/uploads/workspaces_afterwork_gwt.zip">Workspace AfterWork GWT</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2008/12/25/afterwork-gwt-du-17-decembre-2008-chez-valtech/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Retour sur le ParisJug du 2 Novembre : GWT</title>
		<link>http://blog.dahanne.net/2008/11/11/retour-sur-le-parisjug-du-2-novembre-gwt/</link>
		<comments>http://blog.dahanne.net/2008/11/11/retour-sur-le-parisjug-du-2-novembre-gwt/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 16:17:33 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=77</guid>
		<description><![CDATA[La semaine dernière, je me suis rendu à la réunion P [...]]]></description>
			<content:encoded><![CDATA[<p>La semaine dernière, je me suis rendu à la réunion <a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20081104">ParisJug du 4 Novembre 2008, où GWT était à l&#8217;honneur.</a><br />
La séance se déroulait dans les locaux de l&#8217;Isep, dans le 6ème arrondissement, de 19h30 à 22h.<br />
Quand je suis arrivé, la salle était pleine, plus d&#8217;une centaine de personne était là, impressionnant !<br />
Dans un premier temps, nous avons eu une présentation de GWT par Didier Girard.<br />
Cette présentation couvrait pas mal de points clefs de GWT comme :<br />
*cross browser (même sur Wii et Ipod Nano, avec exemples à l&#8217;appui)<br />
*une démonstration Hello World, avec le debug dans la console GWT<br />
*l&#8217;intégration de JavaScript existant en &laquo;&nbsp;wrappant&nbsp;&raquo; (mot clef &laquo;&nbsp;native&nbsp;&raquo; et mis en commentaire du code Javascript)<br />
*l&#8217;image bundler pour économiser la bande passante<br />
*présentation de l&#8217;intégration avec Gears<br />
*integration javascript : JSNI : en commentaire avec le mot clef native, pour wrapper du code JavaScript existant dans GWT<br />
*plusieurs pointeurs ont été donnés : ongwt.com, muquit.com,obm.org, contactoffice.com, myerp.com, clarityaccounting.com, gwtphp.com (back end en php)<br />
Le présentateur a aussi précisé que Google allait de plus en plus utiliser GWT pour leurs projets, par exemple, Google Health utilise GWT<br />
Des questions réponses ont terminé cette présentation très intéressante et concise. </p>
<p>Ensuite, après une pause restauration, Jérôme Louvel nous a présenté un portage de restlet sur GWT.<br />
Présentation de REST : utilisation du protocole HTTP (et autres) : GET,PUT,DELETE et POST.<br />
Restlet présente une API qui permet de lancer des requêtes vers du SMTP (envoi de mails), POP3 (lire un mail), HTTP( charger une page web), d&#8217;une manière bien plus simple qu&#8217;avec l&#8217;api du JDK.<br />
Il est aussi possible de créer des serveurs avec la même API. (exemple du reverse proxy trivial à écrire)<br />
Restlet-GWT supporte JSON et XML, et dispose de toutes les propriétés client de Restlet.<br />
A contrario, GWT-RPC n&#8217;est pas ouvert : un client GWT-RPC communique avec une appli serveur développée pour GWT; Restlet-GWT n&#8217;a pas de contraintes de ce côté là.<br />
La démonstration consistait justement à la réécriture de l&#8217;exemple GWT Mail avec l&#8217;API GWT Restlet</p>
<p>C&#8217;était ma première soirée ParisJug, et les sujets et orateurs étaient très intéressants; d&#8217;ailleurs quand on voit l&#8217;affluence (plus de 150 personnes) il y a fort à croire que c&#8217;est souvent le cas !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2008/11/11/retour-sur-le-parisjug-du-2-novembre-gwt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
