<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://cygal.info/blog/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Dissidents</title>
  <link>http://cygal.info/blog/index.php/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Tue, 01 Apr 2008 21:56:24 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Indulgence !</title>
    <link>http://cygal.info/blog/index.php/post/Indulgence</link>
    <guid isPermaLink="false">urn:md5:e0051f3ab8ad0957b8d9cad872c18510</guid>
    <pubDate>Sun, 27 Jan 2008 12:41:00 +0000</pubDate>
    <dc:creator>Poulet</dc:creator>
        <category>Blog</category>
            
    <description>    &lt;p&gt;Toi qui nous lis, partage notre deuil. Ce blog est mort, la grande majorité des articles qu'il contient sont vides de sens et d'intérêt.&lt;/p&gt;


&lt;p&gt;Nous préparons son retour, ne nous juge pas sur notre style décadent, lourd, gras.&lt;/p&gt;


&lt;p&gt;Et gard' T komz.&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Indulgence#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Indulgence#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/46</wfw:commentRss>
      </item>
    
  <item>
    <title>Faire l'amour souvent, c'est bon pour le cœur.</title>
    <link>http://cygal.info/blog/index.php/post/Faire-lamour-souvent-cest-bon-pour-le-coeur</link>
    <guid isPermaLink="false">urn:md5:58283d2da51ce7bafa771cff1f95afaa</guid>
    <pubDate>Thu, 27 Dec 2007 16:34:00 +0000</pubDate>
    <dc:creator>Poulet</dc:creator>
        <category>Butinage</category>
        <category>inutile</category><category>sex</category>    
    <description>&lt;p&gt;Oui j'utilise le tag sex alors que ça attire les rétroliens douteux (semblerait-il), mais on s'en fout, ça n'est plus qu'une question de mois avant d'avoir BHM.&lt;/p&gt;    &lt;p&gt;En réponse à Asgeir qui demande plus d'articles çaÿqses, &lt;a href=&quot;http://www.doctissimo.fr/html/sante/mag_2000/mag1222/sa_3270_sexe_maladies_coeur.htm&quot;&gt;un lien sur le sujet&lt;/a&gt;. Intéressant.&lt;/p&gt;


&lt;p&gt;Naturellement, je ne veux frustrer personne ici. Adressez-vous à Asgeir.&lt;/p&gt;


&lt;p&gt;J'en profite pour féliciter rayman, qui a (paraîtrait-il) (enfin) réussi à pécho (totalement ?), et pour dire à Pwasson que je l'aime et que j'ai besoin d'elle.&lt;/p&gt;


&lt;p&gt;Allez-y moquez-vous j'm'en fous.&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Faire-lamour-souvent-cest-bon-pour-le-coeur#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Faire-lamour-souvent-cest-bon-pour-le-coeur#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/45</wfw:commentRss>
      </item>
    
  <item>
    <title>“Damn.”</title>
    <link>http://cygal.info/blog/index.php/post/Damn</link>
    <guid isPermaLink="false">urn:md5:7dbc6518d7a2aa81100650645cfbdf0a</guid>
    <pubDate>Tue, 25 Dec 2007 15:06:00 +0000</pubDate>
    <dc:creator>Poulet</dc:creator>
        <category>Divers</category>
        <category>inutile</category>    
    <description>&lt;p&gt;Les preuves sont accablantes&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://dashuhn.free.fr/noel.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Aujourd'hui, c'est Noël. Qu'est-ce que Noël&amp;nbsp;? Selon la wikipédia (c'est vachement tendance de dire &quot;la&quot; wikipédia, non ?), Noël célèbre la naissance de Jésus, &lt;a href=&quot;http://clairemarie.blog.24heures.ch/general/et-si-jesus-netait-pas-venu.html&quot;&gt;notre sauveur à tous&lt;/a&gt;. Afin de lui rendre le digne hommage qu'il mérite, oublions quelques temps l'informatique, et penchons nous sur le miracle de sa vie.&lt;/p&gt;    &lt;p&gt;Je ne vous raconterai pas comment Jésus est venu au monde. J'imagine que vous avez tous fait votre catéchisme, sans quoi vous êtes un mécréant, et les mécréants n'ont pas leur place sur ce blog.&lt;/p&gt;


&lt;p&gt;Nous allons plutôt nous intéresser au miracle de l'Immaculée Conception. Tous, nous savons que, Marie, elle a pas couché. Mais que savons nous au juste de la reproduction&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;Les biologistes distinguent quatre formes de reproduction chez les animaux (sans doute plus, mais, pour la présente démonstration, quatre suffiront), et les classent selon qu'elles sont externes ou internes, et avec ou sans accouplement ('tention, ça devient chaud). Classons-les avec eux&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;- La reproduction externe, sans accouplement, se fait généralement (toujours ?) par une émission importante de gamètes dans le milieu. Vous avez déjà vu cette vidéo de deux oursins qui émettent une quantité incalculable, l'un de sperme, l'autre d'ovules, dans l'eau&amp;nbsp;? Imaginez toute une famille. Ouais, beurk. Ça marche aussi pour les truites, les huîtres, et des tas d'autres trucs moches qui vivent dans l'eau.&lt;/p&gt;


&lt;p&gt;- La reproduction externe, avec accouplement&amp;nbsp;: on pourrait se demander à quoi ça sert de s'accoupler et de se reproduire quand même de façon externe. La réponse est simple&amp;nbsp;: dans le cas d'une reproduction sans accouplement, les espèces sont obligées d'émettre des milliers et des milliers d'ovules... dont seulement quelques dizaines seront fécondés, les autres ne rencontrant pas les spermatozoïdes du mâle. Pas terrible, comme rendement. Lorsqu'il y'a accouplement, les deux animaux copulant sont à peu près au même endroit... et le rendement est donc nettement plus élevé. Pas bête, hein&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;- La reproduction interne, sans accouplement&amp;nbsp;: à ma connaissance, cette pratique n'existe que chez les tritons et les salamandres. C'est parfaitement inintéressant, retenons juste que le mâle procède en déposant ce qu'on appelle un spermatophore, que la femelle, euh, chargera ensuite, et qui la fécondera.&lt;/p&gt;


&lt;p&gt;- Enfin, la reproduction interne, avec accouplement&amp;nbsp;: je passerai les détails, de toute façon on s'en fout puisque Marie n'a pas couché. Si ça vous intéresse, allez toujours sur Nightsurf.&lt;/p&gt;


&lt;p&gt;Maintenant que nous savons tout ceci, essayons de classer Jésus. Manifestement, Jésus est né de Marie, il y'a donc eu reproduction interne. Cependant, point d'accouplement. Jésus serait donc une salamandre&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;C'était ma chute.&lt;/p&gt;


&lt;p&gt;Bref, la non-équipe de Dissidents vous souhaite un joyeux Noël à tous. Mais les autres ont eu la flemme d'écrire.&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Damn#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Damn#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/44</wfw:commentRss>
      </item>
    
  <item>
    <title>Dissidents is back.</title>
    <link>http://cygal.info/blog/index.php/post/Dissidents-is-back</link>
    <guid isPermaLink="false">urn:md5:d0b11329a4798ab26c2ecc0a889d5fe8</guid>
    <pubDate>Tue, 20 Nov 2007 16:54:00 +0100</pubDate>
    <dc:creator>Cygal</dc:creator>
        <category>Blog</category>
        <category>sex</category>    
    <description>&lt;p&gt;Ouais, personne l'a remarqué, mais bon, faut faire les choses bien.&lt;/p&gt;    &lt;p&gt;Ça faisait quelques jours que Dissidents n'était plus accessible&amp;nbsp;: les 2.5 Go auquel j'ai accès étaient utilisés, la faute à un script de backup qui faisait des backups toutes les minutes, et avec le spam dans les trackbacks, ça représentait dans les 4Mo par backup, c'est vite monté. Donc voilà, Dark-Side, les bots qui floodent les trackbacks, et les gens qui tombent sur &quot;des photos de (Poulet|Pwasson) à poil&quot; en faisant des recherches pas très catholiques sur Google (c'est assez drôle de parcourir les logs du coup) peuvent êtres rassurés&amp;nbsp;: ça marche. \o/&lt;/p&gt;


&lt;p&gt;Je tiens à remercier Pmol et nos sponsors (mais surtout Pmol) sans qui toute cette aventure n'aurait pas été possible.&lt;/p&gt;


&lt;p&gt;Donc, quelques bouts du logs d'aujourd'hui, pour le fun&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20/Nov/2007:00:00:38 &quot;Des-photos-de-Pwasson-a-poil&quot; &quot;photo teen angie lita&quot;&lt;/li&gt;
&lt;li&gt;20/Nov/2007:00:10:49 &quot;Medibuntu-devient-sex&quot; &quot;brutal facesitting diva&quot;&lt;/li&gt;
&lt;li&gt;20/Nov/2007:00:14:31 &quot;Des-photos-de-Pwasson-a-poil&quot; &quot;bodybuilder frot vidèo&quot; (3 fois :o)&lt;/li&gt;
&lt;li&gt;20/Nov/2007:00:58:05 &quot;Des-photos-de-Pwasson-a-poil&quot; &quot;lisa ANN vidèo porno&quot;&lt;/li&gt;
&lt;li&gt;20/Nov/2007:01:26:59 &quot;Medibuntu-devient-sex&quot; &quot;super sex 65 min sex prono&quot;&lt;/li&gt;
&lt;li&gt;20/Nov/2007:04:55:54 &quot;fstab-exotique-dans-Ubuntu&quot; &quot;felicia darkstalker hentai&quot;&lt;/li&gt;
&lt;li&gt;20/Nov/2007:05:29:47 &quot;fstab-exotique-dans-Ubuntu&quot; &quot;Meagan Good frre nude pics&quot;&lt;/li&gt;
&lt;li&gt;20/Nov/2007:05:41:24 &quot;Debout-les-gars-reveillez-vous&quot; &quot;free Samantha slopes porn videos&quot;&lt;/li&gt;
&lt;li&gt;20/Nov/2007:06:39:35 &quot;Medibuntu-devient-sex&quot; &quot;brazil adult nite life video&quot;&lt;/li&gt;
&lt;li&gt;20/Nov/2007:10:14:28 &quot;etc/fstab-exotique-dans-Ubuntu&quot; &quot;dog and gairl sex&quot;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bon, j'en ai sauté pas mal, y'en a eu plein d'autres, et y'en aura d'autres (sauf que maintenant apu trackbacks, donc ça va bien baisser un jour).&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Dissidents-is-back#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Dissidents-is-back#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/43</wfw:commentRss>
      </item>
    
  <item>
    <title>« Ca ne marchera pas ...</title>
    <link>http://cygal.info/blog/index.php/post/Ca-ne-marchera-pas</link>
    <guid isPermaLink="false">urn:md5:dfc82c01f9845324d0d87dc8ec15a362</guid>
    <pubDate>Mon, 05 Nov 2007 16:16:00 +0100</pubDate>
    <dc:creator>Dark-Side</dc:creator>
        <category>Algo</category>
        <category>IA</category><category>prolog</category><category>sex</category>    
    <description>... Vous savez pourquoi ? Parce que ça nous amuse. Vous trouvez quelque chose pour m’emmerder, je trouve quelque chose pour vous emmerder. C’est un jeu et je vais gagner. J’ai un coup d’avance. Vous êtes déjà emmerdé. »&lt;br /&gt;&lt;ins&gt;&lt;strong&gt;Edité le 25/12/07&lt;/strong&gt;&lt;/ins&gt;&lt;br /&gt;    Je crois que je vais faire comme ça désormais, toujours commencer mes articles par une citation sans rapport (ou du moins sans rapport logique apparent).&lt;br /&gt;
Bref, je suis là parce que j'avais dis que je vous montrerai une IA en &lt;strong&gt;&lt;em&gt;prolog&lt;/em&gt;&lt;/strong&gt;. Donc voilà je vais vous en montrer une.&lt;br /&gt;
Pour qu'on soit d'accord tout de suite : &lt;ol&gt;&lt;li&gt;oui le code est sale&lt;/li&gt;
&lt;li&gt;oui je m'en fous&lt;/li&gt;
&lt;li&gt;non je n'accepterai aucune remarque&lt;/li&gt;
&lt;/ol&gt;
Bien. Ceci mis au clair, voici le code : &lt;pre&gt;est_vainqueur(papier, pierre).&lt;br /&gt;est_vainqueur(pierre, ciseaux).&lt;br /&gt;est_vainqueur(ciseaux, papier).&lt;br /&gt;&lt;br /&gt;corres(pierre, 1).&lt;br /&gt;corres(papier, 2).&lt;br /&gt;corres(ciseaux, 3).&lt;br /&gt;&lt;br /&gt;corresp(perdu, 0).&lt;br /&gt;corresp(nul, 1).&lt;br /&gt;corresp(gagne, 2).&lt;br /&gt;&lt;br /&gt;same(X, X).&lt;br /&gt;&lt;br /&gt;plus_joue([Papier,Pierre,Ciseaux], X) :- Pierre &amp;gt;= Papier, Pierre &amp;gt;= Ciseaux, same(X, pierre).&lt;br /&gt;plus_joue([Papier,Pierre,Ciseaux], X):- Pierre =&amp;lt; Papier, Papier &amp;gt;= Ciseaux, same(X, papier).&lt;br /&gt;plus_joue([Papier,Pierre,Ciseaux], X) :- Ciseaux &amp;gt;= Papier, Pierre =&amp;lt; Ciseaux, same(X, ciseaux).&lt;br /&gt; &lt;br /&gt;traiter(perdu, pierre, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).&lt;br /&gt;traiter(perdu, ciseaux, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).&lt;br /&gt;traiter(perdu, papier, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).&lt;br /&gt; &lt;br /&gt;traiter(nul, papier, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).&lt;br /&gt;traiter(nul, pierre, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).&lt;br /&gt;traiter(nul, ciseaux, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).&lt;br /&gt; &lt;br /&gt;traiter(gagne, ciseaux, [Papier, Pierre, Ciseaux], X) :- P is Papier + 1, same(X, [P,Pierre, Ciseaux]).&lt;br /&gt;traiter(gagne, papier, [Papier, Pierre, Ciseaux], X) :- P is Pierre + 1, same(X, [Papier,P, Ciseaux]).&lt;br /&gt;traiter(gagne, pierre, [Papier, Pierre, Ciseaux], X) :- C is Ciseaux + 1, same(X, [P,Pierre, C]).&lt;br /&gt; &lt;br /&gt;alea(X) :- random(1,4, X).&lt;br /&gt;&lt;br /&gt;stat(Coups, Nb) :- &lt;br /&gt;	plus_joue(Coups, Adv),&lt;br /&gt;	est_vainqueur(Coup, Adv),&lt;br /&gt;        corres(Coup, Nb).&lt;br /&gt;&lt;br /&gt;jouer(Coups, X) :- &lt;br /&gt;	random(1, 11, Al),&lt;br /&gt;	(Al =:= 1 -&amp;gt; alea(Nb);&lt;br /&gt;	stat(Coups, Nb)),&lt;br /&gt;	write(Nb), nl,&lt;br /&gt;	write('Gagné, nul ou perdu ?'), nl,&lt;br /&gt;	read(Score),&lt;br /&gt;	corresp(S, Score),&lt;br /&gt;	traiter(S, Coup, Coups, X).&lt;br /&gt;&lt;br /&gt;boucle(Coups) :-&lt;br /&gt;	jouer(Coups, N_coups),&lt;br /&gt;	write('1 pour rejouer, 0 pour arreter.'), nl,&lt;br /&gt;	read(X),&lt;br /&gt;	X =:= 1,&lt;br /&gt;	boucle(N_coups).&lt;br /&gt;	&lt;br /&gt;init :- boucle([0,0,0]).&lt;/pre&gt;
&lt;br /&gt;
Naturellement je vais faire quelques remarque, alors il faut savoir que c'est mon premier code en prolog, c'est pour ça qu'il est sale. Ensuite : ce code est surement optimisable (surtout au niveau des fonctions &lt;em&gt;traiter&lt;/em&gt;) mais ce n'est pas important, ce qu'il faut voir c'est que même si ce code est un peu plus long qu'un code OCaml bien optimisé il est quand même bien plus facile à comprendre par un non initié. Et c'est &lt;strong&gt;ça&lt;/strong&gt; l'important !
&lt;br /&gt;&lt;br /&gt;
Voilà, bonne journée !</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Ca-ne-marchera-pas#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Ca-ne-marchera-pas#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/42</wfw:commentRss>
      </item>
    
  <item>
    <title>Même les foetus mentent ...</title>
    <link>http://cygal.info/blog/index.php/post/Meme-les-foetus-mentent</link>
    <guid isPermaLink="false">urn:md5:d4f94b55791878ea8d83a74515d956ed</guid>
    <pubDate>Sun, 04 Nov 2007 15:24:00 +0100</pubDate>
    <dc:creator>Dark-Side</dc:creator>
        <category>Script</category>
        <category>prolog</category><category>sex</category>    
    <description>Bonjour, bonjour.&lt;br /&gt;
Bon avant de commencer : le titre n'a rien à voir avec l'article, mais depuis 3x17 je reve de sortir cette phrase, alors bon ... c'est fait ! :]    &lt;h3&gt;Le prolog&lt;/h3&gt;

&lt;h4&gt;Présentation&lt;/h4&gt;

Le Prolog est un langage de programmation. Sa particularité est d'être un langage de programmation &lt;i&gt;logique&lt;/i&gt;, d'où son nom : PROgrammation LOGique. Ce type de programmation se démarque des autres par son absence de notions tels que les fonctions (qu'on retrouve bien entendu, mais c'est pas aussi explicite qu'en impératif ou même en fonctionnel) ou boucles, ...&lt;br /&gt;
Par contre on y trouve des idées intéressantes. En effet un programme développé en prolog repose sur un ensembles de &lt;b&gt;clauses&lt;/b&gt;, des &lt;i&gt;faits&lt;/i&gt; ou des &lt;i&gt;règles&lt;/i&gt;.&lt;br /&gt;
Il faut savoir que le &lt;b&gt;&lt;i&gt;prolog&lt;/i&gt;&lt;/b&gt; est très utilisé pour établir des &lt;i&gt;intelligences artificielles&lt;/i&gt;, en effet grâce on clauses on va très facilement définir le comportement de notre IA.
&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;Un code en exemple : factoriel&lt;/h4&gt;

Oui, je sais, j'ai dit que les fonctions n'éxistaient pas. Mais ça ne veut pas dire qu'on ne peut pas en créer, ça veut dire qu'elles sont moins apparentes que d'habitude.&lt;br /&gt;
Comment ça je suis tordu ?&lt;br /&gt;
Bref voici le code :
&lt;pre&gt;fact(0,1). % ceci est un fait
fact(X, Y) :- N is X-1, fact(N, M), Y is X * M. % et ça une règle&lt;/pre&gt;
Comme vous pouvez le voir la première clause est un fait, c-a-d que pour tout X fact(0, X) renverra X = 1. Ce qui est marrant avec les faits c'est que leur réciproque marche de la même manière, ainsi fact(X, 1) renverra toujours X = 0. Donc avec un unique fait on a déclaré deux clauses.&lt;br /&gt;
Un autre truc marrant c'est que si jamais vous demandez à l'interpreteur si la relation fact(0,2) est vrai il va gentillement vous répondre : «No.»&lt;br /&gt;
L'autre truc fun c'est que si après on avait écrit fact(0, 2). lorsqu'on aurait demandé fact(0, X). l'interpreteur nous aurait fait la liste de toutes les réponses possibles.
&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;

Il est vrai que je n'ai pas fini de vous détailler le code précédent mais je suis pas là pour vour apprendre à coder, juste pour vous faire découvrir.&lt;br /&gt;
J'essayerai de vous montrer une belle IA un de ces jours histoire que vous vous rendiez bien compte de l'interet du prolog. En attendant j'espère vous avoir suffisament intéressé pour que vous vous documentiez un peu sur le prolog.&lt;br /&gt;
Au revoir.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Liens externes :&lt;/h4&gt;
:: &lt;a href=&quot;http://fr.wikipedia.org/wiki/Prolog&quot;&gt;Le prolog sur wikipedia&lt;/a&gt;. (fr)&lt;br /&gt;
:: &lt;a href=&quot;http://bat710.univ-lyon1.fr/~csolnon/prolog.html&quot;&gt;Une bonne introduction pour débuter en prolog&lt;/a&gt;. (fr)&lt;br /&gt;
:: &lt;a href=&quot;http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html&quot;&gt;Un bon tuto&lt;/a&gt;. (en)</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Meme-les-foetus-mentent#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Meme-les-foetus-mentent#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/41</wfw:commentRss>
      </item>
    
  <item>
    <title>Prologin</title>
    <link>http://cygal.info/blog/index.php/post/Prologin</link>
    <guid isPermaLink="false">urn:md5:6720c3405e399f64b95b90ddede8ef1b</guid>
    <pubDate>Wed, 24 Oct 2007 19:23:00 +0200</pubDate>
    <dc:creator>Dark-Side</dc:creator>
        <category>Divers</category>
        <category>fonctionnel</category><category>sex</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://cygal.info/blog/public/sites/prologin2008.png&quot; alt=&quot;prologin&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bonjour, bonjour !&lt;br /&gt;
Je fais juste un petit billet histoire de dire que je suis pas mort :]&lt;br /&gt;
&lt;br /&gt;
Donc voilà pour ceux qui ne seraient pas encore au courant&amp;nbsp;: prologin 2008 a officiellement débuté le 16 Octobre 2007&lt;br /&gt;
Bon ce qu'il faut faire maintenant c'est convaincre Pou de participer !!!&lt;br /&gt;
Donc voilà j'interpelle l'hypothétique visiteur de ce blog afin qu'il incite Pou à participer à prologin, de sorte que son commentaire (dont l'existance est encore moins probable) ne soit pas totalement inutile et naze et tout ce que vous voulez §§§&lt;br /&gt;
&lt;br /&gt;
Au revoir&amp;nbsp;! o/&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Prologin#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Prologin#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/40</wfw:commentRss>
      </item>
    
  <item>
    <title>Oh ! Mais que c'est beau !</title>
    <link>http://cygal.info/blog/index.php/post/Oh-Mais-que-cest-beau</link>
    <guid isPermaLink="false">urn:md5:4fd0a05df5e5c03d1e6fe19143b84043</guid>
    <pubDate>Thu, 20 Sep 2007 20:50:00 +0200</pubDate>
    <dc:creator>Dark-Side</dc:creator>
        <category>Divers</category>
        <category>design</category>    
    <description>    &lt;p&gt;Et oui, voilà ce que vous vous êtes dis si vous avez remarqué la présence du dernier plugin installé&amp;nbsp;: thème switcher.
En effet ce plugin permet à chaque visiteur de choisir le design qu'il préfère !&lt;br /&gt;
Pour l'occasion dissidents fait l'acquisition de deux nouveaux thèmes&amp;nbsp;: Lueur et Hermione.&lt;br /&gt;
N'hésitez pas à les essayer !&lt;br /&gt;
&lt;br /&gt;
PS: L'installation de ce module a demandé de nombreux jours de lobbying alros remerciez-moi&amp;nbsp;! :-°&lt;br /&gt;
&lt;em&gt;ou pas ...&lt;/em&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Oh-Mais-que-cest-beau#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Oh-Mais-que-cest-beau#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/39</wfw:commentRss>
      </item>
    
  <item>
    <title>Chiffrement de Vigenère</title>
    <link>http://cygal.info/blog/index.php/post/Chiffrement-de-Vigenere</link>
    <guid isPermaLink="false">urn:md5:9278247df8ca781e363eecf7fa5ae714</guid>
    <pubDate>Sat, 15 Sep 2007 21:58:00 +0000</pubDate>
    <dc:creator>Dark-Side</dc:creator>
        <category>Algo</category>
        <category>Crypto</category><category>inutile</category>    
    <description>Une brêve présentation de l'algorithme de cryptage inventé par Blaise de Vigenère au XVIe siècle.    Bon, je vais pas faire comme quelques rédacteurs de ce blog bien connu et vous dire que je vais vous sortir un article sur la cryptologie chaque semaine, déjà parce que je sais que je ne tiendrais jamais cet objectif, ensuite car je me doutes que ça va vite lasser tout le monde :-°&lt;br /&gt;&lt;br /&gt;
Mais bon comme le sujet m'interesse un temps soit peu et que je ne me préoccupes pas particulièrement de l'interêt que les visiteurs réguliers (alias les autres rédacteurs) peuvent lui porter je vais surement vous sortir quelques articles dessus ^_^&lt;br /&gt;&lt;br /&gt;
Pour ce premier article je vais vous parler du Chiffrement de Vigenère. Ceux qui connaissent un peu cette technique doivent s'attendra à voir apparaître ce &lt;a href=&quot;http://cygal.info/blog/public/Cryptographie/table_vigenere.png&quot;&gt;tableau&lt;/a&gt;.&lt;br /&gt;
Mais ce ne sera pas le cas (enfin si mais c'est juste pour vous dire qu'osef en fait :D ).&lt;br /&gt;&lt;br /&gt;
Non nous on va parler de la méthode mathématique, facilement implémentable dans un algorithme (plus facilement tu meurs d'ailleurs).&lt;br /&gt;
Le principe est très simple en mathématique les lettres de l'alphabet sont numérotées de 0 à 25 (oui toujours cette manie de mettre le premier index à 0), il devient alors très facile de crypter un texte lettre par lettre (comme ça va être le cas pour cette algorithme). Pour ce chiffrement on va devoir utiliser une clé de chiffrement et pour chaque lettre en clair va correspondre une lettre cryptée qui varie en fonction de la clé utilisée, et de la position de la lettre dans le texte.&lt;br /&gt;
En effet à chaque lettre va correspondre une lettre de la clé à partir de laquelle on trouvera la lettre cryptée.
Comme je me doute que ce n'est pas très clair voici un exemple :&lt;pre&gt;Texte de départ    : MOT&lt;br /&gt;Clé de chiffrement : CLE&lt;/pre&gt;
C'est assez basique comme exemple me direz vous mais on voit bien qu'à chaque lettre du mot MOT corresponds une lettre de la clé, vous pouvez alors vous demander : mais comment faire si le texte comporte plusieurs mots voir phrases, paragraphes ? La clé doit être  de la même longueur ? (c'est bien ces petites question ça montre pas du tout que je vous prends pour des cons et ça met une ambiance bonne enfant comme celle du site du zéro :-° )&lt;br /&gt;
Et bien je vais me faire un plaisir de vous répondre que non, il vous suffit de répeter la clé (*exclamations de surprise parmi la foule de lecteurs*), exemple :&lt;pre&gt;j'ai plusieurs mots dans mon texte&lt;br /&gt;clec lecleclec lecl ecle cle clecl&lt;/pre&gt;
Bon et maintenant qu'on a ça on fait quoi ?&lt;br /&gt;&lt;br /&gt;
Et bien on utilise la fonction mathématique (hyper compliquée soit dit en passant) que je vais vous montrer sous peu, ou alors on regarde dans le tableau la cellule présente à la colonne de la lettre à crypter et à la ligne de la lettre de la clé utilisée.&lt;br /&gt;
Avouez que ça devient vite lent et rébarbatif, au lieu de faire ça vous pouvez aussi utiliser le fait que chaque lettre qu'elle fasse partie de la clé, du texte à crypter ou du texte crypté a un index compris entre 0 et 25 (comme je vous l'ai appris précédement). Une fois qu'on a bien enregistré ce principe on a plus qu'à additionner pour chaque lettre du texte en clair : son index et l'index de la lettre de la clé correspondante, le résultat sera l'index de la lettre cryptée. Le problème une fois qu'on a fait ça c'est que par exemple si un z est associé à un y on a : 25+24 ce qui donne 49, c'est marrant on dirait que ça corresponds pas à une lettre cet index. :S&lt;br /&gt;
Ce qu'on peut faire c'est appliquer un modulo 26 à ce résultat, on obtient ainsi 49%26 = 23. Et 23 ça correspond à quoi ? A un 'x', c'est bon on a ce qu'on voulait !!!&lt;br /&gt;
Pour résumer on a la fonction suivante :
&lt;code&gt;crypté = (clair + cle) % 26&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Have fun ! (ou pas)</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Chiffrement-de-Vigenere#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Chiffrement-de-Vigenere#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/38</wfw:commentRss>
      </item>
    
  <item>
    <title>Les property</title>
    <link>http://cygal.info/blog/index.php/post/Les-property</link>
    <guid isPermaLink="false">urn:md5:4c90537e04262440dbe6fe5525630683</guid>
    <pubDate>Sat, 01 Sep 2007 16:27:00 +0000</pubDate>
    <dc:creator>Pmol</dc:creator>
        <category>Script</category>
        <category>python</category>    
    <description>&lt;p&gt;Ou comment appeler une fonction lorsque l'on accède à un attribut.&lt;/p&gt;    &lt;p&gt;Prenons un exemple.
Vous avez une classe &lt;code&gt;Rectangle&lt;/code&gt; qui a deux attributs&amp;nbsp;: &lt;code&gt;longueur&lt;/code&gt; et &lt;code&gt;largeur&lt;/code&gt;. Vous pouvez les redéfinir à volonté, bien.&lt;/p&gt;

&lt;pre&gt;
&amp;gt;&amp;gt;&amp;gt; class Rectangle(object):
...     def __init__(self, longueur, largeur):
...             self.longueur = longueur
...             self.largeur = largeur
... 
&amp;gt;&amp;gt;&amp;gt; a = Rectangle(10, 1)
&amp;gt;&amp;gt;&amp;gt; a.longueur
10
&amp;gt;&amp;gt;&amp;gt; a.longueur = 15
&amp;gt;&amp;gt;&amp;gt; a.longueur
15
&lt;/pre&gt;


&lt;p&gt;Mais s'il vous prend l'idée subite et stupide d'ajouter un attribut &lt;code&gt;aire&lt;/code&gt;, comment allez-vous faire pour que sa valeur soit toujours exacte&amp;nbsp;? Si vous modifiez la longueur du rectangle, il y aura un problème.&lt;/p&gt;
&lt;pre&gt;
&amp;gt;&amp;gt;&amp;gt; a.aire = a.longueur * a.largeur
&amp;gt;&amp;gt;&amp;gt; a.aire
15
&amp;gt;&amp;gt;&amp;gt; a.largeur = 3
&amp;gt;&amp;gt;&amp;gt; a.aire
15
&lt;/pre&gt;

&lt;p&gt;Bien que la largueur du rectangle ait changée, l'aire n'a pas bougé d'un poil. C'est un comportement normal (c'est une simple variable), mais ce n'est pas le comportement souhaité. On peut utiliser une fonction &lt;code&gt;trouverAire()&lt;/code&gt; ou &lt;code&gt;aire()&lt;/code&gt;, mais c'est nettement moins sex' qu'une variable non&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;Mais Python nous offre (comme d'autres langages) une solution adaptée à notre problème&amp;nbsp;: les &lt;em&gt;properties&lt;/em&gt;. Grâce au type prédéfini &lt;code&gt;property&lt;/code&gt;, on va pouvoir créer un attribut spécial de la classe Rectangle, qui sera (du côté utilisateur de la classe) identique à un attribut simple.
Cet attribut est spécial dans le sens où, lorsqu'on veut accéder à sa valeur, la modifier ou le supprimer, on passe part des fonctions.
Même si vous vous en foutez sûrement, voici  la signature de &lt;code&gt;property&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;
property(fget = None, fset = None, fdel = None, doc = None) -&amp;gt; property attribute
&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;fget&lt;/code&gt; est appelé quand on demande la valeur de l'attribut, &lt;code&gt;fset&lt;/code&gt; lorsqu'on affecte à l'attribut une valeur et &lt;code&gt;fdel&lt;/code&gt; quand on veut supprimer l'attribut. &lt;code&gt;doc&lt;/code&gt; est l'éventuelle docstring de l'attribut.&lt;/p&gt;


&lt;p&gt;Si on reprend notre exemple de rectangles, lorsque l'utilisateur va demander la valeur de l'aire de notre rectangle, Python appellera une fonction prédéfinie qui va renvoyer, après calcul, la valeur de l'aire. Cette valeur sera toujours correcte, puisque recalculée à chaque demande. Exemple&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;gt;&amp;gt;&amp;gt; class Rectangle(object):
...     def __init__(self, largeur, hauteur):
...             self.largeur = largeur
...             self.hauteur = hauteur
...     def _getAire(self):
...             return self.largeur * self.hauteur
...     aire = property(_getAire)
... 
&amp;gt;&amp;gt;&amp;gt; a = Rectangle(10, 5)
&amp;gt;&amp;gt;&amp;gt; a.aire
50
&amp;gt;&amp;gt;&amp;gt; a.largeur = 3
&amp;gt;&amp;gt;&amp;gt; a.aire
15
&lt;/pre&gt;


&lt;p&gt;Ici, chaque instance la classe Rectangle a un attribut &lt;code&gt;aire&lt;/code&gt; en &lt;strong&gt;lecture seule&lt;/strong&gt; (si un des trois paramètres n'est pas donné, alors l'opération correspondante lève une exception), recalculé à chaque demande.&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Les-property#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Les-property#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/37</wfw:commentRss>
      </item>
    
  <item>
    <title>Suis-je connecté ?</title>
    <link>http://cygal.info/blog/index.php/post/Suis-je-connecte</link>
    <guid isPermaLink="false">urn:md5:60b79d41aead37c89111a2b7185f8b29</guid>
    <pubDate>Fri, 31 Aug 2007 20:42:00 +0000</pubDate>
    <dc:creator>Pmol</dc:creator>
        <category>*Step</category>
        <category>Obj-C</category>    
    <description>&lt;p&gt;Quelle est mon Ip interne&amp;nbsp;? Mon Ip externe&amp;nbsp;? Mon temps de ping&amp;nbsp;?
Autant de questions existentielles que ce menulet va résoudre.&lt;/p&gt;    &lt;p&gt;On va commencer par le début&amp;nbsp;: c'est quoi un menulet&amp;nbsp;? Wikipédia ne nous disant rien dessus, je vais être obligé de vous expliquer ce que c'est. Un menulet, c'est un programme qui vient se placer dans la barre des menus (d'où le nom, c'est dans la même veine que les droplets). En général, il affiche des infos utiles, comme l'heure ou la charge de la batterie de votre ordinateur portable.&lt;/p&gt;


&lt;p&gt;Donc, mon menulet &lt;em&gt;à moi qu'il est beau&lt;/em&gt; affiche l'état de votre connexion (si vous êtes connecté à internet y'a une jolie icône verte, sinon une jolie icône rouge). Si vous cliquez dessus, un menu apparaît et vous donne votre Ip externe (celle que les gens de l'extérieur voient), votre Ip interne (celle de votre ordinateur dans votre réseau personnel) et le temps de ping d'une des Ip de &quot;google.fr&quot;. Ça ne sert pas à grand chose, mais quand on a besoin d'un de trucs là on est content d'avoir un outil tout fait qui les récupère.&lt;/p&gt;


&lt;p&gt;Au niveau technique, le menulet à été codé en Obj-C avec Cocoa (en théorie c'est compatible avec GNUstep, mais les essais de lasts on pas été convaincants). C'était mon premier &quot;vrai&quot; truc codé avec Obj-C, donc le codage a été un peu laborieux (merci à Psy pour son aide d'ailleurs).
Donc en gros, pour expliquer le fonctionnement&amp;nbsp;: au lancement du programme, je crée un NSMenuItem (c'est ce qui est affiché dans la barre des menus), je lui affecte une icône et un menu. Ensuite, je lance un NSThread qui ira chercher les informations sur le réseau toutes les 3 secondes et qui ira mettre à jour l'info affichée dans le menu. Pour récupérer les informations j'ai utilisé un script Bash, parce que utiliser les &quot;commandes&quot; (les truc comme grep ou cut) avec Obj-C, c'est vraiment la galère.&lt;/p&gt;


&lt;p&gt;Et parce qu'une appli sans screenshot c'est pas drôle&amp;nbsp;: &lt;br /&gt;
&lt;img src=&quot;http://the.pmol.free.fr//objc/menuletConnexion/screen.png&quot; alt=&quot;D&quot; /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://the.pmol.free.fr/objc/menuletConnexion/sources.zip&quot; hreflang=&quot;fr&quot;&gt;Les sources sont là&lt;/a&gt; - &lt;a href=&quot;http://the.pmol.free.fr//objc/menuletConnexion/menuletConnexion.app.zip&quot; hreflang=&quot;fr&quot;&gt;Le .app pour Mac Os X ici&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Suis-je-connecte#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Suis-je-connecte#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/36</wfw:commentRss>
      </item>
    
  <item>
    <title>Des photos de Pwasson à poil.</title>
    <link>http://cygal.info/blog/index.php/post/Des-photos-de-Pwasson-a-poil</link>
    <guid isPermaLink="false">urn:md5:7dc7454064479e910736e3eb137bed50</guid>
    <pubDate>Wed, 29 Aug 2007 19:00:00 +0000</pubDate>
    <dc:creator>Dark-Side</dc:creator>
        <category>Web</category>
        <category>IRC</category>    
    <description>Non j'déconne…    Paraît que c'est à la mode cette façon de commencer les articles donc je vais pas faire exception à la règle. :D&lt;br /&gt;&lt;br /&gt;
&lt;h3&gt;L'article, le vrai…&lt;/h3&gt;
&lt;div align=&quot;right&quot;&gt;&lt;em&gt;celui pour lequel j'ai du trouver cette introduction débile…&lt;br /&gt;&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h4&gt;Introduction&lt;/h4&gt;
&lt;span style=&quot;float: left;&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/3/b/0/178b402ec9a3a5e1e67d80cf6d6bb.jpg&quot; /&gt;&amp;nbsp;&lt;/span&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Depuis quelques années les systèmes de messagerie instantanée, plus communément appelés chats, connaissent un véritable essor.&lt;br /&gt;
L'un des plus connu de l'utilisateur &quot;lambda&quot; est Windows Live Messenger, développé par Microsoft, qui utilise le réseau MSN (&lt;em&gt;qui est aujourd'hui le 2e plus grand FAI des USA derrière AOL&lt;/em&gt;) et est sous licence propriétaire. Mais il y a, à l'heure actuelle, des équivalents libres de ce système de chat qui, bien que peu connu du grands public, méritent d'être cités comme c'est le cas de Jabber. À la différence des autres systèmes de messagerie instantanée, il ne se limite pas au simple chat mais permet l'échanges de données entre applications, ceci expliquant, entre autres, pourquoi il est si utilisé dans les entreprises et les administrations (pour plus d'informations sur Jabber direction &lt;a href=&quot;http://fr.wikipedia.org/wiki/Jabber&quot;&gt;wikipedia&lt;/a&gt;).
Mais naturellement Jabber est relativement récent (inventé en 1998) par rapport aux premiers systèmes de chats qui sont apparus dont IRC (crée en 1988) qui reste encore largement utilisé et est connu de tout dans le monde de l'informatique.&lt;/p&gt;
&lt;br /&gt;
&lt;h4&gt;IRC&lt;/h4&gt;
&lt;span style=&quot;float: right;&quot;&gt;&amp;nbsp;&lt;img src=&quot;http://pix.nofrag.com/9/5/9/1451ee509e177bf0a033c3dd436fd.png&quot; /&gt;&lt;/span&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;A l'heure actuel, IRC se meurt&lt;sup&gt;*&lt;/sup&gt; : en effet la proportion des utilisateurs d'IRC ne cesse de diminuer et ce, en partie à cause des autres systèmes de chat dont nous avons parlé précédemment. Mais en fait le principal problème d'IRC n'est pas tant l'essor de ces nouveaux logiciels que sa structure en retard sur les technologies actuelles. En effet il faut mémoriser la commande pour enregistrer les pseudos, les salons, et écrire des commandes compliquées pour s'identifier automatiquement; il y a beaucoup de modes pour les salons et les utilisateurs; cela est trop complexe pour encourager de nouveaux utilisateurs à choisir IRC. De plus il est vrai que les notions d'IRC sont différentes de celles des autres chats avec par exemple la notion de serveur, de chat à plusieurs mais aussi (et surtout) de channels (et donc de gestion de chan). Cela consitue une véritable révolution pour les novices de passer de WLM à IRC.&lt;br /&gt;
Mais quand je parle de structure en retard sur les technologies actuel je veux dire que la RFC de base ne prend pas en comptes des fonctions qui sont aujourd'hui considérées comme élémentaires. Prenez par exemple l'identification : lorsque l'on veut créer un client IRC on souhaite bien sur y intégrer (ou pas ? :-° ) une fonction de connexion automatique, je ne dirais pas que c'est une mission digne de Etan Hunt mais c'est quand même assez dur à mettre en place (fin bon c'est toujours plus facile que de coder un client msn :p ). Vous vous demanderez sans doute pourquoi et bien en fait la RFC n'ayant pas imposé une seule et unique fonction (d'ailleurs elle n'en a pas imposé du tout :-°) pour l'identification, chaque serveur gère cette étape différemment. De plus, mis à part l'identification, certains autres services sont assez bancals. Par exemple, pour une connexion basique, il faut fournir le port, le serveur et son hostname. Le développeur d'un client IRC bien connu par les administrateurs (et rédacteurs) de ce blog m'a fourni en exclusivité une info connue de lui seul ! En effet lors de la connexion avec le serveur il doit fournir 6 paramètres (dont l'hostname du serveur) et il semblerait que ces paramètre soit en fait totalement inutiles lors de la connexion puisque qu'il envoie 6 fois le pseudo de l'utilisateur.&lt;br /&gt;
&lt;br /&gt;
*: j'adore cette phrase, elle donne une petite touche mélodramatique à cet article et en plus elle rime ! :)&lt;/p&gt;
&lt;br /&gt;
&lt;h4&gt;Le remède ? IRC+&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&quot;Mè cay koi ssssa encoOôÔôOoreuh ?&quot; Allez vous me dire. Et bien IRC+ est un nouveau standard pour IRC. Les serveurs utiliseront des réponses similaires quel que soit le serveur où vous vous identifiez, rendant ainsi plus facile pour les développeurs de coder les fonctions dont nous avons parlé précédemment.&lt;br /&gt;
Lancée le 18 juin 2007 sous la forme de brouillon de RFC jusqu'au 20 décembre 2007, IRC+ regroupe toutes les commandes usuelles ainsi que des réponses à donner aux clients IRC pour qu'ils puissent fournir une interface graphique adéquate.&lt;br /&gt;
En clair IRC+ permettra : &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;de ne pas devoir mémoriser des commandes difficiles. Même un débutant pourra chatter sur IRC ;&lt;/li&gt;
&lt;li&gt;au client de comprendre ce que veulent les services ;&lt;/li&gt;
&lt;li&gt;au client d'afficher tous les messages des services dans la langue locale ;&lt;/li&gt;
&lt;li&gt;Au client de créer des scripts utiles, tels que le gestionnaire de mots de passes ;&lt;/li&gt;
&lt;li&gt;le cryptage des mots de passe en MD5 qui protégera vos mots de passe même sur des connexions sans SSL ;&lt;/li&gt;
&lt;li&gt;un rétro-compatibilité (tous les anciens clients pourront continuer de fonctionner avec les services comme d'habitude).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;S'il est mené à terme ce projet sera une petite révolution pour IRC et fera enfin cesser les vantardises des utilisateurs de Jabber ou des autres logiciel du même type selon lesquel IRC serait bon à mettre au placard.&lt;br /&gt;
Et vous que pensez vous de ce projet et d'IRC par rapport aux autres logiciel de messagerie instantanée ?&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Des-photos-de-Pwasson-a-poil#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Des-photos-de-Pwasson-a-poil#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/35</wfw:commentRss>
      </item>
    
  <item>
    <title>Un langage d'homme, un vrai ...</title>
    <link>http://cygal.info/blog/index.php/post/Un-langage-dhomme-un-vrai</link>
    <guid isPermaLink="false">urn:md5:0007ed651e50f18b46b08e5139620b73</guid>
    <pubDate>Mon, 27 Aug 2007 21:55:00 +0000</pubDate>
    <dc:creator>Dark-Side</dc:creator>
        <category>Algo</category>
        <category>ocaml</category><category>sex</category>    
    <description>Parce que y'en a marre de ces langages d'hérétiques ! (cf: billets précédents)&lt;br /&gt;
On va enfin pouvoir regarder un langage pur (et sayx) : l'ocaml ...    Je ne vais pas passer trois heures à vous présenter le caml vous avez déjà tous du écouter bluestorm moi je vais vous donner des exemples (des vrais) de la supériorité du caml sur les langages impurs.&lt;br /&gt;
Celà va d'un simple &quot;hello world ! &quot; à un bot irc §§
&lt;br /&gt;&lt;br /&gt;
&lt;h2&gt;Les différents exemples&lt;/h2&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;strong&gt;&lt;ins&gt;&quot;Hello, World !&quot;&lt;/ins&gt;&lt;/strong&gt;&lt;br /&gt;
Code ocaml :
&lt;pre&gt;print_string &quot;Hello, World !&quot;&lt;/pre&gt;
Code C:
&lt;pre&gt;#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
int main(int argc, char *argv[])
{
printf(&quot;Bonjour&quot;);
return 0;
}
&lt;/stdlib.h&gt;&lt;/stdio.h&gt;&lt;/pre&gt;
La lourdeur d'un langage impératif/impur n'est pas à démontrer plus avant sur cette exemple on va donc passer au suivant si vous le voulez bien !
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;strong&gt;&lt;ins&gt;Un algorithme de cryptage simple : le césar&lt;/ins&gt;&lt;/strong&gt;&lt;br /&gt;
Le code en ocaml :&lt;pre&gt;let rec replace crypted initial cle i long=&lt;br /&gt;    if i &amp;gt;= long then crypted&lt;br /&gt;    else &lt;br /&gt;      let cc = Char.chr (cle + Char.code initial.[i]) in&lt;br /&gt;      let sc = String.make 1 cc in replace (crypted ^ sc) initial cle (i+1) long&lt;br /&gt;;;&lt;br /&gt;&lt;br /&gt;let encrypt (mot: string) (cle: int) =&lt;br /&gt;  let long = String.length mot in&lt;br /&gt;  (replace &quot;&quot; mot cle 0 long)&lt;br /&gt;;;&lt;br /&gt;&lt;br /&gt;let string = read_line() in&lt;br /&gt;let cle = read_int ()in&lt;br /&gt;print_endline (encrypt string cle)&lt;/pre&gt;
Le code en C : &lt;pre&gt;#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#define MAX_BUF 50
void encrypt (char *chaine, int cle)
{
char *p;
for (p=chaine; *p != '\0'; ++p)
{
if(isalpha(*p+cle))
*p += cle;
}
printf (&quot;%s\n&quot;, chaine);
}
void clear(char* s, FILE* buffer)
{
char *p = NULL;
if((p = strchr(s, '\n')) != NULL)
*p = '\0';
else
while(getc(buffer) != '\n');
}
int main(int argc, char *argv[])
{
char chaine[MAX_BUF];
int cle;
fgets (chaine, MAX_BUF - 1, stdin);
clear(chaine, stdin);
scanf(&quot;%i&quot;, &amp;amp;cle);
encrypt (chaine, cle);
return 0;
}
&lt;/string.h&gt;&lt;/stdlib.h&gt;&lt;/stdio.h&gt;&lt;/pre&gt;
Une fois de plus le code C est plus long que le code en ocaml §§
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;strong&gt;&lt;ins&gt;Conway's game of life&lt;/ins&gt;&lt;/strong&gt;&lt;br /&gt;
Le code en ocaml : &lt;a href=&quot;http://www.pastebin.be/4803&quot;&gt;jeu_de_la_vie.ml&lt;/a&gt;&lt;br /&gt;
Le code en C : &lt;a href=&quot;http://www.perdu.com&quot;&gt;jeu_de_la_vie.c&lt;/a&gt; (merci à Cygal pour ce code gracieusement fournis, &lt;em&gt;il ne se doutais pas de ce à quoi allait servir sinon je ne l'aurais surement jamais eu en fait :p&lt;/em&gt;)&lt;br /&gt;
Concernant le code de Cygal vous pouvez enlever si vous le souhaitez tous les beaux commentaires qui ne servent à rien dans le contexte de cet article il n'en demeurera pas moins plus long, après certains pourront dire qu'il est mieux, le rendu plus jolie, etc etc mais reconnaissez que tous ces commentaires seraient dénués de bonne fois :p (tous comme ce billet ? :-° )
&lt;br /&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;strong&gt;&lt;ins&gt;Le bot IRC&lt;/ins&gt;&lt;/strong&gt;
&lt;br /&gt;
Euh ... disons qu'on en parlera à l'occasion d'un autre article :D
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Conclusion:&lt;/h2&gt;
&lt;br /&gt;
Bon vous direz que ce billet pue (mais bon on a vu pire hein :p ) et que y'a des langages surement mieux que le caml mais sans exemples concrets vous resterez sous sa domination (mouhahahaha ? :-° ) si jamais vous avez envie de rajouter des exemples en python, en ruby voir en Obj-C n'hésitez pas à &lt;del&gt;éditer ce billet&lt;/del&gt; à me les passer afin que je les soumettent à la censure/dégradent/refuse.&lt;br /&gt;
Merci de votre attention.&lt;br /&gt;
Vous pouvez désormais fermer votre navigateur et reprendre une activité normale ... :p
&lt;br /&gt;&lt;br /&gt;
PS: je promet de trouver une vrai idée pour les autres billets et de les rédiger un tant soit peu :p&lt;br /&gt;
PS 2: Et dire que j'ai emmerdé Poulet toute la journée pour ce billet, quand il va le voir il va être deg :D</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Un-langage-dhomme-un-vrai#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Un-langage-dhomme-un-vrai#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/33</wfw:commentRss>
      </item>
    
  <item>
    <title>En parlant de sucre...</title>
    <link>http://cygal.info/blog/index.php/post/En-parlant-de-sucre</link>
    <guid isPermaLink="false">urn:md5:8928d8f23e6860a2cde36810f68f6bca</guid>
    <pubDate>Mon, 27 Aug 2007 20:52:00 +0000</pubDate>
    <dc:creator>Poulet</dc:creator>
        <category>Divers</category>
        <category>cuisine</category>    
    <description>&lt;p&gt;Durant ma semaine de pérégrinations à &lt;a href=&quot;http://www.lafautesurmer.net/&quot;&gt;La Faute sur Mer&lt;/a&gt; (juste entre La Tranche sur Mer et L'Aiguillon sur Mer), j'ai fait la connaissance d'un vrai, d'un dur, d'un mec qui travaille le sucre, et qui sait faire, lui. Parce que hein, vous, qu'est-ce que vous y connaissez, dans le fond&amp;nbsp;?&lt;/p&gt;    &lt;p&gt;En effet, ce type est confiseur, ce qui fait autrement plus sérieux que &lt;a href=&quot;http://aiki.pingouin.be/?2006/11/08/850-behemothstacktrace-django-vs-symfony-vs-ror-mongrel-etc&quot;&gt;web-developper (lien quelconque, sans rapport avec le sujet. Commentaires intéressants&amp;nbsp;: “maintenant, bon, TOUT est hackable hein”)&lt;/a&gt;. Je sais pertinemment que ça ne vous intéresse pas, mais je vais quand même vous parler de lui. Avec des photos.&lt;/p&gt;


&lt;p&gt;Conscient que ça lui fait une pub extraordinaire dans l'unique rue commerciale de La Faute sur Mer, ce brave artisan se laisse admirer quotidiennement par le grand public lors de la fabrication de certaines de ses sucreries, notamment des sucettes. Et comme le public n'avait que ça à faire (avec une eau de mer à -12 °C), le public le regardait tous les jours.&lt;/p&gt;


&lt;p&gt;Voici en gros les étapes de fabrication des sucettes&amp;nbsp;: foutez une marmite d'eau à bouillir, balancez dans les 8 kgs de sucre dedans, un produit spécial qui colore-et-parfume la pâte, et éventuellement d'autres trucs (pour une sucette au raisin, vous pouvez vous amuser à mettre des pépins de raisin, &quot;pour faire vrai&quot;. Mais lui il en fait pas).&lt;/p&gt;


&lt;p&gt;Ensuite, une fois que le tout a bien cuit, vous pouvez sortir la pâte (qui sera alors assez liquide, et surtout bouillante), et l'étaler dans un moule prévu à cet effet, sur une surface non-chauffée. Le temps qu'elle refroidisse quelque peu, remaniez la pâte, de façon à ce qu'elle soit homogène - si vous faites des sucettes aux caramels, éclatez les bulles d'un coup sec du tranchant de la main (comme Bruce Lee, ou un truc comme ça).&lt;/p&gt;


&lt;p&gt;Lorsqu'il est possible de manier la pâte sans se brûler (ou pas trop), et que celle-ci commence à se solidifier, sortez la de son récipient, qui ne servait en réalité qu'à contenir ses &lt;a href=&quot;http://fr.wikipedia.org/wiki/Épanchement&quot;&gt;épanchements&lt;/a&gt;. Si la pâte se fait la malle, remettez-la dans le moule, et épongez le sol.&lt;/p&gt;


&lt;p&gt;Il est maintenant temps de séparer le bloc de pâte en deux parts à peu près égales. L'une des deux est prête, mais surveillez-la tout de même de temps en temps afin de vous assurer qu'elle reste uniforme. Trouvez une personne musclée (vous même le cas échéant), afin qu'elle se saisisse de l'autre partie de pâte, et l'étire par un bout - disons jusqu'à bout de bras - pour ensuite la replier par dessus. Répétez l'opération, afin d'étirer au maximum la pâte, et de multiplier ainsi les plis - vous l'aurez deviné, au fur et à mesure, la pâte blanchira.&lt;/p&gt;


&lt;p&gt;Vous disposerez alors de deux couleurs de pâte, qu'il suffira de découper en blocs plus petits, d'étirer un peu, et d'assembler en alternant à chaque fois les couleurs. Repliez la plaque ainsi obtenue pour en faire une espèce de boule (la pâte doit, à ce stade, être de moins en moins maniable donc ne traînez pas trop), et allongez-la.&lt;/p&gt;


&lt;p&gt;Vous pouvez désormais former des tubes de la largeur souhaitée en enroulant la pâte afin de lui donner le même aspect que les berlingots, et couper à l'aide de gros ciseaux - profitez du fait que la pâte est encore malléable pour enfoncer dedans de petits bâtons, et vous obtenez une sucette pour de vrai&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Pour ceux qui n'auraient rien compris, voici les photos&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://pix.nofrag.com/d/6/6/343cadd3af46bd079729b9ec1b01b.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/d/6/6/343cadd3af46bd079729b9ec1b01bt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/b/9/0/ea2d2a245d9388f05669e7660879d.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/b/9/0/ea2d2a245d9388f05669e7660879dt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/b/b/7/7d91535fe288f6ae5a200d4d52236.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/b/b/7/7d91535fe288f6ae5a200d4d52236t.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/6/f/f/1ca6352e4683a18fce7c4a1ffb147.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/6/f/f/1ca6352e4683a18fce7c4a1ffb147t.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://cygal.info/blog/index.php/post/url=http://pix.nofrag.com/0/3/3/b9872a65a1a3b0769fa745c124f3e.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/0/3/3/b9872a65a1a3b0769fa745c124f3et.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/0/9/5/29c7372bec4d02459103559d3a76e.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/0/9/5/29c7372bec4d02459103559d3a76et.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://pix.nofrag.com/1/b/6/6f8a425568fc14fd83aa3e8f017c3.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/1/b/6/6f8a425568fc14fd83aa3e8f017c3t.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/d/e/e/48854855ac90e383a581247c32f8a.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/d/e/e/48854855ac90e383a581247c32f8at.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/9/2/9/d37e7417f88c5051ddf6ef5934e36.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/9/2/9/d37e7417f88c5051ddf6ef5934e36t.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/4/3/d/b0a16e2db32e663e0749516af2a5d.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/4/3/d/b0a16e2db32e663e0749516af2a5dt.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/e/a/f/1ce6a30f7acb585fd7bfe833749ef.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/e/a/f/1ce6a30f7acb585fd7bfe833749eft.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://pix.nofrag.com/9/c/0/b13ef70ef3aeb4ca3e78cdd28a23a.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/9/c/0/b13ef70ef3aeb4ca3e78cdd28a23at.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Oui c'est très moche comme présentation, si quelqu'un pouvait m'aider... je lui serais très reconnaissant. Bref.&lt;/p&gt;





&lt;p&gt;Bien entendu tout ceci est parfaitement inintéressant, tout autant que tout le reste (de ce que j'ai écrit sur ce blog, s'entend). Pour me rattraper, le script qui a servi à redimensionner les images (un véritable &lt;a href=&quot;http://www.tout-savoir.net/lexique/definition/2418/droplet/&quot;&gt;droplet&lt;/a&gt; - je déteste vraiment Applescript, au passage)&amp;nbsp;:
/// on open of fichiers
tell application &quot;Image Events&quot;
launch
repeat with fichier in fichiers
set une_image to open fichier
scale une_image by factor 0.25
set le_path to (path of fichier)
save une_image as PNG in (get text 1 thru ((length of le_path) - 4) of le_path) &amp;amp; &quot;.png&quot;
end repeat
end tell
end open
///&lt;/p&gt;


&lt;p&gt;Et enfin, spécialement pour Katen, qui ne peut s'intéresser à aucun autre morceau de cet article, une spécialité du coin&amp;nbsp;:
&lt;a href=&quot;http://pix.nofrag.com/a/b/3/00a24b27808258aba5130a918fa7e.html&quot;&gt;&lt;img src=&quot;http://pix.nofrag.com/a/b/3/00a24b27808258aba5130a918fa7et.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Merci de votre indulgence, et merci aussi à Pwasson pour ses photos (73 prises en tout en l'espace d'une heure...). Naturellement, la mauvaise qualité apparente des photos est fortement due à celle, bien réelle, de l'appareil, ainsi qu'à la perte engendrée par le changement de format (a priori. En fait quand on les regarde pas en taille réelle ça va.)&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/En-parlant-de-sucre#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/En-parlant-de-sucre#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/32</wfw:commentRss>
      </item>
    
  <item>
    <title>Du code en Python</title>
    <link>http://cygal.info/blog/index.php/post/Du-code-en-Python</link>
    <guid isPermaLink="false">urn:md5:d33df24537929e09dcd02a575ab2d56f</guid>
    <pubDate>Sun, 22 Jul 2007 09:19:00 +0000</pubDate>
    <dc:creator>Poulet</dc:creator>
        <category>Script</category>
        <category>python</category>    
    <description>    &lt;p&gt;Parce que trop de sucre rend &lt;del&gt;idiot&lt;/del&gt; diabétique. &lt;a href=&quot;http://docs.python.org/lib/defaultdict-examples.html&quot;&gt;Visit my website&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Du-code-en-Python#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Du-code-en-Python#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/31</wfw:commentRss>
      </item>
    
  <item>
    <title>Du sucre en ruby</title>
    <link>http://cygal.info/blog/index.php/post/Du-sucre-en-ruby</link>
    <guid isPermaLink="false">urn:md5:dfe4b1861f1f4ffdfacc4e4ef8f797af</guid>
    <pubDate>Sat, 21 Jul 2007 14:57:00 +0200</pubDate>
    <dc:creator>ArtMoonik</dc:creator>
        <category>Script</category>
        <category>hachage</category><category>ruby</category>    
    <description>&lt;p&gt;Les Hash faciles et pratiques.&lt;/p&gt;    &lt;p&gt;Quand on est amené à faire du &lt;a href=&quot;http://fr.wikipedia.org/wiki/Fonction_de_hachage&quot; hreflang=&quot;fr&quot;&gt;hachage&lt;/a&gt; en ruby, on fait des trucs genre:&lt;/p&gt;
&lt;pre&gt;
tableau[cle] &amp;lt;&amp;lt; donnee
&lt;/pre&gt;


&lt;p&gt;Bien sur si c'est la première fois qu'on croise cette clé alors on aura une erreur genre:&lt;/p&gt;
&lt;pre&gt;
NoMethodError: undefined method `&amp;lt;&amp;lt;' for nil:NilClass
&lt;/pre&gt;

&lt;p&gt;Donc à la place on fait:&lt;/p&gt;
&lt;pre&gt;
tableau[cle] = [donnee]
&lt;/pre&gt;

&lt;p&gt;Au final ca donne:&lt;/p&gt;
&lt;pre&gt;
if tableau[cle].nil? then
   tableau[cle] = [donnee]
else
    tableau[cle] &amp;lt;&amp;lt; donnee
end
&lt;/pre&gt;


&lt;p&gt;Bien sûr c'est horriblement laid et ca prend de la place et ca fait perdre du temps, bref ca pue. Donc, alternative, donnons à notre Hash 'tableau' une valeur par défaut autre qu'un nil, soit un Array ici:&lt;/p&gt;
&lt;pre&gt;
tableau = Hash.new { |h,k| h[k] = [] }
tableau[cle] &amp;lt;&amp;lt; donnee
&lt;/pre&gt;


&lt;p&gt;Et puis le hachage, c'est bien :)
Bonsoir les loutres.&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Du-sucre-en-ruby#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Du-sucre-en-ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/30</wfw:commentRss>
      </item>
    
  <item>
    <title>GNUstep me manque.</title>
    <link>http://cygal.info/blog/index.php/post/GNUstep-me-manque</link>
    <guid isPermaLink="false">urn:md5:05eb9a6314f4e96298378ef9c2cdadd5</guid>
    <pubDate>Sat, 21 Jul 2007 11:21:00 +0000</pubDate>
    <dc:creator>Poulet</dc:creator>
        <category>Divers</category>
        <category>inutile</category>    
    <description>    &lt;p&gt;Je suis condamné à utiliser Windows XP en permanence. GNUstep me manque, c'est terrible. Une fois rentré, faudra qu'on regarde comment on peut contribuer, lasts, hein, dis, hein.&lt;/p&gt;


&lt;p&gt;En plus j'ai même pas Terminal.app, je fais rien d'intéressant. Regretterais-je juste son look si flashy&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;A part ça, je serais curieux de savoir si on a encore des visiteurs. VOUS POURRIEZ ECRIRE&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/GNUstep-me-manque#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/GNUstep-me-manque#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/29</wfw:commentRss>
      </item>
    
  <item>
    <title>Debout les gars, réveillez-vous !</title>
    <link>http://cygal.info/blog/index.php/post/Debout-les-gars-reveillez-vous</link>
    <guid isPermaLink="false">urn:md5:b697ea589dc1e5c026862ac062ad70f7</guid>
    <pubDate>Mon, 02 Jul 2007 07:23:00 +0000</pubDate>
    <dc:creator>Poulet</dc:creator>
        <category>Script</category>
        <category>fonctionnel</category><category>python</category>    
    <description>&lt;p&gt;Salut les poulpes. &lt;q&gt;Ouaaaaais !&lt;/q&gt; firent les poulpes.&lt;/p&gt;


&lt;p&gt;Comme vous êtes un peu morts ces jours-ci, un petit truc pour vous détendre les zygomatiques, à vous, oui, vous qui ne pratiquez pas des langages pseudo-fonctionnels, mais des vrais langages de mâles.&lt;/p&gt;    &lt;p&gt;Dans un langage normal, disons, &quot;sympa&quot;, on aurait ça&amp;nbsp;: &lt;code&gt;let sommelong = map length&lt;/code&gt;. C'est lisible (sous réserve d'un peu d'habitude peut-être), c'est efficace. Après, on rigole bien, on a une fonction de type &lt;code&gt;[[a]] -&amp;gt; [Int]&lt;/code&gt;, on peut écrire &lt;code&gt;sommelong [[1, 2, 3], [3,4]]&lt;/code&gt; aussi bien que &lt;code&gt;sommelong [&quot;Foo&quot;, &quot;BarBarBar&quot;]&lt;/code&gt;, ce qui est totalement inutile (ça prouve bien que mon exemple est à chier), mais c'est bien et tout. Pour les étrangers incultes et barbares, c'est une application partielle&amp;nbsp;: map est de type &lt;code&gt;(a -&amp;gt; b) -&amp;gt; [a] -&amp;gt; [b]&lt;/code&gt;, c'est à dire que son premier argument est une fonction prenant un type a quelconque (enfin, je crois) et renvoyant un type b tout aussi quelconque (même pas forcément le même). Or si on écrit &lt;code&gt;map length&lt;/code&gt; (comme on l'a fait juste au début, ça n'est pas un hasard), on crée une nouvelle valeur fonctionnelle qui correspond à un map dont le premier argument est length - cependant cette valeur fonctionnelle est directement utilisable comme fonction. On peut donc lui nommer un nom (comme on a fait) et l'appliquer après à des listes (comme on a fait aussi), genre &lt;code&gt;sommelong uneliste&lt;/code&gt;. C'est comme si l'on avait fait &lt;code&gt;map length uneliste&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Dans un langage moins sympa (zB. Python) mais qui essaye de se faire des potes poulpes (&lt;q&gt;Ouaaaaais !&lt;/q&gt;), on est bien emmerdé, parce que&amp;nbsp;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;On a bien une fonction map, qui prend en argument une fonction et une liste (en fait, &quot;pas seulement&quot;, mais compliquons pas, tfaçon ça marche).&lt;/li&gt;
&lt;li&gt;On a bien une fonction len, qui sert à calculer la longueur d'une séquence^W liste.&lt;/li&gt;
&lt;li&gt;Mais on sait pas comment combiner les deux.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On pourrait faire une fonction chiante qui se tape ce rôle, mais ça sert à rien que je le fasse puisque la doc officielle donne de toute façon le code correspondant. Moi, je voulais juste vous dire que ça existe, sous le nom de functools.partial dans Python 2.5&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
&amp;gt;&amp;gt;&amp;gt; import functools
&amp;gt;&amp;gt;&amp;gt; sommelong = functools.partial(map, len)
&amp;gt;&amp;gt;&amp;gt; sommelong([[1,2,3], &amp;quot;foo&amp;quot;])
[3, 3]
&lt;/pre&gt;

&lt;p&gt;L'exemple est toujours foireux, mais vous êtes cultivé (ou hilare, ce qui est bien aussi).&lt;/p&gt;


&lt;p&gt;Voici donc &lt;a href=&quot;http://docs.python.org/lib/module-functools.html&quot; hreflang=&quot;en&quot;&gt;la page officielle de functools&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;C'est puissant.&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Debout-les-gars-reveillez-vous#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Debout-les-gars-reveillez-vous#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/28</wfw:commentRss>
      </item>
    
  <item>
    <title>XSS : Sortez couverts.</title>
    <link>http://cygal.info/blog/index.php/post/XSS-%3A-Sortez-couverts</link>
    <guid isPermaLink="false">urn:md5:55292f335777bb82fafc8e0a0e5630d9</guid>
    <pubDate>Sun, 17 Jun 2007 00:40:00 +0200</pubDate>
    <dc:creator>Cygal</dc:creator>
        <category>Web</category>
        <category>Sécurité</category>    
    <description>&lt;p&gt;Si si.&lt;/p&gt;    &lt;p&gt;C'est important de savoir se protéger des failles XSS. &lt;a href=&quot;http://www-1.ibm.com/support/docview.wss?uid=swg21233077&amp;amp;loc=%22%3E%3Cbody%20onload=alert(&amp;#039;OWNED&amp;#039;)%20x=%22en_US&quot; hreflang=&quot;en&quot;&gt;Voici de la doc&lt;/a&gt;. Je suis sympa quand même.&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/XSS-%3A-Sortez-couverts#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/XSS-%3A-Sortez-couverts#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/26</wfw:commentRss>
      </item>
    
  <item>
    <title>Medibuntu devient sex</title>
    <link>http://cygal.info/blog/index.php/post/Medibuntu-devient-sex</link>
    <guid isPermaLink="false">urn:md5:7b76efd5d3c473c3b18a8a072687f6c2</guid>
    <pubDate>Tue, 12 Jun 2007 11:15:00 +0200</pubDate>
    <dc:creator>pmd</dc:creator>
        <category>Web</category>
        <category>sex</category><category>ubuntu</category>    
    <description>&lt;p&gt;Oui, sex&amp;nbsp;!&lt;/p&gt;    &lt;p&gt;Bien, donc &lt;del&gt;j'utilisais&lt;/del&gt; j'utilise les dépôts Medibuntu (ça mérite un majuscule ou pas&amp;nbsp;? ) et j'ai découvert il y a peu leur nouveau site&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Enfin nouveau site, il faut pas pousser hein&amp;nbsp;: il est toujours couleur &lt;ins&gt;carotte&lt;/ins&gt;. Par contre ils ont enfin un nouveau nom de domaine et celui-ci ne fait pas Croix-Rouge (oui oui, majuscules)&amp;nbsp;: &lt;a href=&quot;http://www.medibuntu.org/&quot; hreflang=&quot;fr&quot;&gt;http://www.medibuntu.org/&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Avoues que c'est tout de même beaucoup plus sexy que &lt;del&gt;Cygal&lt;/del&gt; l'ancien nom de domaine&amp;nbsp;: &lt;a href=&quot;http://medibuntu.sos-sts.com/&quot; hreflang=&quot;fr&quot;&gt;http://medibuntu.sos-sts.com/&lt;/a&gt; . J't'e l'avais dit, ça faisait Croix-Rouge.&lt;/p&gt;


&lt;p&gt;Bref, maintenant que tu sais cette &lt;del&gt;grande&lt;/del&gt; nouvelle &lt;del&gt;qui a bouleversé ta vie&lt;/del&gt; il faut modifier tes dépôts. Voici les nouveaux&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
deb http://fr.packages.medibuntu.org/ dapper free non-free ## Pour dapper
deb http://fr.packages.medibuntu.org/ edgy   free non-free ## Pour edgy
deb http://fr.packages.medibuntu.org/ feisty free non-free ## T'auras deviner pour quoi c'est ;)
&lt;/pre&gt;


&lt;p&gt;Il faut aussi la clé pour ne pas avoir d'erreurs (ou de je sais pas quoi). Et comme je suis un homme bon, très bon, je te donne une commande qui va le faire&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
wget -q http://fr.packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - &amp;amp;&amp;amp; sudo apt-get update
&lt;/pre&gt;


&lt;p&gt;Voilà, c'était mon &lt;del&gt;dernier&lt;/del&gt; premier billet ...&lt;/p&gt;</description>
    
    
    
          <comments>http://cygal.info/blog/index.php/post/Medibuntu-devient-sex#comment-form</comments>
      <wfw:comment>http://cygal.info/blog/index.php/post/Medibuntu-devient-sex#comment-form</wfw:comment>
      <wfw:commentRss>http://cygal.info/blog/index.php/feed/rss2/comments/25</wfw:commentRss>
      </item>
    
</channel>
</rss>