Skip to content
Snippets Groups Projects
Verified Commit a6afe6f2 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added current state

parent 3f8a701a
No related branches found
No related tags found
No related merge requests found
+++
title = "Current state of the Dojo (part 1): architecture"
description = "This blog post is the first part of a high level description of the Dojo project"
date = 2024-06-24T12:00:00+00:00
updated = 2024-06-24T12:00:00+00:00
draft = true
date = "2024-08-02"
updated = "2024-08-02"
draft = false
template = "blog/page.html"
[taxonomies]
......@@ -21,12 +21,15 @@ The Dojo project aims at providing a modular, extensible, decentralized, collabo
In this section we briefly describe the necessary features we think are needed by the Dojo and the technological choices we made.
The Dojo is split in three major parts that are the Dojo backend, the Dojo CLI, and the Dojo website.
We will describe them below but first we quickly describe the [desired features](#desired-features) and some [technological choices](#gitlab-based).
### Desired features
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
Therefore when an exercise is performed it must be evaluated quickly to give 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.
......@@ -43,12 +46,13 @@ currently under heavy development.
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,
* Built on top of the `git` version control system which is nowadays a standard in the industry,
* Offers CI/CD pipelines to evaluate automatically any kind of code (including unit tests),
* Offers collaborative tools such as issue tracking, wikis, etc,
* Offers an open API to handle repositories,
* 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,
Therefore each *assignment* or *exercise* (see [here for more info](https://dojo.isc-hesge.ch/get-started/quick-start/)) for more details about the terminology) 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.
......@@ -59,18 +63,36 @@ etc which allows allows the students to familiarize themselves with tools and wo
### The Dojo backend
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 communication with the Gitlab instance, the accounts of the user and their permissions (students, teachers, admin), assignments/exercises creation and deletion,
search, etc., and other possible features (related to gamification for example) there is the need to store informations about the platform in a central database.
Although one could also directly interact with the Gitlab instance thruogh the Gitlab API, we think that storing an reasonable amount of informations
Although one could also directly interact with the Gitlab instance through the Gitlab API, we think that storing a 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 backend is developed using the TypeScript programming language that is a modern alternative
technology to pure JavaScript and was chosen for its type safety, maturity of the ecosystem, and
large availability of libraries.
## 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
everyday job. Also it removes some of the burden of developing first complete websites that, while being more user friendly for beginners, 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.
The Dojo CLI is therefore responsible for handling the communications between the users, the Gitlab instance, and the Dojo backend and will always be the principal
way to interact with the Dojo, while the web interface that undergoes heavy development currently will be mirroring the functionalities of the CLI.
### Dojo CLI development
The CLI is also developed using TypeScript (as the backend) for uniformity of the technological stack.
Currently only the most important features are implemented in the CLI. It handles all the important functionalities for authentification (login/logout), assignment (creation, publication, edition, deletion, etc.), exercise (creation, check for correctness, etc).
It now need a lot of quality of life extensions such as search, filtering, etc of assignment and exercises which are currently under heavy development. We believe that with the [tutorial](/dev-doc/cli/how-to-add-a-new-command/) that exist it is relatively straightforward to implement new CLI features.
## The Dojo website
To increase the use of the Dojo, we believe it is very important to offer a more beginner friendly interface such as a website. The website is currently under development and as pointed out in the previous section will mirror all functionalities from the CLI and render them in a more user friendly fashion.
The technogical stack will be based on angular.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment