Soumettez votre blog sur French 2.0

Aujourd’hui, 2ème appel pour rejoindre la communauté French 2.0, qui rassemble les blogs francophones de qualité.
Vous avez jusque 23h59 pour remplir ce formulaire d’inscription.

Les critères pour être sélectionné :

* Avoir du contenu en français (amis canadiens, suisses, belges, vous êtes donc les bienvenus)
* Etre original dans l’édition de son blog
* Avoir un minimum de rédactionnel et une fréquence d’édition “correcte”
* Votre blog doit être participatif
* Avoir écrit son premier article il y a plus de 6 mois

Good luck !

Comment créer un nuage de tags en PHP/MySQL ?

Les tags sont devenus un élément incontournable pour toute application Web 2.0 qui se respecte. Ils permettent une organisation qui va plus loin que la catégorisation classique (catégorie > sous-catégorie > etc.). Cette classification est appelée Folksonomie.

Un nuage de tags, quant à lui, est une façon de représenter un groupe de tags, en jouant visuellement sur la taille et la couleur de la police. Les exemples les plus marquants de nuages de tags sont ceux de Flickr, de Technorati ou encore de del.icio.us.

Dans ce billet, je vais tenter de vous montrer comment on peut réaliser son propre nuage de tags en PHP/MySQL.

Tout d’abord, vous avez besoin d’une table dans votre base de données, qui se présente à peu près de cette façon :

+---------+
| tags    |
+---------+
| id      |
| tag     |
| item_id |
+---------+

* id est l’identifiant unique du tag
* tag est le tag à proprement parler
* item_id est l’élément auquel vous attachez le tag, par exemple un billet de votre blog, un lien, une vidéo, etc. Il s’agit d’une clé étrangère vers l’identifiant unique de la table concernée.

Une fois remplie, votre table doit ressembler à quelque chose de ce genre :

+-----+------+---------+
| id  | tag  | item_id |
+-----+------+---------+
| 1   | fun  | 1       |
| 2   | html | 1       |
| 3   | css  | 1       |
| 4   | html | 2       |
| 5   | php  | 2       |
| 6   | css  | 3       |
| 7   | php  | 3       |
| 8   | php  | 4       |
+-----+------+---------+

Voyons maintenant le code PHP qui va nous permettre de recolter les données utiles à la création de notre nuage. Je vous épargne les lignes concernant la connexion à la base de données.

<?php

define("MIN_SIZE", 9);
define("MAX_SIZE", 36);

$result = mysql_query("SELECT tag, count(*) as number FROM tags GROUP BY tag ORDER BY tag") or die(mysql_error());

$min = MAX_INT;
$max = -MAX_INT;

while ($tag = mysql_fetch_assoc($result)) {
	if ($tag['number'] < $min) $min = $tag['number'];
	if ($tag['number'] > $max) $max = $tag['number'];
	$tags[] = $tag;
}

$min_size = MIN_SIZE;
$max_size = MAX_SIZE;

foreach ($tags as $tag) {
	$tag['size'] = intval($min_size + (($tag['number'] - $min) * (($max_size - $min_size) / ($max - $min))));
	$tags_extended[] = $tag;
}

?>

Les deux premières lignes servent à définir les tailles minimum et maximum. La taille minimum sera assignée aux élements ayant la plus petite fréquence (ici fun avec une fréquence 1) et la taille maximum aux éléments ayant la plus grande fréquence (ici php avec une fréquence 3). Ce sont des tailles en pixels, vous pouvez bien sûr changer ces valeurs ou adapter l’algorithme pour travailler en pourcentages.

Ensuite, on réalise une requête SQL qui extrait chaque tag distinct accompagné de sa fréquence.

La boucle while sert à récupérer la fréquence minimum et la fréquence maximum (dans notre exemple, respectivement 1 et 3). Avant la boucle, on associe à $min et $max des valeurs de départ (très grande pour le minimum et inversément) qui seront remplacées dès le premier passage dans la boucle.

Dans le foreach, on calcule la taille qui sera associée à chaque tag grâce à une formule magique. Cette formule ajoute à la taille minimum la fréquence moins la fréquence minimum fois un certain ratio. Ce ratio correspond à l’écart de tailles entre deux fréquences voisines. Dans notre exemple, la différence de taille entre deux fréquences voisines est de 12,5 (36-9/3-1).

Cela donne donc le résultat suivant : la taille des éléments de fréquence 1 est 9, la taille des éléments de fréquence 2 est 21 (9+12,5 arrondi à l’unité inférieure via intval), la taille des éléments de fréquence 3 est 36 (9+(2*12,5)). On est parfaitement retombé sur nos pattes.

Au niveau de l’affichage, il vous suffit de passer le tableau $tags_extended à votre vue et de boucler dessus pour afficher les tags, en utilisant un style en ligne pour les tailles :

<?php foreach ($tags_extended as $tag) : ?>
<a href="/tags/<?php echo $tag['tag']; ?>" style="font-size:<?php echo $tag['size']; ?>px" title="<?php echo $tag['tag']; ?>"><?php echo $tag['tag']; ?></a>
<?php endforeach; ?>

Si vous utilisez le moteur de templates Smarty (ce que je vous conseille), cela donne :

{foreach from=$tags_extended item=tag}
<a href="/tags/{$tag.tag}" style="font-size:{$tag.size}px" title="{$tag.tag}">{$tag.tag}</a>
{/foreach}

Voici le résultat auquel on arrive. Vous pouvez également voir le contenu des tableaux $tags et $tags_extended sur cette page.

Pour les techniciens, sachez que la complexité de cet algorithme est en O(2*n)n est le nombre de tags distincts dans la base de données.

Dans un prochain billet, j’essaierai de rendre ce nuage de tags accessible ! (je n’ai pas encore de solutions miracles mais j’y travaille)

Mes extensions Firefox

Je ne suis pas un gros consommateur d’extensions Firefox (pas comme ce gars là). Je n’ai actuellement que 6 extensions installées sur mon navigateur Firefox, mais elle couvrent entièrement mes besoins de surfeur et de développeur Web :

* del.icio.us : Cette extension me permet de bookmarker la page courante en lui ajoutant des tags et une description. Remplace avantageusement le système de bookmarking classique de Firefox car mes bookmarks sont enregistrés en ligne et ne sont donc pas perdus en cas de crash/plantage/reformatage.
* Firebug : Découverte récemment (via le bouquin “Bien développer pour le Web 2.0“), cette extension permet de débugger très facilement le DOM/JavaScript (entre autres).
* Google Toolbar : Je m’en sers pour avoir un lien direct vers Google.be, pour voir le PageRank de la page courante, pour vérifier l’orthographe (même si Firefox 2 le permet par défaut) et pour faire mes recherches (j’utilise très peu, pour ne pas dire jamais, le mécanisme de recherche par défaut de Firefox).
* Greasemonkey : Découverte récemment aussi, cette extension est très utile pour palier les manquements de sites que je visite souvent.
* IE Tab : Cette extension me permet d’avoir un aperçu de la page courante dans le navigateur de Microsoft. C’est surtout utile en développement mais également pour certaines pages qui sont “optimisées” pour Internet Explorer (et malheureusement, il y en a encore beaucoup).
* Web Developer Toolbar : On ne présente plus ce don du ciel pour les développeurs Web.

Si vous voulez essayer toutes les extensions Firefox, Geckozone en propose une liste assez exhaustive.

A noter que j’utilise la page d’accueil Google (au lieu d’extensions) pour d’autres besoins : Gmail, Google Reader, Google Calendar et Flickr.

Et vous, c’est quoi vos extensions ?

Corriger le code généré par YouTube et Dailymotion grâce à Greasemonkey !

Il y a peu, je me plaignais du code source pourri à insérer sur votre blog/site que proposent les services de vidéo en ligne.

Entretemps, j’ai découvert Greasemonkey grâce à ce billet sur le blog de Mich (j’en avais déjà entendu parler mais j’ignorais de quoi il s’agissait).

Greasemonkey est une extension pour le navigateur Web Mozilla Firefox qui permet à l’internaute de modifier les pages Web visitées. Il permet de modifier l’apparence des pages et d’y ajouter des fonctionnalités (ajout de boutons, suppression de publicités, etc.). L’utilisateur peut écrire ces scripts lui-même ou télécharger des scripts mis à la disposition de tous. Cette extension annonce peut-être de grands changements dans la manière d’aborder le web, puisque l’internaute peut agir sur le contenu des pages webs.

(Source : Wikipédia)

Pour tester cette extension, j’ai créé deux scripts qui permettent de remplacer le code pourri de YouTube et Dailymotion par quelque chose de propre et standard.

* dailymotion.user.js
* youtube.user.js

Bon amusement !

Le come-back de Rage Against The Machine !

C’est officiel, le groupe de rock Rage Against The Machine se reformera pour le festival de Coachello (Indio – Californie) qui a lieu à la fin du mois d’avril. C’est annoncé par le Los Angeles Times et le site officiel du groupe (à noter que la dernière news sur celui-ci datait du 8 janvier 2002).

Pour rappel, le groupe s’était séparé en 2000 à cause de banales histoires d’ego. De cette séparation est né Audioslave, qui se compose des même musiciens que RATM mais avec Chris Cornell (Soundgarden) au chant.

On ne peut qu’espérer qu’ils passent par l’Europe cet été (au Rock am Ring, par exemple ?)

En cadeau, voici le clip de “Sleep Now In The Fire” qui a été tourné par Michael Moore et dont le tournage a la particularité d’avoir interrompu une séance de la bourse de New York !

En savoir plus…

Premier nom sur l’affiche du Rock am Ring 2007

Le Rock am Ring est un festival auquel j’ai assisté pour la première fois l’an dernier et qui m’a énormément plu. Il a lieu en Allemagne, sur le mythique circuit du Nürburgring, au début du mois de juin. Il s’agit d’un des plus grands festivals d’Europe avec le festival de Benicassim (Espagne) et le Sziget (Hongrie). En 2006, j’ai pu y voir les concerts de nombreux grands groupes, notamment Metallica (lire mon bref compte rendu).

Tout ça pour dire que la machine est désormais en marche pour 2007, le premier nom a été annoncé et il s’agit du groupe anglais Arctic Monkeys. L’information ne se trouve pas encore sur le site officiel du festival mais bien sur le site officiel du groupe. C’est un bon début mais je demande à voir le reste…

Et pour écouter un morceau d’Arctic Monkeys, rendez-vous sur Flying To The Moon


EDIT (26/01/07 16:49) : Entretemps, d’autres noms sont venus s’ajouter :

Linkin Park, Smashing Pumpkins, Muse, Korn, Evanescence, Arctic Monkeys, Kaiser Chiefs, The Kooks, Slayer, Stone Sour, Billy Talent, Mando Diao, The Hives, Beatsteaks, Wir Sind Helden, Dave Matthews Band, My Chemical Romance, Jan Delay & Disko No. 1, Mia. & Wolfmother.

Source : rockamring.net (site non officiel)

En vrak – 7

Encore du vrac, en attendant des billets plus intéressants qui devraient arriver dans les prochains jours…

En vrak – 6

Prison Break et Saint-Vincent

Aujourd’hui, c’est ma fête mais l’événement important de la journée reste le retour de Prison Break après une pause de quelques mois :

Attention ! Ne regardez pas cette vidéo si vous n’êtes pas à jour dans la série !