<?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</title>
	<atom:link href="http://blog.dahanne.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dahanne.net</link>
	<description>Open Source Software, Java, Ruby, Agility</description>
	<lastBuildDate>Thu, 02 Sep 2010 02:37:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Asynchronous Tasks with Android</title>
		<link>http://blog.dahanne.net/2010/09/02/asynchronous-tasks-android/</link>
		<comments>http://blog.dahanne.net/2010/09/02/asynchronous-tasks-android/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 02:35:12 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=391</guid>
		<description><![CDATA[Tonight I gave a presentation at Android Montreal about [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight I gave a presentation at <a href="http://www.android-montreal.com/">Android Montreal</a> about the AsyncTasks API, for the Android platform.<br />
Although the main content was &laquo;&nbsp;said&nbsp;&raquo; during the presentation, you can download the support :</p>
<ul>
<li><a href="http://blog.dahanne.net/wp-content/uploads/asynctasks.odp">Asynchronous Tasks with Android (OpenDocument format)</a></li>
<li><a href="http://blog.dahanne.net/wp-content/uploads/asynctasks.ppt">Asynchronous Tasks with Android (PowerPoint format)</a></li>
<li><a href="http://blog.dahanne.net/wp-content/uploads/asynctasks.pdf">Asynchronous Tasks with Android (PDF format)</a></li>
</ul>
<p>or you can read it, <a href="http://www.slideshare.net/anthonydahanne/asynctasks">Asynchronous Tasks with Android on slideshare</a>.</p>
<p>If you want to compare the different ways to deal with multi threading on the android platform, <a href="http://github.com/anthonydahanne/asynctasksdemo">you can also have a look at the project I created on Github, AsyncTasksDemo</a>.<br />
Also, you can have a look at the source code of <a href="http://code.google.com/p/g2android/">G2Android</a>, in this application I use a lot of AsyncTasks to be able to run worker threads fetching remote content over HTTP (<a href="http://code.google.com/p/g2android/source/browse/trunk/g2android/src/net/dahanne/android/g2android/tasks/AddPhotosTask.java">you can particularly have a look at AddPhotosTask</a>)<br />
Many thanks to the Android Montreal volunteers for hosting my presentation! It&#8217;s a really nice event with bright developers !</p>
<h3>References :</h3>
<p>if you&#8217;re interested in the AsyncTask API, you MUST read those blog posts from Android developers :</p>
<ul>
<li><a href="http://android-developers.blogspot.com/2009/05/painless-threading.html">Painless threading</a>, by Romain Guy</li>
<li><a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">Multithreading For Performance</a>, by Gilles Debunne</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2010/09/02/asynchronous-tasks-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>3</slash:comments>
		</item>
		<item>
		<title>Encoder vos videos en Webm (vp8) avec ffmpeg sous Ubuntu</title>
		<link>http://blog.dahanne.net/2010/06/19/encoder-vos-videos-en-webm-vp8-avec-ffmpeg-sous-ubuntu/</link>
		<comments>http://blog.dahanne.net/2010/06/19/encoder-vos-videos-en-webm-vp8-avec-ffmpeg-sous-ubuntu/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 00:02:26 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[montage video]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[outils]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=356</guid>
		<description><![CDATA[Depuis la libération du codec VP8 (et de son conteneur [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis la libération du codec VP8 (et de son conteneur WebM) de ON2 technologies par Google en Mai 2010, la communauté open source (et les amateurs de video !) a trouvé le digne remplaçant de theora, finalement peu performant, et surtout un adversaire de poids face au codec video breveté et certainement pas standard h264.<br />
Cet article a pour but d&#8217;expliquer comment :</p>
<ul>
<li>installer ffmpeg avec le support de webm sur Ubuntu</li>
<li>encoder une vidéo au format webm</li>
<li>lire une vidéo au format webm</li>
</ul>
<h3>Installer ffmpeg avec le support de webm sur Ubuntu</h3>
<p>Pour cela, je vais reprendre en quasi intégralité cet<a href="http://www.webdevonlinux.fr/2010/06/ffmpeg-0-6-0-ajoute-le-support-du-codec-webm"> excellent article de Steph sur l&#8217;installation de ffmpeg avec support de Webm sur Ubuntu 10.04 (lucid Lynx)</a>.<br />
On enlève les versions originales de ffmpeg et eventuellement de  x264 :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> remove <span style="color: #c20cb9; font-weight: bold;">ffmpeg</span> x264 libx264-dev</pre></div></div>

<p>On met à jour le système de paquets et on installe les librairies nécessaires sur le système :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libfaad-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev</pre></div></div>

<p>Récupération des sources, compilation et installation de x264 (optionnel, si vous voulez aussi encoder en x264) sous forme de paquets pour votre système (checkinstall wrappe &laquo;&nbsp;make install&nbsp;&raquo; en installant en plus le binaire obtenu sous forme de paquets debian dans votre système)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span>
git clone git:<span style="color: #000000; font-weight: bold;">//</span>git.videolan.org<span style="color: #000000; font-weight: bold;">/</span>x264.git
<span style="color: #7a0874; font-weight: bold;">cd</span> x264
.<span style="color: #000000; font-weight: bold;">/</span>configure
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> checkinstall <span style="color: #660033;">--pkgname</span>=x264 <span style="color: #660033;">--pkgversion</span> <span style="color: #ff0000;">&quot;2:0.<span style="color: #780078;">`grep X264_BUILD x264.h -m1 | cut -d' ' -f3`</span>.<span style="color: #780078;">`git rev-list HEAD | wc -l`</span>+git<span style="color: #780078;">`git rev-list HEAD -n 1 | head -c 7`</span>&quot;</span> <span style="color: #660033;">--backup</span>=no <span style="color: #660033;">--default</span></pre></div></div>

<p>Récupération des sources, compilation et installation de VP8, librairie nommée libvpx sous forme de paquets pour votre système (checkinstall wrappe &laquo;&nbsp;make install&nbsp;&raquo; en installant en plus le binaire obtenu sous forme de paquets debian dans votre système)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span>
git clone git:<span style="color: #000000; font-weight: bold;">//</span>review.webmproject.org<span style="color: #000000; font-weight: bold;">/</span>libvpx.git
<span style="color: #7a0874; font-weight: bold;">cd</span> libvpx
.<span style="color: #000000; font-weight: bold;">/</span>configure
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> checkinstall <span style="color: #660033;">--pkgname</span>=libvpx <span style="color: #660033;">--pkgversion</span>=<span style="color: #ff0000;">&quot;<span style="color: #780078;">`date +%Y%m%d%k%M`</span>-git&quot;</span> <span style="color: #660033;">--backup</span>=no <span style="color: #660033;">--nodoc</span> <span style="color: #660033;">--default</span></pre></div></div>

<p>Récupération des sources, compilation et installation de ffmpeg (enfin!)sous forme de paquets pour votre système (checkinstall wrappe &laquo;&nbsp;make install&nbsp;&raquo; en installant en plus le binaire obtenu sous forme de paquets debian dans votre système, à noter que pour ffmpeg vous aurez une erreur lors du checkinstall, qui n&#8217;empêchera pas l&#8217;installation d&#8217;aboutir)<br />
Si vous avez installé x264, vous pouvez ajouter comme ci dessous ajouter le support x264 à ffmpeg  : &#8211;enable-libx264 ; à noter que l&#8217;option &#8211;enable-libvpx vous donnera accès à l&#8217;encodage webm</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span>
<span style="color: #c20cb9; font-weight: bold;">svn</span> checkout <span style="color: #c20cb9; font-weight: bold;">svn</span>:<span style="color: #000000; font-weight: bold;">//</span>svn.ffmpeg.org<span style="color: #000000; font-weight: bold;">/</span>ffmpeg<span style="color: #000000; font-weight: bold;">/</span>trunk <span style="color: #c20cb9; font-weight: bold;">ffmpeg</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #c20cb9; font-weight: bold;">ffmpeg</span>
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--enable-gpl</span> <span style="color: #660033;">--enable-version3</span> <span style="color: #660033;">--enable-nonfree</span> <span style="color: #660033;">--enable-postproc</span> <span style="color: #660033;">--enable-pthreads</span> <span style="color: #660033;">--enable-libfaac</span> <span style="color: #660033;">--enable-libfaad</span> <span style="color: #660033;">--enable-libmp3lame</span> <span style="color: #660033;">--enable-libopencore-amrnb</span> <span style="color: #660033;">--enable-libopencore-amrwb</span> <span style="color: #660033;">--enable-libtheora</span> <span style="color: #660033;">--enable-libvorbis</span> <span style="color: #660033;">--enable-libvpx</span> <span style="color: #660033;">--enable-libx264</span> <span style="color: #660033;">--enable-libxvid</span> <span style="color: #660033;">--enable-x11grab</span>
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> checkinstall <span style="color: #660033;">--pkgname</span>=<span style="color: #c20cb9; font-weight: bold;">ffmpeg</span> <span style="color: #660033;">--pkgversion</span> <span style="color: #ff0000;">&quot;4:SVN-r<span style="color: #780078;">`svn info | grep Revision | awk '{ print $NF }'`</span>&quot;</span> <span style="color: #660033;">--backup</span>=no <span style="color: #660033;">--default</span>
<span style="color: #7a0874; font-weight: bold;">hash</span> x264 <span style="color: #c20cb9; font-weight: bold;">ffmpeg</span> ffplay</pre></div></div>

<p>Alors il est vrai que c&#8217;est toujours plus simple d&#8217;installer des paquets avec apt-get install que de compiler des sources, mais le support de webm dans ffmpeg est à ce jour tellement récent que vous ne trouverez pas de paquets pour votre distribution !</p>
<h3>Encoder vos vidéos en webm avec ffmpeg</h3>
<p>Rien de plus simple !</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ffmpeg</span> <span style="color: #660033;">-i</span> input.avi <span style="color: #660033;">-threads</span> <span style="color: #000000;">2</span> output.webm</pre></div></div>

<p>(sauf qu&#8217;il semnlearait que le -threads 2, supposé donner 2 threads à ffmpeg, utile pour les dual core, ne soit pas supporté, à ce jour, pour webm)</p>
<h3>Lire vos vidéos encodées en webm</h3>
<h2>Avec ffplay</h2>
<p>Vous avez déjà installé précédemment ffmplay :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ffplay output.webm</pre></div></div>

<h2>Avec vlc</h2>
<p>Vous pouvez aussi les lire avec la dernière version de VLC, à date, la version 1.1.0; il vous faut ajouter un nouveau repo avec les dernières version de vlc, enlever votre version actuelle et ré installer vlc :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> add-apt-repository ppa:c-korn<span style="color: #000000; font-weight: bold;">/</span>vlc
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> remove vlc
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> vlc mozilla-plugin-vlc videolan-doc</pre></div></div>

<p>Depuis la sortie officielle de VLC en 1.1.0, VLC lit parfaitement les fichiers webm, toutes plateformes confondues !</p>
<h2>Avec votre navigateur web</h2>
<p>Mais le véritable intérêt de webm, c&#8217;est le web, aussi à cette page, <a href="http://www.youtube.com/html5">vous sont listées les navigateurs compatibles webm</a>.<br />
Vous y trouverez un paquet debian/ubuntu pour chrome, et en <a href="http://nightly.mozilla.org/">téléchargeant et détarrant un firefox nightly build</a>, vous pourrez aussi les lire avec firefox.</p>
<p>Si vous pouvez lire la video ci dessous, c&#8217;est qu&#8217;alors vous utilisez un navigateur compatible webm !<br />
<video width="854" height="480" controls preload="none"><br />
       <source src="http://blog.dahanne.net/wp-content/uploads/sample.webm" type="video/webm" /><br />
</video></p>
<p>Avec chrome version 6.0.437.3 dev , j&#8217;ai pu la lire avec succès !</p>
<p>Vous pouvez aussi télécharger la vidéo en enregistrant cette url :</p>
<p><a href="http://blog.dahanne.net/wp-content/uploads/sample.webm">Exemple de vidéo webm à télécharger</a></p>
<p>Bon encodage Webm à tous !</p>
<h3>Sources :</h3>
<ul>
<li><a href="http://linuxfr.org//2010/06/17/27005.html">annonce de l&#8217;intégration de webm sur linuxfr.org</a></li>
<li><a href="http://www.webdevonlinux.fr/2010/06/ffmpeg-0-6-0-ajoute-le-support-du-codec-webm">installer webm sur ubuntu 10.04 64 bits</a></li>
<li><a href="http://ubuntuforums.org/showthread.php?t=786095">install webm on ubuntu</a></li>
<li><a href="http://www.mirovideoconverter.com/">Encoder vos videos webm sous windows</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2010/06/19/encoder-vos-videos-en-webm-vp8-avec-ffmpeg-sous-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</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>G2Android v. 1.4.2 : now it is really stable !</title>
		<link>http://blog.dahanne.net/2009/12/23/g2android-v-1-4-2-now-it-is-really-stable/</link>
		<comments>http://blog.dahanne.net/2009/12/23/g2android-v-1-4-2-now-it-is-really-stable/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 23:46:54 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=337</guid>
		<description><![CDATA[Sorry, no new features in this release :-(
But a lot o [...]]]></description>
			<content:encoded><![CDATA[<p>Sorry, no new features in this release <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
But a lot of bug fixes <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
These bugs specially appeared in CyanogenMod running Android phones, because, for some reason, CyanogenMod kills really rapidly applications loosing focus.<br />
For example, when trying to upload a photo, Android, under Cyanogenmod, would kill G2Android, as it lost focus, for letting the user choose his photo; or if you received a phone call while browsing a gallery, Android would also kill G2Android.<br />
That&#8217;s ok, it&#8217;s part of the Android lifecycle : this robot knows how to get his RAM back  !!!<br />
The thing is, until version 1.4.2, G2Android would not &laquo;&nbsp;remember&nbsp;&raquo; the Gallery cookies, the albums hierarchy, its position in the gallery, etc&#8230; so it forced close.<br />
Now, it uses a SQLite database, to save its context, so before leaving an activity, G2Android saves its context (onPause) and when entering an activity (onResume) it gets the context back.<br />
Next year, some new features will appear, like using the camera directly to send photo, or maybe analyse EXIF metadata ?<br />
If you have some ideas, or if you encounter bugs, <a href="http://code.google.com/p/g2android/issues/list">please feel free to submit an issue in G2Android bugtracker</a> !<br />
And, as we say in such periods, merry Xmas and happy new year ! Using G2Android <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3><a href="http://code.google.com/p/g2android/">Go to G2Android project page</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/12/23/g2android-v-1-4-2-now-it-is-really-stable/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Comment convertir une mailbox Outlook en mailbox IMAP</title>
		<link>http://blog.dahanne.net/2009/12/23/comment-convertir-une-mailbox-outlook-en-mailbox-imap/</link>
		<comments>http://blog.dahanne.net/2009/12/23/comment-convertir-une-mailbox-outlook-en-mailbox-imap/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 23:21:54 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[outils]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=328</guid>
		<description><![CDATA[Si chez moi j'ai tout le loisir d'utiliser, pour la mes [...]]]></description>
			<content:encoded><![CDATA[<p>Si chez moi j&#8217;ai tout le loisir d&#8217;utiliser, pour la messagerie par email, des logiciels libres implémentant des standards; dans le cadre du travail, je me suis souvent retrouvé à utiliser un compte Outlook&#8230; (ou pire, Lotus Notes, mais là c&#8217;est un autre sujet&#8230;)<br />
Sauf que le jour où on quitte la société ou la mission (qui vous a équipé d&#8217;Outlook donc), on aimerait bien récupérer ses messages préférés&#8230;<br />
Vous imaginez bien que le format de sauvegarde d&#8217;Outlook est propriétaire, ainsi, il faut ruser pour convertir votre boite aux lettres Outlook au format standard unix &laquo;&nbsp;mailbox&nbsp;&raquo; (format documenté et convertible et exploitable par pléthore d&#8217;outils)<br />
Pour ce faire, il suffit de suivre ces 2 étapes (il faut aussi un compte IMAP tierce) :</p>
<h3>1°)Configurer un compte IMAP dans Outlook</h3>
<p>j&#8217;ai simplement ajouté un compte IMAP existant dans Outlook (Outils-&gt;Comptes de messagerie)<br />
J&#8217;ai ensuite choisi &laquo;&nbsp;Ajouter compte de messagerie&nbsp;&raquo;</p>
<p><a href="http://blog.dahanne.net/wp-content/uploads/comptes_de_messagerie.png"><img class="alignnone size-medium wp-image-332" title="comptes_de_messagerie" src="http://blog.dahanne.net/wp-content/uploads/comptes_de_messagerie-300x228.png" alt="" width="300" height="228" /></a></p>
<p>Puis j&#8217;ai sélectionné IMAP<br />
<a href="http://blog.dahanne.net/wp-content/uploads/imap.png"><img class="alignnone size-medium wp-image-333" title="imap" src="http://blog.dahanne.net/wp-content/uploads/imap-300x229.png" alt="" width="300" height="229" /></a><br />
J&#8217;ai renseigné mon compte IMAP</p>
<p><a href="http://blog.dahanne.net/wp-content/uploads/compte_saisi.png"><img class="alignnone size-medium wp-image-331" title="compte_saisi" src="http://blog.dahanne.net/wp-content/uploads/compte_saisi-300x227.png" alt="" width="300" height="227" /></a></p>
<p>Terminé !</p>
<h3>2°)Déplacez ses messages et répertoires de Outlook vers votre compte IMAP</h3>
<p>Rien de plus simple, il suffit de glisser/déplacer vos messages et répertoires de votre compte Outlook, vers votre compte IMAP !<br />
Par contre, votre serveur IMAP n&#8217;est peut être pas paramétré pour gérer les sous répertoires, dans ce cas là, vous devez modifier la configuration, dans le cas de Dovecot, veuillez faire attention à ce que l&#8217;option namespace_private comporte une définition des séparateurs :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">namespace private <span style="color: #7a0874; font-weight: bold;">&#123;</span>
   <span style="color: #666666; font-style: italic;"># Hierarchy separator to use. You should use the same separator for all</span>
   <span style="color: #666666; font-style: italic;"># namespaces or some clients get confused. '/' is usually a good one.</span>
   <span style="color: #666666; font-style: italic;"># The default however depends on the underlying mail storage format.</span>
  separator = <span style="color: #000000; font-weight: bold;">/</span> 
&nbsp;
   <span style="color: #666666; font-style: italic;"># Prefix required to access this namespace. This needs to be different for</span>
   <span style="color: #666666; font-style: italic;"># all namespaces. For example &quot;Public/&quot;.</span>
   prefix = <span style="color: #ff0000;">&quot;&quot;</span>
&nbsp;
   <span style="color: #666666; font-style: italic;"># Physical location of the mailbox. This is in same format as</span>
   <span style="color: #666666; font-style: italic;"># mail_location, which is also the default for it.</span>
   <span style="color: #666666; font-style: italic;">#location =</span>
&nbsp;
   <span style="color: #666666; font-style: italic;"># There can be only one INBOX, and this setting defines which namespace</span>
   <span style="color: #666666; font-style: italic;"># has it.</span>
   inbox = <span style="color: #c20cb9; font-weight: bold;">yes</span>
&nbsp;
   <span style="color: #666666; font-style: italic;"># If namespace is hidden, it's not advertised to clients via NAMESPACE</span>
   <span style="color: #666666; font-style: italic;"># extension or shown in LIST replies. This is mostly useful when converting</span>
   <span style="color: #666666; font-style: italic;"># from another server with different namespaces which you want to depricate</span>
   <span style="color: #666666; font-style: italic;"># but still keep working. For example you can create hidden namespaces with</span>
   <span style="color: #666666; font-style: italic;"># prefixes &quot;~/mail/&quot;, &quot;~%u/mail/&quot; and &quot;mail/&quot;.</span>
   <span style="color: #666666; font-style: italic;">#hidden = yes</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>C&#8217;est fini, vous venez de migrer vos données Outlook vers mailbox, le standard de courrier *nix ! (vos emails doivent être sur le votre machine hébergeant le serveur IMAP dans /home/user/mail/votre_sous_rep)</p>
<h3>Références</h3>
<p><a href="http://www.faqs.org/docs/Linux-mini/Outlook-to-Unix-Mailbox.html#s3" target="_blank">http://www.faqs.org/docs/Linux-mini/Outlook-to-Unix-Mailbox.html#s3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/12/23/comment-convertir-une-mailbox-outlook-en-mailbox-imap/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>Installer PHP 5.3.1 sur Ubuntu Karmic koala 9.10</title>
		<link>http://blog.dahanne.net/2009/11/21/installer-php-5-3-1-sur-ubuntu-karmic-koala-9-10/</link>
		<comments>http://blog.dahanne.net/2009/11/21/installer-php-5-3-1-sur-ubuntu-karmic-koala-9-10/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 15:37:38 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[apache2]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=274</guid>
		<description><![CDATA[J'ai récemment voulu installer sur mon serveur web le  [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai récemment voulu installer sur mon serveur web le <a href="http://trac.openwebreader.org/">(tout nouveau) agrégateur de flux RSS (avec API distante REST) OpenWebReader</a>.<br />
L&#8217;auteur, pour avoir un développement plus aisé et moderne, a choisi la dernière version de PHP, 5.3<br />
Sauf que sur Ubuntu 9.10, la version de PHP packagée est la 5.2.6<br />
En général, dans ces cas, on a plutôt le réflexe de mettre à jour ses dépôts, dans /etc/apt/sources.list et de rajouter le dépôt qui va bien, qui rajoute en l&#8217;occurrence php 5.3.<br />
C&#8217;est bien ce que j&#8217;avais commencé à faire, <a href="http://www.dotdeb.org/2009/07/03/php-5-3-0-final-preview-packages-available-for-debian-lenny/">en suivant ce billet</a>.<br />
Mais malheureusement, plein de dépendances ont sauté : phpmyadmin, apache2-mod-php5, etc&#8230; du coup, machine arrière vers PHP 5.2.6 <img src='http://blog.dahanne.net/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /><br />
Retour aux sources, j&#8217;ai téléchargé sur php.net la version 5.3.1 de PHP</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>us3.php.net<span style="color: #000000; font-weight: bold;">/</span>get<span style="color: #000000; font-weight: bold;">/</span>php-5.3.1.tar.gz<span style="color: #000000; font-weight: bold;">/</span>from<span style="color: #000000; font-weight: bold;">/</span>this<span style="color: #000000; font-weight: bold;">/</span>mirror</pre></div></div>

<p>, je l&#8217;ai détarré dans mon home directory :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">tar</span> xvfz php-5.3.1.tar.gz</pre></div></div>

<p>et avant de le compiler, je suis allé chercher tout plein de librairies :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> apache2 apache2-mpm-prefork apache2-prefork-dev apache2-utils apache2.2-common mysql-client mysql-client-<span style="color: #000000;">5.1</span> mysql-common mysql-server mysql-server-<span style="color: #000000;">5.1</span> mysql-server-core-<span style="color: #000000;">5.1</span> libtidy-dev curl libcurl4-openssl-dev libcurl3 libcurl3-gnutls zlib1g zlib1g-dev libxslt1-dev libzip-dev libzip1 libxml2 libsnmp-base libsnmp15 libxml2-dev libsnmp-dev libjpeg62 libjpeg62-dev libpng12-<span style="color: #000000;">0</span> libpng12-dev zlib1g zlib1g-dev libfreetype6 libfreetype6-dev libbz2-dev libxpm4-dev libmcrypt-dev libmcrypt4 libicu-dev</pre></div></div>

<p>et là, dans mon répertoire de php 5.3.1 , j&#8217;ai pu compiler :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span>  php-5.3.1
$ .<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--with-apxs2</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>apxs2 <span style="color: #660033;">--with-mysql</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-mysqli</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>mysql_config <span style="color: #660033;">--with-tidy</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-curl</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin <span style="color: #660033;">--with-curlwrappers</span> <span style="color: #660033;">--with-openssl-dir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-zlib-dir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--enable-mbstring</span> <span style="color: #660033;">--with-pdo-pgsql</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-pdo-mysql</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-xsl</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-ldap</span> <span style="color: #660033;">--with-xmlrpc</span> <span style="color: #660033;">--with-iconv-dir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-snmp</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--enable-exif</span> <span style="color: #660033;">--enable-calendar</span> <span style="color: #660033;">--with-bz2</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-mcrypt</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-gd</span> <span style="color: #660033;">--with-jpeg-dir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-png-dir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-zlib-dir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--with-freetype-dir</span>=<span style="color: #000000; font-weight: bold;">/</span>usr <span style="color: #660033;">--enable-mbstring</span> <span style="color: #660033;">--enable-zip</span> <span style="color: #660033;">--with-pear</span> <span style="color: #660033;">--enable-intl</span> <span style="color: #660033;">--with-gettext</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">gettext</span>
$ <span style="color: #c20cb9; font-weight: bold;">make</span></pre></div></div>

<p>Si vous avez un problème lors du configure c&#8217;est qu&#8217;il vous manque une librairie&#8230;<br />
Ensuite, maintenant que l&#8217;on a une version de Php 5.3.1 compilé, il faut la référencer à Apache2, et pour ne rien casser aux dépendances, on trafique juste une petit peu /etc/apache2/mods-available/php5.load :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">LoadModule php5_module <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>anthony<span style="color: #000000; font-weight: bold;">/</span>php-5.3.1<span style="color: #000000; font-weight: bold;">/</span>libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so</pre></div></div>

<p>et là, le tour est joué, il suffit de redémarrer Apache2 pour que Php 5.3.1 soit chargé.<br />
En fait, je me suis beaucoup inspiré de<a href="http://www.brandonsavage.net/installing-php-5-3-on-ubuntu/"> ce billet</a>, sauf qu&#8217;à la fin, je vous conseille de ne pas faire le make install, car votre système risque de ne plus être en cohérence avec les dépots</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/11/21/installer-php-5-3-1-sur-ubuntu-karmic-koala-9-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>G2Android version 1.3.0 : cache and full screen navigation</title>
		<link>http://blog.dahanne.net/2009/10/27/g2android-version-1-3-0-cache-and-full-screen-navigatio/</link>
		<comments>http://blog.dahanne.net/2009/10/27/g2android-version-1-3-0-cache-and-full-screen-navigatio/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 15:22:35 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=267</guid>
		<description><![CDATA[Here is the new stable release of G2Android, your favor [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the new stable release of<a href="http://code.google.com/p/g2android/"> G2Android, your favorite Gallery2 application for Android</a>, and great new features are now available :</p>
<ul>
<li>new cache feature </li>
<li>fullscreen navigation with gestures </li>
<li>download full res. picture to sdcard</li>
</ul>
<p>As always, you can get more info going to the project web page : <a href="http://code.google.com/p/g2android/">http://code.google.com/p/g2android/</a>, and <a href="http://code.google.com/p/g2android/downloads/list">even download the new version</a><br />
So what&#8217;s next ? tweeting and sending email with photo url, shortcuts for full screen navigation, synchronization between views&#8230; well, expect a new version by the end of November !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/10/27/g2android-version-1-3-0-cache-and-full-screen-navigatio/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>Effacer de manière sécurisée les données d&#8217;un disque dur</title>
		<link>http://blog.dahanne.net/2009/10/14/effacer-de-maniere-securisee-les-donnees-dun-disque-dur/</link>
		<comments>http://blog.dahanne.net/2009/10/14/effacer-de-maniere-securisee-les-donnees-dun-disque-dur/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 20:06:03 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[outils]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=256</guid>
		<description><![CDATA[Envie d'effacer toutes les données d'un disque dur ava [...]]]></description>
			<content:encoded><![CDATA[<p>Envie d&#8217;effacer toutes les données d&#8217;un disque dur avant de le revendre ?<br />
Envie d&#8217;effacer toutes vos données personnelles qui se situe dans un répertoire en particulier (sous windows), sans formater tout le disque ?<br />
Suivez le guide !</p>
<h3>Effacer de manière sécurisée toutes les partitions d&#8217;un volume</h3>
<p>Vous vous apprétez à vendre ou à donner votre vieil ordinateur, et vous ne voulez pas que l&#8217;ensemble de vos documents privés se retrouvent sur internet ?</p>
<p>Dans ce cas, il ne suffit pas d&#8217;effacer vos fichiers via l&#8217;OS (ce qui ne les efface que de la table de registres du disque), ni de formater la partition (un logiciel de &laquo;&nbsp;recovery&nbsp;&raquo; serait capable de la reconstituer); ce qu&#8217;il vous faut, c&#8217;est réécrire plusieurs fois, avec des algorithmes éprouvés, des données aléatoires sur l&#8217;ensemble du disque.</p>
<p>Il existe pour cela pléthores d&#8217;outils payants (et qui n&#8217;ont pas l&#8217;air d&#8217;avoir la côte), et il existe <a title="dban" href="http://www.dban.org/">DBAN</a>, outil GPL de choix.</p>
<p><a title="dban" href="http://www.dban.org/">DBAN (Darik&#8217;s boot and Nuke)</a> est un logiciel libre, redoutablement efficace, qui, même s&#8217;il n&#8217;est plus maintenu depuis 2007, vous propose plusieurs algos pour effacer votre disque de manière sécurisée (réécrire 1 fois dessus -&gt; +rapide; 3 passes avec algo conforme au Department Of Defense américain -&gt; +long)</p>
<p>Ce logiciel s&#8217;installe sur une clef USB, ou un CD-R, ou une disquette; bootez dessus (branchez auparavant sur votre ordinateur les périphériques que vous souhaitez effacer), tapez &laquo;&nbsp;autonuke&nbsp;&raquo; à l&#8217;invite de commandes, patientez, et c&#8217;est réglé !</p>
<p>Vous voulez en avoir le coeur net ? être sûr que DBAN a bien fait son travail ?</p>
<p>On peut faire une vérification sommaire, en tentant de retrouver des partitions sur le disque avec l&#8217;outil <a title="TestDisk" href="http://www.cgsecurity.org/wiki/TestDisk">Testdisk</a>, en GPL sous Linux/Windows/MacOs (etc..); le résultat est sans appel : après analyse complète du disque à la recherche de la moindre partition :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">TestDisk <span style="color: #000000;">6.10</span>, Data Recovery Utility, July <span style="color: #000000;">2008</span>
Christophe GRENIER <span style="color: #000000; font-weight: bold;">&amp;</span>lt;grenier<span style="color: #000000; font-weight: bold;">@</span>cgsecurity.org<span style="color: #000000; font-weight: bold;">&amp;</span>gt;
http:<span style="color: #000000; font-weight: bold;">//</span>www.cgsecurity.org
&nbsp;
Disk <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdc - <span style="color: #000000;">81</span> GB <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000;">76</span> GiB - CHS <span style="color: #000000;">9965</span> <span style="color: #000000;">255</span> <span style="color: #000000;">63</span>
&nbsp;
Partition                  Start        End    Size <span style="color: #000000; font-weight: bold;">in</span> sectors
&nbsp;
No partition found or selected <span style="color: #000000; font-weight: bold;">for</span> recovery</pre></div></div>

<h3>Effacer vos données personnelles d&#8217;un répertoire</h3>
<p>Vous utilisez régulièrement un ordinateur au bureau, vous y avez stocké des documents confidentiels, et vous vous apprétez à ne plus utiliser ce poste de travail ?</p>
<p>Vous pouvez alors utiliser <a title="Eraser" href="http://eraser.heidi.ie/">Eraser</a>, encore un logiciel libre sous GPL (mais malheureusement que pour Windows), qui appliquera les mêmes algorithmes de suppression que DBAN, mais dans des répertoires au choix, et non pas un volume entier; Eraser est facile à utiliser (version portable, pas besoin d&#8217;être admin pour s&#8217;en servir), et est encore maintenu à ce jour</p>
<h3>Références :</h3>
<p><a href="http://www.webopedia.com/DidYouKnow/Computer_Science/2007/completely_erase_harddrive.asp">http://www.webopedia.com/DidYouKnow/Computer_Science/2007/completely_erase_harddrive.asp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/10/14/effacer-de-maniere-securisee-les-donnees-dun-disque-dur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Citcon Europe 2009 @ Paris</title>
		<link>http://blog.dahanne.net/2009/09/18/citcon-europe-2009-paris/</link>
		<comments>http://blog.dahanne.net/2009/09/18/citcon-europe-2009-paris/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 19:48:30 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=244</guid>
		<description><![CDATA[During 2 days, Friday the 18th of September and Saturda [...]]]></description>
			<content:encoded><![CDATA[<p>During 2 days, Friday the 18th of September and Saturday the 19th, I attended for the first time the <a href="http://citconf.com/paris2009/">Citcon Europe Conference</a>, about Continuous Integration, in Paris.</p>
<h2>Friday</h2>
<p>When I arrived, at 6:20PM, I was received by 2 Jean Michel I know (Garnier and Bea) who gave me a tag on which I wrote my name on it, a T-shirt, a wifi logon for the conference, and a bag loaded with sponsors  material.</p>
<p>When I got into the room, I found many colleagues from Valtech, and people I usually meet at the Paris Jug and other conferences in Europe.The room is nearly crowded, we&#8217;re about 120.</p>
<p>PJ(Paul Julius) and Jeff presented how the conference would occur : the sessions, divided in 8 rooms, the Saturday lunch, the Saturday breakfast, the after conference events (most probably in a bar), the sponsors, the volunteers, and their association.</p>
<p>Then, the presenters let every one in the room introduce him/herself : most of the audience was there to talk about CI, User Acceptance Testing and agility.</p>
<p>After the presentations were made, both presenters explained how the open spaces work : an interesting point is that if you think that you&#8217;re wasting your time in an open space, just don&#8217;t hesitate to leave: to participate actively in another open space!The audience is responsible for making the conference great, so everyone should feel free to join and leave any open space during the day.</p>
<p>The sessions proposed by people attending the conference, will occur in the rooms chosen by the audience : if the audience thinks it&#8217;s a popular  topic, the session will use a bigger room.</p>
<p>The presenters also encouraged the audience to blog, take photos, promote the event<br />
Before letting attendees propose sessions, Jeff added : &laquo;&nbsp;Whether the conference will be successful or not depend on you&nbsp;&raquo;</p>
<p>Finally, some attendees proposed some topics, and after this was done (a think that more than 50 topics were proposed, a lot of them about Scrum, mock objects, how to write tests and user acceptance tests, etc..), all these topics were refactored around a nice buffet and a drink !</p>
<p>The organization for this citcon starter was really great, and when you think that the entrance is free, you even better appreciate all the efforts made by the volunteers to make this conference so professional and nice !</p>
<p>Tomorrow, the sessions will begin, I can&#8217;t wait !</p>
<h2>Saturday</h2>
<p>Following are transcripts of the sessions I followed (I mostly wrote about things that seemed important to me)</p>
<h3>Definition of Done &#038; Testing</h3>
<p>Who makes the decision ? the project manager? the product owner ?<br />
We should make all requirements measurable and stable in order to define done software<br />
Done can be declared when we customer accepts the feature, and &laquo;&nbsp;done done&nbsp;&raquo; when the feature is in production;provided that the team meets metrics criteria when developing, providing a sustainable pace.<br />
Do tests provide business value after all? Of course they can, depending on how you wrote your tests, whether you include the business in your development cycle or not.<br />
Done can also be when &laquo;&nbsp;it feels right&nbsp;&raquo; : when the customer AND the team agrees on the fact it is done; if a member does not think the quality is met, he should say it, and not agree to say it feels right.<br />
Maybe frequent builds is the solution :  providing more and more functionalities builds after builds, intead of shipping o huge piece of software not testes enough</p>
<h3>Mock objects</h3>
<p>You can use Mocking (making expectations about how and how frequent it is called) when it changes the outside world, elsewhere you should stub; by outside world I mean any third object in the chain<br />
It&#8217;s usually better to initialize once your mock object (even making it final in Java), to only focus on the expectations.<br />
Some people in the room proposed not to use interfaces anymore, because some mock frameworks don&#8217;t need interfaces anymore, but it seems complicated refactoring because you don&#8217;t explicit the interactions between your classes.</p>
<h3>Faster tests</h3>
<p>How long is a too long to run test ?<br />
How long is a too long to run a build ?<br />
The aim of making tests faster is too shorten feedback.<br />
You can categorize tour tests between the fasts and slower ones (the fastest run first (Unit Tests), the slowest runs last and only once each day(Selenium Tests on all browsers) )<br />
Running unit tests concurrently on a 8 core developer machine ? That means investing in hardware to speed up the tests<br />
You can use in memory databases instead of using real databases on the network; but how can you be sure that your tests will work on the target database ?<br />
You can also use private builds, like Teamcity does : you commit a private build which runs a the CI computer, and if the build went fine, your code is automatically committed to the branch of your choice.<br />
You can write better tests : more rapid, using lighter structures in your code.</p>
<h3>Conclusion</h3>
<p>It was y first citcon conference participation, and I was quite impressed by the quality of the organization, and also of the audience, lots of smart people coming from all around the world (mainly europe and france though).<br />
The food was good, the rooms and facilities (like wifi) were also good, one ting that disturbed me was the fact that post-its on the agenda kept on moving: I missed sessions because I did not notice that the schedule had changed&#8230; but that&#8217;s the way it is !<br />
The open space format is a bit difficult to follow, many ideas are popping out from all other the room, and the hard part is to catch them and analyse them; but the effort is worth it !<br />
If you want to <a href="http://citconf.com/wiki/index.php?title=CITCONEurope2009Sessions">know more about the sessions given at citconf europe 2009, follow the link !</a></p>
<h3>Books mentioned</h3>
<p>x unit tests pattern (by mezaros)<br />
Object-Design-Roles-Responsibilities-Collaborations (by Rebecca Wirfs)<br />
<a href="http://www.mockobjects.com/">Mock Objects by Steeve Freeman</a></p>
<h3>Tools</h3>
<p>crap4J : complexity and coverage<br />
gridgain : run a single build on a farm of servers<br />
dbunit : to inject test data in a test db<br />
testng : like JUnit, but provides the ability to run tests in different threads<br />
selenium : to automate user accepting test<br />
webdriver : to run selenium, should merge with selenium eventually<br />
cucumber : writing and running User Acceptance Test in a DSL<br />
html unit : when you don&#8217;t need selenium to check every page/css/javascript details</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/09/18/citcon-europe-2009-paris/feed/</wfw:commentRss>
		<slash:comments>0</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>22</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, second day : 24th of June 2009</title>
		<link>http://blog.dahanne.net/2009/06/24/jazoon-09-second-day-24th-of-june-2009/</link>
		<comments>http://blog.dahanne.net/2009/06/24/jazoon-09-second-day-24th-of-june-2009/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 16:34:57 +0000</pubDate>
		<dc:creator>anthony.dahanne</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[jazoon 09]]></category>
		<category><![CDATA[meeting]]></category>

		<guid isPermaLink="false">http://blog.dahanne.net/?p=167</guid>
		<description><![CDATA[The following sessions were given during Jazoon 09, on  [...]]]></description>
			<content:encoded><![CDATA[<p>The following sessions were given during Jazoon 09, on Wednesdaythe 24th of Ju ne 2009, <a href="http://blog.valtech.fr/wordpress/2009/06/24/jazoon-09-sessions-du-mercredi-24-juin/">vous pouvez lire la traduction en français sur le blog de Valtech</a></p>
<h3>Danny Coward Keynote, 9:00 &#8211; 10:00</h3>
<h4>Java 7</h4>
<p>Description of the new features in Java SE 7  : modularity, ?. operator, new API for java.io (Path, Asynchronous FileVisitor), http://openjdk.java.net/projects/jdk7</p>
<h4>Java FX</h4>
<p>The new version is 1.2, running on all OSes (even Linux and Solaris, a TV, some phones to come out), more UI components (skinnable with CSS) , new layouts, better performance; then Danny showed the audience some JavaFX applications : a pacman application, a video player, with some nice visual effects &#8230; </p>
<h3>OSGi and Java Modularity, 10:30 &#8211; 11:20, by Peter Kriens</h3>
<p>If you think your application is modular only by using the VM, well, think again&#8230;<br />
You can&#8217;t hide interfaces in the classsloader, and if there are no enforcements of rules at runtime, it&#8217;s uselesse to try to make these interfaces secrets&#8230;<br />
In OSGi, you can set secret interfaces (not exported) and also use MANIFESTs to explicitely specify exports.<br />
With an OSGi bundle (a jar actually, with its MANIFEST), you can dynamically specify which others bundles it can depend on, if one of the bundle you depend on is no more available, OSGi will remove the dependency; then it will put it back when the bundle is available again.<br />
The problem is : many implementations of modularity exist and JSR 294 do not specify a particular one &#8230; From a programmer point of view, you will have to choose between OSGi, Jigsaw, guice, the modularity implementation you want to use &#8230; </p>
<h3>Next generation Wikis: Mixing Content-Oriented Applications with Wikis, 11:30 &#8211; 12:20, by Vincent Massol</h3>
<p>Wiki 1.0 : just used for text<br />
Wiki 2.0 : you can add everything : images, videos, comments, notes, etc.., the datas can be structured, unstructured or mashups (datas coming from everywhere) the wiki 2.0 is the excell&#8230; of the web !<br />
After presenting a demo showing us the possibility in Xwiki to define in 10 minutes (knowing velocity or groovy syntax) an application hosted on the wiki, Vincent listed the Xwiki features and the new features to come : real time collaboration, mobile skin, social features and &#8230; merge of CMS and wikis.</p>
<h3>JavaFX Rich Internet Applications connected to GlassFish Java EE 5 services, 16:00-16:20, by Ludovic Champenois – Sun Microsystems</h3>
<p>First of all, Ludovic showed us the GlassFish v3 admin console (looks good !) and reminded us with REST (standard HTTP methods, resources, etc&#8230;), and the REST annotations in Java EE6.<br />
Why ? because the example given during his demonstration is communicating with a JAX-RS Java EE6 application, hosted by Glassfish V3.<br />
To test the REST application, you can simply use  : curl -HAccept:application/xml http://localhost/domain, or use your browser or use Glassfish v3 Admin Backend Tester.<br />
And then, down to the JavaFx application code, using Netbeans, only 15 lines of code are necessary to consume the REST service.<br />
TO finish with, Ludovic showed us some other JavaFX demo applications.</p>
<h3>JavaFX / Android: Competing technologies or the ideal partnership? , 16:30 &#8211; 16:50 by Mike Mannion and Andreas Hölzl</h3>
<p>Presented as a theater play : 2 guys talking about phone technologies around a coffee : one is a JavaFX supporter, the other is an Android supporter.<br />
They then compared a similar application (using Flickr, Lastfm, youtube web services): developed both for JavaFx and the Android Platform.<br />
*UI : JavaFX needs UI designed by designers, Android defines it in an extermal layout XML file<br />
*UI (2) : Android provides a richer API, providing a photo gallery for example, JavaFX does not&#8230;<br />
*language : you have to learn JavaFX script for JavaFX, Android uses Java 5 API (with some restrictions&#8230;, for example it does not use AWT or Swing for graphics)<br />
They also told us that Sun is not clearly decided about supporting Android  : they said that they were thinking about it&#8230; but since then (a year ago) nothing came out !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.dahanne.net/2009/06/24/jazoon-09-second-day-24th-of-june-2009/feed/</wfw:commentRss>
		<slash:comments>1</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>
	</channel>
</rss>
