<?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</title>
	<atom:link href="http://www.kakesa.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kakesa.net</link>
	<description>All is about programming</description>
	<lastBuildDate>Sat, 15 Jun 2013 12:35:52 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Un Gem Ruby Pour Google Maps Geocoding Service</title>
		<link>http://www.kakesa.net/ruby-et-rubyonrails/un-gem-ruby-pour-google-maps-geocoding-service/1113</link>
		<comments>http://www.kakesa.net/ruby-et-rubyonrails/un-gem-ruby-pour-google-maps-geocoding-service/1113#comments</comments>
		<pubDate>Mon, 10 Jun 2013 07:30:38 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[projets perso]]></category>
		<category><![CDATA[ruby et rubyonrails]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[geolocalisation]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=1113</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_13075216"></div></div></div>C&#8217;est la première fois que je ne trouve pas un gem Ruby qui correspond a mes besoins. C&#8217;est une bonne occasion pour en proposer un. Il s&#8217;agit d&#8217;utiliser l&#8217;API Google Maps Geocoding Service en Ruby. Le gem gmaps_geocoding est la réponse a mon problème. Ce gem, minimaliste, permet d&#8217;utiliser pleinement le service web Google Maps&#8230; <a href="http://www.kakesa.net/ruby-et-rubyonrails/un-gem-ruby-pour-google-maps-geocoding-service/1113">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_13075216"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_13075216"></div></div></div><p>C&rsquo;est la première fois que je ne trouve pas un gem Ruby qui correspond a mes besoins. C&rsquo;est une bonne occasion pour en proposer un. Il s&rsquo;agit d&rsquo;utiliser l&rsquo;API <em>Google Maps Geocoding Service</em> en Ruby.</p>
<p><a class="thumbnail" href="http://www.kakesa.net/wp-content/uploads/2013/06/GoogleMaps_logo.png"><img src="http://www.kakesa.net/wp-content/uploads/2013/06/GoogleMaps_logo-300x146.png" alt="Google Maps logo" width="300" height="146" class="aligncenter size-medium wp-image-1141" /></a></p>
<p>Le gem <a href="https://rubygems.org/gems/gmaps_geocoding" title="gmaps_geocoding" target="_blank">gmaps_geocoding</a> est la réponse a mon problème. Ce gem, minimaliste, permet d&rsquo;utiliser pleinement le service web Google Maps Geocoding Service.</p>
<pre class="brush: ruby; title: ; notranslate">
# json output example (default output)
opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'json'}
api = GmapsGeocoding::Api.new(opts)
result = api.get_location
</pre>
<pre class="brush: ruby; title: ; notranslate">
# xml output example
opts = {address: 'Tour Eiffel, Paris, IDF, France', output: 'xml'}
api = GmapsGeocoding::Api.new(opts)
result = api.get_location
</pre>
<p>Très simplement.</p>
<dl>
<dt>Liens :</dt>
<dd>
<ul>
<li><a href="https://rubygems.org/gems/gmaps_geocoding" title="gmaps_geocoding" target="_blank">sur rubygems.org</a></li>
<li><a href="https://github.com/fenicks/gmaps_geocoding" title="gmaps_geocoding" target="_blank">sur github</a></li>
</ul>
</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/ruby-et-rubyonrails/un-gem-ruby-pour-google-maps-geocoding-service/1113/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capturer le dialogue USB avec Wireshark sous linux</title>
		<link>http://www.kakesa.net/linux/capturer-le-dialogue-usb-avec-wireshark-sous-linux/1087</link>
		<comments>http://www.kakesa.net/linux/capturer-le-dialogue-usb-avec-wireshark-sous-linux/1087#comments</comments>
		<pubDate>Tue, 04 Jun 2013 22:23:45 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[usbmon]]></category>
		<category><![CDATA[wireshark]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=1087</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_98619436"></div></div></div>Linux offre une interface pour récupérer toutes les trames USB. le module kernel s&#8217;appelle USBMON, pour l&#8217;intégrer dans le kernel, exécuter la ligne ci-dessous : Installer ensuite un outil pour filtrer graphiquement le dialogue USB, pour ma part Wireshark fais très bien l&#8217;affaire : Vérifier si debugfs est monté sur la machine : Si ce&#8230; <a href="http://www.kakesa.net/linux/capturer-le-dialogue-usb-avec-wireshark-sous-linux/1087">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_98619436"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_98619436"></div></div></div><p>Linux offre une interface pour récupérer toutes les trames USB.<br />
le module kernel s&rsquo;appelle <strong>USBMON</strong>, pour l&rsquo;intégrer dans le kernel, exécuter la ligne ci-dessous : </p>
<pre class="brush: bash; title: ; notranslate">
sudo modprobe usbmon
</pre>
<p>Installer ensuite un outil pour filtrer graphiquement le dialogue USB, pour ma part <strong>Wireshark</strong> fais très bien l&rsquo;affaire : </p>
<pre class="brush: bash; title: ; notranslate">
sudo apt-get install wireshark
</pre>
<p>Vérifier si <code>debugfs</code> est monté sur la machine : </p>
<pre class="brush: bash; title: ; notranslate">
sudo ls -l /sys/kernel/debug
</pre>
<p>Si ce n&rsquo;est pas le cas, montez-le avec la commande suivante : </p>
<pre class="brush: bash; title: ; notranslate">
sudo mount -t debugfs / /sys/kernel/debug
</pre>
<p>Lancer <strong>Wireshark</strong> en tant <em>root</em> et sélectionner le bus USB souhaité : </p>
<pre class="brush: bash; title: ; notranslate">
sudo wireshark
</pre>
<p><a class="thumbnail" href="http://www.kakesa.net/wp-content/uploads/2013/06/wireshark_usbmon-nq8.png"><img src="http://www.kakesa.net/wp-content/uploads/2013/06/wireshark_usbmon-nq8-300x237.png" alt="wireshark_usbmon-nq8" width="300" height="237" class="aligncenter size-medium wp-image-1104" /></a></p>
<p>Voilà, à vous le debug USB sous linux, très simplement.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/capturer-le-dialogue-usb-avec-wireshark-sous-linux/1087/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cplusplus11, maîtrisons le temps : les durées et périodes</title>
		<link>http://www.kakesa.net/programmation/cplusplus11-maitrisons-le-temps-les-durees-et-periodes/939</link>
		<comments>http://www.kakesa.net/programmation/cplusplus11-maitrisons-le-temps-les-durees-et-periodes/939#comments</comments>
		<pubDate>Sun, 02 Jun 2013 21:30:46 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[c++11]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[std::chrono]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=939</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_50031566"></div></div></div>C++11 offre une abstraction simple pour gérer le temps. Le tout est inclus dans le header &#60;chrono&#62;. Avec cette nouvelle manière de représenter une période, il est facile de convertir les types de durée : nanosecondes (std::chrono::nanoseconds) microsecondes (std::chrono::microseconds) millisecondes (std::chrono::milliseconds) secondes (std::chrono::seconds) minutes (std::chrono::minutes) heures (std::chrono::hours) Avant de commencer définissons les 3 types d&#8217;horloges&#8230; <a href="http://www.kakesa.net/programmation/cplusplus11-maitrisons-le-temps-les-durees-et-periodes/939">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_50031566"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_50031566"></div></div></div><p>C++11 offre une abstraction simple pour gérer le temps. Le tout est inclus dans le header <code>&lt;chrono&gt;</code>.<br />
Avec cette nouvelle manière de représenter une période, il est facile de convertir les types de durée :</p>
<ul>
<li>nanosecondes (<code>std::chrono::nanoseconds</code>)</li>
<li>microsecondes (<code>std::chrono::microseconds</code>)</li>
<li>millisecondes (<code>std::chrono::milliseconds</code>)</li>
<li>secondes (<code>std::chrono::seconds</code>)</li>
<li>minutes (<code>std::chrono::minutes</code>)</li>
<li>heures (<code>std::chrono::hours</code>)</li>
</ul>
<p>Avant de commencer définissons les 3 types d&rsquo;horloges qu&rsquo;il nous ait possible d&rsquo;utiliser :</p>
<dl>
<dt>std::chrono::system_clock</dt>
<dd>Représente l&rsquo;horloge système. Celle qui peut être modifiée à tout moment. Cette horloge permet généralement l&rsquo;affichage de la date sur un système.</dd>
</dl>
<dl>
<dt>std::chrono::steady_clock</dt>
<dd>Horloge monotonique, certainement la plus adaptée pour représenter une période. Cette horloge ne diminue pas au fur et à mesure que le temps avance et n&rsquo;est pas liée à l&rsquo;horloge système. Elle assure une cadence fiable.</dd>
</dl>
<dl>
<dt>std::chrono::high_resolution_clock</dt>
<dd>L&rsquo;horloge la plus précise disponible sur l&rsquo;environnement d&rsquo;exécution. Peut représenter l&rsquo;horloge système, l&rsquo;horloge monotonique ou une autre horloge mais dans tous les cas, la plus précise.</dd>
</dl>
<p>Maintenant que nous connaissons les possibilités pour récupérer un instant temporel, tentons de réaliser un exemple simple (<strong>G++ 4.7.x minimum</strong>) :</p>
<pre class="brush: cpp; title: ; notranslate">
#include&lt;iostream&gt;
#include&lt;chrono&gt;
#include&lt;thread&gt;

int main () {
    auto start = std::chrono::steady_clock::now();
    std::this_thread::sleep_for(std::chrono::seconds(2));
    auto end = std::chrono::steady_clock::now();
    auto elapsed = end - start;
    std::cout &lt;&lt; &quot; Elapsed time: &quot; &lt;&lt; elapsed.count() &lt;&lt; std::endl;
    std::cout &lt;&lt; std::endl;
    return 0;
}
</pre>
<p><code>[OUTPUT] Elapsed time: 2000069</code></p>
<p>Dans cet exemple nous récupérons un instant temporel <code>start</code>, puis réalisons une attente de 2 secondes et reprenons un instant temporel <code>end</code>. Notons que <code>std::chrono:steady_clock::now()</code> renvoi un objet de type <code>std::chrono::time_point</code>. On assigne la différence entre <code>end</code> et <code>start</code> dans la variable <code>elapsed</code>.<br />
<code>elapsed</code> est de type <code>std::chrono::duration</code>, on affiche la durée avec la méthode <code>std::chrono::duration.count()</code>. C&rsquo;est très claire et sympa à lire. Notons aussi que nous n&rsquo;avons pas précisé l&rsquo;unité de la période souhaité, dans ce cas précis nous avons des <strong>microsecondes</strong>.</p>
<p>Ci-dessous le même exemple en précisant que nous voulons des secondes (<strong>G++ 4.7.x minimum</strong>) :</p>
<pre class="brush: cpp; title: ; notranslate">
#include&lt;iostream&gt;
#include&lt;chrono&gt;
#include&lt;thread&gt;

int main () {
    auto start = std::chrono::steady_clock::now();
    std::this_thread::sleep_for(std::chrono::seconds(2));
    auto end = std::chrono::steady_clock::now();
    auto elapsed = end - start;
    std::cout &lt;&lt; &quot; Elapsed time: &quot; &lt;&lt; std::chrono::duration_cast&lt;std::chrono::seconds&gt;(elapsed).count() &lt;&lt; &quot; seconds&quot; &lt;&lt; std::endl;
    std::cout &lt;&lt; std::endl;
    return 0;
}
</pre>
<p><code>[OUTPUT] Elapsed time: 2 seconds</code></p>
<p>Une abstraction efficace qui permet une utilisation simple et intuitive des durées.<br />
C&rsquo;est exactement ce à quoi on s&rsquo;attend d&rsquo;une librairie standard.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/cplusplus11-maitrisons-le-temps-les-durees-et-periodes/939/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cplusplus11, les expressions lambda</title>
		<link>http://www.kakesa.net/programmation/cplusplus11-les-expressions-lambda/861</link>
		<comments>http://www.kakesa.net/programmation/cplusplus11-les-expressions-lambda/861#comments</comments>
		<pubDate>Fri, 12 Oct 2012 15:45:49 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[c++11]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[cplusplus]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=861</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_26748143"></div></div></div>On continue l&#8217;aventure Cplusplus11 après le premier article qui était plus une mise en jambe. Cette fois-ci nous allons attaquer les fonctions anonymes, Lambda expression. Les expressions lambda sont utiles pour écrire des blocs de code en ligne qui sont des fonctions un peu spéciales. Ces fonctions anonymes peuvent être passées en paramètre d&#8217;autres fonctions&#8230; <a href="http://www.kakesa.net/programmation/cplusplus11-les-expressions-lambda/861">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_26748143"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_26748143"></div></div></div><p>On continue l&rsquo;aventure Cplusplus11 après le <a href="http://www.kakesa.net/programmation/cplusplus11-decouverte-de-ce-nouveau-dialecte/797">premier article</a> qui était plus une mise en jambe. Cette fois-ci nous allons attaquer les fonctions anonymes, <em>Lambda expression</em>. Les expressions lambda sont utiles pour écrire des blocs de code en ligne qui sont des fonctions un peu spéciales. Ces fonctions anonymes peuvent être passées en paramètre d&rsquo;autres fonctions et peuvent aussi récupérer le <em>contexte</em> comme nous le verrons plus loin. Par ailleurs les fonctions lambda améliorent aussi la lisibilité des programmes C++11 car il n&rsquo;est plus nécessaire d&rsquo;encapsuler des méthodes qu&rsquo;on veut utiliser qu&rsquo;une fois dans des classes ou des fichiers externes. C&rsquo;est maintenant l&rsquo;heure d&rsquo;explorer la signature des <em>Lambda expression</em>.</p>
<h2>Signature d&rsquo;une expression lambda</h2>
<pre class="brush: cpp; title: ; notranslate">
[capture] (arguments) attribute-specifier mutable exception-specification -&gt; return-type {body}
// or
[capture] (arguments) -&gt; return-type {body}
// or
[capture] (arguments) {body}
// or
[capture] {body}
</pre>
<h2>Description de la signature de l&rsquo;expression lambda</h2>
<dl>
<dt><em>capture</em> (liste de capture)</dt>
<dd>
<ul>
<li>[] : aucune capture des variables du contexte</li>
<li>[<strong>this</strong>] : capture le pointeur <em>this</em> de la classe englobante</li>
<li>[<strong>&#038;</strong>] : capture toutes les variables du contexte par référence</li>
<li>[<strong>=</strong>] : capture toutes les variables du contexte par valeur</li>
<li>[<strong>&#038;x</strong>] : capture uniquement la variable <em>x</em> par référence</li>
<li>[<strong>x</strong>] : capture uniquement la variable <em>x</em> par par valeur</li>
<li>[<strong>x</strong>, <strong>&#038;y</strong>] : capture la variable <em>x</em> par par valeur et <em>y</em> par référence</li>
</ul>
</dd>
<dt><em>arguments</em> (liste d&rsquo;arguments)</dt>
<dd>
<ul>
<li>liste des paramètres de la fonction <em>lambda</em></li>
</ul>
</dd>
<dt><em>attribute-specifier</em>, <em>mutable</em>, <em>exception-specification</em> (modificateur et spécificateurs)</dt>
<dd>
<ul>
<li>attribute-specifier : [[noreturn]] indique que la fonction ne retourne rien et [[carries_dependency]] permet de contrôler la gestion du stockage en mémoire. <strong>Ne fonctionne pas avec G++ 4.6.3, actuellement seul Intel-C++ 12.1 les supportes</strong></li>
<li><em>mutable</em> : permet de modifier les variables capturées par valeur dans le corps de la fonction</li>
<li><em>exception-specification</em> : spécificateur d&rsquo;exception tel que <em>noexcept</em>, <em>throw()</em>, etc&hellip;</li>
</ul>
</dd>
<dt><em>return-type</em></dt>
<dd>
    Type de retour de la fonction lambda.
  </dd>
<dt><em>body</em></dt>
<dd>
    Corps de la fonction lambda.
  </dd>
</dl>
<h2>Exemple d&rsquo;utilisation (<a href="https://github.com/fenicks/exemples_cplusplus11" target="_blank">projet github des exemples</a>)</h2>
<pre class="brush: cpp; title: ; notranslate">
#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;

int main() {
	std::vector&lt;std::string&gt; data{&quot;first&quot;, &quot;second&quot;, &quot;third&quot;};
	std::string one = &quot;one!!&quot;;
	std::string two = &quot;two&quot;;
	std::string three = &quot;three&quot;;
	std::cout &lt;&lt; std::endl;
	// Process data vector with lambda function
	for_each(begin(data), end(data), [one, &amp;two, &amp;three](std::string &amp;item) mutable {
		item  += &quot;_append&quot;;
		one   += &quot;_another value now&quot;; // We use &quot;mutable&quot; for variable passed by copy.
		two   += &quot;_two&quot;;
		three += &quot;_three&quot;;
	});
	// Print data vector after processing
	std::cout &lt;&lt; &quot;after:&quot; &lt;&lt; std::endl &lt;&lt; &quot; - data: &quot;;
	for (const auto d : data) {
		std::cout &lt;&lt; d &lt;&lt; &quot; &quot;;
	}
	std::cout &lt;&lt; std::endl;
	std::cout &lt;&lt; &quot; - one: &quot; &lt;&lt; one &lt;&lt; &quot; - two: &quot; &lt;&lt; two &lt;&lt; &quot; - three: &quot; &lt;&lt; three;
	std::cout &lt;&lt; std::endl;
	return 0;
}
</pre>
<blockquote><p>
Dans cet exemple nous initialisons un <em>vecteur</em> de <em>string</em> avec 3 éléments, puis nous initialisons 3 variables de type <em>string</em>. Nous utilisons <em>for_each</em> pour parcourir le vecteur <em>data</em> et concaténons chaque élément avec une expression lambda passée en paramètre de <em>for_each</em>. Dans le corps de la fonction lambda, nous concaténons aussi les variables <strong>one</strong> (récupéré par valeur), <strong>two</strong> (récupéré par référence), <strong>three</strong> (récupéré par référence). Nous affichons, au final, le résultat. Vous remarquerez que la variable <em>one</em> n&rsquo;a pas été impactée après le traitement car elle a été capturée par valeur.
</p></blockquote>
<pre>
//<em>output</em>
after:
 - data: first_append second_append third_append
 - one: one!! - two: two_two_two_two - three: three_three_three_three
</pre>
<p>Ce sera tout pour le moment, nous attaquerons d&rsquo;autres nouveautés dans un prochain article&hellip;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/cplusplus11-les-expressions-lambda/861/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boîtier Pibow pour Raspberry Pi</title>
		<link>http://www.kakesa.net/projets-perso/boitier-pibow-pour-raspberry-pi/968</link>
		<comments>http://www.kakesa.net/projets-perso/boitier-pibow-pour-raspberry-pi/968#comments</comments>
		<pubDate>Thu, 20 Sep 2012 21:00:16 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[projets perso]]></category>
		<category><![CDATA[raspberry pi]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=968</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_86626830"></div></div></div>Je viens de recevoir mon boîtier Pibow après 1 mois et demi d&#8217;attente. Mais ce n&#8217;est qu&#8217;une étape avant de recevoir le device Raspberry Pi le mois prochain. Un conseil, soyez patient ! Photos du déballage :]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_86626830"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_86626830"></div></div></div><p><a href="http://www.kakesa.net/projets-perso/boitier-pibow-pour-raspberry-pi/968/attachment/pibow-photo-flickr" rel="attachment wp-att-971"><img class="alignleft size-thumbnail wp-image-971" title="Pibow pour Raspberry Pi" src="http://www.kakesa.net/wp-content/uploads/2012/09/pibow-photo-flickr-150x150.jpg" alt="" width="150" height="150" /></a>Je viens de recevoir mon boîtier Pibow après 1 mois et demi d&rsquo;attente. Mais ce n&rsquo;est qu&rsquo;une étape avant de recevoir le device <a title="Site internet du Raspberry Pi" href="http://www.raspberrypi.org/" target="_blank">Raspberry Pi</a> le mois prochain. Un conseil, soyez patient !</p>
<p>Photos du déballage :<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/projets-perso/boitier-pibow-pour-raspberry-pi/968/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cplusplus11, découverte de ce nouveau dialecte</title>
		<link>http://www.kakesa.net/programmation/cplusplus11-decouverte-de-ce-nouveau-dialecte/797</link>
		<comments>http://www.kakesa.net/programmation/cplusplus11-decouverte-de-ce-nouveau-dialecte/797#comments</comments>
		<pubDate>Tue, 01 May 2012 17:28:54 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[c++11]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[cplusplus]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=797</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_84156426"></div></div></div>Il y a quelques mois je me réjouissais de la validation du standard C++11. Je regrette toujours que les sockets réseau n&#8217;aient pas été implémenté. Après plusieurs lectures sur le sujet, je recherche l&#8217;adoption totale de la nouvelle syntaxe de C++11. Tentons de dompter les nouveautés. Les exemples sont testés avec GCC version 4.6.1 (Ubuntu/Linaro&#8230; <a href="http://www.kakesa.net/programmation/cplusplus11-decouverte-de-ce-nouveau-dialecte/797">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_84156426"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_84156426"></div></div></div><p>Il y a quelques mois je me <a href="http://www.kakesa.net/?p=452">réjouissais de la validation du standard C++11</a>. Je regrette toujours que les sockets réseau n&rsquo;aient pas été implémenté.</p>
<p>Après plusieurs lectures sur le sujet, je recherche l&rsquo;adoption totale de la nouvelle syntaxe de C++11. Tentons de dompter les nouveautés. Les  exemples sont testés avec <em>GCC version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)</em>, le code source est disponible sur <a href="https://github.com/fenicks/exemples_cplusplus11" title="Dépôt GiHub pour les exemples de codes sources c++11" target="_blank">GitHub</a>.</p>
<p>Nous allons commencer à travailler sur les types automatiques avec le mot clé <strong>auto</strong> et l&rsquo;opérateur <strong>decltype</strong>.</p>
<pre class="brush: cpp; title: ; notranslate">
#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;string&gt;
#include&lt;algorithm&gt;//for_each
#include&lt;typeinfo&gt;//typeid

int main() {
  std::vector&lt;std::string&gt; data{&quot;first&quot;, &quot;second&quot;, &quot;third&quot;};//uniform brace notation
  for (const auto item : data) {//Range based for loop
  std::cout &lt;&lt; &quot;Iterate =&gt;&quot; &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;  Automatic item type: &quot; &lt;&lt; typeid(item).name() &lt;&lt; &quot; - Item value: &quot; &lt;&lt; item &lt;&lt; std::endl;
    decltype(item) dynamic_value = item;
    std::cout &lt;&lt; &quot;  Dynamic type: &quot; &lt;&lt; typeid(dynamic_value).name() &lt;&lt; &quot; - Dynamic value: &quot; &lt;&lt; dynamic_value &lt;&lt; std::endl;
    std::cout &lt;&lt; std::endl;
  }
  return 0;
}
</pre>
<blockquote><p>Dans cet exemple nous initialisons un vecteur de chaîne de caractères puis bouclons sur chaque item ; le type de chaque item est récupéré automatiquement et nous créons dynamiquement une variable du même type que l&rsquo;item. Pour le moment ne tenez pas compte de la syntaxe particulière de la boucle <strong>for</strong>.</p></blockquote>
<p>Simplification de l&rsquo;itération simple d&rsquo;un conteneur avec la structure de contrôle <em>for</em>.</p>
<pre class="brush: cpp; title: ; notranslate">
#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;string&gt;

int main() {
  std::vector&lt;std::string&gt; data{&quot;first&quot;, &quot;second&quot;, &quot;third&quot;};
  for(const auto item : data) {
    std::cout &lt;&lt; &quot;Item value: &quot; &lt;&lt; item &lt;&lt; std::endl;
  }  
  return 0;
}
</pre>
<blockquote><p>Une simple boucle <strong>for</strong> tel que le propose déjà des langages tel que Java ou C#. Un vrai bonheur pour notre langage. Notons que pour un parcours spécifique ou plus complexe, il est plus puissant d&rsquo;utiliser <strong>for_each</strong> ; par exemple commencer l&rsquo;itération à partir du 3<sup>ème</sup> élément.</p></blockquote>
<p>Avant C++11, la macro <em>NULL</em> équivalente à <em>0</em>, est parfois considéré comme très particulière par les développeurs et porte à confusion. C++11 propose une expression <strong>nullptr</strong>, plus d&rsquo;excuses et arrêtons d&rsquo;utiliser <em>0</em> ou <em>NULL</em> pour initialiser un pointeur.</p>
<pre class="brush: cpp; title: ; notranslate">
#include&lt;iostream&gt;
#include&lt;vector&gt;

int main() {
  const int* p = nullptr;
  std::vector&lt;int&gt; data{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  for (const auto item : data) {
    p = &amp;item;
    std::cout &lt;&lt; &quot;Item pointer: &quot; &lt;&lt; *p &lt;&lt; std::endl;
  }
  return 0;
}
</pre>
<blockquote><p>On initialise un pointeur avec <strong>nullptr</strong> et non <em>0</em>, puis on boucle sur les données en assignant l&rsquo;adresse de chaque <em>item</em> au pointeur <em>p</em>.</p></blockquote>
<p>Uniformisation de l&rsquo;initialisation avec les accolades <em>{}</em>. Avant C++11, selon qu&rsquo;on veut initialiser un tableau, les membres d&rsquo;une structures&#8230; avec des zéros ou avec des valeurs différentes de zéro, il fallait passer par des syntaxes différentes. Avec C++11 on arrête avec toutes ces possibilités, on uni formalise comme le montre le code source suivant : </p>
<pre class="brush: cpp; title: ; notranslate">
#include&lt;string&gt;
#include&lt;sstream&gt;
#include&lt;vector&gt;

struct Version {
  uint32_t major;
  uint32_t minor;
  uint32_t revision;
  
  std::string toString() const {
    std::ostringstream oss;
    oss &lt;&lt; major &lt;&lt; &quot;.&quot; &lt;&lt; minor &lt;&lt; &quot;.&quot; &lt;&lt; revision;
    return oss.str();
  }
};

int main() {
  Version v{0, 1, 0};//Constructor initialization
  std::cout &lt;&lt; &quot;Version v{0, 1, 0}: &quot; &lt;&lt; std::endl;
  std::cout &lt;&lt; &quot;  &quot; &lt;&lt; v.toString() &lt;&lt; std::endl;
  std::vector&lt;Version&gt; vArray{{0, 1, 0}, {0, 1, 1}, {0, 1, 2}};//Array initialization
  std::cout &lt;&lt; &quot;std::vector&lt;Version&gt; vArray{{0, 1, 0}, {0, 1, 1}, {0, 1, 2}}: &quot; &lt;&lt; std::endl;
  for (const auto v : vArray) {
    std::cout &lt;&lt; &quot;  &quot; &lt;&lt; v.toString() &lt;&lt; std::endl;
  }
  return 0;
}
</pre>
<blockquote><p>On crée une instance de <em>Version</em> en initialisant <em>major</em>, <em>minor</em> et <em>revision</em>. On crée ensuite un vecteur de <em>Version</em> en initialisant les 3 premiers éléments.</p></blockquote>
<p>Les nombres aléatoires, peuvent être générés selon un nouveau modèle qui se compose de deux éléments, un <em>moteur de génération de nombre</em> (il y en a plusieurs au choix) et une <em>distribution</em> soit une plage de nombre pouvant être généré, là encore on a le choix de la distribution ; <a href="http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15319/A-TR1-Tutorial-Generating-Random-Numbers.htm">voir un aperçu via ce lien</a>.</p>
<pre class="brush: cpp; title: ; notranslate">
#include&lt;iostream&gt;
#include&lt;random&gt;//std::mt19937, std::uniform_int_distribution
#include&lt;functional&gt;//std::bind
#include&lt;ctime&gt;

std::mt19937 engine;
std::uniform_int_distribution&lt;uint32_t&gt; distribution{1, 10};

int main() {
  engine.seed(static_cast&lt;uint32_t&gt;(std::time(nullptr)));
  auto generator = std::bind(distribution, engine);
  uint32_t random = generator();
  std::cout &lt;&lt; &quot;1st random: &quot; &lt;&lt; random &lt;&lt; std::endl;
  random = generator();
  std::cout &lt;&lt; &quot;2nd random: &quot; &lt;&lt; random &lt;&lt; std::endl;
  return 0;
}
</pre>
<blockquote><p>Dans cet exemple on instancie le moteur de génération de type <a href="http://fr.wikipedia.org/wiki/Mersenne_Twister" title="Mersenne Twister engine" target="_blank">Mersenne Twister</a> avec une distribution uniforme d&rsquo;entier. On initialise dans la méthode <em>main</em>, le moteur avec un nombre entier récupérer de l&rsquo;horloge de la machine. On se fabrique une fonction <em>generator</em> qui permet d&rsquo;appeler notre générateur avec un nom plus intuitif.</p></blockquote>
<p>Voilà c&rsquo;est une première mise en jambe avec C++11 histoire de s&rsquo;échauffer. Je reste persuadé du potentiel de ce langage et de son avenir glorieux. <strong>C++11 est le langage le plus <em>concis</em> et <em>rapide</em> de la planète</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/cplusplus11-decouverte-de-ce-nouveau-dialecte/797/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mise à jour officielle Google Nexus ICS 4.0.2 vers ICS 4.0.4 IMM76I (Ubuntu 11.10)</title>
		<link>http://www.kakesa.net/linux/mise-a-jour-officielle-google-nexus-ics-4-0-2-vers-ics-4-0-4-imm76i-ubuntu-11-10/859</link>
		<comments>http://www.kakesa.net/linux/mise-a-jour-officielle-google-nexus-ics-4-0-2-vers-ics-4-0-4-imm76i-ubuntu-11-10/859#comments</comments>
		<pubDate>Thu, 26 Apr 2012 22:34:56 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=859</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_36431642"></div></div></div>J&#8217;ai acheté il y a 4 mois le smartphone Google Nexus chez Rue du Commerce, mais depuis, et je ne sais pas pourquoi, à chaque annonce de mise à jour d&#8217;Android Ice Cream Sandwich, impossible que la détection des mises à jour me propose quoique ce soit&#8230; Finalement ce matin j&#8217;ai décidé de réaliser manuellement&#8230; <a href="http://www.kakesa.net/linux/mise-a-jour-officielle-google-nexus-ics-4-0-2-vers-ics-4-0-4-imm76i-ubuntu-11-10/859">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_36431642"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_36431642"></div></div></div><p>J&rsquo;ai acheté il y a 4 mois le smartphone <a title="Google Nexus" href="http://www.google.fr/nexus/" target="_blank">Google Nexus</a> chez <a title="Rue du Commerce" href="http://www.rueducommerce.fr/home/index.htm" target="_blank">Rue du Commerce</a>, mais depuis, et je ne sais pas pourquoi, à chaque annonce de mise à jour <a title="Android Ice Cream Sandwich" href="http://developer.android.com/sdk/android-4.0-highlights.html" target="_blank">d&rsquo;Android Ice Cream Sandwich</a>, impossible que la détection des mises à jour me propose quoique ce soit&#8230;</p>
<p>Finalement ce matin j&rsquo;ai décidé de réaliser manuellement cette mise à jour via les outils et fichiers officiels de Google (<strong><em>Pas besoin de rooter le téléphone</em></strong>).</p>
<p>La première chose à faire est d&rsquo;installer le SDK Android via le lien suivant (pour les connaisseurs, uniquement le binaire fastboot est suffisant) : <a title="SDK Android" href="http://developer.android.com/sdk/installing.html" target="_blank">http://developer.android.com/sdk/installing.html</a>.</p>
<p>Vérifier la configuration USB du Google Nexus sur la machine en vérifiant ou créant le fichier des droits <em>udev</em> (seules les lignes des Google Nexus sont nécessaires mais qui sait, j&rsquo;aurai peut-être le bonheur de tester d&rsquo;autres Google Android devices)</p>
<pre class="brush: plain; title: ; notranslate">
chris@tux:~/tmp/yakju-imm76i$ sudo emacs /etc/udev/rules.d/51-android.rules

</pre>
<p><strong>Copier/coller les lignes suivantes dans le fichier <em>/etc/udev/rules.d/51-android.rules</em></strong></p>
<pre># adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="##votre_nom_d_utilisateur##"
</pre>
<p><strong>On relance le service udev</strong></p>
<pre class="brush: plain; title: ; notranslate">
chris@tux:~/tmp/yakju-imm76i$ sudo service udev restart

</pre>
<p>Télécharger et décompresser la mise à jour <strong>Factory Images &laquo;&nbsp;yakju&nbsp;&raquo; for Galaxy Nexus &laquo;&nbsp;maguro&nbsp;&raquo; (GSM/HSPA+)</strong> (pas besoin de Google Wallet en France pour la majorité d&rsquo;entre nous) depuis le site de Google : <a title="Image factory des appareils Google Android" href="https://developers.google.com/android/nexus/images?hl=fr-FR#yakju" target="_blank">https://developers.google.com/android/nexus/images?hl=fr-FR#yakju</a></p>
<p>Démarrer le Google Nexus en mode fastboot en appuyant simultanément sur les boutons : <strong>Volume+</strong> et <strong>Volume-</strong> et <strong>PowerOnOff</strong></p>
<p><strong>Se rendre dans le répertoire où l&rsquo;image à été décompressé pour débloquer le mode fastboot</strong></p>
<pre class="brush: plain; title: ; notranslate">
chris@tux:~/tmp/yakju-imm76i$ fastboot oem unlock
...
OKAY [ 25.900s]
finished. total time: 25.900s
</pre>
<p><strong>Lancer la mise à complète d&rsquo;ICS 4.0.4</strong></p>
<pre class="brush: plain; title: ; notranslate">
chris@tux:~/tmp/yakju-imm76i$ ./flash-all.sh
sending 'bootloader' (2308 KB)...
OKAY [  0.318s]
writing 'bootloader'...
OKAY [  0.292s]
finished. total time: 0.610s
rebooting into bootloader...
OKAY [  0.006s]
finished. total time: 0.006s
sending 'radio' (12288 KB)...
OKAY [  1.736s]
writing 'radio'...
OKAY [  1.379s]
finished. total time: 3.116s
rebooting into bootloader...
OKAY [  0.006s]
finished. total time: 0.007s
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
--------------------------------------------
Bootloader Version...: PRIMELA03
Baseband Version.....: I9250XXLA2
Serial Number........: 0146B0000101601D
--------------------------------------------
checking product...
OKAY [  0.007s]
checking version-bootloader...
OKAY [  0.008s]
checking version-baseband...
OKAY [  0.008s]
sending 'boot' (4148 KB)...
OKAY [  0.577s]
writing 'boot'...
OKAY [  0.252s]
sending 'recovery' (4478 KB)...
OKAY [  0.638s]
writing 'recovery'...
OKAY [  0.310s]
sending 'system' (316111 KB)...
OKAY [ 44.125s]
writing 'system'...
OKAY [ 33.302s]
erasing 'userdata'...
OKAY [  0.315s]
erasing 'cache'...
OKAY [  0.013s]
rebooting...

finished. total time: 79.598s
</pre>
<p><strong>Rebooter en mode fastboot pour remettre le lock par soucis de sécurité</strong></p>
<pre class="brush: plain; title: ; notranslate">
chris@tux:~/tmp/yakju-imm76i$ fastboot oem lock
...
OKAY [  0.170s]
finished. total time: 0.170s
</pre>
<p>Je suis enfin à jour et je gagne en performance, c&rsquo;est fluide !!!</p>
<p><a href="http://www.kakesa.net/linux/mise-a-jour-officielle-google-nexus-ics-4-0-2-vers-ics-4-0-4-imm76i-ubuntu-11-10/859/attachment/screenshot_2012-04-26-23-27-13" rel="attachment wp-att-881"><img class="aligncenter size-full wp-image-881" title="Screenshot Google Nexus ICS 4.0.4" src="http://www.kakesa.net/wp-content/uploads/2012/04/Screenshot_2012-04-26-23-27-13.png" alt="" width="720" height="1280" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/mise-a-jour-officielle-google-nexus-ics-4-0-2-vers-ics-4-0-4-imm76i-ubuntu-11-10/859/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installer Amazon MP3 Downloader sur Ubuntu 11.10</title>
		<link>http://www.kakesa.net/linux/installer-amazon-mp3-downloader-sur-ubuntu-11-10/777</link>
		<comments>http://www.kakesa.net/linux/installer-amazon-mp3-downloader-sur-ubuntu-11-10/777#comments</comments>
		<pubDate>Tue, 13 Dec 2011 00:17:23 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=777</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_70070010"></div></div></div>Avec Ubuntu Oneiric (11.10), impossible d&#8217;installer l&#8217;application de téléchargement des mp3s d&#8217;Amazon (Amazon MP3 Downloader). Pour cause les librairies libboost sont trop récentes et ne sont pas retrouveés dynamiquement par le programme AmazonMP3 Downloader ; je crois qu&#8217;il vaut mieux pour amazon travailler sur la compilation statique du produit. Ci-dessous les étapes pour pallier le&#8230; <a href="http://www.kakesa.net/linux/installer-amazon-mp3-downloader-sur-ubuntu-11-10/777">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_70070010"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_70070010"></div></div></div><p style="text-align: left;">Avec Ubuntu Oneiric (11.10), impossible d&rsquo;installer l&rsquo;application de téléchargement des mp3s d&rsquo;Amazon (<a title="Amazon MP3 Downloader" href="http://www.amazon.fr/gp/dmusic/help/amd.html?ie=UTF8&amp;forceos=Linux" target="_blank" rel="nofollow">Amazon MP3 Downloader</a>).<br />
Pour cause les librairies libboost sont trop récentes et ne sont pas retrouveés dynamiquement par le programme AmazonMP3 Downloader ; je crois qu&rsquo;il vaut mieux pour amazon travailler sur la compilation statique du produit. Ci-dessous les étapes pour pallier le problème (basées sur une <a href="http://ubuntuforums.org/showthread.php?t=1478214" target="_blank">discussion ubuntuforums</a>) :</p>
<pre class="brush: bash; title: ; notranslate">
mkdir -p $HOME/tmp/amazonmp3_oneiric
cd $HOME/tmp/amazonmp3_oneiric
</pre>
<p>Télécharger les fichier .deb :</p>
<pre class="brush: bash; title: ; notranslate">
wget https://launchpadlibrarian.net/26959932/libboost-signals1.34.1_1.34.1-16ubuntu1_i386.deb https://launchpadlibrarian.net/26959936/libboost-thread1.34.1_1.34.1-16ubuntu1_i386.deb https://launchpadlibrarian.net/26959922/libboost-iostreams1.34.1_1.34.1-16ubuntu1_i386.deb https://launchpadlibrarian.net/26959918/libboost-filesystem1.34.1_1.34.1-16ubuntu1_i386.deb https://launchpadlibrarian.net/26959916/libboost-date-time1.34.1_1.34.1-16ubuntu1_i386.deb https://launchpadlibrarian.net/26959928/libboost-regex1.34.1_1.34.1-16ubuntu1_i386.deb https://launchpadlibrarian.net/34165098/libicu40_4.0.1-2ubuntu2_i386.deb
sudo dpkg -i lib*.deb
</pre>
<p>Télécharger et installer l&rsquo;application <a title="Amazon MP3 Downloader" href="http://www.amazon.fr/gp/dmusic/help/amd.html?ie=UTF8&amp;forceos=Linux" target="_blank" rel="nofollow">Amazon MP3 Downloader</a> : <a title="Amazon MP3 Downloader" href="http://www.amazon.com/gp/dmusic/help/amd.html?ie=UTF8&amp;forceos=Linux" target="_blank" rel="nofollow">http://www.amazon.com/gp/dmusic/help/amd.html?ie=UTF8&amp;forceos=Linux</a>.<br />
Pour l&rsquo;installation, il est possible d&rsquo;utiliser les détails fournis par amazon sur la page de téléchargement ou en mode console :</p>
<pre class="brush: bash; title: ; notranslate">
sudo dpkg -i AmazonMP3DownloaderInstall.deb
</pre>
<p>Et voilà.</p>
<p>Discussions qui traitent aussi du sujet : </p>
<ul>
<li><a href="http://threebrothers.org/brendan/blog/amazon-mp3-downloader-on-64-bit-ubuntu-lucid-lynx/" target="_blank">http://threebrothers.org/brendan/blog/amazon-mp3-downloader-on-64-bit-ubuntu-lucid-lynx/</a></li>
<li><a href="http://www.dom-web.net/?p=1512" target="_blank">http://www.dom-web.net/?p=1512</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/installer-amazon-mp3-downloader-sur-ubuntu-11-10/777/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installer ImageMagick chez l&#8217;hébergeur DreamHost</title>
		<link>http://www.kakesa.net/ruby-et-rubyonrails/installer-imagemagick-chez-lhebergeur-dreamhost/764</link>
		<comments>http://www.kakesa.net/ruby-et-rubyonrails/installer-imagemagick-chez-lhebergeur-dreamhost/764#comments</comments>
		<pubDate>Tue, 16 Aug 2011 19:58:24 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ruby et rubyonrails]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=764</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_17398836"></div></div></div>J&#8217;ai récemment commencé à utiliser RVM, le gestionnaire des versions de ruby, sur mon compte mutualisé Dreamhost. En réinstallant mes gems j&#8217;ai été confronté à une erreur concernant la compilation d&#8217;ImageMagick nécessaire au gem rmagick. En effet la librairie RMagick2.so n&#8217;est trouvée car systématique recherchée dans /usr/local/lib. Type d&#8217;erreur : L&#8217;astuce est de compiler ImageMagick&#8230; <a href="http://www.kakesa.net/ruby-et-rubyonrails/installer-imagemagick-chez-lhebergeur-dreamhost/764">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_17398836"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_17398836"></div></div></div><p>J&rsquo;ai récemment commencé à utiliser <a href="http://beginrescueend.com/rvm/" title="RVM" target="_blank">RVM</a>, le gestionnaire des versions de ruby, sur mon compte mutualisé <a title="Dreamhost" href="http://dreamhost.com/" target="_blank">Dreamhost</a>. En réinstallant mes gems j&rsquo;ai été confronté à une erreur concernant la compilation d&rsquo;<a href="http://www.imagemagick.org" title="ImageMagick" target="_blank">ImageMagick</a> nécessaire au gem <a href="http://rmagick.rubyforge.org/" title="RMagick" target="_blank">rmagick</a>. En effet la librairie RMagick2.so n&rsquo;est trouvée car systématique recherchée dans /usr/local/lib.<br />
Type d&rsquo;erreur :</p>
<pre class="brush: bash; title: ; notranslate">
LoadError: libMagickCore.so.2: cannot open shared object file: No such file or directory - $HOME/.rvm/gems/ruby-1.8.7-head@monprojet/gems/rmagick-2.13.1/lib/RMagick2.so
</pre>
<p>L&rsquo;astuce est de compiler ImageMagick en précisant au compilateur où trouver les librairies compilées et installées par mes soins.<br />
Ci-dessous la ligende commande qui permet à la librarie de s&rsquo;installer et rechercher où il faut les dépendances :</p>
<pre class="brush: bash; title: ; notranslate">
LDFLAGS=&quot;-L$HOME/opt/lib -Wl,-rpath,$HOME/opt/lib&quot;
LD_LIBRARY_PATH=/home/congopro/opt/lib
./configure --prefix=/home/congopro/opt --with-gslib --with-gs-font-dir=/usr/share/fonts/type1/gsfonts/ --without-perl --without-magick-plus-plus
</pre>
<p>J&rsquo;ai par la même occasion complétée la procédure de compilation disponible sur le wiki de Dreamhost : <a title="Compiling_ImageMagick_on_your_DreamHost_account" href="http://wiki.dreamhost.com/Image_Magick#Compiling_ImageMagick_on_your_DreamHost_account" target="_blank">http://wiki.dreamhost.com/Image_Magick#Compiling_ImageMagick_on_your_DreamHost_account</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/ruby-et-rubyonrails/installer-imagemagick-chez-lhebergeur-dreamhost/764/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuit du Hack 2011 à Disneyland Paris</title>
		<link>http://www.kakesa.net/programmation/nuit-du-hack-2011-a-disneyland-paris/722</link>
		<comments>http://www.kakesa.net/programmation/nuit-du-hack-2011-a-disneyland-paris/722#comments</comments>
		<pubDate>Sun, 19 Jun 2011 20:35:41 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=722</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_29812480"></div></div></div>C&#8217;est hier, samedi 18 juin 2011 que se déroulait la Nuit du Hack 2011. 22 heures et 30 minutes de conférences et ateliers axés sur les techniques de hacking même non numériques tels que le crochetage de serrures&#8230; Je vous invite à aller sur le site de la Nuit du Hack pour connaître le détail&#8230; <a href="http://www.kakesa.net/programmation/nuit-du-hack-2011-a-disneyland-paris/722">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_29812480"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_29812480"></div></div></div><p>C&rsquo;est hier, samedi 18 juin 2011 que se déroulait la Nuit du Hack 2011. 22 heures et 30 minutes de conférences et ateliers axés sur les techniques de hacking même non numériques tels que le crochetage de serrures&#8230;</p>
<p><figure id="attachment_765" class="wp-caption thumbnail aligncenter" style="width: 300px;">
				<a href="http://www.nuitduhack.com/"><img class="size-full wp-image-765  " title="Nuit du Hack 2011" src="http://www.kakesa.net/wp-content/uploads/2011/06/ndh_300x250.gif" alt="Pub Nuit du Hack 2011" width="300" height="250" /></a>
				<figcaption class="wp-caption-text">Nuit du Hack 2011</figcaption>
			</figure></p>
<p>Je vous invite à aller sur le site de la <a title="Nuit du Hack" href="http://www.nuitduhack.com/">Nuit du Hack</a> pour connaître le détail du programme et vous faire une idée des sujets de hacking du moment.</p>
<p>Personnellement j&rsquo;ai du quitter cet évènement dimanche vers 1h00 du matin car je devais courir aux <a href="http://www.10km.lequipe.fr/">10km L&rsquo;Équipe</a> à Paris (couru en 00:51:47, je visais 00:48:00)&#8230;</p>
<p>Les ateliers ainsi que le concours de hacking ont débuté avec des sujets très intéressants et passionnants :</p>
<ul>
<li>Concours de hacking de type capture de flag : attaques d&rsquo;ennemis et défenses de son réseau</li>
<li>Etude d&rsquo;un test d&rsquo;intrusion via Metasploit</li>
<li>Electronique programmable et systèmes libres</li>
<li>Atelier d&rsquo;initiation à la cryptographie et l&rsquo;utilisation des GPUs</li>
<li> Initiation ARM pour plateforme mobile</li>
<li>Crochetage basique, serrure haut sécurité, Impression</li>
<li>etc&#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/nuit-du-hack-2011-a-disneyland-paris/722/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer Xapian 1.2.5 et le binding Ruby chez Dreamhost</title>
		<link>http://www.kakesa.net/ruby-et-rubyonrails/installer-xapian-1-2-5-et-le-binding-ruby-chez-dreamhost/685</link>
		<comments>http://www.kakesa.net/ruby-et-rubyonrails/installer-xapian-1-2-5-et-le-binding-ruby-chez-dreamhost/685#comments</comments>
		<pubDate>Sun, 19 Jun 2011 18:00:34 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ruby et rubyonrails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=685</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_35181846"></div></div></div>Il est temps de faire le ménage sur les libs installées depuis quelques années chez mon hébergeur : DreamHost. L&#8217;un des composants majeur que j&#8217;utilise et qui n&#8217;est pas disponible par l&#8217;hébergeur est Xapian. Actuellement la version 1.2.5 est stable, mettons à jour notre ancienne version 1.0.23. Pour rappel Xapian est une librairie de recherche&#8230; <a href="http://www.kakesa.net/ruby-et-rubyonrails/installer-xapian-1-2-5-et-le-binding-ruby-chez-dreamhost/685">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_35181846"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_35181846"></div></div></div><p>Il est temps de faire le ménage sur les libs installées depuis quelques années chez mon hébergeur : <a href="http://www.dreamhost.com/">DreamHost</a>.<br />
L&rsquo;un des composants majeur que j&rsquo;utilise et qui n&rsquo;est pas disponible par l&rsquo;hébergeur est <a href="http://xapian.org/">Xapian</a>. Actuellement la version 1.2.5 est stable, mettons à jour notre ancienne version 1.0.23.</p>
<p>Pour rappel Xapian est une librairie de <a href="http://fr.wikipedia.org/wiki/Recherche_plein_texte">recherche plein texte</a> <a href="http://fr.wikipedia.org/wiki/Open_source">open source</a> écrite en <a href="http://www2.research.att.com/~bs/C++0xFAQ.html">C++</a>. </p>
<p><a rel="attachment wp-att-708" href="http://www.kakesa.net/ruby-et-rubyonrails/installer-xapian-1-2-5-et-le-binding-ruby-chez-dreamhost/685/attachment/xapian-logo"><img class="aligncenter size-full wp-image-708" title="Xapian logo" src="http://www.kakesa.net/wp-content/uploads/2011/05/xapian-logo.png" alt="Logo Xapian" width="400" height="100" /></a></p>
<p>Premièrement sur les environnement de Dreamhost, les packages de développement de la librairie UUID ne sont pas disponible, faisons une installation locale.</p>
<p>Récupérer la lib UUID du projet e2fsprogs avec l&rsquo;une des urls suivantes :</p>
<ul>
<li>git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git</li>
<li>http://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git</li>
<li>https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git</li>
</ul>
<pre class="brush: bash; title: ; notranslate">
cd $HOME
mkdir -p $HOME/opt/src
cd $HOME/opt/src
git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
cd e2fsprogs
./configure CFLAGS=-fPIC --prefix=$HOME/opt
cd lib/uuid
make &amp;&amp; make install
</pre>
<p>Récupérons les sources de xapian-core puis installons :</p>
<pre class="brush: bash; title: ; notranslate">
cd $HOME/opt/src
wget http://oligarchy.co.uk/xapian/1.2.5/xapian-core-1.2.5.tar.gz
tar -zxvf xapian-core-1.2.5.tar.gz
cd xapian-core-1.2.5
./configure LDFLAGS=-L$HOME/opt/lib CFLAGS=-fPIC CXXFLAGS=-I$HOME/opt/include --prefix=$HOME/opt
make &amp;&amp; make install
</pre>
<p>Récupérons les sources de xapian-bindings puis installons la version pour Ruby :</p>
<pre class="brush: bash; title: ; notranslate">
cd $HOME/opt/src
wget http://oligarchy.co.uk/xapian/1.2.5/xapian-bindings-1.2.5.tar.gz
tar -zxvf xapian-bindings-1.2.5.tar.gz
cd xapian-bindings-1.2.5
./configure --with-ruby LDFLAGS=-L$HOME/opt/lib CFLAGS=-fPIC CXXFLAGS=-I$HOME/opt/include --prefix=$HOME/opt RUBY_LIB=$HOME/opt/ruby_modules RUBY_LIB_ARCH=$HOME/opt/ruby_modules XAPIAN_CONFIG=$HOME/opt/bin/xapian-config
make &amp;&amp; make install
</pre>
<p>Dans l’application RubyOnRails indiquons le chemin de nos modules installés localement  (config/environnement.rb) :</p>
<pre class="brush: ruby; title: ; notranslate">
if ENV['RAILS_ENV'] == &quot;production&quot;
    config.load_paths += [ ENV['HOME'] + '/opt/ruby_modules' ]
end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/ruby-et-rubyonrails/installer-xapian-1-2-5-et-le-binding-ruby-chez-dreamhost/685/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Intel GMA 500 sous linux, kernel 2.6.37</title>
		<link>http://www.kakesa.net/linux/intel-gma-500-sous-linux-kernel-2-6-37/622</link>
		<comments>http://www.kakesa.net/linux/intel-gma-500-sous-linux-kernel-2-6-37/622#comments</comments>
		<pubDate>Tue, 25 Jan 2011 23:38:26 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[GMA500]]></category>
		<category><![CDATA[intel]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=622</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_65392794"></div></div></div>J&#8217;ai dernièrement écris un billet sur le netbook Asus EeePC 1201HA dans lequel je critiquais le travail d&#8217;Intel (certes un rachat) sur l&#8217;architecture GMA 500 soit les drivers linux poulsbo, tout pas beau&#8230; Actuellement on peut voir que dans les nouveautés du noyau linux 2.6.37 le driver poulsbo (Intel GMA 500) est présent grâce au&#8230; <a href="http://www.kakesa.net/linux/intel-gma-500-sous-linux-kernel-2-6-37/622">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_65392794"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_65392794"></div></div></div><p>J&rsquo;ai dernièrement écris un <a href="http://goo.gl/lRAmy">billet sur le netbook Asus EeePC 1201HA</a> dans lequel je critiquais le travail d&rsquo;Intel (certes un rachat) sur l&rsquo;architecture <a href="http://fr.wikipedia.org/wiki/Intel_Atom#Chipsets_Poulsbo">GMA 500</a> soit les drivers linux poulsbo, tout pas beau&#8230;</p>
<p style="text-align: center;"><img class="aligncenter" title="Architecture SCH" src="http://doc.ubuntu-fr.org/_media/sch.gif" alt="Architecture SCH" width="235" height="278" /></p>
<p>Actuellement on peut voir que dans les nouveautés du <a href="http://goo.gl/s16uM">noyau linux 2.6.37</a> le <a href="http://goo.gl/crKIY">driver poulsbo</a> (Intel GMA 500) est présent grâce au travail de Lee Chun-Yi de Novell. Mais ça reste un début seulement car ce pilote ne semble gérer nativement que le rétro-éclairage de l&rsquo;écran.</p>
<p>Intel, quant à lui, semble au courant du problème mais ne priorise pas sa résolution. C&rsquo;est dommage pour ceux qui ont hérité de ce GMA 500.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/intel-gma-500-sous-linux-kernel-2-6-37/622/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Singleton threadsafe en cplusplus</title>
		<link>http://www.kakesa.net/programmation/singleton-threadsafe-en-cplusplus/577</link>
		<comments>http://www.kakesa.net/programmation/singleton-threadsafe-en-cplusplus/577#comments</comments>
		<pubDate>Wed, 12 Jan 2011 23:29:55 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[cplusplus]]></category>
		<category><![CDATA[design pattern]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=577</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_44708749"></div></div></div>Le motif de conception Singleton est l&#8217;un des plus simple a maîtriser. Mais lorsqu&#8217;il s&#8217;agit d&#8217;accès concurrentiel dans un programme, les implémentations classiques ne suffisent plus. Il faut garder à l&#8217;esprit que les architectures multiprocesseurs ont plusieurs caches souvent asynchrones &#171;&#160;write-back&#160;&#187; par opposition à &#171;&#160;write-through&#160;&#187; pour synchrone (rare car moins performant). Un singleton moderne devrait&#8230; <a href="http://www.kakesa.net/programmation/singleton-threadsafe-en-cplusplus/577">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_44708749"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_44708749"></div></div></div><p>Le motif de conception <a href="http://fr.wikipedia.org/wiki/Singleton_(patron_de_conception)">Singleton</a> est l&rsquo;un des plus simple a maîtriser. Mais lorsqu&rsquo;il s&rsquo;agit d&rsquo;accès concurrentiel dans un programme, les implémentations classiques ne suffisent plus. Il faut garder à l&rsquo;esprit que les architectures multiprocesseurs ont plusieurs caches souvent asynchrones &laquo;&nbsp;write-back&nbsp;&raquo; par opposition à &laquo;&nbsp;write-through&nbsp;&raquo; pour synchrone (rare car moins performant).</p>
<p>Un singleton moderne devrait implémenter les notions suivantes :</p>
<ul>
<li><a href="http://fr.wikipedia.org/wiki/Double-checked_locking">Double-Checked Locking</a>, double contrôle</li>
<li><a href="http://fr.wikipedia.org/wiki/Exclusion_mutuelle">Mutex</a>, accès exclusif</li>
<li><a href="http://en.wikipedia.org/wiki/Memory_barrier">Memory barrier</a>, Clôture de mémoire à la compilation (intègre parfois la synchronisation au niveau du matériel)</li>
<li><a href="http://www.linuxjournal.com/article/8211">LFENCE/MFENCE/SFENCE</a>, Synchronise la mémoire matériel</li>
</ul>
<p>Qu&rsquo;est ce qu&rsquo;un Singleton ? En programmation un Singleton est un objet dont on veut garantir qu&rsquo;<strong>une seule</strong> instance vit pendant l&rsquo;exécution du programme. Imaginez un système d&rsquo;exploitation qui aurait deux instances de son système de fichier !!! C&rsquo;est le boxon assuré.</p>
<p>Voici mon implémentation en cplusplus (<a href="https://gist.github.com/773682">code source d&rsquo;exemple</a>) :</p>
<pre class="brush: cpp; collapse: true; light: false; title: ; toolbar: true; notranslate">
//singleton.h
#ifndef __SINGLETON_H_
#define __SINGLETON_H_

#include &lt;cstdlib&gt; //std::atexit()

#define MFENCE			&quot;memory_fence&quot;
#define MUTEX_LOCK		&quot;lock&quot;
#define MUTEX_UNLOCK	&quot;unlock&quot;
#define MEMORY_READWRITE_BARRIER	&quot;memory_barrier&quot;

template &lt;typename T&gt;
class Singleton
{
public:
	static T&amp; instance()
	{
		return *get_instance();
	}

	static const T&amp; const_instance()
	{
		return *get_instance();
	}

	static void destroy()
	{
		MFENCE; //On s'assure que tous les caches processeurs sont à niveau
		if (pInstance_ != 0)
			delete pInstance_;
	}

protected:
	Singleton(){}
	~Singleton()
	{
		pInstance_ = 0;
		created_ = false;
	}

private:
	static T* pInstance_;
	static volatile bool created_;
	Singleton(const Singleton &amp;);
	Singleton&amp; operator= (const Singleton &amp;);

	static T* get_instance()
	{
		if (created_ == false)
		{
			MUTEX_LOCK; //On s'assure qu'un seul thread a la main
			if (pInstance_ == 0)
			{
				pInstance_ = new T();
				std::atexit(Singleton::destroy);
			}
			MUTEX_UNLOCK;
			MEMORY_READWRITE_BARRIER; //On s'assure que le compilateur ne change pas l'ordre de ces 2 instructions
			created_ = true;
			MFENCE; //On s'assure que tous les caches processeurs sont à niveau
		}
		return pInstance_;
	}
};

template&lt;typename T&gt; T* Singleton&lt;T&gt;::pInstance_ = 0;
template&lt;typename T&gt; volatile bool Singleton&lt;T&gt;::created_ = false;

#endif//!__SINGLETON_H_
</pre>
<p>Notons que pour les mutexes, les meilleures implémentations permettent aussi, en plus d&rsquo;être dans une zone synchrone, de réaliser l&rsquo;équilant de [SLM]FENCE (PIII : SFENCE &#8211; P4 : LFENCE, MFENCE). Pour ce qui est de l&rsquo;annulation de l&rsquo;ordre des instructions par le compilateur, je ne vois rien d&rsquo;autres que d&rsquo;utiliser une librairie qui fournit des <a href="http://goo.gl/C2no3">MACROS</a> adaptés aux différents compilateurs et plateformes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/singleton-threadsafe-en-cplusplus/577/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bonne et heureuse année 2011 à tous</title>
		<link>http://www.kakesa.net/projets-perso/bonne-et-heureuse-annee-2011-a-tous/616</link>
		<comments>http://www.kakesa.net/projets-perso/bonne-et-heureuse-annee-2011-a-tous/616#comments</comments>
		<pubDate>Fri, 31 Dec 2010 22:55:13 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[projets perso]]></category>
		<category><![CDATA[cplusplus]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=616</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_27940149"></div></div></div>Cette année 2010 est passée à une vitesse telle que je n&#8217;ai pas testé grand chose&#8230; Néanmoins dans mes nouvelles résolutions pour 2011 : C++0X Go (Google) Ruby (Rails 3) Python 3 Java (GWT 2) Meilleurs vœux 2011 !!!]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_27940149"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_27940149"></div></div></div><p>Cette année 2010 est passée à une vitesse telle que je n&rsquo;ai pas  testé grand chose&#8230;</p>
<p>Néanmoins dans mes nouvelles résolutions pour <strong>2011</strong> :</p>
<ul>
<li>C++0X</li>
<li>Go (Google)</li>
<li>Ruby (Rails 3)</li>
<li>Python 3</li>
<li>Java (GWT 2)</li>
</ul>
<p style="text-align: center;"><script type="text/javascript">var amzn_wdgt= { widgetType:"ASINList", title:"Livres pour 2011", width:"300", height:"250", ASIN:"0321356683,274402452X,0321334876", shuffleProducts:"True", showBorder:"True", marketPlace:"FR", widget:"Carousel", tag:"kakesanet-21" };</script><script type="text/javascript" src="http://wms.assoc-amazon.com/20070822/US/js/swfobject_1_5.js"></script></p>
<p style="text-align: center;"><strong>Meilleurs vœux 2011 !!!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/projets-perso/bonne-et-heureuse-annee-2011-a-tous/616/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drivers Canon MP540 sous Ubuntu &gt;= Karmic Koala</title>
		<link>http://www.kakesa.net/linux/drivers-canon-mp540-sous-ubuntu-karmic-koala/521</link>
		<comments>http://www.kakesa.net/linux/drivers-canon-mp540-sous-ubuntu-karmic-koala/521#comments</comments>
		<pubDate>Mon, 20 Dec 2010 13:31:56 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[mp540]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=521</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_54055084"></div></div></div>Sous Jaunty Jackalope (9.04) il était facile d&#8217;installer les drivers de l&#8217;imprimante Canon MP540 récupéré directement du site de Canon. Depuis Karmic Koala (9.10), la libcupsys2 devient libcups2 ; il est devenu impossible d&#8217;installer ces drivers puisque Canon n&#8217;a pas mis à jours ses packages (04/2008). Ce tutoriel est basé sur la version allemande de Vitali Henrichs.&#8230; <a href="http://www.kakesa.net/linux/drivers-canon-mp540-sous-ubuntu-karmic-koala/521">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_54055084"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_54055084"></div></div></div><p>Sous Jaunty Jackalope (9.04) il était facile d&rsquo;installer les drivers de l&rsquo;imprimante Canon MP540 récupéré directement du site de Canon. Depuis Karmic Koala (9.10), la libcupsys2 devient libcups2 ; il est devenu impossible d&rsquo;installer ces drivers puisque Canon n&rsquo;a pas mis à jours ses packages (04/2008). Ce <a href="http://www.viilinux.de/2010/08/canon-pixma-mp540-unter-ubuntu/">tutoriel est basé sur la version allemande de Vitali Henrichs</a>.</p>
<p><figure id="attachment_588" class="wp-caption thumbnail aligncenter" style="width: 100px;">
				<a rel="attachment wp-att-588" href="http://www.kakesa.net/linux/drivers-canon-mp540-sous-ubuntu-karmic-koala/521/attachment/mp540"><img class="size-full wp-image-588" title="Canon MP540" src="http://www.kakesa.net/wp-content/uploads/2010/12/MP540.jpg" alt="Image de l'imprimante Canon MP540" width="100" height="75" /></a>
				<figcaption class="wp-caption-text">Imprimante Canon MP540</figcaption>
			</figure></p>
<p>Toutefois il reste encore une solution, récupérer les modifications que j&rsquo;ai faîtes ou réaliser les modifications vous-même en suivant les étapes suivantes.</p>
<p>Fichiers à jour : <a href="http://www.kakesa.net/wp-content/uploads/2010/12/cnijfilter-common_3.00-1_i386.deb">cnijfilter-common_3.00-1_i386.deb</a>, <a href="http://www.kakesa.net/wp-content/uploads/2010/12/cnijfilter-mp540series_3.00-1_i386.deb">cnijfilter-mp540series_3.00-1_i386.deb</a>.</p>
<p>Télécharger et décompresser les drivers depuis le <a href="http://fr.software.canon-europe.com/software/0031324.asp?model=">site de Canon</a> :</p>
<pre class="brush: bash; title: ; notranslate">
mkdir MP540_debian_driver
tar xvf MP540_debian_drivers.tar -C MP540_debian_driver
cd MP540_debian_driver
tar xvf MP540_debian_printer.tar
tar xvf MP540_debian_scangear.tar
</pre>
<p>Nous devons modifier les fichiers de contrôle des packages Canon pour déclarer <strong>libcups2</strong> à la place <strong>libcupsys2</strong>.</p>
<p>Commençons par le packge cnijfilter-common_3.00-1_i386.deb :</p>
<pre class="brush: bash; title: ; notranslate">
dpkg-deb -x cnijfilter-common_3.00-1_i386.deb common
dpkg-deb --control cnijfilter-common_3.00-1_i386.deb
vim DEBIAN/control
</pre>
<p>Remplacer la ligne :</p>
<pre class="brush: plain; title: ; notranslate">Depends: libc6 (&gt;= 2.3.4-1), libcupsys2 (&gt;= 1.2.1), libpopt0 (&gt;= 1.7)</pre>
<p>Par :</p>
<pre class="brush: plain; title: ; notranslate">Depends: libc6 (&gt;= 2.3.4-1), libcups2 (&gt;= 1.2.1), libpopt0 (&gt;= 1.7)</pre>
<p>Copions nos modifications dans le répertoire &laquo;&nbsp;common&nbsp;&raquo; et reconstruisons le package :</p>
<pre class="brush: bash; title: ; notranslate">
cp -a DEBIAN/ common/
dpkg -b common cnijfilter-common_3.00-1_i386.deb
</pre>
<p>Installons l&rsquo;archive modifiée :</p>
<pre class="brush: bash; title: ; notranslate">
sudo dpkg -i --force-architecture cnijfilter-common_3.00-1_i386.deb
rm -rf common DEBIAN
</pre>
<p>Modifions le package cnijfilter-mp540series_3.00-1_i386.deb :</p>
<pre class="brush: bash; title: ; notranslate">
dpkg-deb -x cnijfilter-mp540series_3.00-1_i386.deb mp540series
dpkg-deb --control cnijfilter-mp540series_3.00-1_i386.deb
vim DEBIAN/control
</pre>
<p>Remplacer la ligne :</p>
<pre class="brush: plain; title: ; notranslate">Depends: libatk1.0-0 (&gt;= 1.9.0), libc6 (&gt;= 2.3.4-1), libcairo2 (&gt;= 1.0.2-2), libcupsys2 (&gt;= 1.2.1), ...</pre>
<p>Par :</p>
<pre class="brush: plain; title: ; notranslate">Depends: libatk1.0-0 (&gt;= 1.9.0), libc6 (&gt;= 2.3.4-1), libcairo2 (&gt;= 1.0.2-2), libcups2 (&gt;= 1.2.1), ...</pre>
<p>Copions nos modifications dans le répertoire &laquo;&nbsp;mp540series&nbsp;&raquo; et reconstruisons le package :</p>
<pre class="brush: bash; title: ; notranslate">
cp -a DEBIAN/ mp540series/
dpkg -b mp540series cnijfilter-mp540series_3.00-1_i386.deb
</pre>
<p>Installons l&rsquo;archive modifiée :</p>
<pre class="brush: bash; title: ; notranslate">
sudo dpkg -i --force-architecture cnijfilter-mp540series_3.00-1_i386.deb
rm -rf mp540series DEBIAN
</pre>
<p>Installons les drivers pour la fonction scanner :</p>
<pre class="brush: bash; title: ; notranslate">
sudo dpkg -i --force-architecture scangearmp-common_1.20-1_i386.deb
sudo dpkg -i --force-architecture scangearmp-mp540series_1.20-1_i386.deb
</pre>
<p>Modifions les droits du fichier &laquo;&nbsp;/usr/lib/cups/filter/pstocanonij&nbsp;&raquo; qui n&rsquo;appartiennent pas à &laquo;&nbsp;root&nbsp;&raquo; après l&rsquo;installation et redémarrons cups :</p>
<pre class="brush: bash; title: ; notranslate">
sudo chown root:root /usr/lib/cups/filter/pstocanonij
sudo service cups restart
</pre>
<p>Pour accéder aux options avancées de l&rsquo;imprimante vous pouvez récupérer le <a href="http://www.viilinux.de/viilinux_wp-content_EF65lgN/uploads/2010/08/MP540-series.ppd_.tar.gz">fichier ppd</a> depuis le site de <a href="http://www.viilinux.de">Vitali</a> :</p>
<pre class="brush: bash; title: ; notranslate">
wget http://www.viilinux.de/viilinux_wp-content_EF65lgN/uploads/2010/08/MP540-series.ppd_.tar.gz
tar -zxvf MP540-series.ppd_.tar.gz
sudo cp MP540-series.ppd /etc/cups/ppd/
</pre>
<p>Merci à <a href="http://www.viilinux.de/">Vitali</a> et à ceux qui l&rsquo;on aidé à réaliser ce tuto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/drivers-canon-mp540-sous-ubuntu-karmic-koala/521/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MapReduce un modèle à connaître</title>
		<link>http://www.kakesa.net/programmation/mapreduce-un-modele-a-connaitre/527</link>
		<comments>http://www.kakesa.net/programmation/mapreduce-un-modele-a-connaitre/527#comments</comments>
		<pubDate>Tue, 23 Nov 2010 01:03:29 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=527</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_38108304"></div></div></div>Vous avez sans doute entendu parler de la Google Dance (mécanisme d&#8217;indexation du moteur de recherche de Google) réalisé une ou deux fois par mois ? Et bien depuis MapReduce (août 2004), la Google Dance &#171;&#160;Powered by MapReduce&#160;&#187; est du quasi temps réel ; Google Maps, Microsoft Bing, Facebook, Twitter etc&#8230; C&#8217;est encore du &#171;&#160;MapReduce&#8230; <a href="http://www.kakesa.net/programmation/mapreduce-un-modele-a-connaitre/527">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_38108304"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_38108304"></div></div></div><p>Vous avez sans doute entendu parler de la Google Dance (mécanisme d&rsquo;indexation du moteur de recherche de Google) réalisé une ou deux fois par mois ? Et bien depuis <a href="http://labs.google.com/papers/mapreduce-osdi04.pdf">MapReduce</a> (août 2004), la Google Dance &laquo;&nbsp;Powered by MapReduce&nbsp;&raquo; est du quasi temps réel ; Google Maps, Microsoft Bing, Facebook, Twitter etc&#8230; C&rsquo;est encore du &laquo;&nbsp;MapReduce Inside&nbsp;&raquo;.</p>
<p><a href="http://labs.google.com/papers/mapreduce-osdi04.pdf">MapReduce</a> est un modèle de programmation vulgarisé par les ingénieurs de Google, <a href="http://research.google.com/people/jeff/index.html">Jeffrey Dean</a> et <a href="http://research.google.com/people/sanjay/index.html">Sanjay Ghemawat</a>. L&rsquo;idée de MapReduce est relativement simple, traiter d&rsquo;énormes volumes de données sur une architecture distribuée, parallèle et/ou multiprocesseur.</p>
<p>Je ne vais pas, encore une fois, reproduire les multiples exemples qu&rsquo;on trouve sur le sujet, mais je me devais de faire passer le message. Pour ceux que cela intéresse, voici quelques liens :</p>
<ul>
<li><a href="http://labs.google.com/papers/mapreduce.html">Présentation des recherches de Google sur MapReduce</a></li>
<li><a href="http://hadoop.apache.org/">Hadoop</a> : implémentation open source de MapReduce.</li>
<li><a href="http://www.mapreduce.org/">MapReduce.org</a></li>
</ul>
<p style="text-align: center;"><a rel="attachment wp-att-563" href="http://www.kakesa.net/programmation/mapreduce-un-modele-a-connaitre/527/attachment/mapreduce"><img class="aligncenter size-full wp-image-563" title="MapReduce" src="http://www.kakesa.net/wp-content/uploads/2010/11/MapReduce.png" alt="" width="528" height="280" /></a></p>
<p style="text-align: center;">
<p style="text-align: center;">
<p>Il va de soi que nous sommes déjà dans une ère où le volume de donnée à traiter devient colossal pour nos systèmes d&rsquo;informations. Les machines sont quasiment toutes multiprocesseurs, nous devons adapter nos programmes pour utiliser toutes la puissance du matériel. Cela nécessite une complexité supplémentaire dans les programmes qui doivent être concurrents tout en en étant fiable. Concrètement utiliser des modèles de programmation tels que MapReduce, Threadpool etc&#8230; sont une nécessité dès à présent.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/mapreduce-un-modele-a-connaitre/527/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le prochain standard du C++, C++0x, présenté par Bjarne Stroustrup</title>
		<link>http://www.kakesa.net/programmation/le-prochain-standard-du-c-c0x-presente-par-bjarne-stroustrup/452</link>
		<comments>http://www.kakesa.net/programmation/le-prochain-standard-du-c-c0x-presente-par-bjarne-stroustrup/452#comments</comments>
		<pubDate>Sun, 21 Nov 2010 17:50:22 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[cplusplus]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=452</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_8840943"></div></div></div>Le créateur du langage C++, Bjarne Stroustrup, décrit depuis son site internet les nouvelles fonctions qui intégrerons la future version du langage actuellement encore en version draft. Cette version est bien avancée, puisque disponible sur les compilateurs les plus importants (GCC, MSVC, etc&#8230;). Parmi les fonctionnalités que j&#8217;attends le plus : Les threads Les opérations atomiques&#8230; <a href="http://www.kakesa.net/programmation/le-prochain-standard-du-c-c0x-presente-par-bjarne-stroustrup/452">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_8840943"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_8840943"></div></div></div><p>Le créateur du langage C++, <a href="http://www2.research.att.com/~bs/">Bjarne Stroustrup</a>, décrit depuis <a href="http://www2.research.att.com/~bs/">son site internet</a> les nouvelles fonctions qui intégrerons la future version du langage actuellement encore en version draft.<br />
Cette version est bien avancée, puisque disponible sur les compilateurs les plus importants (<a href="http://gcc.gnu.org/">GCC</a>, <a href="http://msdn.microsoft.com/en-us/visualc/default.aspx">MSVC</a>, etc&#8230;).</p>
<p>Parmi les fonctionnalités que j&rsquo;attends le plus :</p>
<ul>
<li>Les threads</li>
<li>Les opérations atomiques</li>
<li>Les expressions lambdas</li>
<li>Les listes d&rsquo;initialisation</li>
<li>Construction et destruction dynamiques, concurrentiels d&rsquo;un objet</li>
<li>Paramètres variables pour les &laquo;&nbsp;Template&nbsp;&raquo; (variadic templates)</li>
<li>etc&#8230;</li>
</ul>
<p>J&rsquo;ai hâte d&rsquo;y être, même si je test déjà pas mal des fonctionnalités avec <a href="http://gcc.gnu.org/">GCC</a>.</p>
<p>Lien : <a href="http://www2.research.att.com/~bs/C++0xFAQ.html">http://www2.research.att.com/~bs/C++0xFAQ.html</a><br />
Ils en parlent : <a href="http://herbsutter.spaces.live.com/">herbsutter</a>, <a href="http://bertrandleclercq.blogspot.com/2010/11/la-liste-des-nouvelles-fonctions-de-c0x.html">bertrandleclercq.blogspot.com</a>, <a href="http://danielkitta.org/blog/2010/03/18/bjarne-stroupstrup-on-c0x/">danielkitta.org</a>, <a href="http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx">Visual C++ Team Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/programmation/le-prochain-standard-du-c-c0x-presente-par-bjarne-stroustrup/452/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ GoogleTest &gt; 1.4.0 : undefined reference to « pthread_getspecific » etc…</title>
		<link>http://www.kakesa.net/projets-perso/c-googletest-1-4-0-undefined-reference-to-pthread_getspecific-etc/482</link>
		<comments>http://www.kakesa.net/projets-perso/c-googletest-1-4-0-undefined-reference-to-pthread_getspecific-etc/482#comments</comments>
		<pubDate>Thu, 12 Aug 2010 22:59:07 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[projets perso]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[cplusplus]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=482</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_2806985"></div></div></div>Si comme moi vous utilisez la librairie C++ Googletest, et que vous compilez vous-même cette librairie, sachez que sous linux (peut-être unix/posix aussi), il faut ajouter la librairie pthread (-lpthread). J&#8217;utilisais la version 1.4.0 qui n&#8217;en avait pas besoin, mais depuis un svn update il y a quelques heures, j&#8217;ai du ajouter pthread. Avec Scons&#8230; <a href="http://www.kakesa.net/projets-perso/c-googletest-1-4-0-undefined-reference-to-pthread_getspecific-etc/482">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_2806985"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_2806985"></div></div></div><p>Si comme moi vous utilisez la librairie <strong><a href="http://code.google.com/p/googletest/">C++ Googletest</a></strong>, et que vous compilez vous-même cette librairie, sachez que sous linux (peut-être unix/posix aussi), il faut ajouter la librairie pthread (-lpthread).</p>
<p>J&rsquo;utilisais la version 1.4.0 qui n&rsquo;en avait pas besoin, mais depuis un svn update il y a quelques heures, j&rsquo;ai du ajouter <a href="http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html">pthread</a>.</p>
<pre class="brush: bash; title: ; notranslate">
Platform: Linux
scons: done reading SConscript files.
scons: Building targets ...
Copy(&quot;bin/test/README&quot;, &quot;README&quot;)
g++ -o bin/test/fpm-test test/main.o src/ratp/fpmanager/fp_helper.o src/external/googletest/src/gtest.o src/external/googletest/src/gtest-death-test.o src/external/googletest/src/gtest-filepath.o src/external/googletest/src/gtest-port.o src/external/googletest/src/gtest-printers.o src/external/googletest/src/gtest-test-part.o src/external/googletest/src/gtest-typed-test.o
src/external/googletest/src/gtest.o: In function `testing::internal::ThreadLocal&lt;testing::TestPartResultReporterInterface*&gt;::GetOrCreateValue() const':
/home/christian/workspace/fpmanager/src/external/googletest/include/gtest/internal/gtest-port.h:1300: undefined reference to `pthread_getspecific'
...
</pre>
<p>Avec <a href="http://www.scons.org/">Scons</a> on peut ajouter quelquechose dans ce style : </p>
<pre class="brush: python; title: ; notranslate">
if platform == 'linux':
	env.Append(LIBS = 'pthread')
</pre>
<p>Ça évite de chercher presqu&rsquo;une heure, une anomalie dans son programme de test !!!</p>
<p> <img src='http://www.kakesa.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/projets-perso/c-googletest-1-4-0-undefined-reference-to-pthread_getspecific-etc/482/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asus EeePC 1201HA et Intel GMA 500 avec Ubuntu Netbook Edition 10.04 (Lucid Lynx)</title>
		<link>http://www.kakesa.net/linux/asus-eeepc-1201ha-et-intel-gma-500-avec-ubuntu-netbook-edition-10-04-lucid-lynx/434</link>
		<comments>http://www.kakesa.net/linux/asus-eeepc-1201ha-et-intel-gma-500-avec-ubuntu-netbook-edition-10-04-lucid-lynx/434#comments</comments>
		<pubDate>Wed, 11 Aug 2010 09:16:19 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=434</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_68804197"></div></div></div>Installer une Ubuntu sur un Netbook est maintenant très aisé avec les solutions basées sur une installation à partir d&#8217;une clé USB. De très bon tutoriaux sont présent sur le Net : http://doc.ubuntu-fr.org/ubuntu_netbook_edition#installation Après une installation facile, rapide et efficace on s&#8217;aperçoit que l&#8217;interface graphique est très lente ; que se passe t-il ? Pas de&#8230; <a href="http://www.kakesa.net/linux/asus-eeepc-1201ha-et-intel-gma-500-avec-ubuntu-netbook-edition-10-04-lucid-lynx/434">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_68804197"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_68804197"></div></div></div><p><figure id="attachment_473" class="wp-caption thumbnail aligncenter" style="width: 452px;">
				<br />
<a href="http://www.asus.com/product.aspx?P_ID=Kp9FSSex21aq8WPA"><br />
<img class="size-full wp-image-473" title="asus_eeepc_1201ha_logo" src="http://www.kakesa.net/wp-content/uploads/2010/08/asus_eeepc_1201ha_logo1.png" alt="Logo Asus EeePC 1201HA" width="452" height="364" /><br />
</a><br />

				<figcaption class="wp-caption-text">Netbook Asus EeePC 1201HA</figcaption>
			</figure></p>
<p>Installer une Ubuntu sur un Netbook est maintenant très aisé avec les solutions basées sur une installation à partir d&rsquo;une clé USB. De très bon tutoriaux sont présent sur le Net : <a href="http://doc.ubuntu-fr.org/ubuntu_netbook_edition#installation">http://doc.ubuntu-fr.org/ubuntu_netbook_edition#installation</a></p>
<p>Après une installation facile, rapide et efficace on s&rsquo;aperçoit que l&rsquo;interface graphique est très lente ; que se passe t-il ? Pas de pilotes graphiques pour l&rsquo;<a href="http://en.wikipedia.org/wiki/Intel_GMA">Intel GMA 500 (PowerVR)</a> sous linux ? En fait les drivers existent mais sont propriétaires (pour la partie 3D). Ils tournent bien mais ne sont pas tout à fait au point.</p>
<p>Ce qu&rsquo;on gagne :</p>
<ul>
<li>Des performances 2D correctes.</li>
<li>La lecture vidéo n&rsquo;est pas top sur la HD et sur certains formats SD, c&rsquo;est déjà ça.</li>
<li>Pour la 3D, c&rsquo;est Néant pour le moment ;-(</li>
</ul>
<p>Voici les lignes de commandes qui vont faire en sorte de prendre plaisir à utiliser son netbook sous linux.</p>
<pre class="brush: bash; gutter: false; light: true; title: ; notranslate">
sudo add-apt-repository ppa:gma500/ppa &amp;&amp; sudo aptitude update
sudo aptitude safe-upgrade
sudo aptitude install poulsbo-driver-2d poulsbo-driver-3d poulsbo-config \
psb-kernel-source
</pre>
<p>Lors de mise à jour du kernel linux, il peut arriver que dkms ne trouve pas les sources du kernel poulsbo, voilà ce qu&rsquo;il faut faire :</p>
<pre class="brush: bash; title: ; notranslate">
sudo aptitude download psb-kernel-source
sudo dpkg -i psb-kernel-source_4.42.0-0ubuntu2~1004um3.1_all.deb
</pre>
<p>Si une erreur survient lors de l&rsquo;installation du fichier deb, réessayé une seconde fois le :</p>
<p><code>sudo dpkg -i psb-kernel-source_4.42.0-0ubuntu2~1004um3.1_all.deb</code></p>
<p>La suppression de la version du module précédent pose parfois des soucis à la nouvelle installation.</p>
<p>Et voilà il ne reste plus qu&rsquo;à rebooter&#8230; Il faut noter qu&rsquo;Asus a corriger le tire en choisissant d&rsquo;autres puces graphiques sur d&rsquo;autres modèles de ces netbooks et c&rsquo;est un bon choix ;  car Intel n&rsquo;assure pas du tout avec ce GMA500, il est vraiment <i>Naze</i> (espérons que ce soit temporaire). Même pour un netbook il y a un minimum tout de même. Je n&rsquo;ai plus qu&rsquo;à économiser pour m&rsquo;acheter un vrai netbook ou attendre un peu des vrais pilotes !!!</p>
<p><strong>Liens : </strong></p>
<ul>
<li><a href="http://doc.ubuntu-fr.org/poulsbo">http://doc.ubuntu-fr.org/poulsbo</a></li>
<li><a href="http://ubuntuforums.org/showpost.php?p=9598669&amp;postcount=1461">http://ubuntuforums.org/showpost.php?p=9598669&amp;postcount=1461</a></li>
</ul>
<p>Mon <a href="http://doc.ubuntu-fr.org/xorg">xorg.conf</a> :</p>
<pre class="brush: plain; gutter: false; light: true; title: ; notranslate">
# Fichier /etc/X11/xorg.conf

Section &quot;Files&quot;
	ModulePath   &quot;/usr/lib/xorg/modules&quot;
	FontPath     &quot;/usr/share/fonts/X11/misc&quot;
	FontPath     &quot;/usr/share/fonts/X11/cyrillic&quot;
	FontPath     &quot;/usr/share/fonts/X11/100dpi/:unscaled&quot;
	FontPath     &quot;/usr/share/fonts/X11/75dpi/:unscaled&quot;
	FontPath     &quot;/usr/share/fonts/X11/Type1&quot;
	FontPath     &quot;/usr/share/fonts/X11/100dpi&quot;
	FontPath     &quot;/usr/share/fonts/X11/75dpi&quot;
	FontPath     &quot;/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType&quot;
EndSection

Section &quot;Monitor&quot;
	Identifier   &quot;Monitor0&quot;
	VendorName   &quot;Monitor Vendor&quot;
	ModelName    &quot;Monitor Model&quot;
EndSection

Section &quot;Screen&quot;
	Identifier &quot;Screen0&quot;
	Device     &quot;Card0&quot;
	Monitor    &quot;Monitor0&quot;
	SubSection &quot;Display&quot;
		Viewport   0 0
		Depth     1
	EndSubSection
	SubSection &quot;Display&quot;
		Viewport   0 0
		Depth     4
	EndSubSection
	SubSection &quot;Display&quot;
		Viewport   0 0
		Depth     8
	EndSubSection
	SubSection &quot;Display&quot;
		Viewport   0 0
		Depth     15
	EndSubSection
	SubSection &quot;Display&quot;
		Viewport   0 0
		Depth     16
	EndSubSection
	SubSection &quot;Display&quot;
		Viewport   0 0
		Depth     24
	EndSubSection
EndSection

Section &quot;Module&quot;
	Load  &quot;glx&quot;
	Load  &quot;record&quot;
	Load  &quot;extmod&quot;
	Load  &quot;xtrap&quot;
	Load  &quot;dbe&quot;
	Load  &quot;dri&quot;
EndSection

Section &quot;DRI&quot;
	Mode	0666
EndSection

Section &quot;InputDevice&quot;
	Identifier  &quot;Keyboard0&quot;
	Driver      &quot;kbd&quot;
EndSection

Section &quot;InputDevice&quot;
	Identifier  &quot;Mouse0&quot;
	Driver      &quot;mouse&quot;
	Option	    &quot;Protocol&quot; &quot;auto&quot;
	Option	    &quot;Device&quot; &quot;/dev/input/mice&quot;
	Option	    &quot;ZAxisMapping&quot; &quot;4 5 6 7&quot;
EndSection

Section &quot;ServerLayout&quot;
	Identifier     &quot;X.org Configured&quot;
	Screen      0  &quot;Screen0&quot; 0 0
	InputDevice    &quot;Mouse0&quot; &quot;CorePointer&quot;
	InputDevice    &quot;Keyboard0&quot; &quot;CoreKeyboard&quot;
EndSection

Section &quot;Device&quot;
	Option      &quot;IgnoreACPI&quot;         	&quot;true&quot;
	Identifier  &quot;Card0&quot;
	VendorName  &quot;Intel Corporation&quot;
	BoardName   &quot;System Controller Hub (SCH Poulsbo) Graphics Controller&quot;
	BusID       &quot;PCI:0:2:0&quot;
	Driver	&quot;psb&quot;
	### Available Driver options are:-
	### Values: &lt;i&gt;: integer, &lt;f&gt;: float, &lt;bool&gt;: &quot;True&quot;/&quot;False&quot;,
	### &lt;string&gt;: &quot;String&quot;, &lt;freq&gt;: &quot;&lt;f&gt; Hz/kHz/MHz&quot;
	### [arg]: arg optional
	#Option     &quot;ShadowFB&quot;           	# [&lt;bool&gt;]
	#Option     &quot;NoAccel&quot;            	# [&lt;bool&gt;]
	#Option     &quot;SWcursor&quot;           	# [&lt;bool&gt;]
	#Option     &quot;ExaMem&quot;             	# &lt;i&gt;
	#Option     &quot;ExaScratch&quot;         	# &lt;i&gt;
	#Option      &quot;NoPanel&quot;            	&quot;true&quot;
	#Option     &quot;LidTimer&quot;           	# [&lt;bool&gt;]
	#Option     &quot;NoFitting&quot;          	# [&lt;bool&gt;]
	#Option     &quot;DownScale&quot;          	# [&lt;bool&gt;]
EndSection
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/asus-eeepc-1201ha-et-intel-gma-500-avec-ubuntu-netbook-edition-10-04-lucid-lynx/434/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arista 0.9.5 sur Ubuntu Lucid Lynx (10.04)</title>
		<link>http://www.kakesa.net/linux/arista-0-9-5-sur-ubuntu-lucid-lynx-10-04/436</link>
		<comments>http://www.kakesa.net/linux/arista-0-9-5-sur-ubuntu-lucid-lynx-10-04/436#comments</comments>
		<pubDate>Mon, 09 Aug 2010 14:56:39 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[arista]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vidéo]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=436</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_89145300"></div></div></div>Arista est une application qui permet de transcoder une vidéo pour plusieurs types d&#8217;appareils grâce à un système de presets (réglage automatique) pour ces différents appareils. On peut l&#8217;installer facilement : Mon premier test d&#8217;encodage d&#8217;une de mes vidéos de vacances pour mon beau téléphone Android échoue. Après plusieurs tests, voici les étapes qui m&#8217;ont&#8230; <a href="http://www.kakesa.net/linux/arista-0-9-5-sur-ubuntu-lucid-lynx-10-04/436">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_89145300"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_89145300"></div></div></div><p><figure id="attachment_464" class="wp-caption thumbnail aligncenter" style="width: 225px;">
				<a href="http://www.transcoder.org/"><img class="size-full wp-image-464" title="arista-logo" src="http://www.kakesa.net/wp-content/uploads/2010/08/arista-logo.png" alt="Logo Arista" width="225" height="125" /></a>
				<figcaption class="wp-caption-text">Arista, the eaiest way to convert your media</figcaption>
			</figure></p>
<p>Arista est une application qui permet de transcoder une vidéo pour plusieurs types d&rsquo;appareils grâce à un système de <strong>presets</strong> (réglage automatique) pour ces différents appareils.</p>
<p>On peut l&rsquo;installer facilement :</p>
<pre class="brush: bash; title: ; notranslate">
sudo aptitude install arista
</pre>
<p>Mon premier test d&rsquo;encodage d&rsquo;une de mes vidéos de vacances pour mon beau téléphone Android échoue.</p>
<pre class="brush: bash; title: ; notranslate">
ERROR: Caught a segmentation fault while loading plugin file:
/usr/lib/gstreamer-0.10/libgstffmpeg.so
Please either:
- remove it and restart.
- run with --gst-disable-segtrap and debug.
</pre>
<p>Après plusieurs tests, voici les étapes qui m&rsquo;ont permis d&rsquo;arriver à mes fins :</p>
<pre class="brush: bash; title: ; notranslate">
sudo aptitude install ubuntu-restricted-extras
sudo aptitude install gstreamer-tools
sudo dpkg --purge --force-depends  gstreamer0.10-ffmpeg
rm -rf ~/.gstreamer-0.10
sudo aptitude reinstall ffmpeg
sudo aptitude install gstreamer0.10-ffmpeg
gst-inspect-0.10
</pre>
<p>Faites attention de bien avoir ces plugins d&rsquo;installés sur votre machine :</p>
<pre class="brush: bash; title: ; notranslate">
i A gstreamer0.10-plugins-bad
i   gstreamer0.10-plugins-bad-multiverse
i   gstreamer0.10-plugins-base
i   gstreamer0.10-plugins-base-apps
i   gstreamer0.10-plugins-good
i A gstreamer0.10-plugins-ugly
i   gstreamer0.10-plugins-ugly-multiverse
</pre>
<p>Voilà le travail&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/arista-0-9-5-sur-ubuntu-lucid-lynx-10-04/436/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compiler Android sous Ubuntu Lucid Lynx (10.04) , pas de java5 packagé</title>
		<link>http://www.kakesa.net/linux/compiler-android-sous-ubuntu-lucid-lynx-10-04-pas-de-java5-package/338</link>
		<comments>http://www.kakesa.net/linux/compiler-android-sous-ubuntu-lucid-lynx-10-04-pas-de-java5-package/338#comments</comments>
		<pubDate>Thu, 15 Jul 2010 21:11:06 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[arm]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=338</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_39052256"></div></div></div>Pour ceux qui veulent se lancer dans la compilation d&#8217;Android sous Ubuntu Lucid Lynx, il faut savoir que cela nécessite de réaliser quelques manipulations supplémentaires. Tous d&#8217;abord le lien du projet pour compiler les sources d&#8217;Android (très bien écrit) : http://source.android.com/source/download.html Mais pour notre Ubuntu le problème est java5, qui n&#8217;est plus dispo dans les&#8230; <a href="http://www.kakesa.net/linux/compiler-android-sous-ubuntu-lucid-lynx-10-04-pas-de-java5-package/338">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_39052256"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_39052256"></div></div></div><p><figure id="attachment_403" class="wp-caption thumbnail aligncenter" style="width: 150px;">
				<a rel="attachment wp-att-403" href="http://www.kakesa.net/linux/compiler-android-sous-ubuntu-lucid-lynx-10-04-pas-de-java5-package/338/attachment/home-bugdroid"><img class="size-full wp-image-403" title="Logo Android" src="http://www.kakesa.net/wp-content/uploads/2010/07/home-bugdroid.png" alt="Logo Android" width="150" height="174" /></a>
				<figcaption class="wp-caption-text">Logo Android</figcaption>
			</figure></p>
<p style="text-align: justify;">Pour ceux qui veulent se lancer dans la compilation d&rsquo;Android sous Ubuntu Lucid Lynx, il faut savoir que cela nécessite de réaliser quelques manipulations supplémentaires.</p>
<p style="text-align: justify;">Tous d&rsquo;abord le lien du projet pour compiler les sources d&rsquo;Android (très bien écrit) :</p>
<ul style="text-align: justify;">
<li style="text-align: justify;"><a href="http://source.android.com/source/download.html">http://source.android.com/source/download.html</a></li>
</ul>
<p style="text-align: justify;">Mais pour notre Ubuntu le problème est java5, qui n&rsquo;est plus dispo dans les dépôts. Si vous tenter de compiler les sources avec le java6 sous une Ubuntu 32bits, vous tomberez sur un bug indiquant que des entêtes de fichiers C 64bits non trouvés. Dans tous les cas, des parties du code java d&rsquo;Android ne sont pas supportés par java 6.</p>
<p style="text-align: justify;">Donc la première des choses à faire est de récupérer java5 depuis le site d&rsquo;Oracle :</p>
<ul style="text-align: justify;">
<li><a href="http://java.sun.com/javase/downloads/index_jdk5.jsp">http://java.sun.com/javase/downloads/index_jdk5.jsp</a></li>
</ul>
<h2 style="text-align: justify;">Installer manuellement le java5</h2>
<pre class="brush: bash; title: ; notranslate">
chmod a+x jdk-1_5_0_22-linux-i586.bin
./jdk-1_5_0_22-linux-i586.bin
sudo mv jdk1.5.0_22 /usr/lib/jvm/java-5-sun-1.5.0.22
cd /usr/lib/jvm
sudo ln -s java-5-sun-1.5.0.22 java-5-sun
</pre>
<p style="text-align: justify;">Je n&rsquo;ai pas trouvé le moyen d&rsquo;inclure mon install de java5 avec l&rsquo;outil &laquo;&nbsp;update-java-alternatives&nbsp;&raquo; qui permet de switcher d&rsquo;une jvm à l&rsquo;autre en toute simplicité. Il est toujours possible de créer un fichier &laquo;&nbsp;.java-5-sun.jinfo&nbsp;&raquo; mais je manque de temps et il existe peut-être un outil pour le faire, n&rsquo;hésitez pas à me faire signe. (trouvé : <a href="http://doc.ubuntu-fr.org/java">http://doc.ubuntu-fr.org/java</a>)</p>
<p style="text-align: justify;">Avant de lancer le <strong>make -j4</strong> du <a href="http://source.android.com/source/download.html">tutoriel de google</a>, faites la manip suivante dans le shell (non persistante) :</p>
<pre class="brush: bash; title: ; notranslate">
export JAVA_HOME=/usr/lib/jvm/java-5-sun
export ANDROID_JAVA_HOME=${JAVA_HOME}
export PATH=${JAVA_HOME}/bin:${PATH}
</pre>
<p style="text-align: justify;">Tenter votre première compilation  d&rsquo;Android générique :</p>
<pre class="brush: bash; title: ; notranslate">
make -j4
</pre>
<h2 style="text-align: justify;">Liens</h2>
<ul style="text-align: justify;">
<li><a href="http://groups.google.com/group/android-building/browse_thread/thread/193332fd6850a2a">http://groups.google.com/group/android-building/browse_thread/thread/193332fd6850a2a</a></li>
<li><a href="http://source.android.com/source/download.html">http://source.android.com/source/download.html</a></li>
<li><a href="http://java.sun.com/javase/downloads/index_jdk5.jsp">http://java.sun.com/javase/downloads/index_jdk5.jsp</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/linux/compiler-android-sous-ubuntu-lucid-lynx-10-04-pas-de-java5-package/338/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Samsung SPICA, première Android expérience</title>
		<link>http://www.kakesa.net/android/samsung-spica-premiere-android-experience/333</link>
		<comments>http://www.kakesa.net/android/samsung-spica-premiere-android-experience/333#comments</comments>
		<pubDate>Wed, 14 Jul 2010 01:29:11 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[samsung spica]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=333</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_26783309"></div></div></div>Ça fait maintenant plus d&#8217;un mois que je tourne avec le Samsung Spica (I5700) sous Android 2.1 (Eclair). Un android-phone agréable à utiliser. Une prise en main confortable, mais une web expérience assez mitigée. Samsung semble avoir comblé le bide du Galaxy I7500, son premier mobile sous Android. Mais pour avoir eu des retours de personne ayant&#8230; <a href="http://www.kakesa.net/android/samsung-spica-premiere-android-experience/333">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_26783309"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_26783309"></div></div></div><p><figure id="attachment_343" class="wp-caption thumbnail aligncenter" style="width: 320px;">
				<a rel="attachment wp-att-343" href="http://www.kakesa.net/android/samsung-spica-premiere-android-experience/333/attachment/samsung_spica_i5700"><img class="size-full wp-image-343      " title="Samsung Spica I5700" src="http://www.kakesa.net/wp-content/uploads/2010/07/samsung_spica_I5700.jpg" alt="Samsung Spica I5700" width="320" height="200" /></a>
				<figcaption class="wp-caption-text">Photo Samsung Spica I5700 avec son CPU S3C6410 cadencé à 800Mhz</figcaption>
			</figure></p>
<p>Ça fait maintenant plus d&rsquo;un mois que je tourne avec le <a href="http://fr.samsungmobile.com/pid181-content_id1438/spica.html">Samsung Spica (I5700)</a> sous Android 2.1 (Eclair). Un android-phone agréable à utiliser. Une prise en main confortable, mais une web expérience assez mitigée. Samsung semble avoir comblé le bide du <a href="http://www.samsung.com/fr/consumer/mobile-phones/mobile-phones/businesss/GT-I7500OKABOG/index.idx?pagetype=prd_detail&amp;returnurl=">Galaxy I7500</a>, son premier mobile sous Android. Mais pour avoir eu des retours de personne ayant utilisés le premier modèle, je suis largement plus optimiste sur le Spica. La taille du téléphone est  très bien adaptée pour une prise en main efficace. Il faut tout de même un petit temps d&rsquo;adaptation pour palier l&rsquo;absence du clavier physique ; le clavier virtuel, surtout en mode portrait, reste un peu délicat à manipuler ; deux ou trois jours d&rsquo;utilisation intensive sont nécessaires avant de maîtriser la saisie clavier en toute circonstance. L&rsquo;expérience phone/gsm est plutôt bonne, je pense que c&rsquo;est le cas pour tous les smartphones ; un bilan plutôt positif sur ce point. La web expérience doit être partagée en deux partie. D&rsquo;un côté la partie widget/game et de l&rsquo;autre la partie navigation internet via le &laquo;&nbsp;Browser&nbsp;&raquo; d&rsquo;Android.</p>
<h2>Widget/Game expérience</h2>
<p style="text-align: left;">La widget-expérience est très bonne. Après avoir testé une multitude d&rsquo;applications, toutes m&rsquo;ont donné une impression positive. De la plus simple à la plus complexe, on est toujours étonné qu&rsquo;un appareil de cette taille soit si agréable. C&rsquo;est aussi beaucoup du au travail de google de proposer des composants graphiques très bien élaborés et adaptés à ce genre d&rsquo;utilisation. En terme de jeux, on peut être très satisfait des capacités 2D du Spica. La 3D (sous <a href="http://www.khronos.org/opengles/">OpenGL ES</a>) semble peu performante, mais quelques recherches en ligne laissent croire que Samsung doit fournir des drivers plus performants de sa puce S3C6410. Je vous conseille un bon jeu 2D très prenant <strong><a href="http://lupislabs.blogspot.com/2009/06/robo-defense-instructions.html">Robo Defense</a></strong> de <a href="http://lupislabs.blogspot.com/"><strong>Lupis Labs Software</strong></a>. Il y a en fait beaucoup d&rsquo;autres jeux mais Robo Defense est celui avec lequel je m&rsquo;éclate le lus en ce moment&#8230;  <a rel="attachment wp-att-354" href="http://www.kakesa.net/android/samsung-spica-premiere-android-experience/333/attachment/robo-defense-screenshot"><img class="aligncenter size-full wp-image-354" title="Robo Defense Screenshot" src="http://www.kakesa.net/wp-content/uploads/2010/07/robo-defense-screenshot.png" alt="Robo Defense Screenshot" width="480" height="320" /></a></p>
<h2>Internet expérience</h2>
<p>Comme dit plus haut l&rsquo;internet-expérience et un peu moins bonne. La taille de l&rsquo;écran y est pour beaucoup et le peu de site internet optimisé pour les smartphones y contribue énormément à ne pas être à l&rsquo;aise. On a plus envi de passer sur son portable ou son PC de bureau pour une navigation internet plus aisée. Je n&rsquo;ai pas eu cette impression sur un <a href="http://www.google.com/phone/">Nexus One</a> ou un <a href="http://www.apple.com/fr/iphone/iphone-3gs/">Iphone 3GS</a> donc je suppose que la gêne vient de la taille de l&rsquo;écran. Le zoom est accessible grâce à un simple double-click pour avoir une vision adaptée du contenu, mais le scrolling est agaçant.</p>
<h2>Conclusion</h2>
<p>Quelques regrets&#8230;<br />
Pas de version officielle d&rsquo;<a href="http://android-developers.blogspot.com/2010/05/android-22-and-developers-goodies.html">Android 2.2 (Froyo)</a>, la taille de l&rsquo;écran un peu petite et peut-être un manque de mémoire interne. Même si on peu installer pas mal d&rsquo;applications on est tout de même limité. Je pense que l&rsquo;android-phone de Samsung qui devrait cartonner est le <a href="http://galaxys.samsungmobile.com/">Galaxy S</a> qui est prévu pour septembre 2010 comme étant l&rsquo;Iphone 4 killer ou concurrent du <a href="http://now.sprint.com/firsts/evo4g/">HTC Evo 4G</a>.</p>
<p>Il faut dire que le Spica reste un très bon rapport qualité/prix dans la gamme moyenne des smartphones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/android/samsung-spica-premiere-android-experience/333/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Première application en GO, un client NetSoul</title>
		<link>http://www.kakesa.net/projets-perso/premiere-application-en-go-un-client-netsoul/292</link>
		<comments>http://www.kakesa.net/projets-perso/premiere-application-en-go-un-client-netsoul/292#comments</comments>
		<pubDate>Wed, 14 Apr 2010 20:27:25 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[programmation]]></category>
		<category><![CDATA[projets perso]]></category>
		<category><![CDATA[golang]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=292</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_59473061"></div></div></div>Cela devient un classique pour moi ; appréhender un langage de programmation se concrétise souvent par l&#8217;écriture d&#8217;un client NetSoul. L&#8217;écriture d&#8217;un client NetSoul, nécessite de toucher aux sockets (IO), à la crypto, traitement de chaînes de caractères, gestion des exceptions et erreurs puis parfois aux évènements/notifications/signaux, processus concurrents (Lock/Unlock, Thread) etc&#8230; De quoi avoir&#8230; <a href="http://www.kakesa.net/projets-perso/premiere-application-en-go-un-client-netsoul/292">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_59473061"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_59473061"></div></div></div><p style="text-align: justify;">Cela devient un classique pour moi ; appréhender un langage de programmation se concrétise souvent par l&rsquo;écriture d&rsquo;un client <a title="Screenshot client RubySoul-NG" href="http://code.google.com/p/rubysoul-ng/wiki/NetSoul" target="_blank">NetSoul</a>. L&rsquo;écriture d&rsquo;un client NetSoul, nécessite de toucher aux sockets (IO), à la crypto, traitement de chaînes de caractères, gestion des exceptions et erreurs puis parfois aux évènements/notifications/signaux, processus concurrents (Lock/Unlock, Thread) etc&#8230; De quoi avoir un avis exhaustif sur le langage de manière assez large.</p>
<p style="text-align: justify;">Globalement le langage <a href="http://golang.org/" target="_blank">GO</a> se rapproche beaucoup des langages de scripting récents, mais le langage est bien dans la famille des langages compilés. La prise en main est assez rapide si l&rsquo;on maîtrise déjà des langages tels que <a href="http://fr.wikipedia.org/wiki/C_(langage)" target="_blank">C</a>/<a href="http://fr.wikipedia.org/wiki/C%2B%2B" target="_blank">C++</a>, <a href="http://www.ruby-lang.org" target="_blank">Ruby</a>, <a href="http://www.python.org" target="_blank">Python</a>&#8230; Sans connaissance particulière en programmation c&rsquo;est possible de commencer par le langage <a href="http://golang.org/" target="_blank">GO</a>, mais je fais parti de ceux qui pense que la programmation s&rsquo;apprend avec le &laquo;&nbsp;<a title="Le langage C sur Wikipédia" href="http://fr.wikipedia.org/wiki/C_(langage)" target="_blank">C</a>&laquo;&nbsp;.</p>
<p><a title="GOSOUL, NetSoul client" href="http://redmine.kakesa.net/repositories/show/go-soul" target="_blank">Exemple d&rsquo;un client NetSoul écrit en GO</a></p>
<p><figure id="attachment_324" class="wp-caption thumbnail aligncenter" style="width: 512px;">
				<a href="http://www.kakesa.net/wp-content/uploads/2010/04/gosoul_client.png"><img class="size-full wp-image-324 " title="gosoul_client" src="http://www.kakesa.net/wp-content/uploads/2010/04/gosoul_client-e1271276532699.png" alt="GOSOUL NetSoul client" width="512" height="282" /></a>
				<figcaption class="wp-caption-text">GOSOUL NetSoul client, par Christian KAKESA</figcaption>
			</figure></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/projets-perso/premiere-application-en-go-un-client-netsoul/292/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_52424579"></div></div></div>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 développement Ajouter les&#8230; <a href="http://www.kakesa.net/programmation/programmation-go-golang-ubuntu-9-10/257">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_52424579"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_52424579"></div></div></div><p><figure class="wp-caption thumbnail aligncenter" style="width: 203px;">
				<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>
				<figcaption class="wp-caption-text">GO lang</figcaption>
			</figure></p>
<p>GO est un langage de programmation propulsé par Google. L&rsquo;objectif premier de <a href="http://golang.org/">GO</a> est de proposer un langage rapide à l&rsquo;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; title: ; notranslate">
sudo aptitude install bison gcc libc6-dev ed gawk make
sudo aptitude install python-setuptools python-dev build-essential
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; title: ; notranslate">
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; title: ; notranslate">
. ~/.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; title: ; notranslate">
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>
		<category><![CDATA[programmation]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=224</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_42475162"></div></div></div>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. Il ne vous reste plus qu&#8217;à répondre aux questions&#8230; Pour signer une application, le plus simple est d&#8217;utiliser ant. Il suffit de renseigner les deux lignes ci-dessous&#8230; <a href="http://www.kakesa.net/os-design/signer-une-application-android-ubuntu-9-10/224">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_42475162"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_42475162"></div></div></div><p><figure class="wp-caption thumbnail aligncenter" style="width: 180px;">
				<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>
				<figcaption class="wp-caption-text">Android developers</figcaption>
			</figure></p>
<p>Signer une application Android n&rsquo;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; title: ; notranslate">
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&rsquo;à répondre aux questions&#8230;</p>
<p>Pour signer une application, le plus simple est d&rsquo;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; title: ; notranslate">
# 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; title: ; notranslate">
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&rsquo;à déployer l&rsquo;application.</p>
<p>Pour installer votre application sur l&rsquo;émulateur ou votre device, il faut utiliser l&rsquo;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[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_33708610"></div></div></div>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&#8230; <a href="http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_33708610"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_33708610"></div></div></div><p><figure id="attachment_180" class="wp-caption thumbnail alignleft" style="width: 115px;">
				<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>
				<figcaption class="wp-caption-text">Logo Android</figcaption>
			</figure></p>
<p>Pour les développeurs qui n&rsquo;ont pas encore de mobile Android, il est impossible de tester l&rsquo;Android Market et ce, même depuis les images pour l&rsquo;é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&rsquo;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&rsquo;en avez pas encore.</p>
<p>Créer un répertoire temporaire pour stocker l&rsquo;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; title: ; notranslate">
mkdir -p /tmp/android
unzip signed-dream_devphone_userdebug-img-14721.zip
chmod a+r *.img
</pre>
<p>L&rsquo;image récupéré depuis le site de HTC étant celui d&rsquo;une version 1.6, créons un avd de la même version et copions-y l&rsquo;image HTC :</p>
<pre class="brush: bash; title: ; notranslate">
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&rsquo;émulateur :</p>
<pre class="brush: bash; title: ; notranslate">
emulator -avd avd1.6
</pre>
<ol>
<li>Cliquez sur le logo Android à l&rsquo;é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>
<p>[st transition=wipeh width=600 height=563 quality=best scale=noborder showtext=on fullscreen=off autoplay=on source=full]<br />
<img title="android-market-01" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-01.png" alt="android-market-01" width="640" height="601" /><br />
<img class="size-full wp-image-203" title="android-market-02" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-02.png" alt="android-market-02" width="640" height="601" /><br />
<img class="size-full wp-image-206" title="android-market-03" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-03.png" alt="android-market-03" width="640" height="601" /><br />
<img class="size-full wp-image-207" title="android-market-04" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-04.png" alt="android-market-04" width="640" height="601" /><br />
<img class="size-full wp-image-208" title="android-market-05" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-05.png" alt="android-market-05" width="640" height="601" /><br />
<img class="size-full wp-image-209" title="android-market-06" src="http://www.kakesa.net/wp-content/uploads/2009/11/android-market-06.png" alt="android-market-06" width="640" height="601" /><br />
[/st]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kakesa.net/os-design/android-market-sur-son-emulateur/185/feed</wfw:commentRss>
		<slash:comments>2</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[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_96449077"></div></div></div>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&#8230; <a href="http://www.kakesa.net/os-design/installer-le-sdk-android-et-eclipse-adt-ubuntu-9-10/139">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_96449077"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_96449077"></div></div></div><p><figure id="attachment_180" class="wp-caption thumbnail alignleft" style="width: 112px;">
				<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>
				<figcaption class="wp-caption-text">Logo Android</figcaption>
			</figure></p>
<p>Voici un petit tutoriel pour installer le SDK Android ainsi que l&rsquo;IDE Eclipse et son plugin ADT permettant de réaliser ses premières lignes de code sous l&rsquo;OS de Google. Je vous conseille de tester l&rsquo;émulateur afin de vous familiariser avec Android. D&rsquo;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; title: ; notranslate">
sudo aptitude install sun-java6-bin ant
</pre>
<h3>Installer Eclipse et son plugin ADT</h3>
<pre class="brush: bash; title: ; notranslate">
sudo aptitude install eclipse
</pre>
<h3>Installer le plugin ADT pour eclipse</h3>
<p>Ici l&rsquo;installation d&rsquo;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; title: ; notranslate">
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; title: ; notranslate">
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; title: ; notranslate">
android update sdk
</pre>
<h3>Faites connaissance avec l&rsquo;émulateur Android</h3>
<p>Lister les firmware disponible et identifier l&rsquo;ID d&rsquo;une version qui vous intéresse</p>
<pre class="brush: bash; title: ; notranslate">
android list targets
</pre>
<p>Créer un avd et lancer l&rsquo;émulateur (-t : Id précédemment identifié)</p>
<pre class="brush: bash; title: ; notranslate">
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>
<p><figure id="attachment_153" class="wp-caption thumbnail aligncenter" style="width: 448px;">
				<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" />
				<figcaption class="wp-caption-text">Émulateur Android</figcaption>
			</figure></p>
]]></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>21</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]]></category>
		<category><![CDATA[cplusplus]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=90</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_79637461"></div></div></div>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&#8230; <a href="http://www.kakesa.net/programmation/stax-xml-pull-parser/90">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_79637461"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_79637461"></div></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>
<p><figure id="attachment_94" class="wp-caption thumbnail aligncenter" style="width: 88px;">
				<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>
				<figcaption class="wp-caption-text">Logo XML 1.1</figcaption>
			</figure></p>
<p>Pour rappel, la méthode DOM a pour fonctionnement le chargement en mémoire de l&rsquo;ensemble d&rsquo;un fichier XML sous forme d&rsquo;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&rsquo;autre et de permettre l&rsquo;é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&rsquo;API) qui permet le parcours d&rsquo;un fichier uniquement vers l&rsquo;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&rsquo;évènement est demandée du côté du code client (comprendre le code client en dehors de l&rsquo;API XML). Le parseur est ce qu&rsquo;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&rsquo;avant uniquement et permet l&rsquo;é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&rsquo;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&rsquo;API comme en SAX. Notons que j&rsquo;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&rsquo;octet définit.</p>
<pre class="brush: cpp; title: ; notranslate">
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>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=69</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_70381467"></div></div></div>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 : Il ne reste plus qu&#8217;à se laisser guider et tester cette nouvelle version. La mise à jour depuis une Ubuntu&#8230; <a href="http://www.kakesa.net/linux/migrer-vers-ubuntu-9-10-karmic-koala/69">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_70381467"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_70381467"></div></div></div><p><figure class="wp-caption thumbnail aligncenter" style="width: 202px;">
				<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>
				<figcaption class="wp-caption-text">Ubuntu 9.10 Karmic Koala</figcaption>
			</figure></p>
<p>Cela fait maintenant 1 semaine que la nouvelle version d&rsquo;Ubuntu est sortie. Nom de code Karmic Koala. Pour ceux qui veulent réaliser une mise à jour dans les règles de l&rsquo;art, voilà le secret :</p>
<pre class="brush: bash; title: ; notranslate">
$ sudo aptitude update
$ sudo aptitude safe-upgrade
$ sudo update-manager -d
</pre>
</p>
<p>Il ne reste plus qu&rsquo;à 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&rsquo;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’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>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=55</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_4635445"></div></div></div>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 align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_4635445"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_4635445"></div></div></div><p><figure class="wp-caption thumbnail aligncenter" style="width: 257px;">
				<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>
				<figcaption class="wp-caption-text">Promouvoir de l&#39;Open Source Francophone </figcaption>
			</figure></p>
<p>OsiLink est un projet qui vise à mettre en relation des développeurs qui sont soit à la recherche d&rsquo;un projet de développement soit à la recherche de compétences pour la réalisation d&rsquo;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 01:52:26 +0000</pubDate>
		<dc:creator>Christian KAKESA</dc:creator>
				<category><![CDATA[ruby et rubyonrails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://www.kakesa.net/?p=36</guid>
		<description><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_96539682"></div></div></div>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 interressante sur Ruby&#8230; <a href="http://www.kakesa.net/ruby-et-rubyonrails/rubyconf-2009-a-san-francisco/36">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_96539682"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_96539682"></div></div></div><p><figure class="wp-caption thumbnail aligncenter" style="width: 322px;">
				<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>
				<figcaption class="wp-caption-text">RubyConf 2009 à San Francisco</figcaption>
			</figure></p>
<p style="text-align: left;">C&rsquo;est du 19 au 21 novembre 2009 à San Francisco qu&rsquo;aura lieu la RubyConf de cette année. C&rsquo;est l&rsquo;occasion de pour les plus chanceux de se mettre à jour sur les nouveautés et retour d&rsquo;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[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_82456684"></div></div></div>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, calcul spatial, étude&#8230; <a href="http://www.kakesa.net/base-de-donnees/pgday-europe-2009/17">Lire l'article <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_82456684"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_82456684"></div></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&rsquo;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&rsquo;inscrire à l&rsquo;é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[<div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_3254882"></div></div></div>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 align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_3254882"></div></div></div><div align="right"><div class="sharexyWidgetNoindexUniqueClassName"><div id="shr_3254882"></div></div></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>
