>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Sécurité
PHP

Comment créer votre propre arène de programmation — Exploration du code source d'omegaUp

349 étoiles

Imaginez que vous deviez organiser une olympiade de programmation pour plusieurs milliers de participants. Ce n'est pas suffisant de simplement créer des problèmes — vous avez besoin d'un endroit pour recevoir les solutions, les vérifier en temps réel, surveiller la charge et vous assurer que personne ne fasse tomber le serveur avec du code malveillant. Ça vous parle ?

C'est exactement ce pour quoi existe omegaUp — une plateforme open-source née d'une initiative éducative en Amérique latine et devenue un outil puissant pour organiser des compétitions et enseigner les algorithmes. Aujourd'hui, nous allons regarder "sous le capot" de ce projet et découvrir pourquoi il pourrait être intéressant non seulement pour les enseignants en informatique, mais aussi pour les développeurs professionnels.

omegaUp

Qu'est-ce qu'omegaUp ?

En bref, c'est un écosystème complet pour le jugement automatique de problèmes de programmation (Online Judge). Le projet répond à deux défis principaux :

  1. Automatisation : Les enseignants n'ont pas besoin de vérifier manuellement des centaines de listings de code. Le système compilera le code, l'exécutera à travers les tests et attribuera les scores lui-même.
  2. Sécurité : Exécuter le code de quelqu'un d'autre est toujours un risque. omegaUp utilise des mécanismes d'isolation avancés pour garantir que le code d'un participant ne s'échappe pas du "bac à sable".

Le projet est sur GitHub depuis de nombreuses années, a rassemblé une communauté impressionnante et prend en charge plusieurs langages de programmation, y compris les classiques des olympiades : C++, Java, Python.

Sous le capot : détails architecturaux

Le projet est divisé en plusieurs composants clés. Ce n'est pas un terrifiant monolithe, mais un système modulaire.

1. Frontend et API (dépôt principal)

Le dépôt principal contient la logique de gestion des utilisateurs, des problèmes et des concours.

  • Back-end : Écrit en PHP. Les développeurs utilisent les patterns DAO (Data Access Objects) et VO (Value Objects), ce qui rend le travail avec la base de données prévisible et structuré. Tous les contrôleurs se trouvent dans le dossier frontend/server/src/Controllers.
  • Internationalisation : Le projet prend en charge l'espagnol, l'anglais et le portugais. Si vous avez toujours voulu comprendre comment organiser correctement la i18n dans un grand projet, jetez un œil à frontend/templates.

2. Le cœur du système — Grader (projet Quark)

Les choses les plus intéressantes se passent dans un service séparé appelé Quark. C'est là que la file d'attente des solutions soumises est gérée. Il est responsable de s'assurer que chaque problème est jugé à temps et que les résultats sont livrés à l'utilisateur.

3. Sécurité — omegajail

Comment exécuter une "boîte noire" avec du code pour qu'elle ne supprime pas la base de données ? omegaUp utilise omegajail. C'est un mécanisme basé sur les conteneurs Linux et seccomp-bpf. Fait amusant : il est construit sur des travaux du projet Chromium (Google). Le système limite strictement les appels système, la mémoire et le temps d'exécution.

Pourquoi les développeurs devraient-ils prêter attention à ce projet ?

Même si vous ne prévoyez pas de lancer votre propre clone de LeetCode, il y a beaucoup à apprendre du code source d'omegaUp :

  • Travail avec des problèmes interactifs : Grâce à la bibliothèque libinteractive, la plateforme permet de créer des problèmes où le code de l'utilisateur doit interagir avec le programme du jury en temps réel. C'est beaucoup plus complexe que de simplement comparer des fichiers texte en sortie.
  • Organisation des tests : Le projet utilise activement yarn test. Vous pouvez voir comment couvrir un système complexe avec beaucoup de dépendances avec des tests.
  • Évolutivité : Le système est conçu pour gérer les pics de charge lors des grands concours.

Comment exécuter le projet en local ?

Les développeurs ont préparé un excellent guide de déploiement. Pour un démarrage rapide, vous aurez besoin de l'ensemble standard d'outils : git, yarn et un peu de patience pour construire les sous-modules.

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

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

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

Valeur pratique : où utiliser ceci ?

  1. Au sein de votre entreprise : Pour organiser des hackathons internes ou évaluer les compétences des candidats. Votre propre plateforme vous donne un contrôle total sur les données et les problèmes.
  2. Éducation : Si vous enseignez des cours ou travaillez dans une université, omegaUp est une solution clé en main qui vous libérera du travail répétitif.
  3. Contribution open source : Il y a plus de 800 issues ouvertes dans le dépôt. Le projet est ouvert aux contributeurs, et c'est une excellente occasion de travailler sur un produit vraiment demandé utilisé par des dizaines de milliers de personnes.

omegaUp n'est pas simplement "un autre site avec des problèmes". C'est un projet d'ingénierie mature qui démontre comment construire des systèmes sécurisés et à haute charge pour l'exécution de code. Si vous êtes intéressé par les compilateurs, l'isolation de processus Linux, ou si vous voulez simplement voir une implémentation de qualité de l'architecture PHP — ce dépôt mérite définitivement une place dans vos étoiles GitHub.

Prêt à tenter d'être architecte de systèmes d'olympiades ? Commencez par la documentation de configuration de l'environnement.

Projets similaires