[Aller au contenu] [Aller au menu] [Aller à la recherche]

BlogNote-Info.com

Recherche :

jeudi 21 mai 2009

+ [Divers] POC: Design website accéléré par TokyoCabinet (part 2) 3 commentaires

0 vote(s)

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 ;)

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 :

* ./configure --with-event=/opt/local/var/macports/software/libevent/1.4.9_0/opt/local
* make
* sudo make install

magnifique, encore un soft sans encombres qu'on peut lancer comme ceci :

* beanstalkd -p 60606

Pour le client php j'ai pris celui de sourceforge, il a l'air plus a jour ... faudrait tester les deux !

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 !

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.

Bref voici un fichier d'exemple pour utiliser beanstalkd :

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

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 la version simpliste du client python, encore une fois il faudrait tester les 2.

* git clone git://github.com/earl/beanstalkc.git && mv beanstalkc/beanstalkc.py .

et on a la lib, voila un fichier d'exemple :

#!/usr/bin/python
 
import beanstalkc
 
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 "No jobs inqueue"
 

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 !

Je pensais aller plus loin cette fois ci mais je continuerai ce soir avec mysql.

Haut de page

+ [Divers] POC: Design website accéléré par TokyoCabinet (part 1)

0 vote(s)

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 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.

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 ...

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

1) Le principe :

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.

Des taches que j'ai appelé ici "Admin" pompeusement, qui modifient les données modifient en fait mysql et insèrent une tache beanstalkd (un gestionnaire de tache à la volée) qui lui va construire les données nécéssaire aux pages à partir des données mysql.

Tokyocabinet devient une sorte de datamart , une vue sur la base de données, dans ce cas: orientée consultative et hyper rapide.

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 !

Il y a sans doute des api PHP pour lire directement les fichiers tokyocabinet, mais c'est très peu documenté, j'ai trouvé un truc là 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.

2) Mise en oeuvre:

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 ;)

2.1) Tokyocabinet et leurs amis !

2.1.1) Installation

Je suis allé sur leur site chez sourceforce : j'ai pris dans packages : tokyocabinet, tokyotyrant, tokyodystopia pour chacun et dans l'ordre :

* ./configure
* make
* sudo make install

J'ai rencontré aucun soucis c'est déconcertant !

2.1.2) Premiers tests

En fait c'est pas très évident la façon dont tout ça fonctionne, donc pour un test je dirai :

Création de la DB:

* tchmgr create db.tch

Démarrer un serveur tyrant qui utilise cette DB:

* ttserver -dmn -host 127.0.0.1 -port 80808 db.tch

et voila ... de plus en plus déconcertant ce truc ;)

2.2) PHP

Donc comme chacun le sait il n'y a pas de PHP sans ZendFramework ... quoi, chacun le sait pas ?

Il faut juste installer memcache d'abord:

* sudo pecl install memcache

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

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 :

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

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

Du coup notre fichier d'exemple devient le suivant :

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

A lancer en cli ou en cgi, et dans mon cas ça me sort :

* boolean true
* int 1242860379
* string 'Ici les data' (length=12)

Super ça marche ;) Et c'est super rapide ... encore heureux à ce niveau là !

Bon demain on crée une base mysql de base avec un jeu de données, puis on s'attaque à beanstalkd.

Haut de page

dimanche 10 mai 2009

+ [Divers] PyRo - Python Robotics

0 vote(s)

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 l'installer sous mac... donc le lien de download :

http://pyrorobotics.org/download/pyrobot-latest.tgz

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. (Trouvé ici)

Donc il faut lui dire :

* Python includes files : /opt/local/include/python2.5
* Python binary : /opt/local/bin/python2.5
* X11 library : /usr/X11R6/include

ensuite j'ai mis "none" et "no" a tout ! puis make clean && make

Faut installer py25-tkinter aussi !

Bon maintenant on va tester tout ça !

Haut de page

vendredi 1 mai 2009

+ [Divers] Bash, trier par numéro de version

0 vote(s)

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 : Majeure.Mineure.Hotfix.

Le problème est de savoir quelle est la dernière version sur laquelle on travaille.

Donc :

svn list svnroot/svnpath | sort | tail -n1
 

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 ...

donc :

svn list svnroot/svnpath | sort -g | tail -n1
 

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 [.]

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 ;)

svn list svnroot/svnpath | awk '{print $1 " " $1}' | sed s/[.]//1 | sed s/[.]//1 | sort -g | tail -n 1 | cut -d" " -f2
 

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 ;)

Haut de page

mardi 14 avril 2009

+ [Divers] Changement d'hébergement ... 2 commentaires

0 vote(s)

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 que quand je joue avec il y ait des interruptions mais .... rien de grave hein ;)

Haut de page

mardi 28 octobre 2008

+ [Divers] Nouveau blog 5 commentaires

2 vote(s)

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/

Haut de page

mercredi 24 septembre 2008

+ [Divers] meme(me)

2 vote(s)

Via StandBlog

  1. Take a picture of yourself right now.
  2. Don’t change your clothes, don’t fix your hair... just take a picture.
  3. Post that picture with NO editing.
  4. Post these instructions with your picture.
Haut de page

jeudi 12 juin 2008

+ [Divers] C'est trop beau... 2 commentaires

0 vote(s)
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 !

  
Haut de page

mercredi 4 juin 2008

+ [Divers] Convertir un csv en html avec vi

0 vote(s)

Trop facile vi

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

et hop on en parle plus ...

Haut de page

lundi 24 mars 2008

+ [Mac] Installer Trac avec MacPorts 2 commentaires

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 dernier billet :
* sudo port install subversion +mod_dav_svn
* sudo port install mod_python25
* ajouter  LoadModule python_module modules/mod_python.so dans /opt/local/apache2/conf/httpd.conf
* sudo vi /etc/hosts et ajouter local.trac aux localhosts
* cd && mkdir -p Workspaces/Trac qui va recevoir les projets trac
* sudo vi /opt/local/apache2/conf/vhost.trac.conf

Perso j'y ai mis ça :

<VirtualHost *:80>
  ServerName local.trac
 
  DocumentRoot "/Users/lez/Workspaces/Trac"
 
  <Directory "/opt/local/share/trac/htdocs/">
    Order allow,deny
    Allow from all
  </Directory>
 
  <Directory "/Users/lez/Workspaces/Trac">
    Order allow,deny
    Allow from all
  </Directory>
 
  Alias /trachtdocs/ "/opt/local/share/trac/htdocs/"
  <Location />
    SetHandler mod_python
    PythonInterpreter main_interpreter
    PythonHandler trac.web.modpython_frontend
    PythonOption TracUriRoot "/"
    PythonOption TracEnvParentDir "/Users/lez/Workspaces/Trac"
  </Location>
 
  <LocationMatch /[[:alnum:]]+/login>
    AuthType Basic
    AuthName "Local Trac"
    AuthUserFile "/opt/local/etc/trac-auth-file"
    Require valid-user
  </LocationMatch>
</VirtualHost>

pensez a faire un Include de ce fichier dans le httpd.conf

voila après rendez vous sur la trac-admin mais

* trac-admin /users/lez/Workspaces/Trac/myproject initenv

pourrait être suffisant :)

et finalement accédez à votre trac en faisant : http://local.trac/myproject/

Ca marche :)

Haut de page

dimanche 23 mars 2008

+ [Mac] Environnement de développement avec MacPorts 2 commentaires

Oulah ... comment ça marche encore ... ça fait longtemps que j'avais pas écrit un billet tiens ...

Bref j'ai récemment formaté mon mac pour y mettre leopard et profiter de ça pour tout refaire a neuf, avec fink et tous les soft que j'installais pour tester ... c'était devenu un enfer de s'en servir ... il était hyper lent et pour bosser avec c'était vraiment pas top ...

bref me revoila parti avec un beau leopard tout neuf et ça vaut bien le coup ...

Simplement j'avais ressenti pas mal de limitations avec MAMP et pour me passer de ces limitations et retrouver les nostalgies de la bidouille sous linux ... j'ai voulu installer tout ça moi même avec MacPorts ...

Voici le résumé de mes étapes pour y arriver :

pour macports

* Installer les dev tools de osx pour avoir un gcc qui va bien
* Installer macports

pour apache2

* sudo port install apache2
* cd /opt/local/apache2/conf
* sudo cp httpd.conf.sample httpd.conf
* modifier DocumentRoot, Directory et DirectoryIndex (index.php, index.html)
* Rajouter le AddType application/x-httpd-php .php

pour php5

* sudo port install php5 +apache2 +mysql5 +pear
* cd /opt/local/etc
* sudo cp php.ini-recommended php.ini
* modifier short_open_tag à On
* cd /opt/local/apache2/modules
* sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so

pour mysql5

* sudo port install mysql5 +server
* sudo -u mysql mysql_install_db5
* sudo -u mysql /opt/local/lib/mysql5/bin/mysqld_safe &
* sudo /opt/local/lib/mysql5/bin/mysqladmin -u root password 'new_passwd'

ensuite pour le fun :

* sudo mkdir -p /etc/init.d/
* sudo ln -s /opt/local/apache2/bin/apachectl /etc/init.d/apache
* sudo vi /etc/init.d/mysql && sudo chmod +x /etc/init.d/mysql

dans ce script on y met :

#! /bin/bash
 
start () {
  /opt/local/lib/mysql5/bin/mysqld_safe &
  ln -s /opt/local/var/run/mysql5/mysqld.sock /tmp/mysql.sock
}
 
stop () {
  ps -a | grep mysqld | grep -v 'grep' | awk '{print $1}' | xargs kill -9
  if [ -h /tmp/mysql.sock ]; then rm /tmp/mysql.sock; fi
}
 
if [ $1 == 'start' ]; then
  echo "Starting mysql deamon"
  start
elif [ $1 == 'stop' ]; then
  echo "Stoping mysql"
  stop
elif [ $1 == 'restart' ]; then
  stop && start
else
        echo 'Usage mysql [start/stop/restart]'
fi

et voila :

* sudo /etc/init.d/apache start
* sudo /etc/init.d/mysql start

c'est partit :)

Haut de page

mardi 11 décembre 2007

+ [Mac] Xdebug et OSX

J'ai entendu parler ça et la d'une méthode pour avoir des fichier .so du xdebug déja compilé ... les binaires du xdebug quoi ... je me demande pourquoi c'est dispo nulpart juste en téléchargement ...

Oh tiens ... y'en a un qui a eu l'idée

PS: si vous avez le so de la 5.4 ou de la 6 ou de quelconque autre version pour osx n'hésitez pas je rajoute :)

Haut de page

vendredi 30 novembre 2007

+ [Mac] Supprimer la transparence avec iTerm

Bon plein de gens font plein de choses compliquée pour supprimer cette satanée transparence ... mais y'a un truc tout simple en fait ...

Bookmarks > Manage Profile > Default > Transparency (de 10 vers 0%) on quitte et on reviens ... magique enfin un vrai terminal ... après y'a même moyen de le mettre en fond noir, avec police de 11, en 120 de large au lieu de 80 ... enfin chacun ses goûts mais dison qu'on peut en faire un vrai terminal sympa en plus de toutes les fonctionalités qu'il a :)

Haut de page

+ [Mac] iTerm et vi un commentaire

Aaaah ... juste pour dire que ... "he made it" :

http://maas-frensch.com/peter/2007/06/14/vi-and-iterm/

Haut de page

samedi 24 novembre 2007

+ [Divers] IE7 et test Acid2 un commentaire

1 vote(s)

Tout le monde se prosterne devant microsoft parce qu'ils ont fait un grand pas en avant concernant la gestion du CSS, whoohooo :)

Voila ce que ça donne :)

Si vous voulez tester sur votre navigateur : http://www.webstandards.org/files/acid2/test.html

PS petit rappel: acid2 c'est le rassemblement de toutes les propriétés css, utilisés d'une manière un peu hard core. Le but étant de mettre a l'épreuve le parsing css avec une feuille de style qui devrait passer ... Edifiant ... FF2 ne le prend pas bien non plus mais c'est pas si catastrophique ... FF3 lui ça va, nickel :)

Haut de page

+ [Divers] Firefox 3 beta 1 ça promet ! un commentaire

2 vote(s)

Franchement sympa, rapide, beau, fonctionnel ... vivement que ça sorte et surtout, vivement que les plugins soient compatible ...

Bref on peut le trouver ici : http://www.mozilla.com/en-US/firefox/all-beta.html

Si vous êtes sous mac, vous pouvez l'intégrer avec ceci : https://addons.mozilla.org/en-US/firefox/addon/6050

Et si vous voulez être a la pointe du dernier build de mozilla, c'est par ici : http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/

Haut de page

+ [Divers] Test HTML 2 commentaires

0 vote(s)
Bon je me suis senti pris au dépourvu mais c'est assez intéressant a faire : Le test Mon résultat : 48
Haut de page

mercredi 7 novembre 2007

+ [Mac] Prism 2 commentaires

Oulah j'écris plus des masses ces derniers temps ... J'ai plus du tout le temps ... on prépare la nouvelle version de Jamendo, on croule sous le boulot ... J'aurais plein de truc a dire mais il me faudrait une secrétaire ...

Bref je voulais juste parler de Prism qui est la nouvelle platforme WebRunner de Mozilla et qui vient de sortir sur Mac :

J'avais déja beaucoup apprécié WebRunner je dois dire que prism est sympa :) Moins compliqué a utiliser en tout cas ...

Un gros défaut de prism c'est qu'on peut lancer qu'une seule instance à la fois pour l'instant ... donc pas la peine d'utiliser gmail en même temps que google docs par exemple ... domage ...

Je me suis donc fait mon application gmail en quelque clicks mais bon ... l'icone des softs development chez mozilla j'aime pas ... donc ... je me rend ici je prends une superbe icone gmail, je la passe dans iConverter qui me la rend dégueulasse mais le coeur y est ... il me la convertit en icns (le ico de mac ...) Sur mon application gmail, je fait click droit, show package contents > ressource et je claque mon icone la ...

Voila :) un beau client lourd pour gmail. Quoi que client lourd pour un soft qui tourne super vite avec une appli web qui vient de passer dans une version ultra rapide ... c'est pas le mot juste :)

Haut de page

vendredi 5 octobre 2007

+ [Mac] Debug javascript avec Safari un commentaire

Pas trop le temps, donc je file juste le tip :

Ouvrez un terminal, tapez-y :

defaults write com.apple.Safari IncludeDebugMenu 1

Fermez Safari et réouvrez ... oooooooh un nouveau menu super pratique !

Haut de page

jeudi 27 septembre 2007

+ [Divers] Silly JunX un commentaire

0 vote(s)
Voila de temps en temps quand j'aime un truc sur Jamendo je vais le coller ici ... j'ai trouvé ce groupe extra ... Tout n'est pas bon dans l'album, mais certaines chansons, m'ont fait halluciner!!! La dernière j'ai adoré ! Voila c'est SillyJunX, on aime ou on aime pas, mais si vous voulez vous faire votre idée c'est écoutable directement comme ceci :

 
Haut de page