Open source · MIT

ItCube

Платформа учебного центра: задачи с кодом, которые проверяются по нескольким наборам данных

v2.1.0 Панель управления с аналитикой и кабинет родителя
Laravel 13PHP 8.3PostgreSQLTailwind 4WandboxОчереди
ItCube

Задачу проверяет не преподаватель, а тесты

Ученик написал программу, преподаватель посмотрел на неё и сказал «вроде верно». Через неделю выясняется, что на нуле она падает, а на отрицательном числе выдаёт ерунду. Проверка глазами ловит опечатки, но не крайние случаи — на них не хватает ни времени, ни внимания, когда в группе восемнадцать человек.

ItCube гоняет решение по нескольким наборам данных. У задачи есть кейсы: вход, ожидаемый ответ, баллы. Часть кейсов скрытая — ученик видит только «сошёлся или нет», без входа и без ответа. Иначе решение подгоняют под известный ответ вместо того, чтобы заставить его работать. Первая версия сервиса жила в 2023 году на процедурном PHP; от неё осталась только предметная область.

Что внутри

Четырнадцать языков без своей песочницы

Python, JavaScript, TypeScript, PHP, C, C++, Java, C#, Go, Rust, Ruby, Паскаль, SQL, Bash. Код уходит на Wandbox: держать инфраструктуру для запуска чужого кода школьной платформе не по средствам, а там она уже есть.

Одна площадка вместо трёх — из-за stdin

Go Playground не принимает входные данные, а без них не существует тест-кейса с вводом, то есть и настоящей контрольной. Wandbox покрывает всё сам, включая Rust, Паскаль и SQL.

Проверка в очереди, а не в запросе

Не архитектура ради архитектуры, а следствие замера: одна сборка на Go идёт около двадцати секунд, пять кейсов — минуту. Кейсы уходят параллельно, страница опрашивает результат.

Тесты с таймером и контрольные

Когда время выходит, ответы отправляются сами. Контрольная собирает тесты и задачи в одну работу с окном сдачи, а ведомость приводит балл каждой работы к назначенному ей весу.

Журнал, который различает группы

Отметка привязана к группе и, если известно, к занятию. В схеме 2023 года посещаемость была парой «ученик и дата», и у ходящего на два направления день был неразличим.

Три языка, ключ — сама строка

Русский, английский, немецкий по схеме gettext: непереведённое остаётся читаемым текстом, а не именем ключа посреди страницы. Команда сверяет словари с кодом, тест не даёт им разъехаться.

Панель, которая отвечает на вопросы

Главная таблица — задачи по доле решивших, снизу вверх: она показывает тему, которую стоит переобъяснить, чего не сделает ни один счётчик активности. Рядом посещаемость по неделям и группам, сдачи по дням, трудные вопросы теста.

Кабинет родителя без доступа к коду

Взрослый видит посещаемость, результаты, расписание и контрольные своих детей. Кода ребёнка не видит намеренно: у родителя вопросы «ходит ли» и «справляется ли», разбор решения — дело преподавателя.

Скриншоты

Задача: редактор, запуск на своём вводе и разбор по кейсам
Задача: редактор, запуск на своём вводе и разбор по кейсам
Панель: задачи по доле решивших и посещаемость по неделям
Панель: задачи по доле решивших и посещаемость по неделям
Журнал: отметка за день и доля посещений по каждому
Журнал: отметка за день и доля посещений по каждому
Ведомость: балл каждой работы приведён к её весу
Ведомость: балл каждой работы приведён к её весу
Кабинет родителя: посещаемость и результаты без кода
Кабинет родителя: посещаемость и результаты без кода
Тест с таймером, который сам отправит ответы
Тест с таймером, который сам отправит ответы

Установка

git clone https://github.com/dripips/ItCube.git cd ItCube composer install && npm install && npm run build cp .env.example .env && php artisan key:generate createdb itcube php artisan migrate --seed php artisan serve

Есть проект или идея?

Напишите мне, обсудим задачу.