master
Petr Stefan 8 years ago
parent 30c61b1dfa
commit 8ac570d272

@ -38,47 +38,49 @@ Analysis
### Current solution at MFF UK ### Current solution at MFF UK
The ideas presented above are not completely new. There was a group of students, The ideas presented above are not completely new. There was a group of
who already implemented an evaluation solution for student's homeworks in 2006. students, who already implemented an evaluation solution for student's
Its name is [CodEx - The Code Examiner](http://codex.ms.mff.cuni.cz/project/) homeworks in 2006. Its name is [CodEx - The Code
and it has been used with some improvements since then. The original plan was to Examiner](http://codex.ms.mff.cuni.cz/project/) and it has been used with some
use the system only for basic programming courses, but there is demand for improvements since then. The original plan was to use the system only for basic
adapting it for many different subjects. programming courses, but there is demand for adapting it for many different
subjects.
CodEx is based on dynamic analysis. It features a web-based interface, where
supervisors assign exercises to their students and the students have a time CodEx is based on dynamic analysis. It features a web-based interface, where
window to submit the solution. Each solution is compiled and run in sandbox supervisors assign exercises to their students and the students have a time
(MO-Eval). The metrics which are checked are: corectness of the output, time and window to submit the solution. Each solution is compiled and run in sandbox
memory limits. It supports programs written in C, C++, C#, Java, Pascal, Python (MO-Eval). The metrics which are checked are: corectness of the output, time
and Haskell. and memory limits. It supports programs written in C, C++, C#, Java, Pascal,
Python and Haskell.
Current system is old, but robust. There were no major security incidents Current system is old, but robust. There were no major security incidents
during its production usage. However, from today's perspective there are during its production usage. However, from today's perspective there are
several drawbacks. The main ones are: several drawbacks. The main ones are:
- **web interface** -- The web interface is simple and fully functional. But - **web interface** -- The web interface is simple and fully functional. But
rapid development in web technologies opens new horizons of how web interface rapid development in web technologies opens new horizons of how web interface
can be made. can be made.
- **web api** -- CodEx offers a very limited XML API based on outdated - **web api** -- CodEx offers a very limited XML API based on outdated
technologies that is not sufficient for users who would like to create custom technologies that is not sufficient for users who would like to create custom
interfaces such as a command line tool or mobile application. interfaces such as a command line tool or mobile application.
- **sandboxing** -- MO-Eval sandbox is based on principle of monitoring system - **sandboxing** -- MO-Eval sandbox is based on principle of monitoring system
calls and blocking the bad ones. This can be easily done for single-threaded calls and blocking the bad ones. This can be easily done for single-threaded
applications, but proves difficult with multi-threaded ones. In present day, applications, but proves difficult with multi-threaded ones. In present day,
parallelism is a very important area of computing, so there is requirement to parallelism is a very important area of computing, so there is requirement to
test multi-threaded applications too. test multi-threaded applications too.
- **instances** -- Different ways of CodEx usage scenarios requires separate - **instances** -- Different ways of CodEx usage scenarios requires separate
instances (Programming I and II, Java, C#, etc.). This configuration is not instances (Programming I and II, Java, C#, etc.). This configuration is not
user friendly (students have to register in each instance separately) and user friendly (students have to register in each instance separately) and
burdens administrators with unnecessary work. CodEx architecture does not burdens administrators with unnecessary work. CodEx architecture does not
allow sharing hardware between instances, which results in an inefficient use allow sharing hardware between instances, which results in an inefficient use
of hardware for evaluation. of hardware for evaluation.
- **task extensibility** -- There is a need to test and evaluate complicated - **task extensibility** -- There is a need to test and evaluate complicated
programs for classes such as Parallel programming or Compiler principles, programs for classes such as Parallel programming or Compiler principles,
which have a more difficult evaluation chain than simple which have a more difficult evaluation chain than simple
compilation/execution/evaluation provided by CodEx. compilation/execution/evaluation provided by CodEx.
Supervisors and current users of CodEx gives us following ideas for improvements: Supervisors and current users of CodEx gives us following ideas for
improvements:
- keep it simple - keep it simple
- localization (both UI and exercises) - localization (both UI and exercises)
@ -421,8 +423,12 @@ deserves some.
*A runtime environment* defines the used programming language or tools *A runtime environment* defines the used programming language or tools
which are needed to process and evaluate a solution. Examples of a which are needed to process and evaluate a solution. Examples of a
runtime environment can be “*Linux + GCC*”, “*Linux + Mono*”, “*Windows runtime environment can be:
+ .NET 4*”, “*Bison + Yacc.”*
- *Linux + GCC*
- *Linux + Mono*
- *Windows + .NET 4*
- *Bison + Yacc*
### Limits ### Limits
@ -562,14 +568,10 @@ of entities and relational database models), describe the logical
grouping of entities and how they are related: grouping of entities and how they are related:
- user + settings + logins + ACL - user + settings + logins + ACL
- instance + licences + groups + group membership - instance + licences + groups + group membership
- exercise + assignments + localized assignments + runtime - exercise + assignments + localized assignments + runtime
environments + hardware groups environments + hardware groups
- submission + solution + reference solution + solution evaluation - submission + solution + reference solution + solution evaluation
- comment threads + comments - comment threads + comments
### API endpoints ### API endpoints
@ -607,15 +609,34 @@ can accept it or decline it
Job processing progress monitoring Job processing progress monitoring
---------------------------------- ----------------------------------
@todo: How does the Backend push the progress of evaluation through the When evaluating a job the worker sends progress messages on predefined points of
Monitor to the Frontend evaluation chain. The sending place can be on very beginning of the job, when
submit archive is downloaded or at the end of each simple task with its state
(completed, failed, skipped). These messages are sent to broker through existing
ZeroMQ connection. Detailed format of messages can be found on [communication
page](https://github.com/ReCodEx/wiki/wiki/Overall-architecture#commands-from-worker-to-broker).
Broker only resends received progress messages to the monitor component via
ZeroMQ socket. The output message format is the same as the input format.
Monitor parses received messages to JSON format, which is easy to work with in
JavaScript inside web application. All messages are cached (one queue per job)
and can be obtained multiple times through WebSocket communication channel. The
cache is cleared 5 minutes after receiving last message.
Publishing of the results Publishing of the results
------------------------- -------------------------
@todo: How does the Backend publish the results and how it notifies the After job finish the worker packs results directory into single archive and
Frontend; How the Frontend can request the results if the notification uploads it to the fileserver through HTTP protocol. The target URL is obtained
does not arrive from API in headers on job initiation. Then "job done" notification request is
performed to API via broker. Special submissions (reference or asynchronous
submissions) are loaded immediately, other types are loaded on-demand on first
results request.
Loading results means fetching archive from fileserver, parsing the main YAML
file generated by worker and saving data to the database. Also, points are
assigned by score calculator.
User documentation User documentation
================== ==================
@ -635,6 +656,7 @@ Supervisor, Admin
@todo: Describe the requirements of running the web application (modern @todo: Describe the requirements of running the web application (modern
web browser, enabled CSS, JavaScript, Cookies & Local storage) web browser, enabled CSS, JavaScript, Cookies & Local storage)
### Scenario \#1: Becoming a user of ReCodEx ### Scenario \#1: Becoming a user of ReCodEx
#### How to create a user account? #### How to create a user account?
@ -678,8 +700,7 @@ in the top section of the left sidebar right under your name. You will
have to expand the sidebar with a button next to the “*ReCodEx*” title have to expand the sidebar with a button next to the “*ReCodEx*” title
(shown in the picture below). (shown in the picture below).
![](media/image1.png){width="3.3131944444444446in" @todo: Simon's image
height="0.6173611111111111in"}
#### What to do when you cannot remember your password? #### What to do when you cannot remember your password?
@ -705,15 +726,14 @@ website.
There are several options you have to edit your user account. There are several options you have to edit your user account.
- changing your personal information (i.e., name) - changing your personal information (i.e., name)
- changing your credentials (email and password) - changing your credentials (email and password)
- updating your preferences (e.g., source code viewer/editor settings, - updating your preferences (e.g., source code viewer/editor settings,
default language) default language)
You can access the settings page through the “*Settings*” button right You can access the settings page through the “*Settings*” button right
under your name in the left sidebar. under your name in the left sidebar.
### Scenario \#2: User is a student ### Scenario \#2: User is a student
@todo: describe what it means to be a “student” and what are the @todo: describe what it means to be a “student” and what are the
@ -749,6 +769,7 @@ although the results say different
who else can see the comments, how notifications work (*not implemented who else can see the comments, how notifications work (*not implemented
yet*!). yet*!).
### Scenario \#3: User is supervisor of a group ### Scenario \#3: User is supervisor of a group
@todo: describe what it means to be a “supervisor” of a group and what @todo: describe what it means to be a “supervisor” of a group and what
@ -804,7 +825,7 @@ the awarded points will be overridden.
#### How can I discuss students solution with him/her directly through the web application? #### How can I discuss students solution with him/her directly through the web application?
@todo: Describe the comments thread behavior (public/private comments), @todo: Describe the comments thread behavior (public/private comments),
who else can see the comments who else can see the comments -- same as from the student perspective
### Writing job configuration ### Writing job configuration
@ -824,8 +845,9 @@ configuration in the basic format will be always available and allows users to
use the full expressive power of the system. use the full expressive power of the system.
This section walks through creation of job configuration for _hello world_ This section walks through creation of job configuration for _hello world_
exercise. The goal is to compile file _source.c_ and check if it prints `Hello exercise. The goal is to compile file _source.c_ and check if it prints `Hello
World!` to the standard output. World!` to the standard output. This is the only test case, let's call it
**A**.
The problem can be split into several tasks: The problem can be split into several tasks:
@ -915,7 +937,7 @@ written.
bin: "helloworld" bin: "helloworld"
sandbox: sandbox:
name: "isolate" name: "isolate"
stdout: ${EVAL_DIR}/out.txt stdout: ${EVAL_DIR}/out.txt
limits: limits:
- hw-group-id: group1 - hw-group-id: group1
chdir: ${EVAL_DIR} chdir: ${EVAL_DIR}

Loading…
Cancel
Save