---
# System prepended metadata

title: Projet flashcards

---


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

