Ce blog — désormais archivé — est en lecture seule. Rendez-vous sur mon nouveau site personnel.

Prendre un Café

L'espace d'expression de Nicolas Perriault

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

Keyword - plugins

Fil des billets

dimanche 8 juin 2008

Un plugin jQuery pour générer des plans automatiquement

Avec un temps pareil, autant coder des plugins jQuery, non ?

Quelques heures de boulot plus tard, jqplanize[1] est né et permet de générer automatiquement une table des matières extraite de la hiérarchie induite de la séquence des titres d’un document HTML[2].

La doc est sur la page d’accueil du projet (hébergée chez Google), ou plus exhaustivement sur cette page dédiée du présent site, avec quelques exemples live.

Le code semble fonctionner sous Firefox 3 RC2 et Safari 3.1, mais ça ne marche curieusement pas sous Opera 9, et j’ai pas testé sous IE donc attendez vous à des updates[3].

Vivement l’été.

Notes

[1] Non mais vous avez déjà vu un nom aussi naze ?

[2] Si tant est que le balisage des titres soit sémantique, hein.

[3] Ou pas, bien entendu.

dimanche 23 mars 2008

Plugin FlickrFeed pour Dotclear2

J’avais envie de mettre quelques photos dans la sidebar de ce blog, donc j’ai créé vite fait un widget pour Dotclear2 que j’ai nommé FlickrFeed.

L’interface d’admin est réduite à sa plus simple expression, comme en atteste la capture d’écran ci-dessous :

Administration du widget FlickrFeed

Le plugin n’est disponible qu’au format ZIP, puisque visiblement c’est l’avenir.

Téléchargement

Edit du 10 avril : Version 1.0.1 : correction mineure sur la validité xhtml (ajout d’un attribut alt sur les balises images.) Merci Chris ;)

Edit du 14 septembre : Version 1.0.2 ajoutant une option permettant de spécifier si le widget n’apparait que sur la homepage (merci giz404)

samedi 29 décembre 2007

Amazon SimpleDB plugin for Symfony

Hey, this is a post written in english. Handle with care ;)

I've just released an alpha version of a new plugin for the Symfony framework to use the brand new Amazon SimpleDB service : sfAmazonSimpleDBPlugin. This plugin is in an alpha state but provide a clean and Symfony-compliant API to handle and query your SimpleDB database, if you have the luck to have an account.

The purpose of SimpleDB is to provide simple and efficient data storage through a webservice. You can find billing policy on their website.

I've mainly used the PHP5 library provided by Amazon (API documentation available), but I thought some operations were a bit complicated.

For example, with the official client, to insert a row in a table you have to do something like this :

 php
<?php
require_once ('Amazon/SimpleDB/Model/ReplaceableAttribute.php');
$domainName = 'MyStore';
$itemName = 'Item_01';
$attribute1 = new Amazon_SimpleDB_Model_ReplaceableAttribute();
$attribute1->withName('Category')->withValue('Clothes');
$attribute2 = new Amazon_SimpleDB_Model_ReplaceableAttribute();
$attribute2->withName('Subcategory')->withValue('Sweater');
$attribute3 = new Amazon_SimpleDB_Model_ReplaceableAttribute();
$attribute3->withName('Name')->withValue('Cathair Sweater');
$attribute4 = new Amazon_SimpleDB_Model_ReplaceableAttribute();
$attribute4->withName('Color')->withValue('Siamese');
$attribute5 = new Amazon_SimpleDB_Model_ReplaceableAttribute();
$attribute5->withName('Size')->withValue('Small');
$attribute6 = new Amazon_SimpleDB_Model_ReplaceableAttribute();
$attribute6->withName('Size')->withValue('Medium');
$attribute7 = new Amazon_SimpleDB_Model_ReplaceableAttribute();
$attribute7->withName('Size')->withValue('Large');
$attributeList = array($attribute1, $attribute2, $attribute3, $attribute4, $attribute5, $attribute6, $attribute7);
$action = new Amazon_SimpleDB_Model_PutAttributes();
$action->withDomainName($domainName)->withItemName($itemName)->setAttribute($attributeList);
invokePutAttributes($service, $action);

With the Symfony plugin, you can do the same with :

 php
<?php
$data = array('Category'    => 'Clothes',
              'Subcategory' => 'Sweater',
              'Name'        => 'Cathair Sweater',
              'Color'       => 'Siamese',
              'Size'        => array('Small', 'Medium', 'Large'));
sfAmazonSimpleDBClient::getInstance()->selectDomain('MyStore')->putAttributes('Item_01', $data);

Personnaly I prefer the shorter syntax but it's mainly matter of taste here. In a future release, I'll try to also provide a backend module to handle the databases.

Last but not least, the plugin API is entirely unit tested. You can find the test suite here.

I hope you'll find this plugin somewhat useful for your Symfony projects :)

Edit : The author of the official Amazon PHP library sent me a mail to clarify a point : there's an alternative syntax available, array based, to put attributes:

 php
$action = array ( "DomainName" =>  $domainName,
            "ItemName" =>    $itemName,
            "Attribute" = >  array(
                        array ("Name" => "Category", "Value" => "Clothes"),
                        array ("Name" => "Subcategory", "Value" => "Sweater"),
                        array ("Name" => "Name", "Value" => "Cathair Sweater"),
                        array ("Name" => "Color", "Value" => "Siamese"),           
                        array ("Name" => "Size", "Value" => "Small"),   
                        array ("Name" => "Size", "Value" => "Medium"),
                        array ("Name" => "Size", "Value" => "Large"))
            );
$service->putAttributes($action);

So next step for me, I'd like to ORMize all this to be able to do some pretty things like:

 php
$product = new Product();
$product->setCategory('Clothes');
$product->setSubcategory('Sweater');
$product->setName('Cathair Sweater');
$product->setColor('Siamese');
$product->setSize(array('Small', 'Medium', 'Large'));
$product->save();

Not very hard to do but I wonder if I will be able to avoid code generation (yurk)...

mercredi 5 septembre 2007

Release Time (part one)

QOTD :

À trop procrastiner, on s'y casse le nez.

Bon, je suis en train de sortir des cartons tout ce que je n'ai pas encore releasé. Voici une première fournée, sous la forme de deux plugins pour le framework Symfony :

Ces plugins sont releasés sous licence MIT. Enjoy.

Bon, c'est pas fini, d'autres choses vont suivre très prochainement.

mardi 22 mai 2007

Tags faciles avec Propel dans Symfony

Mon camarade de Nespresso Xavier Lacot nous gratifie d'un plugin pour Symfony répondant au doux nom de sfPropelActAsTaggableBehaviorPlugin et permettant de taguer n'importe quel objet Propel très facilement, mais aussi de gérer les requêtes multi-tags et la récupération d'objets de types multiples.

Ce plugin sera notamment utilisé dans un projet qui touchera prochainement de très près ce blog, si les conditions normales de températures et de pression le permettent, comme d'hab.

Du très bon boulot, Xavier !

vendredi 23 mars 2007

Intégration de Jamendo dans RhythmBox sous Feisty

[Via Jono Bacon]

Le catalogue intégral Jamendo débarque nativement intégré dans la version de RhythmBox qui équipera Feisty Fawn, la version d'Ubuntu en cours de développement à sortir courant avril.

Jamendo est une plateforme de diffusion et de promotion d'artistes proposant de la musique sous licences Creative Commons : c'est à dire que non seulement le téléchargement y est absolument légal mais qui plus est fortement incité :)

Pour accéder au catalogue Jamendo dans RhythmBox, il suffit d'activer le greffon Jamendo via le menu Edition de RhythmBox. La qualité de restitution des flux est excellente, et des liens contextuels proposent le téléchargement direct des albums dans leur intégralité, pour stockage en local.

RhythmBox et le plugin Jamendo

Le plus marquant reste le texte affiché dans la barre de statut du logiciel une fois la liste intégrale des titres Jamendo disponibles rapatriée :

22972 morceaux, 65 jours, 21 heures et 54 minutes

De quoi voir venir, assurément.

Notez que de la même manière, le catalogue Magnatune, quand à lui payant et par conséquent plus proche de ce que peut être une boutique de musique en ligne, est également disponible via un autre greffon.

iThunes n'a qu'à bien se tenir.

dimanche 4 mars 2007

Rhythmbox tips

(Excusez cette soudaine profusion de billets, je solde)

Je suis fan de Rhythmbox, le gestionnaire de fichiers musicaux fourni avec Gnome dans Ubuntu. C'est simple, ça fonctionne. Voici quelques astuces destinées à une utilisation optimale du programme.

Applet de contrôle dans un tableau de bord Gnome

Music Applet permet de contrôler votre lecteur musical préféré depuis un tableau de bord Gnome :

Music Applet

Pour l'installer :

$ sudo apt-get install rhythmbox-applet

Puis ajouter un nouvel applet au tableau de bord et choisissez Music Applet dans la section Multimedia. Notez qu'il est également capable de piloter Banshee ou Muine.

Notification du titre écouté dans Gajim

Pierpaolo Follia a réalisé un plugin pour Rhythmbox permettant de changer votre message de statut Gajim en fonction du titre que vous écoutez. Pour l'installer, c 'est très simple :

$ mkdir ~/.gnome2/rhythmbox ~/.gnome2/rhythmbox/plugins
$ cd ~/.gnome2/rhythmbox/plugins
$ wget -c http://madchicken.altervista.org/tech/download/gajim-status.tar.gz
$ tar xvzf gajim-status.tar.gz && rm gajim-status.tar.gz

Relancez Rhythmbox, et configurez le plugin via le menu Edition > Greffons > Gajim status changer :

Capture-Gajim_Status_Changer.png

Suggestions Last.fm avec le plugin LastRhythm

Je suis également un très grand fan de last.fm, particulièrement des fonctionnalités de suggestions par similarité artistique. Aussi, quand je suis tombé complètement par hasard sur l'existence d'un plugin LastRhythm pour Rhythmbox, je me suis empressé de l'installer pour le tester.

Verdict, ça marche fort bien (sous Edgy du moins.)

La procédure d'installation est très simple :

$ sudo apt-get install subversion python-elementtree
$ svn co https://svn.usrportage.de/lastrhythm/trunk/ /usr/lib/rhythmbox/plugins/lastrhythm

Redémarrez rhythmbox, activez le plugin greffon et appréciez :)

dimanche 7 janvier 2007

Utiliser Doctrine au lieu de Propel dans Symfony sous Ubuntu

Doctrine est une couche ORM rapide et performante, basée sur le pattern ActiveRecord bien connu des adeptes de Ruby on Rails, pouvant être utilisée en lieu et place de Propel, l'ORM natif embarqué avec Symfony par défaut.

Installation

La mise en place de Doctrine se présente sous la forme d'un plugin, sfDoctrine, qui s'installe via un checkout Subversion dans le répertoire plugins de votre projet Symfony, comme suit :

$ cd /path/to/project/plugins
$ sudo apt-get install subversion
$ svn co http://svn.symfony-project.com/plugins/sfDoctrinePlugin sfDoctrinePlugin

Note: Si votre projet est déjà versionné dans un dépôt Subversion, vous pouvez faire un svn:externals vers le plugin :

$ propset svn:externals "symfony http://svn.symfony-project.com/plugins/sfDoctrinePlugin" /path/to/project/plugins

L'avantage est que desormais vos svn up mettront à jour les fichiers du plugin d'un même coup.

Ceci fait, il faut installer PDO et son driver MySQL via PECL sur votre système si ce n'est pas déjà le cas :

$ sudo apt-get install build-essential php5-dev php-pear libmysqlclient12-dev
$ sudo pecl install PDO PDO_MySQL

C'est un peu long, puisque compilé à la volée. Il ne faut pas oublier d'activer notre nouvelle extension et son driver dans nos fichiers différents php.ini :

$ sudo vi /etc/php5/apache2/php.ini /etc/php5/cli/php.ini

Et ajoutez en toute fin de fichiers les deux lignes suivantes :

extension=pdo.so
extension=pdo_mysql.so

Configuration

Maintenant, définissons nos paramètres de connexion pour le projet monprojet dans le fichier ./config/databases.yml du projet :

all:
  monprojet:
    class: sfDoctrineDatabase
    param:
      dsn: mysql://user:pass@localhost/mydb

Ensuite, on va tester une structure de données assez simpliste (au pif et pour faire original, un blog), pour vérifier que ça marche. On édite le fichier ./config/doctrine/monprojet.yml :

User:
  tableName:     users
  columns:
    name:        string(20)
    created_at:  timestamp
Article:
  tableName:     articles
  columns:
    title:       string(255)
    exerpt:      text
    description: text
    created_at:  timestamp
    user_id:
      foreignClass: User
      foreignName:  author
      localName:    article_author
      onDelete:     cascade
Comment:
  tableName:     comments
  columns:
    content:     text
    created_at:  timestamp
    user_id:
      foreignClass: User
      foreignName:  commenter
      localName:    comment_user
      onDelete:     cascade
    article_id :
      foreignClass: Article
      localName:    comment_article
      onDelete:     cascade

On peut maintenant générer les classes du modèle objet précedemment défini :

$ symfony doctrine-build-model

Ce qui nous donne :

>> loading   Class descriptions from "/home/...m/config/doctrine/monprojet.yml"
>> writing   BaseUser.class.php
>> writing   BaseArticle.class.php
>> writing   BaseComment.class.php

Ces fichiers ont été créés sous ./lib/model/doctrine automatiquement. Vous pourrez modifier les classes objets pour les adapter à vos besoin, mais attention, les classes de base situées dans le sous-répertoire generated seront systématiquement écrasées à chaque regénération.

Utilisation

Les commandes de scaffolding propres à Symfony et Propel ont été adaptées partiellement à Doctrine ; vous trouverez ainsi quelques tâches utiles :

doctrine-export            > exports doctrine schemas to propel schema.xml
doctrine-generate-crud     > Creates Doctrine CRUD Module
doctrine-import            > converts propel schema.*ml into doctrine schema
doctrine-init-admin        > initialize a new doctrine admin module

Pour aller plus loin

La syntaxe de requêtage et les autres aspects de Doctrine sont détaillés dans les ressources suivantes :

- page 1 de 3