JudgeSystem
An open-source judge system for evaluating programmming code and managing problems, lectures, exams and competitions.
Install / Use
/learn @NaskoIT/JudgeSystemREADME
Judge System
An open-source judge system for evaluating programmming code and managing problems, lectures, exams and competitions. It is developed to be used in schools in informatics lessons in order to improve the education and automate some parts of teachers' work.
Awards
- Final project for the "ASP.NET Core MVC - June 2019" course in SoftUni, completed with excellent grade and the project was part of the five best applications in the course
- NTIT - National Autumn Tournament in Information Technology "John Atanasoff" - first place in "Web Applications" / НТИТ - Национален есенен турнир по информационни технологии „Джон Атанасов“ – първо място в направление „Интернет приложения“ 🏆
- The twentieth student conference of HSSIMI - gold medal and excellent performance / Двадесетата ученическа конференция (УК’20) на УчИМИ – златен медал и отлично преставяне 🏅
- The twentieth Student Section, 49th SMB Spring Conference - Medal for Excellent Performance / Двадесетата ученическа секция, 49.Пролетна конференция на СМБ – медал за отлично представяне 🏅
- Laureate of the National Olympiad in Information Technology / Лауреат на Националната олимпиада по информационни технологии
- Nominated by BAIT in category "Youth award" in 2020 / Номиниран от БАИТ в категория "Младежка награда" за 2020 г.
Click here to see certificates, medals and awards from the contests above.
Description
This is a judge system which can evaluate user's programming code automatically. Aims of this platform are to be used in school. It can make work of our teachers more easier and also students will be able to solve more problems and check their solutions faster. I beleive that using this application more students will become passionate about programming and may become successfull developers one day.
Documentation
You can find the documentation by navigating to the following path: Documentation/JudgeSystem - Documentation.docx. Or if you prefer watching to reading. You can watch videos about the system.
- In this video you can watch how I presnet my JudgeSystem.
- In this video you can watch how users can work in the system.
- In this video you can watch how administrators can work in the system.
- In this video you can watch how administrators can create lesson, add problem and resource to it, add tests to the problem and finally create contest for this lesson.
- In this video you can watch how users can submit solutions.
- In this video you can watch how administrators can review users' results and submissions.
- In this video you can watch how to test web project in the system. For example, ASP.NET Core web application.
- In this video you can watch how to create problem which to be tested with automated tests(Unit tests, Integration tests).
- In this video you can watch how to add multiple tests for specific problem. How to download tests directly from systems like INFOS and import them in the system.
Next steps
- Develop platform which ease the integration of the Judge System in the schools and improve the process of learning content development and distribution (JudgeSystemManager)
- The new platform should have the following features:
- Learning content development and allow the users to collaborate with each others while developing learning content - GIT methodology should be used. The same techniques which we use while developing and managing code, should be used for learning content. Focus should be on collaboration and resources sharing.
- Schools can apply for new instances of the Judge System. They should choose their desired url address and choose which courses to be added in their instance.
- Schools should be able to make request about scaling their instances.
- When school's application is approved a new instance of the Judge System should be automatically deployed and the selected courses should be added to the newly deployed instance.
- JudgeSystemManager system is currently in development and here you can see the requirements.
- The Judge System should be extended and new functionalities should be added.
- The flow of adding students in the system should be changed
- The JudgeSystem should communicate with the JudgeSystemManager
- Click here to read how to improve Computer science education.
- Click here to read more about the JudgeSystemManager.
Getting Started
Prerequisites
You will need the following tools:
Setup
Follow these steps to set up your development environment:
-
Clone the repository
-
Create your own Send Grid account or use existing one. Go to Settings/Api Keys and create new Api Key and then copy ApiKey Name and API Key ID.
-
If you have some account in Microsoft Azure create storge account. If you do not want to create storage account in azure
open StartUp.cs and commnent method ConfigureAzureBlobStorage. You just will not be able to upload files. -
If you want to submit java code, install JDK
-
Open JudgeSystem.sln file, right click on JudgeSystem.Web -> Add -> New Item. In the search bar search for
app settingsand then addApp Settings File. Replce its content with the following one and then replcae each value which starts withyour.{ "ConnectionStrings": { "DefaultConnection": "Server=your server name;Database=JudgeSystem;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "SendGrid": { "SendGridKey": "your API Key ID from SendGrid", "SendGridUser": "your ApiKey Name from Send Grid" }, "AzureBlob": { "StorageConnectionString": "azure storage connection string", "AccountKey": " your azure storage api key", "AccountName": "yourazure storage acount name", "ContainerName": "your azure storage container name" }, "Email": { "Name": "your first name", "Surname": "your last name", "Username": "your email" }, "App": { "Name": "Judge System" }, "Admin": { "Username": "your admin name", "Password": "your admin password", "Email": "your admin email", "Name": "your admin first name", "Surname": "your admin last name" }, "Compilers": { "Java": "your path to javac.exe and java.exe. For exmaple C:\\Program Files\\Java\\jdk1.8.0_181\\bin", "CPlusPlus": "C:\\Users\\Nasko\\Desktop\\JudgeSystem\\Web\\JudgeSystem.Web\\wwwroot\\Compilers\\MinGW\\bin" } } -
Open package manager console, choose as Defaut project: JudgeSystem.Data and run the following command:
update-database -
Run the following command to set up the SQL server distributed cache:
dotnet sql-cache create "Server=.;Database=JudgeSystem;Trusted_Connection=True;MultipleActiveResultSets=true" dbo Cache -
Press Ctrl + F5
Technologies
- .NET Core 2.2
- ASP.NET Core 2.2
- ASP.NET Core MVC
- Entity Framework Core 2.2
- Azure
- xUnit, MyTested.AspNetCore.Mvc
- jQuery, Bootstrap, JavaScript
- Automapper, SendGrid
Languages and compilers
- C#
- Java 11 – compiler javac 11.0.4
- C++ - compiler g++ (MinGW GCC-8.2.0-3) 8.2.0
Add new programming language
Follow this steps to add Python as another option for programming language
- Create class
PythonCompilerin projectJudgeSystem.Comilerswhich implementsICompilerinterface
using System.Collections.Generic;
using JudgeSystem.Workers.Common;
namespace JudgeSystem.Compilers
{
public class PythonCompiler : ICompiler
{
public CompileResult Compile(string fileName, string workingDirectory, IEnumerable<string> sources = null)
{
var baseCompiler = new Compiler();
string arguments = "Place Python compilation arguments here";
return baseCompiler.Compile(arguments);
}
}
}
- Add the following line in
enum ProgrammingLanguages:Python = 4 - Add the following code in class ``
Related Skills
node-connect
351.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
