@@ -19,23 +19,58 @@ The Dojo project aims at providing a modular, extensible, decentralized, collabo
## The Dojo features
The Dojo is a platform for teachers to propose programming *assignments* and for students to perform them as *exercises* for any class.
In this section we briefly describe the necessary features we think are needed by the Dojo and the technological choices we made.
When an exercise is performed the exercise must be evaluated quickly to give immediate feedback
to the student as whether the solution is correct or not. The performed exercises should be used as
a "portfolio" at any point in time by the student. Students should be able to collaborate with their peers when performing an exercise, and should be able to ask for help from their teachers easily.
### Desired features
With this in mind we wanted to use an environment that was as flexible as possible and therefore
The Dojo is a platform for teachers to propose programming *assignments* and for students to perform them as *exercises* for any computer science class.
Exercises can be performed in class or in a completely asynchronous manner and not related to any particular class.
Therefore when an exercise is performed it must be evaluated quickly to give quasi-immediate feedback
to the student as whether the solution is correct or not. One might also want to be able to give more
complete feedback by using linters, static code analyzers, etc. Finally the completed exercises should be usable as
a "portfolio" at any point in time by the student in an easy manner.
Students should be able to collaborate with their peers when performing an exercise, and should be able to ask for help from their teachers easily
who should be able to quickly access the code in order to provide guidance. Students should be able to see solutions to the exercises
proposed by either teachers or other students.
In order to encourage students to use the platform independently from classes, we want also to implement a part about gamification, that is
currently under heavy development.
### Gitlab based
With this in mind we wanted to use an environment that was as flexible, open and feature full as possible and therefore
built the Dojo on top of the Gitlab infrastructure which offers the following great features:
* Built on top of the `git` version control system,
* Offers CI/CD pipelines to evaluate automatically any kind of code (including unit tests),
* Offers collaborative tools such as issue tracking, wikis, etc.
* Offers collaborative tools such as issue tracking, wikis, etc,
* Can be self-hosted.
Therefore each *assignment* or *exercise* is nothing else than a standard Gitlab repository. Each repository is managed by the Dojo user,
which is a special Dojo account on the Gitlab instance that has the permission to create/delete repos, adds users to repos, run CI/CD pipelines, etc.
This special user is very important to manage the Dojo assignments and exercises and is strongly linked with the Dojo backend that we will briefly describe
hereafter.
Since the Dojo assignments are nothing else than standard repositories one can interact with them as with any other repository by creating issues, branches, merge requests,
etc which allows allows the students to familiarize themselves with tools and workflows commonly used in the industry.
### The Dojo backend
Using Gitlab as the backbone of the Dojo infrastructure, allows the students to familiarize themselves with tools and workflows commonly used in the industry.
In order to manage the communication with the Gitlab instance, the accounts of the user and their permissions (students, teachers), assignments/exercises creation and deletion,
search, etc., and other possible features like gamification there is the need to store informations about the platform in a central database.
In order to manage the Gitlab instance, the accounts of students, etc. we also need a central authority
Although one could also directly interact with the Gitlab instance thruogh the Gitlab API, we think that storing an reasonable amount of informations
about the Dojo assignments and exercises inside a database greatly enhances the performance of the system while relieving the Gitlab instance from the load
when searching assignments, checking exercise success rate, etc.
## The Dojo architecture
## The Dojo CLI
The main way to interact with the Dojo is through the Dojo CLI which allows users authentification, assignment or exercise creation/deletion/edition, etc.
The choice of the CLI seemed natural since it is a central skill for computer scientists to be able to use such interfaces in their
everyday job. Also it removes some of the burden of developing first complete websites that, while being more user friendly, take much more time to
develop since the UI/UX takes a large portion of the development.
The Dojo CLI is therefore responsible for handling the communications between the users, the Gitlab instance, and the Dojo backend.