Bonjour mes chers lecteurs,
En préambule, je vais vous faire part de l'habituelle pensée que j'ai à chaque fois que j'écris une entrée sur ce blog depuis quelques temps : "pfff, il encore falloir leur expliquer avec finesse que si tu n'écris pas sur ce blog, c'est simplement parce que tu n'en a pas envie." Comme vous le constatez, finalement, je ne le fait pas. Bref, passons maintenant au sujet.
Pot Commun est un petit programme destiné à suivre et gérer les dépenses, et donc les dettes, que génère un voyage entre amis. Au supermarché, en général, seul une personne paie pour les autres. De même, au restaurant, il est plus simple qu'une seule personne règle l'addition pour tout le monde. Bien évidemment, au final, les gens ne paieront que ce qu'ils ont effectivement consommés, par un jeu de remboursement entre personnes concernées, ce jeu n'ayant lieu qu'une seule fois.
Actuellement, le programme dispose d'une interface faite en ncurses, c'est à dire en mode texte sur un terminal. Pourquoi ce choix ? Historiquement, je pensais que ça serait plus simple qu'une interface graphique. Après réflexion et écriture de code, je pense conclure que finalement non, ce n'est pas plus simple. Et je peux même expliquer pourquoi.
Toutes les bibliothèques d'interface graphiques sont fournies avec différents outils et widgets (des boutons, des cases à cocher, des menus, etc) qui permettent de faire des affichages homogènes et propres rapidement. On ne se soucie pas des opérations de dessins. Ncurses, par contre, ne fournie que des primitives de dessin, avec une vague gestion de "fenêtre", et ça s'arrête là. Tout le reste (case à cocher, champs texte, gestion des défilements, menu, etc), j'ai du le faire, et c'est ce qui m'a prit le max de temps.
Si c'était à refaire, je partirai sur une autre base, probablement avec Qt, comme tout le monde, finalement. Cela dit, l'expérience a été très enrichissante puisque finalement, j'ai du écrire un "mini-framework", chose que l'informatique moderne vous incite à ne jamais faire, puisque de toute façon, ça sera fait par d'autres.
Enfin, pour revenir sur le sujet, j'ai fait un peu le tour des applications existantes qui proposent ce genre de fonctionnalités. Je dois dire que je suis souvent dessus du manque d'options disponibles pour répondre à des problèmes pourtant simple : chacun paie ses plats dans un restaurant, mais tout ceux qui ont bu du vin se partagent la bouteille. Cas d'utilisation classique, mais pas une seule solution "concurrente" ne permet de faire cela simplement. D'où Pot Commun.
C'est encore en développement, et ce n'est pas encore empaqueté. Mais ça marche très bien.
Pour les aventuriers qui veulent tester, le programme est écrit en Python, il vous faudra donc :
- une plateforme unix (et oui, ncurses n'existe pas sous Windows)
- un interpréteur Python (version 2.7 par exemple)
- SQLAlchemy (0.6)
Vous pouvez télécharger la dernière version ici ou aller voir la page du projet. Vous pouvez aussi cloner avec git.
Et ça se lance très simplement :
$ ./main-curses