Retour d’expérience sur la personnalisation de Trac

 

wikipedia:Trac icon, modified for the Open Ico...
Image via Wikipedia

 

Il y a quelques jours que j’ai commencé à personnaliser Trac pour les besoins de mon employeur. L’objectif était de fournir aux utilisateurs qui sont en grande majorité non informaticiens, un outils de saisie de demande. Le choix de Trac comme base peut paraitre incongru puisque Trac est avant tout destiné à gérer les projets de développement logiciel. Certes, mais Trac n’en demeure pas moins un outils de traitement de bug, de ticket et pourquoi pas de demandes?

D’autres arguments m’ont poussé à choisir Trac. Il est gratuit, open-source et libre. De plus il dispose d’une large base d’extension permettant d’ajouter sans codage (codage en python) de nouvelles fonctionnalités voire d’en modifier des existantes. Ce billet montre comment nous sommes parvenus avec un minimum de code à obtenir une application répondant aux besoins et couvre la version 0.12 de Trac.

En premier lieu on s’aperçoit rapidement qu’il y a plusieurs niveaux d’intervention. En effet Trac est conçu comme un conteneur de projet. L’outil finale sera donc constitué de Trac plus un projet. Dans ce cas on voit clairement les niveaux d’interventions suivants:

  1. Par ajout de plugin
  2. Par paramétrage dans le projet dédié
  3. Par développement dans le projet dédié
  4. Par développement dans Trac lui-même
  5. Par développement dans les plugin

Ajout de plugin

Les liens suivants contiennent une très longue liste de plugin: le site de trac et le site des plugin.

Les plugins sont soit des fichiers py (module python) soit des fichiers egg (livrable ou librairie python). Si le plugin est disponible uniquement sous forme de source alors il faudra le compiler pour générer un egg avec la commande:

python setup.py bdist_egg

Pour installer un plugin il est préférable de le mettre dans le répertoire du projet. Cela permet de faire cohabiter sur le même système plusieurs versions d’une librairie (chacune dans un processus python distinct). Par exemple si le projet s’appelle gesdem il faut placer les plugin dans

gesdem/plugins

Toutefois si Trac est en cours d’éxécution, on peut passer par l’interface d’administration d’un projet donné pour ajouter le plugin.

Paramétrage dans le projet dédié

Le paramétrage dans le projet dédié consiste à modifier les paramétres dans le fichier trac.ini du prjet. Soit dans le cas du projet qui s’appelle gesdem:

gesdem/conf/trac.ini

Le paramétrage du projet se fait également par la page d’administration. Ce paramétrage va mettre à jour le fichier trac.ini mais également la base de données pour certains plugins.

Développement dans le projet dédié

Nous entendons par développement tout simplement la modification des templates. Trac possède une notion d’héritage de configuration ainsi on peut mettre des templates dans le projet dédié qui vont écraser ceux par défaut.

Développement dans Trac lui-même

Si les sources de Trac sont dans un répertoire nommé trac-0.12 alors il faut se rendre dans le répertoire suivant pour trouver les modules python et les templates à modifier:

trac-0.12trac

Développement dans les plugin

Les plugins peuvent nécessiter des ajustements. Dans ce cas il faut télécharger les sources et prendre soin de au moins créer/modifier le fichier setup.cfg pour ajouter un suffixe remarquable puisque nous allons faire un fork. Voici un setup.cfg minimal:

[egg_info]

tag_build = monTagAMoi
tag_svn_revision = true

Remplacer monTagAMoi par le nom de votre organisation par exemple !

Conboy et Tomboy

L’utilisation conjointe de Tomboy en desktop et Conboy sur le N900 permet d’avoir une solution de prise de note qui moyennant quelques paramétrages pour la synchronisation, offre la possibilité d’emmener avec soi ses notes.

Points forts

  • Client dédié pour N900
  • Synchronisation automatique du desktop avec Ubuntu One
  • Notes accessibles via le web par Ubuntu One
  • Gestion des liens entre notes: wiki
  • Export des notes vers un blog

Points faibles

  • Pas de synchronisation automatique du client N900

Solution

Prise de note

Pourquoi ?

  • Se souvenir de quelque chose
  • Écrire une procédure
  • Écrire un tutoriel
  • Le tout en ligne comme hors-ligne et en mobilité

Comment ?

  • Note type post-it
  • blog
  • wiki

Problèmes

  • Chaque outil n’adresse qu’une partie des besoins
    • post-it : uniquement pour les informations courtes
    • blog : notion d’article implique une structure réfléchie incompatible avec la prise de note au fil de l’eau
    • wiki : idéal pour la saisie au fil de l’eau mais application trop lourde pour la saisie rapide
  • Synchronisation des notes en mobilité

Solutions

Personnalisation de Trac: gestion des optgroup

Trac est outils de gestion de projet de développement logiciel qui permet de suivre non seulement les bug et evolutions mais aussi d’avoir un wiki et un blog. Écrit en python il dispose de nombreux plugins.

La version officielle courante 0.12 ne gère malheureusement pas les groupements des éléments dans les listes déroulantes. Or il est bien pratique de grouper par thème les éléments de la liste “component” par exemple.

En regardant attentivement le code de ticket.html on s’aperçoit que le code script Genshi semble prévoir la génération de optgroup mais le bean de vue qui est dans la page n’est jamais généré pour ce cas. Pour y remédier il faut modifier les fichiers model.py et api.py qui se trouvent dans le répertoire

/trac/ticket

La fichier model.py devra être modifié pour pouvoir générer les “value object” correspondant aux éléments de la liste component, en y ajoutant l’information de groupement. Dans la classe Component il suffit de faire une jointure avec la table enum sur une nouvelle colonne de la table component. Dans mon cas particulier il s’agit de la colonne type_dem (voir le fichier diff joint)

Modification trac pour gérer les optgroup

Ensuite dans le fichier api.py il faut modifier la méthode fields de la classe TicketSystem afin de gérer la création du bean de vue adéquat i.e. incluant les informations d’optgroup. En fait il faut distinguer dans le cas d’un champ de type select, le cas particulier de la combo des Components. Si le module model.py est entièrement revisité pour renvoyer pour tous les champs une information de groupement alors la distinction n’est pas nécessaire.

Enfin la version 0.12 de Trac utilise le champ options pour contenir les valeurs posssible d’une liste déroulante. Or si on remplit également ce champ, ticket.html va produire à la fois des options classiques et des optgroup… Pour faire simple j’ai choisi de supprimer le test des valeurs possible dans web_ui.py

Avec un minimum de connaissance python, il est possible d’apporter de petites modifications à Trac qui se révèle être un outils qui gagne à être connu.

La fin de code HTML pour publier sur internet

De nos jours écrire du code HTML fusse-t-il avec un éditeur wysiwyg n’est plus obligatoire pour celui qui veut produire du contenu sur internet. En effet le code HTML relève de la technique informatique alors que la producteur de contenu devrait être un expert de la technique éditoriale. Je dirai même plus, utiliser le code HTML pour faire un site est une érésie pour le grand public.

Celui qui veut faire son site web personnel pourra choisir un éditeur comme NVU pour faire ses page. Puis il voudra faire des menus, changer le style des titres, modifier les CSS, faire du javascript etc. Finalement il va devoir apprendre beaucoup de technique informatique au lieu de s’attacher à produire du contenu.

Ainsi le particulier, l’association ou même l’organisation qui peut se payer le service d’informaticiens, auront tout intérêt à s’appuyer sur des outils de CMS tel que WordPress qui vont s’occuper de la mise en forme et de tous les aspects techniques. Ainsi ils auront un site toujours au goût du jour car les briques techniques seront mises à jour par des personnes spécialisées dans la technologie informatique sous-jacente, et ils pourront se concentrer sur ce qui fait le facteur de différenciation de leur site i.e. son contenu.

Dans le cas où du contenu a été créé il faudra consacrer du temps à faire rentrer la structure du site fait à la main dans les concepts du CMS choisi. Dans le cas de WordPress les pages se substitueront aux pages statique du site et le blog se subtituera au fil d’actualité. Voici par exemple un site fait rapidement à la main Ancien site et sa version wordpress obtenue en copiant le contenu.

Enfin un dernier avantage d’utiliser un CMS est la rapidité de mise à jour. Dans un monde d’hyperactivité et d’hypercommunication, un site non mis à jours est un site condamné.

Nitdroid et power-kernel

L’installation automatique de Nitdroid supprime des paquets incompatibles. En plus du menu de démarrage il semble aussi supprimer le noyau dit “power” permettant notement d’overclocker le N900.

Heureusement il suffit de lancer les commandes suivantes pour retrouver le power-kernel accessible depuis le menu de démarrage.

apt-get install kernel-power-bootimg kernel-power-modules
apt-get install multiboot-kernel-power

Installation Android sur N900 sur micro SD de 2Go

Nitdroid est le portage d’Android sur N900. L’installation est facilitée par un script qui s’installe par un

sudo gainroot
apt-get install nitdroid-installer

Ensuite faire

nitdroid

La procédure va alors échouer sur le formattage de la partition linux de la carte sd. En effet le script s’attend à avoir une carte sd avec une partition windows (vfat) et de l’espace libre pour une partition linux (ext3). Il faut donc au préalable, partitionner correctement la carte puisque les cartes vendues sont déja partitionnées avec une seule partition vfat qui prend tout l’espace.
Comme il faut un peut moins de 2 Go pour la partition linux, il suffit comme indiqué dans la procédure manuelle de faire

sfdisk -uM /dev/mmcblk1

Puis rentrer quand sfdisk demande la partition mmcblkp1

,1M,

Enfin faites entrée pour les autres partitions qui normalement seront vides.
N’oubliez pas de répondre par y à la question finale.

Maintenant refaire

sudo gainrooot
nitdroid