-
Notifications
You must be signed in to change notification settings - Fork 8
Propositions
Avertissement : Ce document n'est pas la feuille de route officielle de pyromaths. Il n'est qu'une piste de réflexions lancée par un développeur (qui n'est pas le développeur principal).
Actuellement, le projet est divisé en deux dépôt (dont un n'est pas public) :
- pyromaths : qui contient le client en ligne de commande, le client avec interface graphique, et les exercices.
- django : le site web, qui contient le site en lui même (les textes, etc.), et la version en ligne.
Problèmes :
- Il n'est pas possible d'installer Pyromaths sans les dépendances graphiques (QT).
- Le site web mélange la version en ligne et le contenu (les textes). Il nécessite une base de données, un système d'authentification pour pouvoir modifier le site web, etc.
- Le site web requiert que le dépôt pyromaths soit présent à un endroit précis. Il devrait le requérir simplement comme un dépendances python.
Diviser le projet en les dépôts suivants, tous publics.
- pyromaths : version en ligne de commande, et exercices. Peu de dépendances (en tout cas, pas de dépendances à une interface graphique, ni à Django). C'est une version légère, qui peut être importée comme une bibliothèque, et est disponible sur pypi (et peut donc s'installer avec
pip install pyromaths
). - pyromaths-qt : version graphique, qui a
pyromaths
comme dépendance. - pyromaths-enligne : version django, qui ne contient que la version en ligne de pyromaths (et pas le reste du site web). Elle a besoin de
pyromaths
comme dépendances. - pyromaths-www : site web, généré par un générateur de site statique (pelican, nikola, hyde, lektor, etc.). L'avantage est que le site web est une série de fichiers, qui peu être accessible et modifié (proposition de pull-request) par n'importe qui.
Les urls du projet seraient :
- http://github.com/pyromaths : Comme aujourd'hui, les dépôts du code.
- http://www.pyromaths.org : Le site web (sans la version en ligne).
- http://enligne.pyromaths.org : Le générateur en ligne.
- http://doc.pyromaths.org : Alias vers http://pyromaths.readthedocs.org. Readthedocs permet de construire automatiquement la documentation à chaque push.
- http://forum.pyromaths.org : Aucun changement.
Pyromaths devrait être prévu pour être appelé comme une bibliothèque externe. Il devrait fournir (au moins) deux fonctions (ou méthodes d'une classe à définir) :
-
generate_tex()
: Génère et renvoit le code LaTeX des exercices demandés (énoncé seul, corrigé seul, ou les deux, selon les options ; la graine du générateur aléatoire peut être donnée en argument). -
write_tex()
: Idem, mais écrit le résultat dans un (des) fichiers. -
write_pdf()
: À peu près les mêmes options que précédemment, mais génère le (les) pdf. Toute la compilation est fait dans un fichier temporaire, et seul le résultat est copié dans le dossier courant.
Des fonctions/méthodes sont fournies pour manipuler la liste des exercices (au moins pour accéder à la liste).
Passer à Python3. Python2 sera obsolète en 2020. Cela permettrait de simplifier grandement la gestion de l'unicode.
J'ai testé, et cela se fait sans trop de problèmes pour la partie en ligne de commandes (je n'ai pas testé le reste). La seule partie un peu compliquée est la partie « mise en forme » (c'est-à-dire le fichier TexFiles.py, et la fonctino copie_tronq_modele), mais celle-ci peut-être remplacée par le moteur de template jinja2 déjà utilisé pour les exercices.
Comme décrit dans le paragraphe précédent, utilisation de jinja2 plutôt que du moteur maison « mise en forme », qui marche plus ou moins, mais serait plus propre (et plus facilement maintenable) avec une bibliothèque robuste comme jinja2.
Mise à jour du site web django : il utilise une version obsolète de django, et depuis la version 2, django ne fonctionne plus avec python2.
- L'attribut
description
des exercices est à supprimer : il fait doublon avec la docstring. Pyromaths devrait prendre comme description la première ligne de la docstring, si elle existe. - Un attribut (par exemple
hidden=True
définit si l'exercice est en production ou non, pour les classes abstraites, les exercices en cours d'écriture, etc.). - Remplacer l'attribut
niveau
par une liste de tags, qui mélangent le niveau et le thème (par exempletags = ["première S", "fonctions", "analyse", dérivée", "variations"]
). Cela permet d'avoir des exercices qui appartiennent à plusieurs niveau (un exercice difficile d'une classe peut être un exercice facile du niveau suivant), et de trier les exercices par thèmes. - Les méthodes
tex_statement
ettex_answer
peuvent renvoyer des chaînes plutôt que des listes.
Passage à pdflatex (plutôt que latex+dvipdf), voire à lualatex, qui est le futur de LateX : pdflatex n'est plus modifié que pour corriger des bugs ; lualatex est activement développé (source).
L'interface présente trois colonnes :
- À gauche, la liste des tags.
- Au milieu, la liste des exercices disponibles.
- À droite, la liste des exercices à générer.
Manipulations
- Cliquer sur
Ajouter
à côté d'un exercice de la colonne du milieu l'ajoute à la fin de la liste des exercices (cela peut être fait plusieurs fois pour ajouter plusieurs exercices identiques) ; cliquer surSupprimer
à côté d'un exercice de la colonne de droite le supprime de la liste. - Cliquer sur + ou - à côté d'un exercice de la liste de droite ajoute ou enlève un exemplaire de cet exercice.
- Il est possible de glisser-déposer les exercices de la colonne du milieu vers la colonne de droite. Cela permet de les placer directement au bon endroit dans la liste pour les trier.
- Il est possible d'ordonner la liste de droite par glisser-déposer.
- En cochant/décochant les tags de la colonne de droite, la colonne du milieu n'affiche que les exercices qui correspondent : il est alors possible de les trier par thèmes et par niveau.