Skip to content
This repository has been archived by the owner on Jun 26, 2018. It is now read-only.

Propositions

Louis edited this page Jun 16, 2018 · 2 revisions

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

Différents projets

Situation actuelle

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.

Proposition

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.

URLs

Les urls du projet seraient :

Bibliothèque, API

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

Python

Python3

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.

Utilisation de jinja2

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.

Django

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.

Exercices

  • 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 exemple tags = ["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 et tex_answer peuvent renvoyer des chaînes plutôt que des listes.

LaTeX

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

Proposition d'interface utilisateur de la version en ligne

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 sur Supprimer à 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.