<?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>MaBoite</title>
	<atom:link href="http://www.maboite.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maboite.org</link>
	<description></description>
	<pubDate>Wed, 17 Feb 2010 23:29:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7-bleeding</generator>
	<language>fr</language>
			<item>
		<title>hack css ie8</title>
		<link>http://www.maboite.org/2010/02/18/hack-css-ie8/</link>
		<comments>http://www.maboite.org/2010/02/18/hack-css-ie8/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 23:25:35 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Dev]]></category>

		<category><![CDATA[ie8 hack css]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=243</guid>
		<description><![CDATA[Voici un faux hack css ie8 à l&#8217;aide jquery:

jQuery.each(jQuery.browser, function(i, val) {
   if(i=="msie" &#038;&#038; jQuery.browser.version.substr(0,3)=="8.0")
      $('#mondiv').addClass('ie8');
 });

Ce qui transforme donc ceci : 

&#60;div id="mondiv">
  &#60;p>
        Mon contenu avec un faux hack css ie8 qui sux sous ie8
    [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un faux hack css ie8 à l&#8217;aide jquery:</p>
<pre>
jQuery.each(jQuery.browser, function(i, val) {
   if(i=="msie" &#038;&#038; jQuery.browser.version.substr(0,3)=="8.0")
      $('#mondiv').addClass('ie8');
 });
</pre>
<p>Ce qui transforme donc ceci : </p>
<pre>
&lt;div id="mondiv">
  &lt;p>
        Mon contenu avec un faux hack css ie8 qui sux sous ie8
        et seulement ie8 parce que ... c'est le digne successeur de ie6 et ie7....
  &lt;/p>
&lt;/div>
</pre>
<p>En ceci uniquement pour ie8:</p>
<pre>
&lt;div id="mondiv" class="ie8">
  &lt;p>
        Mon contenu avec un faux hack css ie8 qui sux sous ie8 et seulement ie8 parce que ...
        c'est le digne successeur de ie6 et ie7....
  &lt;/p>
&lt;/div>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2010/02/18/hack-css-ie8/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Memo quelques commandes bash</title>
		<link>http://www.maboite.org/2010/01/15/memo-quelques-commandes-bash/</link>
		<comments>http://www.maboite.org/2010/01/15/memo-quelques-commandes-bash/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 00:33:09 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Dev]]></category>

		<category><![CDATA[hebergement]]></category>

		<category><![CDATA[le monde des memos]]></category>

		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=239</guid>
		<description><![CDATA[# php syntax checker

find . -iname '*.php' &#124; sed 's/^/php -l /' &#124; bash &#124; egrep -v '^No'

# auto add translate fonction in html page content (appox)

sed -i  's/&#62;\([^&#60;"&#62;]*\)&#60;/&#62;&#60;?= _translate("\1")?&#62;&#60;/g' *

#get

find . -type f &#124; egrep '.(php&#124;html&#124;php)$'
  &#124; xargs cat
  &#124; sed  -e"s/_translate/\n_translate/g"  
  &#124;  grep '^_translate'
  &#124; sed -e"s/\(.*\)\([\"'])\).*/\1/" 
  [...]]]></description>
			<content:encoded><![CDATA[<p># php syntax checker</p>
<pre>
find . -iname '*.php' | sed 's/^/php -l /' | bash | egrep -v '^No'
</pre>
<p># auto add translate fonction in html page content (appox)</p>
<pre>
sed -i  's/&gt;\([^&lt;"&gt;]*\)&lt;/&gt;&lt;?= _translate("\1")?&gt;&lt;<em class="moz-txt-slash"><span class="moz-txt-tag">/</span>g' </em>*
</pre>
<p>#get</p>
<pre>
find . -type f | egrep '.(php|html|php)$'
  | xargs cat
  | sed  -e"s/_translate/\n_translate/g"  
  |  grep '^_translate'
  | sed -e"s/\(.*\)\([\"'])\).*/\1/" 
  |  sed -e"s/_translate(.\(.*\)/\1/g"
  | sort -u  
  | sed -e "s/\(.*\)[\"']).*/\1/" &gt;  string.to.translates.csv
</pre>
<p>#TODO, coupling with xgetPo &amp; co.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2010/01/15/memo-quelques-commandes-bash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>be Sharp be Spike: Spikly</title>
		<link>http://www.maboite.org/2009/11/20/be-sharp-be-spike-spikly/</link>
		<comments>http://www.maboite.org/2009/11/20/be-sharp-be-spike-spikly/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 16:37:48 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Non classé]]></category>

		<category><![CDATA[Référencement naturel]]></category>

		<category><![CDATA[SEO]]></category>

		<category><![CDATA[be sharp be spike]]></category>

		<category><![CDATA[Spikly]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=234</guid>
		<description><![CDATA[
be Sharp be Spike, voici le slogan du site de l&#8217;agence Spikly qui remplace donc lle site  de l&#8217;agence Zeni.
]]></description>
			<content:encoded><![CDATA[<div id="attachment_235" class="wp-caption alignnone" style="width: 223px"><a href="http://www.maboite.org/wp-content/uploads/2009/11/be-sharp-be-spike-spikly.gif"><img class="size-medium wp-image-235" title="be-sharp-be-spike-spikly" src="http://www.maboite.org/wp-content/uploads/2009/11/be-sharp-be-spike-spikly.gif" alt="be Sharp be Spike Spikly" width="213" height="74" /></a><p class="wp-caption-text">be Sharp be Spike Spikly</p></div>
<p>be Sharp be Spike, voici le slogan du site de l&#8217;agence Spikly qui remplace donc lle site  de l&#8217;agence Zeni.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2009/11/20/be-sharp-be-spike-spikly/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Memo: Gestion des fichiers de sauvegarde</title>
		<link>http://www.maboite.org/2009/10/12/memo-gestion-des-fichiers-de-sauvegarde/</link>
		<comments>http://www.maboite.org/2009/10/12/memo-gestion-des-fichiers-de-sauvegarde/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 10:24:42 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Dev]]></category>

		<category><![CDATA[hebergement]]></category>

		<category><![CDATA[le monde des memos]]></category>

		<category><![CDATA[targz tar gz save sauvegarde]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=231</guid>
		<description><![CDATA[Petit mémo perso pour la gestion des sauvegardes de site en tar.gz

# repertoire contenant le site
www.monsite.com/

# repertoire de sauvegarde
save/

A mettre dans le crontab:

# on sauvegarde le repertoire www.monsite.com dans le repertoire save.
tar -cvzf save/www.monsite.com -`date '+%d-%B-%Y--%H_%M_%I'`.tar.gz ../www.monsite.com/ 

# on efface les sauvegarde de plus de 6 heures.
find save  -mtime +0.25 -type f -iname '*.tar.gz' &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>Petit mémo perso pour la gestion des sauvegardes de site en tar.gz</p>
<pre>
# repertoire contenant le site
www.monsite.com/

# repertoire de sauvegarde
save/
</pre>
<p>A mettre dans le crontab:</p>
<pre>
# on sauvegarde le repertoire www.monsite.com dans le repertoire save.
tar -cvzf save/www.monsite.com -`date '+%d-%B-%Y--%H_%M_%I'`.tar.gz ../www.monsite.com/ 

# on efface les sauvegarde de plus de 6 heures.
find save  -mtime +0.25 -type f -iname '*.tar.gz' | xargs rm
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2009/10/12/memo-gestion-des-fichiers-de-sauvegarde/feed/</wfw:commentRss>
		</item>
		<item>
		<title>L&#8217;email qu&#8217;il ne faut pas recevoir</title>
		<link>http://www.maboite.org/2009/09/23/lemail-quil-ne-faut-pas-recevoir/</link>
		<comments>http://www.maboite.org/2009/09/23/lemail-quil-ne-faut-pas-recevoir/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 07:44:14 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=226</guid>
		<description><![CDATA[Voici  un email reçu la semaine dernière par mon hébergeur:
&#8211;
Hello Nicolas,
It is with great regret that I wish to inform you that your VMware vmdk file has become corrupt. After having vmware technical support having spent several hours attempting to correct the vmdk file, they were unable to.
We would like to keep you as [...]]]></description>
			<content:encoded><![CDATA[<p>Voici  un email reçu la semaine dernière par mon hébergeur:</p>
<blockquote><p>&#8211;<br />
Hello Nicolas,<br />
It is with great regret that I wish to inform you that your VMware vmdk file has become corrupt. After having vmware technical support having spent several hours attempting to correct the vmdk file, they were unable to.<br />
We would like to keep you as a client as such we would like to setup a brand new VDS as soon as possible along with a 1 month of service credited to your account.<br />
We do hope you had data backups off-site as all information in the VDS was lost.</p>
<p>Once again we attempted everything possible in order to correct your VDS. Vmware was also unable to provide us with an answer on how your vmdk files became corrupt.</p>
<p>Please reply back as soon as possible and we can get a brand new server setup for you.<br />
Best Regards,<br />
XXXXXXXXX<br />
&#8211;</p></blockquote>
<p>Je voudrais remercier rsync, ssh, la réplication mysql ainsi que les cnames de m&#8217;avoir évité de sauter par la fenêtre à la réception de cet email.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2009/09/23/lemail-quil-ne-faut-pas-recevoir/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Les langues faciles avec Apache (mod_rewrite)</title>
		<link>http://www.maboite.org/2009/09/11/les-langues-faciles-avec-apache-mod_rewrite/</link>
		<comments>http://www.maboite.org/2009/09/11/les-langues-faciles-avec-apache-mod_rewrite/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 09:38:55 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Apache]]></category>

		<category><![CDATA[Référencement naturel]]></category>

		<category><![CDATA[SEO]]></category>

		<category><![CDATA[hebergement]]></category>

		<category><![CDATA[le monde des memos]]></category>

		<category><![CDATA[rewriterule]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=221</guid>
		<description><![CDATA[Petit memo pour sélectionner facilement une langue avec apache pour les Urls du type:

www.domain.com/fr/page.html
www.domain.com/en/page.html
www.domain.com/de/page.html

Voici la conf apache:

RewriteEngine On
SetEnvIf Request_URI "^/(..)/.*$" lang=$1

En php, la langue se trouve dans :
$_SERVER['lang'] 
]]></description>
			<content:encoded><![CDATA[<p>Petit memo pour sélectionner facilement une langue avec apache pour les Urls du type:</p>
<pre>
www.domain.com/fr/page.html
www.domain.com/en/page.html
www.domain.com/de/page.html
</pre>
<p>Voici la conf apache:</p>
<pre>
RewriteEngine On
SetEnvIf Request_URI "^/(..)/.*$" lang=$1
</pre>
<p>En php, la langue se trouve dans :</p>
<pre>$_SERVER['lang'] </pre>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2009/09/11/les-langues-faciles-avec-apache-mod_rewrite/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ajout d&#8217;une ligne ou suppression d&#8217;une ligne avec SED</title>
		<link>http://www.maboite.org/2009/08/20/ajout-dune-ligne-ou-suppression-dune-ligne-avec-sed/</link>
		<comments>http://www.maboite.org/2009/08/20/ajout-dune-ligne-ou-suppression-dune-ligne-avec-sed/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 01:58:35 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[le monde des memos]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[planet-libre]]></category>

		<category><![CDATA[sed]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=217</guid>
		<description><![CDATA[Petit memo perso pour ajouter ou supprimer une ligne en bash avec sed.
Insertion de StringToInsert à la position n de file

sed -i  'ni StringToInsert' file

Exemple: Ajouter Hello World à la deuxième ligne de file :

sed -i  '2i Hello World' file

Effacer la ligne n

sed -i  'nd' file

Exemple: Effacer la première ligne du fichier file:

sed -i  '1d' [...]]]></description>
			<content:encoded><![CDATA[<p>Petit memo perso pour ajouter ou supprimer une ligne en bash avec sed.</p>
<p>Insertion de StringToInsert à la position n de file</p>
<pre>
sed -i  'ni StringToInsert' file
</pre>
<p>Exemple: Ajouter Hello World à la deuxième ligne de file :</p>
<pre>
sed -i  '2i Hello World' file
</pre>
<p>Effacer la ligne n</p>
<pre>
sed -i  'nd' file
</pre>
<p>Exemple: Effacer la première ligne du fichier file:</p>
<pre>
sed -i  '1d' file
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2009/08/20/ajout-dune-ligne-ou-suppression-dune-ligne-avec-sed/feed/</wfw:commentRss>
		</item>
		<item>
		<title>un target=&#8217;_blank&#8217; automatique en jquery pour respecter les normes XHTML strictes</title>
		<link>http://www.maboite.org/2009/07/02/target_blank-automatique-jquery-respecter-normes-xhtml-strictes/</link>
		<comments>http://www.maboite.org/2009/07/02/target_blank-automatique-jquery-respecter-normes-xhtml-strictes/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 21:32:18 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Dev]]></category>

		<category><![CDATA[JQuery]]></category>

		<category><![CDATA[Utilisabilité]]></category>

		<category><![CDATA[le monde des memos]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[jquery href target w3c]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=211</guid>
		<description><![CDATA[La W3C n&#8217;accepte pas que les pages utilisent l&#8217;attribut target=&#8221;_blank&#8221; sur un lien.
Pourquoi ? Parce qu&#8217;il pense que le choix d&#8217;ouvrir ou non une nouvelle fenêtre appartient à l&#8217;internaute et non au créateur de la page.
C&#8217;est bien le respect de l&#8217;internaute, mais parfois pour des raisons marketing ou autres, on veut absolument qu&#8217;un nouvelle page [...]]]></description>
			<content:encoded><![CDATA[<p>La W3C n&#8217;accepte pas que les pages utilisent l&#8217;attribut target=&#8221;_blank&#8221; sur un lien.</p>
<p>Pourquoi ? Parce qu&#8217;il pense que le choix d&#8217;ouvrir ou non une nouvelle fenêtre appartient à l&#8217;internaute et non au créateur de la page.</p>
<p>C&#8217;est bien le respect de l&#8217;internaute, mais parfois pour des raisons marketing ou autres, on veut absolument qu&#8217;un nouvelle page s&#8217;ouvre mais tout en respectant les normes W3C.</p>
<p>Voici donc une méthode simple et efficace grâce à JQuery:</p>
<pre>$(document).ready(function() {
    $("a[href^='http://']").click(function(){
      if(($(this).attr("class"))=='internal'){
        return true;
      }
      window.open(this.href);
      return false;
    });
});</pre>
<p>Un lien simple :</p>
<pre>&lt;a href="http://www.exemple.com"&gt;lien&lt;/a&gt;</pre>
<p>s&#8217;ouvrira automatiquement dans une nouvelle fenêtre.</p>
<p>On se garde toutefois la possibilité d&#8217;ouvir un lien externe dans la même fenêtre en ajout la class=&#8221;internal&#8221; comme ceci :</p>
<pre>&lt;a href="http://www.exemple.com" class="internal"&gt;lien&lt;/a&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2009/07/02/target_blank-automatique-jquery-respecter-normes-xhtml-strictes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mémo perso: resumer du texte sans couper les mots avec preg</title>
		<link>http://www.maboite.org/2009/01/05/memo-perso-resumer-du-texte-sans-couper-les-mots-avec-preg/</link>
		<comments>http://www.maboite.org/2009/01/05/memo-perso-resumer-du-texte-sans-couper-les-mots-avec-preg/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 23:45:40 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Dev]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[le monde des memos]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[planet-libre]]></category>

		<category><![CDATA[regexp]]></category>

		<category><![CDATA[couper]]></category>

		<category><![CDATA[mb_strlen]]></category>

		<category><![CDATA[preg_replace]]></category>

		<category><![CDATA[resumer]]></category>

		<category><![CDATA[strlen]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=204</guid>
		<description><![CDATA[Petit mémo: fonctions pour couper des textes et des phrases sans couper les mots avec preg_replace
Deux utilisation différentes: 
La première fonction resumeString coupe un texte au plus près de la longueur maximale demandée.
La deuxième fonction resumeSentence coupe un texte au plus près mais en respectant une césure, soit un caractère &#8216;,&#8217; ou &#8216;;&#8217; ou &#8216;.&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Petit mémo: fonctions pour couper des textes et des phrases sans couper les mots avec preg_replace<br />
Deux utilisation différentes: </p>
<p>La première fonction resumeString coupe un texte au plus près de la longueur maximale demandée.<br />
La deuxième fonction resumeSentence coupe un texte au plus près mais en respectant une césure, soit un caractère &#8216;,&#8217; ou &#8216;;&#8217; ou &#8216;.&#8217; ou &#8216;-&#8217;  afin de conserver le sens de la phrase.</p>
<p>Voici les fonctions et des exemples d&#8217;utilisation: </p>
<pre>
$string =" Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aenean nunc tortor, luctus sodales, sodales eget, pharetra a, urna.
Integer in pede ac ante commodo egestas.
Curabitur ut tortor in nisl varius laoreet.
Vivamus massa. Suspendisse blandit condimentum magna.
Donec rutrum lorem non turpis. Mauris eu tellus ac quam convallis pellentesque.";
</pre>
<pre>
function resumeString($string, $length = 150){
  if( mb_strlen($string) <=  $length ) return $string;
  return preg_replace('@(^.{'.$length.',})[\s,:;\.-].*$@isU',"$1...",$string);
}
</pre>
<pre>
$newString = resumeString($string, 100);
echo strlen($newString)." => ".$newString;
</pre>
<p>105 =>  Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br />
Aenean nunc tortor, luctus sodales, sodales&#8230;<br />
Ici, string a été coupé au plus près, à 105 caractères sans prendre en compte la ponctuation mais sans couper les mots. Trois &#8216;.&#8217; ont été ajoutés pour montrer que la phrase n&#8217;est pas complète.</p>
<pre>
function resumeSentence($string, $length = 150){
  if( mb_strlen($string) <=  $length ) return $string;
  return preg_replace('@(^.{'.$length.',})[,;\.-].*$@isU',"$1.",$string);
}
</pre>
<pre>
$newSentence = resumeSentence($string, 100);
echo strlen($newSentence)." => ".$newSentence;
</pre>
<p>108 =>  Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br />
Aenean nunc tortor, luctus sodales, sodales eget.<br />
Ici, string a été coupé au plus près, à 108 caractères en prenant en compte la ponctuation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2009/01/05/memo-perso-resumer-du-texte-sans-couper-les-mots-avec-preg/feed/</wfw:commentRss>
		</item>
		<item>
		<title>html2text&#8230;enfin presque</title>
		<link>http://www.maboite.org/2008/12/12/html2textenfin-presque/</link>
		<comments>http://www.maboite.org/2008/12/12/html2textenfin-presque/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 14:54:01 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Dev]]></category>

		<category><![CDATA[Non classé]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[planet-libre]]></category>

		<category><![CDATA[regexp]]></category>

		<category><![CDATA[cleanhtml]]></category>

		<category><![CDATA[html2text]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=194</guid>
		<description><![CDATA[Après avoir cherché et utilisé des fonctions html2text, je me suis aperçu qu&#8217;aucune ne me satisfaisait vraiment parce que mes besoins n&#8217;étaient pas seulement de transcrire en texte.
Pour un projet de moteur de recherche, j&#8217;ai besoin de crawler des pages HTML et de sauvegarder seulement les parties intéressantes des pages.
Alors après pas mal de temps [...]]]></description>
			<content:encoded><![CDATA[<p>Après avoir cherché et utilisé des fonctions html2text, je me suis aperçu qu&#8217;aucune ne me satisfaisait vraiment parce que mes besoins n&#8217;étaient pas seulement de transcrire en texte.</p>
<p>Pour un projet de moteur de recherche, j&#8217;ai besoin de crawler des pages HTML et de sauvegarder seulement les parties intéressantes des pages.</p>
<p>Alors après pas mal de temps à m&#8217;amuser avec les regexp, voici quelques lignes de code qui nettoient un code html et essai d&#8217;en sortir des phrases: </p>
<pre>  $c = file_get_contents("http://www.maboite.org");
  $c = html_entity_decode($c, ENT_QUOTES , "utf-8");
  # delete useless tags
  $c = preg_replace('@&lt;\s?(script|embed|object|style)([^&gt;]+)?&gt;.*&lt;\s?/\s?\1\s?&gt;@isU','',$c);
  # delete comments
  $c = preg_replace('@&lt;!--.*--&gt;+@isU','',$c);
  #replace spacing tags
  $c = preg_replace('@&lt;\s?(br|hr)[^&gt;]*&gt;+@i',"\n",$c);
  # replace tabs
  $c = preg_replace("@\t@i","\n",$c);
  # replacing li and Co by text comma separated
  $c = preg_replace('@\s*&lt;\s?(td|li|dt|ot|dd)([^&gt;]+)?&gt;(.*)&lt;\s?/\s?\1\s?&gt;\s*@isU','\3, ',$c);
  # closing end of list, delete comma and add point
  $c = preg_replace('@\s*,\s*&lt;\s?/\s?(ul|dl|ol)\s?&gt;\s*@isU','.',$c);
  # lot of site are using "a" for listing
  $c = preg_replace("@(&lt;\s?/\s?a\s?&gt;)([^&lt;]+)?(&lt;\s?a)@isU",'\1, \3',$c);
  # replace link by text
  $c = preg_replace('@&lt;\s?a[^&gt;]*&gt;([^&lt;]*)&lt;\s?/\s?a\s?&gt;@isU','\1',$c);
  # replacing img alt for keeping text
  $c = preg_replace('@&lt;\s?img([^&gt;]+)?alt\s?=\s?(["|\'])([^\2]+)?\2[^&gt;]*&gt;@isU',"\n".'\3'."\n",$c);
  #get meta desc
  $c = preg_replace('@&lt;\s?meta\s?name\s?=\s?(["|\'])\s?description\s?\1\s?(lang=\s?(["|\'])[^\3]+\3)?\scontent\s?=\s?(["|\'])([^\4]+)\4([^&gt;]+)?&gt;@isU',"\n".'\5'."\n",$c);
  # get page title
  $c = preg_replace('@&lt;\s?title\s?&gt;\s?([^&lt;]+)\s?&lt;\s?/\s?title\s?&gt;@isU',"\n".'\1'."\n",$c);
  # get text container tags
  $c = preg_replace('@&lt;\s?(p|textarea|div)[^&gt;]*&gt;(.*)&lt;\s?/\1\s?&gt;@isU',"\n".'\2'."\n",$c);
  # because sometimes table are used only for displaying table content, add comma
  $c = preg_replace('@\s*&lt;\s?(td)([^&gt;]+)?&gt;(.*)&lt;\s?/\s?\1\s?&gt;\s*@isU','\3, ',$c);
  # Each tr is a new ligne
  $c = preg_replace('@\s*&lt;\s?(tr)([^&gt;]+)?&gt;(.*)&lt;\s?/\s?\1\s?&gt;\s*@isU','\3'."\n",$c);
  # delete all others tags
  $c = preg_replace('@&lt;[^&gt;]+&gt;@i',"\n",$c);
  # explode all sentence which ended with point and start with an uppercase letter
  $c = preg_replace("@(\.(\s*)?([A-Z]))@",".\n".'\3',$c);
  # multi space delete
  $c = preg_replace("@(\n|\s)+@i",'\1',$c);
  # begin as space delete
  $c = preg_replace('@^(\s)+@i','',$c);
  # sentences ended by :\n must be ended by:
  $c = preg_replace("@:\s?\n+@i",': ',$c);
  # remove the last comma added when replacing links
  $c = preg_replace("@\n,\s+@isU","\n",$c);
  $c = preg_replace_callback(
          "@.*\n@isU"
         ,create_function(
            '$matches'
           ,'return (!empty($matches[0]) &amp;&amp; strlen($matches[0]) &gt; 50) ? $matches[0]  : "";'
          )
         ,$c
  );
</a></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2008/12/12/html2textenfin-presque/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hébergement internet mutualisé: comment dissocier des domaines qui pointent sur le même document root avec un .htaccess et du rewriterule sous apache.</title>
		<link>http://www.maboite.org/2008/11/27/htaccess-rewriterule-apache-plusieurs-domaines-mutualises/</link>
		<comments>http://www.maboite.org/2008/11/27/htaccess-rewriterule-apache-plusieurs-domaines-mutualises/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 14:48:59 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Apache]]></category>

		<category><![CDATA[hebergement]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[planet-libre]]></category>

		<category><![CDATA[regexp]]></category>

		<category><![CDATA[htaccess]]></category>

		<category><![CDATA[RewriteEngine]]></category>

		<category><![CDATA[rewriterule]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=185</guid>
		<description><![CDATA[L&#8217;hébergement mutualisé&#8230; c&#8217;est assez frustrant quand on fait de l&#8217;hébergement de devoir intervenir sur une machine mutualisée avec pour seul levier de modification un .htaccess et un accès ftp ; mais bon, il faut bien faire avec parfois.
Alors voici un fichier .htaccess à glisser à la racine (document_root) de votre hébergement mutualisé qui permet de [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;hébergement mutualisé&#8230; c&#8217;est assez frustrant quand on fait de l&#8217;hébergement de devoir intervenir sur une machine mutualisée avec pour seul levier de modification un .htaccess et un accès ftp ; mais bon, il faut bien faire avec parfois.</p>
<p>Alors voici un fichier .htaccess à glisser à la racine (document_root) de votre hébergement mutualisé qui permet de dissocier des noms de domaines qui pointent sur le même serveur et le même document_root.</p>
<pre># on active le moteur de règles de réécriture apache.
RewriteEngine on
# si le HTTP_HOST est www.site-un.com
RewriteCond %{HTTP_HOST} www\.site-un\.com

# et si le REQUEST_URI (le chemin) ne commence pas par /www-site-un-com
# obligatoire sinon la règle bouclerait sur elle même
RewriteCond %{REQUEST_URI} !^/www-site-un-com
# alors tous les requetes sont réécrites dans /www-site-un-com
RewriteRule ^(.*)$ /www-site-un-com/$1

RewriteCond %{HTTP_HOST} www\.site-deux\.com
RewriteCond %{REQUEST_URI} !^/www-site-deux-com
RewriteRule ^(.*)$ /www-site-deux-com/$1

RewriteCond %{HTTP_HOST} www\.site-trois\.com
RewriteCond %{REQUEST_URI} !^/www-site-trois-com
RewriteRule ^(.*)$ /www-site-trois-com/$1</pre>
<p>Et voila,  3  domaines avec 3 document_root bien distincts. Mais bon la prochaine fois, opter pour un vrai hébergement mutualisé ou dédié mais pas forcement grand public.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2008/11/27/htaccess-rewriterule-apache-plusieurs-domaines-mutualises/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Memo hébergement de site : raid rebuild apres un crash disque en raid soft.</title>
		<link>http://www.maboite.org/2008/11/27/memo-hebergement-de-site-raid-rebuild-apres-un-crash-disque-en-raid-soft/</link>
		<comments>http://www.maboite.org/2008/11/27/memo-hebergement-de-site-raid-rebuild-apres-un-crash-disque-en-raid-soft/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 10:05:46 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[hebergement]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[raid]]></category>

		<category><![CDATA[rebuild]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=183</guid>
		<description><![CDATA[Petite mésaventure qui arrive forcement quand on fait de l&#8217;hébergement de site (hosting) un disque d&#8217;un de mes serveurs est mort.  Pas de problèmes me direz vous, le serveur était en raid soft.
Mon prestataire change donc le disque mort mais &#8230; il me faut maintenant remplir ce nouveau disque avec les données du serveur pour [...]]]></description>
			<content:encoded><![CDATA[<p>Petite mésaventure qui arrive forcement quand on fait de l&#8217;hébergement de site (hosting) un disque d&#8217;un de mes serveurs est mort.  Pas de problèmes me direz vous, le serveur était en raid soft.</p>
<p>Mon prestataire change donc le disque mort mais &#8230; il me faut maintenant remplir ce nouveau disque avec les données du serveur pour que le mode mirorring du raid fonctionne.</p>
<pre>
cat /proc/mdstat
sfdisk -d /dev/sda | sfdisk /dev/sdb
mdadm --manage --add /dev/md0 /dev/sdb1
mdadm --manage --add /dev/md1/dev/sdb2
</pre>
<p>mdx sont les raids</p>
<p>sdbx sont les partitions</p>
<p>Pendant la copie (qui dure pas mal de temps en fonction de l&#8217;espace utilisé sur vos disques durs) vous pouvez regardez l&#8217;avancement de la copie avec la commande:<br />
cat /proc/mdstat</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2008/11/27/memo-hebergement-de-site-raid-rebuild-apres-un-crash-disque-en-raid-soft/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Oyoboo, decouvre le spam.</title>
		<link>http://www.maboite.org/2008/10/21/oyoboo-decouvre-le-spam/</link>
		<comments>http://www.maboite.org/2008/10/21/oyoboo-decouvre-le-spam/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 08:44:08 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Un jour|un site]]></category>

		<category><![CDATA[Oyoboo]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=179</guid>
		<description><![CDATA[Oyoboo, un site qui apparemment vient d&#8217;être lancé en bêta découvre le spam.
Je viens de recevoir deux mails à contact@domain  sur deux de mes domaines, des emails non sollicités bien entendu.
Je pensais que les dirigeants avaient compris l&#8217;impact néfaste de ce genre de communication par spam, mais apparemment non, Oyoboo l&#8217;utilise.
J&#8217;ai envoyé une réponse [...]]]></description>
			<content:encoded><![CDATA[<p>Oyoboo, un site qui apparemment vient d&#8217;être lancé en bêta découvre le spam.<br />
Je viens de recevoir deux mails à contact@domain  sur deux de mes domaines, des emails non sollicités bien entendu.</p>
<p>Je pensais que les dirigeants avaient compris l&#8217;impact néfaste de ce genre de communication par spam, mais apparemment non, Oyoboo l&#8217;utilise.<br />
J&#8217;ai envoyé une réponse en demandant d&#8217;être supprimé des bases comme le prévoie la loi informatique et liberté&#8230;. on va voir ce que ça donne.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2008/10/21/oyoboo-decouvre-le-spam/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Référencement naturel : nombres de mots clés tapé</title>
		<link>http://www.maboite.org/2008/10/10/referencement-naturel-nombres-de-mots-cles-tappes/</link>
		<comments>http://www.maboite.org/2008/10/10/referencement-naturel-nombres-de-mots-cles-tappes/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 20:45:23 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Référencement naturel]]></category>

		<category><![CDATA[SEO]]></category>

		<category><![CDATA[SEO (Search Engine Optimisation)]]></category>

		<category><![CDATA[keyword]]></category>

		<category><![CDATA[nombre mot clés]]></category>

		<category><![CDATA[positionnement internet]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=165</guid>
		<description><![CDATA[En référencement naturel et positionnement, il coûte très cher de faire apparaître un site en première page des résultats pour un mot clé seulement.
Ça tombe plutôt bien parce que de plus en plus d&#8217;internautes saisissent un mot clé pour chercher le nom du site et de plus en plus d&#8217;internautes précisent leurs recherches naturelles.
On les [...]]]></description>
			<content:encoded><![CDATA[<p>En référencement naturel et positionnement, il coûte très cher de faire apparaître un site en première page des résultats pour un mot clé seulement.</p>
<p>Ça tombe plutôt bien parce que de plus en plus d&#8217;internautes saisissent un mot clé pour chercher le nom du site et de plus en plus d&#8217;internautes précisent leurs recherches naturelles.</p>
<p>On les comprend.  D&#8217;une part parce que de plus en plus de site internet utilise des noms de domaine à rallonges ou des noms de domaine phonétique. D&#8217;autre part parce que de toute façon le nombre de résultats est tellement important qu&#8217;on n&#8217;a quasiment aucune chance de trouver ce que l&#8217;on veut.</p>
<p>Depuis quelques temps déjà, j&#8217;ai fait le choix lors des <a title="lien vers gaboweb.com, société de référencement internet." href="http://www.gaboweb.com">prestations de référencement de site internet</a> de  ne pas essayer de <strong>positionner un site avec un seul mot clé</strong>.  Ceci implique un référencement totalement différent, une étude plus approfondie des mots clés et un effort littéraire important, mais au final c&#8217;est payant.</p>
<p>Voici des statistiques que j&#8217;ai compilé pour appuyer mes dires, l&#8217;évolution montre bien que deux ou trois mots clés saisis représentent plus de la moitié du volume de recherche dans les moteurs de recherches.</p>
<div id="attachment_166" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.maboite.org/wp-content/uploads/2008/10/nombre-mots-cles-recherche.png"><img class="size-full wp-image-166" title="referencement naturel nombre de mots cles tapé" src="http://www.maboite.org/wp-content/uploads/2008/10/nombre-mots-cles-recherche.png" alt="referencement naturel nombre de mots cles tapé" width="500" height="446" /></a><p class="wp-caption-text">Composition en nombre de mot clés des recherches en référencement naturel</p></div>
<p style="text-align: center;"><em>Source : onestat.com</em></p>
<p style="text-align: center;"><em><br />
</em></p>
<p>J&#8217;ai récemment effectué un référencement naturel pour un client, lequel avait quelques visites par jour sur son site internet. Après un référencement naturel visant l&#8217;utilisation de 3,4,5 mots clés, ce site internet totalise maintenant 150 visites par jour en moyenne avec un nombre d&#8217;expressions clés saisies  assez hallucinant : <strong>sur  1106 visiteurs venant du référencement naturel, 1049 expressions différentes.</strong></p>
<p>Alors oui, il faut beaucoup de contenu pour arriver à sortir 1049 expressions clés mais une règle est toujours vraie en référencement naturel :</p>
<p>Faites plaisir à vos internautes et vous ferez plaisir aux moteurs de recherches.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2008/10/10/referencement-naturel-nombres-de-mots-cles-tappes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Entêtes (headers) d&#8217;une page html + detection du code HTTP</title>
		<link>http://www.maboite.org/2008/10/02/entetes-headers-d-une-page-html-detection-du-code-http/</link>
		<comments>http://www.maboite.org/2008/10/02/entetes-headers-d-une-page-html-detection-du-code-http/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 08:23:16 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Dev]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[le monde des memos]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[planet-libre]]></category>

		<category><![CDATA[regexp]]></category>

		<category><![CDATA[entêtes html]]></category>

		<category><![CDATA[get headers]]></category>

		<guid isPermaLink="false">http://www.maboite.org/?p=157</guid>
		<description><![CDATA[Petit mémo pour aller chercher l&#8217;entête d&#8217;une page (headers) et seulement l&#8217;entête.
Expression régulière pour le code HTTP de la page, puis détéction de la nouvelle url si code 301.
$url = "http://maboite.org/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'MyUserAgent');
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$headers    = curl_exec($ch);
$CurlErr = curl_error($ch);
curl_close($ch);
if ($CurlErr){
  $status_code  = [...]]]></description>
			<content:encoded><![CDATA[<p>Petit mémo pour aller chercher l&#8217;entête d&#8217;une page (headers) et seulement l&#8217;entête.<br />
Expression régulière pour le code HTTP de la page, puis détéction de la nouvelle url si code 301.</p>
<pre>$url = "http://maboite.org/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'MyUserAgent');
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$headers    = curl_exec($ch);
$CurlErr = curl_error($ch);
curl_close($ch);
if ($CurlErr){
  $status_code  = '404';
}
else{
  # get the status code before downloading the page content
  preg_match("|^HTTP/1\.[0-9]\s([1-5][01][0-9])\s.*$|isU", $headers, $temp);
  $status_code = $temp[1];
}

# if the page has moved, we get the new url
if($status_code == 301){
  preg_match('/\s?[lL]ocation\s?:\s?(.*)\s/',$headers, $temp);
  $url = $temp[1];
}</pre>
<p>Pour info, curl est LA meilleur solution pour aller chercher une page sur un serveur distant. file_get_contents et autres fopen ne gèrent pas bien le timeout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maboite.org/2008/10/02/entetes-headers-d-une-page-html-detection-du-code-http/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
