Prendre un Café

L'espace d'expression de Nicolas Perriault

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

mercredi 5 mai 2010

Juste pour rappel

Ahem, pour ceux qui ne l’auraient pas compris, les billets techniques seront désormais publiés sur le blog de ma société, Akei.

Tenez c’est drôle, je viens justement d’en publier un sur l’installation de Django dans un environnement virtuel Python avec pip, virtualenv et virtualenvwrapper, c’est fou ça.

Pour faire valoir ce que de droit, veuillez madame, monsieur…

mardi 20 avril 2010

Faire part de naissance

Ceux qui me suivent sur twitter en ont eu la primeur, mais j’officialise sur ce blog : Akei, ma société, est née.

Akei

Akei met en avant une offre de services axée sur le conseil, la formation et le développement Web, autour de technologies variées comme PHP, Symfony, Python, Django ; mais plus que tout sur la qualité.

Je ne m’étalerai pas sur les longueurs et turpitudes administratives proprement kafkaïennes qu’il m’a fallu affronter pour accoucher du bébé (et qui durent encore, soit dit en passant), mais je veux juste profiter de l’instant pour vous inciter à regarder ce site, à en lire les contenus, et à prendre contact si vous vous reconnaissez dans la vision présentée, pour éventuellement - pourquoi pas ? - travailler ensemble sur vos projets Web.

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?

- page 1 de 5