XMC - Web - București - Lucrari 2018 Nationala

Informatii generale

Descriere

XMC este o platforma online pentru organizarea si desfasurarea concursurilor de natura algoritmica si pentru pregatirea utilizatorilor cu ajutorul problemelor de informatica din “arhiva de probleme”, prin intermediul unui evaluator automat care compileaza, executa si evalueaza solutiile utilizatorilor fara interventie umana. Conceptul nu este nou, el fiind intalnit in platforme precum infoarena, codeforces, csacademy etc.

XMC se deosebeste prin scopul lui de a nu fi prezent doar intr-o singura instanta oficiala, precum exemplele de mai sus, ci pentru a fi usor de instalat pentru oricine doreste sa organizeze un concurs de orice marime sau care vrea sa puna la dispozitie materiale de pregatire pentru elevi sau pentru un cerc de informatica. Materialele consta in probleme de informatica, lectii, ghiduri.

XMC se mai deosebeste si prin arhitectura si tehnologiile moderne pe care se bazeaza. XMC este compus dintr-o suita de programe separate (servicii) care comunica intre ele si care pot fi executate in mai multe instante pentru a creste scalabilitatea si redundanta, asemanator microserviciilor.

Tehnologii

Mai multe in README.infoeducatie.md din repo-ul precizat.

Backend

Lista tehnologiilor folosite in backend:

Docker {,Compose}
Go
Protocol Buffers, Consul
Postgresql
Redis
Go-Micro - Platforma de RPC pentru sisteme distribuite
Consul - Service discovery si sincronizare de setari
isolate - Sandbox bazat pe Linux Containers in care se executa solutiile trimise de utilizatori
Folosim o librarie scrisa de noi pentru a interactiona cu isolate, isowrap
Traefik - Reverse proxy pentru componentele web
Amazon S3 - Stocarea atasamentelor
In development si pe serverul de test folosim Minio, un server de storage cu API compatibil S3.

Componente
xmc-core - Componenta principala, se ocupa de administrarea obiectelor (task, dataset, page etc)
account-srv - Gestionarea conturilor si a sesiunilor. Conturile pot fi de utilizator sau de serviciu (roboti).
auth-srv - Server de autorizare care implementeaza framework-ul OAuth2. Bazat pe osin. Token-urile sunt de forma JSON Web Tokens si sunt validate folosind o pereche de chei RSA.
eval-srv - Primeste “job-uri” de evaluare de submisii de la dispatcher-srv si le evalueaza intr-un sandbox. Rezultatul este trimis inapoi la xmc-core.
dispatcher-srv - Dispecerul de job-uri. Primeste job-uri de la xmc-core si le atribuie serverelor de evaluare libere.
api-srv - Server de API REST. Expune informatii de la xmc-core prin JSON.

Frontend

In repo separat: GitHub - xmc-dev/web: Web Frontend

Tehnologii:

HTML5, CSS3, JS (ES2016), fetch
JSX, Babel, Webpack
Preact, Redux
Monaco Editor - componenta de editare text in browser

Design:
Less.js (pentru semantic)
Semantic UI React - tema custom, GitHub - xmc-dev/luchian: Luchian Semantic UI theme
Principii de baza din Microsoft Fluent Design, UX clar
Responsive
Hackuri oribile :slight_smile:

Cerinte sistem

Sistem cu procesor AMD64, preferabil Linux. Trebuie sa fie suportat de Docker. Conexiune la internet.

Frontend: Firefox / Chrome / Safari / Edge. Versiune cat mai recenta. Nu necesita resurse externe, functioneaza in medii izolate.

Realizatori

Tudor Roman

  • Scoala: Colegiul Național I.L. Caragiale
  • Clasa: 9
  • Judet: București
  • Oras: București

Ciprian Ionescu

  • Scoala: Colegiul Național “Grigore Moisil”
  • Clasa: 9
  • Judet: București
  • Oras: București

Screenshots