<?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"
	>

<channel>
	<title>Why do witches burn?</title>
	<atom:link href="http://blog.salagir.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.salagir.com</link>
	<description>Because they're made of wood, like bridges, and so float on water, like churches, very small rocks, gravy, and a duck.</description>
	<pubDate>Wed, 19 Nov 2008 16:38:57 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>Fonctions temporelles 2 : le retour</title>
		<link>http://blog.salagir.com/100-fonctions-temporelles-2-le-retour/</link>
		<comments>http://blog.salagir.com/100-fonctions-temporelles-2-le-retour/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 08:01:43 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Mes scripts utiles]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/?p=100</guid>
		<description><![CDATA[Je vous avais parlé de fonctions PHP permettant d&#8217;écrire des temps restant, soit dans plusieurs langues, soit en arrondit.
Et bien j&#8217;ai craqué, j&#8217;ai fait la fonction finale, qui fait les deux en même temps, et cela grâce aux traducteurs de Multiverse. En voici son utilisation. (Cherchez le &#8220;Prochaine page dans : &#8230;&#8221;)
Fonction et table de [...]]]></description>
			<content:encoded><![CDATA[<p>Je vous avais parlé de <a href="http://blog.salagir.com/34-fonction-temporelles-affichage-barre-davancement/">fonctions PHP permettant d&#8217;écrire des temps restant</a>, soit dans plusieurs langues, soit en arrondit.<br />
Et bien j&#8217;ai craqué, j&#8217;ai fait la fonction finale, qui fait les deux en même temps, et cela grâce aux traducteurs de Multiverse. <a href="http://www.dragonball-multiverse.com/fr/chapters.html">En voici son utilisation.</a> (Cherchez le &#8220;Prochaine page dans : &#8230;&#8221;)</p>
<h3>Fonction et table de traduction</h3>
<p>Je vous ai <a href="http://blog.salagir.com/72-webservice-de-traduction-automatique/">aussi parlé</a> de ma fonction de traduction. Il est temps de vous la remettre (vous allez être épaté, wou la la &#8230;)</p>
<p>Vu le peu d&#8217;intérêt et le grand nombre de lignes de codes de mon site de traduction, qui est ouvert à mes divers traducteurs, je ne pense pas vous les partager. Mais je vais quand même vous montrer les résultats.</p>
<p>La table :</p>

<div class="wp_syntax"><div class="code"><pre class="sql"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #ff0000;">`get_textes`</span> <span style="color: #66cc66;">&#40;</span>
  <span style="color: #ff0000;">`id`</span> int<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">UNSIGNED</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span>,
  <span style="color: #ff0000;">`section`</span> varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_en`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_fr`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_it`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_es`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_jp`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_ar`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_nl`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_pl`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`txt_pt`</span> text <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span>  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`id`</span><span style="color: #66cc66;">&#41;</span>,
  <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #ff0000;">`section`</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`section`</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span> ENGINE=MyISAM  <span style="color: #993333; font-weight: bold;">DEFAULT</span> CHARSET=utf8;</pre></div></div>

<p>Donnez-lui le nom que vous voulez à la table, je m&#8217;en fous&#8230;<br />
La colonne &#8220;section&#8221; permet de séparer des types de traduction. Vous verrez dans le paragraphe suivant. Ca me permet de ne pas vous partager d&#8217;un coup les traductions temporelles et les titres de chapitre multiverse, les textes de la section commentaire&#8230;<br />
La colonne &#8220;txt_en&#8221; est obligatoire, car c&#8217;est la langue par défaut, quand la traduction manque.<br />
Le moteur est MyISAM parce que c&#8217;est une table qui sera le plus souvent en lecture (si si j&#8217;y ai réfléchi et tout).<br />
Donc oui il y a bien une colonne par langue, ça reste le plus simple. Pensez à l&#8217;utf8, il sera votre meilleur ami quand vous utiliserez des langues de gens-qui-écrivent-pas-comme-nous.<br />
Egalement, dans vos scripts PHP, commencez toujours, juste après la connexion, par cette query :</p>

<div class="wp_syntax"><div class="code"><pre class="sql"><span style="color: #993333; font-weight: bold;">SET</span> NAMES <span style="color: #ff0000;">'utf8'</span></pre></div></div>

<p>Sinon vous pourrez avoir des résultats étranges.</p>
<p>La fonction de traduction :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">function</span> __<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$id</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000066;">global</span> <span style="color: #0000ff;">$lang</span>;
    <span style="color: #000066;">static</span> <span style="color: #0000ff;">$tablename</span> = <span style="color: #ff0000;">'get_textes'</span>;
    <span style="color: #0000ff;">$id</span> = <span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">$id</span>;
    <span style="color: #0000ff;">$R</span> = <span style="color: #000066;">mysql_query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SELECT `txt_$lang`,txt_en FROM $tablename WHERE id=$id LIMIT 1&quot;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$txt</span> = <span style="color: #000066;">mysql_result</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$R</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$txt</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000066;">mysql_result</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$R</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$txt</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>A vous vous débrouiller pour que votre variable global <code>$lang</code> (ou <code>$GLOBALS['lang']</code>) ne puisse avoir QUE l&#8217;une des valeurs présentes en base de donnée.<br />
Et non il n&#8217;y a ni cache ni quoi que ce soit. Je n&#8217;ai pas eu l&#8217;envie ni le temps de travailler ce genre d&#8217;optimisations. Après tout une BDD est faire pour être accédée. Y&#8217;a un index et tout&#8230; De toutes façon y&#8217;a rien de transcendant là dedans, c&#8217;est juste pour vous donner ma marche à suivre puisque le reste en dépends.</p>
<h3>Fonction d&#8217;affichage de temps, arrondi, international</h3>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #808080; font-style: italic;">/** Affiche un temps ecrit joliment.
&nbsp;
  \param $secondes (int) nombre de secondes.
&nbsp;
  \param $detail peut etre :
        - un booleen (oui on affiche tous les details)
        - ou les strings suivant: 'h' (detail a l'heure pres), 'mn' (detail a la minute pres)
        - ou bien un int: le nombre d'infos. 1 est identique a false
&nbsp;
  \return (string)
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> super_write_delay<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>, <span style="color: #0000ff;">$detail</span>=<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
     <span style="color: #808080; font-style: italic;">// hum....</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>En fait c&#8217;est un peu long tout ce code alors <a href="/upload/super_write_delay.func.php.zip">choppez donc directement le fichier (zip)</a>, ou <a href="/upload/super_write_delay.func.php.html">regardez-le en ligne</a>.</p>
<p>Voici les <a href="/upload/get_textes-write_time.sql">quelques lignes SQL à ajouter à votre table</a> (le fichier est encodé en UTF8).<br />
Je pense que ce serai une TRES mauvaise idée que de copier-coller son contenu. Sauvez-le sur votre disque, puis importez-le avec phpMyAdmin par exemple.</p>
<p>Exemples d&#8217;utilisation :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #808080; font-style: italic;">// multiverse</span>
<span style="color: #808080; font-style: italic;">// (ici, calcul de $S qui est le nombre de secondes restantes avant la prochaine page)</span>
<span style="color: #808080; font-style: italic;">// note: 48 c'est bien sûr &quot;Prochaine page dans :&quot;</span>
<span style="color: #000066;">echo</span> __<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">48</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">' '</span>.super_write_delay<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$S</span>, <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// resultat : Prochaine page dans : 3 jours, 10h   ou  Prochaine page dans : 9h, 23 mn</span>
&nbsp;
<span style="color: #808080; font-style: italic;">// autre delires :</span>
<span style="color: #000066;">echo</span> super_write_delay<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">3661</span>, <span style="color: #ff0000;">'h'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// 1 heure</span>
<span style="color: #000066;">echo</span> super_write_delay<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">3661</span>, <span style="color: #ff0000;">'mn'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// 1h, 01mn</span>
<span style="color: #000066;">echo</span> super_write_delay<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">3661</span>, <span style="color: #ff0000;">'s'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// 1h, 01mn, 01s</span></pre></div></div>

<p>Et histoire de faire croire que je cherche des infos avant de réinventer la roue, voici une fonction php5 qui écrit des date de façon internationale :<br />
<a href="http://blog.pascal-martin.fr/post/php-5.3-intl-1-internationalisation-localisation">http://blog.pascal-martin.fr/post/php-5.3-intl-1-internationalisation-localisation</a> (merci <a href="http://nyams.planbweb.com/blog/">Nyamsprod</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/100-fonctions-temporelles-2-le-retour/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Delete backslashs : death to magic_quotes_gpc</title>
		<link>http://blog.salagir.com/90-delete-backslashs-death-to-magic_quotes_gpc/</link>
		<comments>http://blog.salagir.com/90-delete-backslashs-death-to-magic_quotes_gpc/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 14:16:19 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[My useful scripts]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/?p=90</guid>
		<description><![CDATA[Even in PHP 5, this old security params is activated by default, and I hate it. It&#8217;s Magic Quote.
When this flag is On, then vars in cookies, from a form or a url, are automatically &#8220;escaped&#8221;.
It means that backslashes are added before some special characters. Primary: the simple quote.
Example : my script toto.php contains this [...]]]></description>
			<content:encoded><![CDATA[<p>Even in PHP 5, this old security params is activated by default, and I hate it. It&#8217;s Magic Quote.<br />
When this flag is On, then vars in cookies, from a form or a url, are automatically &#8220;escaped&#8221;.<br />
It means that backslashes are added before some special characters. Primary: the simple quote.</p>
<p>Example : my script toto.php contains this code : <em>Bonjour &lt;?= $_GET['nom'] ?&gt; !</em>.<br />
Calling : toto.php?nom=Bob ; outputs <em>Bonjour Bob !</em><br />
Calling : toto.php?nom=Muad&#8217;ib ; outputs <em>Bonjour Muad\&#8217;ib !</em></p>
<p>Why ? Because leaving &#8216; unescaped can lead to <em>SQL injection</em> if the coder didn&#8217;t code well.</p>
<p>But I code well, and I add myself, and only when necessary the backslashes. Problem : with this flag, slashes are added two times, and it gives this : Muad\\\&#8217;ib</p>
<p>In order to get ride of the slashes, I use often this code :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">get_magic_quotes_gpc</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">$_POST</span> = <span style="color: #000066;">array_map</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'kill_magic_quotes'</span>, <span style="color: #0000ff;">$_POST</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">function</span> kill_magic_quotes<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$v</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000066;">is_array</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$v</span><span style="color: #66cc66;">&#41;</span> ? <span style="color: #000066;">array_map</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'kill_magic_quotes'</span>, <span style="color: #0000ff;">$v</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #000066;">stripslashes</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$v</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>But now on my owns servers, I simply turn the flag Off.<br />
Except ! Sometime with a new machine, I forget this, and some data in database is now full of &#8216; &#8230;.</p>
<p>So I wrote a script for command-line. Its parameters are a table name, and a field name.<br />
It checks for errors, it&#8217;s cool and well done. Voilà.</p>
<p>You can download the code here :</p>
<ul>
<li><a href="/upload/del_slashs.php.zip">del_slashs Zipped  (v1.1)</a></li>
<li><a href="/upload/del_slashs.php.html">see del_slashs online (v1.1)</a></li>
<li>Uses : <a href="/upload/sqlQueries.php.zip">sqlQueries</a> (<a href="/43-the-1468456th-php-class-that-overloads-mysql/">cf. this post</a>)</li>
</ul>
<p>The script in command line is launched like this :</p>

<div class="wp_syntax"><div class="code"><pre class="bash">php del_slashs.php tablename fieldname</pre></div></div>

<p>Put sqlQueries.php file in the same folder, and edit del_slash.php to put your database connection information.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/90-delete-backslashs-death-to-magic_quotes_gpc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Webservice de traduction automatique</title>
		<link>http://blog.salagir.com/72-webservice-de-traduction-automatique/</link>
		<comments>http://blog.salagir.com/72-webservice-de-traduction-automatique/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 01:48:06 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Mes scripts utiles]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/?p=72</guid>
		<description><![CDATA[J&#8217;ai peut-être mal cherché, mais je n&#8217;ai pas trouvé de webservice de traduction.
Or j&#8217;avais deux besoins, que j&#8217;ai tous deux comblé : pouvoir faire traduire ce que j&#8217;écris facilement, et pouvoir lire des flux RSS dans d&#8217;autres langues.
Les moins fans d&#8217;entre vous de ma personne (qu&#8217;est ce que vous faites là ?) ignorent peut-être que [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai peut-être mal cherché, mais je n&#8217;ai pas trouvé de webservice de traduction.<br />
Or j&#8217;avais deux besoins, que j&#8217;ai tous deux comblé : pouvoir faire traduire ce que j&#8217;écris facilement, et pouvoir lire des flux RSS dans d&#8217;autres langues.</p>
<p>Les moins fans d&#8217;entre vous de ma personne (qu&#8217;est ce que vous faites là ?) ignorent peut-être que grâce à mon dojinshi (BD avec les personnages et l&#8217;univers d&#8217;une BD déjà existante. Oui c&#8217;est illégal, mais toléré), je gère maintenant un site avec 7 langues différentes, sachant que j&#8217;en parle la moitié d&#8217;une.</p>
<p>Je vous raconterai plus tard la beauté de mon code du site de traduction, il n&#8217;a d&#8217;ailleurs pas grand-chose de compliqué. Site avec login, table avec un champs par langue, et hop (on appelle les textes par leur ID. Cela rends le code php appelant plutôt lisible et on se pose pas de questions d&#8217;index).</p>
<p>Bref, de nombreux fans (oui, j&#8217;ai des visiteurs môssieur) postent des commentaires dans leur langue, et moi je ne peux pas les suivre. Or, j&#8217;aime savoir.<br />
D&#8217;ailleurs faudra que je vous partage mon code de commentaires, il est très cool. Un jour.</p>
<h3>Lire le flux des commentaires</h3>
<p><em><a href="http://pipes.yahoo.com/pipes/">Yahoo Pipes!</a></em>, un utilitaire extrêmement puissant dont personne ne parle parce que c&#8217;est pas Google qui le fait, a répondu à mes interrogations.</p>
<p>On donne notre flux de commentaires, on le pointe sur un cadre &#8220;traduction&#8221; en donnant la langue d&#8217;entrée et de sortie, on pointe ce cadre sur un nouveau flux, et Yahoo génère une flux XML modifié, auquel on peut s&#8217;inscrire avec notre agrégateur préféré.</p>
<p>Comment l&#8217;utiliser ? Un tuto vidéo simple qui marche :<br />
<a href="http://www.jumpcut.com/view?id=C086AA92568811DCAB02000423CF381C">How to Translate a Feed Using Pipes</a></p>
<p>Notez beaucoup de tutos parlent de &#8220;BabelFish&#8221;. IL EST DEPRECATED. Il ne SERT A RIEN.<br />
Il faut utiliser le plus complexe et plus puissant Loop + String»Translator (comme dans la vidéo)</p>
<p>Maintenant, je suis abonné à 7 flux RSS différents.</p>
<p>Bon évidement c&#8217;est loin d&#8217;être parfait. Déjà la traduction automatique continue à être un art fortement mal maîtrisé. Mais en plus, des commentaires de blog&#8230; et bien c&#8217;est pas très bien écrit à la base&#8230;<br />
Autre problème, si le texte contient du html, alors le résultat est immonde. J&#8217;ai ajouté un filtre RegExp pour virer le HTML mais je ne sais pas si ça a été très utile.<br />
Dernière problème, a cause du html qui vole, le pseudo du type est collé au message (avec mon filtre, il y a un espace c&#8217;est déjà ça. Je pourrais ajouter un filtre pour mettre des jolies étoiles.)</p>
<p><a href="/upload/yahoo-pipes.png"><img src="/upload/yahoo-pipes.png" align="right" width="303" height="245" alt="" /></a></p>
<p>Voilà les flux auxquels je suis abonné sur <em>Google Reader</em> :</p>
<ul>
<li><a href="http://pipes.yahoo.com/pipes/pipe.run?_id=tH4sDCdw3RGCwKGnrLQIDg&#038;_render=rss">DBM Comments de2fr</a></li>
<li><a href="http://www.dragonball-multiverse.com/flux-comments.rss.php?lang=en">DBM Comments en</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.run?_id=Mu_p2Z9f3RGz9cSX4mZpYg&#038;_render=rss">DBM Comments es2fr</a></li>
<li><a href="http://www.dragonball-multiverse.com/flux-comments.rss.php?lang=fr">DBM Comments fr</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.run?_id=es_yLqFf3RG4TVKSrbQIDg&#038;_render=rss">DBM Comments it2fr</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.run?_id=4sp2PS2c3RGS6mGorLQIDg&#038;_render=rss">DBM Comments cn2en</a></li>
<li><a href="http://pipes.yahoo.com/pipes/pipe.run?_id=sOMDmX_d3RGQ7DbfrLQIDg&#038;_render=rss">DBM Comments nl2fr</a></li>
</ul>
<p>Ce sont les flux que j&#8217;ai créé avec Yahoo Pipes (sauf pour FR et EN qui sont les originaux, mais enfin par définition c&#8217;est aussi moi qui les ai créé ;) ), vous pouvez créer les vôtres traduits dans ce que vous voulez, mais aussi vous abonner aux miens, puisqu&#8217;il sont déjà là ! (si vous êtes motivé, les espagnols postent autant que les français)</p>
<h3>Traduction de mon propre commentaire</h3>
<p>Maintenant que je lis les gens, j&#8217;ai des fois envie de leur répondre. Mais écrire un texte, aller sur un site de traduction, le passer, le copier et montrer les 2 versions (histoire que ceux qui peuvent lire la langue originelle échappent à la mauvaise traduction), c&#8217;est fastidieux.</p>
<p>Ne trouvant de webservice, j&#8217;ai transformé Google en ce dernier.<br />
Histoire de ne pas ralentir et défoncer Google à chaque fois que quelqu&#8217;un ouvre la page des commentaires, je mets le résultat de traduction en cache.</p>
<p>Voici mon premier message auto-traduit :<br />
<a href="http://www.dragonball-multiverse.com/es/page-54.html#c9444">http://www.dragonball-multiverse.com/es/page-54.html#c9444</a><br />
Il y a bien sûr du code intégré dans mon système de commentaires pour déclencher l&#8217;ajout de trad sans travail de ma part, mais je le passe ici, pour vous montrer le système derrière.</p>
<p><strong>Pour simplement créer un lien qui traduira le texte :</strong><br />
C&#8217;est ma première version, elle est plus simple à utiliser, mais vous n&#8217;affichez pas directement la traduction.</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">function</span> link_translator<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$txt</span>, <span style="color: #0000ff;">$from</span>=<span style="color: #ff0000;">'en'</span>, <span style="color: #0000ff;">$to</span>=<span style="color: #000000; font-weight: bold;">null</span>, <span style="color: #0000ff;">$a_params</span>=<span style="color: #ff0000;">''</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><span style="color: #0000ff;">$to</span>===<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">$to</span> = <span style="color: #0000ff;">$GLOBALS</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'lang'</span><span style="color: #66cc66;">&#93;</span>;
    <span style="color: #0000ff;">$txt</span> = <span style="color: #000066;">preg_replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'/&lt;[^&gt;]*&gt;/'</span>, <span style="color: #ff0000;">''</span>, <span style="color: #0000ff;">$txt</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">$url</span> = <span style="color: #ff0000;">'http://translate.google.com/translate_t?sl='</span>.<span style="color: #0000ff;">$from</span>.<span style="color: #ff0000;">'&amp;amp;tl='</span>.<span style="color: #0000ff;">$to</span>.<span style="color: #ff0000;">'&amp;amp;text='</span>.<span style="color: #000066;">urlencode</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$txt</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$str</span> = <span style="color: #000066;">function_exists</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'__'</span><span style="color: #66cc66;">&#41;</span>? __<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">63</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #ff0000;">'Translate from %s into %s'</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">&quot;&lt;a href=<span style="color: #000099; font-weight: bold;">\&quot;</span>$url<span style="color: #000099; font-weight: bold;">\&quot;</span> $a_params&gt;&quot;</span>.<span style="color: #000066;">sprintf</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$str</span>, <span style="color: #000066;">strtoupper</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$from</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000066;">strtoupper</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$to</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">&quot;&lt;/a&gt;&quot;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Notez que mon site contient souvent un $GLOBALS[lang]. Evidement, dans la page de commentaires espagnols, la variable est à &#8220;es&#8221;, le défaut est souvent mon ami. Enfin, j&#8217;écris plutôt en anglais, pensant stupidement que en2es est plus travaillé que fr2es (les langues étant plus proches, c&#8217;est pas évident), et puis il y a sûrement plus d&#8217;espagnols qui comprennent l&#8217;anglais que le français, pour profiter de ma VO.<br />
Notez également qu&#8217;on vire le HTML qui fait du mal à google.<br />
Profitez aussi que vous voyez là un extrait de ma fonction de traduction (deux underscores), mais si vous ne l&#8217;avez pas (ce dont je ne doute pas, vous n&#8217;avez sûrement pas non plus la table et son 63e élément qui va avec ^^), ça marche quand même.<br />
Enfin, on envoie tout par GET par simplicité, ce qui exclu les textes trop longs.</p>
<p>Il n&#8217;y a pas vraiment de gestion d&#8217;erreurs, utilisez-la bien. <code>$from</code> et <code>$to</code> doivent être juste des mots de deux lettres, en minuscule (sauf pour le chinois qui fait chier)</p>
<p><strong>Pour garder la traduction et l&#8217;afficher :</strong><br />
Passons au niveau deux. On va parser la réponse google et l&#8217;afficher, et la sauver en BDD.</p>
<p>Le plus simple, l&#8217;affichage du résultat, qui dépends d&#8217;une autre page, celle du webservice. Le webservice est à copier chez vous, n&#8217;allez pas me flooder ma BDD avec vos conneries :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">function</span> translator<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$txt</span>, <span style="color: #0000ff;">$from</span>=<span style="color: #ff0000;">'en'</span>, <span style="color: #0000ff;">$to</span>=<span style="color: #000000; font-weight: bold;">null</span>, <span style="color: #0000ff;">$div_params</span>=<span style="color: #ff0000;">''</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><span style="color: #0000ff;">$to</span>===<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">$to</span> = <span style="color: #0000ff;">$GLOBALS</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'lang'</span><span style="color: #66cc66;">&#93;</span>;
    <span style="color: #0000ff;">$txt</span> = <span style="color: #000066;">preg_replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'/&lt;[^&gt;]*&gt;/'</span>, <span style="color: #ff0000;">''</span>, <span style="color: #0000ff;">$txt</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">$F</span> = <span style="color: #000066;">file_get_contents</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://tondomaine/webservice_translate.php?from=$from&amp;to=$to&amp;txt=&quot;</span>.<span style="color: #000066;">urlencode</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$txt</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$str</span> = <span style="color: #000066;">function_exists</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'__'</span><span style="color: #66cc66;">&#41;</span>? __<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">63</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #ff0000;">'Translate from %s into %s'</span>;
    <span style="color: #0000ff;">$str</span> = <span style="color: #000066;">sprintf</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$str</span>, <span style="color: #000066;">strtoupper</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$from</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000066;">strtoupper</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$to</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">&quot;&lt;div $div_params&gt;&lt;h5&gt;$str&lt;/h5&gt;<span style="color: #000099; font-weight: bold;">\n</span>$F&lt;/div&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Vite fait, le CSS que j&#8217;ai utilisé :<br />
(en dernier argument de la fonction, j&#8217;ai bien sûr mis <code>" class='auto_translation' "</code>)</p>

<div class="wp_syntax"><div class="code"><pre class="css"><span style="color: #6666ff;">.auto_translation</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #000000; font-weight: bold;">border</span>: <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span>; <span style="color: #000000; font-weight: bold;">background</span>: <span style="color: #cc00cc;">#FFA</span>; <span style="color: #000000; font-weight: bold;">margin</span>: <span style="color: #933;">0</span><span style="color: #6666ff;"><span style="color: #933;">.5em</span></span> <span style="color: #933;">1em</span> <span style="color: #933;">0</span> <span style="color: #933;">1em</span> <span style="color: #66cc66;">&#125;</span>
<span style="color: #6666ff;">.auto_translation</span> h5 <span style="color: #66cc66;">&#123;</span> <span style="color: #000000; font-weight: bold;">font</span>: <span style="color: #993333;">bold</span> <span style="color: #933;">0</span><span style="color: #6666ff;"><span style="color: #933;">.8em</span></span> <span style="color: #993333;">sans-serif</span>; <span style="color: #000000; font-weight: bold;">margin</span>: <span style="color: #933;">0</span> <span style="color: #933;">0</span> <span style="color: #933;">0</span><span style="color: #6666ff;"><span style="color: #933;">.2em</span></span> <span style="color: #933;">0</span> <span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Voici maintenant le contenu de <code>webservice_translate.php</code> :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #808080; font-style: italic;">/** Cette page prends un texte et 2 langues.
  Elle utilise google pour traduire le texte d'une langue a l'autre.
  Sauve le resultat en cache.
  L'affiche.
  */</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'txt'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066;">die</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Give some text to translate...&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #000066;">preg_match</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'/^[a-z][a-z]$/'</span>, <span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'from'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066;">die</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Give a language to start from.&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #000066;">preg_match</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'/^[a-z][a-z]$/'</span>, <span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'to'</span><span style="color: #66cc66;">&#93;</span>  <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066;">die</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Give a language to get to.&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">require</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'connect.php'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000066;">mysql_query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SET NAMES 'utf8'&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">get_magic_quotes_gpc</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'txt'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #000066;">stripslashes</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'txt'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">//// cherche si deja la</span>
<span style="color: #0000ff;">$clef</span> = <span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'from'</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #ff0000;">':'</span>.<span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'to'</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #ff0000;">' '</span>.<span style="color: #000066;">md5</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'txt'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">$R</span> = <span style="color: #000066;">mysql_query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SELECT `translation` FROM `autotranslations` WHERE `clef`='$clef'&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$R</span> = <span style="color: #000066;">mysql_fetch_row</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$R</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$R</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000066;">echo</span> <span style="color: #0000ff;">$R</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>;
    <span style="color: #000066;">exit</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/// demande google</span>
&nbsp;
<span style="color: #0000ff;">$url</span> = <span style="color: #ff0000;">'http://translate.google.com/translate_t?sl='</span>.<span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'from'</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #ff0000;">'&amp;tl='</span>.<span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'to'</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #ff0000;">'&amp;text='</span>.<span style="color: #000066;">urlencode</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'txt'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">$F</span> = <span style="color: #000066;">file_get_contents</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$url</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">$B</span> = <span style="color: #000066;">preg_match</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'|&lt;td class=almost_half_cell&gt;&lt;div id=result_box dir=[^&gt;]+&gt;(.*)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=submitcell&gt;|s'</span>, <span style="color: #0000ff;">$F</span>, <span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$B</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066;">die</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Could not translate. Tell Salagir about it.&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">$M</span> = <span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>;
<span style="color: #0000ff;">$M</span> = <span style="color: #000066;">preg_replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'/[<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>]/'</span>, <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>, <span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$M</span> = <span style="color: #000066;">htmlentities</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$M</span> = <span style="color: #000066;">str_replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'&amp;amp;'</span>, <span style="color: #ff0000;">'&amp;'</span>, <span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$M</span> = <span style="color: #000066;">str_replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'&amp;lt;'</span>, <span style="color: #ff0000;">'&lt;'</span>, <span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$M</span> = <span style="color: #000066;">str_replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'&amp;gt;'</span>, <span style="color: #ff0000;">'&gt;'</span>, <span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066;">die</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Could not find any translation.&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$M</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// sauve</span>
&nbsp;
<span style="color: #000066;">mysql_query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;INSERT INTO `autotranslations` SET
        `clef`='$clef', `translation`='&quot;</span>.<span style="color: #000066;">mysql_real_escape_string</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$M</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">&quot;'&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000066;">echo</span> <span style="color: #000066;">mysql_error</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Alors en ce qui concerne les encodages, j&#8217;ai fais&#8230; n&#8217;importe quoi. Mon site est en utf8, et j&#8217;ai changé des trucs au hasard jusqu&#8217;à ce que ça s&#8217;affichait bien. Désolé.<br />
Le htmlentities() essait d&#8217;éviter les problèmes d&#8217;encodages, mais il détruit le HTML, que donc comme vous voyez je remets.<br />
En php5, on peut échapper à cela car htmlentities(), htmlspecialchars() sont nos amis, ont plus de paramètres, et chacun une fonction inversante. Mais bon, là je suis en 4.</p>
<p>Enfin, la table utilisée :</p>

<div class="wp_syntax"><div class="code"><pre class="sql"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #ff0000;">`autotranslations`</span> <span style="color: #66cc66;">&#40;</span>
  <span style="color: #ff0000;">`id_at`</span> int<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span>,
  <span style="color: #ff0000;">`clef`</span> varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">40</span><span style="color: #66cc66;">&#41;</span> character <span style="color: #993333; font-weight: bold;">SET</span> utf8 collate utf8_unicode_ci <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #ff0000;">`translation`</span> text character <span style="color: #993333; font-weight: bold;">SET</span> utf8 collate utf8_unicode_ci <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>,
  <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span>  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`id_at`</span><span style="color: #66cc66;">&#41;</span>,
  <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #ff0000;">`clef`</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`clef`</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Bonus : le 63e élément de ma table de traduction, remplis par les traducteurs de DBM, que je remercie grandement au passage !</p>
<ul>
<li>EN:	Automatic translation from %s into %s</li>
<li>FR:	Traduction automatique de %s en %s</li>
<li>IT:	Traduzione automatica da %s in %s</li>
<li>ES:	Traducción automática de %s a %s</li>
<li>NL:	Automatische translatie van %s naar %s</li>
</ul>
<p>(au moment où j&#8217;ai écris l&#8217;article, tous les traducteurs ne sont pas passés)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/72-webservice-de-traduction-automatique/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Petit vide dans le blog (et déplacement d&#8217;articles)</title>
		<link>http://blog.salagir.com/62-petit-vide-dans-le-blog-et-deplacement-darticles/</link>
		<comments>http://blog.salagir.com/62-petit-vide-dans-le-blog-et-deplacement-darticles/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 08:36:24 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/?p=62</guid>
		<description><![CDATA[Vous l&#8217;avez vu, après un été chargé en articles et la création d&#8217;une version anglaise, le blog se retrouve comme abandonné.
Oh, des articles, j&#8217;en ai, en tête et en brouillon, mais je n&#8217;ai pas le temps de les finir.
Le principal responsable, c&#8217;est Dragon Ball Multiverse, qui avec ses 6 langues + 2 à venir et [...]]]></description>
			<content:encoded><![CDATA[<p>Vous l&#8217;avez vu, après un été chargé en articles et la création d&#8217;une version anglaise, le blog se retrouve comme abandonné.<br />
Oh, des articles, j&#8217;en ai, en tête et en brouillon, mais je n&#8217;ai pas le temps de les finir.</p>
<p>Le principal responsable, c&#8217;est <a href="http://www.dragonball-multiverse.com">Dragon Ball Multiverse</a>, qui avec ses 6 langues + 2 à venir et ses centaines de commentaires par page&#8230; me prends du temps, beaucoup beaucoup.<br />
Mais bon, ça fait plaisir :)</p>
<p>Il y a aussi une autre modification du blog, j&#8217;y vire tous mes articles sur les films, qui ont plus leur place sur <a href="http://www.twivi.com/">le site Twivi</a>.<br />
En les déplaçant, j&#8217;ai à chaque fois ajouté des images, viré des fautes, ajouté du texte&#8230; bref ça vaut le coup :)<br />
Je déplace également vos commentaires sur Twivi, quand l&#8217;article sort.</p>
<p>Retrouvez-les ici :</p>
<ul>
<li><a href="http://www.twivi.com/2008/08/03/1128-redif-shaolin-soccer/">Shaolin Soccer</a></li>
<li><a href="http://www.twivi.com/2008/09/28/1172-pirates-des-caraibes-3-mauvais/">Pirates of ze caraibes, trois</a></li>
<li><a href="http://www.twivi.com/2008/09/23/1327-les-contes-de-terremer/">Les contes de Terremer</a></li>
<li><a href="http://www.twivi.com/2008/10/11/1361-transformers-le-film/">Transformers le film</a></li>
<li><a href="http://www.twivi.com/2008/10/25/1326-team-america-world-police/">Team America World Police</a></li>
<li><a href="http://www.twivi.com/2008/10/29/1414-mortal-kombat-les-films/">Mortal Kombat 2</a></li>
<li>Les autres, à venir</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/62-petit-vide-dans-le-blog-et-deplacement-darticles/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Extracteur de textes d&#8217;un fichier Photoshop</title>
		<link>http://blog.salagir.com/41-extracteur-de-textes-dun-fichier-photoshop/</link>
		<comments>http://blog.salagir.com/41-extracteur-de-textes-dun-fichier-photoshop/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 09:52:59 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Mes scripts utiles]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/?p=41</guid>
		<description><![CDATA[Lorsque je créais le Geek&#8217;s World du jour, il m&#8217;arrivait souvent de changer le texte à la dernière seconde. Au final, ce qu&#8217;il y avait dans le fichier .psd était la meilleure référence pour savoir ce qui ce disait dans le strip, et non mon fichier texte avec les paroles initiales.
De plus, je faisais souvent [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsque je créais le Geek&#8217;s World du jour, il m&#8217;arrivait souvent de changer le texte à la dernière seconde. Au final, ce qu&#8217;il y avait dans le fichier .psd était la meilleure référence pour savoir ce qui ce disait dans le strip, et non mon fichier texte avec les paroles initiales.<br />
De plus, je faisais souvent la traduction directement dans le fichier image.</p>
<p>Or tous les textes de GsW sont proprement rangés en base de données&#8230; ce qui permet d&#8217;ailleurs de chercher un strip par le contenu de sa bulle, ainsi que d&#8217;avoir des réponses googles sur ces mêmes contenus, qu&#8217;on ne voit à la base que dans une image.</p>
<p>Pour ce faire, j&#8217;ai fais un extracteur de textes.<br />
Les textes écrits dans un fichier Photoshop, pour peu qu&#8217;ils ne soient pas transformés en bitmap, sont modifiables à volonté, c&#8217;est donc que les lettres qui le constituent sont rangées quelques part. C&#8217;est effectivement le cas.</p>
<p>Exemple d&#8217;utilisation :</p>
<pre class="BASH">
$ perl PsdTextExtractor.pl 614-txt.psd
free samples
Hey, I paid 2 euros for this on a plane!
échantillon gratuit
Hé, j'ai payé 2 euros pour ça dans un avion !
Geek's World 484 by Salagir
</pre>
<p>J&#8217;ai pris <a href="http://www.geeksworld.org/strip_614.html">un strip avec peu de texte</a> pour que l&#8217;exemple ne soit pas trop gros. Notez que la mise en forme n&#8217;est pas notée dans ma sortie, qui est en simple text.<br />
Vous l&#8217;aviez bien sûr compris, j&#8217;ai fais un autre script qui appelle celui-là, qui vire le copyright, sépare les deux langues et mets le texte en base de donnée :)</p>
<p>Vous pouvez télécharger le code :</p>
<ul>
<li><a href="/upload/PsdTextExtractor.pl">PsdTextExtractor.pl</a></li>
<li><a href="/upload/PsdTextExtractor.pl.zip">PsdTextExtractor.pl Zippé</a></li>
<li><a href="/upload/PsdTextExtractor.pl.html">Voir PsdTextExtractor.pl en ligne</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/41-extracteur-de-textes-dun-fichier-photoshop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>J&#8217;aime pas les casses-couilles !</title>
		<link>http://blog.salagir.com/40-jaime-pas-les-casses-couilles/</link>
		<comments>http://blog.salagir.com/40-jaime-pas-les-casses-couilles/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 09:24:48 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Ca ne va pas du tout !]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/?p=40</guid>
		<description><![CDATA[J&#8217;aime pas&#8230; les gens qui font des actions dont la conséquence ne profite qu&#8217;à eux, dérange les autres, et qu&#8217;en plus de cela, ils demandent des droits et une attention particulière pour continuer à le faire.
Pas clair ce que je raconte ? Laissez-moi vous donner quelques exemples.
J&#8217;aime pas les clopeurs !
Je n&#8217;ai rien contre les [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;aime pas&#8230; les gens qui font des actions dont la conséquence ne profite qu&#8217;à eux, dérange les autres, et qu&#8217;en plus de cela, ils demandent des droits et une attention particulière pour continuer à le faire.</p>
<p>Pas clair ce que je raconte ? Laissez-moi vous donner quelques exemples.</p>
<h3>J&#8217;aime pas les clopeurs !</h3>
<p>Je n&#8217;ai rien contre les drogués. Mais est-ce que je vous plante mes seringues d&#8217;héroïnes dans le bras pendant les soirées moi ? Non.</p>
<p>Comme l&#8217;alcoolique, le clopeur est un drogué. Sauf que peu de drogués prennent leur fixe pendant leur pause au bureau, puis viennent te parler, déversant sur toi l&#8217;odeur monstrueuse de leur drogue sur ta figure. Je veux dire, si un collègue revenait de la machine à café avec une haleine d&#8217;alcool, on le virerai. Mais l&#8217;haleine de clope, qui contrairement à la précédente reste sur les habits, est tolérée.</p>
<p>Je n&#8217;ai jamais quitté une discussion, une table ou un groupe subitement pour aller boire mon whisky-coca à la fenêtre. Je n&#8217;ai jamais coupé une personne parce que je devais aller vérifier mes mails, jouer à Zelda ou me verser un coca parce que ca fait 3 heures que j&#8217;en ai pas bu je tiens plus là.<br />
J&#8217;en déduis que je suis donc plus accro, par exemple, aux toilettes et à dessiner Geek&#8217;s World qu&#8217;au coca, mais mes petites addictions ne sont rien face à celles du fumeur moyen.</p>
<p>Je dois dire que l&#8217;addiction de certains dérange plus que d&#8217;autres. Ca ne me dérangerai pas qu&#8217;une personne sorte sa fiole d&#8217;absinthe en lieu public pour en boire une gorgée. Tant qu&#8217;il n&#8217;est pas bourré ou fou et ne dérange les autres. Problème : le clopeur est &#8220;bourré&#8221; dès la première cigarette. S&#8217;il m&#8217;envoyait à la figure une douce odeur de romarin ça ne me dérangerai pas outre mesure. Dommage, l&#8217;odeur de la clope est dégueulasse, se pose sur les habits, et en retour de soirée, l&#8217;odeur de tabac froid est tellement immonde que même les fumeurs doivent jeter immédiatement leurs habits au linge sale afin de pouvoir à nouveau respirer.</p>
<p>Alors après, n&#8217;allez pas jouer vos victimes et persécutés parce qu&#8217;on interdit de plus en plus de fumer dans tous les lieux plus ou moins public. Je suis pour toute forme d&#8217;interdiction de vos parasitages en série. Allez puer et saloper chez vous : je ne me plains personnellement pas de l&#8217;interdiction de pisser sur les pantalons des gens dans les bars, pourtant je trouve que c&#8217;est un acte social pertinent !</p>
<p>De plus, une grande partie (non pas tous, inutile de dire &#8220;moi je le fais pas&#8221;) des fumeurs jettent par terre de nombreuses saletés. A commencer tout simplement par des morceaux de paquet.<br />
Déjà à l&#8217;ouverture : le petit fils de plastique est enlevé&#8230; et jeté par terre. Puis le haut du plastique transparent retiré, et jeté par terre. Le paquet est ouvert, et un truc de papier/alu est enlevé, et jeté par terre.<br />
Et j&#8217;ai vu de nombreux fumeurs jeter le paquet vide par terre également.<br />
Enfin, le mégot. 100% des clopeurs jettent leur mégot par terre. Et bien c&#8217;est dégueulasse. Non, le mégot n&#8217;est pas super-biodégradable. Le mégot est retiré du trottoir non pas par l&#8217;opération du saint esprit ou de la nature, mais bien du balayeur de rue !</p>
<p>Alors les drogués : veuillez arrêter ! (et ainsi faire de pertinentes économies)<br />
A ce conseil que je n&#8217;hésite pas à donner, des fumeurs m&#8217;ont dit que ce n&#8217;était pas si facile. Après tout si l&#8217;on vends de nombreux patchs et autres méthodes, c&#8217;est qu&#8217;il doit y avoir une raison.<br />
Je ne vous accuse pas de manquer de self-contrôle, mais plutôt de vous cacher une terrifiante vérité : si vous êtes incapable d&#8217;arrêter, cela ne prouve-t-il pas que vous êtes des drogués de première catégorie ? Comment vous pouvez vivre en sachant que vous êtes encore plus dépendant de ce bâton empoisonné que&#8230; <em>de la bouffe</em> !?!</p>
<p>Personnellement si je me mettais à trembler parce que je n&#8217;ai pas bu de coca, touché à un ordi, joué à la console, depuis plus de 5 heures, alors je me poserai des questions sur mon état de santé.<br />
Pour info, j&#8217;ai testé et je peux me passer de tout cela plusieurs semaines sans le moindre pet de symptôme (oui, l&#8217;inquiétude que je rate des mails importants ou des updates en ligne s&#8217;efface de plus en plus au fur et à mesure que passent les jours sans internet. C&#8217;est cool)</p>
<h3>J&#8217;aime pas les motards !</h3>
<p>Je remarque que seuls les motards défendent les motards. Normal. Il faut être taré, ou motard, pour dire du bien de cet engin mortel.</p>
<p>Que vous aimiez risquer votre vie sur un engin sans protection aucune à 130 Km/h, ca ne me dérange pas. Ce qui me dérange, c&#8217;est que pour augmenter la sécurité de votre occupation monstrueusement mortelle, vous demandiez à tous les autres usagers de la route de faire moult sacrifices.</p>
<p>Sur autoroute ou périth, vient le problème des phares. Lorsqu&#8217;on a proposé à toutes les voitures d&#8217;allumer leurs feux de jour, les motards ont dit : &#8220;Ah non, c&#8217;est notre truc à nous le phare allumé de jour ! Si toutes les voitures font de même, vous ferez pas attention à nous !&#8221;<br />
Mais <strong>je veux pas</strong> faire attention à vous les mecs ! Je n&#8217;ai pas à ME sacrifier et à faire encore plus attention sur la route pour votre petit confort d&#8217;avoir le droit de me dépasser pendant les embouteillages et vous mettre en danger.<br />
Donc maintenant vous mettez vos warnings. Clignotants permanents. Bravo. Vous n&#8217;êtes pas les rois de la route, simplement les parasites de la route. Est ce que je vous demande de limiter les vitesses des voitures et de faire attention à moi pour que je puisse prendre le périth en rollers moi ?</p>
<p>Dans les rues de Paris, vous passez entre les voitures roulant et les voitures garées, créant votre petite voie de motard, frôlant ainsi vos ennemis à quatre roues&#8230; ou les piétons. Un peu comme un vélo, mais en 3 à 5 fois plus vite.<br />
Pourquoi ils ne roulent pas sur la voie voiture, comme les engin motorisés qu&#8217;ils sont, au lieu d&#8217;essayer de tout le temps dépasser par la gauche, la droite ou en-dessous, demande-je ?<br />
Parce que si une voiture freine brusquement, ou accélère brusquement, et qu&#8217;elle éclate une moto, ca fait <em>super mal</em>, me réponds un motard. Pour notre sécurité, on ne doit <strong>PAS</strong> rester entre l&#8217;avant et l&#8217;arrière de deux voitures.<br />
Mais <em>qu&#8217;est ce que vous faites sur cette route</em> si elle est si dangereuse, bordel ??</p>
<p>Dites-moi : combien de vélocyclistes se sont faits décapités par les barres de bords de route en se crachant contre elles ? Des gars sous stéroïdes peut-être&#8230; Combien chez les voitures ? Pas beaucoup non plus je pense&#8230;<br />
Ne pensez-vous pas qu&#8217;il y a un problème à vous prendre pour un vélo avec un moteur de voiture ? A moins que vous vous preniez pour une voiture avec des protections de vélo ?</p>
<p>Enfin, car tel le clopeur il fallait que votre petite manie fasse même souffrir tout le monde aux alentours et pas simplement les usagers de la route, la mob est le créateur de bruit le plus important qu&#8217;il m&#8217;ai été donné de juger, AVANT les bébés et gamins avec un sifflet, AVANT les camions, AVANT les alarmes anti-incendie, AVANT les travaux à côté de chez moi.<br />
Mais comment pouvez-vous supporter un tel vacarme ? Le moteur strident et aigu à un milliard de décibels avec effet doppler m&#8217;arrache mes oreilles de piéton à chacun de vos passages.<br />
Une voiture démarre ? Ca fait un vroum et c&#8217;est fini. Une moto démarre ? Pendant que monsieur mets ses gants, cet engin reste super bruyant sous mes fenêtres.<br />
Et ceci exclus encore les casse couilles fiers de l&#8217;être qui font tourner leur accélérateur juste pour entendre leur moteur rugir.<br />
Vous faite du tapage nocturne, vous faites du tapage diurne. Vous êtes des casse couilles !</p>
<h3>Moi, c&#8217;est mieux.</h3>
<p>Charité bien établie commence par soit-même : j&#8217;utilise constamment le vélo. Est ce que je demande des droits particuliers pour le faire ? Certains le font, pas moi.</p>
<p>Les vélos peuvent être de sacrés casse couilles. Ils peuvent rouler à toute blinde sur les trottoirs justifiant que la route est dangereuse pour eux. Ils n&#8217;ont pas le droit. Arrêtez-les et engueulez-les. Si la route est trop dangereuse pour eux, qu&#8217;ils ne prennent pas le vélo !<br />
Sur le trottoir, je me permets, le moins souvent possible, de rouler (au lieu de marcher en tenant mon vélo comme je devrais), dans des cas particuliers, et reviens sur la route à tout croisement de piétons. Il faut rouler au plus au bord des trottoirs, pour s&#8217;éloigner au maximum des portes d&#8217;où peuvent sortir à tout moment des gens. Il faut rouler lentement ! Je suis en tort et je le sais.</p>
<p>Le vélo sur la route, de par sa terrifiante lenteur, ennuie fortement les voitures. C&#8217;est normal. Personnellement, je n&#8217;hésite pas à me ranger sur une place vide pour laisser passer les voitures, comme le ferai un (bon) conducteur de tracteur sur une départementale.<br />
C&#8217;est une question de savoir-vivre.</p>
<p>Enfin je n&#8217;utilise pas ma sonnette pour dire aux gens de dégager comme le font beaucoup d&#8217;autre. Non mais il se prends pour quoi ? Tu es un vélo, tu es maniable. Sonnette pourquoi pas dans des moments particuliers, mais <em>ne demande pas à ce qu&#8217;on fasse spécialement attention à toi</em> !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/40-jaime-pas-les-casses-couilles/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The 1468456th PHP class that overloads mysql</title>
		<link>http://blog.salagir.com/43-the-1468456th-php-class-that-overloads-mysql/</link>
		<comments>http://blog.salagir.com/43-the-1468456th-php-class-that-overloads-mysql/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 16:26:06 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[My useful scripts]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/?p=43</guid>
		<description><![CDATA[My first code is totally uninteresting for real developers, but I will use this class often in my next scripts, so you need to know a little about this class.
Plus, it&#8217;s certainly a rip-off of PHP 5 mysql class, but well, I still use 4.
It still can do a few good things.

Good display of errors.
Use [...]]]></description>
			<content:encoded><![CDATA[<p>My first code is totally uninteresting for real developers, but I will use this class often in my next scripts, so you need to know a little about this class.</p>
<p>Plus, it&#8217;s certainly a rip-off of PHP 5 mysql class, but well, I still use 4.</p>
<p>It still can do a few good things.</p>
<ul>
<li>Good display of errors.</li>
<li>Use easily Transactions (a great feature of mysql, on innoDB tables only)</li>
<li>Usable thru an instance, or not</li>
</ul>
<p>Exemple of use :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #0000ff;">$SQL</span> = <span style="color: #000000; font-weight: bold;">new</span> sqlQueries<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// one element directly</span>
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$SQL</span>-&gt;<span style="color: #006600;">query2cell</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SELECT firstname FROM persons WHERE id=$id LIMIT 1&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// loop on result</span>
<span style="color: #b1b100;">foreach</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$SQL</span>-&gt;<span style="color: #006600;">query2assoc</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SELECT * FROM smalltable&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #0000ff;">$element</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">&quot;&lt;p&gt;$element[champ1]: &lt;code&gt;$element[champ2] ($element[champ3])&lt;/p&gt;&quot;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">// one-liner !</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">&quot;Ids: &quot;</span>.<span style="color: #000066;">implode</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;, &quot;</span>, <span style="color: #0000ff;">$SQL</span>-&gt;<span style="color: #006600;">query2list</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;SELECT id FROM table WHERE $conditions&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// escaping (you of course disabled this horrible magic quotes thing)</span>
<span style="color: #0000ff;">$name</span> = <span style="color: #0000ff;">$SQL</span>-&gt;<span style="color: #006600;">e</span><span style="color: #66cc66;">&#40;</span> <span style="color: #0000ff;">$_REQUEST</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'name'</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// take no risks : if the 1st query miss, the 2nd wont do anything.</span>
<span style="color: #808080; font-style: italic;">// and even: vice versa.</span>
<span style="color: #0000ff;">$SQL</span>-&gt;<span style="color: #006600;">tr_begin</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$SQL</span>-&gt;<span style="color: #006600;">query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;UPDATE persons SET name='$name' WHERE id=$id&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$SQL</span>-&gt;<span style="color: #006600;">query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;INSERT INTO actions (type, infos) VALUES('changename', '$id -&gt; $name')&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$SQL</span>-&gt;<span style="color: #006600;">tr_end</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Change the constructor code as you with. Usually, I delete it and make mysql_connect() elsewhere.</p>
<p>Download code of version 0.95 here :</p>
<ul>
<li><s>sqlQueries Gzippé</s> (nope. Apache try to execute it)</li>
<li><a href="/upload/sqlQueries.php.zip">sqlQueries Zipped</a></li>
<li><a href="/upload/sqlQueries.php.html">see sqlQueries online</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/43-the-1468456th-php-class-that-overloads-mysql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>D&#8217;où vient mon pseudonyme</title>
		<link>http://blog.salagir.com/38-dou-vient-mon-pseudonyme/</link>
		<comments>http://blog.salagir.com/38-dou-vient-mon-pseudonyme/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 19:59:44 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/?p=38</guid>
		<description><![CDATA[Mon très vieux site hébergé sur Free n&#8217;est pas ami avec Google. En effet aucune de ses pages n&#8217;est référencé, ce qui personnellement me navre.
Je vais donc updater et passer quelques-uns de mes écrit dessus, ici.
On m&#8217;a souvent demandé d&#8217;où venait mon pseudo. Voici l&#8217;explication.
Quand vous me demanderez, je vous forwarderai lâchement vers cette page.
En [...]]]></description>
			<content:encoded><![CDATA[<p><em>Mon très vieux site hébergé sur Free n&#8217;est pas ami avec Google. En effet aucune de ses pages n&#8217;est référencé, ce qui personnellement me navre.<br />
Je vais donc updater et passer quelques-uns de mes écrit dessus, ici.</em></p>
<p>On m&#8217;a souvent demandé d&#8217;où venait mon pseudo. Voici l&#8217;explication.<br />
Quand vous me demanderez, je vous forwarderai lâchement vers cette page.</p>
<p>En préambule, parce que beaucoup de gens font l&#8217;erreur, <strong>Salagir</strong> se prononce &#8220;Salagir&#8221;. Pas &#8220;Salaguir&#8221;</p>
<p>Il y a bien longtemps, alors que j&#8217;étais jeune et innocent, que je n&#8217;étais même pas encore perverti par Unix, Windows, et même Dragon Ball&#8230; en bref avant mes 10 ans, j&#8217;avais déjà en moi le démon de la BD, et je dessinais (mal) des BDs.</p>
<p>Ma première BD, début d&#8217;une longue saga, avait pour personnage principal, un truc rond et bleu clair, avec trois pattes telles des fils de fer. Ainsi je n&#8217;aurai aucune difficulté à le faire durant des centaines de pages. N&#8217;était-ce pas bien pensé ?</p>
<p>Ce héros s&#8217;appelait Glouton Hizmé. Ce nom de merde est du au fait que le personnage ayant pour corps rien d&#8217;autre qu&#8217;une bouche et des yeux, ce serait un gros goinfre, donc glouton. Et chaque personnage s&#8217;appellerait Glouton Kekchose, comme les Schtroumpfs.</p>
<p>Et pourquoi hizmé ? Parce que dans une BD (<em>Les observateurs de la Terre</em>, que je conseille à tous), à un moment on voit des Enzymes Gloutons en action, et ce n&#8217;étaient que des têtes, tels des Pacman, qui ressemblaient quand même un max aux Gloutons à moi ! De fils en aiguilles j&#8217;ai transformé enzyme en hizmé qui sonne vachement mieux.</p>
<p align="center">Voici des images totalement exclusives. Il s&#8217;agit en effet de <strong>ma toute première BD</strong>. Je l&#8217;évalue à mes 7 ans.<br />
<small>Note à ceux qui font attention : oui, la dernière bulle est fausse. Et j&#8217;ai du, à la page suivante, corriger le personnage qui aurait du dire &#8220;blanche&#8221;</small><br />
<img src="/upload/glouton-hizme-extrait.png" /> <a href="/upload/glouton-hizme.png"><img src="/upload/glouton-hizme.jpg" /></a></p>
<p><img src="/upload/glouton-hizme-journal.gif" align="left" /> <img src="/upload/glouton-hizme-3D.jpg" align="right" /> J&#8217;ai utilisé le nom de ce personnage aussi comme le nom d&#8217;un journal amateur que j&#8217;ai fait seul durant plusieurs années, qui n&#8217;a pas profité à plus de 10 ou 15 lecteurs, famille principalement.<br />
Le journal glouton hizmé etait mensuel et faisait 4 puis 6 pages.<br />
Image à gauche : découvrant l&#8217;ordinateur, j&#8217;ai dessiné Hizmé à nouveau, ainsi qu&#8217;en 3D (vive la sphère ovale)</p>
<p>Lorsque, au lycée, je découvrais les joies d&#8217;internet, j&#8217;ai fais un site sur <em>chez.com</em>, et mon login fut alors hizme (sans le é), bref, c&#8217;était mon pseudo.<br />
Je pensais que ce nom étant inventé, personne d&#8217;autre ne l&#8217;aurai, et un jour, je l&#8217;ai vérifié sur un moteur de recherche. Et la, stupéfaction : le mot existe dans je ne sais quelle langue, c&#8217;est aussi un nom de famille, et même de ville !</p>
<p>C&#8217;est pourquoi j&#8217;ai décidé de changer de pseudo. J&#8217;ai regardé mon classeur qui contenait les dessins et les noms de tous mes personnages. Et là, les méchants : ce sont des créatures noires créées par la dissolution d&#8217;un être très puissant. Elles s&#8217;appellent Rajores, Idrogear, Serojar&#8230; et l&#8217;être en question s&#8217;appelle&#8230;. Salagir !</p>
<p align="center">Voici ce Salagir. Le méchant qui combattait Hizmé était Rajores, celui en haut à gauche de la liste, que vous verrez en cliquant sur l&#8217;image.<br />
<a href="/upload/salagirs2.png"><img src="/upload/salagirs.png" /></a></p>
<p>Salagir est-il toujours dans mon esprit ce personnage tout noir ? Plus vraiment, vous en saurez plus sur la rediffusion d&#8217;un autre de mes articles ;)</p>
<p>Petite vérification sur le net : Salagir n&#8217;existe pas, et ce pour tous les moteurs de recherches. Parfait.</p>
<p>Maintenant, lorsque vous cherchez salagir sur le net, vous ne pouvez tomber que sur <strong>MOI</strong> !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/38-dou-vient-mon-pseudonyme/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Convertir du HTML en BBcode</title>
		<link>http://blog.salagir.com/37-convertir-du-html-en-bbcode/</link>
		<comments>http://blog.salagir.com/37-convertir-du-html-en-bbcode/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 12:54:52 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Mes scripts utiles]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/?p=37</guid>
		<description><![CDATA[Le BBcode est la syntaxe utilisée dans phpBB et d&#8217;autres sites contenant des formulaires d&#8217;édition, grâce à sa syntaxe claire et intuitive, contrairement à cette putain d&#8217;écriture de wiki de mes deux tentacules.
Si comme ça m&#8217;est arrivé, vous voulez écrire dans un post de forum le contenu d&#8217;une page HTML, ce script en Perl est [...]]]></description>
			<content:encoded><![CDATA[<p>Le BBcode est la syntaxe utilisée dans phpBB et d&#8217;autres sites contenant des formulaires d&#8217;édition, grâce à sa syntaxe claire et intuitive, contrairement à cette putain d&#8217;écriture de wiki de mes deux tentacules.</p>
<p>Si comme ça m&#8217;est arrivé, vous voulez écrire dans un post de forum le contenu d&#8217;une page HTML, ce script en Perl est pour vous.<br />
Il prends un fichier HTML en entrée, et pond un fichier texte contenant la syntaxe BB.<br />
Il ne vous reste plus qu&#8217;à la copier dans un post.</p>
<p>J&#8217;ai fais ce script, en 2005, simplement parce que j&#8217;en ai trouvé aucun le faisant aussi bien (c&#8217;était pourtant pas très dur).</p>
<p>Je ne serai trop vous conseiller, pour son utilisation, d&#8217;avoir un code html plutôt <strong>valide</strong>&#8230;</p>
<p><strong>Exemple :</strong><br />
Fichier test.html :</p>
<pre class="HTML">&lt;p>Fait &lt;b>beau&lt;/b> aujourd'hui!!&lt;br />
Grave...&lt;/p>
&lt;p>Grave beau !&lt;/p></pre>
<p>Exécution :</p>
<pre class="BASH">$ perl html2bbcode.pl test.html</pre>
<p>Fichier résultant test.bb :</p>
<pre class="BB">Fait [b]beau[/b] aujourd'hui!!
Grave...

Grave beau !</pre>
<p>Vous pouvez télécharger le code :</p>
<ul>
<li><a href="/upload/html2bbcode.pl">html2bbcode.pl</a></li>
<li><a href="/upload/html2bbcode.pl.zip">html2bbcode.pl Zippé</a></li>
<li><a href="/upload/html2bbcode.pl.html">voir html2bbcode.pl en ligne</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/37-convertir-du-html-en-bbcode/feed/</wfw:commentRss>
		</item>
		<item>
		<title>English version</title>
		<link>http://blog.salagir.com/42-english-version/</link>
		<comments>http://blog.salagir.com/42-english-version/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 10:21:14 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/?p=42</guid>
		<description><![CDATA[English blog, opened !
And it&#8217;s post number 42, which is cool.
My blog needed an english version, because I put my scripts here, and it would be too sad if only french people used them.
I won&#8217;t translate my others posts thought, for the most part because I&#8217;m lazy.
Anticipate about one post every month or two months.
]]></description>
			<content:encoded><![CDATA[<p>English blog, opened !<br />
And it&#8217;s post number 42, which is cool.</p>
<p>My blog needed an english version, because I put my scripts here, and it would be too sad if only french people used them.</p>
<p>I won&#8217;t translate my others posts thought, for the most part because I&#8217;m lazy.</p>
<p>Anticipate about one post every month or two months.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/42-english-version/feed/</wfw:commentRss>
		</item>
		<item>
		<title>J&#8217;aime pas ça, il faut que le monde le sache ! (part 2)</title>
		<link>http://blog.salagir.com/35-jaime-pas-ca-il-faut-que-le-monde-le-sache-part-2/</link>
		<comments>http://blog.salagir.com/35-jaime-pas-ca-il-faut-que-le-monde-le-sache-part-2/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 06:56:04 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Ca ne va pas du tout !]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/?p=35</guid>
		<description><![CDATA[La suite des -extrêmement passionnantes- choses qui m&#8217;ennuient.
Vu l&#8217;extrême succès de la précédente édition, je pense a m&#8217;ouvrir un compte myspace pour partager mes goûts si pertinents avec tous mes amis.
D&#8217;ailleurs à ce propos, je réponds à un commentaire de Mazzu, qui dit :
à ce propos, après avoir lu ton billet, je me disais que [...]]]></description>
			<content:encoded><![CDATA[<p>La suite des -extrêmement passionnantes- choses qui m&#8217;ennuient.</p>
<p>Vu l&#8217;extrême succès de la précédente édition, je pense a m&#8217;ouvrir un compte myspace pour partager mes goûts si pertinents avec tous mes amis.</p>
<p>D&#8217;ailleurs à ce propos, je réponds à un commentaire de Mazzu, qui dit :<br />
<em>à ce propos, après avoir lu ton billet, je me disais que tu étais vraiment pas quelqu&#8217;un de trop contrariant vu qu&#8217;il n&#8217;y a pas beaucoup de choses que tu n&#8217;aimes pas</em><br />
En fait, je ne cite pas ce que tout le monde n&#8217;aime pas aussi, genre &#8220;J&#8217;aime pas me coincer le doigt dans une porte&#8221;, ni les trucs classiques comme &#8220;J&#8217;aime pas les légumes verts&#8221;. Je garde ici ce qui me semble sortir de l&#8217;ordinaire.</p>
<p>J&#8217;aime pas&#8230;</p>
<h3>Les  polices de caractères avec des lettres visuellement identiques</h3>
<p>Vous l&#8217;avez tous vu. Dans certaines fonts, le chiffre 1 (un), la lettre l (entre k et m) et le I (i majuscule) peuvent être dessiné de façon totalement identique !</p>
<p>C&#8217;est totalement stupide, particulièrement dans le recopiage de password&#8230;</p>
<h3>Les polices avec les chiffres qui sont plus haut et plus bas que ce qu&#8217;il faut pour déconner</h3>
<p><img src="/upload/fonts-chiffres.png" alt="Exemples de font" style="float:left; margin-right: 5px" /><br />
Au première abord, c&#8217;est une écriture tout à fait normale, et soudainement, il y a un chiffre, et il est décalé vers le bas !?</p>
<p>Pouvez pas écrire normalement non ? Le 9 n&#8217;est pas un &#8220;g&#8221; !</p>
<h3>Le noir complet</h3>
<p>Je n&#8217;ai pas peur du noir. Mais en tant qu&#8217;humain, j&#8217;ai ce défaut de ne pas voir sans lumière.</p>
<p>Dans un noir réellement complet, je m&#8217;explose contre les murs, les meubles, et tous ces objets qui se sont mis sur ma route pendant que je dormais, pour me piéger lorsque j&#8217;ai besoin d&#8217;aller au toilettes la nuit.<br />
(et le chat se fout de ma gueule)<br />
((c&#8217;est peut-être lui qui a déplacé les objets))</p>
<p>Lorsque je dors ailleurs que chez moi, chez des amis ou à l&#8217;hôtel, un couloir et une chambre totalement obscurs peuvent rendre mes déplacements très très lents.</p>
<h3>Les appareils qui s&#8217;allument quand on allume la lumière et qui font &#8220;vvvvvv&#8221;</h3>
<p>Après avoir réussi à me déplacer sans encombre en pleine nuit dans la salle de bain, j&#8217;allume la lumière, parce que là, j&#8217;ai le droit, sauf si des gens dorment dans la salle de bain (ça arrive).<br />
Et là, horreur, un climatiseur ou autre se déclenche avec la lumière (ils aiment bien), et un ventilo commence son vrombissement.</p>
<p>J&#8217;en fini quelques fois par m&#8217;en sortir dans le noir (pas complet) histoire de ne réveiller personne par ce bruit.</p>
<h3>Le parmesan</h3>
<p>Ce fromage est visible particulièrement comme accompagnement de tout dans les restaux italiens (pâtes, lasagne, salade, boule de glace)</p>
<p>Je suis un grand fan de fromage dans mes plats. Énormément. Si celui-ci est <em>fondu</em> ! Par exemple, je trouve fort dommage le fromage grillé. Transformer en carbone cette denrée !!&#8230;</p>
<p>Mais bref. Le parmesan, lui ne fond pas. Ou plutôt, quand on le met sur notre plat, jamais il ne fond. On mange donc avec les pâtes de la poudre de fromage au lieu du fromage fondu, et ça, c&#8217;est nul.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/35-jaime-pas-ca-il-faut-que-le-monde-le-sache-part-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>J&#8217;aime pas ça, il faut que le monde le sache ! (part 1)</title>
		<link>http://blog.salagir.com/25-jaime-pas-ca-il-faut-que-le-monde-le-sache-part-1/</link>
		<comments>http://blog.salagir.com/25-jaime-pas-ca-il-faut-que-le-monde-le-sache-part-1/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 14:55:56 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Ca ne va pas du tout !]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/?p=25</guid>
		<description><![CDATA[Puisque ceci est un blog, il est temps que je parle de moi.
Il y a des choses que je n&#8217;aime pas en ce monde, sûrement souvent pour de mauvaises raisons.
Je vous invite a confirmer ou infirmer mes raisons à chaque sujet.
Il n&#8217;empeche, j&#8217;aime pas&#8230;
Les DVDs de films uniques, numérotés parce qu&#8217;ils sont dans une collection
Exemple, [...]]]></description>
			<content:encoded><![CDATA[<p>Puisque ceci est un blog, il est temps que je parle de moi.<br />
Il y a des choses que je n&#8217;aime pas en ce monde, sûrement souvent pour de mauvaises raisons.</p>
<p>Je vous invite a confirmer ou infirmer mes raisons à chaque sujet.</p>
<p>Il n&#8217;empeche, j&#8217;aime pas&#8230;</p>
<h3>Les DVDs de films uniques, numérotés parce qu&#8217;ils sont dans une collection</h3>
<p>Exemple, les DVDs n&#8217;ont en commun qu&#8217;un producteur ou le fait d&#8217;être dans une collection &#8220;enfants&#8221;.<br />
Numéroter les films Ghiblis&#8230; n&#8217;a aucun sens pour moi !</p>
<p>Après, les tranches sont moches, donnent l&#8217;impression qu&#8217;on manque de films (ce doit être le but)&#8230;</p>
<h3>Les collectors</h3>
<p>Payer plus cher un truc qui est rarement de meilleur qualité et estanpillé &#8220;collector&#8221;, beurk !</p>
<p>Une boîte souvent énorme et avec peu d&#8217;intérêt, posant en plus un problème&#8230;<br />
Lorsque l&#8217;objet fait justement parti d&#8217;une collection&#8230; Cela fait alors bien désordre dans les étagères.</p>
<h3>Les gens dans leurs voitures à l&#8217;arrêt</h3>
<p>Une voiture avec quelqu&#8217;un dedans, ça doit rouler ! On peut dans des cas extrêmes attendre quelqu&#8217;un dans sa voiture et passer pour une voiture parquée. Mais je croise (souvent en vélo) de bien trop nombreuses voitures, garées, avec des gens dedans.</p>
<p>Qu&#8217;est ce que vous faites là !?</p>
<p>Le problème c&#8217;est que en vélo je ne vois aucun humain, et subitement, passant à côté d&#8217;une voiture, j&#8217;entends parler, ce qui me perturbe.<br />
Faut par perturber un cycliste sur la route.</p>
<h3>Les voitures qui servent de vide-grenier</h3>
<p>Je suis maniaque et méticuleux, mais je n&#8217;oblige personne à en faire autant.</p>
<p>Par contre, souvent en montant dans une voiture, je dois déplacer des objets divers sur mon chemin, laissés là par le propriétaire, qui voit sûrement plus sa voiture comme une extension de son armoire que comme un moyen de transport.</p>
<p>On peut trouver : des sacs plastiques, des bouteilles d&#8217;eau, des peluches, des magasines, une couverture. Ce sont les plus courants, mais ensuite, chacun aura ses propres objets surprises.</p>
<p>On arrive vite dans ces cas également à des coffres toujours pleins.</p>
<h3>Les gens qui traversent en diagonale pas optimisé</h3>
<p>Voyez le tableau, dans un croisement, vous devez aller à l&#8217;opposer, c&#8217;est à dire traverser deux fois.<br />
Vu que dans ce genre de cas, il y a de grandes chances que l&#8217;un des deux sens soit vert pour moi, je choisi ce sens puis j&#8217;attends le changement de sens pour traverser à nouveau.</p>
<p>Il y a des gens qui ne font pas ça. Il s&#8217;arrêtent droit devant eux et attendent que leur pieton en face passe au vert même si celui d&#8217;à côté l&#8217;est déjà. Alors ils attendent, traversent, et forcément, attendent de nouveau pour traverser dans l&#8217;autre direction, puisque ils sont au début de son feu rouge.</p>
<p>Ceci n&#8217;est pas optimisé !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/25-jaime-pas-ca-il-faut-que-le-monde-le-sache-part-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Fonction temporelles: Affichage, barre d&#8217;avancement.</title>
		<link>http://blog.salagir.com/34-fonction-temporelles-affichage-barre-davancement/</link>
		<comments>http://blog.salagir.com/34-fonction-temporelles-affichage-barre-davancement/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 16:15:20 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Mes scripts utiles]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/34-fonction-temporelles-affichage-barre-davancement/</guid>
		<description><![CDATA[Ecrire du temps de façon confortable pour les humains. Voilà qui est intéressant.
En effet qui veut lire &#8220;Il reste 0h 00mn 18s&#8221; à la fin d&#8217;un décompte qui a commencé il y a une heure ?
Là où strftime() faisait l&#8217;affaire, de jolies améliorations sont possibles.
En gros, quand un temps dépasse l&#8217;heure, j&#8217;ecris le nombre d&#8217;heures, [...]]]></description>
			<content:encoded><![CDATA[<p>Ecrire du temps de façon confortable pour les humains. Voilà qui est intéressant.<br />
En effet qui veut lire &#8220;Il reste 0h 00mn 18s&#8221; à la fin d&#8217;un décompte qui a commencé il y a une heure ?</p>
<p>Là où strftime() faisait l&#8217;affaire, de jolies améliorations sont possibles.<br />
En gros, quand un temps dépasse l&#8217;heure, j&#8217;ecris le nombre d&#8217;heures, mais sinon, je n&#8217;écris pas &#8220;0 heures&#8221;. Et cela vaut pour chaque unité.</p>
<p>J&#8217;ai fini par garder sur moi deux fonctions d&#8217;affichages de temps.<br />
J&#8217;ai fais deux fonctions pour les rendres plus lisibles. Elles sont fusionnable, mais je n&#8217;avais pas envie qu&#8217;elles soient bordéliques. De plus, je n&#8217;utilise chacune d&#8217;entre elle que sur un seul site.</p>
<h3>Ecrire le temps en plusieurs langues</h3>
<p>Là mes amis : deux solutions. Soit vous utilisez date() ou strftime() et vous faites confiance aux locales installées, ainsi qu&#8217;à votre programme PHP pour utiliser la bonne.<br />
Soit vous utilisez cette fonction, qui marchera partout sans se soucier des locales, MAIS limitées en nombre de langues assurément (vous pouvez en ajouter à l&#8217;envie).</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #808080; font-style: italic;">//! Ecrit un temps, multilangue ($lg = 'fr|en|es|it')</span>
<span style="color: #000000; font-weight: bold;">function</span> write_temps_internationnal<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>, <span style="color: #0000ff;">$lg</span>=<span style="color: #ff0000;">'fr'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000066;">static</span> <span style="color: #0000ff;">$trads</span> = <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
            <span style="color: #ff0000;">'s'</span> =&gt; <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'fr'</span>=&gt;<span style="color: #ff0000;">'secondes'</span>,  <span style="color: #ff0000;">'en'</span>=&gt;<span style="color: #ff0000;">'seconds'</span>, <span style="color: #ff0000;">'it'</span>=&gt;<span style="color: #ff0000;">'secunde'</span>, <span style="color: #ff0000;">'es'</span>=&gt;<span style="color: #ff0000;">'segundos'</span><span style="color: #66cc66;">&#41;</span>,
            <span style="color: #ff0000;">'ms'</span>=&gt; <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'fr'</span>=&gt;<span style="color: #ff0000;">'%Mmn, %Ss'</span>, <span style="color: #ff0000;">'en'</span>=&gt;<span style="color: #ff0000;">'%Mmn, %Ss'</span>, <span style="color: #ff0000;">'it'</span>=&gt;<span style="color: #ff0000;">'%Mmn, %Ss'</span>, <span style="color: #ff0000;">'es'</span>=&gt;<span style="color: #ff0000;">'%Mm., %Ss.'</span><span style="color: #66cc66;">&#41;</span>,
            <span style="color: #ff0000;">'h'</span> =&gt; <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'fr'</span>=&gt;<span style="color: #ff0000;">'%kh, '</span>, <span style="color: #ff0000;">'en'</span>=&gt;<span style="color: #ff0000;">'%kh, '</span>, <span style="color: #ff0000;">'it'</span>=&gt;<span style="color: #ff0000;">'%kh'</span>, <span style="color: #ff0000;">'es'</span>=&gt;<span style="color: #ff0000;">'%kh.'</span><span style="color: #66cc66;">&#41;</span>,
            <span style="color: #ff0000;">'j'</span> =&gt; <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'fr'</span>=&gt;<span style="color: #ff0000;">'%e jours, '</span>, <span style="color: #ff0000;">'en'</span>=&gt;<span style="color: #ff0000;">'%e days, '</span>, <span style="color: #ff0000;">'it'</span>=&gt;<span style="color: #ff0000;">'%e giorni'</span>, <span style="color: #ff0000;">'es'</span>=&gt;<span style="color: #ff0000;">'%e dias'</span><span style="color: #66cc66;">&#41;</span>,
            <span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>&lt;<span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$secondes</span>.<span style="color: #ff0000;">' '</span>.<span style="color: #0000ff;">$trads</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'s'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$lg</span><span style="color: #66cc66;">&#93;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>&lt;<span style="color: #cc66cc;">3600</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$trads</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'ms'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$lg</span><span style="color: #66cc66;">&#93;</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>&lt;<span style="color: #cc66cc;">86400</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$trads</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'h'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$lg</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #0000ff;">$trads</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'ms'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$lg</span><span style="color: #66cc66;">&#93;</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #808080; font-style: italic;">// + D'un jour: pb. En effet %e/%d donnent 1 jour de base puisque c'est le *1* janvier 1970</span>
    <span style="color: #808080; font-style: italic;">// Donc on enleve un jour puisqu'on compte du temps ici</span>
    <span style="color: #0000ff;">$secondes</span> -= <span style="color: #cc66cc;">86400</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$trads</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'j'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$lg</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #0000ff;">$trads</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'h'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$lg</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #0000ff;">$trads</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'ms'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$lg</span><span style="color: #66cc66;">&#93;</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Il n&#8217;y a pas de vérification de la langue parce que je la limite toujours quand je la récupère, en début de mes programmes.</p>
<h3>Ecrire le temps en l&#8217;arrondissant</h3>
<p>Cette version là permet d&#8217;être plus vague dans l&#8217;information temporelle. S&#8217;il reste 5 jours, 3h, 8min et 9 secondes, ça écrit juste &#8220;5 jours&#8221;. On reste sur l&#8217;essentiel.<br />
C&#8217;est pratique pour le jeu 2Fight.net, où je ne veux pas que les joueurs sachent à la seconde près quand tel événement sera fini.</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #808080; font-style: italic;">/** Affiche un temps ecrit joliment.
&nbsp;
  \param $secondes (int) nombre de secondes.
&nbsp;
  \param $detail peut être un booleen ou les strings suivant: 'h', 'mn',
  qui disent qu'on veut le détail à l'heure ou la minute. false est des fois trop évasif.
&nbsp;
  \return (string)
  */</span>
<span style="color: #000000; font-weight: bold;">function</span> write_temps<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>, <span style="color: #0000ff;">$detail</span>=<span style="color: #000000; font-weight: bold;">true</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><span style="color: #0000ff;">$secondes</span>&lt;<span style="color: #cc66cc;">60</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><span style="color: #0000ff;">$detail</span>===<span style="color: #ff0000;">'h'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">&quot;moins d'une heure&quot;</span>;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$detail</span>===<span style="color: #ff0000;">'mn'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">&quot;moins d'une minute&quot;</span>;
        <span style="color: #b1b100;">return</span> write_temps_sub<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>, <span style="color: #ff0000;">'seconde'</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>&lt;<span style="color: #cc66cc;">3600</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><span style="color: #0000ff;">$detail</span>===<span style="color: #ff0000;">'h'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">&quot;moins d'une heure&quot;</span>;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$detail</span> or <span style="color: #0000ff;">$detail</span>===<span style="color: #ff0000;">'mn'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> write_temps_sub<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>/<span style="color: #cc66cc;">60</span>, <span style="color: #ff0000;">'minute'</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'%Mmn, %Ss'</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>&lt;<span style="color: #cc66cc;">86400</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>!<span style="color: #0000ff;">$detail</span> or <span style="color: #0000ff;">$detail</span>===<span style="color: #ff0000;">'h'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> write_temps_sub<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>/<span style="color: #cc66cc;">3600</span>, <span style="color: #ff0000;">'heure'</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$detail</span>===<span style="color: #ff0000;">'mn'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'%kh, %Mmn'</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'%kh, %Mmn, %Ss'</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$detail</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000066;">round</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$secondes</span>/<span style="color: #cc66cc;">86400</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">' jours'</span>;
    <span style="color: #808080; font-style: italic;">// Lorsqu'on a plus d'un jour arrivent des problèmes.</span>
    <span style="color: #808080; font-style: italic;">// En effet %e/%d donnent 1 jour de base puisque c'est le *1* janvier 1970.*</span>
    <span style="color: #808080; font-style: italic;">// Donc enlever un jour puisqu'on compte du temps ici</span>
    <span style="color: #0000ff;">$secondes</span> -= <span style="color: #cc66cc;">86400</span>;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$detail</span>===<span style="color: #ff0000;">'mn'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'%e jours, %kh, %Mmn'</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$detail</span>===<span style="color: #ff0000;">'h'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'%e jours et %kh'</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #000066;">gmstrftime</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'%e jours, %kh, %Mmn, %Ss'</span>, <span style="color: #0000ff;">$secondes</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000000; font-weight: bold;">function</span> write_temps_sub<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$nbre</span>, <span style="color: #0000ff;">$quoi</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #0000ff;">$nbre</span> = <span style="color: #000066;">round</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$nbre</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$nbre</span>&gt;<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$nbre</span>.<span style="color: #ff0000;">' '</span>.<span style="color: #0000ff;">$quoi</span>.<span style="color: #ff0000;">'s'</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$nbre</span>.<span style="color: #ff0000;">' '</span>.<span style="color: #0000ff;">$quoi</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Maintenant que vous affichez un temps de toute beauté, je vous propose de passer à&#8230;</p>
<h3>La barre d&#8217;avancement</h3>
<p>Bon en fait ce n&#8217;est pas une barre. Dessiner un truc qui se remplit en faisant attention à la largeur de votre ligne de commande, très peu pour moi. Par contre, vous aurez droit à l&#8217;écriture du pourcentage d&#8217;avancement du script et le temps probable restant.</p>
<p>Cas simple : l&#8217;un de vos scripts doit tester 20 000 fois quelque chose. Vous voudriez savoir où il en est de temps en temps.<br />
Les plus habitués auront fait, à la fin de la boucle, le petit code classique suivant :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000066;">echo</span> <span style="color: #ff0000;">&quot;Avancement: &quot;</span>.<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span>*<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$cpt</span>++<span style="color: #66cc66;">&#41;</span>/<span style="color: #cc66cc;">20000</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">&quot; % <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>;</pre></div></div>

<p>Et bien moi c&#8217;est la même chose, en mieux.</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #808080; font-style: italic;">//! fonction géniale qui écrit l'avancement d'un process en temps et en pourcent.</span>
<span style="color: #808080; font-style: italic;">/** Au premier appel on donne le &quot;max&quot; qui est le nombre de fois que cette fonction sera appelée */</span>
<span style="color: #000000; font-weight: bold;">function</span> write_avancement<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$max</span>=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000066;">static</span> <span style="color: #0000ff;">$cpt</span>;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$max</span>!==<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0000ff;">$cpt</span> = <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
                <span style="color: #ff0000;">'debut'</span> =&gt; <span style="color: #000066;">time</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>,
                <span style="color: #ff0000;">'cpt'</span> =&gt; <span style="color: #cc66cc;">0</span>,
                <span style="color: #ff0000;">'max'</span> =&gt; <span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span> <span style="color: #0000ff;">$max</span>,
                <span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #0000ff;">$cpt</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066;">die</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>[write_avancement] Mauvais parametres.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">$cpt</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'cpt'</span><span style="color: #66cc66;">&#93;</span>++;
    <span style="color: #0000ff;">$elapsed</span> = <span style="color: #000066;">time</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>-<span style="color: #0000ff;">$cpt</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'debut'</span><span style="color: #66cc66;">&#93;</span>;
    <span style="color: #0000ff;">$restant</span> = <span style="color: #000066;">round</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$cpt</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'max'</span><span style="color: #66cc66;">&#93;</span>*<span style="color: #0000ff;">$elapsed</span>/<span style="color: #0000ff;">$cpt</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'cpt'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> - <span style="color: #0000ff;">$elapsed</span>;
    <span style="color: #0000ff;">$pourcent</span> = <span style="color: #000066;">round</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span>*<span style="color: #0000ff;">$cpt</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'cpt'</span><span style="color: #66cc66;">&#93;</span>/<span style="color: #0000ff;">$cpt</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'max'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">&quot;  -+-  $pourcent%  -  Temps pris: &quot;</span>.
        write_temps<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$elapsed</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">&quot;  -  Temps restant: &quot;</span>.write_temps<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$restant</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #ff0000;">&quot;     <span style="color: #000099; font-weight: bold;">\r</span>&quot;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Cette fonction est dépendante de write_temps(), donnée juste au-dessus.</p>
<p>Utilisation :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #0000ff;">$max</span> = nombre_delements_a_regarder_ou_lignes_du_fichier<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
write_avancement<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$max</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// ceci n'ecrit rien</span>
<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span> boucle_qui_regarde_chaque_element <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    tout_le_process<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    write_avancement<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>; <span style="color: #808080; font-style: italic;">// si vous ne voulez pas avoir votre prompt dans l'affichage de la &quot;barre&quot;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/34-fonction-temporelles-affichage-barre-davancement/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Recencer les erreurs 404</title>
		<link>http://blog.salagir.com/33-recencer-les-erreurs-404/</link>
		<comments>http://blog.salagir.com/33-recencer-les-erreurs-404/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 21:34:53 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Mes scripts utiles]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/33-recencer-les-erreurs-404/</guid>
		<description><![CDATA[Ca c&#8217;était un beau vide&#8230; Il faut dire que depuis la sortie de DBM, je n&#8217;ai pas eu beaucoup de temps de libre.
Alors voici vite fait, pendant que je le déplace d&#8217;un serveur à l&#8217;autre, un petit script qui fait ce que bien d&#8217;autres font.
Par exemple Awstats vous dira aussi les erreurs 404, mais d&#8217;un [...]]]></description>
			<content:encoded><![CDATA[<p>Ca c&#8217;était un beau vide&#8230; Il faut dire que depuis la sortie de <a href="http://www.dragonball-multiverse.com/">DBM</a>, je n&#8217;ai pas eu beaucoup de temps de libre.</p>
<p>Alors voici vite fait, pendant que je le déplace d&#8217;un serveur à l&#8217;autre, un petit script qui fait ce que bien d&#8217;autres font.<br />
Par exemple Awstats vous dira aussi les erreurs 404, mais d&#8217;un seul site à la fois.<br />
De même, il existe des vérificatieurs de liens morts en ligne, comme le <a href="http://validator.w3.org/checklink">W3C Link Checker</a>.</p>
<p>Mais le miens travaille sur le serveur même, et trouve aussi les erreurs 404 du par exemple à un site externe qui pointerait bêtement vers une page à vous qui n&#8217;est pas là. Il vous fait aussi remarquer que les navigateurs cherchent souvent &#8220;/favicon.ico&#8221; sur vos sites&#8230;</p>
<p>Utilisation (ligne de commande) :</p>

<div class="wp_syntax"><div class="code"><pre class="bash">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> php parseLogApacheError.php
$ <span style="color: #c20cb9; font-weight: bold;">lynx</span> /tmp/errors404.inc.html</pre></div></div>

<p>Notez qu&#8217;il y a dans le code une version debug qui ecrit un pourcentage d&#8217;avancement du script. J&#8217;ai largement amélioré ce concept, cela fera l&#8217;objet d&#8217;un prochain post.</p>
<p>Vous pouvez télécharger le code :</p>
<ul>
<li><a href="/upload/parseLogApacheError.php.zip">parseLogApacheError Zippé</a></li>
<li><a href="/upload/parseLogApacheError.php.html">voir parseLogApacheError en ligne</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/33-recencer-les-erreurs-404/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Url rewriting est ton ami</title>
		<link>http://blog.salagir.com/32-url-rewriting-est-ton-ami/</link>
		<comments>http://blog.salagir.com/32-url-rewriting-est-ton-ami/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 15:15:18 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Mes scripts utiles]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/32-url-rewriting-est-ton-ami/</guid>
		<description><![CDATA[L&#8217;url rewriting, c&#8217;est l&#8217;art d&#8217;avoir un lien vers une page web qui soit lisible par des humains, et surtout des moteurs de recherche.
C&#8217;est très utilisé par les blogs, qui mettent le titre de l&#8217;article dans l&#8217;url.
Exemple :
Bon : http://toto.com/articles/mon-jeu-prefere-de-supernintendo.html
Mauvais :  http://toto.com/2007/article.php?id=684
On remarque que les accents sont aussi transformés, car une url avec accent, c&#8217;est [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;url rewriting, c&#8217;est l&#8217;art d&#8217;avoir un lien vers une page web qui soit lisible par des humains, et surtout des moteurs de recherche.</p>
<p>C&#8217;est très utilisé par les blogs, qui mettent le titre de l&#8217;article dans l&#8217;url.</p>
<p>Exemple :<br />
<em>Bon </em>: http://toto.com/articles/mon-jeu-prefere-de-supernintendo.html<br />
<em>Mauvais </em>:  http://toto.com/2007/article.php?id=684</p>
<p>On remarque que les accents sont aussi transformés, car une url avec accent, c&#8217;est moche, en effet on ne voit pas l&#8217;accent mais son équivalent encodé, car oui, du point de vue d&#8217;une url, un accent c&#8217;est un caractère spécial.</p>
<p><em>Mauvais </em>: http://toto.com/articles/mon-jeu-pr%E9f%E9r%E9-de-supernintendo.html<br />
<em>Mauvais </em>: http://toto.com/articles/mon-jeu-prfr-de-supernintendo.html</p>
<p>Notez que certains mauvais algo virent tout simplement les accents, et on perd aussi le mot. Le problème se pose aussi avec une apostrophe :</p>
<p><em>Mauvais </em>:  http://toto.com/articles/sauvez-l%27oiseau.html<br />
<em>Mauvais </em>:  http://toto.com/articles/sauvez-loiseau.html<br />
<em>Bon </em>:  http://toto.com/articles/sauvez-l-oiseau.html</p>
<p>Il y a d&#8217;autres délires que j&#8217;ai vu comme des noms de page qui commencent ou finissent par des tirets (ce qui est moche)&#8230;</p>
<p>J&#8217;ai fais mon algo perso de rewriting, et je vous le donne. Utilisez-le bien.</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #808080; font-style: italic;">//! Transforme un texte en nom de fichier simple et lisible</span>
<span style="color: #000000; font-weight: bold;">function</span> text2filename<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$str</span>, <span style="color: #0000ff;">$spaceChar</span> = <span style="color: #ff0000;">'-'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #0000ff;">$str</span> = <span style="color: #000066;">preg_replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'/[:;?!¡,~R()=%&quot;«»]/'</span>, <span style="color: #ff0000;">''</span>, <span style="color: #0000ff;">$str</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$str</span> = <span style="color: #000066;">strtr</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$str</span>,
        <span style="color: #ff0000;">'äàáâãåÀÁÂÃÅÇçèéêëÈÉÊËìíîïÌÍÎÏÑñÒÓÔÕòóôõÙÚÛùúûÝýÿÐ'</span>,
        <span style="color: #ff0000;">'aaaaaaAAAAACceeeeEEEEiiiiIIIINnOOOOooooUUUuuuYyyD'</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$str</span> = <span style="color: #000066;">str_replace</span><span style="color: #66cc66;">&#40;</span>
        <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Ä'</span>,<span style="color: #ff0000;">'Æ'</span>,<span style="color: #ff0000;">'æ'</span>,<span style="color: #ff0000;">'Ö'</span>,<span style="color: #ff0000;">'ö'</span>,<span style="color: #ff0000;">'ß'</span>,<span style="color: #ff0000;">'Ü'</span>,<span style="color: #ff0000;">'ü'</span><span style="color: #66cc66;">&#41;</span>,
        <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'AE'</span>,<span style="color: #ff0000;">'AE'</span>,<span style="color: #ff0000;">'ae'</span>,<span style="color: #ff0000;">'OE'</span>,<span style="color: #ff0000;">'oe'</span>,<span style="color: #ff0000;">'ss'</span>,<span style="color: #ff0000;">'UE'</span>,<span style="color: #ff0000;">'ue'</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #0000ff;">$str</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0000ff;">$str</span> = <span style="color: #000066;">preg_replace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'/[ _'</span>/.-<span style="color: #66cc66;">&#93;</span>+/<span style="color: #ff0000;">', $spaceChar, $str);
    $str = trim($str, $spaceChar);
    return strtolower($str);
}</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.salagir.com/32-url-rewriting-est-ton-ami/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mes choix dans mon Webcomic</title>
		<link>http://blog.salagir.com/31-mes-choix-dans-mon-webcomic/</link>
		<comments>http://blog.salagir.com/31-mes-choix-dans-mon-webcomic/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 14:11:09 +0000</pubDate>
		<dc:creator>Salagir</dc:creator>
		
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://blog.salagir.com/fr/31-mes-choix-dans-mon-webcomic/</guid>
		<description><![CDATA[Ici je vais dévoiler tous mes secrets. Suivez-les et vous ferez vous aussi une webcomic suivie par un million de lecteurs par jours (ou pas).
Comme je l&#8217;ai dis dans mon post précédent, je voulais pouvoir raconter tout ce qui me passe dans la tête dans ce webcomic. Mais j&#8217;ai quand même de nombreuses limitations que [...]]]></description>
			<content:encoded><![CDATA[<p>Ici je vais dévoiler tous mes secrets. Suivez-les et vous ferez vous aussi une webcomic suivie par un million de lecteurs par jours (ou pas).</p>
<p>Comme je l&#8217;ai dis dans mon post précédent, je voulais pouvoir raconter tout ce qui me passe dans la tête dans ce webcomic. Mais j&#8217;ai quand même de nombreuses limitations que je me pose moi-même, car je ne supporte pas les choses incohérentes et mal rangées, notez comme ceci est contradictoire avec ce que je viens de dire.</p>
<h3>Format</h3>
<p>Commençons par le plus intéressant ou presque. J&#8217;ai commencé le webcomic en &#8220;lignes&#8221; de 3 cases, suivant le principe de <a href="http://www.userfriendly.org/" target="_blank">User Friendly</a>. J&#8217;ai même fais un &#8220;dimanche&#8221; qui suivait le principe des comic strips américains, avec un header et deux lignes de cases. Mais très vite j&#8217;ai changé de format pour le laisser plus de liberté.</p>
<p>Le dessin de base est du noir et blanc. Cela permet de faire un encrage et puis c&#8217;est fini. Toute autre technique demande au moins une étape de plus.<br />
La colorisation, même à coups de pot de peinture abusifs, prends du temps, et souvent quand j&#8217;en fais, je ne peux m&#8217;empêcher de mettre quelques ombres. Il n&#8217;y a pas de différence entre la colorisation en couleurs et celle en niveaux de gris, si ce n&#8217;est que j&#8217;ai pas à choisir des couleurs et je suis très mauvais à cela, donc je préfère les niveaux de gris.</p>
<p>Certains utilisent des systèmes compliqués pour cacher le nom de l&#8217;image dans un dossier non listable, afin d&#8217;empêcher des leechers dans mon genre de les télécharger automatiquement. Je m&#8217;en fous mon programme est plus puissant que ça ;) Et en ce qui me concerne, je suis ravi qu&#8217;on télécharge tout mon strip. Il est donc dans un dossier listable, et son nom est simplement le numéro du strip.</p>
<p>Comme je suis taré, j&#8217;ai voulu séparer les strips spécifiquement &#8220;Geek&#8217;s World&#8221; et les autres (<a href="http://www.geeksworld.org/strip_82.html" target="_blank">Dragon Hell</a>, <a href="http://www.geeksworld.org/strip_554.html" target="_blank">Dead Sala Day</a>, ou autres&#8230;). J&#8217;ai donc commencé une double numérotation.<br />
Il m&#8217;arrive souvent d&#8217;hésiter fortement entre la rubrique &#8220;Misc&#8221;, &#8220;Fan Art&#8221; et &#8220;Geek&#8217;s World&#8221;  lorsque je fais un strip orienté jeu vidéo ou autre sans qu&#8217;on y voit les persos du strip. Le résultat est assez aléatoire.</p>
<p>J&#8217;ai dessiné sur papier tout au début, pour bien vite passer intégralement à la tablette graphique, comme <a href="http://www.dilbert.com/" target="_blank">Scott Adams</a> et <a href="http://comics.com/comics/chickweed/" target="_blank">Brooke McEldowney</a>. Je me ballade avec mon portable et ma tablette graphique, c&#8217;est plus efficace et prends moins de place qu&#8217;un scanner.</p>
<h3>Les personnages</h3>
<p>Pour moi, les personnages sont bien plus important que le scénario ou l&#8217;histoire générale. Cela vaut particulièrement dans les feuilletons (les comics strip sont souvent des feuilletons, même les humoristiques : on suit les personnages et ils évoluent un peu) et autres sagas.</p>
<p>Lorsque j&#8217;ai écris mon scénario, je ne savais pas encore quels personnages allaient être dedans. J&#8217;ai d&#8217;abord cumulé pleins d&#8217;idées pour voir à quoi le strip ressemblerai. Une fois beaucoup d&#8217;idées, concepts et situations rassemblées, je savais un peu (mais juste un peu, comme vous verrez par la suite) ce que le strip serai, et allait donc pouvoir choisir mes personnages.</p>
<p>Deux d&#8217;entre eux étaient les plus évidents.<br />
Ray, car il venait de <a href="http://www.salagir.com/bd/rename/" target="_blank">ma BD précédente</a>. Personnage principal (voire unique) de la BD du journal de mon école d&#8217;informatique, il avait une bonne tête pour être le geek grasouillet, auquel j&#8217;ai ajouté une naïveté qui l&#8217;a carrément transformé en autisme inconscient du monde réel qui l&#8217;entoure.<br />
Puis Tom, dont le physique et le profil de compétences est basé sur Tom, l&#8217;ancien administrateur système de mon école, considéré comme demi-dieu par tous. Je l&#8217;ai bien sûr aussi modifié, l&#8217;ayant squelettisé pour faire le geek sous-alimenté qui vit devant un écran dans une cave. C&#8217;est avec le temps qu&#8217;il est également devenu super intelligent.</p>
<p>Ensuite, je voulais placer le personnage &#8220;maître du monde wanabee&#8221;. C&#8217;est à la base une copie de Pitr (UserFriendly), Tony (Real Life), et tous les autres joyeux personnages de ce genre, que j&#8217;aime beaucoup (rire machiavélique). Son design m&#8217;est vite venu : visage saillant, barbichette obligatoire (signe du méchant, comprenne qui pourra), sourrire carnassier, et yeux rouges brillants comme <a href="http://www.machall.com/view.php?date=2006-05-31" target="_blank">Drew de Mac Hall</a>.</p>
<p>Continuons. Il fallait une fille. Parce que j&#8217;allais devenir fou si je dessinais que des mecs (ce qui m&#8217;est déjà arrivé avec <a href="http://www.salachid.com/html/ced/" target="_blank">le C.E.D</a>), et parce que j&#8217;avais des idées de storylines avec un mec amoureux d&#8217;une fille qui s&#8217;en fout (original&#8230;).</p>
<p>Enfin, il fallait un dernier perso. Je savais que quatre ne serai pas assez pour plusieurs situations, et de plus il fallait un perso &#8220;normal&#8221; pour jouer le rôle du public face aux réactions délirantes des autres.</p>
<p>Chaque personnage cumule des attitudes, des défauts et des qualités que j&#8217;ai piqué d&#8217;autres BDs ou de mon entourage. Mais aucun personnage n&#8217;est &#8220;telle personne que je connais&#8221; ou moi.<br />
Sur beaucoup de points, je peux citer une influence certaine de X ou Y. Mais chaque perso est un cumul, inutile de dire &#8220;Ah ouai Ray c&#8217;est Maxime&#8221; (comprenne qui pourra).</p>
<p>Il n&#8217;y a donc, a part des apparitions uniques dans la partie blog-bd, aucune personne de ma connaissance représentée.</p>
<p>Les personnages secondaires sont arrivés souvent sur le moment. Ultimate Goodness était prévu dans le scénario de base et j&#8217;ai eu beaucoup de problèmes pour lui trouver une &#8220;forme de base&#8221;, que j&#8217;ai fini par garder sur l&#8217;ange. Black Ninja est arrivé pour faire un peu d&#8217;action&#8230; et faire des ninjas.<br />
Donut je voulais depuis longtemps, basé physiquement sur le scientifique de Jurasic Parc et un nerd de G.P.F. , il joue le rôle du linux gourou qui illumine les gens sur son passage. Sa raison d&#8217;être se limite pratiquement au strip de son apparition.<br />
Firefox a presque été créé inutilement, car je ne trouve décidément pas de gags avec animal mignon.<br />
Tetrisman est mon préféré. Il est complètement taré, rôle qu&#8217;aucun des autres persos ne jouait, et il en fallait un. Dick aurai pu, ils se ressemblent pas mal en fait, sauf que l&#8217;un est méchant, l&#8217;autre gentil ;) De plus, il jo