>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Beveiliging
PHP

Hoe bouw je je eigen programmeerarena — Een blik achter de schermen van de omegaUp codebase

349 sterren

Stel je voor dat je een programmeer Olympiade moet organiseren voor enkele duizenden deelnemers. Het is niet voldoende om alleen maar problemen te bedenken — je hebt ergens nodig om oplossingen te ontvangen, ze in realtime te verifiëren, de belasting te monitoren en ervoor te zorgen dat niemand de server met kwaadaardige code platlegt. Komt dit bekend voor?

Dit is precies waar omegaUp voor bestaat — een open-source platform dat is gegroeid vanuit een educatief initiatief in Latijns-Amerika en een krachtig hulpmiddel is geworden voor het organiseren van wedstrijden en het onderwijzen van algoritmen. Vandaag kijken we "onder de motorkap" van dit project en ontdekken waarom het niet alleen interessant kan zijn voor informaticadocenten, maar ook voor professionele ontwikkelaars.

omegaUp

Wat is omegaUp?

Kort samengevat: het is een volledig uitgerust ecosysteem voor automatisch beoordelen van programmeerproblemen (Online Judge). Het project lost twee hoofduitdagingen op:

  1. Automatisering: Docenten hoeven niet meer honderden codelijsten handmatig te controleren. Het systeem compileert de code, voert deze door tests uit en wijst zelf scores toe.
  2. Beveiliging: De code van iemand anders uitvoeren is altijd een risico. omegaUp maakt gebruik van geavanceerde isolatiemechanismen om ervoor te zorgen dat de code van een deelnemer niet uit de "sandbox" ontsnapt.

Het project is al jaren op GitHub, heeft een indrukwekkende community verzameld en ondersteunt verschillende programmeertalen, waaronder de klassiekers uit de Olympiade: C++, Java, Python.

Wat zit er onder de motorkap: Architectonische details

Het project is opgedeeld in verschillende belangrijke componenten. Het is geen angstaanjagende monolith, maar een modulair systeem.

1. Frontend en API (hoofdrepository)

De hoofdrepository bevat de logica voor het beheren van gebruikers, problemen en wedstrijden.

  • Back-end: Geschreven in PHP. Ontwikkelaars gebruiken de DAO (Data Access Objects) en VO (Value Objects) patronen, wat het werken met de database voorspelbaar en gestructureerd maakt. Alle controllers bevinden zich in de frontend/server/src/Controllers map.
  • Internationalisering: Het project ondersteunt Spaans, Engels en Portugees. Als je wilt uitzoeken hoe je i18n correct kunt organiseren in een groot project, neem dan een kijkje in frontend/templates.

2. Het hart van het systeem — Grader (Quark project)

De meest interessante dingen gebeuren in een aparte service genaamd Quark. Hier wordt de wachtrij met ingediende oplossingen beheerd. Het is verantwoordelijk voor het ervoor zorgen dat elk probleem op tijd wordt beoordeeld en dat resultaten aan de gebruiker worden geleverd.

3. Beveiliging — omegajail

Hoe voer je een "black box" met code uit zodat het niet de database verwijdert? omegaUp gebruikt omegajail. Dit is een mechanisme gebaseerd op Linux containers en seccomp-bpf. Leuke trivia: het is gebouwd op werk van het Chromium project (Google). Het systeem beperkt strikt systeemcalls, geheugen en uitvoeringstijd.

Waarom zouden ontwikkelaars aandacht aan dit project moeten besteden?

Zelfs als je niet van plan bent om je eigen LeetCode-kloon te lanceren, is er veel te leren van de omegaUp codebase:

  • Werken met interactieve problemen: Dankzij de libinteractive bibliotheek stelt het platform de creatie van problemen mogelijk waarbij gebruikerscode in realtime moet interageren met het juryprogramma. Dit is veel complexer dan simpelweg tekstbestanden vergelijken op output.
  • Testorganisatie: Het project maakt actief gebruik van yarn test. Je kunt zien hoe je een complex systeem met veel afhankelijkheden kunt afdekken met tests.
  • Schaalbaarheid: Het systeem is ontworpen om piekbelastingen tijdens grote wedstrijden aan te kunnen.

Hoe het project lokaal uit te voeren?

Ontwikkelaars hebben een uitstekende implementatieguide voorbereid. Voor een snelle start heb je de standaard set tools nodig: git, yarn en wat geduld voor het bouwen van submodules.

# Клонируем со всеми внутренними зависимостями
git clone --recurse-submodules https://github.com/omegaup/omegaup
cd omegaup

# Если забыли про субмодули при клонировании:
git submodule update --init --recursive

# Установка зависимостей
yarn install
yarn test

Praktische waarde: Waar dit gebruiken?

  1. Binnen je bedrijf: Voor het organiseren van interne hackathons of het beoordelen van de vaardigheden van kandidaten. Je eigen platform geeft je volledige controle over data en problemen.
  2. Onderwijs: Als je cursussen geeft of aan een universiteit werkt, is omegaUp een turnkey oplossing die je bevrijdt van routinematig werk.
  3. Open Source bijdrage: Er zijn meer dan 800 openstaande issues in de repository. Het project staat open voor bijdragers en het is een geweldige kans om te werken aan een echt gewild product dat door tienduizenden mensen wordt gebruikt.

omegaUp is niet zomaar "nog een site met problemen." Het is een volwassen technisch project dat demonstreert hoe je veilige en high-load systemen voor code-uitvoering bouwt. Als je geïnteresseerd bent in compilers, Linux procesisolatie, of gewoon een kwaliteitsimplementatie van PHP-architectuur wilt zien — dit repository verdient zeker een plekje in je GitHub-sterren.

Klaar om te proberen een Olympiade-systeemarchitect te zijn? Begin met de documentatie voor omgevingsconfiguratie.

Gerelateerde projecten