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 :

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...

Python est en train de digérer une perle et un rubis.

Assez parlé, passons aux choses sérieuses. :)

TDBSF, the Trivial Database Search Facility

Contient du Python.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

Contient du Python.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

Made with Python.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

Contient du Python.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 :

PyXMMS et PyXMMS-remote [un peu vieux !]

Contient du Python.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 :

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

Contient du Python.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).