willoblog

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

jeudi 6 août 2009

Ma discothèque

Le résumé

http://musique.cyril-ravat.fr

La préhistoire

Depuis plus d'un an cela me trottait dans la tête. Alors je me suis pris par la main, j'ai un peu réfléchi, et je l'ai fait. C'est pas encore tout à fait comme je l'imagine au final, mais on s'en approche.

Depuis plus de 13 ans maintenant, depuis le printemps ou l'été 1996, j'achète de albums en cd. Avant, j'avais quelques cassette audio, mais rien de bien important, un pirate de Smash d'Offspring, premier album que j'ai pu écouter en entier, des enregistrements de Skyrock qui ne passait pas la même chose que désormais, des broutilles. Depuis ces temps reculés donc, des albums, beaucoup, maintenant près de 240. Presque tous choisis volontairement.

Depuis 13 ans donc, je note. Enfin au début pas tout à fait, mais en 1998 j'ai commencé à noter avec davantage d'assiduité dans mon agenda titres, artistes, dates d'achat, lieux d'achat et prix. Et je n'ai plus jamais arrêté, à de rares exceptions près. Et maintenant, avec mes capacités à organiser une base de données de façon pérenne, je me disais qu'il fallait vraiment que je stocke ça quelque part, dans des endroits plus sûrs qu'un simple carnet vieilli.

Depuis 3 semaines environ, je m'y suis mis. Entre 8 et 10 heures de code par jour, souvent la nuit, parce que malgré moi c'est comme cela que je préfère bosser. Mais j'ai procédé d'une façon complètement différente à d'habitude. Contrairement à d'habitude, j'ai l'impression de ne pas avoir perdu trop mon temps en pinaillages et fioritures.

L'histoire

Contrairement à d'habitude, j'ai commencé par fabriquer une interface d'administration solide et pratique, à base de contrôles en JavaScript et en Ajax, de validation à la volée, de pseudo-web2.0, de messages d'alertes ou de confirmation qui s'affichent sans recharger la page, dont je suis assez content. Plus je code en utilisant la formidable bibliothèque JQuery, plus je trouve qu'elle est géniale et facilite énormément les chose. Quand je pense que j'avais implémenté dans la GaleriePhotos, en octobre 2006, une connexion de type Ajax (en fait, une simple utilisation de la vieille fonction XMLHttpRequest)... C'est quand même autrement plus élégant de coder cela maintenant en trois ligne parce qu'une API complète se charge de tout.

Et puis, contrairement à d'habitude, j'ai entré quelques albums fictifs en bidouillant partout pour être sûr que la machinerie était robuste. Pas mal de bugs sont apparus, et rapidement, à peu près une semaine après avoir démarré, j'ai commencé à entrer mes albums. Contrairement à d'habitude, je n'ai pas attendu d'avoir tout entré pour avancer, et arrivé à un tiers environ, j'ai codé l'interface publique. Rapidement. J'ai ensuite repris la saisie des données, laborieuse et ennuyeuse. Avec en parallèle quelques moments de réflexions pour implémenter telle ou telle fonction pour l'affichage.

L'épilogue

De fil en aiguille, tout est maintenant enfin prêt. Depuis 2 jours, le site hébergeant la liste de mes albums acquis au fil des ans, de tout mon univers musical, existe. Depuis 4 jours en fait mais les deux derniers jours ont permis d'ajouter des fonctions de recherche et de classement que j'apprécie pas mal, surtout pour les techniques que j'ai employées (ce n'est rien d'autre que du narcissisme, rassurez-vous).

Le site en question, histoire de faire simple, s'appelle

http://musique.cyril-ravat.fr

Je vous invite à y venir faire un tour.

J'allais oublier de parler de ce qu'il manque. Le site contient des données, mais pas encore assez. J'ai prévu d'ajouter :

  • les pistes des albums, éventuellement, si je trouve un moyen simple et pratique de le faire. J'avoue ne pas avoir encore beaucoup cherché.
  • des liens entre artistes et entre albums, du genre « si vous aimez cela, alors vous aimerez... ». C'est assez complexe, en particulier en terme d'interface d'administration. J'ai déjà quelque chose de fonctionnel mais très lent à l'affichage, et mal pratique au final. Il faudrait surement effectuer une présélection grâce aux tags...
  • une description un peu plus complète des artistes, une photo, un lien wikipedia, des trucs.
  • un système de commentaires et la possibilité pour les visiteurs de mettre aussi des notes. En fait, c'est quasiment déjà en place, mais je pense que ce n'est pas le plus pressé et donc je ne le ferai pas très vite.

Et bien sûr, j'ai prévu, quand je serai assez sûr de moi, de publier sous licence libre le logiciel dans son ensemble, au cas où ça pourrait servir à certains. Mais il va falloir attendre une petite année environ avant cela...

GnuTLS + POST + Firefox + large amount of data = save file dialog with blank file

J'ai mis tous les mots-clés que j'ai pu taper dans google pour résoudre un problème que j'ai depuis plusieurs mois.

J'ai trouvé hier, enfin, qu'il pourrait y avoir un lien avec https. Cela ne m'arrivait jusqu'à maintenant qu'en écrivant de long messages sur ce blog (et j'avais donc cru à tort à un bug du pourtant excellentissime Dotclear), ça m'est arrivé hier en corrigeant un long truc dans PhpMyAdmin. Trop c'est trop, il fallait que ça fonctionne à nouveau.

La solution trouvée

Après de longues recherches (quand je vous dit que ça fait plusieurs mois), je lisais des rapports n'ayant pas grand chose à voir avec mon problème, mais de personnes qui, scientifiquement, avaient désactivé tout ce qui pouvait poser problème. Autre navigateur, profil neuf dans Firefox, changement entre http et https. Et là je me suis dit « un autre navigateur pas envie, un autre profil de Firefox là maintenant c'est pas jouable mais je pourrai demain si besoin... Essayons de passer en http. »
Bon, les choses ne sont jamais simples, je n'étais pas chez moi. Et pas envie d'ouvrir mon Dotclear ou mon PhpMyAdmin à tout va. Faisons un proxy SOCKS ! (il a fallu que je me remémore de vieux souvenir d'une époque où je faisais ça) Dans mon souvenir, c'est super simple. Je me souviens « Il suffit de lire le man de ssh, c'est une option obscure ». 10 minutes plus tard :

ssh -D 1111 cyril@maison

Et on règle Firefox, dans Édition -> Préférences -> Avancé -> Paramètres de Connexion -> Configuration manuelle du proxy -> Hôte SOCKS -> "localhost", et port 1111. Puisque je vous dis que c'est simple.

Il fallu alors changer la configuration d'Apache pour laisser à l'interface d'administration de Dotclear l'accès depuis le réseau local:

<VirtualHost _default_:80>
  ServerName blog.cyril-ravat.fr
[...]
  # Réécriture pour les chemins spéciaux [était déjà là]
  RewriteEngine On
[...]
  # Interface d'administration uniquement en https
#  Redirect permanent /admin https://blog.cyril-ravat.fr/admin
  # Interface d'administration autorisée en local
  # Redirection vers la page d'accueil sinon
  RewriteCond %{REQUEST_URI} ^/(admin)
  RewriteCond %{REMOTE_ADDR} !^192.168.0
  RewriteRule ^(.*)$ http://blog.cyril-ravat.fr/ [R=permanent,L]

C'est un pis-aller, mais au moins maintenant je peux à nouveau éditer des billets de 4 kilomètres sans m'embêter pour les valider (quoi, ça se voit ?).

Tiens, je suis pas tout seul

C'est vrai que ce « depuis quelques mois » correspond en fait à ma migration de openssl vers gnutls (bon en fait j'en ai jamais vraiment parlé ici, mais c'est un billet qui devrait arriver dans pas longtemps). Je viens de réaliser cela aujourd'hui. Et du coup, la recherche google devient plus facile, et on voit qu'on n'est pas tout seul...

SyntaxHighlighter, php et scripts Bash

Bon, troisième post de la journée sur le sujet, après les deux premiers. Petits trucs et astuces pour pouvoir afficher des scripts bash comme cela est réalisé sur mon site.

Pour le transcript, deux problèmes

Balises malgré elles

SyntaxHighlighter transforme tous les chevrons « < » et « > » en entités html correspondantes, respectivement « &lt; » (less than) et « &gt; » (greater than). Ce ne serait pas grave s'il ne le faisait pas seulement pour presque tous les chevrons... Or il cherche à détecter automatiquement les balises (ce qui n'est pas très malin dans du code bash d'ailleurs, ce qui fait que mon adresse mail par exemple était comprise comme une balise, dégradant quelque peu la suite de l'affichage. Total : il faut le faire pour lui.
Au départ, j'avais choisi d'utiliser readline en php, à savoir

<pre class="brush: bash">
<?PHP  @readline('compil'); ?>
</pre>

Mais transformer les chevrons à l'avance n'est pas beaucoup plus compliqué :

<pre class="brush: bash">
<?PHP  echo str_replace('<','&lt;',str_replace('>','&gt;',file_get_contents('compil'))); ?>
</pre>

Vous aurez remarqué que du coup, dès que le fichier est modifié, c'est le code de la dernière version qui s'affiche. Zéro maintenance (le fichier compil est un lien symbolique vers /usr/local/bin/compil sur mon serveur).

Décidément, ces chevrons...

Et c'est à ce moment que l'on relit un peu ce qui s'affiche à l'écran, et qu'on se rend compte que plein de chevrons (mais pas tous) sont restés à l'état d'entités html. Alors qu'en enlevant l'influence de SyntaxHighlighter, on obtient bien le résultat attendu. Il m'aura fallu quelques minutes pour me souvenir que lt et gt, sont des mots-clés en bash, justement pour des tests numériques plus grand/plus petit (ouais, tout est lié). Un grand dilemme se pose alors. Soit on laisse comme ça, et le code affiché est faux. Soit on s'arrange pour ne jamais avoir de chevrons (ce qui est impossible quand on a besoin de redirections). Soit on commente les mots-clés gt et lt dans le fichier de définition shBrushBash.js, et tant pis pour leurs rares apparences en tant que tests, où ils ne seront pas colorés comme il faut. J'ai choisi cette dernière solution.

Pour l'aide

Ah, là ça se corse. Au départ j'avais recopié telle quelle la réponse de compil -h. Je me suis dit alors « mais si t'as une coquille dans l'aide ou que tu la modifies, il faudra revenir ici... au secours ». Alors j'ai trouvé un moyen. Après plusieurs tâtonnements et hésitations sur la meilleure fonction php entre exec, system et passthru, j'ai opté pour

<pre class="aide">
$ compil -h
 
<?PHP 
exec('[ ! -e compil.help -o compil -nt compil.help ] && compil -h | tr -d "\033" | sed -e "s/\[1m/<b>/g" -e "s/\[0m/<\/b>/g" > compil.help');
@readfile('compil.help'); ?>
</pre>

Explication : la dernière commande lit et affiche un fichier compil.help. On va donc y mettre l'aide. Problème, j'utilise un formatage à base de caractères bizarres qui permettent de mettre en gras du texte en console. On prend donc le résultat de compil -h, on en vire donc le caractère bizarre (grâce à la commande tr -d), puis on identifie le début et la fin des mises en gras, que l'on remplace de façon moche mais fonctionnelle par des balises de formatage html.
Le début est un test, qui permet d'exécuter la commande seulement si compil.help n'existe pas ou est plus ancien que compil. Cela semble fonctionner à peu près correctement.

Scripts

Ah, depuis le temps que j'ai envie d'ouvrir cette page sur mon site. Hé bien voilà, c'est fait : les scripts que j'ai passé un certain à écrire sur les quelques dernières années sont enfin en ligne, sous licence libre bien entendu. J'attendais sûrement de pouvoir utiliser un bon logiciel de coloration syntaxique. Maintenant que j'ai trouvé mon bonheur...

Pour l'instant, seuls 5 scripts sont présents :

  • compil que j'utilise très souvent, à chaque compilation d'un fichier latex. Sachant que c'est dans ce langage que je tape les exercices pour mes élèves, c'est très souvent. Il peut être lancé en mdoe non-intéractif, ce qui me permet de l'utiliser au sein de texmaker via le raccourci de compilation rapide, un simple appui sur la touche F1.
  • mp3cover que j'utilise à chaque fois que je m'achète un nouvel album et que je le passe en mp3 sur mon lecteur Samsung YP-P2
  • mp3resample que j'ai utilisé à une époque pour passer du bitrate variable de bonne qualité dans lequel j'encode habituellement mes mp3 pour mon ordi, à un bitrate constant un peu moins élevé (128 kbps) qui permet à la fois de gagner de la place sur le lecteur mp3 et de certainement vider un peu moins vite ses batteries. Je ne le fais plus depuis quelques temps, par flemme.
  • m3utospl que j'ai écrit récemment et que je n'ai pas encore vraiment eu le temps d'utiliser réellement. Il ne me manque que des playlists m3u à créer avec mon logiciel de lecture sur mon pc.
  • sauvegarde enfin, le plus utile, utilisé sur 3 pc de façon quotidienne pour faire des sauvegardes justement les uns sur les autres la nuit. Mais je l'ai récemment amélioré, et je m'en sers maintenant pour mettre à jour mes répertoires contenant des mp3 à travers 2 ordinateurs et sur mon lecteur mp3, via des fichiers de configuration différents...

Mais bientôt les rejoindront d'autres scripts que j'utilise tout autant, en particulier

  • redimensionner qui permet de redimensionner en grand nombre de photos et de vidéos (mais il faut que j'améliore le support des vidéos, c'est pas encore ça), que j'utilise dès que j'ai de nouvelles photos à mettre en ligne (via la GaleriePhotos, forcément)
  • retouche-video qui permet de réencoder de façon dégradée et légère des vidéos. Je m'en sers beaucoup pour mes vidéos de vacances que je mets à disposition de mes amis tout au long de l'année, pour gagner de la bande passante (typiquement, division d'un facteur 3 du poids des fichiers)...
  • webcam que j'avais écrit pour créer un flux vidéo bidirectionnel, provenant de webcams. L'intérêt par rapport à skype ou msn ? Le flux est acheminé par vlc via un tunnel ssh : l'image n'est pas visible par un tiers, contrairement à msn ou skype. On ne vous l'avait pas dit ? ;-p J'ai actuellement un petit soucis, depuis les dernières version de vlc des arguments ont changé et je n'ai pas eu le temps de voir cela. Il faut aussi que j'arrive enfin à ajouter le son. Bref, plus tard.

Vous aurez remarqué mon inventivité en termes de noms.

SyntaxHighlighter

J'ai découvert il y a quelques semaines un (gros) bout de code génial. Bon, ce n'est pas une grande découverte, il est déjà très utilisé, mais je n'avais jamais vraiment eu besoin de ce genre de trucs jusqu'à maintenant...

Comme le dit son site, il s'agit d'un code de surlignage syntaxique, ou comment rendre des bouts de codes déjà lisibles encore plus lisibles.

L'utiliser n'est pas très compliqué, puisqu'il suffit de télécharger le dernier .zip, de le dézipper et de regarder ce qu'on trouve. Un répertoire scripts contenant en particulier shCore.js qui est le cœur de la machinerie, ainsi que plein de shBrush*.js, qui contiennent les définitions des syntaxes pour différents langages. Personnellement, je n'ai pas besoin de tout, donc je n'ai choisi de garder que ce qui m'intéresse : Bash, Php, Plain que j'utiliserai souvent, Css, JScript et Sql un peu moins, et puis aussi au cas où Diff, Perl, Python, Xml. Un dossier styles contient lui les fichiers de mise en page css, parmis lesquels shCore.css est obligatoire et ensuite shThemeDefault.css correspond au seul thème écrit en noir sur blanc (les autres font du blanc sur noir, je déteste ça). Sans oublier les trois icônes qui seront affichées dans la toolbar et l'icône de retour à la ligne.

Donc on prend tous ces fichiers, on met tout ça dans un répertoire, appelé par exemple syntaxhighlighter, à la racine de notre formidable site web qu'on adore et dont on prend soin. Il ne reste plus qu'à modifier les pages web en ayant besoin. Il faut rajouter dans l'entête html :

<script type="text/javascript" src="/syntaxhighlighter/shCore.js"></script>
  <link type="text/css" rel="stylesheet" href="/syntaxhighlighter/shCore.css"/>
  <link type="text/css" rel="stylesheet" href="/syntaxhighlighter/shThemeDefault.css"/>
  <script type="text/javascript" src="/syntaxhighlighter/shBrushPlain.js"></script>
  <script type="text/javascript" src="/syntaxhighlighter/shBrushBash.js"></script>
  <script type="text/javascript">
    SyntaxHighlighter.all();
  </script>

Ensuite, tous les paragraphes de type <pre> seront analysés, pour peu qu'on dise à quel langage ils correspondent, en ajustant la classe :

<pre class="brush: bash">

par exemple. J'ajoute aussi, pour éviter la numérotation des lignes quand il s'agit d'une simple ligne de commande :

<pre class="brush: plain; gutter: false">

Le résultat a été utilisé dans de nouvelles pages sur mon site, dédiées à des scripts dont je me sers assez souvent et que j'ai écrits pour cela. C'est là qu'on se dit que la coloration syntaxique rend le code plus lisible.

Pour info, la coloration effectuée dans les articles du blog n'est absolument pas due à SyntaxHighlighter mais à un plugin pour Dotclear nommé SyntaxeHl.

lundi 8 décembre 2008

couleurs d'hiver

Depuis le temps que j'avais envie de virer ce pseudo-violine (je parle du reste du site, pas du blog) et d'avoir un site et un blog un peu uniformes... Ah, enfin, un peu de douceur, en attendant la fin de l'hiver. Quoi, ça n'a pas commencé ?

mardi 4 novembre 2008

Déménagement

Suite du message précédent : ah, enfin un peu de temps à soi (bon en fait, je l'ai pas vraiment, tout ce temps, mais je le prends quand même...), j'ai acheté un nouveau nom de domaine rien qu'à moi (je ne pensais pas que ça ne coûtait que 1€ chez ovh), un certificat ssh propre rien qu'à moi pour un an (à 15$ chez RapidSSLOnline comme j'en avais déjà parlé).

Et du coup je m'amuse un peu avec Apache, à faire des vrais virtual hosts et à utiliser un peu l'URL Rewriting. Ça a l'air de fonctionner maintenant (désolé pour la gêne occasionnée). Entre temps le blog a déménagé sur une nouvelle adresse rien qu'à lui, à savoir http://blog.cyril-ravat.fr/. L'ancienne adresse fonctionne toujours, a priori jusqu'à ce que j'en ai marre, et tout est redirigé automatiquement ici.

vendredi 31 octobre 2008

Todo list

Ce qui me trotte dans la tête :

  • acheter un (vrai) nom de site et un certificat ssl
  • passer à dotclear 2.1
  • reprendre le développement de la galerie photos en PHP
  • mettre à jour un certain nombre de page (quoi, le top10musqiques, enfin ?)
  • me mettre à Ajax, et en particulier utiliser jQuery
  • utiliser des bases sqlite si besoin

Et puis d'autres trucs...

mercredi 6 août 2008

note pour plus tard : certificats ssl à pas cher

Ceux qui ont déjà cherché un certificat ssl ont souvent, comme moi, abandonné en se disant « Quoi ? 5000€ pour un truc qui me sert si peu ? ». Merci Verisign.

Au final, tout le monde (ou du moins, tous ceux qui n'ont pas derrière eux le budget pharaonique des ressources informatiques du CAC40), ont choisi de s'auto-fabriquer leur certificat, car c'est pas si compliqué, relativement bien expliqué partout, et surtout totalement gratuit. Et puis ça fait un peu geek aussi. :)

Le problème, c'est qu'aucun navigateur ne me fait confiance de base. Du coup, quand vous venez sur mon site en https, il vous demande s'il doit me faire confiance. Avec insistance. Beaucoup d'insistance, de plus en plus même, et la nouvelle politique de Firefox 3 en la matière me paraît quelque peu excessive : 5 clics obligatoires, passant par du jargon très informatique, et avec des pages ressemblant beaucoup trop à des pages d'erreur classiques...

C'est pas si gênant, et la preuve est que je fais avec depuis assez longtemps, en particulier parce que je ne me sers pas de ssl pour l'authentification du site (je ne suis pas une banque, si d'aventure un jour qqun tentait de me piquer des internautes en se faisant passer pour moi, grand bien lui fasse). Je ne m'en sers que pour chiffrer les connexion quand je le souhaite, typiquement quand je donne des accès par http(s donc) à des documents confidentiels (principalement des photos, si si) à des personnes de confiance. Du coup, si la personne est ok et a cliqué 5 fois, on peut discuter tranquillement sans que personne ne puisse savoir de quoi on parle, et c'est ça qui m'importe. Reste la petite gène pour ceux qui doivent cliquer frénétiquement sur les « oui, je suis sûr de ce que je fais, j'ai toutes mes facultés mentales et je veux accéder à ce site ».

Aujourd'hui, je me disais que j'en avais marre de cette situation, que j'aimerais que des choses changent. Petite recherche google plus tard, il y a des solutions (j'ai pas le temps de m'en occuper maintenant, d'où la note pour plus tard) :

  • startcom.org propose un certificat gratuit. Si si, gratuit, c'est incroyable ! Et reconnu par Firefox et Safari. Bon, bien sûr, Internet Explorer, non (il faudra donc cliquer sur « oui blablabla » dans IE).
  • Et il y a les certificats RapidSSL qui sont pas trop cher, du moins beaucoup moins que les autres. Reconnu sur tous les navigateur existants ou presque, c'est la fête.

Le problème de RapidSSL ? Je rappelle que je ne me sers des certificats que comme clé de chiffrement des connexions : du coup, plus grosse est la clé, plus difficile est le déchiffrement. Je ne suis pas sûr de ce que je raconte parce que je connais mal, mais normalement j'ai actuellement une très grosse clé (ne croyez pas que je m'en vante tous les jours non plus), et même Firefox me le dit : « connexion chiffrée : chiffrement de haut niveau (AES-256 256bit) ». Et RapidSSL, tous les sites le vendent avec « Fort Cryptage 128 Bit, Standard SSL de l’industrie ». Bref, moins bien que ce qu'on peut faire en auto-signé. M'enfin, si c'est pour éviter des clics inutiles (qui comme tout le monde le sait contribuent au réchauffement de la planète)...

RapidSSL, si j'ai bien compris, fait partie des certificats reconnu par Verisign et donc par le reste du monde. Mais plein de fournisseurs en revendent, et a priori il n'y a pas de risque à les prendre là. Les deux premiers ou presque dans Google sont finalement pas si cher :

  • trustico.fr à seulement 12€ par an.
  • rapidSSLonline à seulement 12$ par an (ça fait combien en centimes d'euros ? ;) ).

Allez, un jour peut-être.

jeudi 24 juillet 2008

prenez vos cartes d'embarquement

Dotclear 2, c'est (enfin) pour bientôt...

lundi 21 juillet 2008

Note de service

Entre d'autres choses à faire, parce que les vacances sont un concept totalement galvaudé, petite mise à jour des choses les plus visibles depuis la page d'accueil. Je commence enfin à trouver douteux ce choix de violet, c'est plutôt bon signe.

Toujours pas eu le temps de réfléchir à la mise à jour du top10-musiques. Désolé.

jeudi 19 juillet 2007

Écrire net

Ce weekend, je vais rattraper mon retard ici. J'ai deux billets à moitié écrits (sur les plugins et thèmes pour Dotclear), et deux dans ma tête au moins. Problème : pas là et pas de connexion au net, seulement mon portable. Solution : exporter les données du blog sur le serveur, importer sur mon portable, écrire sur mon portable, et refaire le voyage en sens inverse dimanche. Décidément, heureusement que Dotclear ça marche vraiment bien.

lundi 9 juillet 2007

Plugins pour DotClear2

Ce soir, j'ai eu envie de reprendre un peu en main mon blog, qui commençait à dépérir. Après un petite recherche pour mettre à jour le plugin de changement de thème disponible sur le blog de ClashDesign (qui ne fonctionnait plus suite à une un peu trop périlleuse tentative de migration), j'ai trouvé via l'excellente liste officieuse des plugins compatibles DC2 un plugin de sauvegarde automatique très très bon. Merci aux auteurs de ces plugins et à ceux des plugins dont je ne me sers pas : c'est par la vivacité d'une communauté que l'on peut juger de la qualité d'un logiciel open-source.

La suite : les thèmes.

samedi 7 avril 2007

Top 10 musique

J'ai mis à jour jeudi soir mon top 10 musique. Ça m'a permis de faire un point sur ce que j'écoute, parce que y a pas mal de choses différentes. C'est à peu près représentatif.

À faire pour bientôt : mettre à jour mon top 10 films. J'aimerais y intégrer des films comme Les poupées russes, qui est vraiment formidable et qui mériterait sa place. Peut-être faire des catégories aussi, même si c'est plus compliqué. On verra.