<?xml version="1.0" encoding="ISO-8859-1" ?>
<feed xmlns="http://purl.org/atom/ns#" version="0.3"
	  xmlns:dc="http://purl.org/dc/elements/1.1/"
	  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xml:lang="fr">

  <title>BlogNote</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php"/>
  <tagline type="text/plain" mode="escaped"></tagline>
  
  <modified>2009-05-21T11:48:13+02:00</modified>
  <generator version="1.2.1" url="http://www.dotclear.net/">DotClear</generator>
  
  <sy:updatePeriod>daily</sy:updatePeriod>
  <sy:updateFrequency>1</sy:updateFrequency>
  <sy:updateBase>2009-05-21T11:48:13+02:00</sy:updateBase>
  
<entry xml:lang="fr">
  <title>POC: Design website accéléré par TokyoCabinet (part 2)</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2009/05/21/647-poc-design-website-accelere-par-tokyocabinet-part-2" />
  <issued>2009-05-21T11:48:13+02:00</issued>
  <modified>2009-05-21T11:48:13+02:00</modified>
  <id>http://www.blognote-info.com/index.php?2009/05/21/647-poc-design-website-accelere-par-tokyocabinet-part-2</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>Bon je continue avec beanstalked. J'avais lu brievement ce que c'était, et j'avais pas bien compris qu'il s'agissait d'une messaging queue. Je m'attendais à ce qu'il soit possible que beanstalk lance lui même du code; ce qui change pas grand chose à vrai dire, juste les flèches de mon schéma...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;Bon je continue avec beanstalked. J'avais lu brievement ce que c'était, et j'avais pas bien compris qu'il s'agissait d'une messaging queue. Je m'attendais à ce qu'il soit possible que beanstalk lance lui même du code; ce qui change pas grand chose à vrai dire, juste les flèches de mon schéma d'origine ;)&lt;/p&gt;


&lt;p&gt;J'ai donc téléchargé la version 1.3, installé libevent avec macports, j'ai cherché un peu pour trouver les headers de cette lib et voila pour le compiler&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;* ./configure --with-event=/opt/local/var/macports/software/libevent/1.4.9_0/opt/local
* make
* sudo make install&lt;/pre&gt;

&lt;p&gt;magnifique, encore un soft sans encombres qu'on peut lancer comme ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;* beanstalkd -p 60606&lt;/pre&gt;

&lt;p&gt;Pour le client php j'ai pris &lt;a href=&quot;http://sourceforge.net/projects/beanstalk/&quot;&gt;celui de sourceforge&lt;/a&gt;, il a l'air plus a jour ... faudrait tester les deux&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Pour compatibilité avec le ZendFramework j'ai renommé le fichier en Lib/BeanStalk.php et la classe en Lib_BeanStalk ainsi que ligne 132 le new dans la function open, et toutes les occurences de BeanStalk::. J'aurai pu la laisser comme ça mais j'aime bien que tout soit rangé ;) je me suis retenu de splitter leur fichier en plusieurs classes nommée comme il faut... le but n'étant pas la, j'ai laissé comme ça&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Mais à mon avis il faudrait un peu patcher leur lib... Si on ne register qu'un serveur et qu'il est down ça part dans des boucles infinies qui plombent apache, pareil si on a plus de jobs et qu'on fait un reserve sans timeout.&lt;/p&gt;


&lt;p&gt;Bref voici un fichier d'exemple pour utiliser beanstalkd&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;&amp;lt;?php
&amp;nbsp;
set_include_path('/Users/lez/Workspaces/www/ZendFramework/ZendFramework-1.8.0/library' . PATH_SEPARATOR . get_include_path());
&amp;nbsp;
ini_set('display_errors', true);
ini_set('error_reporting', E_ALL);
&amp;nbsp;
require_once('Zend/Loader/AutoLoader.php');
Zend_Loader_AutoLoader::getInstance()
    -&amp;gt;registerNamespace('Lib');
&amp;nbsp;
$bs = Lib_BeanStalk::open(array('servers' =&amp;gt; array('127.0.0.1:60606')));
&amp;nbsp;
# priority, delay, ttr, job
$bs-&amp;gt;put(5, 0, 1, 'Hello');
&amp;nbsp;
$j = $bs-&amp;gt;reserve_with_timeout(1);
if ($j) {
    var_dump($j);
    var_dump($j-&amp;gt;get());
    $j-&amp;gt;delete();
} else {
    echo &amp;quot;No process inqueue&amp;quot;;
}
&amp;nbsp;
?&amp;gt;
&amp;nbsp;&lt;/pre&gt;


&lt;p&gt;Pour garder une certaine cohérence avec ce que je fais déja sur Jamendo et pour que ça soit plus fun, je vais aussi et majoritairement utiliser python pour le backend. J'utiliserai donc &lt;a href=&quot;http://github.com/earl/beanstalkc/tree/master&quot;&gt;la version simpliste&lt;/a&gt; du client python, encore une fois il faudrait tester les 2.&lt;/p&gt;


&lt;pre&gt;* git clone git://github.com/earl/beanstalkc.git &amp;amp;&amp;amp; mv beanstalkc/beanstalkc.py .&lt;/pre&gt;

&lt;p&gt;et on a la lib, voila un fichier d'exemple&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;#!/usr/bin/python
&amp;nbsp;
import beanstalkc
&amp;nbsp;
bs = beanstalkc.Connection(host='127.0.0.1', port=60606, decode_yaml=False)
bs.put('Hello')
j = bs.reserve(timeout=1)
if j is not None:
    print j.body
    j.delete()
else:
    print &amp;quot;No jobs inqueue&amp;quot;
&amp;nbsp;&lt;/pre&gt;


&lt;p&gt;Très simple, et j'ai testé, il ne part pas dans des boucles infinies pour les deux cas cités avant ;) peut être que pour le reserve sans timeout si, mais il ne plombe pas la machine au moins&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Je pensais aller plus loin cette fois ci mais je continuerai ce soir avec mysql.&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>POC: Design website accéléré par TokyoCabinet (part 1)</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2009/05/21/646-poc-design-website-accelere-par-tokyocabinet-part-1" />
  <issued>2009-05-21T01:25:03+02:00</issued>
  <modified>2009-05-21T01:25:03+02:00</modified>
  <id>http://www.blognote-info.com/index.php?2009/05/21/646-poc-design-website-accelere-par-tokyocabinet-part-1</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>Je m'amuse, un Proof-Of-Concept avec PHP et tokyocabinet.


Ca fait un moment que j'entends parler de tokyocabinet, et j'ai eu 2/3 discussions avec des gens de différents avis à ce sujet. Je crois que je suis un peu rétrograde mais j'arrive pas a penser base de données sans penser modèle...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;Je m'amuse, un Proof-Of-Concept avec PHP et tokyocabinet.&lt;/p&gt;


&lt;p&gt;Ca fait un moment que j'entends parler de tokyocabinet, et j'ai eu 2/3 discussions avec des gens de différents avis à ce sujet. Je crois que je suis un peu rétrograde mais j'arrive pas a penser base de données sans penser modèle relationnel. Je persiste à croire que le SQL a de gros avantages et que le modèle key-value-store est génial dans une utilisation précise.&lt;/p&gt;


&lt;p&gt;Et donc, j'ai imaginé comment j'intègrerai ça dans une application WEB pour profiter du randement énorme dont dispose un tel SGBD. L'avantage de ma solution c'est qu'elle peut être greffée à posteriori sur un site classique php/mysql ...&lt;/p&gt;


&lt;p&gt;Alors attention: Usine à gaz comming soon ;) Je vais présenter d'abord l'idée, puis pas à pas sa réalisation.&lt;/p&gt;


&lt;h3&gt;1) Le principe&amp;nbsp;:&lt;/h3&gt;


&lt;p&gt;&lt;img src=&quot;/images/images/poc-tokyocabinet.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Voila ;) Donc dans le principe, l'application WEB consulte toutes ses données à partir du key-value-store. Elle construit un hash à partir de l'url et 2/3 autres options, et elle récupère les données toutes construites. L'origine des données étant encore mysql et son SGBD relationnel de base.&lt;/p&gt;


&lt;p&gt;Des taches que j'ai appelé ici &quot;Admin&quot; pompeusement, qui modifient les données modifient en fait mysql et insèrent une tache &lt;a href=&quot;http://xph.us/software/beanstalkd/&quot;&gt;beanstalkd &lt;/a&gt; (un gestionnaire de tache à la volée) qui lui va construire les données nécéssaire aux pages à partir des données mysql.&lt;/p&gt;


&lt;p&gt;Tokyocabinet devient une sorte de &lt;a href=&quot;http://en.wikipedia.org/wiki/Data_mart&quot;&gt;datamart &lt;/a&gt;, une vue sur la base de données, dans ce cas: orientée consultative et hyper rapide.&lt;/p&gt;


&lt;p&gt;La ou réside un problème c'est lors de la création de nouvelles resources (l'affichage d'une page qui n'a jamais eu de données générée). Il faut que le site d'une manière ou d'une autre soit capable de réagire à une clé manquante dans le key-value-store, avec un message a l'utilisateur et un ajax call qui pourrait même montrer une barre de progression ou quelque chose comme ça ... A voir&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Il y a sans doute des api PHP pour lire directement les fichiers tokyocabinet, mais c'est très peu documenté, j'ai trouvé &lt;a href=&quot;http://d.hatena.ne.jp/rsky/20071231/1199082419&quot;&gt;un truc là&lt;/a&gt; mais dans tous les cas je préfère utiliser tokyotyrant en frontend ça nous permettra d'utiliser tokyocabinet comme d'un MemCache, et d'installer le serveur en distant sur une autre machine.&lt;/p&gt;


&lt;h3&gt;2) Mise en oeuvre:&lt;/h3&gt;


&lt;p&gt;Je suis sous OSX avec macports depuis déja bien longtemps, beaucoup de choses installées donc s'il y a des trucs qui marchent pas chez vous ... faut chercher ;)&lt;/p&gt;


&lt;h4&gt;2.1) Tokyocabinet et leurs amis&amp;nbsp;!&lt;/h4&gt;


&lt;h5&gt;2.1.1) Installation&lt;/h5&gt;


&lt;p&gt;Je suis allé sur &lt;a href=&quot;http://tokyocabinet.sourceforge.net&quot;&gt;leur site chez sourceforce&lt;/a&gt;&amp;nbsp;:  j'ai pris dans packages&amp;nbsp;: tokyocabinet, tokyotyrant, tokyodystopia pour chacun et dans l'ordre&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;* ./configure
* make
* sudo make install&lt;/pre&gt;

&lt;p&gt;J'ai rencontré aucun soucis c'est déconcertant&amp;nbsp;!&lt;/p&gt;


&lt;h5&gt;2.1.2) Premiers tests&lt;/h5&gt;


&lt;p&gt;En fait c'est pas très évident la façon dont tout ça fonctionne, donc pour un test je dirai&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Création de la DB:&lt;/p&gt;

&lt;pre&gt;* tchmgr create db.tch&lt;/pre&gt;


&lt;p&gt;Démarrer un serveur tyrant qui utilise cette DB:&lt;/p&gt;

&lt;pre&gt;* ttserver -dmn -host 127.0.0.1 -port 80808 db.tch&lt;/pre&gt;

&lt;p&gt;et voila ... de plus en plus déconcertant ce truc ;)&lt;/p&gt;


&lt;h4&gt;2.2) PHP&lt;/h4&gt;


&lt;p&gt;Donc comme chacun le sait il n'y a pas de PHP sans &lt;a href=&quot;http://framework.zend.com/&quot;&gt;ZendFramework&lt;/a&gt; ... quoi, chacun le sait pas&amp;nbsp;?&lt;/p&gt;


&lt;p&gt;Il faut juste installer memcache d'abord:&lt;/p&gt;

&lt;pre&gt;* sudo pecl install memcache&lt;/pre&gt;

&lt;p&gt;Puis on ajoute &lt;em&gt;extension=memcache.so&lt;/em&gt; au php.ini puis reboot du serveur apache&amp;nbsp;! Vous pouvez vérifier avec un phpinfo() voir si on a bien l'extension de loadée.&lt;/p&gt;


&lt;p&gt;Après avoir joué un peu, j'ai remarqué que le backend classique Memcache de Zend est soit buggé soit pas adapté pour tokyocabinet... Bref j'ai créé un TokyoCabinet.php dans un dossier Zend/Cache/Backend et voici le contenu&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;&amp;lt;?php
&amp;nbsp;
class Zend_Cache_Backend_TokyoCabinet extends Zend_Cache_Backend_Memcached implements Zend_Cache_Backend_ExtendedInterface {
&amp;nbsp;
    public function load($id, $doNotTestCacheValidity = false) {
        $tmp = $this-&amp;gt;_memcache-&amp;gt;get($id);
        if (!empty($tmp)) {
            $tmp = unserialize($tmp);
        }
        if (is_array($tmp)) {
            return $tmp[0];
        }
        return false;
    }
&amp;nbsp;
    public function test($id) {
        $tmp = $this-&amp;gt;_memcache-&amp;gt;get($id);
        if (!empty($tmp)) {
            $tmp = unserialize($tmp);
        }
        if (is_array($tmp)) {
            return $tmp[1];
        }
        return false;
    }
&amp;nbsp;
}
&amp;nbsp;&lt;/pre&gt;


&lt;p&gt;J'ai juste rajouté la partie du &lt;em&gt;unserialize&lt;/em&gt; qui manquait dans le Backend d'origine ... J'ai pas envie de tester si c'est normal, une autre fois peut être ;)&lt;/p&gt;


&lt;p&gt;Du coup notre fichier d'exemple devient le suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;&amp;lt;?php
&amp;nbsp;
set_include_path('/home/workspaces/zend/framework/1.8.0/library' . PATH_SEPARATOR . get_include_path());
&amp;nbsp;
ini_set('display_errors', true);
ini_set('error_reporting', E_ALL);
&amp;nbsp;
require_once('Zend/Loader/AutoLoader.php');
Zend_Loader_AutoLoader::getInstance();
&amp;nbsp;
$cache_log =  new Zend_Log();
$cache_log-&amp;gt;addWriter( new Zend_Log_Writer_Stream( 'file:///tmp/zf-memcache.log' ) );
&amp;nbsp;
# notre backend qui va pointer sur le serveur qu'on vient de créer
$cache_backend = new Zend_Cache_Backend_TokyoCabinet(array(
    &amp;quot;servers&amp;quot; =&amp;gt; array(
        array(&amp;quot;host&amp;quot; =&amp;gt; &amp;quot;localhost&amp;quot;, &amp;quot;port&amp;quot; =&amp;gt; 80808)
    )
));
&amp;nbsp;
# le frontend de gestion logique
$cache_frontend = new Zend_Cache_Core(
    array(
    	'caching' =&amp;gt; true,
    	'cache_id_prefix' =&amp;gt; 'tokyo_test_',
    	'logging' =&amp;gt; true,
    	'logger'  =&amp;gt; $cache_log,
    	'write_control' =&amp;gt; true,
    	'automatic_serialization' =&amp;gt; true,
    	'ignore_user_abort' =&amp;gt; true
    ) 
);
&amp;nbsp;
# le cache puis le test :
$cache = Zend_Cache::factory( $cache_frontend, $cache_backend );
var_dump($cache-&amp;gt;save('Ici les data', 'monhash'));
var_dump($cache-&amp;gt;test('monhash'));
var_dump($cache-&amp;gt;load('monhash'));
&amp;nbsp;
?&amp;gt;
&amp;nbsp;&lt;/pre&gt;


&lt;p&gt;A lancer en cli ou en cgi, et dans mon cas ça me sort&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;* boolean true
* int 1242860379
* string 'Ici les data' (length=12)&lt;/pre&gt;

&lt;p&gt;Super ça marche ;) Et c'est super rapide ... encore heureux à ce niveau là&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Bon demain on crée une base mysql de base avec un jeu de données, puis on s'attaque à beanstalkd.&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>PyRo - Python Robotics</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2009/05/10/645-pyro-python-robotics" />
  <issued>2009-05-10T11:52:20+02:00</issued>
  <modified>2009-05-10T11:52:20+02:00</modified>
  <id>http://www.blognote-info.com/index.php?2009/05/10/645-pyro-python-robotics</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>http://www.pyrorobotics.org/?page=Pyro


J'ai toujours voulu faire un truc comme ça mais l'ampleur du projet fait que seul ... jme décourage :)


Bref je suis tombé la dessus c'est tout fait y'a plus qu'a faire des robots. Qu'a cela ne tienne ça va être marrant !


Dans un premier temps il faut...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;a href=&quot;http://www.pyrorobotics.org/?page=Pyro&quot;&gt;http://www.pyrorobotics.org/?page=Pyro&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;J'ai toujours voulu faire un truc comme ça mais l'ampleur du projet fait que seul ... jme décourage :)&lt;/p&gt;


&lt;p&gt;Bref je suis tombé la dessus c'est tout fait y'a plus qu'a faire des robots. Qu'a cela ne tienne ça va être marrant&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Dans un premier temps il faut l'installer sous mac... donc le lien de download&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://pyrorobotics.org/download/pyrobot-latest.tgz&quot;&gt;http://pyrorobotics.org/download/pyrobot-latest.tgz&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Une fois téléchargé puis décompréssé, il faut lancer python configure.py. Alors perso j'ai installé python avec macports et le truc c'est que les valeurs proposées par le configure.py ont l'air cohérente mais sont fausse. (&lt;a href=&quot;http://emergent.brynmawr.edu/pipermail/pyro-users/2006-November/000447.html&quot;&gt;Trouvé ici&lt;/a&gt;)&lt;/p&gt;


&lt;p&gt;Donc il faut lui dire&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;* Python includes files : /opt/local/include/python2.5
* Python binary : /opt/local/bin/python2.5
* X11 library : /usr/X11R6/include&lt;/pre&gt;


&lt;p&gt;ensuite j'ai mis &quot;none&quot; et &quot;no&quot; a tout&amp;nbsp;! puis make clean &amp;amp;&amp;amp; make&lt;/p&gt;


&lt;p&gt;Faut installer py25-tkinter aussi&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Bon maintenant on va tester tout ça&amp;nbsp;!&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Bash, trier par numéro de version</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2009/05/01/644-bash-trier-par-numero-de-version" />
  <issued>2009-05-01T12:31:37+02:00</issued>
  <modified>2009-05-01T12:31:37+02:00</modified>
  <id>http://www.blognote-info.com/index.php?2009/05/01/644-bash-trier-par-numero-de-version</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>Sur Jamendo on a une architecture SVN plutot classique :


* projects
 * project1
  * tags
  * branches
  * trunk
 * project2
 * etc...


Pour gérer l'export automatique en live de la dernière version d'un projet on la tag. Le tag se fait par numéro de version classique style :...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;Sur Jamendo on a une architecture SVN plutot classique&amp;nbsp;:&lt;/p&gt;


&lt;pre&gt;* projects
 * project1
  * tags
  * branches
  * trunk
 * project2
 * etc...&lt;/pre&gt;


&lt;p&gt;Pour gérer l'export automatique en live de la dernière version d'un projet on la tag. Le tag se fait par numéro de version classique style&amp;nbsp;: Majeure.Mineure.Hotfix.&lt;/p&gt;


&lt;p&gt;Le problème est de savoir quelle est la dernière version sur laquelle on travaille.&lt;/p&gt;


&lt;p&gt;Donc&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;svn list svnroot/svnpath | sort | tail -n1
&amp;nbsp;&lt;/pre&gt;


&lt;p&gt;On est d'acord ça suffit tant qu'on a pas des versions qui dépassent 10, auquel cas, elles seront classées avec les 1 ...&lt;/p&gt;


&lt;p&gt;donc&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;svn list svnroot/svnpath | sort -g | tail -n1
&amp;nbsp;&lt;/pre&gt;


&lt;p&gt;Nous sauve temporairement et pour bien des cas .... La ou ça devient tricky, c'est quand on a des versions 6.12.1, 6.9.7 enfin ... vous voyez bien, quand le problème se répercute après le [.]&lt;/p&gt;


&lt;p&gt;Donc vla une commande qui solutionne un peu ce problème je suis sur qu'on peux y trouver d'autres applications... comme j'ai mis un peu de temps, je partage ;)&lt;/p&gt;

&lt;pre&gt;svn list svnroot/svnpath | awk '{print $1 &amp;quot; &amp;quot; $1}' | sed s/[.]//1 | sed s/[.]//1 | sort -g | tail -n 1 | cut -d&amp;quot; &amp;quot; -f2
&amp;nbsp;&lt;/pre&gt;


&lt;p&gt;Le principe est simple, je double la valeur, j'enlève les points de la première occurence, je tri numériquement, je prend le dernier puis je recoupe ... Pas très compliqué en somme mais assez pratique ;)&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Changement d'hébergement ...</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2009/04/14/643-changement-d-hebergement" />
  <issued>2009-04-14T09:18:00+02:00</issued>
  <modified>2009-04-14T09:18:00+02:00</modified>
  <id>http://www.blognote-info.com/index.php?2009/04/14/643-changement-d-hebergement</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>Vous avez peut être remarqué que ces derniers temps mon nom de domaine ne pointait vers plus rien !


J'ai décidé de changer d'hebergement donc je suis chez ovh... je voulais faire un peu mumuse donc j'ai pris ceci :


https://www.ovh.com/fr/produits/offres_rps.xml


voila donc il se peut...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;Vous avez peut être remarqué que ces derniers temps mon nom de domaine ne pointait vers plus rien&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;J'ai décidé de changer d'hebergement donc je suis chez ovh... je voulais faire un peu mumuse donc j'ai pris ceci&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;https://www.ovh.com/fr/produits/offres_rps.xml&lt;/p&gt;


&lt;p&gt;voila donc il se peut que quand je joue avec il y ait des interruptions mais .... rien de grave hein ;)&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Nouveau blog</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2008/10/28/642-nouveau-blog" />
  <issued>2008-10-28T11:10:51+01:00</issued>
  <modified>2008-10-28T11:10:51+01:00</modified>
  <id>http://www.blognote-info.com/index.php?2008/10/28/642-nouveau-blog</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>Voila, ça fait un moment que je voulais écrire en anglais, ce blog restera en français avec toutes ses fautes, mais je part vers de nouveaux horizons :


http://colorblind.jamendo.net/...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;Voila, ça fait un moment que je voulais écrire en anglais, ce blog restera en français avec toutes ses fautes, mais je part vers de nouveaux horizons&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://colorblind.jamendo.net/&quot;&gt;http://colorblind.jamendo.net/&lt;/a&gt;&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>meme(me)</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2008/09/24/641-mememe" />
  <issued>2008-09-24T23:16:39+02:00</issued>
  <modified>2008-09-24T23:16:39+02:00</modified>
  <id>http://www.blognote-info.com/index.php?2008/09/24/641-mememe</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>Via StandBlog





Take a picture of yourself right now.
Don’t change your clothes, don’t fix your hair... just take a picture.
Post that picture with NO editing.
Post these instructions with your picture....</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;&lt;a href=&quot;http://standblog.org/blog/post/2008/09/22/Mememe&quot;&gt;Via StandBlog&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;/images/images/Photo 1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take a picture of yourself right now.&lt;/li&gt;
&lt;li&gt;Don&amp;#8217;t change your clothes, don&amp;#8217;t fix your hair... just take a picture.&lt;/li&gt;
&lt;li&gt;Post that picture with NO editing.&lt;/li&gt;
&lt;li&gt;Post these instructions with your picture.&lt;/li&gt;
&lt;/ol&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>C'est trop beau...</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2008/06/12/640-c-est-trop-beau" />
  <issued>2008-06-12T17:02:10+02:00</issued>
  <modified>2008-06-12T17:02:10+02:00</modified>
  <id>http://www.blognote-info.com/index.php?2008/06/12/640-c-est-trop-beau</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>Je peux pas m'empécher ... Je résiste pas ... c'est pas la peine ... le nouveau widget de Jamendo est vraiment terrible !!!

La playlist electro est vraiment sympa aussi, les deux font la paire: hop un billet !


       ...</summary>
  <content type="text/html" mode="escaped"> Je peux pas m'empécher ... Je résiste pas ... c'est pas la peine ... le nouveau widget de Jamendo est vraiment terrible !!!
&lt;br /&gt;&lt;br /&gt;
La playlist electro est vraiment sympa aussi, les deux font la paire: hop un billet !
&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;object width=&quot;200&quot; height=&quot;300&quot; classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0&quot; align=&quot;middle&quot;&gt; &lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot; /&gt; &lt;param name=&quot;movie&quot; value=&quot;http://widgets.jamendo.com/fr/playlist/?playertype=2008&amp;playlist_id=56944&quot; /&gt; &lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt; &lt;param name=&quot;bgcolor&quot; value=&quot;#FFFFFF&quot; /&gt; &lt;embed src=&quot;http://widgets.jamendo.com/fr/playlist/?playertype=2008&amp;playlist_id=56944&quot; base=&quot;http://widgets.jamendo.com/fr/playlist/&quot; quality=&quot;high&quot; wmode=&quot;transparent&quot; bgcolor=&quot;#FFFFFF&quot; width=&quot;200&quot; height=&quot;300&quot; align=&quot;middle&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&amp;nbsp;&lt;/embed&gt;&amp;nbsp;&lt;/object&gt;&lt;/div&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Convertir un csv en html avec vi</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2008/06/04/639-convertir-un-csv-en-html-avec-vi" />
  <issued>2008-06-04T10:27:36+02:00</issued>
  <modified>2008-06-04T10:27:36+02:00</modified>
  <id>http://www.blognote-info.com/index.php?2008/06/04/639-convertir-un-csv-en-html-avec-vi</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Divers</dc:subject>
  <summary>Trop facile vi


* vi test.csv
* O &gt; &lt;table&gt;
* ESC B o &gt; &lt;/table&gt;
* :%s/";"/&lt;\/td&gt;&lt;td&gt;/g
* :%s/^"/&lt;tr&gt;&lt;td&gt;/g
* :%s/"$/&lt;\/td&gt;&lt;\/tr&gt;/g


et hop on en parle plus ......</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;Trop facile vi&lt;/p&gt;


&lt;pre&gt;* vi test.csv
* O &amp;gt; &amp;lt;table&amp;gt;
* ESC B o &amp;gt; &amp;lt;/table&amp;gt;
* :%s/&quot;;&quot;/&amp;lt;\/td&amp;gt;&amp;lt;td&amp;gt;/g
* :%s/^&quot;/&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;/g
* :%s/&quot;$/&amp;lt;\/td&amp;gt;&amp;lt;\/tr&amp;gt;/g&lt;/pre&gt;


&lt;p&gt;et hop on en parle plus ...&lt;/p&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Installer Trac avec MacPorts</title>
  <link rel="alternate" type="text/html" href="http://www.blognote-info.com/index.php?2008/03/24/637-installer-trac-avec-macports" />
  <issued>2008-03-24T11:40:50+01:00</issued>
  <modified>2008-03-24T11:40:50+01:00</modified>
  <id>http://www.blognote-info.com/index.php?2008/03/24/637-installer-trac-avec-macports</id>
  <author><name>PiTiLeZarD</name></author>
  <dc:subject>Mac</dc:subject>
  <summary>Voila sur Jamendo on utilise trac massivement, c'est un outil tout a fait aproprié aux développements en tous genre ... Pour mes devs perso quand je trouve parfois le temps, ça me manque d'avoir un tel outil ...


Donc installer trac c'est simple :

* il faut apache2 donc ça rendez vous au...</summary>
  <content type="text/html" mode="escaped"> &lt;p&gt;Voila sur Jamendo on utilise trac massivement, c'est un outil tout a fait aproprié aux développements en tous genre ... Pour mes devs perso quand je trouve parfois le temps, ça me manque d'avoir un tel outil ...&lt;/p&gt;


&lt;p&gt;Donc installer &lt;a href=&quot;http://trac.edgewall.org/&quot;&gt;trac&lt;/a&gt; c'est simple&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;* il faut apache2 donc ça &lt;a href=&quot;http://blognote-info.com/index.php?2008/03/23/636-environnement-de-developpement-avec-macports&quot;&gt;rendez vous au dernier billet&lt;/a&gt; :
* sudo port install subversion +mod_dav_svn
* sudo port install mod_python25
* ajouter  &lt;strong&gt;LoadModule python_module modules/mod_python.so&lt;/strong&gt; dans /opt/local/apache2/conf/httpd.conf
* sudo vi /etc/hosts et ajouter local.trac aux localhosts
* cd &amp;amp;&amp;amp; mkdir -p Workspaces/Trac qui va recevoir les projets trac
* sudo vi /opt/local/apache2/conf/vhost.trac.conf&lt;/pre&gt;


&lt;p&gt;Perso j'y ai mis ça&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;&amp;lt;VirtualHost *:&lt;span style=&quot;color: #cc66cc;&quot;&gt;80&lt;/span&gt;&amp;gt;
  ServerName &lt;span style=&quot;color: #000066;&quot;&gt;local&lt;/span&gt;.trac
&amp;nbsp;
  DocumentRoot &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/Users/lez/Workspaces/Trac&quot;&lt;/span&gt;
&amp;nbsp;
  &amp;lt;Directory &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/opt/local/share/trac/htdocs/&quot;&lt;/span&gt;&amp;gt;
    Order allow,deny
    Allow from all
  &amp;lt;/Directory&amp;gt;
&amp;nbsp;
  &amp;lt;Directory &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/Users/lez/Workspaces/Trac&quot;&lt;/span&gt;&amp;gt;
    Order allow,deny
    Allow from all
  &amp;lt;/Directory&amp;gt;
&amp;nbsp;
  Alias /trachtdocs/ &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/opt/local/share/trac/htdocs/&quot;&lt;/span&gt;
  &amp;lt;Location /&amp;gt;
    SetHandler mod_python
    PythonInterpreter main_interpreter
    PythonHandler trac.web.modpython_frontend
    PythonOption TracUriRoot &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/&quot;&lt;/span&gt;
    PythonOption TracEnvParentDir &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/Users/lez/Workspaces/Trac&quot;&lt;/span&gt;
  &amp;lt;/Location&amp;gt;
&amp;nbsp;
  &amp;lt;LocationMatch /&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;:alnum:&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;+/login&amp;gt;
    AuthType Basic
    AuthName &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;Local Trac&quot;&lt;/span&gt;
    AuthUserFile &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;/opt/local/etc/trac-auth-file&quot;&lt;/span&gt;
    Require valid-user
  &amp;lt;/LocationMatch&amp;gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;


&lt;p&gt;pensez a faire un Include de ce fichier dans le httpd.conf&lt;/p&gt;


&lt;p&gt;voila après rendez vous &lt;a href=&quot;http://trac.edgewall.org/wiki/TracAdmin&quot;&gt;sur la trac-admin&lt;/a&gt; mais&lt;/p&gt;

&lt;pre&gt;* trac-admin /users/lez/Workspaces/Trac/myproject initenv&lt;/pre&gt;

&lt;p&gt;pourrait être suffisant :)&lt;/p&gt;


&lt;p&gt;et finalement accédez à votre trac en faisant&amp;nbsp;:
http://local.trac/myproject/&lt;/p&gt;


&lt;p&gt;Ca marche :)&lt;/p&gt;</content>
</entry>
</feed>