<?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>Christian KAKESA, Le Blog</title>
	<atom:link href="http://www.kakesa.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kakesa.net</link>
	<description>Informatique, Programmation et Réseaux</description>
	<lastBuildDate>Wed, 10 Feb 2010 13:23:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Programmation GO (golang) [Ubuntu 9.10]</title>
		<link>http://www.kakesa.net/programmation/programmation-go-golang-ubuntu-9-10/257</link>
		<comments>http://www.kakesa.net/programmation/programmation-go-golang-ubuntu-9-10/257#comments</comments>
		<pubDate>Wed, 03 Feb 2010 23:51:17 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[golang]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=257</guid>
		<description><![CDATA[
			tweetmeme_url = "http://www.kakesa.net/programmation/programmation-go-golang-ubuntu-9-10/257";
			tweetmeme_source = "tweetmeme";
		
		GO est un langage de programmation propulsé par Google. L&#8217;objectif premier de GO est de proposer un langage rapide à l&#8217;exécution et à la compilation, qui soit safe (multi-threading, multi-processus, gestion de la mémoire), facile à programmer et en même temps bas niveau. Est-ce possible ? Allez GO&#8230;
Préparer son environnement de [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"><div class="socialize-in-button"><script type="text/javascript">
			tweetmeme_url = "http://www.kakesa.net/programmation/programmation-go-golang-ubuntu-9-10/257";
			tweetmeme_source = "tweetmeme";
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button"><a title="Facebook" href="http://www.facebook.com/sharer.php?&u=http://www.kakesa.net/programmation/programmation-go-golang-ubuntu-9-10/257&t=Programmation GO (golang) [Ubuntu 9.10]" rel="me"><img src="http://www.kakesa.net/wp-content/plugins/socialize/images/fb.png"/></a></div></div><div class="wp-caption aligncenter" style="width: 213px"><a href="http://golang.org/"><img title="Logo bleu GO" src="http://golang.org/doc/go-logo-blue.png" alt="Logo GO" width="203" height="75" /></a><p class="wp-caption-text">GO lang</p></div>
<p>GO est un langage de programmation propulsé par Google. L&#8217;objectif premier de <a href="http://golang.org/">GO</a> est de proposer un langage rapide à l&#8217;exécution et à la compilation, qui soit safe (multi-threading, multi-processus, gestion de la mémoire), facile à programmer et en même temps bas niveau. Est-ce possible ? Allez <a href="http://golang.org/">GO</a>&#8230;</p>
<p>Préparer son environnement de développement</p>
<pre class="brush: bash;">
sudo aptitude install bison gcc libc6-dev ed gawk make
sudo aptitude install python-setuptools python-dev
sudo easy_install mercurial
mkdir $HOME/bin
mkdir $HOME/go
</pre>
<p>Ajouter les lignes suivantes dans le fichier &laquo;&nbsp;~/.bashrc&nbsp;&raquo;</p>
<pre class="brush: bash;">
export GOBIN=${HOME}/bin # Obligatoire si le choix de l'emplacement est différent de ${HOME}/bin (pensez à ajouter ce chemin dans $PATH)
export GOROOT=${HOME}/go
export GOARCH=386 # Ou amd64, arm
export GOOS=linux
export PATH=${GOBIN}:${HOME}/bin:${PATH}
</pre>
<p>Récupérer et compiler GO</p>
<pre class="brush: bash;">
. ~/.bashrc
hg clone -r release https://go.googlecode.com/hg/ $GOROOT
cd $GOROOT/src
LANG=en_US ./all.bash
</pre>
<p>Écrire le fameux &laquo;&nbsp;Bonjour le monde&nbsp;&raquo;</p>
<pre class="brush: bash;">
cat &gt; bonjour.go &lt;&lt;EOF
package main
import &quot;fmt&quot;
func main() {
	fmt.Printf(&quot;Bonjour le monde !!!\n&quot;)
}
EOF
8g bonjour.go
8l -o bonjour bonjour.8
./bonjour
</pre>
<p>Liens :</p>
<ol>
<li><a href="http://golang.org/doc/go_tutorial.html">Tutoriel GO</a></li>
<li><a href="http://golang.org/pkg">En savoir plus sur les librairies du langage GO</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/programmation-go-golang-ubuntu-9-10/257/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Signer une application Android [Ubuntu 9.10]</title>
		<link>http://www.kakesa.net/os-design/signer-une-application-android-ubuntu-9-10/224</link>
		<comments>http://www.kakesa.net/os-design/signer-une-application-android-ubuntu-9-10/224#comments</comments>
		<pubDate>Sat, 05 Dec 2009 14:19:45 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[os design]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=224</guid>
		<description><![CDATA[
			tweetmeme_url = "http://www.kakesa.net/os-design/signer-une-application-android-ubuntu-9-10/224";
			tweetmeme_source = "tweetmeme";
		
		Signer une application Android n&#8217;est pas bien compliqué. Ces quelques vont vous guider dans la préparation du certificat. Il faut bien entendu avoir une plate forme Android fonctionelle.

mkdir -p ~/.local/share/keystore
cd ~/.local/share/keystore
keytool -genkey -v -keystore android-release-key.keystore -alias mon_alias -keyalg RSA -validity 10000

Il ne vous reste plus qu&#8217;à répondre aux questions&#8230;
Pour signer une [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"><div class="socialize-in-button"><script type="text/javascript">
			tweetmeme_url = "http://www.kakesa.net/os-design/signer-une-application-android-ubuntu-9-10/224";
			tweetmeme_source = "tweetmeme";
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button"><a title="Facebook" href="http://www.facebook.com/sharer.php?&u=http://www.kakesa.net/os-design/signer-une-application-android-ubuntu-9-10/224&t=Signer une application Android [Ubuntu 9.10]" rel="me"><img src="http://www.kakesa.net/wp-content/plugins/socialize/images/fb.png"/></a></div></div><div class="wp-caption aligncenter" style="width: 190px"><a href="http://developer.android.com/index.html"><img class="  " style="background-color: white; color: black;" title="Logo Android developers" src="http://developer.android.com/assets/images/bg_logo.png" alt="Android developper" width="180" height="50" /></a><p class="wp-caption-text">Android developers</p></div>
<p>Signer une application Android n&#8217;est pas bien compliqué. Ces quelques vont vous guider dans la préparation du certificat. Il faut bien entendu avoir une <a href="http://www.kakesa.net/os-design/installer-le-sdk-android-et-eclipse-adt-ubuntu-9-10/139" target="_self">plate forme Android fonctionelle</a>.</p>
<pre class="brush: bash;">
mkdir -p ~/.local/share/keystore
cd ~/.local/share/keystore
keytool -genkey -v -keystore android-release-key.keystore -alias mon_alias -keyalg RSA -validity 10000
</pre>
<p>Il ne vous reste plus qu&#8217;à répondre aux questions&#8230;</p>
<p>Pour signer une application, le plus simple est d&#8217;utiliser <strong><a href="http://ant.apache.org/" target="_blank">ant</a></strong>. Il suffit de renseigner les deux lignes ci-dessous dans le fichier build.properties à la racine de votre projet :</p>
<pre class="brush: bash;">
# fichier : build.properties
key.store=/home/christian/.local/share/keystore/android-release-key.keystore
key.alias=mon_alias
</pre>
<p>Lorsque vous compiler votre projet avec la commande <strong><a href="http://ant.apache.org/" target="_blank">ant</a></strong>, il faut renseigner le ou les mots de passe de votre certificat, puis à la racine du projet tapez :</p>
<pre class="brush: bash;">
ant release
</pre>
<p>Il est aussi possible de réaliser la signature de vos applications à la main, je vous conseille dans ce cas le <a href="http://developer.android.com/guide/publishing/app-signing.html" target="_blank">tutoriel android</a> traitant directement du sujet. il ne reste plus qu&#8217;à déployer l&#8217;application.</p>
<p>Pour installer votre application sur l&#8217;émulateur ou votre device, il faut utiliser l&#8217;outil <a href="http://developer.android.com/guide/developing/tools/adb.html" target="_blank">ADB</a> ou passer par <a href="http://developer.android.com/guide/developing/eclipse-adt.html" target="_blank">Eclipse/ADT</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/os-design/signer-une-application-android-ubuntu-9-10/224/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Market sur son emulateur</title>
		<link>http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185</link>
		<comments>http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185#comments</comments>
		<pubDate>Sun, 29 Nov 2009 19:59:24 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[os design]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=185</guid>
		<description><![CDATA[
			tweetmeme_url = "http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185";
			tweetmeme_source = "tweetmeme";
		
		Pour les développeurs qui n&#8217;ont pas encore de mobile Android, il est impossible de tester l&#8217;Android Market et ce, même depuis les images pour l&#8217;émulateur livré avec le SDK. Avec un peu de ruse il est possible, de jouer avec les applications disponibles depuis le market. Pour ce faire nous allons [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"><div class="socialize-in-button"><script type="text/javascript">
			tweetmeme_url = "http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185";
			tweetmeme_source = "tweetmeme";
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button"><a title="Facebook" href="http://www.facebook.com/sharer.php?&u=http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185&t=Android Market sur son emulateur" rel="me"><img src="http://www.kakesa.net/wp-content/plugins/socialize/images/fb.png"/></a></div></div><div id="attachment_180" class="wp-caption alignleft" style="width: 125px"><a href="http://developer.android.com/"><img class="size-full wp-image-180   " title="Logo Android" src="http://www.kakesa.net/wp-content/uploads/2009/11/android_logo.jpg" alt="Logo Android" width="115" height="115" /></a><p class="wp-caption-text">Logo Android</p></div>
<p>Pour les développeurs qui n&#8217;ont pas encore de mobile Android, il est impossible de tester l&#8217;Android Market et ce, même depuis les images pour l&#8217;émulateur livré avec le SDK. Avec un peu de ruse il est possible, de jouer avec les applications disponibles depuis le market. Pour ce faire nous allons utiliser les images fournit par HTC sur leur <a href="http://developer.htc.com/" target="_blank">portail dédié aux développeurs</a>.</p>
<p>Je vous conseille de suivre mon article sur la mise en place d&#8217;une plate-forme de développement Android sous linux : <a href="http://www.kakesa.net/os-design/installer-le-sdk-android-et-eclipse-adt-ubuntu-9-10/139">http://www.kakesa.net/os-design/installer-le-sdk-android-et-eclipse-adt-ubuntu-9-10/139</a> si vous n&#8217;en avez pas encore.</p>
<p>Créer un répertoire temporaire pour stocker l&#8217;image du <a href="http://developer.htc.com/adp.html#s3" target="_blank">firmware du HTC Dream</a>, par exemple /tmp/android :</p>
<pre class="brush: bash;">
mkdir -p /tmp/android
unzip signed-dream_devphone_userdebug-img-14721.zip
chmod a+r *.img
</pre>
<p>L&#8217;image récupéré depuis le site de HTC étant celui d&#8217;une version 1.6, créons un avd de la même version et copions-y l&#8217;image HTC :</p>
<pre class="brush: bash;">
android list target
android create avd -t 3 -n avd1.6
cp /tmp/android/system.img ~/.android/avd/avd1.6.avd/
</pre>
<p>Lançons l&#8217;émulateur :</p>
<pre class="brush: bash;">
emulator -avd avd1.6
</pre>
<ol>
<li>Cliquez sur le logo Android à l&#8217;écran</li>
<li>Suivez le tutoriel ou passez-le</li>
<li>Utilisez votre compte google ou choisissez de le créer</li>
<li>Sélectionnez une application du Market et installez-là</li>
</ol>

			<!-- generated by showtime WP plugin -->
			<script type='text/javascript'>
			
				var flashvars = {
					
				xml 			: 'http://www.kakesa.net/wp-content/plugins/showtime-slideshow/showtime/getxml.php?attr=id^185*source^full*sourcehd^full*',
				
				width           : '600',
				height          : '563',
				classid         : 'st_0',

				rotationtime    : '5',
				transition      : 'wipeh',
				transitiontime  : '1',
				transitionease  : 'LinearEaseNone',
				autoplay        : 'on',
				showcontrols    : 'on',
				controls        : '1234',
				textbgcolor     : '',

				showtext        : 'on',
				showalt         : '',
				shuffle         : '',
				scale           : 'noborder',
				target          : '_self'			
				
				
				};
				
				var params = {};
				params.allowFullScreen = 'true';
				params.bgcolor = '#000000';		
				params.quality = 'best';		
				params.wmode = 'transparent';
				//params.base = 'dirname(__FILE__)';
				//params.allowScriptAccess = 'local';
			
				var attributes = {};
				attributes.styleclass = 'showtime';
												
				swfobject.embedSWF ('http://www.kakesa.net/wp-content/plugins/showtime-slideshow/showtime/st16.swf', 'st_0', '600', '563', '10.0.0', 'false', flashvars, params, attributes);
			</script>
	
					
			<!-- alternative content -->	
			<div id='st_0'>
<a href='http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185/attachment/android-market-02' title='android-market-02'><img width="150" height="150" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-02-150x150.png" class="attachment-thumbnail" alt="android-market-02" title="android-market-02" /></a>
<a href='http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185/attachment/android-market-03' title='android-market-03'><img width="150" height="150" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-03-150x150.png" class="attachment-thumbnail" alt="android-market-03" title="android-market-03" /></a>
<a href='http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185/attachment/android-market-04' title='android-market-04'><img width="150" height="150" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-04-150x150.png" class="attachment-thumbnail" alt="android-market-04" title="android-market-04" /></a>
<a href='http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185/attachment/android-market-05' title='android-market-05'><img width="150" height="150" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-05-150x150.png" class="attachment-thumbnail" alt="android-market-05" title="android-market-05" /></a>
<a href='http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185/attachment/android-market-06' title='android-market-06'><img width="150" height="150" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-06-150x150.png" class="attachment-thumbnail" alt="android-market-06" title="android-market-06" /></a>
<a href='http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185/attachment/android-market-01' title='android-market-01'><img width="150" height="150" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-01-150x150.png" class="attachment-thumbnail" alt="android-market-01" title="android-market-01" /></a>
</div>
					
			

]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer le SDK Android et Eclipse ADT [Ubuntu 9.10]</title>
		<link>http://www.kakesa.net/os-design/installer-le-sdk-android-et-eclipse-adt-ubuntu-9-10/139</link>
		<comments>http://www.kakesa.net/os-design/installer-le-sdk-android-et-eclipse-adt-ubuntu-9-10/139#comments</comments>
		<pubDate>Wed, 25 Nov 2009 21:52:33 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[os design]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=139</guid>
		<description><![CDATA[Voici un petit tutoriel pour installer le SDK Android ainsi que l&#8217;IDE Eclipse et son plugin ADT permettant de réaliser ses premières lignes de code sous l&#8217;OS de Google. Je vous conseille de tester l&#8217;émulateur afin de vous familiariser avec Android. D&#8217;autres articles suivront sur la manière de réaliser ses premières applications.
Première étape installer java-6 [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"></div><div id="attachment_180" class="wp-caption alignleft" style="width: 122px"><a href="http://www.android.com/"><img class="size-full wp-image-180    " title="Logo Android" src="http://www.kakesa.net/wp-content/uploads/2009/11/android_logo.jpg" alt="Logo Android" width="112" height="112" /></a><p class="wp-caption-text">Logo Android</p></div>
<p>Voici un petit tutoriel pour installer le SDK Android ainsi que l&#8217;IDE Eclipse et son plugin ADT permettant de réaliser ses premières lignes de code sous l&#8217;OS de Google. Je vous conseille de tester l&#8217;émulateur afin de vous familiariser avec Android. D&#8217;autres articles suivront sur la manière de réaliser ses premières applications.</p>
<h3>Première étape installer java-6 et Ant</h3>
<pre class="brush: bash;">
sudo aptitude install sun-java6-bin ant
</pre>
<h3>Installer Eclipse et son plugin ADT</h3>
<pre class="brush: bash;">
sudo aptitude install eclipse
</pre>
<h3>Installer le plugin ADT pour eclipse</h3>
<p>Ici l&#8217;installation d&#8217;Eclipse permet de faciliter vos futurs développements, je vous conseil, dans un premier temps, de privilégier les commandes shell pour mieux maîtriser le développement sous Android.</p>
<ul>
<li>Lancer eclipse</li>
<li>Help &gt; Install New Softare</li>
</ul>
<ul>
<li>Cliquer sur &laquo;&nbsp;Add&nbsp;&raquo; ajouter les &laquo;&nbsp;Software sites&nbsp;&raquo; suivants :</li>
<li>Selon le schéma [Name] &#8211; [Location]
<ol>
<li>ADT &#8211; https://dl-ssl.google.com/android/eclipse/</li>
<li>Eclipse GEF &#8211; http://download.eclipse.org/tools/gef/updates/releases/</li>
<li>Eclipse EMF &#8211; http://download.eclipse.org/modeling/emf/updates/releases/</li>
<li>Eclipse GMF &#8211; http://download.eclipse.org/modeling/gmf/updates/releases</li>
<li>Eclipse Webtools &#8211; http://download.eclipse.org/webtools/updates/</li>
<li>Google eclipse Plugin &#8211; http://dl.google.com/eclipse/plugin/3.5</li>
</ol>
</li>
</ul>
<ul>
<li>Sélectionner &laquo;&nbsp;Developer Tools&nbsp;&raquo; et assurez-vous que &laquo;&nbsp;Contact all update sites during install&#8230;&nbsp;&raquo; soit coché, puis suivez le guide&#8230;</li>
</ul>
<h3>Installer le SDK</h3>
<pre class="brush: bash;">
mkdir -p ~/.local/opt
cd ~/.local/opt
</pre>
<p><a href="http://developer.android.com/sdk/index.html" target="_blank">Télécharger le SDK Android</a> dans ~/.local/opt/</p>
<pre class="brush: bash;">
tar -zxvf android-sdk_r3-linux.tgz
cd android-sdk-linux/tools/
echo &quot;export PATH=$(pwd):\${PATH}&quot; &gt;&gt; ~/.bashrc
. ~/.bashrc
</pre>
<h3>Mettre à jour le SDK</h3>
<pre class="brush: bash;">
android update sdk
</pre>
<h3>Faites connaissance avec l&#8217;émulateur Android</h3>
<p>Lister les firmware disponible et identifier l&#8217;ID d&#8217;une version qui vous intéresse</p>
<pre class="brush: bash;">
android list targets
</pre>
<p>Créer un avd et lancer l&#8217;émulateur (-t : Id précédemment identifié)</p>
<pre class="brush: bash;">
mksdcard -l sdcard-avd2.0_API5 4096M ~/.android/sdcard-avd2.0_API5
android create avd -n avd2.0_API5 -t 7
emulator -avd avd2.0_API5 -sdcard ~/.android/sdcard-avd2.0_API5
</pre>
<div id="attachment_153" class="wp-caption aligncenter" style="width: 458px"><img class="size-full wp-image-153 " title="Émulateur Android" src="http://www.kakesa.net/wp-content/uploads/2009/11/emulateur-android.png" alt="Émulateur Android" width="448" height="314" /><p class="wp-caption-text">Émulateur Android</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/os-design/installer-le-sdk-android-et-eclipse-adt-ubuntu-9-10/139/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>StAX XML Pull Parser</title>
		<link>http://www.kakesa.net/programmation/stax-xml-pull-parser/90</link>
		<comments>http://www.kakesa.net/programmation/stax-xml-pull-parser/90#comments</comments>
		<pubDate>Sun, 22 Nov 2009 01:31:23 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[c/c++]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=90</guid>
		<description><![CDATA[
			tweetmeme_url = "http://www.kakesa.net/programmation/stax-xml-pull-parser/90";
			tweetmeme_source = "tweetmeme";
		
		StAX pour Streaming Api for Xml est une méthode performante pour parser un document XML. Voici un petit article qui montre les bien faits de cette méthode permettant de parcourir un fichier XML. On connaît bien les méthodes DOM (Document Object Model) et SAX (Simple Api for Xml), mais un peu [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"><div class="socialize-in-button"><script type="text/javascript">
			tweetmeme_url = "http://www.kakesa.net/programmation/stax-xml-pull-parser/90";
			tweetmeme_source = "tweetmeme";
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button"><a title="Facebook" href="http://www.facebook.com/sharer.php?&u=http://www.kakesa.net/programmation/stax-xml-pull-parser/90&t=StAX XML Pull Parser" rel="me"><img src="http://www.kakesa.net/wp-content/plugins/socialize/images/fb.png"/></a></div></div><p>StAX pour Streaming Api for Xml est une méthode performante pour parser un document XML. Voici un petit article qui montre les bien faits de cette méthode permettant de parcourir un fichier XML. On connaît bien les méthodes DOM (Document Object Model) et SAX (Simple Api for Xml), mais un peu moins sur le StAX méthode dite de pull parsing.</p>
<div id="attachment_94" class="wp-caption aligncenter" style="width: 98px"><a href="http://www.w3.org/standards/xml/"><img class="size-full wp-image-94 " title="XML 1.1" src="http://www.kakesa.net/wp-content/uploads/2009/11/xml11-blue.png" alt="Logo XML 1.1" width="88" height="31" /></a><p class="wp-caption-text">Logo XML 1.1</p></div>
<p>Pour rappel, la méthode DOM a pour fonctionnement le chargement en mémoire de l&#8217;ensemble d&#8217;un fichier XML sous forme d&#8217;arbre ou tableau etc&#8230; Cette méthode convient pour des fichiers de petite taille mais pour des fichiers de plusieurs centaines de mégaoctets voir quelques gigaoctets, ce mode est très lent. DOM a la particularité de pouvoir parcourir un fichier dans un sens comme dans l&#8217;autre et de permettre l&#8217;écriture et la modification de nœuds XML. Le mode de parcours SAX est un mode dit de push parsing (évènement implémenté/déclenché du côté de l&#8217;API) qui permet le parcours d&#8217;un fichier uniquement vers l&#8217;avant. SAX consomme très peu de mémoire, et reste très rapide mais ne permet pas la modification de nœuds XML.</p>
<p>La notion de pull parsing pour le StAX vient du fait que l&#8217;évènement est demandée du côté du code client (comprendre le code client en dehors de l&#8217;API XML). Le parseur est ce qu&#8217;on appelle &laquo;&nbsp;stream based&nbsp;&raquo;, le code client soumet la portion de code a analyser par le parseur et récupère entre autre un évènement au quel on choisira de réaliser une action.<br />
Le pull parsing oblige une analyse vers l&#8217;avant uniquement et permet l&#8217;écriture mais pas la modification de nœuds XML. Les performance sont très élevées pour le parcours de fichiers volumineux.</p>
<p>Parseur de type StAX :</p>
<ul>
<li><a href="http://expat.sourceforge.net/">Expat</a> (C)</li>
<li><a href="http://code.google.com/p/spxml/">SPXML</a> (C++)</li>
<li>Plusieurs implémentations en JAVA basées sur la <a href="http://jcp.org/en/jsr/detail?id=173">JSR-173</a> (JAVA)</li>
</ul>
<p>Ci-dessous un exemple d&#8217;utilisation du parseur <a href="http://code.google.com/p/spxml/" target="_blank">SPXML</a> en mode StAX (supporte aussi DOM). On peut voir que le code utilisateur implémente les actions de traitement et non une redéfinition de méthodes de l&#8217;API comme en SAX. Notons que j&#8217;ai choisit de parcourir le fichier donné en paramètre, ligne à ligne, mais StAX étant stream based (basé sur des flots de données), il possible de parcourir selon un nombre d&#8217;octet définit.</p>
<pre class="brush: cpp;">
int main( int argc, const char * argv[] )
{
	std::string filename;
	if( argc != 2 )
	{
		std::cout &lt;&lt; &quot;Usage:&quot; &lt;&lt; argv[0] &lt;&lt; &quot; &lt;xml_file&gt;&quot; &lt;&lt; std::endl;
		return (-1);
	}
	else
		filename = argv[1];

	SP_XmlPullParser parser;
	std::string line;
	std::ifstream myfile(filename.c_str());
	if (myfile.is_open())
	{
		while (!myfile.eof())
		{
			std::getline(myfile, line);
			parser.append( line.c_str(), line.length() );
			for( SP_XmlPullEvent * event = parser.getNext(); NULL != event; event = parser.getNext() )
			{
				switch( event-&gt;getEventType() )
				{
					case SP_XmlPullEvent::eStartDocument:
						std::cout &lt;&lt; &quot;start document&quot; &lt;&lt; std::endl;
						break;
					case SP_XmlPullEvent::eEndDocument:
						std::cout &lt;&lt; &quot;\nend document&quot; &lt;&lt; std::endl;
						break;
					case SP_XmlPullEvent::eDocDecl:
					{
						SP_XmlDocDeclEvent * declEvent = (SP_XmlDocDeclEvent*)event;
						std::cout &lt;&lt; &quot;&lt;?xml&quot;;
						if( '\0' != *declEvent-&gt;getVersion() )
							std::cout &lt;&lt; &quot; version=\&quot;&quot; &lt;&lt; declEvent-&gt;getVersion() &lt;&lt; &quot;\&quot;&quot;;

						if( '\0' != *declEvent-&gt;getEncoding() )
							std::cout &lt;&lt; &quot; encoding=\&quot;&quot; &lt;&lt; declEvent-&gt;getEncoding() &lt;&lt; &quot;\&quot;&quot;;

						if( -1 != declEvent-&gt;getStandalone() )
							std::cout &lt;&lt; &quot; standalone=\&quot;&quot;&lt;&lt; (declEvent-&gt;getStandalone() ? &quot;yes&quot; : &quot;no&quot;) &lt;&lt; &quot;\&quot;&quot;;

						std::cout &lt;&lt; &quot;?&gt;&quot; &lt;&lt; std::endl;
						break;
					}
					case SP_XmlPullEvent::eDocType:
					{
						SP_XmlDocTypeEvent * typeEvent = (SP_XmlDocTypeEvent*)event;
						std::cout &lt;&lt; &quot;&lt;!DOCTYPE &quot; &lt;&lt; typeEvent-&gt;getName() &lt;&lt; &quot; PUBLIC \&quot;&quot; &lt;&lt; typeEvent-&gt;getPublicID() &lt;&lt; &quot;\&quot; SYSTEM \&quot;&quot; &lt;&lt; typeEvent-&gt;getSystemID() &lt;&lt; &quot;\&quot; \&quot;&quot; &lt;&lt; typeEvent-&gt;getDTD() &lt;&lt; &quot;\&quot;&gt;&quot; &lt;&lt; std::endl;
						break;
					}
					case SP_XmlPullEvent::eStartTag:
					{
						SP_XmlStartTagEvent * stagEvent = (SP_XmlStartTagEvent*)event;
						std::cout &lt;&lt; &quot;&lt;&quot; &lt;&lt; stagEvent-&gt;getName();
						for( int i = 0; i &lt; stagEvent-&gt;getAttrCount(); i++ )
						{
							const char * name = NULL, * value = NULL;
							name = stagEvent-&gt;getAttr( i, &amp;value );
							std::cout &lt;&lt; &quot; &quot; &lt;&lt; name &lt;&lt; &quot;=\&quot;&quot; &lt;&lt; value &lt;&lt; &quot;\&quot;&quot;;
						}
						std::cout &lt;&lt; &quot;&gt;&quot; &lt;&lt; std::endl;
						break;
					}
					case SP_XmlPullEvent::eEndTag:
						std::cout &lt;&lt; &quot;&lt;/&quot; &lt;&lt; ((SP_XmlTextEvent*)event)-&gt;getText() &lt;&lt; &quot;&gt;&quot; &lt;&lt; std::endl;
						break;
					case SP_XmlPullEvent::eCData:
					{
						SP_XmlStringBuffer buffer;
						SP_XmlStringCodec::encode( parser.getEncoding(),
						((SP_XmlTextEvent*)event)-&gt;getText(), &amp;buffer );
						std::cout &lt;&lt; buffer.getBuffer() &lt;&lt; std::endl;
						break;
					}
					case SP_XmlPullEvent::eComment:
						std::cout &lt;&lt; &quot;&lt;!--&quot; &lt;&lt; ((SP_XmlTextEvent*)event)-&gt;getText() &lt;&lt; &quot;--&gt;&quot; &lt;&lt; std::endl;
						break;
					case SP_XmlPIEvent::ePI:
						std::cout &lt;&lt; &quot;&lt;?&quot; &lt;&lt; ((SP_XmlPIEvent*)event)-&gt;getTarget() &lt;&lt; &quot; &quot; &lt;&lt; ((SP_XmlPIEvent*)event)-&gt;getData() &lt;&lt; &quot;?&gt;&quot; &lt;&lt; std::endl;
						break;
				};
				delete event;
			}
		}
		myfile.close();
		if( NULL != parser.getError() )
			std::cerr &lt;&lt; &quot;\nerror: &quot; &lt;&lt; std::string(parser.getError()) &lt;&lt; std::endl;
	}
	else
		std::cerr &lt;&lt; &quot;\nCan't open &quot; &lt;&lt; filename &lt;&lt; &quot; !!!&quot; &lt;&lt; std::endl;

	return 0;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/stax-xml-pull-parser/90/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrer vers Ubuntu 9.10 « Karmic Koala »</title>
		<link>http://www.kakesa.net/linux/migrer-vers-ubuntu-9-10-karmic-koala/69</link>
		<comments>http://www.kakesa.net/linux/migrer-vers-ubuntu-9-10-karmic-koala/69#comments</comments>
		<pubDate>Wed, 04 Nov 2009 00:07:37 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=69</guid>
		<description><![CDATA[
			tweetmeme_url = "http://www.kakesa.net/linux/migrer-vers-ubuntu-9-10-karmic-koala/69";
			tweetmeme_source = "tweetmeme";
		
		Cela fait maintenant 1 semaine que la nouvelle version d&#8217;Ubuntu est sortie. Nom de code Karmic Koala. Pour ceux qui veulent réaliser une mise à jour dans les règles de l&#8217;art, voilà le secret :

$ sudo aptitude update
$ sudo aptitude safe-upgrade
$ sudo update-manager -d

Il ne reste plus qu&#8217;à se laisser guider [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"><div class="socialize-in-button"><script type="text/javascript">
			tweetmeme_url = "http://www.kakesa.net/linux/migrer-vers-ubuntu-9-10-karmic-koala/69";
			tweetmeme_source = "tweetmeme";
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button"><a title="Facebook" href="http://www.facebook.com/sharer.php?&u=http://www.kakesa.net/linux/migrer-vers-ubuntu-9-10-karmic-koala/69&t=Migrer vers Ubuntu 9.10 « Karmic Koala »" rel="me"><img src="http://www.kakesa.net/wp-content/plugins/socialize/images/fb.png"/></a></div></div><div class="wp-caption aligncenter" style="width: 212px"><a href="http://www.ubuntu.com/"><img title="Logo Ubuntu" src="http://www.ubuntu.com/sites/all/themes/ubuntu09/styles/../logo.png" alt="Logo Ubuntu" width="202" height="55" /></a><p class="wp-caption-text">Ubuntu 9.10 Karmic Koala</p></div>
<p>Cela fait maintenant 1 semaine que la nouvelle version d&#8217;Ubuntu est sortie. Nom de code Karmic Koala. Pour ceux qui veulent réaliser une mise à jour dans les règles de l&#8217;art, voilà le secret :</p>
<pre class="brush: bash;">
$ sudo aptitude update
$ sudo aptitude safe-upgrade
$ sudo update-manager -d
</pre>
<p>Il ne reste plus qu&#8217;à se laisser guider et tester cette nouvelle version. La mise à jour depuis une Ubuntu Jaunty Jakalope est très simple. Il est possible, aussi, de télécharger l&#8217;image CD ISO pour une installation complète :</p>
<ul>
<li><a title="Téléchargement Ubuntu" href="http://www.ubuntu-fr.org/telechargement/" target="_blank">http://www.ubuntu-fr.org/telechargement/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/migrer-vers-ubuntu-9-10-karmic-koala/69/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OsiLink : l&#8217;open source francophone</title>
		<link>http://www.kakesa.net/ruby-et-rubyonrails/osilink-lopen-source-francophone/55</link>
		<comments>http://www.kakesa.net/ruby-et-rubyonrails/osilink-lopen-source-francophone/55#comments</comments>
		<pubDate>Mon, 02 Nov 2009 10:31:20 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[projets perso]]></category>
		<category><![CDATA[ruby et rubyonrails]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=55</guid>
		<description><![CDATA[
			tweetmeme_url = "http://www.kakesa.net/ruby-et-rubyonrails/osilink-lopen-source-francophone/55";
			tweetmeme_source = "tweetmeme";
		
		OsiLink est un projet qui vise à mettre en relation des développeurs qui sont soit à la recherche d&#8217;un projet de développement soit à la recherche de compétences pour la réalisation d&#8217;un projet open source.
]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"><div class="socialize-in-button"><script type="text/javascript">
			tweetmeme_url = "http://www.kakesa.net/ruby-et-rubyonrails/osilink-lopen-source-francophone/55";
			tweetmeme_source = "tweetmeme";
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button"><a title="Facebook" href="http://www.facebook.com/sharer.php?&u=http://www.kakesa.net/ruby-et-rubyonrails/osilink-lopen-source-francophone/55&t=OsiLink : l&#8217;open source francophone" rel="me"><img src="http://www.kakesa.net/wp-content/plugins/socialize/images/fb.png"/></a></div></div><div class="wp-caption aligncenter" style="width: 267px"><a href="http://www.osilink.org/"><img title="OsiLink, la promotion de lOpen Source Francophone " src="http://www.osilink.org/images/logo_osilink.png?1217094203" alt="Promouvoir de lOpen Source Francophone " width="257" height="96" /></a><p class="wp-caption-text">Promouvoir de l&#39;Open Source Francophone </p></div>
<p>OsiLink est un projet qui vise à mettre en relation des développeurs qui sont soit à la recherche d&#8217;un projet de développement soit à la recherche de compétences pour la réalisation d&#8217;un projet open source.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/ruby-et-rubyonrails/osilink-lopen-source-francophone/55/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RubyConf 2009 à San Francisco</title>
		<link>http://www.kakesa.net/ruby-et-rubyonrails/rubyconf-2009-a-san-francisco/36</link>
		<comments>http://www.kakesa.net/ruby-et-rubyonrails/rubyconf-2009-a-san-francisco/36#comments</comments>
		<pubDate>Mon, 26 Oct 2009 00:52:26 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[ruby et rubyonrails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=36</guid>
		<description><![CDATA[
			tweetmeme_url = "http://www.kakesa.net/ruby-et-rubyonrails/rubyconf-2009-a-san-francisco/36";
			tweetmeme_source = "tweetmeme";
		
		C&#8217;est du 19 au 21 novembre 2009 à San Francisco qu&#8217;aura lieu la RubyConf de cette année. C&#8217;est l&#8217;occasion de pour les plus chanceux de se mettre à jour sur les nouveautés et retour d&#8217;expérience directement liés à la technologie Ruby.
Au passage voici une adresse qui permet de trouver des vidéos [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"><div class="socialize-in-button"><script type="text/javascript">
			tweetmeme_url = "http://www.kakesa.net/ruby-et-rubyonrails/rubyconf-2009-a-san-francisco/36";
			tweetmeme_source = "tweetmeme";
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button"><a title="Facebook" href="http://www.facebook.com/sharer.php?&u=http://www.kakesa.net/ruby-et-rubyonrails/rubyconf-2009-a-san-francisco/36&t=RubyConf 2009 à San Francisco" rel="me"><img src="http://www.kakesa.net/wp-content/plugins/socialize/images/fb.png"/></a></div></div><div class="wp-caption aligncenter" style="width: 332px"><a href="http://www.rubyconf.org/" target="_blank"><img title="Logo RubyConf 2009" src="http://www.rubyconf.org/images/logo.png" alt="RubyConf 2009 à San Francisco" width="322" height="120" /></a><p class="wp-caption-text">RubyConf 2009 à San Francisco</p></div>
<p style="text-align: left;">C&#8217;est du 19 au 21 novembre 2009 à San Francisco qu&#8217;aura lieu la RubyConf de cette année. C&#8217;est l&#8217;occasion de pour les plus chanceux de se mettre à jour sur les nouveautés et retour d&#8217;expérience directement liés à la technologie Ruby.</p>
<p>Au passage voici une adresse qui permet de trouver des vidéos interressante sur Ruby et RubyOnRails : <a href="http://envycasts.com/" target="_blank">http://envycasts.com/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/ruby-et-rubyonrails/rubyconf-2009-a-san-francisco/36/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PGDay Europe 2009</title>
		<link>http://www.kakesa.net/base-de-donnees/pgday-europe-2009/17</link>
		<comments>http://www.kakesa.net/base-de-donnees/pgday-europe-2009/17#comments</comments>
		<pubDate>Mon, 05 Oct 2009 20:06:16 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[base de données]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=17</guid>
		<description><![CDATA[
			tweetmeme_url = "http://www.kakesa.net/base-de-donnees/pgday-europe-2009/17";
			tweetmeme_source = "tweetmeme";
		
		Cette année le projet PostgreSQL a choisit Paris pour sa conférence annuelle internationale. Le rendez-vous est donné pour les 6 et 7 novembre 2009 à Télécom ParisTech. Deux jours de conférences pour tous les niveaux en anglais et français.
Au programme, des retours d&#8217;expériences, technique de mise en place de dataware house, [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"><div class="socialize-in-button"><script type="text/javascript">
			tweetmeme_url = "http://www.kakesa.net/base-de-donnees/pgday-europe-2009/17";
			tweetmeme_source = "tweetmeme";
		</script>
		<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div><div class="socialize-in-button"><a title="Facebook" href="http://www.facebook.com/sharer.php?&u=http://www.kakesa.net/base-de-donnees/pgday-europe-2009/17&t=PGDay Europe 2009" rel="me"><img src="http://www.kakesa.net/wp-content/plugins/socialize/images/fb.png"/></a></div></div><p><a href="http://2009.pgday.eu/fr:start"><img class="alignleft size-full wp-image-23" title="PGDay Europe 2009, les 6-7 novembre à Télécom ParisTech" src="http://www.kakesa.net/wp-content/uploads/2009/10/pgday2009-logo1.png" alt="pgday2009-logo" width="230" height="80" /></a>Cette année le projet PostgreSQL a choisit Paris pour sa conférence annuelle internationale. Le rendez-vous est donné pour les 6 et 7 novembre 2009 à <a title="Télécom ParisTech" href="http://www.telecom-paristech.fr/" target="_blank">Télécom ParisTech</a>. Deux jours de conférences pour tous les niveaux en anglais et français.</p>
<p>Au programme, des retours d&#8217;expériences, technique de mise en place de dataware house, calcul spatial, étude de cas, développement agile etc&#8230;</p>
<p style="text-align: center;"><a href="http://www.postgresql.fr/"><img class="aligncenter size-full wp-image-19" title="Site de la communauté francophone de PostgreSQL" src="http://www.kakesa.net/wp-content/uploads/2009/10/pg-fr-logo.png" alt="pg-fr-logo" width="100" height="100" /></a>S&#8217;inscrire à l&#8217;évènement : <a title="Inscription à PGDay Europe 2009" href="http://2009.pgday.eu/fr:register" target="_blank">http://2009.pgday.eu/fr:register</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/base-de-donnees/pgday-europe-2009/17/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bonjour tout le monde !</title>
		<link>http://www.kakesa.net/non-classe/bonjour-tout-le-monde/1</link>
		<comments>http://www.kakesa.net/non-classe/bonjour-tout-le-monde/1#comments</comments>
		<pubDate>Tue, 22 Sep 2009 22:46:36 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[non classé]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=1</guid>
		<description><![CDATA[Mon blog fait peau neuve. Au programme toujours beaucoup de techno linux et certainements de grosses réflexion autour du web et et son développement.
Retrouvrez mon ancien blog sur : http://ancienblog.kakesa.net/
Le ton est donné !!!
]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content"></div><p>Mon blog fait peau neuve. Au programme toujours beaucoup de techno linux et certainements de grosses réflexion autour du web et et son développement.</p>
<p style="text-align: center;">Retrouvrez mon ancien blog sur : <a href="http://ancienblog.kakesa.net/"><strong>http://ancienblog.kakesa.net/</strong></a></p>
<p>Le ton est donné !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/non-classe/bonjour-tout-le-monde/1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
