# 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 ?