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

<channel>
	<title>Romain&#039;s blog &#187; Saimal</title>
	<atom:link href="http://blog.p.engu.in/category/saimal/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.p.engu.in</link>
	<description>Toute une continuité d&#039;informations inutiles.</description>
	<lastBuildDate>Sun, 02 May 2010 14:50:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Serveur de fonctionnaires</title>
		<link>http://blog.p.engu.in/2008/05/27/serveur-de-fonctionnaires/</link>
		<comments>http://blog.p.engu.in/2008/05/27/serveur-de-fonctionnaires/#comments</comments>
		<pubDate>Tue, 27 May 2008 12:05:45 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Saimal]]></category>
		<category><![CDATA[looooooooool]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/?p=496</guid>
		<description><![CDATA[J'en conclu donc qu'on ne peut y accéder qu'entre 21h59 et 22h00 ?]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:b400527d7e63be3c514432c647195f8c52666ea2'><p><img src="http://pigsty.vaginus.org/sncf.png" /></p>
<p>J'en conclu donc qu'on ne peut y accéder qu'entre 21h59 et 22h00 ?</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2008/05/27/serveur-de-fonctionnaires/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Dix pratiques pour être un mauvais programmeur</title>
		<link>http://blog.p.engu.in/2008/04/14/dix-pratiques-pour-etre-un-mauvais-programmeur/</link>
		<comments>http://blog.p.engu.in/2008/04/14/dix-pratiques-pour-etre-un-mauvais-programmeur/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 11:18:22 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[INL]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2008/04/14/dix-pratiques-pour-etre-un-mauvais-programmeur/</guid>
		<description><![CDATA[Il est malheureusement fréquent de rencontrer du code vraiment mauvais, principalement dans des petits projets, des projets "vites faits bien faits", mais également dans de plus grosses usines à gaz, ou souvent dans les entreprises qui éditent des logiciels propriétaires. Mais est-il facile pour autant de devenir un mauvais programmeur ? Voici 10 astuces qui [...]]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:c8e420073556567c9e0927f677acd2ec1d064a9a'><p>Il est malheureusement fréquent de rencontrer du code vraiment mauvais, principalement dans des petits projets, des projets "vites faits bien faits", mais également dans de plus grosses usines à gaz, ou souvent dans les entreprises qui éditent des logiciels propriétaires.</p>
<p>Mais est-il facile pour autant de devenir un mauvais programmeur ?</p>
<p><b>Voici 10 astuces qui permettront à tout un chacun de s'en approcher.</b></p>
<p><span id="more-487"></span></p>
<h4>I. Obscurcir le code</h4>
<p>La première chose que tout mauvais programmeur doit savoir, est qu'il est absolument hors de question de mettre des commentaires, à moins que ceux-ci soient tout sauf pertinents. Mieux, il peut être très intéressant de mettre un excès de commentaires totalement inutiles qui ne font qu'obscurcir davantage le code.</p>
<p>Par ailleurs, il est impératif de ne pas respecter les <a href="http://fr.wikipedia.org/wiki/Style_d'indentation">conventions d'indentation habituelle</a>. Abandonnez même toute indentation, et favorisez l'écriture de plusieurs instructions sur une même ligne. N'hésitez pas à faire des fichiers de plus de 2 000 lignes, préférez les très grosses fonctions à plusieurs niveaux d'indentations.<br />
Rajoutez à ça des <b>goto</b> et vous obtiendrez un code illisible.</p>
<h4>II. Réinventer la roue</h4>
<p>Vous avez un traitement basique à effectuer ? Vous doutez des fonctions standards ? Vous vous emmerdez pendant votre pause café ?<br />
Pas de problème ! Réécrivez vous-même la fonction ou la classe en question !</p>
<p>Ceci a particulièrement son intérêt si vous utilisez un langage tel que Python ou Java, dans lesquels il est impossible de retrouver les performances des fonctions que vous copiez qui elles sont dans un langage bas niveau tel que le C.</p>
<p>Bien évidemment, encore une fois, prenez le soin de ne <b>pas</b> commenter, afin que vos collègues ne puissent pas saisir la subtilité de votre code et en soient dépendant.</p>
<p>Voici un bel exemple où un programmeur décide de réinventer le tri à bulle (pourtant déjà pas très efficace) en réduisant ses performances (<a href="http://fr.thedailywtf.com/Articles/QuelleEstLaTailleDeMaStackTRI(T).aspx">source</a>) :</p>
<pre class="c">&nbsp;
<span style="color: #993333;">void</span> sortMe<span style="color: #66cc66;">&#40;</span>ListType list<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> i = <span style="color: #cc66cc;">0</span>; i &lt; <span style="color: #66cc66;">&#40;</span>list.<span style="color: #202020;">entries</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>; i++<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> &gt; list<span style="color: #66cc66;">&#91;</span>i<span style="color: #cc66cc;">+1</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
      list.<span style="color: #202020;">swap</span><span style="color: #66cc66;">&#40;</span>i, i<span style="color: #cc66cc;">+1</span><span style="color: #66cc66;">&#41;</span>;
      sortMe<span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<h4>III. Variables globales</h4>
<p>Contrairement à ce que l'on peut supposer, le passage d'argument à une fonction est quelque chose qu'il faut éviter à tout prix.<br />
Il est bien plus naturel de faire un maximum de variables globales. Ceci aura l'avantage de rendra le code bien moins lisible et moins naturel.</p>
<p>Par exemple :</p>
<pre class="c">&nbsp;
<span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #993333;">int</span> a;
<span style="color: #993333;">int</span> b;
<span style="color: #993333;">int</span> result;
&nbsp;
<span style="color: #993333;">void</span> calcul<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	result = a + b;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> argc, <span style="color: #993333;">char</span>** argv<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	a = atoi<span style="color: #66cc66;">&#40;</span>argv<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
	b = atoi<span style="color: #66cc66;">&#40;</span>argv<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
	calcul<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, result<span style="color: #66cc66;">&#41;</span>;
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>Notez de non seulement grâce à ce code vous aurez utilisé des variables globales comme un gros gland, mais qu'en plus vous aurez pris soint de ne pas avoir fait de vérification de paramètres avant de les utiliser (si il y a bien trois cases dans <b>argv</b>, et si ce sont des entiers), ce qui augmente davantage encore votre niveau de mauvais programmeur.</p>
<h4>IV. Convention de noms</h4>
<p>Tout mauvais programmeur le sait : respecter une convention de nommage est quelque chose de fastidieux qui facilite la lisibilité de votre code.</p>
<p>Préférez donner des noms soit <b>très courts</b> (une lettre ou deux), soit <b>très longs</b> (plus de quinze lettres).</p>
<p>Voici un exemple de code très représentatif des mauvaises pratiques que vous devez de respecter :</p>
<pre class="c">&nbsp;
&nbsp;
class A
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">int</span> j;
&nbsp;
public:
&nbsp;
	A<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> _j, <span style="color: #993333;">int</span> _k<span style="color: #66cc66;">&#41;</span>
		: j<span style="color: #66cc66;">&#40;</span>_j+_k<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #993333;">int</span> GetTheJVariableWhichIsPrivate<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333;">const</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #b1b100;">return</span> j; <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>;
&nbsp;</pre>
<p>Ainsi que vous le voyez dans ce bref extrait que vous êtes encouragé à utiliser comme modèle, il faut absolument suivre les règles suivantes :</p>
<ul>
<li> <b>Toujours</b> nommer vos variables privées avec une seule lettre non significative.</li>
<li> Vous pouvez pousser le vice jusqu'à nommer vos classes avec une seule lettre, comme dans cet exemple, mais là c'est d'un niveau bien plus élevé que ce vous pourrez espérer atteindre dans vos rêves les plus fous. </li>
<li> Dans vos fonctions (ici le constructeur), ne <b>jamais</b> donner de nom explicite aux arguments. Ainsi, en plus de ne pas savoir ce que fait la fonction, les utilisateurs de celle-ci ne sauront pas non plus comment s'en servir.</li>
<li> Détailler à mort le nom de vos fonctions et méthodes, mais sans donner d'information utile, juste ce que l'on sait déjà. </li>
<li> Notez aussi que le constructeur de <b>A</b> fait la somme de <b>_j</b> et <b>_k</b> pour la stocker dans l'attribut <b>j</b> de la classe, sans aucune raison apparente ni justification. </li>
</ul>
<p>Vous pouvez aussi découvrir dans <a href="http://thedailywtf.com/Articles/A-Method-by-Any-Other-Name.aspx">cet article</a> un autre exemple de mauvaise convention de nommage.</p>
<h4>V. Copié/coller</h4>
<p>La factorisation consiste à mettre à un seul endroit du code utilisé plusieurs fois. Ceci facilite la maintenance de ce code, et c'est pourquoi vous devez l'éviter à tout prix !</p>
<p>Au contraire, préférez la duplication de code, en n'oubliant pas si possible de prendre, au passage, les quelques commentaires qui subsistaient dans le code original. Bien sur, si vous êtes amené à modifier la copie de ce code, surtout ne pas mettre à jour ces commentaires, afin d'obscurcir davantage.</p>
<p>Voici un exemple de bout de code que je n'invente pas, tout droit sortit d'un projet très connu sur IRC, qui n'est autre que <b>CS</b>, le service IRC, utilisé en particulier par le réseau IRC <b>Orange</b> avec le pseudo <b>IriX</b> :</p>
<pre class="c">&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>caddr == <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
   add_userinfo<span style="color: #66cc66;">&#40;</span>csadminchan, nick, atoi<span style="color: #66cc66;">&#40;</span>level<span style="color: #66cc66;">&#41;</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, cryptpass, time<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
   add_user_addrinfo<span style="color: #66cc66;">&#40;</span>csadminchan, nick, usrhost<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>caddr != <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
   add_userinfo<span style="color: #66cc66;">&#40;</span>csadminchan, nick, atoi<span style="color: #66cc66;">&#40;</span>level<span style="color: #66cc66;">&#41;</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, <span style="color: #000000; font-weight: bold;">FALSE</span>, cryptpass, time<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
   add_user_addrinfo<span style="color: #66cc66;">&#40;</span>csadminchan, nick, usrhost<span style="color: #66cc66;">&#41;</span>;
   add_user_addrinfo<span style="color: #66cc66;">&#40;</span>csadminchan, nick, ip_addr<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>caddr == <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
   send_to_server<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;:%s NOTICE %s : Profile [%s] [ %d ] Autoop [OFF] Protection [OFF] Suspendu [OFF]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,
                  bot.<span style="color: #202020;">nick</span>, nwho, nick,atoi<span style="color: #66cc66;">&#40;</span>level<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
   send_to_server<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;:%s NOTICE %s : Mask %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, bot.<span style="color: #202020;">nick</span>, nwho, usrhost<span style="color: #66cc66;">&#41;</span>;
   write_single_channel<span style="color: #66cc66;">&#40;</span>csadminchan<span style="color: #66cc66;">&#41;</span>;
   info1<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\0</span>'</span>;
   add_infoinfo<span style="color: #66cc66;">&#40;</span>csadminchan, nick, info1<span style="color: #66cc66;">&#41;</span>;
   write_single_infolines<span style="color: #66cc66;">&#40;</span>csadminchan<span style="color: #66cc66;">&#41;</span>;
   <span style="color: #b1b100;">return</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>caddr != <span style="color: #000000; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
   send_to_server<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;:%s NOTICE %s : Profile [%s] [ %d ] Autoop [OFF] Protection [OFF] Suspendu [OFF]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,
                  bot.<span style="color: #202020;">nick</span>, nwho, nick,atoi<span style="color: #66cc66;">&#40;</span>level<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
   send_to_server<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;:%s NOTICE %s : Masks %s %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, bot.<span style="color: #202020;">nick</span>, nwho, usrhost, ip_addr<span style="color: #66cc66;">&#41;</span>;
   write_single_channel<span style="color: #66cc66;">&#40;</span>csadminchan<span style="color: #66cc66;">&#41;</span>;
   info1<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\0</span>'</span>;
   add_infoinfo<span style="color: #66cc66;">&#40;</span>csadminchan, nick, info1<span style="color: #66cc66;">&#41;</span>;
   write_single_infolines<span style="color: #66cc66;">&#40;</span>csadminchan<span style="color: #66cc66;">&#41;</span>;
   <span style="color: #b1b100;">return</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<h4>VI. Organisation des classes n'importe comment</h4>
<p>Lorsque vous faites de la programmation objet, il est indispensable de ne <b>PAS</b> réfléchir à l'organisation de vos classes.</p>
<p>Voici quelques pratiques à suivre :</p>
<ul>
<li> Préférez les grosses classes usines à gaz à tout faire, avec un maximum de méthodes dedans. </li>
<li> Faites beaucoup de liens entre vos classes, afin que toutes dépendent les unes des autres. </li>
<li> N'hésitez pas à faire des appels qui partent dans tous les sens. Par exemple la méthode A::Blah() appelle B::Truc() qui appellera C::Foo() rappelant A::Bar(), et ainsi de suite. (C'est la <a href="http://fr.wikipedia.org/wiki/Programmation_spaghetti">programmation spaghetti</a>).</li>
<li> Ne créez pas d'attributs privés. L'encapsulation est inutile et complexifie inutilement le code. Rendez toutes vos variables publiques. Après tout cela facilite les comportements indésirables. </li>
</ul>
<h4>VII. Ne pas respecter le cycle de développement</h4>
<p>Une mauvaise pratique qu'il est indispensable de suivre, est la restructuration du code pendant une phase de stabilisation du projet, par exemple après la sortie d'une <a href="http://fr.wikipedia.org/wiki/Release_Candidate##Release_candidate_.28RC.29_ou_pre-release">RC</a>.</p>
<p>Rien de tel en effet que retarder la release en modifiant un composant de base utilisé un peu partout dans le code, afin de rendre celui-ci instable et de nécessiter une RC supplémentaire. Un bon moyen est par exemple de changer totalement l'interface d'une classe très utilisée.</p>
<p>À ce propos, en particulier pour une bibliothèque, il est recommandé à chaque version de changer complètement l'API sans garder de retro compatibilité. Après tout cela donnera bien plus de travail aux utilisateurs de votre bibliothèque et favorisera une diminution du chômage.</p>
<h4>VIII. Préférer le hard coding aux fichiers de configuration</h4>
<p>Le <i>hard-coding</i> est tout un art qu'il est absolument nécessaire de maîtriser lorsqu'on est un mauvais programmeur. Il consiste à laisser dans le code des éléments de configuration, tels que le nom d'hôte de la base de donnée, les chemins d'accès aux données (<b>"C:\Mes Documents"</b> par exemple sous Windows 98, qui est un chemin par défaut mais qui pourrait avoir été configuré autrement par l'utilisateur), etc.</p>
<p>Le summum est de laisser dans le code le mot de passe d'un serveur utilisé en prod dans votre entreprise, surtout lorsque ce serveur est accessible depuis l'extérieur.</p>
<p>Une autre forme de hard-coding un peu plus modérée, est l'usage des <i>magic-numbers</i>. Il consiste en laissant des tailles de tableaux, par exemple, dans le code, plutôt que des constantes. Ceci a le merveilleux effet de rendre très difficile la modification de la taille d'un tableau utilisé à plusieurs endroits dans le code.<br />
À ce propos, quelque chose qu'il faut absolument pratiquer, est l'utilisation de tailles excessives pour les buffers. Quoi de mieux en effet que de gaspiller la mémoire.</p>
<h4>IX. Hacking</h4>
<p>La pratique du <i>hack</i> est quelque chose de primordial dans la génération de code de merde.<br />
Il consiste à préférer la modification locale et non généralisée d'une partie du code afin de résoudre un problème, plutôt que de généraliser davantage le système actuel en rajoutant des mécanismes permettant la résolution de ce problème, ce qui serait plus long à développer sur le moment, mais bien plus profitable sur le long terme.</p>
<p>Voici un exemple légèrement comique, qui est issue du code de <b>Windows 2000</b> (rendu public illégalement il y a plusieurs années).</p>
<p>La fonction en question est <b>CScriptHolder::OnScriptError()</b>, qui apparament est un handler appellé en cas d'erreur dans un script JS. En voici un extrait :</p>
<pre class="c">&nbsp;
        hr = errRecord.<span style="color: #202020;">Init</span><span style="color: #66cc66;">&#40;</span>pScriptError, pDoc<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>hr<span style="color: #66cc66;">&#41;</span>
            <span style="color: #b1b100;">goto</span> Cleanup;
&nbsp;
        <span style="color: #808080; font-style: italic;">// HACK fix for IE5 bug# 58568</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>OutLook98HackReqd<span style="color: #66cc66;">&#40;</span>pDoc, errRecord._uLine, errRecord._uColumn<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #b1b100;">goto</span> Cleanup;
&nbsp;</pre>
<p>Il semblerait donc qu'un bug dans <b>IE5</b> oblige le parseur à être un peu plus tolérant avec lui. Une fonction est donc dédiée à la détection de cette erreur. Et quelle fonction ! Admirez :</p>
<pre class="c">&nbsp;
BOOL OutLook98HackReqd<span style="color: #66cc66;">&#40;</span>CDoc *pDoc, ULONG uLine, ULONG uCol<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">36</span> == uLine<span style="color: #66cc66;">&#41;</span> &amp;&amp; <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">35</span> == uCol<span style="color: #66cc66;">&#41;</span> ||
        <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">51</span> == uLine<span style="color: #66cc66;">&#41;</span> &amp;&amp; <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">28</span> == uCol<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> &amp;&amp;
        !_tcsicmp<span style="color: #66cc66;">&#40;</span>pDoc-&gt;_cstrUrl, _T<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;outday://&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">TRUE</span>;
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">FALSE</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<h4>X. Préférer les fonctions insécuriées telles que scanf(), strcpy(), etc</h4>
<p>Vous ne deviendrez un mauvais programmeur que si prenez un soin particulier à y parsemer des failles en tous genres et autres petits bugs très joyeux à corriger.</p>
<p>Une chose à savoir est d'avant tout préférer les fonctions telles que <b>strcpy()</b>, <b>scanf()</b>, <b>strcat()</b> plutôt que respectivements <b>strncpy()</b>, <b>fgets()</b> ou <b>strncat()</b> (qui, au demeurant, ont des comportements pouvant également poser problème si elles sont mal utilisées).</p>
<p>Le top est quand même d'appeler strcpy() à partir d'une chaîne récupérer par le réseau. Par exemple :</p>
<pre class="c">&nbsp;
<span style="color: #993333;">void</span> func<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span>* buf<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">char</span> args<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">15</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#93;</span>;
	<span style="color: #993333;">int</span> i = <span style="color: #cc66cc;">0</span>;
	<span style="color: #993333;">char</span>* ptr;
&nbsp;
	strtok<span style="color: #66cc66;">&#40;</span>buf, <span style="color: #ff0000;">&quot; &quot;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">do</span>
	<span style="color: #66cc66;">&#123;</span>
		strcpy<span style="color: #66cc66;">&#40;</span>args<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>, ptr<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>ptr = strtok<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">NULL</span>, <span style="color: #ff0000;">&quot; &quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
	call_cmd<span style="color: #66cc66;">&#40;</span>i, args<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> recv_msg<span style="color: #66cc66;">&#40;</span><span style="color: #993333;">int</span> sock<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #993333;">char</span> buf<span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1024</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
	recv<span style="color: #66cc66;">&#40;</span>sock, buf, <span style="color: #993333;">sizeof</span> buf - <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
	func<span style="color: #66cc66;">&#40;</span>buf<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>Grâce à ce morceau de code erroné, vous pouvez envoyer un message au socket du type <i>"a a a a a a a a a a a a a a aaaaa[100 fois][votre code frauduleux]"</i> pour introduire des instructions dans la pile du programme.</p>
<p>Les exemples sont très multiples avec les diverses fonctions, donc allez y de cœur joie avec les dépassements de tampon.</p>
<h4>Conclusion</h4>
<p>Nous avons vu dix méthodes pour pourrir un projet qui ont fait leur preuve, ainsi que la majeur partie des programmeurs peuvent en témoigner. On a également été tous amené à en utiliser, soit par ignorance, soit par commodité, ou encore par faute de temps.</p>
<p>Cependant, il en existe bien d'autres. Je recommande à ce propos la lecture de <a href="http://en.wikipedia.org/wiki/Anti-pattern">cet article sur les Anti-Pattern</a> qui en donne un bon nombre.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2008/04/14/dix-pratiques-pour-etre-un-mauvais-programmeur/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP sucks</title>
		<link>http://blog.p.engu.in/2008/02/19/php-sucks/</link>
		<comments>http://blog.p.engu.in/2008/02/19/php-sucks/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 00:11:57 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2008/02/19/php-sucks/</guid>
		<description><![CDATA[J'avais un TP noté de PHP l'autre jour, l'occasion pour moi de découvrir les classes en PHP5, ce que je n'avais jamais vu. En effet, j'utilise très peu php, préférant le Python pour INL ou le HTML statique pour mon usage personnel. Cela dit, j'ai redécouvert à quel point le PHP est un langage de [...]]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:214667938d91b32914d3bbbc9ffe36a89cf2f72b'><p>J'avais un TP noté de PHP l'autre jour, l'occasion pour moi de découvrir les classes en PHP5, ce que je n'avais jamais vu. En effet, j'utilise très peu php, préférant le <b>Python</b> pour <a href="http://www.inl.fr">INL</a> ou le <b>HTML statique</b> pour mon <a href="http://vaginus.org">usage personnel</a>.</p>
<p>Cela dit, j'ai redécouvert à quel point le PHP est un langage de merde.<br />
En effet, pendant le développement de mon application web j'ai constaté que <b>PHP échappait tout seul les chaînes récupérées par POST</b>. Comportement de merde servant à contrer les attaques classiques de SQL injection ou autre, je suppose.<br />
Malheureusement ça ne s'arrête pas là. En plus de ça, ce comportement est définissable dans la configuration de PHP ! Cela signifie que d'un serveur Apache à un autre le comportement peut différer !</p>
<p>En bref, je peux avouer que j'étais sur le cul, et me suis retrouvé contraint d'écrire la fonction suivante que j'appelle pour chaque chaîne récupérée <i>via</i> $_POST :</p>
<pre class="php"><span style="color: #808080; font-style: italic;">/* PHP REALLY SUCKS DICKS IN HELL */</span>
<span style="color: #000000; font-weight: bold;">function</span> mystrip<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$string</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/get_magic_quotes_gpc"><span style="color: #000066;">get_magic_quotes_gpc</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #b1b100;">return</span> <a href="http://www.php.net/stripslashes"><span style="color: #000066;">stripslashes</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$string</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #b1b100;">else</span>
                <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$string</span>;
<span style="color: #66cc66;">&#125;</span></pre>
<p>Ce qui est débile, c'est que maintenant il faut appeler une autre fonction pour échapper les chaînes de caractères que je veux inclure dans une requête vers ma base mySQL. On strip pour rééchapper...<br />
Détail amusant, la fonction à appeler n'est pas <b>mysql_escape_string</b> comme on pouvait s'y attendre, mais <b>mysql_real_escape_string</b>. En effet, on imagine que la première fonction n'échappe pas vraiment les chaînes, bien sûr, c'est probablement un petit jeu pour rendre le dev PHP encore plus frustrant.</p>
<p>J'en profite pour rajouter une petite anecdote. Le TP noté était en fait la réalisation d'un blog avec diverses fonctions, je ne vais pas détailler, j'ai trouvé le sujet intéressant (pour changer), et comme je l'ai dis plus haut ça m'a permis d'apprendre des trucs (plus ou moins agaçants);</p>
<p>Le rendu devait être accompagné d'un dump de la base SQL, et comme le formateur est un <a href="http://www.blog-microsoft.fr/">garçon charmant</a> qui a entre autres organisé un concours au sein de l'école pour faire gagner des goodies récupérés aux <a href="http://news0ft.blogspot.com/2008/02/je-leake-comme-une-vieille-chaudire.html">TechDays</a> (un sac Microsoft, une démo de Visual Studio 2008 et SQL Server 2008, super trop cool quoi) avec des questions "geeks" (sic) dont "Quel est le nom de la femme de Bill Gates", "Où se se situe geographiquement le siège de Microsoft" et "Quel est le meilleurs blog sur les technologies Microsoft" (la réponse à la dernière question est le blog de cette personne), j'ai donc décidé de mettre en premier billet l'excellent article de <a href="http://headfucking.net">pankkake</a> concernant <a href="http://pankkake.headfucking.net/2008/02/11/la-fin-de-lempire-microsoft/">la fin de l'empire Microsoft</a>.</p>
<p>J'ai du mal à comprendre qu'on puisse être fanboy Microsoft. Je n'aime pas spécialement plus les fanboys Linux ou Apple (et y en a un certain nombres), mais eux ont la légitimité d'avoir un "combat" contre "la grosse méchante boite qui fait du fric car l'argent c'est mal". C'est quelque chose d'éthique.<br />
Au contraire, fanboy Microsoft implique de kiffer grave des logiciels de piètre qualité, ce dont on se rends compte facilement quand on connaît un minimum le domaine, ce qui j'espère est le cas pour quelqu'un étant formateur dans une école d'informatique.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2008/02/19/php-sucks/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Baladeurs MP3 et téléphones portables</title>
		<link>http://blog.p.engu.in/2007/10/07/baladeurs-mp3-et-telephones-portables/</link>
		<comments>http://blog.p.engu.in/2007/10/07/baladeurs-mp3-et-telephones-portables/#comments</comments>
		<pubDate>Sun, 07 Oct 2007 19:14:10 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2007/10/07/baladeurs-mp3-et-telephones-portables/</guid>
		<description><![CDATA[Je suis horrifié de voir le comportement qu'entraîne l'utilisation des appareils portatifs qui, dans un premier temps, avaient simplement l'utilité de simplifier la vie des consommateurs (pouvoir téléphoner n'importe où, être contactable même en déplacement), mais qui à présent, prennent une part trop importante dans la vie de tous les jours. Le dessin ci-dessus (de [...]]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:4cc6c14bf08a78cdb157b8256abdf203d37baf46'><p><a href="http://yeknan.free.fr/blog/index.php?2006/10/13/134-lecteurs-mp3"><img src="http://yeknan.free.fr/blog/images/mp3.png" /></a></p>
<p>Je suis horrifié de voir le comportement qu'entraîne l'utilisation des appareils portatifs qui, dans un premier temps, avaient simplement l'utilité de simplifier la vie des <b>con</b>sommateurs (pouvoir téléphoner n'importe où, être contactable même en déplacement), mais qui à présent, prennent une part trop importante dans la vie de tous les jours.</p>
<p>Le dessin ci-dessus (de <a href="http://yeknan.free.fr">yeKcim</a>) illustre bien ce problème. Je prends le train et le métro tous les jours, 2h30 en moyenne aller/retour, et j'ai malheureusement le temps de m'en rendre compte tous les jours.</p>
<p>Le fait d'écouter de la musique lorsqu'on est seul dans le train n'est pas en soit critiquable (normal vu que je le fais et que je suis parfait), même si il est tout de même dommage de ne pas pouvoir aborder la conversation avec des inconnu(e)s (surtout <b>e</b> en fait <em>[l'auteur de cet article n'est pas assez courageux pour cela et en plus, il tient terriblement à son amoureuse qu'il aime de tout son coeur pour se permettre une telle chose]</em>), le problème est bien plus grave lorsque des personnes se connaissent et passent tout leur trajet avec leurs oreillettes, le portable dans une main et l'I-Pod dans l'autre.</p>
<p>En outre, je suis totalement insurgé de voir ces connes (et le mot est faible) gueulant pendant leur conversation téléphonique, ce qui permet d'en faire profiter tout le monde, et ainsi pour moi de juger que l'intérêt de tenir une telle conversation est très faible. De toute façon, la discussion d'une fille n'est jamais très intéressante <em>[celle d'un homme aussi, preuve en est de cet article]</em>.<br />
Il y a une semaine ou deux, dans le train était assise sur un strapontin une jeune pétasse d'environ 16 ans qui essayait de négocier avec sa mère de dormir chez un mec qui était avec elle. Il se trouve que ce jour ci j'avais une migraine effroyable, et il était plus qu'insupportable d'entendre cette conne ne pas arrêter de gueuler pour tenter de convaincre sa mère avec des arguments discutables (« j'ai fais mes devoirs », « demain j'ai trois heures de trou donc je pourrai faire mes devoirs » (??), « j'ai jamais dormi chez lui », etc.).<br />
À cause peut-être de la distance entre elle et moi (j'étais assis à quelques mètres d'elle, et oui elle gueulait suffisament fort pour qu'on l'entende dans tous le wagon), ou de ma migraine, ou de mon manque de couilles, je ne me suis pas levé pour lui gueuler « MAIS TA GUEULE CONNASSE TA MÈRE VEUT PAS ET TU FAIS CHIER TOUT LE MONDE, FAUDRA ATTENDRE UNE PROCHAINE FOIS SI TU VEUX TE FAIRE DEPUCELER LE CUL PÉTASSE. » (© Le hurlement primaire, Bigard, référence culturelle). Mais j'aurais bien aimé.</p>
<p>Pire encore, ce midi j'avais un repas de famille avec mes grands parents, et d'une part je trouvais lamentable que ma soeur écoute de la musique pendant le [court] trajet (de dix minutes), en plus suffisament fort pour nous en faire profiter (et Dieu (donc moi) sait que ma soeur écoute de la musique de merde).<br />
D'autre part, pendant le repas il n'était pas rare de la voir regarder son téléphone portable à tout bout de champs, ce qui est très desagréable mais à la limite de l'acceptable, mais en plus de cela, il ne lui était pas anormal de répondre au téléphone pour dire "Ouais ?... Ah ?... T'es où ?... Est-ce que tu peux rappeller plus tard ?" (passons le fait qu'elle n'a pas dit "bonjour" ni "au revoir").<br />
Bon bien sur le pire, c'est que la banalisation du phénomène a fait que j'étais le seul à m'insurger, mes grands parents ont ignoré et mes parents m'ont trouvé intolérants. Dans quel monde vivons-nous ?</p>
<p>Je vous le demande.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2007/10/07/baladeurs-mp3-et-telephones-portables/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Test d&#8217;intelligence</title>
		<link>http://blog.p.engu.in/2007/09/08/test-dintelligence/</link>
		<comments>http://blog.p.engu.in/2007/09/08/test-dintelligence/#comments</comments>
		<pubDate>Sat, 08 Sep 2007 15:55:51 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2007/09/08/test-dintelligence/</guid>
		<description><![CDATA[Il ne s'agit en fait pas d'un test à proprement parler, tels que les tests de QI, mais je vais juste décrire un phénomène qui montre une belle bêtise. Cependant ne pensez pas que si vous n'en faites pas partis, vous êtes intelligents. C'est juste que dans le cas contraire vous êtes définitivement irrécupérables. Les [...]]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:bbd4d7cf2fb21cff85927895ec9883af88ac7333'><p>Il ne s'agit en fait pas d'un test à proprement parler, tels que les tests de QI, mais je vais juste décrire un phénomène qui montre une belle bêtise. Cependant ne pensez pas que si vous n'en faites pas partis, vous êtes intelligents. C'est juste que dans le cas contraire vous êtes définitivement irrécupérables.</p>
<p>Les personnes qui :</p>
<ul>
<li>pensent que 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 sont des chiffres et ne peuvent pas être des nombres, que ces derniers commencent par 10,</li>
<li>pensent qu'un mot doit être composé de deux caractères minimum pour être qualifié comme tel, et que sinon ça reste une lettre</li>
<li>pensent que "q" == 'q' (en C)</li>
<li>pensent que 5 fait partis de N mais pas de Z</li>
</ul>
<p>sont des gros cons qui n'ont rien compris au principe des ensembles.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2007/09/08/test-dintelligence/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DRMs gratuits*</title>
		<link>http://blog.p.engu.in/2007/09/07/drms-gratuits/</link>
		<comments>http://blog.p.engu.in/2007/09/07/drms-gratuits/#comments</comments>
		<pubDate>Fri, 07 Sep 2007 21:59:07 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2007/09/07/drms-gratuits/</guid>
		<description><![CDATA[Bonjour, Vous connaissez sans doute comme moi l'offre de N9uf Telecom concernant le téléchargement légal de musique "gratuitement". Le principe revient en gros à une licence globale, tous les mois est inclus dans le forfait une somme qui sera reversée aux majors. Jusque là on peut considérer que c'est une offre intéressante, la licence globale [...]]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:590a54b598b0607c578aa04c2a81fd3d15392c76'><p>Bonjour,</p>
<p>Vous connaissez sans doute comme moi l'offre de <a href="http://offres.neuf.fr/adsl/adsl/offres-adsl-internet/internet-musique-neuf-music.html">N9uf Telecom</a> concernant le téléchargement légal de musique "gratuitement". Le principe revient en gros à une licence globale, tous les mois est inclus dans le forfait une somme qui sera reversée aux majors.<br />
Jusque là on peut considérer que c'est une offre intéressante, la licence globale étant un meilleurs solution que DADVSI (même si pas parfaite, car après il faut voir comment est fait la distribution des gains).</p>
<p>Cependant, ça aurait été trop beau. J'ai lu dans l'Ordinateur Individuel, que je qualifierai plus tard, qu'en fait, les musiques téléchargées sont DRMisées, c'est à dire qu'une protection propriétaire <a href="http://microsoft.saimal.fr">Microsoft</a> régule l'utilisation que l'on peut faire de ce fichier. Le détail le plus important est qu'il est nécessaire d'utiliser Windows Media Player pour lire ces fichiers, ou d'autres lecteurs "certifiés". Ce qui implique, bien sur, l'impossibilité de lire ces fichiers sous les systèmes d'exploitations ne possédant pas un de ces lecteurs, notamment Linux.<br />
Apparemment, en l'occurence, il ne sera possible de copier le fichier que sur trois machines, ainsi que sur les lecteurs portables "MP3", moyennant une réactivation tous les mois. Bien sur, une fois l'abonnement à N9uf Telecom terminé, ces fichiers deviennent impossibles à écouter.</p>
<p>Je pense donc qu'il faut boycotter au maximum cette offre, car au final ce n'est que des paillettes pour les yeux et ça incite à entrer dans le jeu des DRM. Le gros risque est que ça devienne banal.<br />
Pour la petite anecdote, j'étais cet après midi à l'hôpital pour une consultation, et biensûr le monsieur en blouse blanche (et la jeune infirmière très mignonne au passage) m'a pris plus d'une demi heure en retard. Le rapport ? C'est que je trouve inadmissible qu'il y ait ainsi des retards, mais surtout que ça soit banal, personne ne s'en plaint vraiment (à part comme moi gueuler après et emmerder les autres, mais pas pour faire avancer les choses (à mon avis on devrait tous se mettre à refuser de payer si le retard est supérieur à un quart d'heure, mais bon c'est trop tard)).</p>
<p>Concernant l'article de l'Ordinateur Individuel, que j'ai trouvé favorable à cette offre, je dois avouer avoir été très déçu.<br />
Lorsque j'étais petit, je lisais régulièrement ce mensuel, et c'est vrai que ça me plaisait pas mal. J'ai arrêté de le lire il y a cinq ou six ans, plus ou moins lors de mon passage à Linux, et je n'ai pas réaccroché avec.<br />
Déjà on peut constater que la taille du magazine en lui même a été divisée par deux. La rubrique "Trucs et Astuces" que j'aimais bien, a perdu son volume. Les astuces n'ont aucun intérêt, il n'y en a plus concernant la programmation (même si ça restait simple), etc. Il y a globalement moins d'articles, et la qualité est médiocre.<br />
Mais le plus choquant, c'est quand même le parti pris. Dans l'article sur l'offre de 9, ils sont clairement favorables, n'exposent que vaguement le fait qu'on ne pourra pas lire la musique sur MacOS X (et ne parlent même pas de Linux, ils ne doivent même pas savoir que ça existe). Dans un truc et astuce, ils expliquent comme vérifier que votre version de Windows Vista n'est pas crackée..</p>
<p>Ce magazine est clairement destinée aux "décideurs pressés", et donc je vous invite à l'acheter en masse pour remplir votre stock de papier toilette.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2007/09/07/drms-gratuits/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microsoft Linux</title>
		<link>http://blog.p.engu.in/2007/09/04/microsoft-linux/</link>
		<comments>http://blog.p.engu.in/2007/09/04/microsoft-linux/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 19:07:38 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2007/09/04/microsoft-linux/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:5601456744302136776539303cb9bf7bd96abd0a'><p><a href='http://blog.p.engu.in/wp-content/uploads/2007/09/mslinux.png' title='mslinux.png'><img src='http://blog.p.engu.in/wp-content/uploads/2007/09/mslinux.png' alt='mslinux.png' /></a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2007/09/04/microsoft-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pédophile mis en prison par un pirate</title>
		<link>http://blog.p.engu.in/2007/06/15/pedophile-mis-en-prison-par-un-pirate/</link>
		<comments>http://blog.p.engu.in/2007/06/15/pedophile-mis-en-prison-par-un-pirate/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 10:30:27 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Aucune]]></category>
		<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2007/06/15/pedophile-mis-en-prison-par-un-pirate/</guid>
		<description><![CDATA[Bon, ça date de février dernier, donc vous êtes peut être au courant. Voici d'abord le premier lien que j'ai lu: The Inquirer Bon, on peut retrouver les termes de « les fantasmes nauséabonds du juge sur les jeunes garçons ». Déjà on voit un peu la débilité de l'auteur. Ensuite y a : Generation [...]]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:3219c8f0969d850854fb30533e659cc4b65a3ab8'><p>Bon, ça date de février dernier, donc vous êtes peut être au courant.</p>
<p>Voici d'abord le premier lien que j'ai lu:</p>
<p><a href="http://fr.theinquirer.net/2007/02/23/un_pirate_mets_un_juge_en_pris.html">The Inquirer</a></p>
<p>Bon, on peut retrouver les termes de « les fantasmes nauséabonds du juge sur les jeunes garçons ». Déjà on voit un peu la débilité de l'auteur.</p>
<p>Ensuite y a : <a href="http://www.generation-nt.com/juge-ronald-kline-etats-unis-pedophile-decouvert-pirate-brad-willman-actualite-22375.html">Generation NT</a>.</p>
<p>Il est très drôle car pleinement pompé sur le premier (ou plutôt tout les deux sur leurs sources respectives, mais on voit à quel point ils ne sont pas foutus d'être originaux).<br />
Ce qui est drôle aussi c'est que dans le premier paragraphe ils parlent d'images à caractère pornographique, et non pédophiles.</p>
<p>Alors le plus drôle c'est ce lien ci :<br />
<a href="http://www.net-actuality.org/news/4975-un-pirate-au-service-de-la-loi.html">Net Actuality</a></p>
<p>Alors là, aucunement dans l'article on ne parle de pédophilie. Il a été clairement mis en prison, marqué à vie dans les délinquants sexuels, juste pour la détention de photographies pornographiques...<br />
Il juge le juge de malhonnête, ça m'a bien fait rire.</p>
<p>Le pire dans l'histoire est la réalité : un pirate qui s'infiltre illégalement dans un PC et qui dénonce son propriétaire... Ça on s'en branle. Ce mec a des attirances jugées "anormales", ça en fait forcément un criminel sexuel. Le fait qu'il ait récupéré des photos <b>dont il n'est pas l'auteur</b> n'a rien de préjudiciable non plus (en mon sens), il ne participe pas à ces faits, il utilise ça uniquement comme assouvissement.</p>
<p>Bon après par contre je crois que quelqu'un l'a accusé de s'être fait agressé par Kline en 1979 (cette personne avait 14 ans).</p>
<p>Enfin l'important n'est pas l'homme en lui même, mais de voir la mentalité de tous ceux qui ont été formatés et ont une opinion tranchée sur quelque chose de tabou.<br />
Comme on disait y a plusieurs siècles, il faudrait brûler les homosexuels.</p>
<p><b>Note:</b> J'ai écris ce billet à l'arrache le matin avant d'aller à l'école, et à l'origine c'était un mail pour pankkake. Ceci explique donc pourquoi je suis aussi bref dans les commentaires, et pourquoi c'est aussi mal écrit.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2007/06/15/pedophile-mis-en-prison-par-un-pirate/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Un chrétien peut-il utiliser un antispam ?</title>
		<link>http://blog.p.engu.in/2007/06/10/un-chretien-peut-il-utiliser-un-antispam/</link>
		<comments>http://blog.p.engu.in/2007/06/10/un-chretien-peut-il-utiliser-un-antispam/#comments</comments>
		<pubDate>Sun, 10 Jun 2007 09:30:50 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2007/06/10/un-chretien-peut-il-utiliser-un-antispam/</guid>
		<description><![CDATA[Telle est la question que se pose un pratiquant sur un forum dédié à cette religion. Pour connaître la réponse, allez voir : http://forums.topchretien.com/viewtopic.php?t=18099. Ici, nous utilisons tous un ordinateur et nous sommes tous connectés à internet. On peut raisonablement penser que nous avons tous (ou presque tous) également un logiciel de messagerie. Nous sommes [...]]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:359e21eda8a020a782a732ee25d985a43a15f8f2'><p>Telle est la question que se pose un pratiquant sur un forum dédié à cette religion.</p>
<p>Pour connaître la réponse, allez voir : <a href="http://forums.topchretien.com/viewtopic.php?t=18099">http://forums.topchretien.com/viewtopic.php?t=18099</a>.</p>
<blockquote><p>Ici, nous utilisons tous un ordinateur et nous sommes tous connectés à internet. On peut raisonablement penser que nous avons tous (ou presque tous) également un logiciel de messagerie.<br />
Nous sommes donc quasiment tous des spammés, ou des potentiels spammés, ou des furturs spammés.<br />
Il existe des logiciels anti spam. Globalement il s'agit d'envoyer à l'expéditeur (le spammer) un message disant que notre adresse n'existe pas (afin que l'on cesse d'envoyer des spam). Or, cette adresse existe donc on peut dire qu’il s'agit d'un mensonge.<br />
D’ou la question suivante :<br />
Un chrétien peut-il utiliser un logiciel anti spam ?<br />
Qu’en pensez-vous ?</p></blockquote>
<p>Je l'avais pasté sur <a href="http://fr.wikipedia.fr/wiki/Internet_Relay_Chat">IRC</a> y a une semaine ou deux, mais je me suis dis qu'il fallait diffuser la parole de Dieu au plus grand nombre.</p>
<p>Abordant des thèmes différents, mais tout aussi hilarants, on a : </p>
<ul>
<li><a href="http://forums.topchretien.com/viewtopic.php?t=37091">La chasteté: mode de vie réaliste ou sadique?</a></li>
<li><a href="http://forums.topchretien.com/viewtopic.php?t=46393">besoin d info sur les force sataniques</a></li>
<li><a href="http://forums.topchretien.com/viewtopic.php?t=46370">Dois-je commenecr à fréquenter ou demeurer célibataire?</a></li>
<li>et plein d'autres encore sur <a href="http://forums.topchretien.com">http://forums.topchretien.com</a>.</li>
</ul>
<p>P.S.: De manière générale, je n'ai rien contre le fait que l'on soit chrétien, croyant, voir même chrétien pratiquant. Je suis juste stupéfait par tant de crédulité. Mais bon après, bien qu'ils soient con, ils sont tous bons, donc on va pas se plaindre.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2007/06/10/un-chretien-peut-il-utiliser-un-antispam/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Conjugaison et MS Outlook</title>
		<link>http://blog.p.engu.in/2007/05/31/conjugaison-et-ms-outlook/</link>
		<comments>http://blog.p.engu.in/2007/05/31/conjugaison-et-ms-outlook/#comments</comments>
		<pubDate>Thu, 31 May 2007 22:46:18 +0000</pubDate>
		<dc:creator>Romain</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Saimal]]></category>

		<guid isPermaLink="false">http://blog.p.engu.in/2007/05/31/conjugaison-et-ms-outlook/</guid>
		<description><![CDATA[J'avais juste envie de vous faire partager cette image relativement amusante :]]></description>
			<content:encoded><![CDATA[<div class='microid-mailto+http:sha1:df3bc6a94fc9c740da813e878b03d9181e07bde8'><p>J'avais juste envie de vous faire partager cette image relativement amusante :</p>
<p><img src="http://ssz.fr/brdl/tuest.png" /></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.p.engu.in/2007/05/31/conjugaison-et-ms-outlook/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
