Prendre un Café

L'espace d'expression de Nicolas Perriault

Aller au contenu | Aller au menu | Aller à la recherche

samedi 28 octobre 2006

Yahoo! Bookmarks, propulsé par Symfony

Certains restaient dubitatifs quant à la capacité de montée en très forte charge du framework Symfony, l'un des tous meilleurs existants en PHP [1].

Qu'on se rassure, si Yahoo! a décidé d'utiliser Symfony pour propulser son récent et moderne Yahoo! Bookmarks (20 millions d'utilisateurs en 12 langues), ce n'est certainement pas sans raisons.

Félicitations aux équipes Symfony qui sont en train de faire de ce framework la référence du monde PHP - voire peut-être au-delà.

Edit : N'hésitez pas à aider à propager la bonne nouvelle sur Digg, Reddit ou Scoopeo :-)

Notes

[1] Je dois bien admettre que même si j'utilise au quotidien Syfony, je me posais cette question...

lundi 9 octobre 2006

Un dépôt de code partagé avec Snipeet et Symfony

Vous cherchez un moyen simple et participatif de partager des fragments ou exemples de code (en anglais, des snippets) ? Rien de plus simple avec Snipeet, un outil dédié basé sur le framework Symfony dont l'installation a déjà été décrite sur le présent blog.

Pour installer Snipeet sur une machine propulsée par - au hasard total - Ubuntu LTS, rien de plus simple :

$ sudo -s 
# cd /var/www
# mkdir snipeet && cd snipeet
# svn co http://svn.snippet.symfony-project.com/trunk/ .
# chown -R www-data cache log

On crée une base et un utilisateur MySQL dédié à l'application :

$ mysql -uroot -p
mysql> CREATE DATABASE snipeet;
mysql> GRANT ALL ON snipeet.* TO snipeet@localhost IDENTIFIED BY 'votre_mot_de_passe';
mysql> FLUSH PRIVILEGES;
mysql> \q

On défini les paramètres d'accès SQL dans les fichiers ./config/propel.ini et ./config/database.yml en définissant le DSN ad-hoc, par exemple mysql://snipeet:votre_mot_de_passe@localhost/snipeet.

On lance les commandes de création et d'insertion SQL :

# symfony propel-build-sql
# symfony propel-insert-sql

Enfin, on crée un vhost apache dédié, sur un sous-domaine snipeet.domaine.tld par exemple dans un fichier /etc/apache2/sites-available/snipeet.domaine.tld :

<Directory "/usr/share/php/data/symfony/web/sf">
  AllowOverride All
  Allow from All 
</Directory>

<VirtualHost *>
    ServerName snipeet.domaine.tld
    DocumentRoot "/var/www/snipeet/web"
    DirectoryIndex index.php
    Alias /sf /usr/share/php/data/symfony/web/sf

    <Directory "/var/www/snipeet/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

Sans oublier de l'activer :

# a2ensite snipeet.domaine.tld

Puis de relancer proprement apache2 :

# apache2ctl graceful

Et on fait pointer son navigateur à l'adresse paramétrée précedemment tout en savourant le résultat et surtout le fait qu'il nous a fallu moins de 5 minutes montre en main pour en arriver là :)

Edit: Tellement content que j'en oublie l'adresse de la démo : snippets.prendreuncafe.com :)

jeudi 21 septembre 2006

Dotclear2 et les gravatars

Voici une astuce pour gérer les gravatars dans les commentaires de votre blog Dotclear2. Dans le répertoire de votre thème courant, créez un fichier _public.php et ajoutez-y ces quelques lignes de code [1] :

<?php
$core->tpl->addValue('gravatar', array('gravatar', 'tplGravatar'));
class gravatar {
  public static function tplGravatar($attr)
  {
    return '<?php echo md5(strtolower($_ctx->comments->getEmail(false))); ?>';
  }
}
?>

Maintenant, dans votre fichier de template pour les billets (généralement, il s'agit de post.html), vous pouvez appeller votre image de gravatar de cette façon entre les balises <tpl:Comments> et </tpl:Comments> :

<img src="http://www.gravatar.com/avatar.php?gravatar_id={{tpl:gravatar}}"
     class="gravatar_img" alt="Gravatar Image" />

Voila, c'est codé en 5 minutes et vous aurez constaté que je ne génère pas directement l'url complète du gravatar et encore moins la syntaxe HTML de la balise image depuis la classe PHP, c'est tout simplement car :

  1. J'en ai la flemme,
  2. Je préfère gérer ça dans le template.

Hope it helps anyway :)

Edit du 22 septembre 2006

Bon, voila finalement une version un poil plus customizable. Le code qui suit annule et remplace le précedent dans votre fichier _public.php :

<?php
$core->tpl->addValue('gravatar', array('gravatar', 'tplGravatar'));

class gravatar {

  const
    URLBASE = 'http://www.gravatar.com/avatar.php?gravatar_id=%s&amp;default=%s&amp;size=%d',
    HTMLTAG = '<img src="%s" class="%s" alt="%s" />',
    DEFAULT_SIZE = '40',
    DEFAULT_CLASS = 'gravatar_img',
    DEFAULT_ALT = 'Gravatar de %s';

  public static function tplGravatar($attr)
  {
    $md5mail = '\'.md5(strtolower($_ctx->comments->getEmail(false))).\'';
    $size    = array_key_exists('size',   $attr) ? $attr['size']   : self::DEFAULT_SIZE;
    $class   = array_key_exists('class',  $attr) ? $attr['class']  : self::DEFAULT_CLASS;
    $alttxt  = array_key_exists('alt',    $attr) ? $attr['alt']    : self::DEFAULT_ALT;
    $altimg  = array_key_exists('altimg', $attr) ? $attr['altimg'] : '';
    $gurl    = sprintf(self::URLBASE,
                       $md5mail, urlencode($altimg), $size);
    $gtag    = sprintf(self::HTMLTAG,
                       $gurl, $class, eregi("%s", $alttxt) ?
                                      sprintf($alttxt, '\'.$_ctx->comments->comment_author.\'') : $alttxt);
    return '<?php echo \'' . $gtag . '\'; ?>';
  }

}
?>

Du côté de votre template post.html et toujours entre vos deux balises <tpl:Comments> et </tpl:Comments>, voila comment ça se passe :

{{tpl:gravatar class="gravatar_img" size="80" altimg="http://www.example.host/default_gravatar.png" alt="Gravatar de %s"}}

Je crois que les attributs sont assez parlants, mais en voici le détail au cas où :

  • class : le nom de la classe CSS à appliquer à l'image
  • size : la taille en pixels
  • alt : Le contenu du texte alternatif à l'image (acepte la syntaxe de sprintf)
  • altimg : L'url de l'image par defaut en l'absence de gravatar (sera url encodée automatiquement)

Enjoy.

Finalement, voila le plugin :-)

Bon, je suis incorrigible mais l'occasion était trop belle pour commencer à mettre le nez dans le nouveau système de plugins de Dotclear2 ; voici donc le plugin Gravatars [2] :

Bien évidemment, pour une toute première version, il doit exister quelques bugs et limitations :

  • Pas de traduction française
  • Pas d'aide contextuelle
  • Pas de configuration par blog (à venir)
  • Utilisation d'un archaïque fichier INI (pas compris comment mettre les settings en base)

Au chapitre des fonctionnalités :

  • Possibilité de définir les paramètres des gravatars de façon globale...
  • ou individuellement au niveau du template d'appel (voir plus haut)

Edit du 25 août 2007 : Grâce à Goulven, vous avez droit à la version patchée compatible Dotclear2b7 du plugin :

Notes

[1] Prochaine étape : gérer la coloration syntaxique du code dans Dotclear2.

[2] Packagé grâce au plugin Pack it! d'Elaboration.be

vendredi 25 août 2006

Symfony en route vers la version 1.0

Les développeurs et contributeurs du framework Symfony n'ont pas pris beaucoup de vacances cet été, et ça se voit !

Les avancées sont remarquables et le framework tend de plus en plus vers le pendant PHP de Ruby on Rails - à l'image de ce que fait CakePHP de son côté, tant dans la puissance, que la simplicité d'utilisation ou de la richesse fonctionnelle.

Un petit effort reste cependant à fournir sur l'optimisation des performances côté modèle mais la faute semble incomber à Propel, la partie ORM tierce du projet et n'est donc pas le fait de l'équipe Symfony. À noter cependant, la possibilité de remplacer Propel par Doctrine - une couche d'abstraction/persistance basée sur PDO donc théoriquement beaucoup plus rapide - semble facilitée dans la dernière version du trunk. Voila qui semble prometteur... Je vous tiens au courant si la vie m'en laisse le temps !

Dans tous les cas ce framework est une belle réussite et vous devriez avoir de ses nouvelles assez rapidement et concrètement sur ce blog même. Let's keep in touch !

Edit : How to use PHP Doctrine with Symfony :)

vendredi 23 juin 2006

Note perso #1

Nommer une table MySQL user, c'est mal; et ça peut faire perdre une après midi :(

mardi 20 juin 2006

Installer le framework PHP Symfony sur Ubuntu Dapper Drake

A l'instar de RoR, Symfony est basé sur le motif de conception MVC et utilise une couche d'abstraction d'accès aux données et d'implémentation AJAX. Il est développé en PHP5 par une équipe française, cocorico !

Voyons ensemble comment installer la bête sur une Ubuntu Dapper Drake toute fraîche.

Installation de Symfony

Le meilleur moyen d'installer Symfony mais surtout de le maintenir à jour est d'utiliser le canal PEAR [1] propre au projet. Mais avant tout, vérifions que nous disposons d'un environnement de développement ad-hoc :

$ sudo apt-get install php5 php5-cli php5-mysql php-pear

Le gestionnaire de paquets apt se chargera d'installer les dépendances nécessaires, notamment apache2.

L'installation du canal Symfony nécessite que nous octroyions 16Mo de mémoire vive à PHP. On édite donc le fichier /etc/php5/cli/php.ini et on affecte la nouvelle valeur :

memory_limit = 16M

Bien. Maintenant, installons Symfony et Phing [2] via PEAR :

$ sudo pear upgrade PEAR && sudo pear channel-discover pear.symfony-project.com
$ sudo pear install symfony/symfony
$ sudo pear install --alldeps http://phing.info/pear/phing-current.tgz

OK, ceci fait, on crée un nouveau projet Symfony, que nous baptiserons sobrement monprojet, disposant d'une application monapplication et que nous stockerons sous le docroot /var/www/monprojet :

$ sudo -s
# mkdir /var/www/monprojet
# cd /var/www/monprojet
# symfony init-project monprojet
# symfony init-app monapplication

Voila, notre arborescence Symfony vient d'être créée, on peut commencer à développer ! Non ? Mince, on a oublié de configurer Apache2 ;)

Configuration d'Apache 2

Tout d'abord, activez mod_rewrite :

$ sudo a2enmod rewrite

Ensuite, nous allons créer rapidement un vhost apache, qui pointera benoitement vers dev.monprojet.com (redirigé vers notre hôte local.) Pour cela, éditez votre fichier /etc/hosts et sur la ligne comprenant l'adresse IP 127.0.0.1, ajoutez dev.monprojet.com :

127.0.0.1    localhost localhost.localdomain mamachine dev.monprojet.com

On crée maintenant l'hôte virtuel Apache /etc/apache2/sites-available/dev.monprojet.com dont voici le contenu :

<Directory "/usr/share/php/data/symfony/web/sf">
    AllowOverride All
    Allow from All
</Directory>

<VirtualHost *>
    ServerName dev.monprojet.com
    DocumentRoot "/var/www/monprojet/web"
    DirectoryIndex index.php
    Alias /sf /usr/share/php/data/symfony/web/sf
    
    <Directory "/var/www/monprojet/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

On active l'hôte virtuel nouvellement créé :

$ sudo a2ensite dev.monprojet.com

... et on relance apache :

$ sudo apache2ctl restart

Une dernière petite chose, il faut desactiver les magic_quotes de PHP, dans le fichier /etc/php5/apache2/php.ini :

magic_quotes_gpc = Off

Lancez votre navigateur sur http://dev.monprojet.com, vous devriez obtenir un message du genre :

If you see this page, it means that the creation of your symfony project on this system was successful.

Plus d'informations

Edit du 25 juin 06: Nouvelle version 0.6.3

La version 0.6.3 est sortie. Pour mettre à jour :

$ sudo pear upgrade symfony/symfony

Edit du 26 juin 06 :

Mon camarade de jeu Xavier Lacot vient de publier sur son blog un excellent tutorial dédié à Symfony.

Notes

[1] PEAR propose un système de distribution d'application tierce très pratique, les canaux. Symfony dispose de son propre canal PEAR, mais n'utilise aucune librairie PEAR. Vous avez le droit d'être embrouillés.

[2] Phing est une dépendance de Symfony, qu'il faut installer indépendamment. Haha, elle est bonne, hein?

lundi 5 juin 2006

Développement PHP4 et PHP5 sur Ubuntu avec XAMPP

Pour ceux qui comme moi passent constamment de projets PHP4 à PHP5, la gestion des environnements de développement par paquets n'est pas toujours aisée - même si cela reste possible aux prix de manipulations récurrentes et parfois compliquées.

XAMPP est un système LAMPP autonome - donc indépendant du système de gestion de paquets - contenant tout ce qu'il faut pour travailler directement dans un environnement de développement comprenant entre autres Apache 2.2.2, MySQL 5.0.21, PHP 5.1.4 & 4.4.2 & PEAR + SQLite 2.8.17/3.2.8, Perl 5.8.7, ProFTPD 1.3.0, phpMyAdmin 2.8.1 et beaucoup d'autres choses encore. Quelques captures d'écran vous convaincront peut-être plus efficacement...

Ainsi vous pouvez disposer d'un environnement de développement isolé, dédié à un projet particulier ou switcher de version PHP très facilement au moyen d'une simple ligne de commande :

$ sudo lampp php4

Ou bien :

$ sudo lampp php5

Pour installer la version 1.5.3 de XAMPP sur votre Ubuntu, voici la démarche à suivre :

$ sudo-s
# cd /opt
# wget http://puzzle.dl.sourceforge.net/sourceforge/xampp/xampp-linux-1.5.3a.tar.gz
# tar xvzf xampp-linux-1.5.3a.tar.gz && rm xampp-linux-1.5.3a.tar.gz
# ln -s lampp/lampp /usr/bin/lampp

Il est sage de configurer MySQL proprement et de façon sûre, après s'être assuré que le service natif ne fonctionne pas [1] :

# /etc/init.d/mysql stop
# /opt/lampp/bin/mysql_secure_installation

Si vous travaillez aussi avec les versions officiellement distribuées par Ubuntu d'apache et de mysql, il peut être utile de disposer de raccourcis permettant de passer de XAMPP aux versions natives et inversement ; personnellement, cela tient dans ces quelques alias bash :

alias startubuntuwebserver='sudo lampp stop && sudo apache2ctl start && /etc/init.d/mysql start'
alias stopubuntuwebserver='sudo apache2ctl stop && /etc/init.d/mysql stop'
alias startxampp4='stopwebserver && sudo lampp php4'
alias startxampp5='stopwebserver && sudo lampp php5'

Ainsi pour lancer XAMPP, par exemple en PHP5 :

$ startxampp5

Et pour relancer les services originaux :

$ startubuntuwebserver

Notez enfin qu'il existe également des commandes avancées pour le démarrage et l'arrêt des services XAMPP.

Notes

[1] Si ce dernier est installé, bien entendu.

jeudi 25 mai 2006

Plugin Last Blogmarks pour Dotclear v 0.3.7

Depuis la sortie de la v2 de Blogmarks.net, mon plugin pour Dotclear en version 0.3.6 ne fonctionnait plus convenablement. C'est desormais chose réparée, j'ai mis à jour les urls de l'API de blogmarks qui avaient changé.

J'en ai profité pour ajouter quelques fonctionnalités supplémentaires :

  • Ajout d'un lien vers le topic officiel sur le forum de Doclear
  • Ajout d'une page permettant de consulter en ligne le changelog
  • Ajout d'une interface de prévisualisation de la liste de marks

Les liens de téléchargement ont été mis à jour sur la page officielle du plugin.

- page 1 de 5