Skip to content
Cristian Gonzalez edited this page Jul 8, 2021 · 14 revisions

Welcome to the UNCode wiki

UNCode is an online platform built on top of INGInious(v0.5) for frequent practice and automatic evaluation of computer programming, Jupyter Notebooks and hardware description language (HDLs) assignments. Also provides a pluggable interface with your existing LMS like Moodle or OpenEdX

UNCode is currently used at the Universidad Nacional De Colombia, Campus Bogotá. UNCode supports automatic evaluation in languages like: C/C++, Java 7/8, Python 3, Verilog, VHDL and Jupyter Notebooks. Additionally, has been employed in courses like: Basic Computer Programming, Data Structures, Machine Learning, Artificial Intelligence, Quantum Programming, Programming Languages, among others. See the complete list of courses.

UNCode provides a backend which manages the interaction with Docker and the grading code, and a frontend which allows students to submit their code in a simple and beautiful interface. The frontend also includes a simple administration interface that allows teachers to check the progression of their students and to modify exercises in a simple way. Additionally, the backend is independent of the frontend and was made to be used as a library.

Also, UNCode can be employed as an external grader for programming assignments in Learning Management Systems (LMS) such as Moodle or OpenEDX. To understand more about the whole project, check the UNCode page.

Universidad Nacional de Colombia

How does UNCode work?

UNCode is based on the concept of tasks and a task at the same time is associated with a subproblem. For each task, an infinite number of submissions is allowed, but a user must wait for the result of its current submission before trying a new one. Currently, the types of tasks are only programming, and the supported languages are C, C++, Java, Python 3, VHDL, Verilog and Jupyter Notebooks. For simplicity, tasks are grouped by courses.

A submission is a set of deliverables (code or files) that correspond to the a task. The idea is to provide a feedback on the submission by compiling, executing or applying any form of checking and testing to the deliverables. In general, the student may receive with the feedback the next different results: Accepted, Wrong Answer, Presentation Error, Output Limit Error, Runtime Error, Grading Runtime Error, Time Limit, Memory Limit, Internal Error.

Architecture

UNCode comes with three distinct parts, the backend, the docker agent and the frontend. The backend receives the students submission (a job), and sends it to the agent. The agent is the responsible of managing a queue of jobs or submissions, and thus, it starts the corresponding Docker container for each submission, this according how they are queued. That container is in charge of evaluating the submission and generating the corresponding feedback.

UNCode also provides a frontend, which uses MongoDB as database. The frontend is in fact an extension of the backend and allows students to work directly on a website. This frontend also provides statistics and management tools for the instructors. Due to the design of UNCode, more functionalities can be added trough plugins. This is the development workflow we have followed to add new features, adding plugins to the code base, and that way, we avoid changing the code base. In the next image, are presented the different features and plugins we have added on UNCode.

UNCode Architecture

Automatic grader

Docker containers are small virtual operating systems that provides isolation between the processes and resources of the host operating system. Docker allows to create and ship any software on any free Linux distribution.

As there is no a hypervisor, the processes launched into the container are in fact directly run by the host operating system, which allows applications to be amazingly fast.

Docker allows teachers to build new containers easily, to add new dependencies to the tests applied on the student’s code (see How to create a new container).

Start Contributing

Check the documentation we have to start contributing on UNCode. For a better understanding on UNCode, see Understand UNCode, as well as the UNCode page, where more information about the project is available.

Clone this wiki locally