# Projet flashcards ## https://hackmd.io/@a-tsioh/TALA230Bprojet le CODE SE TROUVE DANS /lexique/programmes/ ## 1 Définir une arborescence pour notre projet Dans votre dossier personnel (sur le serveur), reproduire l'arborescence ci-dessous. (une première ébauche de script `generer_cartes.sh` se trouve dans le dossier `/lexiques/`) ``` Projet/ ├── boites │   ├── 1 │   ├── 2 │   ├── 3 │   └── 4 ├── cartes ├── data │   └── teochew.csv ├── doc ├── programmes │   └── generer_cartes.sh └── session ├── 1 ├── 2 ├── 3 └── 4 ``` ## 2 Vos données copier votre fichier de données dans le dossier `./data/` ## 3 Améliorer le générateur de cartes une carte consiste en deux diapo dans un format lisible par la commande `mdp`(deux zones de markdown séparées par une ligne de tirets `---------`) Il faut : - valider les deux arguments (un fichier existant et une liste de numéro de colonnes servant de question) - à chaque tour de boucle `while`, séparer les colonnes (chaque cellule ira dans une variable) pour simplifier leur utilisation) - améliorer l'affichage des cartes au format markdown - afficher le contenu des colonnes demandées au recto de la carte - afficher toutes les données au verso de la carte ## 4 Simuler une partie «à la main» - copier les cartes dans la première boite (import de nouvelles cartes) - choisir au hasard (commande `shuf`) - 4 cartes de la boite 1 - 3 cartes de la boite 2 - 2 cartes de la boite 3 - 1 carte de la boite 4 - déplacer ces cartes dans les sous-dossiers 1~4 de `./session/` correspondants - lister toutes les cartes des sous-dossiers de `./session/` dans un ordre aléatoire (`shuf` à nouveau) - afficher les cartes une par une dans cet ordre (avec `mdp`), demander à l'utilisateur si il connaissait la réponse. - si oui, on déplace la carte vers la boite suivante - si non, on déplace la carte dans la boite précédente - si on arrête avant d'avoir fini les cartes des la session, il faut pouvoir les remettre dans leur boite initiale. ## 5 Écrire trois programmes correspondant aux actions effectuées en 4. - `clean_session.sh` pour nettoyer une session (vider les sous-dossier `./session`) - `init_session.sh` préparer une session (remplir les sous-dossier de `./session/`) - `run_session.sh` lancer une session de questions (ordre aléatoire, avec remise des cartes dans les boites correspondantes) ### Supplément Si vous souhaitez afficher du HTML, vous pouvez créer des fichiers dans le dossier `~/html/`. ils seront visibles à l'adresse `http://tala230b.magistry.fr/~<login>/<nom-de-fichier>` Si aucun nom de fichier n'est donné, le serveur essaiera d'envoyer le fichier `~/html/index.html` # Consignes pour le rendu ## Les programmes (a minima) Votre sous-dossier `programmes` devra contenir les scripts suivants: - `generer_cartes.sh` pour créer les cartes à partir de votre tableau - `clean_session.sh` pour nettoyer une session (vider les sous-dossier `./session` en remettant les cartes dans leurs boites initales) - `init_session.sh` préparer une session (remplir les sous-dossier de `./session/`) - `run_session.sh` lancer une session de questions (ordre aléatoire, avec remise des cartes dans les boites correspondantes) ## La documentation Le sous dossier `doc` contiendra plusieurs fichiers pour décrire: - les objectifs généraux (et votre lexique) - le fonctionnement de chaque programme (explication du code en français) - un mode d'emploi (décrire comment utiliser les programmes et le déroulement d'une partie) ## Aller plus loin En plus des codes de base discutés pendant les cours, vous pourrez par exemple: - améliorer les programmes pour vérifier que les bons arguments sont bien fournis: tests en début de programme et commande `exit` pour mettre fin à son execution après un `echo "message d'erreur"` en cas de problème (ex: fichier manquant, argument en trop...) - écrire un *log* (journal) qui donne des statistiques sur la progression de l'utilisateur (vous pouvez utiliser la commande `date` pour obtenir la date de la session en cours) - écrire les cartes dans deux fichiers `~/html/questions.html` et `~/html/réponses.html` si vous préférez un affichage sur le web - Que faire si l'utilisateur répond ni Y ni N à une question de session ?