<?xml version="1.0" encoding="ISO-8859-1" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://www.rosanbo.com/paul/index.php/">
  <title>Pololand</title>
  <description><![CDATA[Moi et mon nombril de développeur web]]></description>
  <link>http://www.rosanbo.com/paul/index.php/</link>
  <dc:language>fr</dc:language>
  <dc:creator></dc:creator>
  <dc:rights></dc:rights>
  <dc:date>2007-06-03T16:18:52+00:00</dc:date>
  <admin:generatorAgent rdf:resource="http://www.dotclear.net/" />
  
  <sy:updatePeriod>daily</sy:updatePeriod>
  <sy:updateFrequency>1</sy:updateFrequency>
  <sy:updateBase>2007-06-03T16:18:52+00:00</sy:updateBase>
  
  <items>
  <rdf:Seq>
    <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2007/06/03/68-lou" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2007/05/23/67-charly-is-back" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2007/05/06/66-ecouter-de-la-musique-sur-le-web" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2006/10/25/65-paintchat" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2006/06/10/64-koneko" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2006/05/23/63-programmation-par-callbacks" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2006/03/03/62-une-regle-de-4" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2006/02/18/61-valider-automatiquement-des-pages-par-php" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2006/02/12/60-un-moteur-de-template-avec-le-dom" />
  <rdf:li rdf:resource="http://www.rosanbo.com/paul/index.php/2005/12/03/59-des-vieux-trucs-oublies" />
  </rdf:Seq>
  </items>
</channel>

<item rdf:about="http://www.rosanbo.com/paul/index.php/2007/06/03/68-lou">
  <title>LOU</title>
  <link>http://www.rosanbo.com/paul/index.php/2007/06/03/68-lou</link>
  <dc:date>2007-06-03T16:18:52+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Dossier graphique</dc:subject>
  <description>Quelques images faites avec Lou, je n'ai fait que les couleurs comme d'habitude.






Pour la première image avec la fille qui mange un sahimi, je préfère la version de Lou faite avec de la...</description>
  <content:encoded><![CDATA[ <p>Quelques images faites avec <a href="http://strawberrysoap.free.fr/blog/" hreflang="fr">Lou</a>, je n'ai fait que les couleurs comme d'habitude.</p>


<p><a href="http://www.rosanbo.com/divers/atelier/Lou_CE-couv.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/lou_CE-couv_icon.jpg" alt="" /></a>
<a href="http://www.rosanbo.com/divers/atelier/lou_coffeeprincess.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/lou_cofeeprincess_icon.jpg" alt="" /></a></p>


<p>Pour la première image avec la fille qui mange un sahimi, je préfère la <a href="http://strawberrysoap.free.fr/blog/index.php?2007/05/06/20-makiii" hreflang="fr">version de Lou</a> faite avec de la vrai peinture. Pour la deuxième image, c'est "Coffee princess" il est possible de l'imprimer en mug sur <a href="http://www.deviantart.com/print/811822/" hreflang="en">deviantart</a>, j'en ai un chez moi c'est trop la classe.</p>


<p><a href="http://www.rosanbo.com/divers/cafesale/lou_fraise1.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/lou_fraise1_icon.jpg" alt="" /></a>
<a href="http://www.rosanbo.com/divers/atelier/lou_haloween2006.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/lou_haloween2006_icon.jpg" alt="" /></a></p>


<p>Toutes ces images sont des vieux trucs.</p>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2007/05/23/67-charly-is-back">
  <title>Charly is back</title>
  <link>http://www.rosanbo.com/paul/index.php/2007/05/23/67-charly-is-back</link>
  <dc:date>2007-05-23T23:09:49+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Dossier graphique</dc:subject>
  <description>Bon, le blog de Charly est enfin réparé :) c'est son dessin avec mes couleurs (avec l'ami gimp)...</description>
  <content:encoded><![CDATA[ <p><a href="http://www.rosanbo.com/divers/atelier/Charly_Kha.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/Charly_Kha_icone.jpg" alt="" /></a></p>


<p>Bon, le <a href="http://bycharly.com/blog/" hreflang="fr">blog de Charly</a> est enfin réparé :) c'est son dessin avec mes couleurs (avec l'ami <a href="http://fr.wikipedia.org/wiki/Gimp" hreflang="fr">gimp</a>)</p>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2007/05/06/66-ecouter-de-la-musique-sur-le-web">
  <title>Ecouter de la musique sur le web</title>
  <link>http://www.rosanbo.com/paul/index.php/2007/05/06/66-ecouter-de-la-musique-sur-le-web</link>
  <dc:date>2007-05-06T21:38:41+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Journal</dc:subject>
  <description>Quelques sites pour écouter de la musique en ligne



Radio Blog Club
Player flash : oui
Téléchargement des fichiers : possible mais compliqué
qualité : presque tout les fichiers sont...</description>
  <content:encoded><![CDATA[ <h4>Quelques sites pour écouter de la musique en ligne</h4>



<p><a href="http://www.radioblogclub.fr/" hreflang="fr">Radio Blog Club</a><br />
Player flash&nbsp;: oui<br />
Téléchargement des fichiers&nbsp;: possible mais compliqué<br />
qualité&nbsp;: presque tout les fichiers sont en 64Kbps (mauvaise qualité)</p>



<p><a href="http://www.b3ta.cr3ation.co.uk/site/music-plus/" hreflang="en">Musique Search Plus</a><br />
Player flash&nbsp;: oui<br />
Téléchargement des fichiers&nbsp;: très simple<br />
qualité&nbsp;: beaucoup de fichiers sont en 128Kbps<br />
Les fichiers sont indexés à partir d'un moteur généraliste sur tout le web, la qualité peut varier suivant la provenance</p>


<p><a href="http://hypem.com/" hreflang="en">Hype Machine</a><br />
Player flash&nbsp;: oui<br />
Téléchargement des fichiers&nbsp;: possible mais compliqué<br />
qualité&nbsp;: beaucoup de fichiers sont en 128Kbps<br />
Les fichiers sont indexés à partir des blogs, la qualité peut varier suivant la provenance, on accéder facilement au site d'origine pour télécharger le fichier</p>


<p><a href="http://www.g2p.org/" hreflang="en">G2P</a><br />
Player flash&nbsp;: non<br />
Téléchargement des fichiers&nbsp;: Oui<br />
Indexation par google qui n'utilise pas les tags id3, les résultats peuvent être payants, non téléchargeables...</p>


<p><a href="http://last.fm">Last FM</a><br />
Inscription nécessaire<br />
Radios par tags et artistes similaires</p>



<p><a href="http://spool.fm/">Spool FM</a><br />
Player flash&nbsp;: oui<br />
un site qui reprend le contenu de Radio Blog Club&nbsp;?</p>


<p><a href="http://www.imeem.com/">Imeem</a><br />
Player flash&nbsp;: oui<br />
qualité&nbsp;: beaucoup de fichiers sont en 128Kbps<br />
Inscription nécessaire<br />
La musique est chargée par les utilisateurs</p>


<p><a href="http://www.seeqpod.com/">Seeqpod</a><br />
Player flash&nbsp;: oui<br />
qualité&nbsp;: beaucoup de fichiers sont en 128Kbps<br />
ce site index lui même les fichiers sur tout le web</p>



<h4>Playlists</h4>


<p>Pour créer des playlists en ligne&nbsp;: <a href="http://webjay.org/" hreflang="en">webjay</a></p>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2006/10/25/65-paintchat">
  <title>Paintchat</title>
  <link>http://www.rosanbo.com/paul/index.php/2006/10/25/65-paintchat</link>
  <dc:date>2006-10-25T21:01:48+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Dossier graphique</dc:subject>
  <description>Voila mon paintchat tout frais tout beau que je viens d'installer, c'est un logiciel de dessin online qui permet de dessiner à plusieurs sur la même surface. Cliquez ici pour entrer. le programme à été réalisé par http://shichan.jp/, il faut une machine virtuelle java pour l'utiliser.</description>
  <content:encoded><![CDATA[<p>Voila mon paintchat tout frais tout beau que je viens d'installer, c'est un logiciel de dessin online qui permet de dessiner à plusieurs sur la même surface. Cliquez <a href="http://www.rosanbo.com/paintchat/entrance_normal.html">ici</a> pour entrer. le programme à été réalisé par <a href="http://shichan.jp/">http://shichan.jp/</a>, il faut une machine virtuelle java pour l'utiliser.</p> <h3>Installation d'un serveur de paintchat</h3>


<p>Pour installer le paintchat, il y a aucune infos en français et j'en ai pas trouvé en anglais non plus sur le web. Voici comment je me suis débrouillé pour l'installer sur un serveur linux par une connexion ssh (sans interface graphique).</p>


<p>Téléchargez la dernière version sur le <a href="http://hp.vector.co.jp/authors/VA016309/paintchat/download.html">site</a>, J'utilise la version java</p>


<p>copiez les fichiers sur le serveur et modifiez le fichier cnf/paintchat.cf pour configurer les options du serveur, voila mon fichier&nbsp;:</p>



<pre># logger le texte du chat sur le serveur, ce qui permet aux clients qui se connectent de récupérer l'historique
Server_Log_Text=true
Server_Cash_Text=true
Server_Cash_Text_Size=200
Server_Load_Text=true

chatIndex=1086856254
ao_show_html=false
homepageName=Le paintchat des warriors de l'atelier

# logger les dessins sur le serveur, ce qui permet aux clients qui se connectent 
# de récupérer l'historique, les vieux dessins s'affichent au moment de la connexion
Server_Log_Line=true
Server_Cash_Line=true

# taille limite pour le cache du dessins (je ne connait pas l'unitée) 
# la valeur par défaut se révèle être largement suffisante
Server_Cash_Line_Size=512000
Server_Load_Line=true

Connection_GrobalAddress=true
App_Auto_Lobby=false


# fichier de config de l'applet java client, le fichier se trouve dans le partage web au même endroit que l'applet
File_PaintChat_Infomation=www/.paintchat

App_Get_Index=false

# emplacement de la configuration serveur
File_Config=/home/polo/paintchat/cnf/paintchat.cf

hpUrl=http://www.rosanbo.com
chatName=Le paintchat des warriors de l'atelier

# l'application intègre un mini server http désactivé dans mon cas, 
# cette option permet de modifier le port du serveur
Connection_Port_Http=80

chatUrl=http://www.rosanbo.com
informtionServerAddress=http://www.ax.sakura.ne.jp/~aotama/paintchat/paintchatexcheange.conf

# Largeur et hauteur en pixel de l'espace de travail pour dessiner
Client_Image_Width=2048
Client_Image_Height=2048

commentString=
App.BrowserPath=false


# options pour désactiver des fonctionalités pour les clients
Client_Permission=layer:all;layer_edit:true;canvas:true;talk:true;fill:false;clean:true;

pchatVersion=3.66
App_Version=(C)PaintChatApp v3.66
administratorName=polo

# démarrer automatiquement le serveur de paintchat lors du lancement de l'application
App_Auto_Paintchat=true

# options pour l'affichage de la console serveur
App_ShowStartHelp=false
App_IsConsole=false
App_ShowHelp=true


# Port du serveur de paintchat, si laissé vide, le port sera différent à chaque démarrage du serveur
Connection_Port_PaintChat=48313

# Démarrer automatiquement le serveur http lors du lancement de l'application
App_Auto_Http=false</pre>



<p>Et voici le contenu de mon script pour lancer le serveur&nbsp;:</p>



<pre>#!/bin/sh
cd /home/polo/paintchat
java -cp ./:PaintChat.jar paintchat_server.Server ./cnf/paintchat.cf &gt;&gt; ./paintchatlog &amp;</pre>

<p>Il faut le lancer avec la commande <code>su -c</code> pour éviter que le script s'arrete lorsqu'on se déconnecte du serveur</p>



<p>voila une deuxième version du script, plus complète&nbsp;:</p>



<pre>#!/bin/sh

cd /home/polo/paintchat
ps Hxo pid,pcpu,comm | awk '/[2-9][0-9]\.[0-9] java/ {system("kill " $1)}'

if [ "`ps xo command | grep '^java.*paintchat'`" ]
then
	echo "paintchat is running"
else
	echo "start paintchat"
	rm save_server/*
	java -cp ./:PaintChat.jar paintchat_server.Server ./cnf/paintchat.cf &gt;&gt; ./paintchatlog &amp;
	disown
fi</pre>



<p>Ce script peut être appelé quand le serveur est en marche, si le server est arreté ou planté, il le redémarre. Attention le script considère comme planté des processus java qui consomment plus de 20% de CPU, y compris les processus java qui ne sont pas du paintchat. La commande disown intégrée dans le script "détache" le processus de la session.</p>


<p>Sur mon système, ce script est lancé toutes les minutes par le service cron.</p>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2006/06/10/64-koneko">
  <title>Koneko</title>
  <link>http://www.rosanbo.com/paul/index.php/2006/06/10/64-koneko</link>
  <dc:date>2006-06-10T22:03:08+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Dossier graphique</dc:subject>
  <description>Dessin fait par Koneko, je l'ai colorié avec Painter...</description>
  <content:encoded><![CDATA[ <p><a href="http://www.rosanbo.com/divers/cafesale/koneko_aell.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/koneko_aell_mini.jpg" alt="aell" /></a></p>


<p>Dessin fait par <a href="http://konekochijo.deviantart.com/">Koneko</a>, je l'ai colorié avec <a href="http://en.wikipedia.org/wiki/Corel_Painter">Painter</a></p>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2006/05/23/63-programmation-par-callbacks">
  <title>Programmation par callbacks</title>
  <link>http://www.rosanbo.com/paul/index.php/2006/05/23/63-programmation-par-callbacks</link>
  <dc:date>2006-05-23T21:28:50+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Code</dc:subject>
  <description>En php on est souvent tenté de programmer en multipliant les boucles, afin de séparer la présentation du code. Par exemple, une première partie du code prépare les donnés sous forme de tableau php...</description>
  <content:encoded><![CDATA[ <p>En php on est souvent tenté de programmer en multipliant les boucles, afin de séparer la présentation du code. Par exemple, une première partie du code prépare les donnés sous forme de tableau php puis dans le template le tableau est décomposé pour créer le <acronym title="HyperText Markup Language">HTML</acronym>. <br />
Pour éviter d'utiliser les tableaux comme un support pour passer du code à la présentation, il existe plusieures méthodes (et sans doute plein d'autres que je ne connait pas).</p>


<p>Les class <a href="http://www.php.net/manual/en/language.oop5.iterations.php">iterateurs</a> en php5. On peut passer le contenu produit par l'application vers le template sous la forme d'un objet <code>Iterator</code>. L'avantage est que les donnés pourrons être fournies au template au moment de l'affichage, les traitements s'effectuants dans l'objet (et non pas avec le html).</p>


<p>On peut reproduire le même effet avec des fonctions ou des classes basiques, exemple pour la partie HTML&nbsp;:</p>



<pre>&lt;ul&gt;
&lt;? while($arr = getnextdata()) { ?&gt;
     &lt;li&gt;&lt;a href="&lt;? echo $arr['url']; ?&gt;"&gt;&lt;? echo $arr['link']; ?&gt;&lt;/a&gt;&lt;/li&gt;
&lt;? } ?&gt;
&lt;/ul&gt;</pre>


<p>Le concept est que l'application doit renvoyer les donnés au html tant qu'il y en à, à la fin la fonction revoie false et la boucle s'arrète, comme pour les itérateurs, il n'est pas nécéssaire de stoquer dans un tableau toutes les lignes qui doivent êtres affichées (économie de mémoire).</p>


<p>Avec <a href="http://www.php.net/PDO">PDO</a>, les résultats sont renvoyés directement sous forme d'iterateurs, dans le cas d'action à effecter sur les donnés entre la requète brute et la page HTML, il faudra procéder de la même façon.</p>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2006/03/03/62-une-regle-de-4">
  <title>Une règle de 4</title>
  <link>http://www.rosanbo.com/paul/index.php/2006/03/03/62-une-regle-de-4</link>
  <dc:date>2006-03-03T19:43:40+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Journal</dc:subject>
  <description>Je me suis fait taggé par Ozh
C'est un de ces questionnaires qui se propagents sur le web en se servant des blogs.


Quatre boulots que j’ai eu


Attacher des portiques de balançoire pour les...</description>
  <content:encoded><![CDATA[ <p>Je me suis fait taggé par <a href="http://frenchfragfactory.net/ozh/archives/2006/02/17/meme-tagged-4-things/">Ozh</a>
C'est un de ces <a href="http://fr.wikipedia.org/wiki/Ver_informatique">questionnaires</a> qui se propagents sur le web en se servant des blogs.</p>


<h3>Quatre boulots que j&#8217;ai eu</h3>

<ul>
<li>Attacher des portiques de balançoire pour les enfants</li>
<li>Monter des PC et installer des windows dedans</li>
<li>Infographiste</li>
<li>Programmeur PHP</li>
</ul>

<h3>Quatre films que je peux revoir encore et encore</h3>

<ul>
<li><a href="http://www.imdb.com/title/tt0087182/">Dune</a></li>
<li><a href="http://www.imdb.com/title/tt0110148/">Entretien avec un vampire</a></li>
<li><a href="http://www.imdb.com/title/tt0266697/">Kill</a> <a href="http://www.imdb.com/title/tt0378194/">Bill</a></li>
<li><a href="http://www.imdb.com/title/tt0090605/">Alien 2</a></li>
</ul>

<h3>Quatre émission de télé que j&#8217;aime regarder</h3>


<p>j'ai pas la télé chez moi</p>


<h3>Quatre plats préférés</h3>

<ul>
<li>Des <a href="http://www.supertoinette.com/recettes/oeufs_neige_to.htm">oeufs en neige</a> avec de la crème anglaise et du caramel</li>
<li>Du <a href="http://media.telemarket.fr/imgprod/43AFA705CDCE35EFE1000000AC110A15.jpg">chocolat côte d'or aux noix de pécan</a></li>
<li>Coquilles St Jacques</li>
<li><a href="http://membres.lycos.fr/nikolav/Snickers.jpg">Sneakers</a></li>
</ul>

<h3>Quatre sites que je consulte quotidiennement</h3>

<ul>
<li><a href="http://www.digg.com/">http://www.digg.com/</a></li>
<li><a href="http://www.deviantart.com/">http://www.deviantart.com/</a></li>
<li><a href="http://www.cfsl.net/forum/">http://www.cfsl.net/forum/</a></li>
<li><a href="http://www.stoptazmo.com/">http://www.stoptazmo.com/</a></li>
</ul>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2006/02/18/61-valider-automatiquement-des-pages-par-php">
  <title>Valider automatiquement des pages par PHP</title>
  <link>http://www.rosanbo.com/paul/index.php/2006/02/18/61-valider-automatiquement-des-pages-par-php</link>
  <dc:date>2006-02-18T14:09:43+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Code</dc:subject>
  <description>Avec php et le DOM, il est facile de valider des document xhtml, les fonctions fournies permettent de valider du xml avec la DTD associée</description>
  <content:encoded><![CDATA[<p>Avec php et le <acronym title="Document Object Model">DOM</acronym>, il est facile de valider des document xhtml, les fonctions fournies permettent de valider du xml avec la <acronym title="Document Type Definition">DTD</acronym> associée</p> <h3>Pour valider une page html</h3>


<p>il faut activer tout les messages d'erreur&nbsp;:
error_reporting(E_ALL);</p>


<p>vous pouvez valider en chargeant un fichier externe&nbsp;:</p>


<pre>$dom = new DOMDocument;
$dom-&gt;<a href="http://fr2.php.net/manual/fr/function.dom-domdocument-load.php">Load('mapage.html')</a>;
$dom-&gt;<a href="http://fr2.php.net/manual/fr/function.dom-domdocument-validate.php">validate()</a>;</pre>


<p>Mais dans un développement en php, il est plus probable qu'il y ai déjà dans le script une chaîne de caractères avec toute la page</p>


<pre>$dom = DOMDocument::<a href="http://fr2.php.net/manual/fr/function.dom-domdocument-loadxml.php">loadXML($machainexml)</a>;
$dom-&gt;<a href="http://fr2.php.net/manual/fr/function.dom-domdocument-validate.php">validate()</a>;</pre>


<p>Pour le html 4, il existe aussi l'équivalent de ces fonctions&nbsp;:
<code>DOMDocument-&gt;<a href="http://fr2.php.net/manual/fr/function.dom-domdocument-loadhtmlfile.php">loadHTMLFile()</a></code> et
<code>DOMDocument-&gt;<a href="http://fr2.php.net/manual/fr/function.dom-domdocument-loadhtml.php">loadHTML()</a></code></p>


<p>Les messages d'erreur remontés par php ne ressemblent pas à ceux du validateur du <acronym title="World Wide Web Consortium">W3C</acronym>. Par exemple, si je met une balise <code>div</code> dans une balise <code>p</code>&nbsp;:</p>


<blockquote><p>Warning: Element div is not declared in p list of possible children</p></blockquote>


<p>alors que le <a href="http://validator.w3.org/" hreflang="en">W3C</a> m'affiche pour la même erreur&nbsp;:</p>


<blockquote><p>The mentioned element is not allowed to appear in the context in which you've placed it; the other mentioned elements are the only ones that are both allowed there and can contain the element mentioned. This might mean that you need a containing element, or possibly that you've forgotten to close a previous element.</p>
<p>
One possible cause for this message is that you have attempted to put a block-level element (such as "&lt;p&gt;" or "&lt;table&gt;") inside an inline element (such as "&lt;a&gt;", "&lt;span&gt;", or "&lt;font&gt;").</p></blockquote>


<p>Pour ma part, je ne suis pas contre des messages plus court à lire, par contre, la ligne indiquée par php est celle de la fonction <code>validate()</code> dans le code php, il n'y a aucun renseignements sur la position de l'erreur.</p>


<h3>améliorer les performances</h3>


<p>Php valide en utilisant le fichier <acronym title="Document Type Definition">DTD</acronym> fourni dans le document, pour éviter que le valideur télécharge les fichiers DTD sur Internet à chaque appel de la page, il faut créer une copie sur son serveur de développement local. Par exemple pour du xhtml 1 strict il faut les fichiers&nbsp;:</p>

<ol>
<li><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a></li>
<li><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent</a></li>
<li><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent">http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent</a></li>
<li><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent">http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent</a></li>
</ol>

<p>ensuite, changer le <q>doctype</q> du document a valider (ne pas oublier de remettre le bon avant de passer en production!)&nbsp;:</p>


<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://localhost/dtd/xhtml1-strict.dtd"&gt;</pre>



<h3>Pour aller plus loin</h3>

<p>pour nettoyer et manipuler les documents HTML&nbsp;: <a href="http://fr.php.net/tidy">Tidy, extension de PHP</a> et <a href="http://mod-tidy.sourceforge.net/">en module d'apache</a></p>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2006/02/12/60-un-moteur-de-template-avec-le-dom">
  <title>Un moteur de template avec le DOM...</title>
  <link>http://www.rosanbo.com/paul/index.php/2006/02/12/60-un-moteur-de-template-avec-le-dom</link>
  <dc:date>2006-02-12T19:00:18+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Code</dc:subject>
  <description>Tout les moteurs de templates en php que j'ai trouvé sur le web fonctionne a peu près sur le même principe, recheche et remplacement de tags par expression régulière, des variables et des blocs pour faire des boucles. J'ai essayé d'en développer un en utilisant le DOM avec les fonctions fournies par php.
Le code n'est pas finalisé mais voila déja un aperçu.</description>
  <content:encoded><![CDATA[<p>Tout les moteurs de templates en php que j'ai trouvé sur le web fonctionne a peu près sur le même principe, recheche et remplacement de tags par expression régulière, des variables et des blocs pour faire des boucles. J'ai essayé d'en développer un en utilisant le <acronym title="Document Object Model">DOM</acronym> avec les <a href="http://fr.php.net/dom" hreflang="fr">fonctions fournies par php</a>.
Le code n'est pas finalisé mais voila déja un aperçu.</p> <h3>Syntaxe</h3>


<p>les fichiers templates sont des fichiers xml avec plusieurs namespace, pour le moment, le moteur de template s'appelle <q>starfish template</q>. l'espace de nom spécifique au template est <q>sft</q>, il est déclaré comme ceci&nbsp;: <code>xmlns:sft="http://sft/"</code>. Dans l'exemple plus bas, la déclaration est faite sur la balise html, pour le moment, la déclaration renvoie sur une url bidon.</p>


<p>exemple d'une portion de template&nbsp;:</p>



<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:sft="http://sft/"&gt;
	&lt;head&gt;
		&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
	&lt;/head&gt;

	&lt;body&gt;
	&lt;table border="1"&gt;
		&lt;sft:block function="processtr"&gt;
		&lt;tr&gt;
			&lt;sft:block function="processtd"&gt;
			&lt;td&gt;
				&lt;sft:value /&gt;
			&lt;/td&gt;
			&lt;/sft:block&gt;
		&lt;/tr&gt;
		&lt;/sft:block&gt;
	&lt;/table&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>


<p>le php correspondant au template&nbsp;:</p>



<pre>&lt;?php

class stats {
	private static $_instance;
	private $sft;
	private $display;
	private $currentrow;
	private $currentvalue;

	private function __construct() {

		$this-&gt;display = array();
		
		$rows = range(0, 10);
		foreach($rows as $row) {
			$this-&gt;display[$row] = range(0, 10);
		}

		$obj-&gt;sft = xhtmltemplate::getInstance();
		$obj-&gt;sft-&gt;processFile(__CLASS__, 'sft.xml');
		$obj-&gt;sft-&gt;echoXhtml();
	}

	private static function getInstance() {
		if (!isset(self::$_instance)) 
			self::$_instance = new self();
		return self::$_instance;
	}


	public static function processtr($node) {
		$obj = self::getInstance();
		while (list(,$obj-&gt;currentrow) = each($obj-&gt;display)) {
			$obj-&gt;sft-&gt;cloneChildNodes($node);
			}
	}

	public static function processtd($node) {
		$obj = self::getInstance();
		while (list(,$obj-&gt;currentvalue) = each($obj-&gt;currentrow)) {
			$obj-&gt;sft-&gt;cloneChildNodes($node);
			}
	}

	public static function onProcessTag($node) {
		$obj = self::getInstance();
		$obj-&gt;sft-&gt;setNodeText($node, $obj-&gt;currentvalue);
	}
}
?&gt;</pre>


<p>Il y a deux cas possible pour les balises préfixées avec <code>sft:</code>, si la balise à des enfants, c'est un bloc, si il n'y a pas d'enfants, c'est une variable.
Dans le php, c'est la classe <code>xhtmltemplate</code> qui fournie les outils de traitement du template.
La fonction <code>processFile(</code> effectue le traitement du template, a chaque fois qu'un tag du namespace sft est rencontré dans le fichier, une fonction est appelée dans la classe.</p>


<p>Par défaut, les blocs appellent la fonction <code>onProcessBloc</code> et les variables appellent <code>onProcessTag</code> mais les noms des fonction peuvent être remplacés avec l'attribut <q>function</q> dans le template (comme dans l'exemple avec processtd et processtr)</p>


<p>La fonction <code>echoXhtml</code> convertis l'objet <a href="http://fr.php.net/manual/fr/function.dom-domdocument-construct.php" hreflang="fr">DOMDocument</a> en chaîne de caractères puis affiche le résultat. Le traitement du template à supprimé touts les n&#339;uds du namespace sft, à l'affichage il ne restera que le xhtml.</p>


<h3>Avantages de l'xml</h3>


<p>Le remplacement des variables se fait grâce aux fonctions du DOM, ce qui évite d'avoir à s'occuper des caractères spéciaux. Les éventuelles erreur dans le template sont signalée aussitôt car le DOM n'accepte que le xml pur. De plus, il est possible de valider le résultat avec la fonction <a href="http://fr.php.net/manual/fr/function.dom-domdocument-validate.php" hreflang="fr">DOMDocument-&gt;validate()</a>.<br />
La Conversion en chaîne de caractères s'effectue au dernier moment, il est toujours possible de revenir sur du html déja traité, au niveau du développement, cela permet de créer des fonctions dans le template qui vont ajouter des feuilles de styles dans le <code>&lt;head&gt;&lt;/head&gt;</code> du document html par exemple.</p>



<h3>Problèmes de performances</h3>


<p>Le fait de traiter des boucles importantes dans les templates pénalise au niveau des performance par rapport aux templates traditionnels. Je pense que cela est due en partie à la fonction <a href="http://fr.php.net/manual/fr/function.dom-domnode-clonenode.php" hreflang="fr">DOMNode-&gt;cloneNode()</a>.</p>



<p>Sur ce graphique, la partie traitement du DOM comparée à la conversion en chaîne de caractères pour l'affichage<br />
<img src="http://www.rosanbo.com/paul/images/code/sft_time.png" alt="" /></p>


<p>Sur ce graphique, sft comparé à <a href="http://smarty.php.net/" hreflang="en">smarty</a><br />
<img src="http://www.rosanbo.com/paul/images/code/sft_vs_smarty.png" alt="" /></p>


<p>Sur les 2 graphiques, le template rempli un tableau de 2x2 à 44x44 cases, en ordonnées, le temps en secondes.<br />
Je n'ai pas encore trouvé de moyen efficace pour le clonage des n&#339;uds s'effectue plus rapidement.</p>


<p>Ce moteur de template n'est qu'une partie d'un projet plus important, j'espere pouvoir en dire plus bientôt quand le code sera plus avancé. Pour les développeurs interessés, une version en cours de développement est disponible <a href="http://www.rosanbo.com/divers/starfish/starfish.zip">ici</a> (ce n'est pas la peine de me poser des question sur cette version elle est forcement pleine de bugs)</p>]]></content:encoded>
</item>
<item rdf:about="http://www.rosanbo.com/paul/index.php/2005/12/03/59-des-vieux-trucs-oublies">
  <title>Des vieux trucs oubliés</title>
  <link>http://www.rosanbo.com/paul/index.php/2005/12/03/59-des-vieux-trucs-oublies</link>
  <dc:date>2005-12-03T14:27:57+00:00</dc:date>
  <dc:language>fr</dc:language>
  <dc:creator>Paul de Rosanbo</dc:creator>
  <dc:subject>Dossier graphique</dc:subject>
  <description>Les artistes pour les dessins originaux sont :


Vyrhelle
Mambba
Kness...</description>
  <content:encoded><![CDATA[ <p><a href="http://www.rosanbo.com/divers/cafesale/vyrhelle_endormie.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/vyrhelle_endormie_icone.jpg" alt="" /></a>
<a href="http://www.rosanbo.com/divers/cafesale/mambba_line28pn.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/mambba_line28pn_icone.jpg" alt="" /></a><br />
<a href="http://www.rosanbo.com/divers/cafesale/kness_mexicolibre.jpg"><img src="http://www.rosanbo.com/paul/images/collabs-pics/kness_mexicolibre_icone.jpg" alt="" /></a></p>


<p>Les artistes pour les dessins originaux sont&nbsp;:</p>

<ol>
<li><a href="http://www.cfsl.net/forum/viewtopic.php?t=23822&amp;postdays=0&amp;postorder=asc&amp;start=0">Vyrhelle</a></li>
<li><a href="http://mambba.cabaretdesdragons.com/">Mambba</a></li>
<li><a href="http://www.cafesale.net/kness/">Kness</a></li>
</ol>]]></content:encoded>
</item>

</rdf:RDF>
