Perspectives et envies pour 2019 – développement logiciel

Suite de mes envies et perspectives pour l’année 2019 et suivantes. Si vous ne l’avez pas encore fait, vous pouvez lire la première partie sur les formations et cours en ligne.

Héritage

J’ai commencé ma carrière professionnelle comme développeur de jeux vidéo chez Lankhor, expérience qui a forcément teinté la suite de ma vie (le forcément est expliqué dans cet entretien après les pistes de ski). Depuis je ne me suis pas arrêté de programmer, même si le rythme a été beaucoup moins soutenu : ce fut des scripts d’administration système (Bash, Perl), du développement Web (PHP). Dispersion ? Pas si sûr… Et puis zut, faut pas sacrifier les activités plaisantes.

Ski Park Manager

J’ai même commencé deux extensions en Python (une pour GIMP, l’autre pour Scribus) et là, ça vaudrait le coup de les publier, voire de les poursuivre ; un outil pas fini mais qui me contente c’est bien, mais un outil finalisé utilisable par d’autres c’est mieux. Du coup, je les publie (lire la suite).

Un gestionnaire de guides pour GIMP

Si vous avez déjà utilisé Scribus et son gestionnaire de repères (par ligne et par colonne) vous avez peut-être pesté sur le côté fastidieux pour créer des guides dans GIMP (ça s’appelle guide dans GIMP et repère dans Scribus, mais c’est la même chose).

J’ai donc créé une fenêtre qui vous permet de choisir combien de guides verticaux et horizontaux vous souhaitez, sachant qu’ils seront répartis uniformément. Enfin, presque, c’est là que j’ai des choses à améliorer. En effet, dans Scribus, vous travaillez sur une page mesurée en millimètres (ou autre unité du monde réel) qui est divisible. Dans GIMP, votre image est constituée de pixels qui eux, ne se divisent pas. D’où la difficulté à diviser en colonnes et lignes de taille vraiment égale.

Vous pouvez télécharger cette extension sur Framagit : https://framagit.org/dimitrirobert/gimp-guide-manager

Je ne m’en sers pas souvent mais je pense qu’il peut être utile à un concepteur de sites Web (ce que j’aspirais à être à l’époque).

Importer des grands tableaux dans Scribus

Les tableaux et Scribus ça fait deux. Même si la version 1.5 apporte une véritable entité tableau (alors que jusqu’à la version 1.4, les tableaux ne sont que des groupes de cadres de texte), ce n’est pas encore la panacée. Notamment, il n’est pas possible d’importer un tableau réalisé dans un autre logiciel (LibreOffice Calc au hasard).

Oui, il y a bien un script nommé « importcsv2table » et je l’ai essayé. Du coup, j’ai commencé à le modifier. Vous pouvez le voir en action dans la vidéo Scribus : importer un tableau au format CSV (ainsi que des explications écrites sur son fonctionnement pas très intuitif).

Et le télécharger également sur Framagit : https://framagit.org/dimitrirobert/scribus-plugin-import-large-csv

Ce script fut motivé en préparation d’une formation avec des archéologues, dont les rapports comportent précisément des tableaux qui s’étalent sur plusieurs pages. Le script fait le travail, même si le résultat reste des groupes de cadres de texte (du coup, c’est compatible avec Scribus 1.4). N’oubliez pas que vous pouvez accéder au contenu d’un cadre groupé avec Alt + clic, sans dégrouper.

Gérer des formations professionnelles

Là c’est du lourd, un outil parti de rien ou presque. À la base, une certaine frustration à remplir des modèles de document dans LibreOffice Writer et dans Scribus pour produire tous les documents nécessaire à l’organisation d’une formation. Le programmeur qui sommeille en moi s’est dit qu’il fallait faire quelque chose.

Nous avons un site permettant de faire la promotion des formations, de gérer plus ou moins les inscriptions. Nous avons aussi un outil de gestion pour éditer devis et factures, Autonomie, un logiciel adapté aux coopératives d’activités et d’emploi. Mais il manque(ait) la brique intermédiaire, celle qui peut gérer tous les documents administratifs et les procédures exigées par Datadock.

On dit souvent qu’il vaut mieux réutiliser des briques existantes plutôt que de réinventer la roue. Mais, je pense que trop de briques engendre un trop forte dépendance aux producteurs de ces briques : une seule brique peut fragiliser l’ensemble. J’ai donc opté pour du neuf s’appuyant sur de l’existant solide : j’ai commencé le développement d’une extension pour WordPress.

Cela présente plusieurs avantages : WordPress est un logiciel libre très répandu et suivi. C’est un gestionnaire de contenu en ligne, donc, la partie promotion des formations, des dates de session, des commentaires est facile à gérer. Mais un inconvénient flagrant, il faut installer une instance de WordPress (j’avoue, je n’ai pas vérifié si cette extension peut être installée sur une version multisite, ça fait partie des choses à faire).

Je n’ai pas géré l’interconnexion avec un logiciel de gestion, donc, pas de création de facture : cela aurait alourdit le développement inutilement. En revanche, il est sans doute possible de créer des passerelles facilitant la création des factures. À voir.

Cette extension, pour l’instant nommée wp-organisme-de-formation (peut-être faudrait-il lui trouver un nom plus original), est diffusée sous licence GPL sur Framagit : https://framagit.org/dimitrirobert/wp-organisme-de-formation

Ne vous emballez pas, elle n’est pas facile à configurer. Non parce que j’aurais voulu faire du faux libre (un logiciel diffusé sous licence libre inutilisable sans aide du développeur), mais parce que la partie assistance à la configuration n’est pas faite. Et même, une fois configurée, c’est pas encore gagné.

L’objectif des prochaines semaines est de rendre cet outil utilisable par d’autres personnes que moi. Mais, sachez que j’ai déjà géré deux vraies formations inter-entreprise l’année dernière. J’ai rédigé un point d’étape, un état des lieux de ce qui fonctionne, ce qu’il faut changer et ce qu’il faut ajouter.

L’idée ensuite étant de démarcher les organismes de formation qui souhaitent contribuer au développement et/ou au financement.

Autres idées

Quelques idées en passant :

  • dans Scribus, pouvoir importer un texte avec ses notes de bas de page (ou de fin de document) ; cette fonction a existé brièvement en 2015 puis a disparu avec la refonte du système de gestion de notes…
  • dans Scribus toujours, pouvoir importer un document tableur (au format CSV pour commencer) et ranger les données qu’il contient dans les cadres de texte correspondant : par exemple, pour éditer un programme événementiel, il suffirait de créer la maquette, prévoir les emplacements des différentes informations (titre du spectacle, lieu, heure, infos diverses, etc.), d’importer le tableur où toutes ces informations sont classées et d’ajuster la mise en page.
  • encore dans Scribus, je ne trouve pas satisfaisant l’import de document texte (Word ou LibreOffice Writer) ; je ne sais pas si je serais capable de l’améliorer (ça fait quelques années que cela dure), mais j’aimerais faire une extension d’import de texte au format Markdown avec création de styles de paragraphes et de caractères. Si cela fonctionne, j’intégrerai un peu de Markdown dans mes formations Scribus. Et cela me permettrait d’avoir une chaîne de production documentaire qui crée une version Web et une version papier à partir d’une même source Markdown.
  • depuis GIMP 2.10, l’extension Separate+ qui permet de créer des images en CMJN, ne fonctionne plus aussi bien (et pour cause, elle n’est plus maintenue depuis…). Il n’y a peut-être pas grand chose à corriger pour tenir jusqu’à la sortie de GIMP 3. Mine de rien, je me servais pas mal de cette extension pour produire des effets d’encrage sur des affiches. Ou alors je regarde du côté de Krita.

Y a plus qu’à

Je ne garantirais pas que cette liste soit exhaustive. Je reviendrai sur les avancées des divers chantiers sur ce blog.

De plus, je voudrais rafraîchir ce site Web (oui, j’avais dit que je ne faisais plus de Web, mais là c’est le mien), que les informations importantes soient plus facile d’accès. Faire quelque chose de plus sobre (commencer par supprimer le diaporama qui ne sert à rien). Peut-être même ne faire qu’un seul site avec celui des cours en ligne.

Scribus : importer un tableau au format CSV

scribus importer un tableau eu format csv

On ne peut pas dire que les tableaux soient bien gérés dans Scribus, on pourrait même dire que c’est une plaie. Quant à importer un tableau depuis un tableur, ce n’est simplement pas à l’ordre du jour…

Une gestion insatisfaisante

Actuellement (version 1.4) un tableau n’est autre qu’un groupe de cadres de texte. Une fois créé, vous ne pouvez ajuster la taille des lignes et des colonnes, vous ne pouvez appliquer de style sur les cellules. La saisie dans une cellule est rendue complexe par le groupe : il faut double-cliquer en pressant la touche Alt pour modifier le contenu d’une cellule.

La version 1.5 (version de développement de la future version stable) propose un nouvel outil de création de tableaux. Il y a même la possibilité d’appliquer des styles sur les cellules et le tableau, mais le peu de paramètres disponibles actuellement rend cette fonction inutile. De toute manière, toujours pas de possibilité d’importer un tableau, il faut le rédiger dans Scribus.

On trouve des tutoriels évoquant la possibilité d’exporter un tableau sous forme d’image vectorielle depuis un tableur comme LibreOffice Calc. Mais le tableau ainsi inséré n’est pas modifiable, y compris au niveau du style. De plus, impossible d’insérer un tableau qui s’étendrait sur plusieurs pages.

Prendre le taureau par les cornes

J’ai donc tenté de résoudre ce problème en vue d’une formation avec des archéologues, qui insèrent de longs tableaux dans leurs rapports. Je suis parti du script importcsv2table.py fourni avec Scribus qui permet d’importer un tableau au format CSV. Le comportement de ce dernier ne me convenait pas et les questions posées étaient trop simplistes. Par exemple, il ne demande pas le caractère de séparation, ce qui est la base du format CSV.

Le format CSV (pour Comma-separated values) permet de représenter un tableau sous forme de valeurs séparées par des virgules (ou d’autres caractères, absents des valeurs). Chaque ligne du texte correspond à une ligne du tableau et les virgules correspondent aux séparations entre les colonnes.

Le script ainsi produit peut être téléchargé ici : importcsv2table.py. Vous devrez ensuite le copier dans un dossier où vous rangez vos scripts pour Scribus : dans votre profil Scribus vous avez un sous-dossier plugins. Ce n’est qu’un exemple, vous pouvez en choisir un autre, du moment que vous le déclarez dans les préférences de Scribus.

Pour le tutoriel vidéo présenté ci-dessous, j’ai utilisé un grand tableau de données issues du site Etalab qui recense les lieux de tournages de films dans Paris. Je l’ai un peu épuré et n’ai gardé que 7 colonnes et 139 lignes, mais ce n’est qu’un exemple, je voulais un tableau avec beaucoup de lignes.

Voici comment l’utiliser en vidéo.

Préparation

  • Créez un nouveau document avec suffisamment de pages pour accueillir votre tableau (cela peut être ajusté par la suite).
  • Allez dans les Préférences pour déclarer le chemin des plugins. C’est là que vous avez copié le script, il sera ainsi plus facile à retrouver depuis Scribus.
  • Créez un cadre de texte occupant tout l’espace que vous voulez allouer à votre tableau sur la première page.
  • Certaines propriétés de ce cadre seront utilisées pour les cellules (constituées elles-mêmes de cadre de texte)
    • la largeur et la hauteur ;
    • la couleur du filet ;
    • l’épaisseur du filet ;
    • les espaces sur les quatre côtés intérieurs (rembourrage ou padding pour les habitués des feuilles de styles CSS).
  • Assurez-vous que le cadre de texte est bien sélectionné et appelez le script via Script → Démarrer un script.

Utilisez le script

S’ensuit une série de questions (je compte regrouper toutes ces fenêtres en une seule à terme).

  • Choisissez le fichier CSV à importer.
  • Indiquez quel est le délimiteur de colonnes (évitez d’avoir la tabulation comme délimiteur).
  • Indiquez la largeur de chaque colonne : cette fenêtre vous indique combien de colonnes comporte votre tableau ; vous devez donc avoir le même nombre de chiffres. Chaque colonne est représentée par un nombre qui indique la part de largeur qu’elle occupera : ainsi, une colonne identifiée par un 3 sera trois fois plus large qu’une colonne identifiée par un 1. La largeur totale du tableau est celle du cadre de texte initial.
  • Si la première ligne de votre tableau est une ligne de titre, elle sera traitée différemment. Pour l’instant, elle n’est juste pas comptabilisée dans la hauteur totale et une place sera réservée pour elle sur chaque page où s’étend le tableau. On peut imaginer à l’avenir qu’elle aura un style particulier et qu’elle sera automatiquement reproduite sur chaque page.
  • La hauteur des cellules est difficile à appréhender tant que vous n’avez pas défini le style de paragraphe des cellules ni vu le résultat. Laissez cette valeur et ajustez-la à la suite de plusieurs essais. Lorsque le nombre de lignes multiplié par la hauteur de chacun dépasse la hauteur du cadre texte initial (donc limitant), un décalage se produira pour bien séparer visuellement les lignes.
  • Choisissez un style de paragraphe pour le contenu des cellules. Cette fenêtre vous affiche les styles existants. Vous pouvez en recopier un ou donner un nouveau nom. Dans ce cas, un nouveau style sera créé.

Patientez, le script travaille.

Affinez

  • Une fois que le script a fini son travail, vous pouvez constater que chaque ligne est un groupe de cadres de texte (ouvrez la fenêtre Plan du document pour vous en convaincre). Vous pouvez donc déplacer une ligne facilement.
  • Allez dans l’éditeur de styles pour modifier le style nouvellement créé. Vos modifications s’appliquent à l’ensemble des cellules !

Traitez les autres pages

  • Allez sur la page suivante.
  • Sélectionnez toutes les lignes et les grouper.
  • Revenez sur la première page et copier la ligne de titre.
  • Retournez sur la page en cours de traitement et coller la ligne de titre.
  • Sélectionnez les deux éléments (ligne de titre et le groupe des autres lignes)
  • À l’aide de la fenêtre Espacer et aligner, faites coïncider le haut du groupe de lignes avec le bas de la ligne de titre.
  • Recommencez pour les autres pages.

Certes, ce n’est pas encore aussi facile que dans d’autres logiciels, mais ce script permet de faire le travail proprement. À noter qu’il fonctionne toujours dans Scribus 1.5 .Malheureusement, il n’est toujours pas possible d’utiliser les nouveaux tableaux dans un script Python, je lance donc un appel du pied !