<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>faltad&#039;s head</title>
	<atom:link href="http://faltad.buffout.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://faltad.buffout.org</link>
	<description></description>
	<lastBuildDate>Wed, 09 Dec 2009 11:50:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Game of Life</title>
		<link>http://faltad.buffout.org/?p=65</link>
		<comments>http://faltad.buffout.org/?p=65#comments</comments>
		<pubDate>Wed, 09 Dec 2009 11:50:53 +0000</pubDate>
		<dc:creator>Faltad</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://faltad.free.fr/?p=65</guid>
		<description><![CDATA[Avant de commencer, il faut définir ce qu&#8217;est un automate cellulaire :
Grossièrement, c&#8217;est une grille ou tableau qui contient un nombre défini de cellules.
Il y a plusieurs états possible pour une cellule et chaque cellule dépend de l&#8217;état de ses voisines.
A chaque génération, on applique un ensemble de règles sur la grille, ce qui donne [...]]]></description>
			<content:encoded><![CDATA[<p>Avant de commencer, il faut définir ce qu&#8217;est un automate cellulaire :<br />
Grossièrement, c&#8217;est une grille ou tableau qui contient un nombre défini de cellules.<br />
Il y a plusieurs états possible pour une cellule et chaque cellule dépend de l&#8217;état de ses voisines.<br />
A chaque génération, on applique un ensemble de règles sur la grille, ce qui donne une nouvelle grille et ainsi de suite.</p>
<p>Parmi les automates cellulaires, on peut s&#8217;intéresser plus particulièrement au jeu de la vie.</p>
<p>Inventé en 1970 par <a href="http://en.wikipedia.org/wiki/John_Horton_Conway">John Horton Conway</a>, il possède quatres règles très simple et chaque cellule possède seulement deux états : morte ou vivante.</p>
<p>Les règles sont :</p>
<ul>
<li> Chaque cellule avec moins de 2 voisines vivantes meurt (ou reste morte). </li>
<li> Chaque cellule avec plus de 3 voisines vivantes meurt aussi (ou reste morte).</li>
<li> Chaque cellule vivante avec 2 ou 3 voisines vivantes reste en vie.</li>
<li> Chaque cellule morte avec 3 voisines vivantes ressuscite.</li>
</ul>
<p>Je me suis amusé à faire une implémentation de ce jeu, à l&#8217;aide de la <a href="http://www.libsdl.org/">SDL</a>.<br />
Cela se représente facilement à l&#8217;aide d&#8217;un double tableau, où chaque cellule correspond à une case.</p>
<p>Voici un petit aperçu :<br />
<a href="http://faltad.free.fr/wp-content/images/life.png"><img src="http://faltad.free.fr/wp-content/images/life-300x229.png" alt="life" title="life" width="300" height="229" class="aligncenter size-medium wp-image-69" /></a></p>
<p>Le piège qu&#8217;il peut y avoir, c&#8217;est de bien faire gaffe au fait que toutes les cellules sont modifiées en même temps. Il faut donc deux tableaux pour avoir l&#8217;ancienne génération, et celle à venir.<br />
Avec la SDL, on peut s&#8217;amuser à rendre le jeu un peu plus intéractif, grâce aux événements et autre.<br />
J&#8217;ai implémenté la mise en pause du programme, ainsi que la modification de la carte à l&#8217;aide de la souris.</p>
<p>Ça a l&#8217;air un peu brouillon présenté comme cela, mais il y a de nombreuses structures qui reviennent assez souvent :<br />
Par exemple les vaisseaux, c&#8217;est un ensemble de cellules qui peut se déplacer, sans se détruire. Le plus connu étant le glider.</p>
<p>On peut avoir aussi des canons, c&#8217;est une structure qui générera indéfiniment des vaisseaux, comme par exemple le canon à glider :<br />
<a href="http://faltad.free.fr/wp-content/images/glider.png"><img src="http://faltad.free.fr/wp-content/images/glider.png" alt="glider" title="glider" width="300" height="500" class="aligncenter size-full wp-image-75" /></a></p>
<p>Il y a de nombreuses autres structures, plus compliquées, ou plus simple que l&#8217;on peut retrouver facilement sur google.</p>
<p>Pour colorier l&#8217;écran, je me suis servi de ces deux fonctions :</p>
<pre lang="C">

/* On colorie une zone pixel par pixel */
void            color_cell(int i, int j, int boolean, SDL_Surface *screen)
{
   int          x, y;

   if (boolean)
      boolean = SDL_MapRGB(screen->format, 0, 0, 0);
   else
      boolean = SDL_MapRGB(screen->format, 255, 255, 255);
   for (y = j; y < j + SIZE_CELL; y++)
      for (x = i; x < i + SIZE_CELL; x++)
         setPixel(screen, x, y, boolean);
}
</pre>
<pre lang="C">
/* Colorie un pixel sur l'écran */
void setPixel(SDL_Surface* screen, int x, int y, Uint32 color)
{
   Uint8 *p;

   if (x < screen->w &#038;&#038; y < screen->h)
    {
       p = (Uint8 *)screen->pixels +
	y * screen->pitch + x * screen->format->BytesPerPixel;
      *(Uint32 *)p = color;
    }
}
</pre>
<p>J'ai préféré utiliser seulement la SDL_Surface répresentant l'écran, en modifiant pixel par pixel, pour mieux gérer les tailles des cellules.<br />
Bon, voilà, si vous voulez vous amuser, les sources sont <a href="http://faltad.free.fr/wp-content/life.tar.gz">ici</a></p>
<p>Il vous faut la libsdl-dev, sinon, ça ne risque pas de compiler !</p>
<p>(Vous pouvez aussi regarder du côté de <a href="http://golly.sourceforge.net/">golly</a>, c'est "un peu" plus complet)</p>
<p>Avec un peu de random de temps à autre, ça peut faire un joli écran de veille <img src='http://faltad.buffout.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
N'hésitez pas à<a href="http://www.math.com/students/wonders/life/life.html"> creuser</a> le sujet, ceci n'était qu'un très simple aperçu !</p>
]]></content:encoded>
			<wfw:commentRss>http://faltad.buffout.org/?feed=rss2&amp;p=65</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python &#8211; Curses &#8211; Wrapper</title>
		<link>http://faltad.buffout.org/?p=48</link>
		<comments>http://faltad.buffout.org/?p=48#comments</comments>
		<pubDate>Fri, 06 Nov 2009 11:50:07 +0000</pubDate>
		<dc:creator>Faltad</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Curses]]></category>

		<guid isPermaLink="false">http://faltad.free.fr/?p=48</guid>
		<description><![CDATA[Bonjour
La semaine passée, j&#8217;ai découvert et apprécié la toute puissance de Python.
Dans le cadre d&#8217;un mini projet, je me suis intéressé plus particulièrement à la bibliothèque curses.
Elle permet d&#8217;intéragir facilement avec son terminal, voir la page de la documentation pour plus d&#8217;information.
Alors, pour bien commencer, il faut importer curses, afin de pouvoir l&#8217;utiliser:

import curses

#On initialise [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour</p>
<p>La semaine passée, j&#8217;ai découvert et apprécié la toute puissance de <a href="http://www.python.org/">Python</a>.<br />
Dans le cadre d&#8217;un mini projet, je me suis intéressé plus particulièrement à la bibliothèque <a href="http://fr.wikipedia.org/wiki/Curses">curses</a>.<br />
Elle permet d&#8217;intéragir facilement avec son terminal, voir la page de la <a href="http://www.python.org/doc/2.6/library/curses.html">documentation</a> pour plus d&#8217;information.</p>
<p>Alors, pour bien commencer, il faut importer curses, afin de pouvoir l&#8217;utiliser:</p>
<pre lang="python">
import curses

#On initialise curses
screen = curses.initscr()
screen.addstr(3, 3, "Hello World")
c = 0
#On boucle jusqu'à ce que l'utilisateur tappe la lettre 'q'.
#Attention, getch renvoit un int (pour les touches supérieures à 255
#Il faut donc convertir q en int
while c != ord('q'):
    c = screen.getch()

#ici on remet le terminal dans son état normal
curses.endwin()
</pre>
<p>Si vous essayer ce code, vous allez voir les caractères que vous tapez s&#8217;afficher à l&#8217;écran.<br />
Il faut donc désactiver le mode echo du terminal.<br />
Au passage, on peut empêcher la bufferisation du terminal ainsi que permettre à curses de gérer les<br />
 touches renvoyant plusieurs octets comme Home, End, Page Up, Page Down&#8230;</p>
<pre lang="python">
import curses

screen = curses.initscr()
#On initialise donc les options
curses.noecho()
curses.cbreak()
screen.keypad(1)

screen.addstr(3, 3, "Hello World")
c = 0
while c != ord('q'):
    c = screen.getch()

#Et on remet le term comme il faut
curses.echo()
curses.nocbreak()
screen.keypad(0)

curses.endwin()
</pre>
<p>Maintenant, un petit problème : si l&#8217;utilisateur appuie sur ctrl+c ou s&#8217;amuse à tuer notre application, elle ne réinitialisera pas le term&#8230; et il sera tout bousillé <img src='http://faltad.buffout.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
La solution serait de faire comme ceci :<br />
(On peut apprécier la belle syntaxe de Python sans accolade <img src='http://faltad.buffout.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<pre lang="python">
import curses
#On importe le module de gestion des erreurs
import traceback

#On definit une fonction qui reset le term, et si une erreur est definie
#on l'affiche.
def reset_term(screen, error = 0):
    curses.echo()
    curses.nocbreak()
    screen.keypad(0)
    curses.endwin()
    if error == 1:
        print traceback.format_exc()

screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(1)
#Initialisation des couleurs
curses.start_color()

#Hop, on attrape toutes les exceptions et on les renvoie
# sur la fonction reset_term.
try:
    #On initialise une paire de couleur.
    curses.init_pair(1, curses.COLOR_RED, 0)
    screen.addstr(3, 3, "Hello World", curses.color_pair(1))
    screen.refresh()
    c = 0
    while c != ord('q'):
        c = screen.getch()
    reset_term(screen)
except:
    reset_term(screen, 1)
</pre>
<p>Bon, le code commence à s&#8217;étoffer, avec presque que des initalisations et gestion d&#8217;erreur, ça fait beaucoup pour rien !<br />
C&#8217;est là qu&#8217;intervient la fabuleuse fonction curses.wrapper !<br />
Une petite explication s&#8217;impose :<br />
curses.wrapper va s&#8217;occuper d&#8217;initialiser le terminal toute seule (avec la couleur aussi), et gérer les erreurs aussi.<br />
Elle prends comme argument une fonction qu&#8217;elle s&#8217;occupera d&#8217;appeler une fois l&#8217;initialisation effectuée, ainsi que le nombre d&#8217;arguments que vous voulez lui envoyer.</p>
<pre lang="python">
import curses

# La fonction recevra obligatoirement une variable qui
# contiendra le retour de curses.initscr()
def main(screen, str):
    curses.init_pair(1, curses.COLOR_RED, 0)
    screen.addstr(3, 3, str, curses.color_pair(1))
    screen.refresh()
    c = 0
    while c != ord('q'):
        c = screen.getch()

curses.wrapper(main, str)
</pre>
<p>Beaucoup plus simple non ?<br />
Voili voilou, premier article sur python soyez indulgent <img src='http://faltad.buffout.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Merci !</p>
]]></content:encoded>
			<wfw:commentRss>http://faltad.buffout.org/?feed=rss2&amp;p=48</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Headers d&#039;un mail.</title>
		<link>http://faltad.buffout.org/?p=26</link>
		<comments>http://faltad.buffout.org/?p=26#comments</comments>
		<pubDate>Wed, 14 Oct 2009 21:32:42 +0000</pubDate>
		<dc:creator>Faltad</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://faltad.free.fr/?p=26</guid>
		<description><![CDATA[Bonjour !
Ça commence à faire un bout de temps que je n&#8217;ai rien écrit. Je vais essayer de changer un peu ça, notamment avec ce que j&#8217;ai découvert aujourd&#8217;hui.
En bref, je me suis rendu compte qu&#8217;il faut toujours vérifier les en-têtes des messages importants/bizarres que l&#8217;on reçoit.
Et ceci parce qu&#8217;il est très facile d&#8217;envoyer un [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour !</p>
<p>Ça commence à faire un bout de temps que je n&#8217;ai rien écrit. Je vais essayer de changer un peu ça, notamment avec ce que j&#8217;ai découvert aujourd&#8217;hui.</p>
<p>En bref, je me suis rendu compte qu&#8217;il faut toujours vérifier les en-têtes des messages importants/bizarres que l&#8217;on reçoit.</p>
<p>Et ceci parce qu&#8217;il est très facile d&#8217;envoyer un message dont l&#8217;adresse de provenance est falsifié. Démonstration</p>
<p>Il suffit de se connecter par le biais de telnet sur un serveur smtp : (port 25 par défaut)</p>
<pre lang="shell">.-(~)-------------------------------------------------(faltad@Lily)-
`--> telnet smtp.free.fr 25
Trying 212.27.48.4...
Connected to smtp.free.fr.
Escape character is '^]'.
220 smtp2-g21.free.fr ESMTP Postfix
</pre>
<p>Une fois le lien établi, normalement, sur la plupart des smtp, il faut s&#8217;authentifier.</p>
<pre lang="shell">
auth plain
503 5.5.1 Error: authentication not enabled
</pre>
<p>Mais ici, on s&#8217;aperçoit que l&#8217;authentification n&#8217;est pas activé !<br />
Essayons alors d&#8217;envoyer un mail :</p>
<pre lang="shell">
mail from: hadopi@assemblee-nationale.fr
250 2.1.0 Ok
rcpt to: mon_mail@hote.fr
250 2.1.5 Ok
data
354 End data with <cr><lf>.<cr><lf>
On tappe notre super message ici. Et pour finir, on
utilise un \n suivi d'un point suivi d'un autre \n.
.
250 2.0.0 Ok: queued as D492A4B1C64
</pre>
<p>Et hop, magie, le message a été envoyé !</p>
<p>Et maintenant, citation d&#8217;un client de messagerie normal :</p>
<blockquote><p>From:  	    hadopi@assemblee-nationale.fr<br />
Sent: 	Wed 14/10/09 23:07<br />
&#8212;-</p>
<p>On tappe notre super message ici. Et pour finir, on<br />
utilise un \n suivi d&#8217;un point suivi d&#8217;un autre \n.</p></blockquote>
<p>On peut par contre voir la provenance d&#8217;un tel message en regardant les headers, notamment cette ligne :<br />
(Ou l&#8217;adresse IP de l&#8217;envoyeur ainsi que l&#8217;identité du serveur smtp utilisé sont affichés)</p>
<pre lang="shell">Received: from lgp44-4-88-160-58-65.fbx.proxad.net (lgp44-4-88-160-58-65.fbx.proxad.net [88.160.58.65])

	by smtp2-g21.free.fr (Postfix) with SMTP id 1E0C04B1E25
</pre>
<p>Mais, un novice en informatique, se fera prendre au piège, surtout s&#8217;il ne sait pas ce que sont les headers d&#8217;un mail.<br />
<em>C&#8217;est la porte ouverte au phishing !</em></p>
<p>Je ne parlerais pas des moyens de camouflage des &#8220;pirates&#8221; utilisables, car n&#8217;y connaissant que très peu de choses, j&#8217;aurais peur de dire des stupidités <img src='http://faltad.buffout.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>En conclusion, il faut toujours vérifier les headers d&#8217;un message important/bizarre, et si cela s&#8217;avère nécessaire, se renseigner auprès de l&#8217;expéditeur si possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://faltad.buffout.org/?feed=rss2&amp;p=26</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Botirc, mon copain</title>
		<link>http://faltad.buffout.org/?p=8</link>
		<comments>http://faltad.buffout.org/?p=8#comments</comments>
		<pubDate>Tue, 11 Aug 2009 22:56:01 +0000</pubDate>
		<dc:creator>Faltad</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Réseau]]></category>

		<guid isPermaLink="false">http://faltad.free.fr/?p=8</guid>
		<description><![CDATA[Cette dernière semaine m&#8217;est venu l&#8217;envie de coder un bot, pour irc, comme ça, sur un coup de tête.
Pour être honnête, je ne savais pas du tout par où commencer, mais j&#8217;avais jeté mon dévolu sur le langage C.
Puis, je suis tombé sur cette merveilleuse chose qu&#8217;est la RFC.
Donc, si on abrège cette divine documentation, [...]]]></description>
			<content:encoded><![CDATA[<p>Cette dernière semaine m&#8217;est venu l&#8217;envie de coder un bot, pour irc, comme ça, sur un coup de tête.</p>
<p>Pour être honnête, je ne savais pas du tout par où commencer, mais j&#8217;avais jeté mon dévolu sur le langage C.<br />
Puis, je suis tombé sur cette merveilleuse chose qu&#8217;est la<a title="RFC" href="http://abcdrfc.free.fr/rfc-vf/rfc1459.html"> RFC</a>.</p>
<p>Donc, si on abrège cette divine documentation, pour se connecter à un serveur, il faut, outre se connecter au serveur lui même, envoyer dans un certain ordre des commandes pour s&#8217;identifier.<br />
On se connecte :</p>
<pre lang="C">/*
** On se connecte d'abord au serveur. Ici, c'est se.quakenet.org
*/

sock = xsocket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr(host);
sin.sin_family = AF_INET;
sin.sin_port = htons(6667);
if (connect(sock, (struct sockaddr *) sin, sizeof(struct sockaddr)) == -1)
{
        perror("connect()");
        exit(errno);
}</pre>
<p>Ensuite, la RFC nous dit qu&#8217;il faut envoyer une commande NICK, suivi d&#8217;un USER.</p>
<pre lang="C">
/*
** Envoi des identifiants au serveur.
** Le NICK est de la forme suivante : "NICK :pseudo\n"
** Et le USER, lui, est : "USER nom hôte nom de serveur :pseudo\n"
** un snprintf dans un buffer alloué suffisament peut-être intéressant.
*/

snprintf(nick, SIZE_BUFFER, "NICK :%s\n", nickname);
snprintf(user, SIZE_BUFFER, "USER %s %s %s :%s\n", name, hostname, server_name, nickname);
xsend(sock, nick, strlen(nick), 0);
xsend(sock, user, strlen(user), 0);</pre>
<p>Attention, n&#8217;oubliez pas de mettre un caractère &#8216;:&#8217; avant votre pseudo, sinon le serveur ne prendra que le dernier mot.<br />
Maintenant que nous sommes identifié, il faut juste rejoindre le channel voulu.</p>
<pre lang="C">/*
** Un simple message du style : "JOIN CHANNEL" suffira amplement
*/

snprintf(join, SIZE_BUFFER, "JOIN %s", channel);
xsend(sock, join, strlen(join), 0);</pre>
<p>Bon, reste plus qu&#8217;à compiler, et à tester. En surveillant le chan avec l&#8217;aide d&#8217;un client normal, on devrait pouvoir voir le bot se connecter.<br />
Mais non, il ne se passe rien ! C&#8217;est quoi ce binz ?</p>
<p>Allons voir ça de plus près avec telnet : (on rentre les commandes par l&#8217;entrée standard, telnet se charge de les envoyer au serveur)</p>
<pre lang="shell">telnet irc.quakenet.org 6667
Trying 66.225.225.66...
Connected to irc.quakenet.org.
Escape character is '^]'.
NOTICE AUTH :*** Looking up your hostname
NOTICE AUTH :*** Checking Ident
NOTICE AUTH :*** Found your hostname
NOTICE AUTH :*** No ident response
NICK Faltad
PING :4085172480
USER Faltad test test faltad
JOIN #epinantes
:servercentral.il.us.quakenet.org 451 Faltad Faltad :Register first.</pre>
<p>On voit donc, que le serveur nous demande de nous enregistrer ! Mais comment ?<br />
Et bien en fait, il a aussi envoyé un message de ping (ici PING :4085172480).<br />
Il faut donc lui répondre par un PONG :4085172480.<br />
Et hop, ca marche beaucoup mieux !</p>
<p>Un petit dernier truc, pour envoyer un message à une personne ou à un channel, il faut utiliser la commande suivante :<br />
Et les messages que nous envoient les autres utilisateurs arrivent sous cette forme aussi.<br />
:4085172480</p>
<pre lang="C">/*
** Syntaxe : "PRIVMSG CHANNEL :message\n"
** Ne pas oublier le ':'
*/

snprintf(message, SIZE_BUFFER, "PRIVMSG %s :%s\n", channel, msg);
xsend(sock, message, strlen(message), 0);</pre>
<p>Le bot est maintenant prêt à régner sur l&#8217;IRC, il va falloir lui trouver une occupation, et ça, c&#8217;est plus dur <img src='http://faltad.buffout.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
N&#8217;hésitez pas a fouiller la RFC, pour utiliser des commandes plus ciblés (du genre KICK).</p>
<p>Voilà, j&#8217;espère que mon premier article n&#8217;est pas trop confus, ni moche..<br />
Merci de m&#8217;avoir lu ! À bientôt.</p>
<p>PS : Le chan #epinantes sur quakenet vous attends <img src='http://faltad.buffout.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://faltad.buffout.org/?feed=rss2&amp;p=8</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bienvenue</title>
		<link>http://faltad.buffout.org/?p=5</link>
		<comments>http://faltad.buffout.org/?p=5#comments</comments>
		<pubDate>Sun, 09 Aug 2009 13:25:03 +0000</pubDate>
		<dc:creator>Faltad</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://faltad.free.fr/?p=3</guid>
		<description><![CDATA[Bonjour,
Et oui, cela faisait quelques temps que je n’avais pas touché a ce blog.
Mais, ces derniers temps, l’envie m’est revenue, notamment avec mes nouvelles expériences que j’ai eu dans le domaine des technologies.
Cependant, peut-être que certains articles que j’écrirais ne seront pas forcément lié à l’informatique (même pas du tout), mais à ce que je [...]]]></description>
			<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Et oui, cela faisait quelques temps que je n’avais pas touché a ce blog.</p>
<p>Mais, ces derniers temps, l’envie m’est revenue, notamment avec mes nouvelles expériences que j’ai eu dans le domaine des technologies.</p>
<p>Cependant, peut-être que certains articles que j’écrirais ne seront pas forcément lié à l’informatique (même pas du tout), mais à ce que je pense en ce moment <img src='http://faltad.buffout.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Donc, à tout de suite pour des articles !</p>
]]></content:encoded>
			<wfw:commentRss>http://faltad.buffout.org/?feed=rss2&amp;p=5</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
