<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Perso</title><link>http://blogs.labo-dotnet.com/colophon/category/21.aspx</link><description>Perso</description><managingEditor>Evain Jb</managingEditor><dc:language>fr-FR</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>Evain Jb</dc:creator><title>Migration</title><link>http://blogs.labo-dotnet.com/colophon/archive/2005/07/10/8613.aspx</link><pubDate>Sun, 10 Jul 2005 18:02:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2005/07/10/8613.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/8613.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2005/07/10/8613.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/8613.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/8613.aspx</trackback:ping><description>Le temps est au changement ici.&lt;br /&gt;
Je migre. Je vais quitter Paris à la fin de l'été, dans une ville où il n'y a pas de métro.&lt;br /&gt;
Demain, je vais recevoir mon PowerBouquetin que j'ai commandé il y a quelques semaines. Fini Windows comme OS principal.&lt;br /&gt;
Aujourd'hui, mes deux blogs, anglais et français, déménagent chez moi: &lt;a href="http://evain.net/blog/"&gt;http://evain.net/blog/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Let's keep moving!&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/8613.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>GreaseMonkey. Appropriez vous le web !</title><link>http://blogs.labo-dotnet.com/colophon/archive/2005/06/10/6086.aspx</link><pubDate>Fri, 10 Jun 2005 01:05:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2005/06/10/6086.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/6086.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2005/06/10/6086.aspx#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/6086.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/6086.aspx</trackback:ping><description>Mark Pilgrim, personnage du web reconnu en particulier pour ses ouvrages en ligne, souvenez vous, le fameux &lt;a href="http://diveintopython.org/"&gt;Dive Into Python&lt;/a&gt; vient de publier un nouveau bouquin en ligne. Il s'attaque ici à un add-on de FireFox, qui commence à faire pas mal de bruit: &lt;a href="http://greasemonkey.mozdev.org/"&gt;GreaseMonkey&lt;/a&gt;. Bien évidemment, l'ouvrage se nomme &lt;a href="http://diveintogreasemonkey.org/"&gt;Dive Into GreaseMonkey&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Cette extension vous permet tout simplement de modifier à loisir les pages que vous visitez à l'aide de ce bon vieux JavaScript. Vous allez donc pouvoir, en utilisant le standard &lt;a href="http://www.w3.org/DOM/"&gt;W3C DOM&lt;/a&gt; modifier les pages de vos sites préférés. Des tas de scripts existent déjà, vous pouvez jeter un coup d'oeil sur ce &lt;a href="http://dunck.us/collab/GreaseMonkeyUserScripts"&gt;listing&lt;/a&gt;, vous verrez des modifications de Google, de GMail, d'Amazon, et autres sites qui font parti du quotidien que nous Geeks, adorons.&lt;br /&gt;
&lt;br /&gt;
Alors pour regarder un peu, j'ai réfléchi, et j'me suis dis, qu'est ce que je pourrais bien faire pour améliorer mon quotidien. Il y a un site que je visite pas mal, c'est le &lt;a href="http://www.labo-dotnet.com/dotnetlogue"&gt;DotNetLogue&lt;/a&gt;. Mais sur cet aggrégateur, tous les posts ne m'intéressent pas, en particulier ceux qui sont mal formatés. Alors j'ai retroussé mes manches, et hop, j'ai décidé d'essayer.&lt;br /&gt;
&lt;br /&gt;
Comme un bon code vaut mieux que deux tu l'auras, jettons y tout de suite un coup d'oeil:&lt;br /&gt;
&lt;br /&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode
{
	font-size: 10pt;
	color: black;
	font-family: Courier New , Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0px; }
.rem { color: #008000; }
.kwrd { color: #0000ff; }
.str { color: #006080; }
.op { color: #0000c0; }
.preproc { color: #cc6633; }
.asp { background-color: #ffff00; }
.html { color: #800000; }
.attr { color: #ff0000; }
.alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0px;
}
.lnum { color: #606060; }
&lt;/style&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="rem"&gt;/*&lt;/span&gt;
&lt;span class="rem"&gt; * DotNetLogue cleaner&lt;/span&gt;
&lt;span class="rem"&gt; * Copyright 2005 Jb Evain  &amp;lt;jbevain@gmail.com&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt; * This script is licensed under the GNU GPL 2.&lt;/span&gt;
&lt;span class="rem"&gt; * See: http://www.gnu.org/copyleft/gpl.html&lt;/span&gt;
&lt;span class="rem"&gt; */&lt;/span&gt;

&lt;span class="rem"&gt;// ==UserScript==&lt;/span&gt;
&lt;span class="rem"&gt;// @name          DotNetLogue cleaner&lt;/span&gt;
&lt;span class="rem"&gt;// @namespace     http://evain.net&lt;/span&gt;
&lt;span class="rem"&gt;// @description   Read only the feeds you're interested in&lt;/span&gt;
&lt;span class="rem"&gt;// @include       http://www.labo-dotnet.com/dotnetlogue*&lt;/span&gt;
&lt;span class="rem"&gt;// ==/UserScript==&lt;/span&gt;

(&lt;span class="preproc"&gt;function&lt;/span&gt; () {

    &lt;span class="preproc"&gt;var&lt;/span&gt; black_list = [&lt;span class="str"&gt;"http://www.c2i.fr"&lt;/span&gt;];
    
    &lt;span class="preproc"&gt;function&lt;/span&gt; isBlackListed (entry) {
        &lt;span class="preproc"&gt;var&lt;/span&gt; href = entry.previousSibling.previousSibling.firstChild.getAttribute (&lt;span class="str"&gt;"href"&lt;/span&gt;);
        &lt;span class="preproc"&gt;for&lt;/span&gt; (&lt;span class="preproc"&gt;var&lt;/span&gt; i = 0; i &amp;lt; black_list.length; i++)
            &lt;span class="preproc"&gt;if&lt;/span&gt; (href.indexOf (black_list [i]) &amp;gt; -1)
                &lt;span class="preproc"&gt;return&lt;/span&gt; &lt;span class="preproc"&gt;true&lt;/span&gt;;
        &lt;span class="preproc"&gt;return&lt;/span&gt; &lt;span class="preproc"&gt;false&lt;/span&gt;;
    }

    &lt;span class="preproc"&gt;var&lt;/span&gt; divs = document.getElementsByTagName (&lt;span class="str"&gt;"div"&lt;/span&gt;);
    &lt;span class="preproc"&gt;for&lt;/span&gt; (&lt;span class="preproc"&gt;var&lt;/span&gt; i = 0; i &amp;lt; divs.length; i++) {
        &lt;span class="preproc"&gt;var&lt;/span&gt; entry = divs [i];

        &lt;span class="preproc"&gt;if&lt;/span&gt; (entry.className == &lt;span class="str"&gt;"blogentry"&lt;/span&gt; &amp;amp;&amp;amp; isBlackListed (entry)) {
            entry.previousSibling.previousSibling.style.display =
                entry.style.display = &lt;span class="str"&gt;"none"&lt;/span&gt;;
        }
    }
}) ();

&lt;/pre&gt;
N'est ce pas tout simple ? Il n'a suffit qu'un peu de reverse engineering sur le code HTML pour savoir quoi cacher, et c'était bon. Une fois GreaseMonkey installé, il ne reste plus qu'a enregistrer &lt;a href="http://evain.net/public/dotnetlogue_cleaner.user.js"&gt;ce bout de code&lt;/a&gt;, et à visiter tranquillement le DotNetLogue. Bien sur, vous pouvez ajoutez des éléments à la liste 'black_list'.&lt;br /&gt;
&lt;br /&gt;
Pour les plus incrédules, voici deux screenshots, l'un &lt;a href="http://evain.net/public/dnl_without_gm.png"&gt;avant&lt;/a&gt; d'avoir activé mon script, l'autre &lt;a href="http://evain.net/public/dnl_with_gm.png"&gt;après&lt;/a&gt;. Notez la mine réjouie du singe en bas à droite.&lt;br /&gt;
&lt;br /&gt;
Nous vivons une époque formidable :)&lt;br /&gt;
Télécharger &lt;a href="http://www.mozilla.org"&gt;FireFox&lt;/a&gt;, &lt;a href="http://greasemonkey.mozdev.org/"&gt;GreaseMonkey&lt;/a&gt;.&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/6086.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>Un paquet de Caml</title><link>http://blogs.labo-dotnet.com/colophon/archive/2005/04/19/5386.aspx</link><pubDate>Tue, 19 Apr 2005 21:40:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2005/04/19/5386.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/5386.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2005/04/19/5386.aspx#Feedback</comments><slash:comments>33</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/5386.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/5386.aspx</trackback:ping><description>&lt;style type="text/css"&gt;
.S0 {
	color: #808080;
	background: #FFFFFF;
}
.S3 {
	font-weight: bold;
	color: #00007F;
	background: #FFFFFF;
}
.S6 {
	font-weight: bold;
	color: #000000;
	background: #FFFFFF;
}
.S7 {
	color: #007F7F;
	background: #ffffff;
}
.S9 {
	color: #7F007F;
	background: #ffffff;
}
.S10 {
	font-family: 'Courier New';
	color: #007F00;
	background: #FFFFFF;
	font-size: 10pt;
}
span {
	font-family: 'Courier New';
	color: #000000;
	background: #FFFFFF;
	font-size: 10pt;
}
&lt;/style&gt;
&lt;p&gt;
Depuis un moment, on entend pas mal parler de Caml par ci, Caml par là chez les chers pointeurs.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Oh mais oh !&lt;/b&gt;, c'est un peu vite oublier nous français, ce que c'est que le &lt;i&gt;vrai&lt;/i&gt; &lt;a href="http://caml.inria.fr/"&gt;Caml&lt;/a&gt; ! C'est d'abord et avant tout un petit bijou national, développé par l'INRIA, et un excellent langage de programmation fonctionnel. Son implémentation la plus utilisée est l'&lt;a href="http://caml.inria.fr/ocaml/index.en.html"&gt;Objective Caml&lt;/a&gt;, qui intègre les paradigmes objets. C'est un langage qui peut aussi bien être interprété que compilé, et extremement rapide, avec des performances proches  voir supérieures aux C/C++ pour la même utilisation, tout en gardant à l'esprit qu'il gère tout seul la mémoire par exemple..
&lt;/p&gt;
&lt;p&gt;
Un petit exemple quand même pour voir à quoi ça ressemble, un calcul simple de factorielle, j'espère que tout le monde se souvient comment ça se calcule :
&lt;/p&gt;
&lt;p&gt;
&lt;span&gt;&lt;span class="S10"&gt;(*&lt;/span&gt;&lt;br /&gt;
&lt;span class="S10"&gt;&amp;nbsp;* O'Caml Example&lt;/span&gt;&lt;br /&gt;
&lt;span class="S10"&gt;&amp;nbsp;* fact.ml&lt;/span&gt;&lt;br /&gt;
&lt;span class="S10"&gt;&amp;nbsp;*)&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="S3"&gt;let&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S3"&gt;rec&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;fact&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;=&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S3"&gt;function&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="S7"&gt;0&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S7"&gt;1&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="S6"&gt;|&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;n&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;n&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;*&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;fact&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;(&lt;/span&gt;n&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;-&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S7"&gt;1&lt;/span&gt;&lt;span class="S6"&gt;);;&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="S3"&gt;let&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;main&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S3"&gt;()&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;=&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="S3"&gt;if&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;(&lt;/span&gt;Array&lt;span class="S6"&gt;.&lt;/span&gt;length&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;(&lt;/span&gt;Sys&lt;span class="S6"&gt;.&lt;/span&gt;argv&lt;span class="S6"&gt;)&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;&amp;gt;&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S7"&gt;1&lt;/span&gt;&lt;span class="S6"&gt;)&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S3"&gt;then&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="S3"&gt;let&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;arg&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;=&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;int_of_string&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;(&lt;/span&gt;Sys&lt;span class="S6"&gt;.&lt;/span&gt;argv&lt;span class="S6"&gt;.(&lt;/span&gt;&lt;span class="S7"&gt;1&lt;/span&gt;&lt;span class="S6"&gt;))&lt;/span&gt;&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S3"&gt;in&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;print_string&lt;span class="S6"&gt;(&lt;/span&gt;&lt;span class="S9"&gt;"resultat: "&lt;/span&gt;&lt;span class="S6"&gt;);&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;print_int&lt;span class="S6"&gt;(&lt;/span&gt;fact&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S6"&gt;(&lt;/span&gt;arg&lt;span class="S6"&gt;));&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;print_newline&lt;span class="S3"&gt;()&lt;/span&gt;&lt;span class="S6"&gt;;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
main&lt;span class="S0"&gt; &lt;/span&gt;&lt;span class="S3"&gt;()&lt;/span&gt;&lt;span class="S6"&gt;;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="S10"&gt;(* ocamlc -o fact.exe fact.ml *)&lt;/span&gt;&lt;br /&gt;
&lt;span class="S0"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
N'est ce pas formidable ? L'exemple est par trop simpliste, et ne montre pas vraiment la puissance et les possibilités du langage, cela dit, je vous laisse creuser, ça mérite son coup d'oeil.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;[UPDATE]&lt;/b&gt; : Ah oui tiens, si vous voulez vous faire les mains sur un langage fonctionnel tout en restant sur .net, vous pouvez toujours le faire sur les langages suivants :
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://nemerle.org/"&gt;Nemerle&lt;/a&gt; : volontairement proche du C# dans sa syntaxe, marche aussi bien sous Mono que sous .net&lt;/li&gt;
&lt;li&gt;&lt;a href="http://research.microsoft.com/projects/ilx/fsharp.aspx"&gt;F#&lt;/a&gt; : Une implémentation de l'Objective Caml cité plus haut par MSR&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cl.cam.ac.uk/Research/TSG/SMLNET/"&gt;SML.NET&lt;/a&gt; : Une implémentation du Standard ML, sponsorié par MSR&lt;/li&gt;
&lt;/ul&gt;
Vous n'avez plus aucune raison pour ne pas se pencher la dessus maintenant :)
&lt;/p&gt;&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/5386.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>Ajax, le web plus blanc que blanc</title><link>http://blogs.labo-dotnet.com/colophon/archive/2005/04/17/5321.aspx</link><pubDate>Sun, 17 Apr 2005 17:14:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2005/04/17/5321.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/5321.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2005/04/17/5321.aspx#Feedback</comments><slash:comments>76</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/5321.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/5321.aspx</trackback:ping><description>&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode
{
	font-size: 10pt;
	color: black;
	font-family: Courier New , Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0px; }
.rem { color: #008000; }
.kwrd { color: #0000ff; }
.str { color: #006080; }
.op { color: #0000c0; }
.preproc { color: #cc6633; }
.asp { background-color: #ffff00; }
.html { color: #800000; }
.attr { color: #ff0000; }
.alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0px;
}
.lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;Depuis quelques mois, un mot est dans la bouche de tous les développeurs web : Ajax.
Popularisé par les outils Google Mail et Maps, et d'autres frameworks, on rencontre
de plus en plus de sites offrant des fonctionnalités dynamiques, sans pour cela que
l'on change de page. La version 2 d'ASP.NET intègre en standard ces fonctionnalités, 
qui sont par exemple utilisées pour peupler dynamiquement un TreeView, sans changer
de page à chaque ouverture d'un noeud. Le terme Ajax est un terme générique pour 
ces techniques dynamiques.&lt;/p&gt;

&lt;p&gt;J'avais ouvert une catégorie Ruby, en espérant prendre le temps de vous parler de ce
langage et de tous les outils qu'on trouve autour, je ne l'ai jamais fais. Pas très
grave, il faut juste savoir qu'un outil commence à faire du buzz, et que les grandes
gens en parlent. Il n'en faut pas plus en général pour que les gens commencent à s'y
intéresser. Cet outil c'est &lt;a href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt;, un framework léger de développement web,
entièrement écrit en Ruby, qui offre une rapidité et une puissance de développement
assez impressionante, tout en gardant le côté script qui plait tant aux développeurs
php. Un bon compromis pour des applications ne nécessitant pas de dégainer les outils
lourds comme les Tapestry, Struts, JSF de chez Java, ou encore de l'ASP.NET. En tout
cas, c'est un framework qui mérite qu'on y jete un coup d'oeil !&lt;/p&gt;

&lt;p&gt;Il y a quelques temps, &lt;a href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt; s'est dotée d'une librairie JavaScript à la pointe,
pour pouvoir bénéficier de fonctionnalités Ajax : &lt;a href="http://prototype.conio.net/"&gt;Prototype&lt;/a&gt;. Cette librairie écrite dans
un excellent JavaScript, est disponible gratuitement dans une license proche de la MIT,
ce qui signifie que vous pouvez tout à fait l'intégrer dans tous vos développements, 
aussi bien libres que commerciaux, tant que vous laissez le copyright. Nous allons tout 
de suite en voir un petit exemple.&lt;/p&gt;

&lt;p&gt;Imaginons un tout début de lecteur RSS en mode web. C'est un besoin où une utilisation 
de la méthodologie Ajax est tout à fait appliquable : pas besoin de réferencer le contenu
de l'aggrégateur, besoin d'une interface sympa et réactive, bref, allons-y.&lt;/p&gt;

&lt;p&gt;Tout d'abord la partie serveur, simpliste, qui renvoie sous forme de document XML un item
d'un flux RSS. On passe un indice, et hop, l'élement est extrait avant d'être renvoyé au
client. Cette partie a été réalisée en Ruby, parce que je le vaux bien. La source se passe
de commentaire et est disponible ici : &lt;b&gt;&lt;a href="http://evain.net/ajax/item.rbx.html"&gt;la source du serveur Ruby&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Ce qui nous intéresse c'est bien sur le client, voyons un peu ce qu'il s'y passe, quand on
demande au serveur un item en particulier :&lt;/p&gt;

&lt;p&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;var&lt;/span&gt; url = &lt;span class="str"&gt;"http://evain.net/ajax/item.rbx"&lt;/span&gt;;

&lt;span class="preproc"&gt;function&lt;/span&gt; setArticle(id) {
    &lt;span class="preproc"&gt;var&lt;/span&gt; opts = { method : &lt;span class="str"&gt;"get"&lt;/span&gt;,
                 parameters : &lt;span class="str"&gt;"id="&lt;/span&gt; + id,
                 onComplete : receivedHandler,
                 asynchronous : &lt;span class="preproc"&gt;true&lt;/span&gt; };
    &lt;span class="preproc"&gt;var&lt;/span&gt; req = &lt;span class="preproc"&gt;new&lt;/span&gt; Ajax.Request(url, opts);
}
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
Le code est simpliste, on ne fait qu'utiliser un objet Ajax.Request, fourni par la libraire
&lt;a href="http://prototype.conio.net/"&gt;Prototype&lt;/a&gt;. La partie intéressante se situe dans la
déclaration des options, où l'on spécifie une fonction qui sera déclenchée quand le flux aura 
été téléchargé entièrement : &lt;b&gt;receivedHandler&lt;/b&gt;. Regardons son implémentation :
&lt;/p&gt;

&lt;p&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;function&lt;/span&gt; nodeValue(node, name) {
    &lt;span class="preproc"&gt;var&lt;/span&gt; childs = node.getElementsByTagName(name);
    &lt;span class="preproc"&gt;if&lt;/span&gt; (childs.length &amp;gt; 0 &amp;amp;&amp;amp; childs.item(0).childNodes.length &amp;gt; 0)
        &lt;span class="preproc"&gt;return&lt;/span&gt; childs.item(0).childNodes.item(0).nodeValue;
    &lt;span class="preproc"&gt;return&lt;/span&gt; &lt;span class="str"&gt;""&lt;/span&gt;;
}

&lt;span class="preproc"&gt;function&lt;/span&gt; receivedHandler(remote) {
    &lt;span class="preproc"&gt;var&lt;/span&gt; doc = remote.responseXML.documentElement;
    &lt;span class="preproc"&gt;if&lt;/span&gt; (doc) {
        $(&lt;span class="str"&gt;"auteur"&lt;/span&gt;).innerHTML = nodeValue(doc, &lt;span class="str"&gt;"author"&lt;/span&gt;);
        $(&lt;span class="str"&gt;"article"&lt;/span&gt;).innerHTML = &lt;span class="str"&gt;"&amp;lt;a href=\""&lt;/span&gt; + nodeValue(doc, &lt;span class="str"&gt;"link"&lt;/span&gt;) +
                &lt;span class="str"&gt;"\"&amp;gt;"&lt;/span&gt; + nodeValue(doc, &lt;span class="str"&gt;"title"&lt;/span&gt;) + &lt;span class="str"&gt;"&amp;lt;/"&lt;/span&gt; + &lt;span class="str"&gt;"a&amp;gt;"&lt;/span&gt;;
        $(&lt;span class="str"&gt;"date"&lt;/span&gt;).innerHTML = nodeValue(doc, &lt;span class="str"&gt;"pubDate"&lt;/span&gt;);
        $(&lt;span class="str"&gt;"desc"&lt;/span&gt;).innerHTML = nodeValue(doc, &lt;span class="str"&gt;"description"&lt;/span&gt;);
    }
}
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
Ici, tout simplement, on récupère le flux de retour sous forme d'un document XML manipulable selon
le standard DOM, terrain connu donc. Tricky, la librairie &lt;a href="http://prototype.conio.net/"&gt;Prototype&lt;/a&gt; nous 
fourni une fonction $ pour récupérer directement un élement en fonction de son id, ensuite on va chercher
le corps d'un noeud, pour l'attribuer comme corps des éléments correspondants. Easy :)
&lt;/p&gt;

&lt;p&gt;
Bon, si on voyait un résultat "fini" qui marche ? C'est par ici : &lt;b&gt;&lt;a href="http://evain.net/ajax/client.html"&gt;la démonstration finale&lt;/a&gt;&lt;/b&gt;.
Normalement ça devrait marcher sous IE6, FireFox et Safari, donc bonne démo. Il reste que bien que trivial, l'exemple de la démo je pense, représente un marché d'avenir, gageons qu'un ponte comme Google, muni de moyens éprouvés pour la recherche, améliore bientôt son GMail, ou nous fasse un GFeed, où nous pourrions se balader simplement dans nos feeds préférés, rechercher dedans, et le tout, avec une interface de "killer app".
&lt;/p&gt;

&lt;p&gt;
Voila, nous avons vu rapidement comment mettre en place d'une manière simpliste une méthodologie Ajax dans
une page internet, libre à vous de l'implémenter maintenant dans vos applications.
&lt;/p&gt;&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/5321.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>Antitrust, le film, les sources</title><link>http://blogs.labo-dotnet.com/colophon/archive/2005/02/13/5124.aspx</link><pubDate>Sun, 13 Feb 2005 02:40:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2005/02/13/5124.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/5124.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2005/02/13/5124.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/5124.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/5124.aspx</trackback:ping><description>Ce soir, j'ai re-revu ce film qui s'appelle &lt;a href="http://www.allocine.fr/pub/interstitiel/zefilm.html?Redir=%2Ffilm%2Ffichefilm%2Ehtml%3Fcfilm%3D27062&amp;cpg=3677"&gt;Antitrust&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Le genre de film qu'on va voir pendant la fête du cinéma, en été, et qui laisse un petit souvenir sympa. Surtout que ça parle de petits génies de l'informatique, de grosses boites, d'open source. Bref c'est marrant, surtout si on veut pas se prendre la tête. Et puis c'est toujours sympa dans un film où on voit ne serait-ce qu'un tout petit bout de votre métier. Oui parce que je ne compte plus les films où les gens programment en manipulant des figures géométriques, pondent du code à la vitesse de la pensée, où trouvent des mots de passe par petits bouts... Donc dans, ce film, on peut voir à plusieurs moments du code, du vrai, si si... Et puis comme j'avais que ça à faire (je ments effrontément), j'ai cherché sur Google si le code qu'on voyait, correspondait bien à quelque chose. Et la, surprise, pas mal de code provient de vrais projets, allez comme, je suis sympa, je vous passe tout ça :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Un serveur HTTP minimaliste en Java : &lt;a href="http://www.sources.ru/java/Webserver.java"&gt;http://www.sources.ru/java/Webserver.java&lt;/a&gt; (0:23:25) L'acteur s'écrit "Ouah, la compression est super" en regardant la ligne 149, ou visiblement, il n'y a pas de compression hein...&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Linux4Win : &lt;a href="http://mandrake.binarycompass.org/Mandrake-old/7.2/i586/lnx4win/src/lnx4win.c"&gt;http://mandrake.binarycompass.org/Mandrake-old/7.2/i586/lnx4win/src/lnx4win.c&lt;/a&gt; (0:52:47) Là les méchants récuperent ce code en faisant de l'OCR sur un écran...&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Jigsaw : &lt;a href="http://dev.w3.org/cvsweb/~checkout~/java/classes/org/w3c/jigsaw/servlet/JigsawHttpServletResponse.java?rev=1.53&amp;content-type=text/plain"&gt;http://dev.w3.org/cvsweb/~checkout~/java/classes/org/w3c/jigsaw/servlet/JigsawHttpServletResponse.java?rev=1.53&amp;content-type=text/plain&lt;/a&gt; (1:14:42)  Le gentil fait semblant de travailler chez le méchant alors qu'il note les adresses IP des satellites, adresse de classe A de type 10.xxx.xxx.xxx, et après il s'étonne de pas communiquer avec de l'extérieur...&lt;/li&gt;
&lt;/ul&gt;
Il y a deux autres moments où on voit du C++, la première fois ça ressemble à une appli Qt, et la seconde, on dirait l'implémentation d'une décompression Zip, mais pas moyen de retrouver la source.&lt;br /&gt;
Bon allez, si on retournait bosser sérieusement !&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/5124.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>IE l'invincible</title><link>http://blogs.labo-dotnet.com/colophon/archive/2005/02/10/5109.aspx</link><pubDate>Thu, 10 Feb 2005 00:52:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2005/02/10/5109.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/5109.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2005/02/10/5109.aspx#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/5109.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/5109.aspx</trackback:ping><description>Purée,&lt;br /&gt;
&lt;br /&gt;
Le buzz fait rage. Une faille de sécurité dans le nouveau naviguateur à la mode, c'est la panique, heureusement, notre bon vieux bastion des butineurs n'est pas touché par la dite faille. Pour en avoir lu des tartines, je vais donc prendre mon pot de culture informatique, et en étaler une bonne tranche (et oui, un, il en reste qu'un fond).&lt;br /&gt;
&lt;br /&gt;
Donc du coup, posons nous la question, qu'est ce que c'est que cette faille tant déclamée ? Cette dernière permet de faire croire à l'utilisateur qu'il clique sur un lien x, tout en le dirigeant sur y. Mais comment cela se faisse (droite ou gauche, à vous de choisir, bien que les deux soit une option) ? C'est très simple. Les gens qui utilisent un navigateur tapent leurs adresses en ASCII, oui, cette bonne vieille table des symboles. Cela ce n'est pas suffisant, pour bien des gens, alors les gens bien pensant de ce monde on fait l'IDN, pour international domain name, qui permet tout simplement d'écrire des URL en UTF-8. Simple non ? Le problème, c'est dans la conception même de l'engin, il peut y avoir des parties qui ont la même représentation, sans avoir la même valeur (code dans la table en fait). Et donc du coup (deuxième), on clique sur un lien, en ayant l'impression de butiner X, tout en butinant Y. C'est un peu comme sortir avec des jumelles vous voyez ?&lt;br /&gt;
&lt;br /&gt;
Alors ce qui fait crier haut et fort les gens, c'est que IE n'est pas touché par cette faille, tandis que le browser tant déclamé, et grignotant des parts de marché l'est. Etonnant non. Cela dit, FireFox est sujet à cette faille, tout comme tous les navigateurs implémentant l'IDN, comme Opera, Konqueror, etc. Oui, nous l'avons vu, c'est un problème de conception au niveau même du protocole. Alors pourquoi ce bon vieux IE n'est pas sensible ? Tout simplement parce qu'il n'implémente pas IDN. Pour ce faire, téléchargez un plugin IDN pour IE, et vous aurez, comme pour le reste des gens, un naviguateur sensible à cette faille.&lt;br /&gt;
&lt;br /&gt;
Pour la petite comparaison, c'est comme dire qu'un navigateur est sécure, car il n'est pas connecté à une JVM, ne lit pas les CSS, ne comprend pas l'ECMAScript, et si possible, préfere afficher seulement du texte. J'exagère ? Bien sur, cependant, comparons, s'il vous plait, les choses avec leurs équivalent.&lt;br /&gt;
&lt;br /&gt;
Alors pourquoi ce buzz ? Parce que beaucoup de gens ont annoncés que FireFox était très sécurisé, et à la moindre faille, les gens déchantent. Et les pro IE de se frotter les mains.  Prenons par exemple un site que Mr Kimmerlin aime à présenter, Secunia, vous y trouverez le détail des failles pour IE et pour FireFox, voir d'autres navigateurs, et vous pourrez comparez de vous même le nombre de failles et la gravités de celles-ci. Bien sur qu'il y a des failles dans FireFox, et plus il sera utilisé, plus on en trouvera, nulle part il n'y a de code parfait. Allez Messieurs Dames, un peu de bonne foi et d'objectivité, ça ne ferait pas de mal.&lt;br /&gt;
&lt;br /&gt;
Allons, utilisez donc le navigateur qui a votre préférence, mais ne criez pas au feu à la moindre étincelle chez le voisin... Libre à vous d'utiliser un browser en paille par contre.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;EDIT:&lt;/b&gt; Ce n'est pas vérifié, mais il semblerait que le &lt;a href="http://evain.net/gbrowser"&gt;GBrowser&lt;/a&gt;, le navigateur du futur, soit aussi sensible à cette faille.&lt;br /&gt;&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/5109.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>Fonctions anonymes, Pointeurs de fonctions, Closures, JavaScript</title><link>http://blogs.labo-dotnet.com/colophon/archive/2004/12/29/4977.aspx</link><pubDate>Wed, 29 Dec 2004 14:45:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2004/12/29/4977.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/4977.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2004/12/29/4977.aspx#Feedback</comments><slash:comments>28</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/4977.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/4977.aspx</trackback:ping><description>&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode
{
	font-size: 10pt;
	color: black;
	font-family: Courier New , Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0px; }
.rem { color: #008000; }
.kwrd { color: #0000ff; }
.str { color: #006080; }
.op { color: #0000c0; }
.preproc { color: #cc6633; }
.asp { background-color: #ffff00; }
.html { color: #800000; }
.attr { color: #ff0000; }
.alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0px;
}
.lnum { color: #606060; }
&lt;/style&gt;
Etant donné l'actualité mouvementée, un petit post pour se reveiller.&lt;br /&gt;
&lt;br /&gt;
J'ai mis à jour ma petite librairie JavaScript, toujours &lt;a href="http://www.evain.net/public/script.js.html"&gt;disponible ici&lt;/a&gt;.&lt;br /&gt;
Les petites nouveautés, c'est des petites fonctions inspirées du monde ruby, qui permettent de travailler avec ce que l'on pourrait appeller des closures. Un petit exemple :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;var&lt;/span&gt; ppj = &lt;span class="preproc"&gt;new&lt;/span&gt; Array(&lt;span class="str"&gt;"Pierre"&lt;/span&gt;, &lt;span class="str"&gt;"Paul"&lt;/span&gt;, &lt;span class="str"&gt;"Jacques"&lt;/span&gt;);
ppj.each(&lt;span class="preproc"&gt;function&lt;/span&gt;(elem) {
    document.write(elem + &lt;span class="str"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;);
});
&lt;/pre&gt;
&lt;br /&gt;
Très simple à implémenter en JavaScript cette fonction each, surtout quand on sait qu'en JavaScript une fonction est un type comme un autre :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="rem"&gt;/**&lt;/span&gt;
&lt;span class="rem"&gt;* Appelle une fonction pour chaque element&lt;/span&gt;
&lt;span class="rem"&gt;* du tableau&lt;/span&gt;
&lt;span class="rem"&gt;*/&lt;/span&gt;
Array.prototype.each = &lt;span class="preproc"&gt;function&lt;/span&gt;(functor) {
    &lt;span class="preproc"&gt;for&lt;/span&gt; (&lt;span class="preproc"&gt;var&lt;/span&gt; i = 0 ; i &amp;lt; &lt;span class="preproc"&gt;this&lt;/span&gt;.length ; i++) {
        functor(&lt;span class="preproc"&gt;this&lt;/span&gt;[i]);
    }
}
&lt;/pre&gt;
&lt;br /&gt;
Franchement, c'est classe non ? Si on a besoin de travailler impérativement avec les index, on peut utiliser cette fonction :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;var&lt;/span&gt; ppj = &lt;span class="preproc"&gt;new&lt;/span&gt; Array(&lt;span class="str"&gt;"Pierre"&lt;/span&gt;, &lt;span class="str"&gt;"Paul"&lt;/span&gt;, &lt;span class="str"&gt;"Jacques"&lt;/span&gt;);
ppj.eachWithIndex(&lt;span class="preproc"&gt;function&lt;/span&gt;(elem, i) {
    document.write(&lt;span class="str"&gt;"at "&lt;/span&gt; + i + &lt;span class="str"&gt;" : "&lt;/span&gt; + elem + &lt;span class="str"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;);
});
&lt;/pre&gt;
&lt;br /&gt;
Bien pratique, j'ai rajouté cette fonctionnalité sur ma Hashtable, du coup, ça donne ça : &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;var&lt;/span&gt; ht = &lt;span class="preproc"&gt;new&lt;/span&gt; Hashtable();
ht.put(&lt;span class="str"&gt;"jbe"&lt;/span&gt;, 21);
ht.put(&lt;span class="str"&gt;"pvb"&lt;/span&gt;, 24); &lt;span class="rem"&gt;// et toujours pas marié&lt;/span&gt;

ht.each(&lt;span class="preproc"&gt;function&lt;/span&gt;(key, value) {
    document.write(key + &lt;span class="str"&gt;" is "&lt;/span&gt; + value + &lt;span class="str"&gt;"&amp;lt;br /&amp;gt;"&lt;/span&gt;);
});
&lt;/pre&gt;
&lt;br /&gt;
Alors, qui a dit que le JavaScript était un "sous" langage. C'est d'autant plus appréciable qu'on le retrouve un petit peu partout, bref, comment professionaliser le développement XUL par exemple hein ?&lt;br /&gt;
&lt;br /&gt;&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/4977.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>Google &amp; IntelliSense</title><link>http://blogs.labo-dotnet.com/colophon/archive/2004/12/10/4919.aspx</link><pubDate>Fri, 10 Dec 2004 17:01:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2004/12/10/4919.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/4919.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2004/12/10/4919.aspx#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/4919.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/4919.aspx</trackback:ping><description>Google, des gens qui n'ont pas fini de nous surprendre.&lt;br /&gt;
Tout droit sorti des labs, la dernière petite nouveauté, c'est la complétion de votre requête.&lt;br /&gt;
C'est assez impressionnant, petit exemple :&lt;br /&gt;
&lt;img src="http://evain.net/public/google_aspect_complete.png"&gt;&lt;br /&gt;
&lt;br /&gt;
Pour essayer vous même :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.google.fr/webhp?hl=en&amp;complete=1"&gt;http://www.google.fr/webhp?hl=en&amp;complete=1&lt;/a&gt;&lt;/li
&lt;/ul&gt;
&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/4919.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>Ubuntu</title><link>http://blogs.labo-dotnet.com/colophon/archive/2004/11/22/4870.aspx</link><pubDate>Mon, 22 Nov 2004 07:24:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2004/11/22/4870.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/4870.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2004/11/22/4870.aspx#Feedback</comments><slash:comments>44</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/4870.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/4870.aspx</trackback:ping><description>Pour des raisons que le monde entier découvrira un jour, je viens d'installer un Linux sur mon ordinateur. J'ai choisi comme distribution Ubuntu, car la philosophie du produit est sympa, et tout tourne à merveille. Ubuntu pour les gens qui ne connaissent pas, c'est une Debian un petit peu retouchée, je vous invite à aller voir le lien que vous trouverez ci-dessous. Deuxième lien bien pratique, un LiveCD Linux, basé sur une Gentoo, qui m'a permis de resizer mes partoches NTFS, sans rien perdre, sans douleur, sans chemise, ni pantalon. Et puis vu le nom je suis sur que ça peut servire à des tas d'autres trucs.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ubuntu.com" target="ext"&gt;Ubuntu Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sysresccd.org/" target="ext"&gt;SystemRescueCD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/4870.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Evain Jb</dc:creator><title>Maître Renard</title><link>http://blogs.labo-dotnet.com/colophon/archive/2004/11/09/4759.aspx</link><pubDate>Tue, 09 Nov 2004 10:11:00 GMT</pubDate><guid>http://blogs.labo-dotnet.com/colophon/archive/2004/11/09/4759.aspx</guid><wfw:comment>http://blogs.labo-dotnet.com/colophon/comments/4759.aspx</wfw:comment><comments>http://blogs.labo-dotnet.com/colophon/archive/2004/11/09/4759.aspx#Feedback</comments><slash:comments>46</slash:comments><wfw:commentRss>http://blogs.labo-dotnet.com/colophon/comments/commentRss/4759.aspx</wfw:commentRss><trackback:ping>http://blogs.labo-dotnet.com/colophon/services/trackbacks/4759.aspx</trackback:ping><description>&lt;a href="http://www.mozilla.org/"&gt;&lt;img src="http://www.evain.net/public/firefox.png" style="border : 0px solid white" /&gt;&lt;/a&gt;&lt;img src ="http://blogs.labo-dotnet.com/colophon/aggbug/4759.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>