lundi, janvier 29 2007

Un petit vrac avant Solutions Linux

  • XFCE 4.4 : la démo des RMLL était très intéressante, j'ai donc passé mon portable sur une xubuntu, juste pour voir.
  • The Little Book of Ruby, un petit livre gratuit de 85 pages sur les bases de Ruby, vraiment le minimum à savoir pour se débrouiller ;
  • Ce qu'on ne vous a pas dit sur Vista, un très bon billet de Tristan sur la partie cachée de Vista ;
  • Reiser4. Ça fait un moment que je voulais le lire mais il faut avouer qu'il n'est pas simple de rentrer dans ce guide sur Reiser4. Bref, intéressant mais sans plus. Il y a quand même quelques infos étonnantes à récupérer sur les systèmes de fichiers, les techniques employées (journalisation, etc.) et le futur de ces derniers.

mercredi, janvier 24 2007

Comment créer une image représentant les tables et leur relations à partir d'une base PostgreSQL

et d'un script Ruby.

Tout a commencé quand toady (aka str, aka Sébastien Tricaud) a annoncé son nouveau projet, ruined. Cet outil écrit en Ruby analyse les règles iptables de votre serveur et crée une image graphique indiquant les interfaces, les protocoles et leurs relations. Dès que j'ai vu la copie d'écran, je me suis dit : punaise, c'est exactement ce que je veux faire avec une base PostgreSQL.

J'ai donc récupéré les sources de ruined, je les ai lu, je les ai compris (enfin, tout du moins, j'ai essayé, tout n'est pas encore très clair). Mais au moins, j'ai compris que le script passe par GraphViz pour générer le SVG et que la bibliothèque GraphViz pour Ruby dispose de deux instructions principales : add_node et add_edge. add_node permet d'ajouter un noeud au schéma, noeud qui sera représenté par un polygone (au choix, rectangle, losange, etc.). add_edge permet d'ajouter un lien entre deux noeuds, lien symbolisé par une flèche mono- ou bi-directionnelle. Donc, j'ai tout ce dont j'ai besoin : des boîtes pour représenter les tables, des flèches pour représenter les clés étrangères.

Je me suis donc mis à coder ça. Ne connaissant pas vraiment Ruby, je me suis basé sur le code de toady et sur la doc de Ruby. Pour éviter tout problème spécifique au langage, je me suis arrangé pour que les données renvoyées par PostgreSQL soient directement formatées comme je le souhaitais. En gros, le script exécute une première requête pour récupérer la liste des tables ainsi que les colonnes de chaque table. Puis, il exécute une deuxième requête qui se charge de récupérer les définitions des clés étrangères.

Voici le résultat (les trois fichiers en annexes à ce billet) :

Bon, comme vous le voyez, c'est chouette mais c'est loin d'être beau. Le texte qui aurait dû être dans les boîtes dépasse par moment, les flèches font parfois des détours surprenants. Cela étant dit, ça reste compréhensible et vu le travail que ça m'a demandé (trois heures), je n'ai pas vraiment à protester. De plus, ça ressemble beaucoup à ce que fait postgresql-autodoc, ce qui semble assez logique étant donné qu'il utilise lui-aussi un graphe dot.

Le pire arrive quand on essaie d'ouvrir le fichier SVG avec Inkscape. Les boites ne sont pas des entités mais un ensemble de lignes ?!?! Je ne comprends pas pourquoi GraphViz ne les a pas assemblé. Du coup, pour déplacer une table, on est contraint à sélectionner tous les traits et tous les labels... sauf que les flèches ne suivent pas la boîte ?!?!

Bon, ce n'est pas encore pour cette fois.

mercredi, septembre 13 2006

Ruby on Rails

Excellent livre sur ce nouveau (pour moi) langage de scripts. Je suis complètement bluffé par la rapidité avec laquelle on peut arriver à un prototype de site. Ça fait longtemps que je connais, utilise et programme en PHP. J'ai toujours été fasciné par ce langage, par son nombre d'extensions. Je l'utilisais même pour des petits scripts système qui auraient été autrement plus compliqués à écrire en bash (ne me parlez surtout pas de Perl dont la syntaxe est monstrueuse). Je crois avoir trouvé un successeur à PHP, au moins dans le domaine des scripts système. Je compte même utiliser Ruby on Rails pour des petites applications que j'ai en tête. Bref, revenons-en au bouquin. Très bien traduit, très didactique, sa présentation du langage m'a plu. On commence avec quelques exemples très simples mais suffisants pour comprendre la puissance et l'intérêt de Ruby on Rails. Je dis « très simple » car le site créé est un simple frontend à une base de données dont la structure de la table a été spécifiquement créé pour « plaire » à Ruby on Rails. Cependant, après, l'auteur montre que tout a été fait pour que Ruby on Rails soit le plus facilement paramétrable mais sans perdre de sa simplicité d'utilisation. Une vraie gageure.

Vivement que j'écrire un ensemble de scripts avec ce langage.

À noter la série sur Ruby dans GNU/Linux Magazine France et l'annonce de la sortie de Ruby 1.8.5 sur linuxfr.org.