<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Blogs des ResEleux car les cyborgs sont nos amis.</title>
	<link rel="self" href="atom.xml"/>
	<link href="resel.eu"/>
	<id>atom.xml</id>
	<updated>2010-09-05T03:00:42+00:00</updated>
	<generator uri="http://www.planetplanet.org/">http://intertwingly.net/code/venus/</generator>

	<entry>
		<title type="html">SD: Travel with your bugs</title>
		<link href="http://ikibiki.org//blog/2010/09/01/SD_Travel_with_your_bugs/"/>
		<id>http://ikibiki.org//blog/2010/09/01/SD_Travel_with_your_bugs/</id>
		<updated>2010-09-01T11:50:55+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;em&gt;(For Those Who Care About An Introduction:
&lt;a href=&quot;http://spang.cc/&quot;&gt;Christine Spang&lt;/a&gt; gave a
&lt;a href=&quot;http://penta.debconf.org/dc10_schedule/events/591.en.html&quot;&gt;talk during DebConf10&lt;/a&gt;
about &lt;a href=&quot;http://syncwith.us/sd/&quot;&gt;Simple Defects (SD)&lt;/a&gt;, and
&lt;a href=&quot;http://blog.spang.cc/posts/DebConf_10_postmortem_and_SD_talk_followup/&quot;&gt;blogged about it&lt;/a&gt;
later on.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Folks maintaining Debian packages are already able to partially-clone
&lt;code&gt;bugs.debian.org&lt;/code&gt;’s bug database thanks to the
&lt;a href=&quot;http://packages.debian.org/debbugs-local&quot;&gt;local-debbugs&lt;/a&gt; tool. But
what about upstream’s bug tracker? Taking a (shamelessly
self-centered) example: &lt;code&gt;X.Org&lt;/code&gt; packages are hosted on
&lt;code&gt;FreeDesktop.org&lt;/code&gt;’s bugzilla. Thanks to SD, it’s possible to fetch
bugs from there as well! Here’s the obligatory picture:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://ikibiki.org//./blog/2010/09/01/sd-example.png&quot;&gt;&lt;img src=&quot;http://ikibiki.org//./blog/2010/09/01/sd-example.png&quot; alt=&quot;SD example&quot; height=&quot;304&quot; width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This means that you can browse/search them locally while being offline
(or well-connected, but without having to use that !$\§%$^ bugzilla
web interface). Many of the replica types support both reading and
writing, meaning you can also queue some changes locally, and push
them later. Currently, &lt;code&gt;sd help sync&lt;/code&gt; says that read-write support is
available for RT, Hiveminder, Trac, Google Code, and GitHub. There’s
also read-only support for redmine. Debbugs is being worked on, see
Christine’s
&lt;a href=&quot;http://blog.spang.cc/posts/DebConf_10_postmortem_and_SD_talk_followup/&quot;&gt;blog post about her SD talk&lt;/a&gt;
for more info.&lt;/p&gt;

&lt;p&gt;Given there was no support for bugzilla, I had a quick look and
&lt;a href=&quot;http://lists.bestpractical.com/pipermail/sd/2010-August/000024.html&quot;&gt;reported my findings&lt;/a&gt;. The
main point being: &lt;code&gt;\o/ Bugzilla’s XMLRPC \o/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A little while later (I’m not exactly fluent in Perl…), I came up with
a tentatively-mergeable
&lt;a href=&quot;http://lists.bestpractical.com/pipermail/sd/2010-August/000040.html&quot;&gt;branch adding preliminary read-only support for bugzilla&lt;/a&gt;. There’s
still a lot of work, but I’m trying to work on it on a regular basis,
adding support for more properties, and fixing bugs (tests should be
written some day, too).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://flattr.com/thing/55724/KiBis-blog&quot;&gt;&lt;img src=&quot;http://ikibiki.org//./flattr-compact.png&quot; alt=&quot;Flattr this!&quot; height=&quot;17&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>iKiBiKi — KiBi’s blog</name>
			<uri>http://ikibiki.org//</uri>
		</author>
		<source>
			<title type="html">iKiBiKi — KiBi’s blog</title>
			<subtitle type="html">iKiBiKi — KiBi’s blog</subtitle>
			<link rel="self" href="http://ikibiki.org//index.atom"/>
			<id>http://ikibiki.org//</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">La grande famille des processus</title>
		<link href="http://linux-attitude.fr/post/la-grande-famille-des-processus"/>
		<id>http://linux-attitude.fr/?p=1000</id>
		<updated>2010-08-30T16:35:45+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;strong&gt;Niveau&lt;/strong&gt; : &lt;img src=&quot;http://linux-attitude.fr/public/Pics/s.gif&quot; alt=&quot;Star&quot; /&gt; &lt;img src=&quot;http://linux-attitude.fr/public/Pics/e.gif&quot; alt=&quot;Empty&quot; /&gt; &lt;img src=&quot;http://linux-attitude.fr/public/Pics/e.gif&quot; alt=&quot;Empty&quot; /&gt; &lt;img src=&quot;http://linux-attitude.fr/public/Pics/e.gif&quot; alt=&quot;Empty&quot; /&gt; &lt;img src=&quot;http://linux-attitude.fr/public/Pics/e.gif&quot; alt=&quot;Empty&quot; /&gt;&lt;br /&gt;
&lt;strong&gt;Résumé&lt;/strong&gt; : /proc/&amp;lt;pid&amp;gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://linux-attitude.fr/post/brutus-processus&quot;&gt;Les processus&lt;/a&gt; comme je l'ai déjà décrit, forment une grande famille.&lt;/p&gt;


&lt;h2&gt;La famille processus&lt;/h2&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;Dans la famille processus je voudrais le père&lt;/h3&gt;


&lt;p&gt;Les processus se reproduisent par fork (&lt;a href=&quot;http://fr.wikipedia.org/wiki/Mitose&quot; hreflang=&quot;fr&quot;&gt;Mitose&lt;/a&gt; en français). Ce qui veut dire qu'à la genèse il n'y avait qu'un processus que nous ne nommerons pas &lt;a href=&quot;http://fr.wikipedia.org/wiki/Adam&quot; hreflang=&quot;fr&quot;&gt;Adam&lt;/a&gt; mais &lt;a href=&quot;http://linux-attitude.fr/post/processus-de-boot&quot;&gt;init&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Tous les processus possèdent un identifiant (pid) ainsi qu'un identifiant de processus parent (ppid) permettant de les repérer dans un arbre généalogique (&lt;a href=&quot;http://linux.die.net/man/1/pstree&quot; hreflang=&quot;en&quot;&gt;pstree&lt;/a&gt;).&lt;/p&gt;


&lt;p&gt;Comment reconnait-on le père du fils lors du fork d'un processus ? Uniquement par le code de retour de la méthode fork qui vaut 0 pour le fils et donne le pid du fils au père. En dehors de cela les 2 processus sont rigoureusement identiques.&lt;/p&gt;


&lt;h3&gt;Dans la famille processus je voudrais la mère&lt;/h3&gt;

&lt;p&gt;Désolé, il n'y a pas de femme chez les processus, la reproduction est asexuée, mais c'est une idée à creuser ...&lt;/p&gt;


&lt;h3&gt;Dans la famille processus je voudrais le fils&lt;/h3&gt;

&lt;p&gt;Lorsqu'un processus forke, en général le père poursuit sa vie comme si de rien n'était, par contre le fils va muter. La mutation génétique chez les processus est bien plus violente que chez les êtres vivants. En effet, le code (l'&lt;a href=&quot;http://fr.wikipedia.org/wiki/Adn&quot; hreflang=&quot;fr&quot;&gt;ADN&lt;/a&gt; en français) est intégralement relu et remplacé depuis un nouveau fichier sur le disque. C'est ce qu'on appelle un &lt;a href=&quot;http://linux.die.net/man/3/exec&quot; hreflang=&quot;en&quot;&gt;exec&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Il existe quelques cas de processus qui ne fonctionnent pas comme ceci, mais qui laissent leur père mourir (ingrats !) et qui prennent leur place. C'est le cas des &lt;a href=&quot;http://fr.wikipedia.org/wiki/Daemon&quot; hreflang=&quot;fr&quot;&gt;démons&lt;/a&gt; (un parricide est-il un démon ?) dont le but est de devenir indépendants (émancipés) et ne plus avoir de problèmes d'adolescence (le tty du père) ou de famille (le &lt;a href=&quot;http://en.wikipedia.org/wiki/Process_group&quot; hreflang=&quot;fr&quot;&gt;groupe de processus&lt;/a&gt;).&lt;/p&gt;


&lt;h3&gt;Dans la famille processus je voudrais le grand-père&lt;/h3&gt;

&lt;p&gt;Lorsqu'un processus meurt, sa dépouille est remise à son père. Elle est essentiellement constituée de son code de retour.&lt;/p&gt;


&lt;p&gt;Lorsque le père est déjà mort, c'est le doyen qui a la charge de récupérer le code de retour, par exemple avec la méthode &lt;a href=&quot;http://linux.die.net/man/2/wait&quot; hreflang=&quot;en&quot;&gt;wait&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;span id=&quot;more-1000&quot;&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;Dans la famille processus je voudrais le zombie&lt;/h3&gt;

&lt;p&gt;Si le père ne s'occupe pas des funérailles du fils bien aimé, celui-ci erre dans les méandres du noyau en attendant que quelqu'un veuille bien l'enterrer.&lt;/p&gt;


&lt;p&gt;C'est ce qu'on appelle un zombie, caractérisé par la lettre Z ou par le mot defunct dans la liste des processus. Il est impossible de tuer un zombie (il est déjà mort). Seul son ascendant le plus proche le peut.&lt;/p&gt;


&lt;p&gt;Heureusement l'ascendant universel, père de tous les processus, j'ai nommé init, prend soin de la dépouille de tous les enfants qui lui sont confiés. Donc si le père d'un zombie meurt, init s'occupera de le faire disparaître.&lt;/p&gt;


&lt;h2&gt;Les non processus&lt;/h2&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;Chez les amis des processus voudrais le thread&lt;/h3&gt;

&lt;p&gt;Le thread n'est pas vraiment un processus, c'est un élément de processus, tout comme la main est un élément du corps. Avoir plusieurs threads permet à un processus de faire plusieurs choses en même temps tout en restant une seule entité. Cela permet par exemple de dédier une main au traitement et un pied à l'affichage (oui on s'y prend souvent comme des pieds pour faire des &lt;a href=&quot;http://ihm09.imag.fr/&quot; hreflang=&quot;fr&quot;&gt;IHM&lt;/a&gt;, sauf certains qui y dédient &lt;a href=&quot;http://johnnylee.net/projects/wii/&quot; hreflang=&quot;en&quot;&gt;la casquette&lt;/a&gt;).&lt;/p&gt;


&lt;h3&gt;Chez les amis des processus je voudrais le binaire&lt;/h3&gt;

&lt;p&gt;Le binaire (ou fichier exécutable) est le modèle du processus, l'ADN si vous préférez. Sans binaire, impossible de créer un processus. Celui-ci est inerte et manipulable aisément.&lt;/p&gt;


&lt;h3&gt;Chez les amis des processus je voudrais la bibliothèque&lt;/h3&gt;

&lt;p&gt;La bibliothèque c'est un bout de code qui peut être réutilisé par des processus, tout comme &lt;a href=&quot;http://fr.wikipedia.org/wiki/Plasmide&quot; hreflang=&quot;fr&quot;&gt;les plasmides &lt;/a&gt;, elles s'intègrent à n'importe quel autre processus pour leur apporter une fonctionnalité donnée.&lt;/p&gt;


&lt;h3&gt;Chez les amis des processus je voudrais le thread noyau&lt;/h3&gt;

&lt;p&gt;Le thread noyau est un cas particulier de thread, il tourne dans l'espace noyau et ne partage donc sa mémoire qu'avec le noyau mais ne rentre dans aucun processus. On devrait les appeler des anges puisque ce sont des être invisibles (ou presque) agissant au compte de dieu (le noyau).&lt;/p&gt;


&lt;h3&gt;Chez les amis des processus je voudrais le core&lt;/h3&gt;

&lt;p&gt;Le core, ou core dump est la version fossilisée d'un processus mort au combat. Lorsqu'un processus meurt il est effacé de la mémoire, mais s'il meurt dans des conditions exceptionnelle, par exemple s'il s'est pris un coup de signal (&lt;a href=&quot;http://linux.die.net/man/1/kill&quot; hreflang=&quot;en&quot;&gt;man kill&lt;/a&gt;) dans la tête et qu'un résineux est à proximité (&lt;a href=&quot;http://linux.die.net/man/1/ulimit&quot; hreflang=&quot;en&quot;&gt;ulimit -c&lt;/a&gt;) on le coule dans l'ambre pour une analyse ultérieure. gdb est un grand ami médecin qui est aussi légiste, il saura vous aider le temps venu.&lt;/p&gt;
	Tags:&lt;a href=&quot;http://linux-attitude.fr/tag/curiosite&quot; rel=&quot;tag&quot; title=&quot;Curiosité&quot;&gt;Curiosité&lt;/a&gt;, &lt;a href=&quot;http://linux-attitude.fr/tag/planet-libre&quot; rel=&quot;tag&quot; title=&quot;planet-libre&quot;&gt;planet-libre&lt;/a&gt;, &lt;a href=&quot;http://linux-attitude.fr/tag/savoir-faire&quot; rel=&quot;tag&quot; title=&quot;Savoir-faire&quot;&gt;Savoir-faire&lt;/a&gt;, &lt;a href=&quot;http://linux-attitude.fr/tag/systeme&quot; rel=&quot;tag&quot; title=&quot;Système&quot;&gt;Système&lt;/a&gt;&lt;br /&gt;</content>
		<author>
			<name>peck</name>
			<uri>http://linux-attitude.fr</uri>
		</author>
		<source>
			<title type="html">Linux Attitude</title>
			<subtitle type="html">Le libre est un état d'esprit</subtitle>
			<link rel="self" href="http://linux-attitude.fr/feed/atom"/>
			<id>http://linux-attitude.fr/feed/atom</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Le NAT sans NAT</title>
		<link href="http://linux-attitude.fr/post/le-nat-sans-nat"/>
		<id>http://linux-attitude.fr/?p=951</id>
		<updated>2010-08-30T16:34:59+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;&lt;strong&gt;Niveau&lt;/strong&gt; : &lt;img src=&quot;http://linux-attitude.fr/public/Pics/s.gif&quot; alt=&quot;Star&quot; /&gt; &lt;img src=&quot;http://linux-attitude.fr/public/Pics/s.gif&quot; alt=&quot;Star&quot; /&gt; &lt;img src=&quot;http://linux-attitude.fr/public/Pics/s.gif&quot; alt=&quot;Star&quot; /&gt; &lt;img src=&quot;http://linux-attitude.fr/public/Pics/s.gif&quot; alt=&quot;Star&quot; /&gt; &lt;img src=&quot;http://linux-attitude.fr/public/Pics/e.gif&quot; alt=&quot;Empty&quot; /&gt;&lt;br /&gt;
&lt;strong&gt;Résumé&lt;/strong&gt; : slirp&lt;/p&gt;


&lt;p&gt;Si vous n'êtes pas admin de la machine sur laquelle vous êtes (université ?), mais que vous voudriez partager votre connexion, par exemple pour une machine virtuelle ou pour des amis qui voudraient emprunter votre IP ... Il vous faut du NAT (a moins que vous vous contentiez d'un simple tunnel).&lt;/p&gt;


&lt;p&gt;&lt;em&gt;Problème&lt;/em&gt; : vous ne pouvez pas le mettre en place puisque vous n'êtes pas admin sur la machine qui partage la connexion. &lt;br /&gt;
&lt;em&gt;Solution&lt;/em&gt; : slirp.&lt;/p&gt;


&lt;p&gt;Hé oui c'est tout simple, slirp décapsule du PPP pour l'injecter dans de une socket normale et donc fait l'équivalent du NAT. Mais avec quelques limitations, on ne peut pas faire passer n'importe quel paquet (genre ping) depuis l'espace utilisateur, malgré tout c'est largement suffisant.&lt;/p&gt;


&lt;h3&gt;Le serveur de NAT (enfin le routeur quoi)&lt;/h3&gt;

&lt;p&gt;Bon c'est pas si simple mais presque.&lt;/p&gt;


&lt;p&gt;Slirp est une commande qui utilise le l'entrée et sortie standard pour communiquer ce qui fait que si on veut l'utiliser à distance il faut le connecter à un &quot;listener&quot;, ici nous allons utiliser socat, mais si vous voulez un tunnel chiffré, utilisez stunnel.&lt;/p&gt;


&lt;p&gt;Donc vous avez besoin de socat et slirp sur la machine où vous êtes simple utilisateur. Si vous ne les avez pas recompilez les vous avez le droit. Si vous n'avez pas de compilateur copiez-lez depuis une autre machine, si cela ne fonctionne pas, recompilez les chez-vous en statique ... enfin vous êtes grands que diable, ne me posez pas cette question !&lt;/p&gt;


&lt;p&gt;Il vous faut un fichier de configuration minimaliste pour slirp (à mettre dans ~/.sliprc) :&lt;/p&gt;
&lt;pre&gt;ppp
asyncmap 0
&lt;/pre&gt;


&lt;p&gt;Puis lancez le service genre sur le port 2000 (fullbolt = pas de limitation de vitesse) :&lt;/p&gt;
&lt;pre&gt;$ socat -s tcp4-listen:2000,fork system:/usr/bin/slirp-fullbolt
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;span id=&quot;more-951&quot;&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;Le client de NAT (enfin le terminux quoi)&lt;/h3&gt;

&lt;p&gt;Ici c'est légèrement plus compliqué. Tout d'abord il faut être root puisque nous allons faire un vpn, donc un réseau, donc une interface et du routage.
Pour cela il nous faut l'autre bout du tunnel (toujours socat dans l'exemple, mais vous pouvez utiliser stunnel pour faire du ssl) et pppd qui est en quelque sorte le client naturel de slirp.&lt;/p&gt;


&lt;p&gt;Petite configuration optimisée de pppd pour correspondre à celle de slirp (à mettre dans /etc/ppp/peers/slirp) :&lt;/p&gt;
&lt;pre&gt;notty 115200
noauth
lcp-echo-interval 0
asyncmap 0
nodefaultroute
nodetach
&lt;/pre&gt;


&lt;p&gt;Et c'est parti on se connecte :&lt;/p&gt;
&lt;pre&gt; 
$ socat tcp-connect:host3.enstb.com:2000 system:&quot;pppd call slirp&quot;
&lt;/pre&gt;


&lt;p&gt;Maintenant nous avons une connexion mais un peu spéciale car slirp a des exigences :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IP : 10.0.2.15&lt;/li&gt;
&lt;li&gt;Réseau : 10.0.2.0/24 (ou autre, il s'en fout)&lt;/li&gt;
&lt;li&gt;Gateway(machine distante) : 10.0.2.2&lt;/li&gt;
&lt;li&gt;IP de commande de slirp : 10.0.2.0 (! une adresse en 0, beware of the netmask !)&lt;/li&gt;
&lt;li&gt;IP spéciale : 10.0.2.1&lt;/li&gt;
&lt;li&gt;+ route directe vers l'ip du host&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et ppd configure le tout pas proprement donc il faut supprimer l'ip qu'il a ajouté. Malheureusement slirp non plus n'est pas très doué en configuration réseau et utilise l'adresse 10.0.2.0 ce qui fait que soit vous utilisez un /16 soit vous vous débrouillez pour que 10.0.2.0 soit correctement routée soit vous n'accédez jamais à l'interface de slirp à distance.&lt;/p&gt;


&lt;p&gt;Choisissons le premier cas, donc pour activer le routage coté client configurez comme indiqué, en live cela donne :&lt;/p&gt;
&lt;pre&gt;$ ip addr del 10.0.2.15 dev ppp0
$ ip addr add 10.0.0.0/16 dev ppp0
$ ip route add default via 10.0.2.2 dev ppp0 # tout ce que vous voulez tout router par là
&lt;/pre&gt;


&lt;p&gt;Et oualà !&lt;/p&gt;


&lt;h3&gt;Forwarding&lt;/h3&gt;

&lt;p&gt;Slirp est configurable dynamiquement, ce qui veut dire qu'un telnet 10.0.2.0 permet d'accéder à une interface d'admin de slirp.&lt;/p&gt;


&lt;p&gt;Les commandes disponibles sont les mêmes que celle qu'on peut mettre dans le fichier de configuration.
L'une de ces commandes est redir qui permet de faire des redirections qu'on appellerait port forwarding sur un routeur NAT.&lt;/p&gt;
&lt;pre&gt;redir [once|time] [udp|tcp] PORT [to] [ADDRESS:]LPORT
&lt;/pre&gt;


&lt;p&gt;Exemple pour permettre l'accès au port ssh local depuis l'extérieur sur le port 2222 :&lt;/p&gt;
&lt;pre&gt;$ telnet 10.0.2.0
redir 2222 22
quit
&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;Mais encore&lt;/h3&gt;

&lt;p&gt;Slirp a bien d'autres usages. Au départ slirp a été inventé pour faire du réseau sur un modem.&lt;/p&gt;


&lt;p&gt;Mais il est aussi intégré à certains autre outils comme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://user-mode-linux.sourceforge.net/old/&quot; hreflang=&quot;en&quot;&gt;uml&lt;/a&gt; : il est possible de définir une interface réseau uml comme étant une interface slirp ce qui vous permet d'avoir une machine virtuelle uml disponible directement sur le réseau local à travers un NAT&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vde.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;vde&lt;/a&gt; : il est possible de définir un lien slirp pour vde ce qui permet tout comme pour uml de mettre en place une certaine forme de NAT derrière un switch virtuel (en général pour un ensemble de vm) sans avoir besoin d'être root&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.colinux.org/&quot; hreflang=&quot;en&quot;&gt;colinux&lt;/a&gt; : colinux intègre aussi slirp pour la même raison&lt;/li&gt;
&lt;/ul&gt;
	Tags:&lt;a href=&quot;http://linux-attitude.fr/tag/planet-libre&quot; rel=&quot;tag&quot; title=&quot;planet-libre&quot;&gt;planet-libre&lt;/a&gt;, &lt;a href=&quot;http://linux-attitude.fr/tag/reseau&quot; rel=&quot;tag&quot; title=&quot;Réseau&quot;&gt;Réseau&lt;/a&gt;, &lt;a href=&quot;http://linux-attitude.fr/tag/routeur&quot; rel=&quot;tag&quot; title=&quot;Routeur&quot;&gt;Routeur&lt;/a&gt;&lt;br /&gt;</content>
		<author>
			<name>peck</name>
			<uri>http://linux-attitude.fr</uri>
		</author>
		<source>
			<title type="html">Linux Attitude</title>
			<subtitle type="html">Le libre est un état d'esprit</subtitle>
			<link rel="self" href="http://linux-attitude.fr/feed/atom"/>
			<id>http://linux-attitude.fr/feed/atom</id>
		</source>
	</entry>

	<entry>
		<title type="html">Mraw?</title>
		<link href="http://ikibiki.org//blog/2010/07/18/Mraw/"/>
		<id>http://ikibiki.org//blog/2010/07/18/Mraw/</id>
		<updated>2010-08-30T10:01:58+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;That’s a recurring question I get asked: &lt;em&gt;What does “mraw” mean?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Over 2 years ago, I changed my mail signature from the traditional:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;--
$FULLNAME
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Mraw,
KiBi.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I became a DD back then, so I put my now-become-my-login-as-well
nickname there. About the “mraw” part, I kind of like felines in
general, and &lt;em&gt;felis catus&lt;/em&gt; in particular. Onomatopœias like “maw” or
“meow” are nice, but that’s even cuter when there’s some purring
happening at the same time, hence the ‘r’ addition in there.&lt;/p&gt;</content>
		<author>
			<name>iKiBiKi — KiBi’s blog</name>
			<uri>http://ikibiki.org//</uri>
		</author>
		<source>
			<title type="html">iKiBiKi — KiBi’s blog</title>
			<subtitle type="html">iKiBiKi — KiBi’s blog</subtitle>
			<link rel="self" href="http://ikibiki.org//index.atom"/>
			<id>http://ikibiki.org//</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr-FR">Problèmes avec l’annuaire</title>
		<link href="http://resel.fr/index.xml?single=20100826"/>
		<id>http://resel.fr/index.xml?single=20100826</id>
		<updated>2010-08-25T22:00:00+00:00</updated>
		<content type="html">Cette semaine, nous avons commencé à avoir des crashs réguliers de notre annuaire (LDAP). Ces crashs ont en particulier fortement perturbé l’accès aux courriels, au Who’s who et à l’inscription qui en dépendent fortement. Nous en avons profité pour migrer notre serveur LDAP sur Debian Lenny et tout devrait être rentré dans l’ordre aujourd’hui.

Veuillez nous excuser pour la gêne occasionnée

Greg, pour l'équipe ResEl.</content>
		<author>
			<name>News ResEl</name>
			<uri>http://resel.fr</uri>
		</author>
		<source>
			<title type="html">Association ResEl</title>
			<subtitle type="html">Actualites au ResEl</subtitle>
			<link rel="self" href="http://resel.fr/news.rss.php"/>
			<id>http://resel.fr</id>
		</source>
	</entry>

	<entry>
		<title type="html">Back soon?</title>
		<link href="http://catwell.info/p/20100817"/>
		<id>tag:catwell.info,2010-08-17:/20100817</id>
		<updated>2010-08-17T17:39:22+00:00</updated>
		<content type="html">&lt;p&gt;I'm still in the Thesis Repulsor Field but on an escape 
trajectory.&lt;/p&gt;

&lt;div class=&quot;center&quot;&gt;&lt;a href=&quot;http://www.phdcomics.com/comics/archive.php?comicid=1354&quot;&gt;&lt;img src=&quot;http://www.phdcomics.com/comics/archive/phd080910s.gif&quot; alt=&quot;PhD Comics&quot; class=&quot;center&quot; title=&quot;The Thesis Repulsor Field&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;Good luck to all CSTE students!&lt;/p&gt;</content>
		<author>
			<name>Pierre Chapuis</name>
			<uri>http://catwell.info</uri>
		</author>
		<source>
			<title type="html">catwell.info</title>
			<link rel="self" href="http://catwell.info/feed/"/>
			<id>tag:catwell.info,2009-09-15:/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr-FR">Mise à jour du ResEl</title>
		<link href="http://resel.fr/index.xml?single=20100730"/>
		<id>http://resel.fr/index.xml?single=20100730</id>
		<updated>2010-07-29T22:00:00+00:00</updated>
		<content type="html">Samedi 31 juillet dans l’après-midi, nous allons mettre à jour notre serveur principal hébergeant les disques durs de nos machines virtuelles. Cette opération devrait durer plusieurs heures. Pendant la durée de l’opération, les services du ResEl (en particulier les courriels et les listes de diffusion) seront indisponibles.

L’accès à Internet sera cependant maintenu avec une coupure de 15 à 30 min, le temps de faire une réplication de notre serveur DNS/DHCP vers 15 heures.

Merci de votre compréhension.

MàJ, le 1er août : la mise à jour s'est correctement passée. Nous avons cependant constaté que certaines VM se bloquaient. Nous essayons de corriger cela.</content>
		<author>
			<name>News ResEl</name>
			<uri>http://resel.fr</uri>
		</author>
		<source>
			<title type="html">Association ResEl</title>
			<subtitle type="html">Actualites au ResEl</subtitle>
			<link rel="self" href="http://resel.fr/news.rss.php"/>
			<id>http://resel.fr</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">Migration Thunderbird 2 -&amp;gt; Thunderbird 3</title>
		<link href="http://blog.guiling.fr/index.php?post/2010/06/22/Migration-Thunderbird-2-Thunderbird-3"/>
		<id>urn:md5:22ff33f70f2b99091a7fa3b14ab372d9</id>
		<updated>2010-06-22T20:26:00+00:00</updated>
		<content type="html">&lt;p&gt;Pour ceux qui comme moi, se font avoir par aptitude et qui n'ont eu d'autre choix que de migrer vers Thunderbird 3, voilà une manip qui permet de bypasser la demande de mot de passe général :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;outils -&amp;gt; console d'erreur&lt;/li&gt;
&lt;li&gt;openDialog(&quot;chrome://pippki/content/resetpassword.xul&quot;)&lt;/li&gt;
&lt;li&gt;valider&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ensuite dans les préférences &amp;gt; sécurité &amp;gt; mot de passe, vous pouvez décocher &quot;utiliser un mot de passe principal&quot;.&lt;/p&gt;


&lt;p&gt;Par contre, il semble que si un user veut quand même un mot de passe, un bug fait que la popup s'ouvre plus d'une fois pour le demander...&lt;/p&gt;</content>
		<author>
			<name>guiling</name>
			<uri>http://blog.guiling.fr/index.php</uri>
		</author>
		<source>
			<title type="html">Guiling's blog</title>
			<link rel="self" href="http://blog.guiling.fr/index.php?feed/rss2"/>
			<id>http://blog.guiling.fr/index.php</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Des nouvelles fonctions oui, et un nouveau bouton ?</title>
		<link href="http://blog.jeb.be/2010/06/22/des-nouvelles-fonctions-oui-et-un-nouveau-bouton/"/>
		<id>http://blog.jeb.be/?p=402</id>
		<updated>2010-06-22T19:31:30+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Vous n’avez surement pas raté l’annonce de l’&lt;a href=&quot;http://www.apple.com/iphone/&quot; class=&quot;ubernym uttJustLink&quot;&gt;iPhone&lt;/a&gt; 4 et d’iOS 4 qui apporte &lt;a href=&quot;http://www.igeneration.fr/iphone/presentation-detaillee-d-ios-4-11856&quot;&gt;bon nombre de fonctionnalités&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il va donc falloir encore plus tapoter sur l’écran et les rare boutons de l’&lt;a href=&quot;http://www.apple.com/iphone/&quot; class=&quot;ubernym uttJustLink&quot;&gt;iPhone&lt;/a&gt; pour en profiter pleinement.&lt;/p&gt;
&lt;p&gt;Et sinon pour l’&lt;a href=&quot;http://www.apple.com/iphone/&quot; class=&quot;ubernym uttJustLink&quot;&gt;iPhone&lt;/a&gt; 5 on aura le droit à une bouton en plus pour éviter d’avoir tapoter, double cliquer, triple tapoter et encore cliquer pour pouvoir faire quelque chose ? &lt;img src=&quot;http://blog.jeb.be/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;</content>
		<author>
			<name>Jeb</name>
			<uri>http://blog.jeb.be</uri>
		</author>
		<source>
			<title type="html">Quoi de 9 ?</title>
			<subtitle type="html">blog.jeb.be</subtitle>
			<link rel="self" href="http://blog.jeb.be/feed/"/>
			<id>http://blog.jeb.be</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">De la météo...</title>
		<link href="http://flo.fourcot.fr/index.php?post/2010/06/04/De-la-m%C3%A9t%C3%A9o..."/>
		<id>urn:md5:1f4bf6dc25b2b3839ad958ce53ae3941</id>
		<updated>2010-06-04T15:34:00+00:00</updated>
		<content type="html" xml:lang="fr">&lt;p&gt;Juste un chiffre : 99,4 heures. Le temps d'ensoleillement à Dresde au mois de mai de cette année. C'est moins de la moitié de la moyenne (224,7h en 2009 et 263,7h en 2008 par exemple). Il y eu 9 jours sans aucun soleil sur ce mois. C'est le record minimal du nombre d'heures depuis au moins 1976 (j'ai pas les données pour plus tôt...). Et une pluie six fois supérieure à ce que j'avais connu en mai 2008 en arrivant...&lt;/p&gt;


&lt;p&gt;En résumé : un bon temps pourri, espérons que le mois de juin soit plus clément !&lt;/p&gt;</content>
		<author>
			<name>flo</name>
			<uri>http://flo.fourcot.fr/index.php</uri>
		</author>
		<source>
			<title type="html">De Brest à Dresde, en passant par Rennes - Tag - ResEl</title>
			<link rel="self" href="http://flo.fourcot.fr/index.php?feed/tag/ResEl/atom"/>
			<id>urn:md5:7340b4f5155eb7316e9bda115de854c0</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">&quot;Change end-of-line format for dos-mac-unix&quot;</title>
		<link href="http://blog.guiling.fr/index.php?post/2010/05/15/%22Change-end-of-line-format-for-dos-mac-unix%22"/>
		<id>urn:md5:d8a808ddae6def58f6897c52d184b46f</id>
		<updated>2010-05-15T13:10:00+00:00</updated>
		<content type="html">&lt;p&gt;Aujourd'hui, je suis tombé sur un tweet d'&lt;a href=&quot;http://amandine.aupetit.info/&quot;&gt;Amandine&lt;/a&gt; :&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;:%s/\ r//g to remove all those nasty ^M from a file, or :%s/\ r$//g for only at the end of a line.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;La source est ici : &lt;a href=&quot;http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix&quot;&gt;http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix&lt;/a&gt;, j'espère que ça vous servira autant qu'à moi !&lt;/p&gt;</content>
		<author>
			<name>guiling</name>
			<uri>http://blog.guiling.fr/index.php</uri>
		</author>
		<source>
			<title type="html">Guiling's blog</title>
			<link rel="self" href="http://blog.guiling.fr/index.php?feed/rss2"/>
			<id>http://blog.guiling.fr/index.php</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">Blogilo – éditeur de blog offline</title>
		<link href="http://blog.olafbox.info/2010/05/blogilo-editeur-de-blog-offline/"/>
		<id>http://blog.olafbox.info/2010/05/blogilo-editeur-de-blog-offline/</id>
		<updated>2010-05-06T16:31:26+00:00</updated>
		<content type="html">Ce post a pour but de tester blogilo, un outil de la suite KDE qui permet d’éditer ses billets de blog. Apparemment ça marche bien et c’est plus confortable que de travailler uniquement en ligne.
Par contre, l’insertion d’image n’est pas encore bien au point apparemment : ça n’offre pas encore toutes les possibilités de l’interface [...]</content>
		<author>
			<name>Olaf'</name>
			<uri>http://blog.olafbox.info</uri>
		</author>
		<source>
			<title type="html">Olaf's room » ResEl</title>
			<subtitle type="html">About Life...</subtitle>
			<link rel="self" href="http://blog.olafbox.info/category/ResEl/feed/"/>
			<id>http://blog.olafbox.info</id>
		</source>
	</entry>

	<entry>
		<title type="html">Away</title>
		<link href="http://catwell.info/p/20100426"/>
		<id>tag:catwell.info,2010-04-26:/20100426</id>
		<updated>2010-04-26T21:30:16+00:00</updated>
		<content type="html">&lt;p&gt;Alors qu'un &lt;a href=&quot;http://developers.facebook.es/docs/opengraph&quot;&gt;graphe&lt;/a&gt; moins 
ouvert que son nom l'indique laisse planer une ombre inquiétante sur la 
Toile et que &lt;a href=&quot;http://theflashblog.com/?p=1888&quot;&gt;l'air est 
électrique&lt;/a&gt; entre deux géants naguère alliés, cela fait bien 
longtemps que vous n'avez pas eu de nouvelles de votre serviteur. Se 
terrerait-il apeuré en attendant que l'orage passe ?&lt;/p&gt;

&lt;p&gt;Non, il se trouve simplement que je suis un peu dans &lt;a href=&quot;http://aws.amazon.com/&quot;&gt;les nuages&lt;/a&gt; en ce moment et que j'ai 
fait le choix de dédier le temps libre qu'il me reste à des choses plus 
drôles que relater les tristes nouvelles du Réseau et du monde 
Libre.&lt;/p&gt;

&lt;p&gt;En clair, ne vous attendez pas à une déferlante d'articles dans les 
mois à venir. En plus de ça, Arch Lua, qui n'a jamais vraiment été 
lancé, est enterré jusqu'à nouvel ordre, à moins que quelqu'un ne 
propose spontanément d'en prendre les rennes.&lt;/p&gt;

&lt;p&gt;Moins drôle : j'ai appris le &lt;a href=&quot;http://chakra-project.org/news/index.php?/archives/54-Sad-news-we-lost-one-of-our-own.html&quot;&gt;décès 
de funkyou&lt;/a&gt;, avec qui j'avais eu l'occasion de discuter par email et 
IRC comme nombre d'Archers. RIP et bravo pour le travail accompli.&lt;/p&gt;</content>
		<author>
			<name>Pierre Chapuis</name>
			<uri>http://catwell.info</uri>
		</author>
		<source>
			<title type="html">catwell.info</title>
			<link rel="self" href="http://catwell.info/feed/"/>
			<id>tag:catwell.info,2009-09-15:/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">De retour à Dresde</title>
		<link href="http://flo.fourcot.fr/index.php?post/2010/04/24/De-retour-%C3%A0-Dresde"/>
		<id>urn:md5:9c3750095a666b29d3f0e75ff5273d26</id>
		<updated>2010-04-24T11:58:00+00:00</updated>
		<content type="html" xml:lang="fr">&lt;p&gt;C'est de l'information pas très fraîche, un peu comme du poisson de Bretagne qui arriverait en Saxe pendant qu'un nuage de cendre se promène sur l'Europe. Mais voilà, je suis de retour à Dresde depuis la toute fin mars. Après six mois de vie en collocation à Rennes pour suivre ma dernière année de formation d'ingénieur, je fais donc désormais mon stage de fin d'étude à la faculté technologique de Dresde.&lt;/p&gt;


&lt;p&gt;Le sujet de mon stage est l'amélioration de &lt;a href=&quot;http://anon.inf.tu-dresden.de/index_en.html&quot;&gt;JAP&lt;/a&gt;, j'en avais déjà parlé un peu dans un &lt;a href=&quot;http://flo.fourcot.fr/index.php?post/2009/05/20/L-anonymat-n-est-pas-un-crime&quot;&gt;précédent billet&lt;/a&gt;. Actuellement ce logiciel fonctionne très bien et garanti une navigation anonyme sur internet. Mais il est malheureusement trop facile à censurer. L'installation de serveurs de Mix est très coûteuse, et n'est donc pas envisageable à grande échelle. Un censeur peut bloquer les IP de ces serveurs, et c'est la fin du système. C'est là qu'intervient mon stage, permettre un système anti-censure efficace (par utilisation de relais en P2P, en faisant de l'IP over Skype, et toutes les autres solutions étranges que l'on pourrait imaginer...). L'objectif est d'avoir suffisamment de solutions pour forcer la censure à bloquer l'ensemble de l'internet, ou à ne rien bloquer pour quelqu'un qui utilise le logiciel.&lt;/p&gt;


&lt;p&gt;Au niveau des conditions de travails, c'est plutôt cool. Je fais ce que je veux sur mon ordinateur, j'ai deux grands écrans, deux adresses IP publiques rien que pour moi et aucun filtrage en flux sortants. Et plus important, au niveau humain, ça se passe très bien avec mon chef. Donc je suis très content d'avoir choisi ce stage &lt;img src=&quot;http://flo.fourcot.fr/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Sans parler du logement qui sera le sujet d'un prochain billet, je suis content d'en avoir terminé la semaine dernière avec tous les points administratifs. L'inscription à la faculté a été un peu laborieuse (mais bon, c'est ça d'être un étudiant en dehors d'un accord, il y a plus de papiers à fournir que pour un erasmus...). En revanche, l'inscription à la ville à été des plus simples, J'avais de toute façon oublié de me désinscrire en sortant donc ils ont juste effectué un changement d'adresse. Et maintenant que tout ça est fait, je sais que je vais être tranquille pour les six mois à venir.&lt;/p&gt;</content>
		<author>
			<name>flo</name>
			<uri>http://flo.fourcot.fr/index.php</uri>
		</author>
		<source>
			<title type="html">De Brest à Dresde, en passant par Rennes - Tag - ResEl</title>
			<link rel="self" href="http://flo.fourcot.fr/index.php?feed/tag/ResEl/atom"/>
			<id>urn:md5:7340b4f5155eb7316e9bda115de854c0</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Retour aux sources</title>
		<link href="http://blog.jeb.be/2010/03/02/retour-aux-sources/"/>
		<id>http://blog.jeb.be/?p=400</id>
		<updated>2010-03-01T22:51:05+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Il y a &lt;a href=&quot;http://blog.jeb.be/2007/09/17/quel-avenir-pour-internet/&quot;&gt;longtemps&lt;/a&gt; que je pense que l’ordinateur tel que nous le connaissons n’a pas d’avenir chez la plupart des particuliers.&lt;/p&gt;
&lt;p&gt;Si je pensai que Google était le mieux placer pour entrer dans ce concept avec une &lt;a href=&quot;http://blog.jeb.be/2008/07/14/google-box/&quot;&gt;Google Box&lt;/a&gt;, on en a toujours pas vu le jour, et même si ils ont annoncé &lt;a href=&quot;http://blog.jeb.be/2009/07/08/google-os-cest-presque-fait/&quot;&gt;Chrome OS&lt;/a&gt;, il tarde à pointer le bout de son nez.&lt;/p&gt;
&lt;p&gt;Au final c’est peut-être Apple, avec l’iPad qui va rafler la mise. Un navigateur pour surfer, un client email pour ceux qui n’utiliserait pas un webmail, et la possibilité de lancer des applications locales avec la possibilité de synchroniser les données avec la même application version “poche” (téléphone portable).&lt;/p&gt;
&lt;p&gt;On se retrouve avec ni plus ni moins avec un écran “intelligent” qui ne sert qu’a afficher des données qui sont “quelque part”. Ca doit surement rappeler les années 70 à certain…&lt;/p&gt;</content>
		<author>
			<name>Jeb</name>
			<uri>http://blog.jeb.be</uri>
		</author>
		<source>
			<title type="html">Quoi de 9 ?</title>
			<subtitle type="html">blog.jeb.be</subtitle>
			<link rel="self" href="http://blog.jeb.be/feed/"/>
			<id>http://blog.jeb.be</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">Le retour des bains d'Hercule</title>
		<link href="http://norgz.over-blog.com/article-le-retour-des-bains-d-hercule-43732930.html"/>
		<id>http://norgz.over-blog.com/article-le-retour-des-bains-d-hercule-43732930.html</id>
		<updated>2010-01-27T11:06:21+00:00</updated>
		<content type="html" xml:lang="fr">Le week-end dernier petit (re)tour à Baile Herculane... Quelques photos ici, avec la neige ça change pas mal de la dernière fois !&lt;br /&gt; &lt;br /&gt; Cette fois-ci on a été courageux et on a pris un bain dans la forêt : se changer les pieds sur la glace, -8 dehors, 36 à l'intérieur, c'est vivifiant ! Au final ça[...]</content>
		<author>
			<name>Elie Roux</name>
			<uri></uri>
		</author>
		<source>
			<title type="html">norgz</title>
			<link rel="self" href="http://norgz.over-blog.com/atom.php"/>
			<id>http://norgz.over-blog.com/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">Soundtracks</title>
		<link href="http://www.shiyan.fr/blog/index.php/post/2010/01/19/Soundtracks"/>
		<id>urn:md5:ff3d870dd262b79e22705444abd0a659</id>
		<updated>2010-01-19T00:40:50+00:00</updated>
		<content type="html" xml:lang="fr">&lt;p&gt;Quand j'écoute Sound of Silver de LCD Soundsystem, je me revois marcher au crépuscule, dans le parc devant la gare de Zagreb. Parce qu'en déambulant là, en attendant de reprendre le train pour la destination suivante, c'était l'album qui tournait dans (feu) iPied.&lt;/p&gt;


&lt;p&gt;Ton invitation, de Louise Attaque, c'est avant tout Joseph, dans ce car à Taipeh en 1998, alors qu'on demande à sa cousine Florence, si dans ses écouteurs, c'était pas un peu fort. « mais c'est seulement à 8 !».&lt;/p&gt;


&lt;p&gt;Alone again or, je l'ai dans mes oreilles, alors que je descends à vélo, à fond, de la colline près de Håga, derrière Flogsta (je sais que c'est mal de faire du vélo avec les écouteurs).&lt;/p&gt;


&lt;p&gt;Is This It, les Strokes, ce n'est pas pour moi la pub pour EDF. Mais c'est scruter mon radio réveil, en 2001, pour écouter leur concert organisé par Oui FM, où j'ai failli aller, mais finalement non. J'aurais aimé.&lt;/p&gt;


&lt;p&gt;Skeletal Lamping de Of Montreal, c'est plein de souvenirs, en concerts, ce sont des écoutes en boucle 24 fois de suite. Mais j'ai commencé dans le train entre Uppsala et Stockholm, en septembre 2008, quand je me demandais si c'était bien raisonnable de l'écouter alors que l'album n'était pas officiellement sorti, et que oh, finalement si.&lt;/p&gt;


&lt;p&gt;Jean-Jacques Goldman, je suis allongé sur l'herbe, devant l'immeuble d'en face, alors que Flogsta s'est un peu vidé, ces derniers jours. Et qu'à ce moment, ça me rappelle quand on le chantait à l'école primaire. À nos actes manqués.&lt;/p&gt;


&lt;p&gt;Et Kings of Convenience. Je n'arrive plus à les écouter. J'aimerais bien que ça revienne, j'aime bien leur musique.&lt;/p&gt;</content>
		<author>
			<name>Alexandre</name>
			<uri>http://www.shiyan.fr/blog/index.php/</uri>
		</author>
		<source>
			<title type="html">.shiyan</title>
			<subtitle type="html">Voyages en Scandinavie, concerts indie, vie étudiante à Uppsala, geekeries, photos, rien et tout.</subtitle>
			<link rel="self" href="http://www.shiyan.fr/blog/index.php/feed/atom"/>
			<id>urn:md5:edd054eac1c67b98ff7a8a09a82a8dd3</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">La ville blanche</title>
		<link href="http://norgz.over-blog.com/article-la-ville-blanche-42736999.html"/>
		<id>http://norgz.over-blog.com/article-la-ville-blanche-42736999.html</id>
		<updated>2010-01-11T15:23:47+00:00</updated>
		<content type="html" xml:lang="fr">Ce week-end, petit tour chez nos amis slaves, à Belgrade (beo = blanc, grad = ville)... Première surprise : ça roule vraiment mieux qu'en Roumanie, et les gens sont étonamment disciplinés : 60 km/h dans les villages et 80 partout ailleurs (même sur les autoroutes), des limitations très bizarres[...]</content>
		<author>
			<name>Elie Roux</name>
			<uri></uri>
		</author>
		<source>
			<title type="html">norgz</title>
			<link rel="self" href="http://norgz.over-blog.com/atom.php"/>
			<id>http://norgz.over-blog.com/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">Happy New Year !**</title>
		<link href="http://www.villaren.fr/blog/index.php/post/2010/01/06/Happy-New-Year-%21%2A"/>
		<id>urn:md5:41244f72f9f107e7b5e7126caddfad90</id>
		<updated>2010-01-06T23:30:00+00:00</updated>
		<content type="html">&lt;p&gt;Voilà 3 ans, j'ouvrais ce blog pour raconter mes aventures en deuxième année à Telecom Bretagne. 
Voilà 2 ans, je vous souhaitais la bonne année depuis la Californie (enfin, j'étais dans l'avion pour la grande partie du 1er janvier 2008 mais c'est le geste qui compte).
Voilà 1 an, dans une tentative de raviver ce blog (avec un échec cuisant si vous... &lt;em&gt;&lt;a href=&quot;http://www.villaren.fr/blog/index.php/post/2010/01/06/Happy-New-Year-%21%2A&quot;&gt;Lire&lt;/a&gt;&lt;/em&gt;&lt;a href=&quot;http://www.villaren.fr/blog/index.php/post/2010/01/06/Happy-New-Year-%21%2A&quot;&gt; Happy New Year !**&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Thomas Villaren</name>
			<uri>http://www.villaren.fr/blog/index.php/</uri>
		</author>
		<source>
			<title type="html">Un Teubreux au soleil</title>
			<subtitle type="html">Après 6 mois de vie à Télécom Bretagne, ce blog me permet de partager mon expérience d'élève ingénieur en année de césure en Californie !</subtitle>
			<link rel="self" href="http://www.villaren.fr/blog/index.php/feed/rss2"/>
			<id>http://www.villaren.fr/blog/index.php/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">Compétition</title>
		<link href="http://www.shiyan.fr/blog/index.php/post/2010/01/02/Comp%C3%A9tition"/>
		<id>urn:md5:b0e114d887bb015e36a19e7e9d05dd2e</id>
		<updated>2010-01-02T15:27:11+00:00</updated>
		<content type="html" xml:lang="fr">&lt;p&gt;&lt;img src=&quot;http://www.shiyan.fr/blog/public/Canada-0912/IMG_0492.JPG&quot; alt=&quot;photo floue, rue Bleury&quot; style=&quot;display: block; margin: 0 auto;&quot; title=&quot;Rue Bleury, janv. 2010&quot; /&gt;
&lt;em&gt;Rue Bleury, Montreal&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;L'autre jour, je suis allé au supermarché du coin acheter des carottes avec des fanes. C'était le 31, en fin d'après-midi, et forcément blindé de monde à la caisse.
La caisse à ma droite est une caisse pour laquelle priorité est donnée aux «femmes enceintes, jeunes mamans, handicapés et invalides». Il faut donc les laisser passer. En vrai, ça n'arrive quasiment jamais. Mais là si.&lt;/p&gt;


&lt;p&gt;La file fait la dizaine de personnes. Une maman arrive, un nourrisson dans les bras, un gosse de 3 ans lui tenant la main. Regards désolés, excuses, elle passe devant 5 ou 6 personnes. Normal, ils étaient conscients du panneau de priorité à droite.&lt;/p&gt;


&lt;p&gt;3 minutes plus tard. Un vieille femme accompagne un homme en fauteuil roulant, à la motricité et l'élocution réduites. Le femme, très fort, «pardon, j'ai priorité, laissez le passer ». De manière très élégante. Elle arrive à hauteur de la maman avec le nourrisson et le gosse de 3 ans lui tenant la main. «laissez le passer madame». Regard désolé, coup d'œil vers le bébé, regard désolé. She wins.&lt;/p&gt;</content>
		<author>
			<name>Alexandre</name>
			<uri>http://www.shiyan.fr/blog/index.php/</uri>
		</author>
		<source>
			<title type="html">.shiyan</title>
			<subtitle type="html">Voyages en Scandinavie, concerts indie, vie étudiante à Uppsala, geekeries, photos, rien et tout.</subtitle>
			<link rel="self" href="http://www.shiyan.fr/blog/index.php/feed/atom"/>
			<id>urn:md5:edd054eac1c67b98ff7a8a09a82a8dd3</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Trend / Prediction with RRDtool</title>
		<link href="http://hints.jeb.be/2009/12/04/trend-prediction-with-rrdtool/"/>
		<id>http://hints.jeb.be/?p=58</id>
		<updated>2009-12-04T20:33:12+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;I’ve not used &lt;a href=&quot;http://oss.oetiker.ch/rrdtool/&quot;&gt;RRDtool&lt;/a&gt; for a while and put back my attention on it few weeks ago. I found out that lots of new cool stuff are avalaible, like &lt;a href=&quot;http://oss.oetiker.ch/rrdtool/doc/rrdgraph_rpn.en.html&quot;&gt;LSLSLOPE, LSLINT&lt;/a&gt;. These function return the parameters of the Least Squares Line (y = ax +b) approximating a dataset (LSLSLOPE return a, LSLINT return b).&lt;br /&gt;
This is interesting because with the function approximating your data you can graph a prediction of future data. Of course a Least Squares Line function will work best to approximate a dataset that tend to grow or shrink (like filesystem usage, memory usage, …) but not for data like temperature. I would say that if your data can be expressed in a percentage, an Least Squares Line can be fine. For data not tending to grow or shrink rrdtool provide some other function like &lt;a href=&quot;http://oss.oetiker.ch/rrdtool/doc/rrdgraph_rpn.en.html&quot;&gt;TREND and PREDICT&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I will show how to use LSLSLOPE and LSLINT taking memory usage of a device as an example. My exemple will produce a graph like the following :&lt;br /&gt;
&lt;img src=&quot;http://hints.jeb.be/wp-content/uploads/2009/11/MemoryTrend.png&quot; alt=&quot;MemoryTrend&quot; class=&quot;alignnone size-full wp-image-59&quot; title=&quot;MemoryTrend&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As you see, the graph show trend using two Least Squares Line function, one generated from the full dataset (dataset is starting 24 Oct 2009) and one generated only from last week data. Projection on time axis is done from 90% to 100% of memory usage and the date resulting of calculation for 90% and 100% of usage is displayed. I’ve seen lots of question asking how to do this but did not found any answer, so I hope that my example will provide an answer.&lt;/p&gt;
&lt;p&gt;Here is the perl code I’m using to generate this graph. There is no Perl specific code, so it can be converted to a normal rrdtool command.&lt;/p&gt;
&lt;pre&gt;#! /usr/bin/perl
use RRDs;

$rrd_file = 'MEMORY.rrd';

RRDs::graph &quot;MEMORY_Trend.png&quot;,
'--start', &quot;10/24/2009&quot;,
'--end', &quot;12/31/2009 00:00am&quot;,
'--title', &quot;Memory Usage&quot;,
'--interlace', '--width=620', '--height=200',
&quot;--color&quot;,&quot;ARROW#009900&quot;,
'--vertical-label', &quot;Memory used (%)&quot;,
'--lower-limit', '0',
'--upper-limit', '100',
'--border','0',
'--rigid',

&quot;DEF:used1=$rrd_file:used:AVERAGE&quot;,
&quot;DEF:used2=$rrd_file:used:AVERAGE:start=10/24/2009&quot;,
&quot;DEF:used3=$rrd_file:used:AVERAGE:start=-1w&quot;,
&quot;DEF:used4=$rrd_file:used:AVERAGE:start=-2w&quot;,
&quot;DEF:used5=$rrd_file:used:AVERAGE:start=-4w&quot;,
&quot;DEF:free1=$rrd_file:free:AVERAGE&quot;,
&quot;DEF:free2=$rrd_file:free:AVERAGE:start=10/24/2009&quot;,
&quot;DEF:free3=$rrd_file:free:AVERAGE:start=-1w&quot;,
&quot;DEF:free4=$rrd_file:free:AVERAGE:start=-2w&quot;,
&quot;DEF:free5=$rrd_file:free:AVERAGE:start=-4w&quot;,

&quot;CDEF:pused1=used1,100,*,used1,free1,+,/&quot;,
&quot;CDEF:pused2=used2,100,*,used2,free2,+,/&quot;,
&quot;CDEF:pused3=used3,100,*,used3,free3,+,/&quot;,
&quot;CDEF:pused4=used4,100,*,used4,free4,+,/&quot;,
&quot;CDEF:pused5=used5,100,*,used5,free5,+,/&quot;,

&quot;HRULE:100#FF000044&quot;,
&quot;HRULE:99.5#FF000044&quot;,
&quot;HRULE:99#FF000044&quot;,
&quot;HRULE:98.5#FF000044&quot;,
&quot;HRULE:98#FF000044&quot;,
&quot;HRULE:97.5#FF000044&quot;,
&quot;HRULE:97#FF000044&quot;,
&quot;HRULE:96.5#FF000044&quot;,
&quot;HRULE:96#FF000044&quot;,
&quot;HRULE:95.5#FF000044&quot;,
&quot;HRULE:95#FF000044&quot;,
&quot;HRULE:94.5#FF000022&quot;,
&quot;HRULE:94#FF000022&quot;,
&quot;HRULE:93.5#FF000022&quot;,
&quot;HRULE:93#FF000022&quot;,
&quot;HRULE:92.5#FF000022&quot;,
&quot;HRULE:92#FF000022&quot;,
&quot;HRULE:91.5#FF000022&quot;,
&quot;HRULE:91#FF000022&quot;,
&quot;HRULE:90.5#FF000022&quot;,
&quot;HRULE:90#FF000022&quot;,

&quot;COMMENT:                         Now          Min             Avg             Max\\n&quot;,
&quot;AREA:pused1#00880077:Memory Used&quot;,
'GPRINT:pused1:LAST:%12.0lf%s',
'GPRINT:pused1:MIN:%10.0lf%s',
'GPRINT:pused1:AVERAGE:%13.0lf%s',
'GPRINT:pused1:MAX:%13.0lf%s' . &quot;\\n&quot;,
&quot;COMMENT: \\n&quot;,

'VDEF:D2=pused2,LSLSLOPE',
'VDEF:H2=pused2,LSLINT',
'CDEF:avg2=pused2,POP,D2,COUNT,*,H2,+',
'CDEF:abc2=avg2,90,100,LIMIT',
'VDEF:minabc2=abc2,FIRST',
'VDEF:maxabc2=abc2,LAST',

'VDEF:D3=pused3,LSLSLOPE',
'VDEF:H3=pused3,LSLINT',
'CDEF:avg3=pused3,POP,D3,COUNT,*,H3,+',
'CDEF:abc3=avg3,90,100,LIMIT',
'VDEF:minabc3=abc3,FIRST',
'VDEF:maxabc3=abc3,LAST',

&quot;AREA:abc2#FFBB0077&quot;,
&quot;AREA:abc3#0077FF77&quot;,
&quot;LINE2:abc2#FFBB00&quot;,
&quot;LINE2:abc3#0077FF&quot;,

&quot;LINE1:avg2#FFBB00:Trend since 24 Oct 2009                      :dashes=10&quot;,
&quot;LINE1:avg3#0077FF:Trend since 1 week\\n:dashes=10&quot;,
&quot;GPRINT:minabc2:  Reach  90% @ %c :strftime&quot;,
&quot;GPRINT:minabc3:  Reach  90% @ %c \\n:strftime&quot;,
&quot;GPRINT:maxabc2:  Reach 100% @ %c :strftime&quot;,
&quot;GPRINT:maxabc3:  Reach 100% @ %c \\n:strftime&quot;,

;

my $ERR=RRDs::error;
die &quot;ERROR : $ERR&quot; if $ERR;&lt;/pre&gt;</content>
		<author>
			<name>Jeb</name>
			<uri>http://hints.jeb.be</uri>
		</author>
		<source>
			<title type="html">Piece of Unix Hints</title>
			<subtitle type="html">hints.jeb.be</subtitle>
			<link rel="self" href="http://hints.jeb.be/feed/"/>
			<id>http://hints.jeb.be</id>
		</source>
	</entry>

	<entry>
		<title type="html">New Addiction</title>
		<link href="http://jeremie.famille-corbier.net//blog/20091122-15h14-new_addiction.html"/>
		<id>http://jeremie.famille-corbier.net//blog/20091122-15h14-new_addiction.html</id>
		<updated>2009-11-22T14:28:50+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;With work taking most of our time lately, my girlfriend and I needed to find as
many ways as possible to change our minds once we were back home.  This is how
we found a real enjoyable online RPG called
&lt;a href=&quot;http://www.nodiatis.com/?uKsWwmY&quot;&gt;Nodiatis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The game has reached quite a high level of maturity.  There is a large community
of players and the game allows a great deal of different characters' builds
ranging from the basic but very efficient warrior to the more difficult to play
but, in my opinion, more interesting to play spell caster.&lt;/p&gt;

&lt;p&gt;With as many as 26 classes and a whole load of different skills, this is one of
the richest web-based online RPG we have ever played.&lt;/p&gt;</content>
		<author>
			<name>Jérémie Corbier's Scratchpad</name>
			<uri>http://jeremie.famille-corbier.net//blog.html</uri>
		</author>
		<source>
			<title type="html">blog</title>
			<subtitle type="html">Jérémie Corbier's Scratchpad</subtitle>
			<link rel="self" href="http://jeremie.famille-corbier.net//blog.atom"/>
			<id>http://jeremie.famille-corbier.net//blog.html</id>
		</source>
	</entry>

	<entry>
		<title type="html">GPG Key Transition</title>
		<link href="http://jeremie.famille-corbier.net//blog/20091117-17h26-gpg_key_transition.html"/>
		<id>http://jeremie.famille-corbier.net//blog/20091117-17h26-gpg_key_transition.html</id>
		<updated>2009-11-17T16:34:11+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Ok...  Even though I am extremely busy and have had very little time to do
anything Debian-related lately, I guess I'll have to do this one day or another,
so here it is.&lt;/p&gt;

&lt;p&gt;I created a new GPG key which I am transitionning to and I have prepared a
transition &lt;a href=&quot;http://jeremie.famille-corbier.net/data/key-transition&quot;&gt;document&lt;/a&gt;
signed by both keys.&lt;/p&gt;</content>
		<author>
			<name>Jérémie Corbier's Scratchpad</name>
			<uri>http://jeremie.famille-corbier.net//blog.html</uri>
		</author>
		<source>
			<title type="html">blog</title>
			<subtitle type="html">Jérémie Corbier's Scratchpad</subtitle>
			<link rel="self" href="http://jeremie.famille-corbier.net//blog.atom"/>
			<id>http://jeremie.famille-corbier.net//blog.html</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">Pas de nouvelle, bonne nouvelle ?</title>
		<link href="http://www.villaren.fr/blog/index.php/post/2009/11/04/Pas-de-nouvelle%2C-bonne-nouvelle"/>
		<id>urn:md5:ebb6925d8a0d3e2f5ddda38eff64d27d</id>
		<updated>2009-11-04T22:07:00+00:00</updated>
		<content type="html">&lt;p&gt;Presque 3 semaines sans nouvelles sur ce blog, une petite baisse de motivation et pourtant, ce n'est pas les choses qui manquent à raconter.
En effet, nous avons terminé notre voyage avec Matt (et mes parents pour une partie), les photos et le compte rendu de notre tentative d'ascension du Mont Whitney, le sommet des États-Unis contiguës, sont... &lt;em&gt;&lt;a href=&quot;http://www.villaren.fr/blog/index.php/post/2009/11/04/Pas-de-nouvelle%2C-bonne-nouvelle&quot;&gt;Lire&lt;/a&gt;&lt;/em&gt;&lt;a href=&quot;http://www.villaren.fr/blog/index.php/post/2009/11/04/Pas-de-nouvelle%2C-bonne-nouvelle&quot;&gt; Pas de nouvelle, bonne nouvelle ?&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Thomas Villaren</name>
			<uri>http://www.villaren.fr/blog/index.php/</uri>
		</author>
		<source>
			<title type="html">Un Teubreux au soleil</title>
			<subtitle type="html">Après 6 mois de vie à Télécom Bretagne, ce blog me permet de partager mon expérience d'élève ingénieur en année de césure en Californie !</subtitle>
			<link rel="self" href="http://www.villaren.fr/blog/index.php/feed/rss2"/>
			<id>http://www.villaren.fr/blog/index.php/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">L'île des pins</title>
		<link href="http://geekou.guiling.fr/index.php?post/2009/09/27/L-%C3%AEle-des-pins"/>
		<id>urn:md5:4d4a42503fffab874a1ea001a703ec04</id>
		<updated>2009-10-04T12:23:00+00:00</updated>
		<content type="html" xml:lang="fr">&lt;p&gt;Samedi dernier (il y a donc une semaine), Nico, Alexis &amp;amp; moi même sommes allés sur l'île des pins, une île se trouvant au sud de la Nouvelle Calédonie.Après un voyage sans problème de tangage intensif ni de perte de lunettes (...), nous sortons du bateau pour découvrir un magnifique ciel bleu et une plage de sable blanc qui brûle les yeux. L'eau y... &lt;em&gt;&lt;a href=&quot;http://geekou.guiling.fr/index.php?post/2009/09/27/L-%C3%AEle-des-pins&quot;&gt;Lire&lt;/a&gt;&lt;/em&gt;&lt;a href=&quot;http://geekou.guiling.fr/index.php?post/2009/09/27/L-%C3%AEle-des-pins&quot;&gt; L'île des pins&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Adrien</name>
			<uri>http://geekou.guiling.fr/index.php</uri>
		</author>
		<source>
			<title type="html">Around the world</title>
			<link rel="self" href="http://geekou.guiling.fr/index.php?feed/atom"/>
			<id>urn:md5:136e4c63c713d29b79a2034d92266969</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">Comment supprimer les mots de passe enregistrés par SVN + Eclipse</title>
		<link href="http://ks366319.kimsufi.com/~hgeissma/?p=40"/>
		<id>http://ks366319.kimsufi.com/~hgeissma/?p=40</id>
		<updated>2009-09-25T11:38:23+00:00</updated>
		<content type="html" xml:lang="en">&lt;p&gt;Tous ceux qui travaillent avec Eclipse et qui ont un plugin svn (subclipse la plupart du temps) ont du un jour rencontrer ce problème. On ajoute un repository svn dans la perspective « SVN Repositories » et entre son login/mdp de connexion au serveur. Pour une raison x ou y, on doit changer d’identifiant quelques temps après …et là aucun moyen de retrouver ce fichu prompt qui demande de s’identifier.&lt;/p&gt;
&lt;p&gt;Dans ce post je vais passer rapidement en revue les méthodes pour supprimer les mots de passe enregistrés par svn en fonction de votre OS.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Sous Mac Os X&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supprimer le fichier ~/.eclipse_keyring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Sous Linux&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Cela va dépendre de l’interface choisie pour SVN dans vos préférences Eclipse : Preferences &amp;gt; Team &amp;gt; SVN &amp;gt; SVN interface&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JavaHL : Supprimer le fichier ~/.subversion/auth/svn.simple&lt;/li&gt;
&lt;li&gt;SVNKit : Supprimer le fichier $ECLIPSE_HOME/configuration/org.eclipse.core.runtime/.keyring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;Sous Windows&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;La encore cela dépend de l’interface SVN choisie :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JavaHL : Supprimer c:\Documents and Settings\[username]\Application Data\subversion\auth\svn.simple&lt;/li&gt;
&lt;li&gt;SVNKit : Supprimer le fichier $ECLIPSE_HOME/configuration/org.eclipse.core.runtime/.keyring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A bientôt.&lt;/p&gt;</content>
		<author>
			<name>Hugo Geissmann</name>
			<uri>http://ks366319.kimsufi.com/~hgeissma</uri>
		</author>
		<source>
			<title type="html">Blog d'Hugo</title>
			<subtitle type="html">Encore un blog de geek</subtitle>
			<link rel="self" href="http://ks366319.kimsufi.com/~hgeissma/?feed=atom"/>
			<id>http://ks366319.kimsufi.com/~hgeissma/?feed=atom</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="fr">Et c'est reparti...</title>
		<link href="http://geekou.guiling.fr/index.php?post/2009/09/24/Et-c-est-reparti..."/>
		<id>urn:md5:fde376f9aa2fce088395309d9fb50e9f</id>
		<updated>2009-09-24T08:52:00+00:00</updated>
		<content type="html" xml:lang="fr">&lt;p&gt;...pour un voyage à l'autre bout du monde.
Ça va commencer à devenir une tradition, mais après une soirée assez (trop ?) bien arrosé, me voici après 4h30 de sommeil &quot;frais et dispo&quot; pour aller prendre mon train qui m'emmena directement à l'aéroport de Paris Charles de Gaulle.
&quot;Vous êtes bien arrivé à Paris...&quot;
La journée commence bien, avec le TGV... &lt;em&gt;&lt;a href=&quot;http://geekou.guiling.fr/index.php?post/2009/09/24/Et-c-est-reparti...&quot;&gt;Lire&lt;/a&gt;&lt;/em&gt;&lt;a href=&quot;http://geekou.guiling.fr/index.php?post/2009/09/24/Et-c-est-reparti...&quot;&gt; Et c'est reparti...&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Adrien</name>
			<uri>http://geekou.guiling.fr/index.php</uri>
		</author>
		<source>
			<title type="html">Around the world</title>
			<link rel="self" href="http://geekou.guiling.fr/index.php?feed/atom"/>
			<id>urn:md5:136e4c63c713d29b79a2034d92266969</id>
		</source>
	</entry>

	<entry>
		<title type="html">fortune 33</title>
		<link href="http://quotes.jeb.be/?view=one&amp;id=33"/>
		<id>tag:quotes.jeb.be,2009:33</id>
		<updated>2009-08-29T23:13:34+00:00</updated>
		<content type="html">&lt;dl class=&quot;irc normal&quot;&gt;
&lt;dt&gt;&amp;lt;&lt;span style=&quot;color: #bb00bb ;&quot;&gt; seto1&lt;/span&gt;&amp;gt;&lt;/dt&gt;
&lt;dd&gt;c'est quand même un peu magique le wifi.. je pense que tout utilisateur d'une connexion wifi en arrive là un jour.. parler sur irc en étant aux toilettes.&lt;/dd&gt;
&lt;/dl&gt;</content>
		<author>
			<name>guiling</name>
			<uri>http://quotes.jeb.be/</uri>
		</author>
		<source>
			<title type="html">Jeb Quotes's</title>
			<subtitle type="html">All your fortunes are belong to us</subtitle>
			<link rel="self" href="http://quotes.jeb.be/atom10.php"/>
			<id>http://quotes.jeb.be/</id>
		</source>
	</entry>

	<entry>
		<title type="html">fortune 32</title>
		<link href="http://quotes.jeb.be/?view=one&amp;id=32"/>
		<id>tag:quotes.jeb.be,2009:32</id>
		<updated>2009-08-23T10:46:27+00:00</updated>
		<content type="html">&lt;dl class=&quot;irc normal&quot;&gt;
&lt;dt&gt;&amp;lt;&lt;span style=&quot;color: #ddcc11 ;&quot;&gt;%tux&lt;/span&gt;&amp;gt;&lt;/dt&gt;
&lt;dd&gt;c'est drôle, la polarisation de mes lunettes de soleil et de l'écran de mon mac sont perpendiculaires donc je vois rien à l'écran si je mets mes lunettes de soleil, contrairement à l'écran de mon pc :)&lt;/dd&gt;
&lt;/dl&gt;</content>
		<author>
			<name>Ploufplouf</name>
			<uri>http://quotes.jeb.be/</uri>
		</author>
		<source>
			<title type="html">Jeb Quotes's</title>
			<subtitle type="html">All your fortunes are belong to us</subtitle>
			<link rel="self" href="http://quotes.jeb.be/atom10.php"/>
			<id>http://quotes.jeb.be/</id>
		</source>
	</entry>

	<entry>
		<title type="html" xml:lang="en">JPA : A t’on vraiment besoin de DAO ?</title>
		<link href="http://ks366319.kimsufi.com/~hgeissma/?p=8"/>
		<id>http://ks366319.kimsufi.com/~hgeissma/?p=8</id>
		<updated>2009-08-09T17:00:42+00:00</updated>
		<content type="html" xml:lang="en">&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;em&gt;Cet article est une proposition de traduction de l’article de Vicent Patington : &lt;a href=&quot;http://blog.xebia.com/2009/03/09/jpa-implementation-patterns-data-access-objects/&quot;&gt;Do we really need DAO ? &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Commençons par la chose que vous allez probablement écrire en premier dans une application JPA : le data access object , aka DAO. Un premier point qu’il faut soulever avant même de commencer cet article est de savoir si oui ou non on a réellement besoin d’un DAO lorsqu’on utilise JPA. Il y a un peu plus d’un an, la conclusion de ce débat a été : « Ça dépend ! ». Et même s’il est assez difficile de discuter une telle conclusion &lt;img src=&quot;http://ks366319.kimsufi.com/~hgeissma/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt;  , pour moi, un DAO a bel et bien sa place dans une application JPA. On peut soutenir que ce n’est qu’une fine couche au dessus de JPA, mais avoir un DAO par entité persistante donne ce type d’avantages :&lt;/p&gt;
&lt;ul style=&quot;text-align: justify;&quot;&gt;
&lt;li&gt; Au lieu de devoir récupérer un EntityManager à chaque fois que l’on veut obtenir ou persister des données, on décide une fois pour toute lequel utiliser et toute l’équipe de développement s’y tient.&lt;/li&gt;
&lt;li&gt;On peut interdire certaines opérations pour certaines entités. Par exemple, on peut ne pas vouloir laisser la possibilité de supprimer des entrées de log. En utilisant un DAO, on peut ne pas ajouter de méthode ‘remove’ au LogEntry DAO.&lt;/li&gt;
&lt;li&gt;Théoriquement, en utilisant les DAO on peut changer de méthode de persistance (comme JDBC seul ou iBATIS). Mais comme JPA est une abstraction très complète je pense que ce n’est pas réellement envisageable pour une application un tant soit peu complexe.&lt;/li&gt;
&lt;li&gt;On peut centraliser toutes les requêtes relatives à un certain type d’entités au lieu de les disperser dans tout le code. On pourrait utiliser des « &lt;em&gt;named queries&lt;/em&gt;«   pour garder les requêtes avec les entités, mais on a toujours besoin d’un endroit où centraliser les paramètres. Ainsi, mettre les requêtes, le code qui instancie les paramètres et le &lt;em&gt;cast&lt;/em&gt; dans le bon type (celui de l’entité) dans un DAO est une chose très simple à faire. Par exemple :&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;List&lt;/span&gt; findExecutingChangePlans&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
      Query query &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; entityManager.&lt;span style=&quot;color: #006633;&quot;&gt;createQuery&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;
            &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;SELECT plan FROM ChangePlan plan where plan.state = 'EXECUTING'&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; query.&lt;span style=&quot;color: #006633;&quot;&gt;getResultList&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;Bon, maintenant que l’on est convaincu que les DAO c’est bien &lt;img src=&quot;http://ks366319.kimsufi.com/~hgeissma/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt;  : comment les écrit on ?&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Dans la javadoc de la classe &lt;a href=&quot;http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/jpa/JpaTemplate.html&quot;&gt;&lt;code&gt;JpaTemplate&lt;/code&gt; &lt;/a&gt;(Spring) il est écrit en gras qu’il n’y a pas grand interêt à utiliser cette classe , ce qui rend la classe &lt;a href=&quot;http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/jpa/support/JpaDaoSupport.html&quot;&gt;&lt;code&gt;JpaDaoSupport&lt;/code&gt; &lt;/a&gt;également superflue. A la place, on peut écrire nos DAO JPA comme des POJO (Plain Old Java Object) en ajoutant l’annotation @&lt;a href=&quot;http://java.sun.com/javaee/5/docs/api/javax/persistence/PersistenceContext.html&quot;&gt;&lt;code&gt;PersistenceContext&lt;/code&gt;&lt;/a&gt;, ce qui permet de récupérer une référence vers un &lt;code&gt;EntityManager&lt;/code&gt;. Cela va marcher avec les EJB 3.0 et avec Spring 2.0. (Pour Spring il faut ajouter au contexte le bean &lt;code&gt;&lt;a href=&quot;http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.html&quot;&gt;PersistenceAnnotationBeanPostProcessor&lt;/a&gt;&lt;/code&gt;).&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Comme chaque DAO partage un grand nombre de fonctionnalités avec les autres DAO, il semble logique d’avoir une classe de base avec toutes ces fonctionnalités partagées  et d’en faire héritier chaque DAO. Il y a un grand nombre de blogs qui traitent des &lt;em&gt;type-safe generic DAO&lt;/em&gt; et on peut même télécharger du code depuis &lt;a href=&quot;http://code.google.com/p/generic-dao/&quot; target=&quot;_blank&quot;&gt;Google Code&lt;/a&gt;. Quand on combine des éléments provenant de toutes ces sources, on obtient l’implémentation de JPA qui suit.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;L’entité&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Disons que l’on veut persister la classe &lt;code&gt;Order&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;@&lt;span style=&quot;color: #003399;&quot;&gt;Entity&lt;/span&gt;
@Table&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;name &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;ORDERS&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; Order &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
    @Id
    @GeneratedValue
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; id&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; customerName&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Date&lt;/span&gt; date&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
 
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; getId&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; id&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; setId&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; id&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;id&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; id&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
 
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; getCustomerName&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; customerName&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; setCustomerName&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; customerName&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;customerName&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; customerName&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
 
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Date&lt;/span&gt; getDate&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; date&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; setDate&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;Date&lt;/span&gt; date&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;date&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; date&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ne vous inquiétez pas trop en lisant le contenu de cette classe. Nous allons en voir les détails dans d’autres articles sur les design&lt;br /&gt;
pattern implémentant JPA. Ici, on utilise l’annotation &lt;code&gt;@Table&lt;/code&gt; parce que &lt;strong&gt;ORDER &lt;/strong&gt;est un mot réservé en SQL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’interface DAO&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tout d’abord on définit une interface DAO générique avec toutes les méthodes qui seront partagées par les DAOs :&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;interface&lt;/span&gt; Dao &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
      &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; persist&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;E entity&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; remove&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;E entity&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
      E findById&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;K id&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;Le premier paramètre, K, et le type de l’objet que l’on va utiliser comme clé et le deuxième, E, est le type de l’Entité. En plus des méthodes classiques &lt;code&gt;persist,remove&lt;/code&gt; et &lt;code&gt;findById&lt;/code&gt;, on peut aussi ajouter &lt;code&gt;listFindAll()&lt;/code&gt;. De toute façon, nous allons être amenés à modifier ce DAO (ansi que l’entité) en explorant d’autres design pattern de JPA.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Puis on définit une sous-interface pour chaque entité que l’on veut persister, en ajoutant toutes les méthodes spécifiques à cette entité. Par exemple, si on veut récupérer toutes les commandes passées après une certaine date, on peut ajouter cette méthode :&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;interface&lt;/span&gt; OrderDao &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;extends&lt;/span&gt; Dao &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: #003399;&quot;&gt;List&lt;/span&gt; findOrdersSubmittedSince&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;Date&lt;/span&gt; date&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;br /&gt;
L’implémentation de base du DAO&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La troisième étape est de créeer une implémentation de base d’un DAO JPA. Elle aura une implémentation basique de toutes les méthodes créer dans le DAO standard que nous avons créé à l’étape 1 :&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;abstract&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; JpaDao &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;implements&lt;/span&gt; Dao &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;Class&lt;/span&gt; entityClass&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
 
	@PersistenceContext
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;protected&lt;/span&gt; EntityManager entityManager&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
 
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; JpaDao&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
		ParameterizedType genericSuperclass &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;ParameterizedType&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; getClass&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;getGenericSuperclass&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;this&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;entityClass&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;Class&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; genericSuperclass.&lt;span style=&quot;color: #006633;&quot;&gt;getActualTypeArguments&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
 
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; persist&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;E entity&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; entityManager.&lt;span style=&quot;color: #006633;&quot;&gt;persist&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;entity&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
 
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; remove&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;E entity&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; entityManager.&lt;span style=&quot;color: #006633;&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;entity&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
 
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; E findById&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;K id&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; entityManager.&lt;span style=&quot;color: #006633;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;entityClass, id&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Le code précédent est assez simple à comprendre. Cependant, certains points méritent d’être étudiés plus en détail :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le constructeur du JpaDao reprend la &lt;a href=&quot;http://blog.xebia.com/2009/02/07/acessing-generic-types-at-runtime-in-java/&quot;&gt;méthode proposée par Arjan Blokzijl &lt;/a&gt;qui utilise la réflexion pour récupérer l’entité.&lt;/li&gt;
&lt;li&gt;L’annotation &lt;code&gt;@PersistenceContext&lt;/code&gt; permet au container EJB 3.0 ou à Spring d’injecter l’EntityManager.&lt;/li&gt;
&lt;li&gt;Les champs &lt;code&gt;EntityManager&lt;/code&gt; et &lt;code&gt;entityClass&lt;/code&gt; sont &lt;em&gt;protected&lt;/em&gt;, ainsi les sous-classes peuvent y accéder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;L’implémentation spécifique du DAO&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Enfin, nous créons une implémentation de DAO spécifique . Elle étend le DAO JPA de base et implémente l’interface spécifique du DAO.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; JpaOrderDao &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;extends&lt;/span&gt; JpaDao &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;implements&lt;/span&gt; OrderDao &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;List&lt;/span&gt; findOrdersSubmittedSince&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;Date&lt;/span&gt; date&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
		Query q &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; entityManager.&lt;span style=&quot;color: #006633;&quot;&gt;createQuery&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;
			&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;SELECT e FROM &quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; entityClass.&lt;span style=&quot;color: #006633;&quot;&gt;getName&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&quot; e WHERE date &amp;amp;gt;= :date_since&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
		q.&lt;span style=&quot;color: #006633;&quot;&gt;setParameter&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;date_since&quot;&lt;/span&gt;, date&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;List&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; q.&lt;span style=&quot;color: #006633;&quot;&gt;getResultList&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Utilisation du DAO&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;le moyen d’obtenir une référence à notre instance du OrderDao va dépendre de si on utiliser les EJB ou Spring.&lt;/p&gt;
&lt;p&gt;Avec les EJB 3.0 :&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;@EJB&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;name&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;orderDao&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; OrderDao orderDao&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Alors qu’avec Spring on peut utiliserle fichier de contexte où sont déclarés les beans ou tout simplement utiliser l’annotation &lt;code&gt;@Autowired&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;@Autowired
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; OrderDao orderDao&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Dans tous les cas, une fois que l’on a la référence vers notre DAO, on l’utilise de cette manière :&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;Order o &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Order&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
o.&lt;span style=&quot;color: #006633;&quot;&gt;setCustomerName&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;Peter Johnson&quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
o.&lt;span style=&quot;color: #006633;&quot;&gt;setDate&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
orderDao.&lt;span style=&quot;color: #006633;&quot;&gt;persist&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;o&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Mais on peut aussi utiliser la requête que nous avons ajouté dans notre interface OrderDao :&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre style=&quot;font-family: monospace;&quot; class=&quot;java&quot;&gt;&lt;span style=&quot;color: #003399;&quot;&gt;List&lt;/span&gt; orders &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; orderDao.&lt;span style=&quot;color: #006633;&quot;&gt;findOrdersSubmittedSince&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;date&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;Order each &lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; orders&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;{&lt;/span&gt;
	&lt;span style=&quot;color: #003399;&quot;&gt;System&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;out&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;println&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&quot;order id = &quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;+&lt;/span&gt; each.&lt;span style=&quot;color: #006633;&quot;&gt;getId&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Avec ce DAO indépendant du type de l’entité nous avons les avantages suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pas de dépendance directe en l’api JPA et le code client&lt;/li&gt;
&lt;li&gt;Indépendance vis-à-vis du type de l’entité grace aux generics. Tous les casts qui doivent quand même être fait, le sont dans l’implémentation.&lt;/li&gt;
&lt;li&gt;Un seul endroit pour regrouper le code JPA spécifique à une sorte d’entité&lt;/li&gt;
&lt;li&gt;Un seul endroit pour ajouter les marqueurs de transaction, de debug etc …D’ailleurs, nous allons le voir plus tard, il va falloir ajouter les marqueurs de transaction à d’autres endroits dans notre application.&lt;/li&gt;
&lt;li&gt;Une seule classe à tester quand on test l’accès aux données. Nous reparlerons de ces tests dans un autre article sur les design pattern JPA.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’espère que maintenant vous êtes convaincu de l’on a &lt;strong&gt;besoin &lt;/strong&gt;du design pattern DAO avec JPA !!&lt;/p&gt;</content>
		<author>
			<name>Hugo Geissmann</name>
			<uri>http://ks366319.kimsufi.com/~hgeissma</uri>
		</author>
		<source>
			<title type="html">Blog d'Hugo</title>
			<subtitle type="html">Encore un blog de geek</subtitle>
			<link rel="self" href="http://ks366319.kimsufi.com/~hgeissma/?feed=atom"/>
			<id>http://ks366319.kimsufi.com/~hgeissma/?feed=atom</id>
		</source>
	</entry>

</feed>
