онлайн-судья · self-hostedonline judge · self-hosted
Войти →Sign in →

⚪ GradeHub 🔵 C · C++ · Go GoogleTest docker --network=none

Посылка. Песочница. Вердикт. Submit. Sandbox. Verdict.

GradeHub — онлайн-судья для университетских курсов по C, C++ и Go, который вы разворачиваете на своём сервере. Преподаватель пишет задачу и тесты, студент сдаёт решение прямо в браузере, а сервер собирает и прогоняет его в изолированном контейнере и возвращает вердикт по каждому тесту.

GradeHub is an online judge for university C, C++ and Go courses that you host on your own server. Teachers write the problem and its tests, students submit right from the browser, and the server builds and runs every submission in an isolated container and returns a verdict for each test.

judge · #4127

        
      
0

сетевых подключений у песочницы. Каждая посылка — отдельный контейнер с --network=none и лимитами CPU, памяти и процессов.

network access inside the sandbox. Every submission gets its own container with --network=none and CPU, memory and process limits.

3

языка в одном судье: C, C++ и Go.

languages, one judge: C, C++ and Go.

8

символов в секунду — предел скорости набора в редакторе. Быстрее руками не печатают.

characters per second — the typing ceiling in the editor. Hands don't type faster.

§ 01

Протокол проверкиThe grading protocol

идёт · пройден running · passed

  1. [ RUN ] Sandbox.Isolation

    Песочница без сетиA sandbox with no network

    Каждая посылка собирается и запускается в свежем Docker-контейнере: без сети, с ограничением CPU, памяти и числа процессов. После прогона контейнер удаляется. Every submission is built and run in a fresh Docker container: no network, capped CPU, memory and process count. The container is removed after the run.

    (0 ms)
  2. [ RUN ] Judge.PerTest

    Вердикт по каждому тестуA verdict for every test

    Тесты на GoogleTest для C и C++, отдельный адаптер для Go. Лимиты времени и памяти на каждый тест, итог — структурированный отчёт, а не «что-то сломалось». GoogleTest suites for C and C++, a dedicated adapter for Go. Time and memory limits per test, and the result is a structured report, not just "something broke".

    (2 ms)
  3. [ RUN ] Plagiarism.Winnowing

    Похожие решения на видуSimilar solutions, surfaced

    Принятые решения превращаются в отпечатки k-грамм по алгоритму Winnowing. Преподаватель видит пары с подозрительным сходством и выставляет свой порог. Accepted solutions are fingerprinted as k-grams with Winnowing. Teachers see suspiciously similar pairs and choose their own threshold.

    (4 ms)
  4. [ RUN ] Scoreboard.Live

    Живая таблица группыA live group scoreboard

    Результаты появляются сразу после прогона. Посылки после дедлайна проверяются, но в зачёт не идут, а время решения считается по активной работе, а не по календарю. Results show up right after the run. Late submissions are still judged but don't count, and solving time is measured as active work, not calendar time.

    (1 ms)
  5. [ RUN ] Editor.NoPaste

    Редактор, куда не вставитьAn editor you can't paste into

    Вставка блоков отклоняется, а набор быстрее 8 символов в секунду искажается — с явным предупреждением. Сессию редактора засекает сервер. Pasted blocks are rejected, and typing faster than 8 characters per second gets scrambled — with a clear warning. The server times the editing session.

    (3 ms)
  6. [ RUN ] Statement.Raster

    Условие — картинкойStatements as images

    Условие задачи показывается изображением с водяным знаком: скопировать текст со страницы сложнее. Честно: от распознавания текста это не защищает. The problem statement is shown as a watermarked image, so lifting text from the page is harder. To be honest: it does not stop OCR.

    (5 ms)
  7. [ RUN ] Assessment.Rules

    Контрольные по правиламAssessments with rules

    Таймер на раздел контрольной и запрет библиотечных функций в отдельной задаче — например, printf, когда студент пишет свой. A timer per assessment section and per-problem bans on library functions — say, printf when students write their own.

    (2 ms)
[==========] 7 проверок из 1 набора7 tests from 1 test suite [ PASSED ] 0 / 7
§ 02

Путь одной посылкиThe life of one submission

От первого символа до строки в таблице. From the first keystroke to a scoreboard row.

  1. 01

    СессияSession

    Студент открывает задачу — сервер начинает засечённую сессию редактора и подгружает заготовку или черновик.The student opens a problem; the server starts a timed editor session and loads the starter code or draft.

  2. 02

    ПосылкаSubmit

    Решение сохраняется со статусом pending, флаг опоздания считается от дедлайна.The solution is stored as pending; the late flag is computed from the deadline.

  3. 03

    СборкаBuild

    Сервер раскладывает решение и тесты во временный каталог и запускает контейнер-песочницу.The server lays out the solution and tests in a temp directory and starts the sandbox container.

  4. 04

    ПрогонRun

    Каждый тест — под лимитом времени и памяти. На выходе — JSON-отчёт.Every test runs under time and memory limits. The output is a JSON report.

  5. 05

    ВердиктVerdict

    Результаты по тестам, баллы — в таблицу, отпечаток принятого кода — в базу похожести.Per-test results, points to the scoreboard, and the accepted code's fingerprint to the similarity index.

§ 03

Три роли, одна системаThree roles, one system

teacher

преподавательteacher Курсы, группы, задачи с тестами и задания со сроками. Видит все прогоны и пары похожих решений. Courses, groups, problems with tests and assignments with deadlines. Sees every run and every similar pair.

student

студентstudent Свои задания, посылки, история прогонов и таблица своей группы. Their own assignments, submissions, run history and their group's scoreboard.

admin

администраторadministrator Заводит и отключает преподавателей, следит за здоровьем сервера и очереди проверок. Creates and disables teachers, watches the health of the server and the judging queue.

$ gradehub --start · сервер ваш, данные тоже $ gradehub --start · your server, your data

ВойтиSign in