Bonjour, et bienvenue sur mon petit coin de web. Vous trouverez ici quelques programmes et documents que j'ai écrits.
Logiciels
J'ai écrit quelques petits logiciels libres, souvent en étroite relation avec Emacs, car cet éditeur de texte est passionnant, et souvent en Python, car ce langage de programmation est, comment dire... ultime.
En quelques mots, Python est :
- doté d'une syntaxe très claire et d'un design assez joli ;
- très puissant ;
- assez portable ;
- facile à étendre en C ou C++ ;
- facile à incorporer dans du C ou du C++ ;
- très bien documenté ;
- un logiciel libre.
De plus, écrire des programmes en Python est très amusant. C'est aussi, dit-on, le cas d'un autre langage interprété (même deux ;-)), mais le code écrit en Python est à mon humble avis plus facile à maintenir en général, pas uniquement par son auteur et dans le mois suivant l'écriture dudit code...
Assez parlé, passons aux choses sérieuses. :)
TDBSF, the Trivial Database Search Facility
TDBSF est un moteur de recherche pour de
petites « bases de données » dans un format texte très simple afin
de remplacer un vieil outil shareware utilisé par
mon père depuis des années et qui présentait pas mal de limitations
commençant à devenir gênantes.
Le moteur est écrit en Python et l'interface la plus aboutie est écrite pour Emacs (principalement en ELisp, donc).
Depuis la version 2.0, TDBSF supporte pleinement Unicode. Plus précisément, un fichier de la base de données peut utiliser n'importe quel codage de caractères compatible avec Unicode et supporté à la fois par Python et par l'interface utilisée (i.e., pour le moment, Emacs). Le codage d'un fichier de la base de données est simplement indiqué dans une déclaration de codage (encoding declaration), comme en ont l'habitude les utilisateurs d'Emacs et les programmeurs Python.
À partir de la version 3.0, TDBSF fonctionne avec Python 3 ; Python 2 n'est plus supporté. Vous pouvez télécharger TDBSF ou lire sa documentation, si vous comprenez l'anglais. Ce programme est distribué sous la licence GNU GPL version 2.
pythondialog
pythondialog est une interface Python
avec le programme dialog écrit à l'origine par Savio Lam,
puis réécrit par Thomas E. Dickey. Son but est de permettre une
utilisation facile et complète de dialog depuis Python tout en
gardant un style de programmation... pythonesque.
Ce module est utile pour écrire rapidement et facilement en Python des interfaces en mode texte1 (captures d'écran ici). Le niveau d'abstraction est assez élevé : on crée directement des boîtes de texte, des boîtes d'entrée de texte, des listes de boutons radio, etc. Il ne permet pas de réaliser des tâches de bas niveau avec le terminal. Si c'est ce dernier cas qui vous intéresse, vous devriez vous tourner vers ncurses ou slang. Si vous avez besoin de réaliser une interface un peu sophistiquée en mode texte (et avec Python), je suggérerais de jeter un œil à la bibliothèque Python Urwid.
La première version de pythondialog a été écrite par Robb Shecter. Partant de ce travail, je me suis attaché à le rendre plus robuste, plus complet et mieux documenté. Pendant quelques années (2004-2009), pythondialog a été entre les mains de Peter Åstrand, qui a uploadé la version 2.7 sur SourceForge.
J'ai repris mon travail sur pythondialog depuis et ai uploadé plusieurs versions entre 2009 et 2015 ici ainsi que sur SourceForge. Hélas, il semble que ce dernier se comporte mal depuis au moins mai 2015 ; pour cette raison, je vais faire migrer pythondialog hors de SourceForge. Vous pouvez le télécharger depuis ce site ou PyPI et parcourir le dépôt Git migré vers GitHub. Il est toujours possible de vérifier l'authenticité d'une archive (release) à l'aide de ma clé OpenPGP.
pythondialog évolue au sein d'un dépôt Git qui peut être cloné à l'aide de la commande :
git clone https://github.com/frougon/pythondialog.git
Je n'ai pas encore mis en place un véritable remplacement de l'ancien site officiel de pythondialog. Vous pouvez cependant consulter le manuel de pythondialog ici.
pythondialog est distribué sous la licence GNU LGPL (GNU Lesser General Public License).
CondConfigParser
CondConfigParser est une bibliothèque Python réalisant une analyse lexicale et syntaxique qui peut être utile pour lire certains types de fichiers de configuration. Ce qui distingue CondConfigParser de modules bien connus tels que configparser et json est la possibilité de définir dans le fichier de configuration des variables et des conditions (à l'aide d'opérateurs booléens), ainsi que des sections dont le contenu n'est effectif que lorsqu'une condition particulière est remplie (« vraie »). Voici un exemple de fichier de configuration pouvant être analysé par CondConfigParser (et compris par FFGo, qui s'appuie sur CondConfigParser):
# Variable assignments { custom_start_pos = "parking" # "parking", "manual" or ... instruments = "IFR tutorial" # or "LOWI" or ... MERGED_OPTIONS = ["--airport=", "--aircraft=", "--parking-id=", "--runway=", "--carrier=", "--parkpos=", "--com1=", "--com2="] } # Default options (not subject to any condition) --enable-auto-coordination # not suitable for helicopters! --enable-terrasync --terrasync-dir=/path/to/your/TerraSync/directory # --timeofday=noon # --season=summer --enable-fullscreen # May be used to approach the selected airport or anything else (--fix, etc.) [ custom_start_pos == "manual" ] --offset-distance=80 --offset-azimuth=180 --altitude=8000 # initial altitude (in feet by default) --heading=180 # initial heading (in degrees) --vc=150 # initial speed (in knots) # Approach the Amsterdam Schiphol airport from the south [ custom_start_pos == "EHAM-appS" ] --offset-distance=10 --offset-azimuth=358 --altitude=4000 --heading=358 --vc=160 # Approach the Innsbruck airport from the northwest [ custom_start_pos == "LOWI-app" ] --fix=KTI08 --altitude=13000 --heading=137 --vc=120 # Instruments settings that may be useful when flying around LOWI [ custom_start_pos == "LOWI-app" or instruments == "LOWI" ] --prop:/instrumentation/nav/frequencies/selected-mhz=109.70 # OEJ #--prop:/instrumentation/nav/frequencies/standby-mhz= --prop:/instrumentation/nav/radials/selected-deg=66 --dme=nav1 --adf=413 # KÜHTAI (KTI) # Some radio frequencies used at Paris Charles-de-Gaulle airport [ airport == "LFPG" ] --com1=119.250 --com2=121.800 # Possible start place at a parking in LFPG [ custom_start_pos == "parking" and airport == "LFPG" ] --lat=49.0075192 --lon=2.5793183 --heading=220 # Instruments settings that can be used to follow the IFR tutorial of the # FlightGear manual [ instruments == "IFR tutorial" ] --prop:/instrumentation/comm/frequencies/selected-mhz=118.625 --prop:/instrumentation/comm/frequencies/standby-mhz=910.00 # FGCom self-test #--prop:/instrumentation/comm[1]/frequencies/selected-mhz= #--prop:/instrumentation/comm[1]/frequencies/standby-mhz= --prop:/instrumentation/nav/frequencies/selected-mhz=114.1 #--prop:/instrumentation/nav/frequencies/standby-mhz= --prop:/instrumentation/nav/radials/selected-deg=9 --prop:/instrumentation/nav[1]/frequencies/selected-mhz=116.8 --prop:/instrumentation/nav[1]/frequencies/standby-mhz=116.0 --prop:/instrumentation/nav[1]/radials/selected-deg=114 --dme=nav1
CondConfigParser est distribué sous la licence BSD dite « simplifiée » à 2 clauses. Pour de plus amples renseignements, vous pouvez visiter la page d'accueil de CondConfigParser.
FFGo
FFGo est un programme dérivé
(fork) de FGo!, un lanceur pour FlightGear.
Voir la page d'accueil de FFGo pour
de plus amples informations.
flo-check-homework
flo-check-homework est un programme dont le but est d'aider
les enfants dans leur apprentissage du calcul et des conjugaisons
(pour le moment). L'idée générale est la suivante : pour un certain
nombre de programmes (jeux...) configurés par l'administrateur,
flo-check-homework se lance automatiquement en lieu et place dudit programme et
ne donne accès à l'original qu'une fois un petit questionnaire
rempli de manière satisfaisante par le « client »
(c'est-à-dire, a priori, un enfant qui a besoin
d'apprendre les tables de multiplication et les conjugaisons les
plus courantes, pour faire simple).
flo-check-homework est écrit en Python avec la bibliothèque Qt. Il est distribué sous la licence GNU GPL version 2. Pour plus d'informations, je vous invite à lire le fichier README (en anglais). Vous pouvez télécharger flo-check-homework depuis ce site, ou bien l'installer directement à partir de PyPI avec une commande du type :
pip install flo-check-homework
à condition que pip soit installé sur votre système, ainsi que les dépendances nécéssaires à flo-check-homework (lesquelles sont documentées dans le fichier README).
flo-check-homework évolue au sein d'un dépôt Git qui peut être cloné à l'aide de la commande :
git clone https://github.com/frougon/flo-check-homework
Note : si vous souhaitez lancer flo-check-homework depuis un clone de ce dépôt, veuillez lire la section correspondante du fichier README.
Debian
Pendant mon temps libre, j'aime bien travailler sur la
distribution Debian. Vous
trouverez ci-dessous des lignes APT, à utiliser à vos risques et
périls, permettant de télécharger quelques packages Debian que j'ai
écrits ou recompilés (en particulier, des backports
pour wheezy destinés à
l'architecture amd64
) :
deb http://frougon.net/debian wheezy main contrib non-free deb-src http://frougon.net/debian wheezy main contrib non-free
Concernant FlightGear :
-
Le package flightgear backporté depuis unstable dépend de flightgear-data-all, qui lui-même dépend de plusieurs packages flightgear-data-*. Ces packages ne sont pas inclus ici car l'ensemble pèse plus de 900 Mo. Cependant, tous ces packages sont indépendants de l'architecture et, pour autant que vous ne mélangiez pas différentes versions (par exemple, des packages pour la version 2.10 avec des packages pour la version 2.12), vous pouvez les télécharger directement depuis testing ou unstable et les installer avec :
dpkg -i package.deb
ou bien avec la technique appelée APT pinning. Ceci doit être effectué avant d'installer flightgear.
Notez qu'il est également possible de compiler ces packages à partir de ce dépôt Git pour le package Debian flightgear-data en utilisant le tarball upstream « fgdata » disponible sur les miroirs FlightGear.
-
Le programme FFGo offre une interface très pratique pour lancer FlightGear.
PyXMMS et PyXMMS-remote [un peu vieux !]
PyXMMS est une interface Python
pour
XMMS, un lecteur multimédia libre
pour X-Window2. Depuis
la version 2.00, PyXMMS est structuré autour des deux composants
suivants :
-
un ensemble de bindings Python pour les fonctions
xmms_remote*
de la bibliothèque libxmms ainsi que quelques fonctions de plus haut niveau ; - une interface « pythonesque » pour gérer le fichier de configuration principal d'XMMS (ceci inclut la lecture et l'écriture).
En d'autres termes, PyXMMS permet de contrôler XMMS et de gérer son fichier de configuration principal depuis un programme écrit en Python.
Vous pouvez télécharger PyXMMS ou lire sa documentation (en anglais).
PyXMMS est distribué sous la licence GNU GPL version 2.
PyXMMS-remote est un programme écrit en Python permettant de contrôler XMMS avec une interface de type ligne de commande, ce qui est très pratique dès qu'on veut interfacer ou automatiser. PyXMMS-remote a besoin de PyXMMS pour fonctionner correctement.
Vous pouvez télécharger PyXMMS-remote ou lire sa documentation (en anglais).
PyXMMS-remote est distribué sous la licence GNU GPL version 2.
En vrac
Si vous êtes curieux, faites donc un petit tour
dans mon
répertoire de projets et dans mon
dépotoir pour code Python.
Documents
Tutoriel Emacs
J'ai écrit un tutoriel pour GNU Emacs, un éditeur de texte extrêmement puissant et portable (il fonctionne parfaitement sur la plupart des Unices, sous Windows et fonctionne au minimum en mode texte sur MacOS X, en ce qui concerne les systèmes d'exploitations « actuels »).
Ce genre de programme permet d'éditer des fichiers texte, c'est-à-dire des fichiers sans format particulier, contenant directement du texte au sens « suite de caractères » (lettres, chiffres, espaces, ponctuation). Ces fichiers sont utilisés couramment par les programmeurs mais ont de nombreux autres usages.
Cela dit, éditer du texte n'est pas une fin en soi. Si vous avez besoin d'un éditeur de texte, vous vous en apercevrez très vite et penserez (j'espère) à Emacs.
Le tutoriel indiqué ci-dessus présente les notions de base d'Emacs ainsi qu'une introduction à ELisp, un langage de programmation permettant de repousser les possibilités d'Emacs... très loin. :)
Ce document est à jour pour Emacs 23.
Présentation de LaTeX2e
TeX est un programme servant à produire des documents très soignés, à l'origine principalement pour l'impression, mais aujourd'hui aussi pour la lecture sur écran grâce essentiellement au format PDF3.
LaTeX est un ensemble de macros TeX très utilisé aujourd'hui. Il en existe d'autres, comme ConTeXt. Pour la plupart des documents, il est plus facile d'écrire en LaTeX (ou ConTeXt) que directement en TeX.
À la suite d'une soirée à l'École Centrale Paris où j'ai tenté d'initier à LaTeX quelques élèves intéressés, j'ai écrit cette petite présentation de LaTeX en guise de compte-rendu et de point de départ pour un apprentissage sérieux.
Ce document est raisonnablement à jour dans la mesure où ce qu'on y trouve est (sauf erreur) encore vrai, mais il ne parle pas tellement du format PDF, qui est un format de sortie très intéressant, aujourd'hui probablement le format de sortie privilégié des outils basés sur TeX. Il existe d'autres très bons documents d'initiation à LaTeX en français, qui sont bien sûr mentionnés dans le mien, comme la Courte (?) introduction à LaTeX2e que l'on trouvera dans la partie consacrée à l'univers TeX du site du Loria.
Notes
1. Ou même des interfaces graphiques simples avec le backend Xdialog, tant que que celui-ci n'est pas trop incompatible avec dialog.
2. X-Window est le système graphique standard sur tous les Unices (les systèmes d'exploitation de la famille Unix, dont le plus connu aujourd'hui est GNU/Linux).
3. Avant le succès (et l'existence) du format PDF, le format PostScript servait aussi à ces deux usages, mais PDF a apporté pas mal de fonctionnalités qui ne peuvent s'exprimer qu'à l'écran, comme le fait de pouvoir cliquer sur une référence croisée pour se rendre à l'endroit où elle pointe (par exemple dans une table des matières).