Installation de Teambox sur Centos

Posted on August 6th, 2010 in dev | No Comments »

Teambox.com Toujours à la recherche d’un outils de collaboration et de gestion de projet qui me convienne, j’ai entendu parler de Teambox (merci Twitter au passage :p). Leur screencast m’a mis l’eau à la bouche et j’ai décidé d’essayer.

Bien qu’il y ai une souscription gratuite dans leur offre, j’ai préféré tenter l’aventure en installant le tout sur un serveur. J’aime bien voir l’envers du décors ;) . Et bien l’envers du décors, on peut dire que je l’ai vu de près :D .
Ne connaissant rien à Ruby et son éco-système, l’installation à été un peu laborieuse. Il a fallu jongler avec les différentes versions de ruby et ses outils. Centos n’étant pas à la page niveau version de ruby, j’ai du passer par les sources.
Au final, ça tourne bien.

Pour les curieux, voilà les différentes étapes par lesquelles je suis passé. Pour info, l’OS du serveur sur lequel j’ai travaillé et Centos 5.4 64bits.

Installation

On commence par installé les sources des dépendance nécessaire à la compilation :

yum install ImageMagick
yum install libxml2-devel libxslt-devel
yum install mysql-devel postgresql-devel sqlite-devel

Compilation de Ruby :

wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz
tar -zxvf ruby-1.8.7.tar.gz
cd ruby-1.8.7
./configure --with-openssl-dir=/usr/lib64/openssl
make
make install


wget http://rubyforge.org/frs/download.php/69365/rubygems-1.3.7.tgz
tar -zxvf rubygems-1.3.7.tgz
cd rubygems-1.3.7
ruby setup.rb


gem install bundler -v '~> 1.0.0.rc'

Download de Teambox et installation :

git clone git://github.com/teambox/teambox.git /opt/teambox
cd /opt/teambox
bundle install

Installation du framework Rails, le fameux RoR.

gem install rails

Création de la base de donnée, et configuration :

vi teambox/config/database.yml
rake db:create db:schema:load RAILS_ENV=production

Lancement de teambox sur le port 3000 :

script/server -e production

A partir de là, j’ai eu un problème de chargement des fichiers javascript et css. Les requêtes sur ces fichiers se faisaient sur le port 80. Dans le cas ou l’on souhaite utiliser Apache, la modification suivante n’a pas lieu d’être. J’ai quand même modifier provisoirement la ligne 30 du fichier ‘config/environments/production.rb’ en ajoutant le port 3000 après le domaine. Ce n’est certainement pas la meilleur façon de faire mais pour mes tests cela a suffit.
La prochaine étape consiste à utiliser le mod_passenger d’apache.

Configuration d’apache

Installation du mode passenger. Il suffit de suivre les instruction affichées.

gem install passenger
passenger-install-apache2-module

Activer le mod_passenger en créant par exemple un fichier ‘/etc/httpd/conf.d/passenger.conf’ et en ajoutant la ligne suivante.

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.11/ext/apache2/mod_passenger.so

Créer un virtual host ‘/etc/httpd/conf.d/teambox.conf’.

<VirtualHost *:80>
    Options +Indexes
    ServerAdmin me@mydomain.com
    ServerName teambox.mydomain.com
    DocumentRoot /opt/teambox/public
    <Directory /opt/teambox/public>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Options -MultiViews
    </Directory>
    RailsEnv production
</VirtualHost>

Après un restart d’Apache le sous domaine ‘teambox.mydomain.com’ devrait être accessible. En ce qui me concerne j’avais une belle erreur de Passenger, joliment habillé, avec le traceback et tout et tout… dont voici le détails :

Ruby on Rails application could not be started
git://github.com/mislav/tolk.git (at master) is not checked out. Please run `bundle install` (Bundler::PathError)
PhusionPassenger::UnknownError
...

En cherchant un peu sur le net j’ai trouvé un workaround. Dans ‘/opt/teambox’ éxécuter les deux commandes suivantes :

bundle install --production
chmod -R 777 vendor/bundle

Et voilà !

Ressources

Teambox community qui référence les guides d’installation.
Un guide d’installation de Ruby sous Centos
Un guide d’installation de Teambox
Le blog officiel

Wikileaks

Posted on August 3rd, 2010 in internet | No Comments »

Une interview de Julian Assange rédacteur en chef de wikileaks.com afin de mieux saisir la portée de leurs actions.

Php stream pour parser un fichier un compressé

Posted on July 8th, 2010 in dev, php | No Comments »

J’ai été récemment ammené à parser un nombre important de fichiers de log compressés avec Gzip.

Je voulais traiter chaque fichier à la volée, ne pas avoir à écrire chaque fichier décompressé. Pour ce dernier point, rien de plus simple, il suffit d’utiliser les options “-cd” de gzip qui permettent de décompresser et de rediriger vers la sortie standard.

Voici ce à quoi je voulais arriver :
user@hostname$ gzip -cd mon_fichier_de_log.gz | ./parser.php

Concernant le parser PHP, j’ai utilisé les streams qui permettent notament de récupérer ce qui est écrit sur la sortie standard (comme ça tombre bien, n’est ce pas :) ).

La version simple

1. Le traitement du flux



<?php 
$input 
fopen('php://stdin''r'); // ouverture du flux
while (!feof($input)) {
    
$line fgets($input); // lecture ligne par ligne
    
parse($line); // ma fonction pour parser 
}
fclose($input); // fermeture du flux

2. Rendre le script php exécutable

Définir le bang dans le script PHP :

#!/usr/bin/php
<?php


Fixer l’attribut exécutable :
user@hostname$ chmod +x parser.php

3. L’exécution

user@hostname$ gzip -cd mon_fichier_de_log.gz | ./parser.php

Une version plus complète

CI-dessous une version plus structurée, facilement extensible dans laquelle il est possible d’appliquer plusieurs traitement.
<?php

interface ICommandBuilder {
    public function 
addCommand(ICommand $command);
}

interface ICommand {
    public function 
run($str);
    public function 
finalize();
}

/**
 * Read input on stdin and call a list of ICommand on each readed line.
 */
class Phpipe implements ICommandBuilder {
    
    
/**
     * Worker list, all workers are called for each readed line.
     * @var array of ICommand object
     */
    
protected $worker = array();
    
    public function 
__contruct() {}
    
    
/**
     * Append a new worker
     * @param ICommand $command
     * @return self
     */
    
public function addCommand(ICommand $command) {
        
array_push($this->worker$command);
        return 
$this;
    }
    
    
/**
     * Read stdin until feof
     */
    
public function read() {
        
        
$input fopen('php://stdin''r');
        
$exclude = array();
        
        while (!
feof($input)) {
            
$line fgets($input);
            foreach(
$this->worker as $worker) {
                
$worker->run($line);
            }
        }
        
        
fclose($input);
        
$this->finalize();
    }
    
    
/**
     * Call all ICommand::finalize
     */
    
protected function finalize() {
        foreach(
$this->worker as $worker) {
            
$worker->finalize();
        }
    }
    
}

/**
 * ICommand Null pattern
 */
class LineNull implements ICommand {
    public function 
run($str) {
        return;
    }
    public function 
finalize() {
        return;
    }

/**
 * ICommand Set line number and echo line.
 */
class LineEcho implements ICommand {
    
    public function 
run($str) {
        !isset(
$this->i) ?  $this->null;
        echo ++
$this->i': '$str;
    }
    
    public function 
finalize() {
        echo 
"\n";
    }
    

/**
 * ICommand Echo each line reversed.
 */
class LineReverse implements ICommand {
    
    public function 
run($str) {
        echo 
strrev(trim($str))."\n";
    }
    
    public function 
finalize() {}
}

/**
 * ICommand Append each line in a buffer. Buffer is echoed on finalieze() call. 
 */
class LineBuffer implements ICommand {
    
    public 
$buffer '';
    
    public function 
run($str) {
        
$this->buffer .= $str;
    }
    
    public function 
finalize() {
        echo 
$this->buffer;
    }
}

$worker = new LineEcho;

$phpipe = new Phpipe;
$phpipe->addCommand(new LineNull)
    ->
addCommand($worker)
    ->
addCommand(new LineReverse)
    ->
addCommand(new LineBuffer);
$phpipe->read();

echo "terminated\n";

Pour aller plus loin

  • Permettre la sélection du flux en entrée
  • Utiliser les stream de filtrage

J’héberge mon compte OpenID en 5 minutes

Posted on June 6th, 2010 in dev, internet, php | No Comments »

OpenID-largeOpenID permet d’utiliser le même crédential pour s’authentifier sur des sites différents. Plus besoin de créer un compte sur chaque service en ligne que l’on souhaite utiliser. Autre avantage, OpenId fonctionne de manière décentralisée et n’importe qui peut devenir son propre “hébergeur”. Et ça tombe plutôt bien, c’est ce qu’on va mettre en place grâce à la librairie phpMyId.

Premièrement, récupérer les fichier MyID.config.php et MyID.php sur github, seul le premier fichier sera à éditer.

1. Modifier le fichier de configuration

Ci-dessous les 4 champs à personnaliser.

'auth_username' => 'votre_login',
'auth_password' => 'hash',
'auth_realm' => 'phpMyID',
'idp_url' => 'http://monblog.tld/openid/',

  • auth_username correspond simplement au login que vous souhiatez utiliser.
  • auth_password correpsond au hash (md5) du tuple : ‘login:realm:votre_password’. Voilà comment le créer sous linux :

echo -n 'votre_login:phpMyID:votre_password' | openssl md5

C’est donc le hash généré par la commande précédente qui est renseigné dans ‘auth_password‘.

  • auth_realm est utilisé dans la génération du hash. Libre à vous de le modifier ou de le laisser tel quel.
    idp_url est l’url dans lesquels nous avons déposé les scripts.

2. Upload

Pour notre exemple, nous avons spécifié ‘http://monblog.tld/openid/’ comme url. Nous uploadons donc dans le répertoire ‘openid’ les deux fichiers. Nous pouvons renommer ‘MyID.config.php’ afin de simplifier l’url d’accès.

Nous avons donc :

/openid/index.php
/openid/MyID.php

3. Récupérer son identité

Arrivé à cette étape, vous pouvez utiliser ‘http://monblog.tld/openid/’ comme url de login. C’est bien, mais c’est pas top ;) . Nous allons modifiez une page existente, afin de la faire pointer vers l’authentification OpenID. Outre le fait qu’on peut choisir une url plus simple, cette manipulation a l’avantage de découpler l’url que l’on donne de celle qui fait réellement le boulot.
Cela permettra par exemple de changer de provider OpenID de manière totalement transparente.

Voici les deux lignes à ajouter en header de votre blog par exemple :
<link rel="openid.server" href="http://monblog.tld/openid/" />
<link rel="openid.delegate" href="http://monblog.tld/openid/" />

Voilà, vous pouvez utiliser ‘http://monblog.tld/’ pour vous authentifier sur les sites supportant OpenID.

4. Pour aller plus loin

Nous n’avons fait que survoler les grands principes d’OpenID, je vous invite à consulter le site officiel [en] pour une description détaillée des processus sous-jacents et des possiblités offertes.
Il est par exemple possible de rattacher un profile ou encore un avatar à votre compte.

5. Sources et liens utiles

Premiers pas avec le HTC Dream

Posted on April 6th, 2009 in android, mobile | No Comments »

htc-dreamQue de chemin parcouru depuis l’Android Developer Challenge. Aprés avoir passé tant de temps sur l’émulateur, il est plutôt agréable de voir enfin tourner Android sur un vrai terminal. Ca ne fait que quelques jours que je l’ai entre les mains, et malgrés les quelques défauts (introduits par Orange ?) comme l’apostrophe manquante ou la synchronisation bridée (provisoirement semble t il), j’en suis assez satisfait.

Comme je le disais, j’avais participé au concours Android, mais après la remise de l’application j’avais coupé les ponts. Trop frustrant sans téléphone sous la main :p.

Désormais, plus d’excuses, il est temps de reprendre le développement sur la platform mobile de Google. Téléchargement d’éclipse (la version J2ee pour disposer des composants requis), installation du dernier SDK et c’est parti. Premier changement visible, il y a maintenant un apperçu des layout (gain de temps en perspective :) ). Je laisse la configuration par défaut, crée un premier package.

Petit contre temps, la connection avec le G1 en USB sur ma Fedora ne marche pas. Bon, pas le temps de chercher, je récupère le mime type des .apk, upload de l’application sur le net et 1ère tentative d’installation. Echec :| Damned j’ai oublié de signer l’application. C’est assez simple, en deux lignes de commandes c’est réglé (je n’ai pas encore vu l’intégration dans éclipse). Upload à nouveau, installation réussie ! Et voilà, un beau “hello world” sur mon mobile.

Prochaines étapes, mise à niveau de l’application développée pour l’ADC et création de nouvelles applications.

To be continued…

Hadopi passée comme une lettre à la poste

Posted on April 3rd, 2009 in internet | No Comments »

quadrature_black-out_hadopi_300x250px_fixed Et voilà, c’en est fini de cette mascarade à l’Assemblée Nationale.  J’ai pu assister à quelques séances via les flux vidéos fournis sur le site de l’AN et ce qu’il en ressort n’est pas trés glorieux.

Sur l’attitude du gouvernement et du rapporteur tout d’abord, mensonges éhontés (cf les pays étrangers qui ont soit disant adopté la riposte graduée), affirmations farfelues (cf France championne du monde du piratage, loi soutenue par tout le secteur des Télécom…), refus de répondre aux questions souvent précises et pertinentes. Méconnaissance totale des technologies informatiques (cf la gestion du spam, les pare feu etc). FUD à n’en plus finir sur internet, amalgame entre internautes, “pirates”, pédophiles, terroristes, amalgame entre p2p et pornographie et j’en passe. Politique de l’autruche face aux prises de position répétées de l’Europe. Et de manière générale l’autisme face aux rapports de toutes les autorités, que ce soit la CNIL ou d’autres. Petite note au passage, tous les députés UMP ne sont pas à mettre dans le même lôt.

Pour l’opposition, j’ai été surpris (en bien) par la maitrise de certains députés. Autre fait intérréssant, c’est le dialogue qui s’est instauré entre les internautes et certains députés (entre autres M. Brard pour ne pas le nommer). Ce dernier a lancé quelques appels en direct aux internautes pour les inciter à faire connaitre leur opinion au gouvernement. Il a également enrichi ses arguments à l’aide des correspondances qu’il a reçu ou des articles publiés sur les sites spécialisés. Cet aspect participatif est plutôt interressant à mon avis. Tout n’est pas rose pour autant, j’aurais aimé en voir plus d’une dizaine… D’ailleurs, c’etait bien vide, je ne parle même pas des 16 députés présent pour le vote final. C’est l’occasion de revenir aussi sur la prise de position plutôt flou du PS et leur manque d’engagement.

En parlant de site spécialisé, il n’y a semble t il qu’eux qui aient suivi de prés les débats. D’aprés les échos que j’ai eu les média traditionnels brillaient par leur absence. Parmis les sites qui ont fait un suivi soutenu, j’ai particulièrement utilisé PCInpact et Numerama.

Et maintenant ? Et bien, la loi est votée, il ne reste plus qu’a la passer dans mains de la comission mixte paritaire (totalement vérouillée au passage). Celle ci devrait se faire un plaisir de durcir un peu plus le texte.

On attend donc le Conseil Constitutionel avec anxiété et l’Europe en dernier recours.

En attendant, keep cool and relakks ;)

Hadopi un coup de boost pour les FAI ?

Posted on March 21st, 2009 in internet | No Comments »

webC’est le week end, laissons nous divaguer. Une idée vient de me traverser l’esprit au sujet du projet loi “Création et Internet”. Je ne vais pas insister sur le fait que ce projet de loi est une mauvaise réponse à un faux problème, mais plutôt sur un effet de bord “rigolo”. Elle concerne les distinctions entre titulaire de la ligne, la personne qui la paye et les utilisateurs.

Imaginons que mon IP soit relevée sur un tracker, au hasard sur The pirate bay, je vous rappelle que vous n’avez pas besoin de télécharger pour vous retrouvez dans cette situation. Vous pouvez lire cet article sur Numerama pour plus d’info.

Je disais donc, je suis pris en “flagrant délit”, je suis le titulaire de la ligne, on me coupe donc ma connection pour défaut de sécurisation ! Que faire ? Je me sert d’Internet pour mon job, pour m’informer, pour payer mes impôts (les mêmes qui vont payer Hadopi \o/) etc. L’accés au réseau des réseaux m’est indispensable.

Je formule donc une hypothèse, dans le cas où un changement de titulaire de ligne est possible : la solution sera de prendre un abo au nom de ma grand mère :D en espérant avoir plus de chance la prochaine fois…

Je ne suis pas sur que cela pose problème au FAI. En effet, il est prévu que l’on continue de payer notre abonnement le temps de la suspension, mais allons nous être obliger de garder cette ligne ?  Pour prendre ma situation en exemple, ma période d’engagement est terminée, serais je lié à ce contrat durant toute la durée de la sanction ?

Nous allons peut être avoir bientôt plus d’abonnement que de ligne téléphonique en france.

Trève de plaisanterie, restons mobilisé pour la reprise des “débats” à l’Assemblée Nationale le 31 Mars prochain.

Et pour se tenir au courant, vous pouvez lire le suivi fait par la Quadrature du net, Numerama ou encore PC Impact.

Mon Lenovo SL300

Posted on March 19th, 2009 in hardware | No Comments »

thinkpad-sl300J’ai depuis quelques temps un SL300 sur lequel j’ai installé Fedora 10, exit donc Vista. C’est l’occasion de faire un point plus ou moins régulièrement sur ce qui marche et sur ce qui coince.

Tout d’abord les présentations, c’est un Lenovo / IBM ThinkPad SL300 2738 – T5870 (NS68YFR). Il embarque un Core 2 Duo T5870 2 GHz et 2 Go de ram. L’écran TFT a une diagonale de 13.3″. Le tout pèse 2,2 Kg.

La distribution Linux que je utilise régulièrement, que ce soit au taf ou chez moi est Fedora. C’est donc tout naturellement que j’ai installé la dernière version stable en date, à savoir la 10. Je précise que le sytème est à jour et c’est la version 32bit.

L’affichage

Commençons par l’affichage, aucun problème, la carte graphique est correctement reconnu, l’installation graphique fonctionne bien. Le réglage de la luminosité est opérationnel, le problème d’inversion des touches de contrôle a été fixé par une mise à jour. La gestion la luminosité en cas d’inactivité fonctionne également.

La gestion des effets fonctionne bien aussi (cube + Wobble effect). Tout comme le boot graphique, même si une modification dans grub.conf est nécessaire. Cela résoudra notament l’effet de flash lors du shutdown.

Le clavier

Le clavier, toutes les touches de fonction ne sont pas accéssible, du moins par défaut. La mise en veille et le réglage de luminosité marchent mais la gestion du volume non. Le touchpad est trés lent mais la fonction scrolling est Ok. Pas de problème avec les boutons de “souris”. Le trackpoint marche bien, j’adore :) .

La connectivité

Connectons nous ! En ethernet pas de soucis, il faudra que je test que je suis bien en gigabit. Pour le wifi, l’authentification  en WEP marche bien, en WPA il faut wpa_supplicant. J’ai pas encore eu l’occassion de tester la 3G, ça va se faire trés bientôt.

Le bluetooth, la detection et la négociation a marché avec un N95, je ferai quelques tests avec Wammu ou Gnokii.

Concernant le son, rien à dire, tout est Ok, que ce soit les enceintes ou la prise casque.

Les voyants

Les voyants wifi, bluetooth, batterie etc font bien leur job. En mobilité, la gauge de la batterie et les notifications de l’OS fonctionnent.

A venir

Voilà donc ce qui marche avec un système à jour et sans bidouille. Je completerai au fur à mesure en fonction de mes besoins.

Les points que j’explorerai prochainement :

  • La connexion 3G
  • La communication avec un mobile et le partage de connection
  • Le wifi, qui a dit aircrack ?
  • La webcam, enfin peut être

Pour en savoir plus et lire une revue détaillée des possibilités du SL300 je vous conseille www.netbookcheck.net.