Open source · linia wydań 0.2

Jedna platforma. Różne aktywności. Różne typy zadań.

AlgoJudge to otwartoźródłowe oprogramowanie self-hosted do organizacji zawodów i kursów programistycznych z automatycznym ocenianiem przesłanych rozwiązań.

Jedno miejsce dla całego przepływu

Czym jest AlgoJudge?

Bazowo webowa platforma łączy organizację aktywności, publikowanie zadań i automatyczną ocenę rozwiązań. Instytucje i zespoły mogą uruchomić własną instalację.

01

Organizuj aktywności

Zawody, kursy, laboratoria, warsztaty i treningi — z jednym spójnym modelem organizacji.

02

Publikuj zadania

Treści, załączniki, terminy, limity, punktacja oraz polityki zgłoszeń zarządzane razem.

03

Oceniaj automatycznie

Kolejkowanie, izolowane wykonanie, testy, punkty i czytelne werdykty.

Najważniejszy wyróżnik

Nie tylko klasyczny Online Judge

Zaprojektowany dla różnych aktywności i różnych sposobów oceniania.

Nowe typy bez zmian w centralnym Serverze

Client dobiera renderer, Runner dobiera handler oceniania, a Server zachowuje wspólną kopertę danych. Dzięki temu rozszerzenie może powstać na obrzeżach systemu bez wiązania rdzenia ze szczegółami zadania.

Typy aktywności

  • ZawodyDostępne w linii 0.2
  • KursDostępne w linii 0.2
  • LaboratoriumPrzewidziane przez architekturę
  • WarsztatyPrzewidziane przez architekturę
  • TreningPrzewidziane przez architekturę

Typy zadań i tryby oceniania

  • Standard I/ODostępne w linii 0.2
  • Output-onlyDostępne w linii 0.2
  • Ocenianie interaktywne w standard-io@1Dostępne w linii 0.2
  • Własne checkery w standard-io@1Dostępne w linii 0.2
  • OptymalizacyjnePrzewidziane przez architekturę
  • WieloplikowePrzewidziane przez architekturę
  • Sieciowe i rozproszonePrzewidziane przez architekturę
Od pomysłu do werdyktu

Jak to działa

Server utrzymuje trwały stan i zlecenia. Kod trafia do wymiennego Runnera, który działa w odseparowanym środowisku i odsyła wynik.

  1. 1

    Utwórz aktywność

    Manager konfiguruje zawody lub kurs.

  2. 2

    Dodaj zadanie

    Publikuje treść, pliki, limity i punktację.

  3. 3

    Otwórz zadanie

    Uczestnik poznaje wymagania i format.

  4. 4

    Wyślij rozwiązanie

    Kod oraz metadane trafiają do Servera.

  5. 5

    Utwórz zlecenie

    Server zapisuje zgłoszenie i kolejkuje pracę.

  6. 6

    Oceń w Runnerze

    Runner pobiera zlecenie, izoluje wykonanie i testuje.

  7. 7

    Pokaż wynik

    Status i werdykt wracają do aplikacji na żywo.

  • Statusy aktualizowane na żywo
  • Odseparowane wykonywanie kodu
  • Wymienne Runnery
  • Trwały stan po stronie Servera
Client · Server · Runner · Identity

Modularna architektura bez wiązania platformy z jednym silnikiem wykonawczym

Każdy komponent ma jasno określoną odpowiedzialność. Server koordynuje i przechowuje dane, ale nigdy nie kompiluje ani nie uruchamia kodu.

AlgoJudge Client

Interfejs i renderery

  • Widoki użytkownika i managera
  • Renderery aktywności i zadań
  • Formularze zgłoszeń
  • Prezentacja wyników
API i aktualizacje

AlgoJudge Server

Dane i koordynacja

  • Aktywności, zadania i pliki
  • Uprawnienia i zgłoszenia
  • Zlecenia i wyniki
  • Nie uruchamia kodu

Identity

Tożsamość i dostęp

  • OpenID Connect i OAuth 2.0
  • Uczelniane SSO
  • Lokalne konta
  • Konta krótkoterminowe
Uwierzytelnianie

AlgoJudge Runner

Bezpieczne wykonanie

  • Pobieranie zleceń
  • Kompilacja i izolacja
  • Limity zasobów i testy
  • Obliczanie wyniku
Połączenie wychodzące · działa za NAT-em

Server pozostaje ogólny

Nie zna semantyki konkretnego typu zadania.

Runner inicjuje połączenie

Może działać w innej sieci, także za NAT-em.

Implementacje są wymienne

Różne Runnery mogą obsługiwać różne typy zadań.

Dla edukacji, konkursów i eksperymentów

Jedna baza, różne zastosowania

Wspólny rdzeń wspiera odmienne scenariusze organizacyjne, a rozszerzalność pozostawia miejsce na nowe modele oceniania.

Kursy akademickie

Serie zadań, wiele prób, prywatne wyniki i szczegółowa informacja zwrotna.

Warsztaty i wydarzenia

Szybkie aktywności i konta krótkoterminowe z wygasaniem dostępu.

Nowe sposoby oceniania

Wyspecjalizowane Runnery, dodatkowe handlery i renderery — bez zmian w centralnym Serverze.

Open source na licencji MIT

Poznaj kod AlgoJudge

Client, Server, Runner, External-Runner, Ops i Docs są publiczne na licencji MIT, a każde z tych repozytoriów ma wydanie v0.2.0. Przejrzyj ich kod, zgłoś problem albo pomóż rozwijać platformę.

Dołącz do rozwoju
v0.2.0

AlgoJudge External-Runner

Przekazuje rozwiązania do zewnętrznych systemów oceniających i zwraca ich werdykty bez lokalnego wykonywania kodu.

v0.2.0

AlgoJudge Ops

Produkcyjny stos Compose oraz skrypty do instalowania, aktualizowania i tworzenia kopii zapasowych wdrożenia self-hosted.

Niezależnie wersjonowane komponenty

Linia wydań 0.2 jest dostępna

Komponenty AlgoJudge są wersjonowane niezależnie. Ich pierwsze wydania zaczęły się od 0.1.0; aktualne wydania v0.2.0 razem zapewniają kompletny przepływ self-hosted.

0.2.0

Sześć niezależnie wersjonowanych wydań

Client, Server, Runner, External-Runner, Ops i Docs zachowują własne historie wydań.

  • Client v0.2.0
  • Server v0.2.0
  • Runner v0.2.0
  • External-Runner v0.2.0
  • Ops v0.2.0
  • Docs v0.2.0
Dostępne

Aktualna linia 0.2

Kompletny przepływ obejmuje teraz szerszą ocenę lokalną oraz integrację z platformami kursowymi.

  • Zawody, kursy i integracja LTI 1.3 zweryfikowana z Moodle
  • Typy zadań Standard I/O i output-only
  • Osiemnaście lokalnych toolchainów językowych
  • Własne checkery i interaktory w standard-io@1
  • Izolowane wykonanie, werdykty, punkty, historia i statusy na żywo
Dalej

Historia 0.1 i dalsze kierunki

Linia 0.1 ustanowiła fundament self-hosted. Modularna architektura pozostawia miejsce na kolejne rozszerzenia.

  • Zadania optymalizacyjne, wieloplikowe, sieciowe i rozproszone
  • Więcej wyspecjalizowanych implementacji Runnera
  • Praca Servera w wielu instancjach
  • Klucze API i tokeny dostępu dla kont
Open source od pierwszej linii

Twórz zadania. Organizuj aktywności. Rozwijaj otwartą platformę oceniania.

Zobacz architekturę, przejrzyj kod i pomóż kształtować platformę, która nie zamyka nowych pomysłów w jednym modelu oceniania.