: C5 is Compiler Course Class in the Cloud.

Pourquoi utiliser C5 ?

Empêcher toute tricherie lors des examens sur machine.

Avoir un environnement TP immédiatement fonctionnel.

En effet :

Fluidifier le déroulement des examens.

La copie d'écran montre l'interface du surveillant qui est présentée plus loin.

Création d'une session de travail.

Comment définir un sujet.

L'ensemble de l'environnement est programmé en Python.

Pour chaque question il y a une classe dont les méthodes définissent la question. Voici les méthodes dans l'ordre d'appel lorsque l'étudiant arrive sur la question :

class Q1(Question):
    """Question 1"""
    def question(self):
        return "<p>Vous devez faire afficher «Bonjour»</p>"
    def tester(self):
        self.display('<p>Dans votre code source on devrait trouver :</p>')
        self.check(self.worker.source, [
            ['print'  , 'Le nom de la fonction «print» pour afficher la valeur'],
            ['Bonjour', 'Le texte «Bonjour» que vous devez afficher'],
            ])
        if self.worker.execution_result == 'Bonjour\n':
            self.next_question()
    def default_answer(self):
        return "# Tapez votre programme ici :\n"

Un sujet complet est une liste de questions gérées par un unique compilateur. La dernière ligne du fichier définie la liste des questions, si elle n'est pas indiquée alors toutes les questions du fichier sont proposées à l'étudiant :

Session([Q0(), Q1(), Q2(), Q3(), QEnd()])

Essayer le sujet.

On suppose que :

Pour le mettre en production la première fois et l'essayer :

Modifier le sujet et paramétrer la session.

Ensuite il ne reste qu'à aller dans l'onglet «Try» pour voir la nouvelle version.

Ajouter des images dans un sujet.

Dans le paramétrage de la session, choisissez Upload a new media dans le menu «Actions». Cela vous affichera en haut de page le code HTML à mettre dans la question pour afficher l'image. Les images sont partagées entre les différentes sessions C5. Par contre une fois que la session ayant enregistrée l'image est terminée, l'image n'est plus accessible par les autres sessions. Les correcteurs ont bien entendu accès aux images même quand la session est terminée.

On peut aussi héberger l'image sur un autre site web. Le tag IMG doit alors contenir crossorigin et l'autre site web doit contenir dans le .htaccess du répertoire de l'image :

Header set Access-Control-Allow-Origin "https://c5.univ-lyon1.fr"
Remplacez par l'adresse de votre serveur C5 et ne mettez PAS le '/' final.

Outils pour définir une question.

Attributs de la question.

Méthodes et fonctions utilitaires.

Tous les attributs de configuration.

Les colonnes contiennent le nom de l'attribut, sa valeur par défaut et un texte d'explication.

Session options
start'2000-01-01 00:00:00'Start date of the session
stop'2100-01-01 00:00:00'Stop date of the session
START>END
state'Draft'
┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┓
┃ State  ┃    Visible by      ┃    Usable by       ┃
┣━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━┩
┃Draft   ┃creator admin       │creator admin       │
┣━━━━━━━━╉────────────────────┼────────────────────┤
┃Ready   ┃                    │                    │
┃  before┃all                 │creator admin grader│
┃  while ┃all                 │all if no checkpoint│
┃  after ┃all except students │creator admin grader│
┣━━━━━━━━╉────────────────────┼────────────────────┤
┃Grade   ┃creator admin grader│creator admin grader│
┣━━━━━━━━╉────────────────────┼────────────────────┤
┃Done    ┃creator admin grader│creator admin grader│
┃        ┃Students if allowed │                    │
┃        ┃by admin and grader │                    │
┣━━━━━━━━╉────────────────────┼────────────────────┤
┃Archive ┃creator admin       │creator admin       │
┗━━━━━━━━┹────────────────────┴────────────────────┘
checkpoint0Requires students to be placed on the map (examination mode)
allow_copy_paste0Copy/paste allowed (if not allowed students must be in full screen mode)
save_unlock0Saving a question unlock next
automatic_compilation1Compilation is automatic
feedback0Maximum level of student feedback allowed to teachers
grading_done1Graders indicate «grading done» in place of the grading level
allow_ip_change0Allow IP change (bad Internet connection)
sequential1Questions must be answered from first to last
highlight'#FFF'Background color in the student and teacher session list
Checkpoint placement interface
display_student_filter0Display an INPUT field containing a list of student IDs to highlight
display_my_rooms1Add a toggle to display only the rooms I dragged student into
display_session_name0Display the session name
default_building''Preselected building name
Student interface
positions
{
  'question': [1, 29, 0, 30, '#EFEF'],
  'tester': [1, 29, 30, 70, '#EFEF'],
  'editor': [30, 40, 0, 100, '#FFFF'],
  'compiler': [70, 30, 0, 30, '#EEFF'],
  'executor': [70, 30, 30, 70, '#EEFF'],
  'time': [80, 20, 98, 2, '#0000'],
  'index': [0, 1, 0, 100, '#0000'],
  'editor_title': [0, 0, 0, 0, '#FFFF'],
}
For each bloc :
[Bloc X%, Width%, Y%, Heigth%, background color]
forget_input0Forget old input values on execution
coloring1source highlighting is done
theme'a11y-light'Syntaxic coloring theme for source code
display_local_save0display 'icon_local' to download the current source code
display_home1display 'icon_home'
display_local_git1display 'icon_git' to download a repository of all history
display_local_zip1display 'icon_local' to download a repository of all questions
display_timer1display the timer
display_compile_run1display the F9 button
display_tag1display 'icon_tag'
display_history1display version history
display_indent1display the F8 button
display_line_numbers1display line numbers
Popup messages
forbiden"Coller du texte copié venant d'ailleurs n'est pas autorisé."Alert
close'Voulez-vous vraiment quitter cette page ?'Alert
stop_confirm"Vous voulez vraiment terminer l'examen maintenant ?"Alert
stop_done"<h1>C'est fini.</h1>"Alert
good
[
  'Bravo !',
  'Excellent !',
  'Super !',
  'Génial !',
  'Vous êtes trop fort !',
]
Alert on success
Bloc titles
question_title'Question'Bloc title
tester_title'Les buts que vous devez atteindre'Bloc title
editor_title'Code source'Bloc title
compiler_title'Compilation'Bloc title
executor_title'Exécution'Bloc title
Labels of button and toggles
editor_indent'Indent(F8)'Button label
compiler_title_toggle'Automatique (F9)'Button label
compiler_title_button'Maintenant ! (F9)'Toggle label
executor_title_button'GO!(F9)'Button label
icon_home'🏠'Button label
icon_save'📩'Button label
icon_local'💾'Button label
icon_git'<b style="font-size:50%">GIT</b>'Button label
icon_tag'TAG'Button label
icon_stop'Terminer<br>Examen'Button label displayed if checkpoint
Time countdown
time_running'Fini dans'Time message
time_done'Fini depuis'Time message
time_seconds' secondes'Time message
time_days' jours'Time message
time_d' j 'Time message
time_m' m 'Time message
time_h' h 'Time message
Options defined by the compiler used by the course
compiler''Compiler to use (should not be changed):
«g++» «gcc» «racket»
compile_options
[
]
Compile options:
«-Wall» «-pedantic» «-pthread» «-std=c++11» «-std=c++20»
ld_options
[
]
Libraries to link with:
«-lm»
language''Language to use for syntaxic coloring:
«cpp» «python» ...
extension''Source code filename extension for ZIP and GIT: «cpp», «py»...
filetree_in
[
]
Initialize file tree [['foo', 'content'], ['BAR/1', 'one']]
filetree_out
[
]
File contents to get as ['foo', 'BAR/1']
allowed
[
]
System call always allowed for g++/gcc, no need to specify them: clock_gettime close exit exit_group fstat futex lseek mmap munmap newfstatat openat read write

System calls allowable for g++/gcc: access arch_prctl brk clock_nanosleep clone clone3 execve getpid getrandom gettid madvise mprotect pipe pread64 prlimit64 rseq rt_sigaction rt_sigprocmask sched_yield set_robust_list set_tid_address tgkill open

Access tab
admins''Administrators with all the access rights
graders''Teachers allowed to try the session, grade and place the students
proctors''Can only place the students
expected_students''The login list of expected students, the session is in bold in their session list.
expected_students_required0Unexpected students do not see the session, but a teacher can send them the link to it
tt''The logins of student with ⅓ more time

Voici comment paramétrer les attributs précédents :

Langages supportés

Il est nécessaire d'avoir un compilateur du langage écrit en JavaScript ou bien de déporter la compilation et/ou l'exécution sur le serveur C5 :

Langage Compilateur Remarque Exemple de cours
JavaScript compile_js.py Compilation et exécution nativement
dans le navigateur web.
COMPILE_JS/
introduction.py
Python compile_python.py Utilise Brython pour compiler
et exécuter dans le navigateur web.
COMPILE_PYTHON/
introduction.py
SQL compile_sql.py Utilise AlaSQL pour compiler
et exécuter dans le navigateur web.
COMPILE_SQL/
test.py
C++ compile_ccp.py Utilise JSCPP pour compiler
et exécuter dans le navigateur web.
ATTENTION : pas de classe, structure
ni de passage par référence.
COMPILE_CPP/
test.py
C++ compile_remote.py Il ne compile pas lui-même
mais délègue la compilation avec
gcc ou g++ ainsi que
l'exécution au serveur web.
  • Supporte cin.
  • Possibilité de graphiques
    interactifs avec Grapic.h.
  • Seul les appels systèmes
    non dangereux sont possibles,
    pas de problème de sécurité.
  • Temps et espace limité
    pour la compilation
    ainsi que l'exécution.
COMPILE_REMOTE/
test.py
Racket compile_remote.py Le serveur distant peut aussi
exécuter du LISP dans une
sandbox d'un processus Racket.
COMPILE_REMOTE/
racket.py
Lisp compile_lisp.py Utilise LIPS pour compiler
et exécuter dans le navigateur web.
COMPILE_LISP/
conway.py
Texte compile_text.py Ce compilateur ne fait rien. COMPILE_TEXT/
demo.py

Avec COMPILE_REMOTE et COMPILE_LISP, la touche F8 permet de reformater le code source, mais cela casse le undo.

Pages d'accueil

Les utilisateurs sont :

La page d'accueil va être différente pour ces différentes catégories de personnes.

Étudiant.

L'étudiant voit la liste de toutes les sessions actives. Il doit cliquer sur la bonne si l'enseignant ne lui a pas donné le lien direct.

Si la session n'a pas de salle d'attente on considère qu'elle n'est pas en mode examen et que l'étudiant peut directement commencer à travailler. Il se retrouve sur la page avec l'éditeur de source qui est présenté dans la première copie d'écran tout au début.

Si la session possède une salle d'attente, cela affiche :

Donnez votre nom à l'enseignant pour qu'il vous ouvre l'examen

Quand l'enseignant a placé l'étudiant sur son plan, l'étudiant recharge la page et cela affiche :

Début dans XXX secondes.

La page se recharge à la fin du compte à rebour.

Root C5.

L'utilisateur root est celui qui possède tous les droits de paramétrage sur C5.

Cette configuration est dans le fichier c5.cf

Administrateur C5, Administrateur session, Correcteur et surveillants.

Ces personnes voient la liste des sessions les concernant classées dans différents blocs :

État Proposée à Utilisable par
Brouillon
Draft
Créateur+admins Créateur+admins
Prête
Ready
Avant Tout le monde Créateur+admins+correcteurs
Pendant Tout le monde Tout le monde
Après Tous sauf étudiants
Le surveillant doit pouvoir rouvrir
Créateur+admins+correcteurs
Correction
Grade
Créateur+admins+correcteurs Créateur+admins+correcteurs
Terminée
Done
Créateur+admins+correcteurs
Étudiants s'il y a un retour.
Créateur+admins+correcteurs
Étudiants s'il y a un retour.
Archivée
Archive
Créateur+admins Créateur+admins

Chaque bloc contient les informations suivantes :

Au desssous du tableau on trouve des actions dépendant de la personne connectée.

Cette configuration est enregistrée sous le nom COMPILE_*/nom_sujet.cf le sujet est dans COMPILE_*/nom_sujet.py et les logs des étudiants dans le répertoire COMPILE_*/nom_sujet.

Les autres pages de C5.

Administrateur : éditeur de session.

Il permet de définir tous les paramètres de la session en cours. Les informations concernant la configuration sont sauvegardés dès que l'on sort du champ qui a été modifié. Un retour sur l'enregistrement est affiché en haut, si valeur reste rouge c'est qu'elle n'a pas pu être enregistrée.

A droite des onglets on trouve un menu permettant de faire des actions.

Administrateur : onglet «Export/Stat».

Les administrateurs de session peuvent regarder le détail de la session. Pour chaque étudiant on a le détail et le résumé de toute la colonne sur la dernière ligne (importable directement dans TOMUSS).

Au dessous de la table, les listes des étudiants qui n'ont pas été corrigés ou bien avec une correction incomplète. Les listes sont aussi affichées en triant par correcteur.

Surveillant : placement des étudiants.

Le surveillant voit la liste des sessions qu'il doit surveiller, Il clique alors sur Place pour gérer la salle d'attente. Les enseignants peuvent tester la session même s'ils n'ont pas été placés sur le plan.

La salle d'attente affiche un menu à gauche de l'écran :

Les ordinateurs en rouge sont ceux avec un problème, les surveillants peuvent déclarer les problèmes et on peut aussi indiquer que le poste a été réparé.

Concernant l'étudiant placé sur le plan :

Surveillant : administrer la session, regarder le code.

Quand on clique sur un étudiant on peut accéder à la dernière version de son travail. On peut utiliser un ascenseur temporel pour voir l'évolution de ce qu'il a fait. Le déplacement dans le temps est instantané. Les zones rouges indiquent les moments où le focus a été perdu.

Le code source s'affiche alors au dessous de la barre d'ascenseur.

Le bouton «Clôturer examen» doit être utilisé quand il quitte la salle afin qu'il ne puisse pas continuer l'examen à l'extérieur. L'étudiant a un bouton «Terminer Examen» sur l'éditeur de source pour terminer l'examen. Une fois l'examen clôturé, le bouton devient «Rouvrir l'examen».

On peut indiquer le temps bonus total pour que l'étudiant termine l'examen. C'est utile si l'étudiant arrive en retard ou bien s'il y a un problème technique pendant l'examen. Les tiers-temps ont automatiquement du temps en plus qui n'apparaît pas ici.

Ont ferme la popup en cliquant sur × ou bien en appuyant sur la touche escape.

Le bouton «Noter l'étudiant» permet de noter le source de l'étudiant :

Correcteur : notes, commentaires et retours.

Il clique sur l'étudiant placé et arrive sur l'éditeur C5 avec le barème de notation affiché. Il n'a plus qu'à cliquer pour mettre les notes qui sont immédiatement enregistrées. Si 2 enseignants notent en même temps le même étudiant, ils perdent une seule note dans le pire cas.

Le correcteur peut ajouter des commentaires aux lignes et envoyer un mail à l'étudiant avec son programme commenté.

Le correcteur peut essayer le code de l'étudiant pour le tester et même le modifier temporairement pour voir ce que cela donne.

Le correcteur peut décider de corriger autre chose que la dernière version sauvegardée par l'étudiant :

Une fois la correction faite, il indique ce qu'il veut diffuser à l'étudiant.

Le gestionnaire de session indique la même chose de son coté pour l'ensemble des étudiants et ce qui est appliqué est ce sur quoi ils sont d'accord, donc le minimum des 2 quantités d'information.

Sur la plan, un 👁 indique les informations dont la diffusion est autorisé par le correcteur.

permet d'ouvrir la messagerie afin de composer un message pour l'étudiant. Le corps du message indique que l'étudiant peut trouver la correction sur C5, avec un lien direct sur celle-ci.

Guides rapides d'utilisation.

Pour les différents intervenants.

Le responsable de la session.

Pour lancer une session d'examen :

Après la session d'examen :

Le surveillant.

Il est recommander d'envoyer un mail aux surveillants, pour leur expliquer leur travail.

Le correcteur.

On suppose que la liste des correcteurs ainsi que le barème ont été indiqués dans le paramétrage de la session.

Installation et administration de C5.

Installer C5.

Lancez ces commandes (Ubuntu) :

sudo apt update
sudo apt install python3-websockets python3-aiohttp astyle curl npm racket zip # nginx certbot
git clone https://github.com/texcoffier/C5.git
cd C5
make

Si tout s'est bien passé, une page web s'ouvre sur l'interface d'administration. Vous pouvez alors cliquer sur «Session» pour choisir une session.

Configuration et gestion C5.

La configuration de C5 est un script exécutable, vous pouvez en créer autant que vous voulez. Il est conseillé de faire une configuration pour le développement local et une configuration pour la production. Dans tous les cas vous lancez les commandes sur votre machine de développement, elle seront éventuellement exécutées via SSH sur le serveur de production. On va supposer que vous appeliez votre configuration c5, voici ce que vous devez faire :

Plus rarement utilisé :

Configuration NGINX.

Il faut remplacer /WebSocket/, 4201, 4202 par les bonnes valeurs.

server {
    listen 443 ssl;
    server_name c5.univ-lyon1.fr;
    ssl_certificate /etc/letsencrypt/live/c5.univ-lyon1.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/c5.univ-lyon1.fr/privkey.pem; # managed by Certbot
    location ~ /WebSocket/ {
        rewrite ^/WebSocket/(.*) /$1 break;
        proxy_pass http://127.0.0.1:4202;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection Upgrade;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    location ~ {
        proxy_pass http://127.0.0.1:4201;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
  }
            

Développement de C5.

Organisation des sources.

Légende :

Ordre alphabétique des fichiers.

127 Administre C5 sur la machine locale (même paramètres que utilities.py).
BUILDINGS/Ariane
BUILDINGS/Grignard
BUILDINGS/Nautibus
BUILDINGS/empty
Les plans des bâtiments. Empty est pour la salle privée dans enseignants.
COMPILE_CPP/test.py Exemple d'utilisation de compile_cpp et de récupération des informations concernant la place de l'étudiant dans la salle.
COMPILE_JS/example.py Un exemple minimaliste de cours pour commencer.
COMPILE_JS/introduction.py Mini cours de JavaScript.
COMPILE_LISP/conway.py Un exemple de programme LISP.
COMPILE_PYTHON/editor.py C'est l'éditeur interactif de sujet. Les sujets étant écrits en Python, il est nécessaire de les éditer et tester dans l'environnement Python.
COMPILE_PYTHON/introduction.py Un mini cours Python.
COMPILE_REMOTE/errors.py Une série d'exercices dans lesquels l'étudiant doit corriger des erreurs de syntaxe.
COMPILE_REMOTE/files.py Exemple de test sur la lecture et l'écriture de fichiers.
COMPILE_REMOTE/grapic-chien.png Média utilisé dans les exemples Grapic.
COMPILE_REMOTE/grapic.py Les exemples Grapic pour faire des applications graphiques.
COMPILE_REMOTE/racket.py Un exemple utilisant l'interpréteur Racket sur le serveur.
COMPILE_REMOTE/test.py Exemple d'utilisation de compile_remote.
COMPILE_SQL/test.py Exemple d'utilisation de compile_sql pour tester s'il fonctionne.
COMPILE_TEXT/demo.py Exemple d'utilisation de compile_text pour la saisie de texte libre.
DOCUMENTATION/c5.svg Lien vers «c5.svg»
DOCUMENTATION/create_video Script shell à éditer pour créer des vidéos
DOCUMENTATION/favicon.ico Lien vers «favicon.svg»
DOCUMENTATION/flyer.html Un diaporama pour une présentation orale de C5.
DOCUMENTATION/index.html Cette page d'explication.
DOCUMENTATION/
screen-admin.(png|svg)
screen-checkpoint.(png|svg)
screen-course.(png|svg)
screen-editor.(png|svg)
screen-grading.(png|svg)
screen-python.(png|svg)
screen-root.(png|svg)
screen-session-editor.(png|svg)
screen-src.png
screen-student.(png|svg)
screen-time-travel.(png|svg)
Graphiques utilisées par la documentation.
DOCUMENTATION/
tuto_student.webm
tuto_teacher.webm
Tuto vidéo complètement obsolette.
Grapic.h Fourni la bilbiothèque Grapic à C5
Makefile Utilisé par utilities.py, pas directement.
README.rst Page d'accueil pour GitHub.
adm_course.py Page d'accueil du cours avec les statistiques étudiants.
adm_root.py Page d'accueil des administrateurs C5.
adm_session.css
adm_session.py
Éditeur de session.
c5.svg Logo.
ccccc.css
ccccc.py
Interface d'étudiant pour travailler.
checkpoint.py Gestion de la salle d'attente et placement des étudiants sur le plan.
clean.py Script effaçant toutes les traces laissées par les tests de régression.
comments.py Calcule les statistiques sur les commentaires faits par les correcteurs.
compatibility.py Utilitaires pour ajouter des fonctions manquantes à JavaScript. Et aussi des fonctions utiles pour plusieurs pages.
compile.py La classe racine de tous les compilateurs.
compile_cpp.py Compilateur incomplet C++ en javascript.
compile_js.py Interpréteur JavaScript.
compile_lisp.py Interpréteur LISP.
compile_python.py Interpréteur Python (brython).
compile_racket.rkt Programme LISP interprétant dans une sandbox le fichier LISP dont le nom est envoyé sur l'entrée standard. Ce programme est lancé une fois par session car Racket prend du temps pour démarrer.
compile_remote.py Contacte compile_server.py pour compiler et exécuter.
compile_server.py Serveur de compilation et exécution de C++ avec différents compilateur et options possibles.
compile_sql.py Interpréteur SQL (alasql).
compile_text.py Compilateur ne faisant rien pour réponses en texte libre
dns_server.py Un filtre (stdin/stdout) calculant le nom de la machine à partir de son adresse IP.
favicon.ico L'icône des pages web, calculée à partir de c5.svg.
home.py Page d'accueil des étudiants.
http_server.py Le serveur web C5 pouvant fonctionner seul ou derrière un server web classique.
infos_server.py Un filtre (stdin/stdout) calculant le nom et prénom à partir du login.
killer
killer.c
Démons tuant les hiérarchies de processus prenant plus d'une seconde CPU et se trouvant dans /sys/fs/cgroup/C5_*
launcher
launcher.c
Ce programme possède le SUID root ce qui lui permet :
  • De créer le contrôle groupe utilisé par killer.py.
  • De lancer le processus avec un UID liée à la session.
  • De limiter les ressources utilisées par le processus.
load_testing.py Un simulateur de charge pour voir combien le système supporte d'étudiants. Difficilement utilisable car il faut le modifier pour indiquer un bon ticket de session.
question.py La classe permettant de définir les questions.
question_after.py
question_before.py
Utilitaire permettant de générer le fichier .json contenant les titres des questions des différentes sessions. C'est nécessaire pour faire les export ZIP et GIT.
tests.py Tests de régression (ne teste pas la salle d'attente).
utilities.py Classes et fonctions nécessaires pour les serveurs, mais c'est aussi le script d'administration du serveur. S'il est lancé sans arguments, cela affiche :
  • Les explications pour l'utiliser.
  • La configuration par défaut extraite des variables d'environnement.
  • Les processus serveur en train de tourner.
Ce script est appelé par le script 127. faites une copie de 127 avec votre propre configuration et utiliser-la pour gérer vos serveurs C5.

Organisation des fichiers générés.

Les fichiers de configurations se terminent tous par .cf et contiennent une expression Python :

Les fichiers de logs se terminent tous par .log :

Divers fichiers générés à l'installation ou à l'utilisation :

Tests de régression.

Installer les paquets :

apt install python3-selenium chromium-chromedriver firefox-geckodriver xnest xvfb

Lancer les tests :

Le résumé est dans tests.log

Utilisation de C5 à l'université Lyon 1.

Les cours qui ont utilisé C5 :

Quand Quoi Année Nbr Inscrits Utilisation
2022-09→2022-12 Initiation Algorithmique et
Programmation Impérative
en langage C
L1 585 2 sujets d'examen.
5 sujets d'annales.
2 devoirs maison.
15 sujets de TD.
11 sujets de TP.
2023-01→2023-05
Pas terminée.
Algorithmique et
Programmation Récursive
en LISP
L1 414 ? sujets d'examen.
≥8 sujets de TP.
2023-02 Programmation concurrente L3 165 1 sujet d'examen.
1 sujet d'entraînement.
2023-04 Applications en Mathématiques et Informatique L1 312 1 sujet d'examen.

Sur l'ensemble des sessions d'examens, voici l'histogramme du nombre de copies en fonction du nombre de commentaires faits par les correcteurs sur la copie. Une grande partie des copies n'ont pas été commentées du tout. Ceci a été calculé par comments.py.

Nombre
de com-
mentaires
Nombre de copies
1 24
2 31
3 35
4 33
5 19
6 15
7 20
8 8
9 10
10 9
11 13
12 6
13 5
14 2
15 2
16 2
17 0
18 0
19 0
20 1
235 étudiants. Moyenne 5.5 commentaires. Médiane 4 commentaires.

Les surveillances d'examens sont faites dans des salles de TP avec 18 étudiants. Les étudiants doivent impérativement travailler sur les ordinateurs de l'établissement et non leur ordinateur personnel.

Il est impératif que les étudiants aient fait un TP complet en utilisant C5 avant le jour de l'examen afin de ne pas être dans un environnement qu'ils ne connaissent pas.

TODO

Fonctionnalités manquantes dans l'éditeur :

Fonctionnalités manquantes dans le checkpoint (placement) :

Fonctionnalités manquantes dans la modélisation du sujet :

Dette technique :

Fonctionnalités manquantes de la page d'accueil :

Fonctionnalités manquantes de la page de notation :

Page de paramétrage de session :