EvalCNMB - Web - Valcea - Lucrari 2015 Online

Informatii generale

Descriere

Categoria: Web , Software Educational si Software Utilitar

EvalCNMB evalueaza online sursele realizate in limbajul C/C++ cu ajutorul sistemului de operare Linux. Acest proiect a fost realizat pentru a putea creea, evalua si testa propriile probleme dar si probleme ce nu se regasesc pe alte siteuri de profil.

Avantaje:

  1. Testarea problemelor se face fie prin terminal, fie prin fisiere (De ex fstream sau iostream ), fisierele date.in si date.out sunt universale pentru toate problemele postate.
  2. Testarea problemelor se face pe sistemul de operare linux.
  3. Problemele si testele sunt postate in mysql si sunt preluate la postarea codului sursa pentru verificare.
  4. Postarea problemelor se face intr-un mod simplu cu ajutorul unui admin panel. Ele pot fi postate de utilizatorii cu rang-ul mai mare sau egal cu 2 (Rangul default unui utilizator inregistrat este 1, iar cel in asteptate de confirmare pe email este 0).
  5. Compilarea problemelor se face cu ajutorul softului GCC executat cu proc_open pe Linux.
  6. Se poate seta limta de timp si de memorie pentru fiecare problema.
  7. O viteza foarte buna de deschidere, folosind imaginii criptate in base64.

Tehnologii

PHP, MySQL, HTML, HTML5, CSS, CSS 3, AJAX, JavaScript, Linux, GCC.

Cerinte sistem

Sistem de operare: Linux (Recomandat CentOS)
Memorie RAM: 512 MB
CPU: 1 Ghz (1 Core)
HDD: 1 GB

Realizatori

Filip Ilie Edi

  • Scoala: Colegiul National “Mircea Cel Batran”
  • Clasa: 9
  • Judet: Valcea
  • Oras: Rm. Valcea

Cochintele Andreea Elena

  • Scoala: Colegiul National “Mircea Cel Batran”
  • Clasa: 9
  • Judet: Valcea
  • Oras: Rm. Valcea

Screenshots


Cum izolezi procesul de evaluare de restul masinii? Folosesti LXC (Linux Containers, Docker), un simplu chroot sau nimic?

Pentru acest proiect folosesc un server, in acel server am instalat gcc ( sudo apt-get install build-essential ) , si restul utilitatrelor httpd…, php, fiind configurat sa accepte functiile proc_open() si exec() cu ajutorul comenzi proc_open realizez compilarea / executarea programului, puteti sa va uitati in class.Compiler.php din folderul core, nu este OOP dar i-am pun numele class. pentru ca o sa o modific in OOP, pentru ca are multe dezavantaje acum si vulnerabilitati. M-am gandit cu acest proiect sa il folosesc si pentru a sustine teste la scoala,.etc, pentru acesta trebuie creat un stick usb bootablil cu sistem de operare si utilitarele potrivite pentru a rula acest script.

O intrebare, de ce in ultimul timp o groaza de persoane incearca sa realizeze noi site-uri asemanatoare cu info arena, ce are info arena asa nasol ?

Nu ma intelege-ti gresit, eu nici nu am stiut de infoarena, si acest domeniu l-am folosit pentru teste, o sa achizitionez un domeniu .com /.ro pentru acest proiect si o sa-l dezvolt mult, am inceput sa lucru la el de mai putin de 30 zile, initial vroiam sa ma apuc de o platfrma tip forum, dar am aflat de acest concurs si m-am gandit sa fac ceva care sa se incadreze si in software educational si utilitar. Si prin Software Educational ma refer la folosirea acestuia de catre scoli pentru lucru/exersare. Si prin Software Utilitar, folosirea pentru a efectua lucrari de control, in LAN… Mai explicit: Acest script cum functioneaza pe un server, avand totul independent pe acel server, nu vorbesc si de protectie hardware (gen DDOS/ SYN), aceasta protectie nu are rost in LAN, se poate creea cum am zis si mai sus un stick usb bootabil, cu un sistem de operare linux, de exemplu un centos 6 minimal care ocupa maxim 750 mb, avand instalate toate functiile utilitare instalate + scriptul care nu cred ca are mai mut de 100 MB, deci poate fi pus si pe un stick care are memorie de 1 GB, si se executa de pe un calculator din LAN si se acceseaza de elevi prin IP-ul alocat lui, care se poate afla introducand comanda “ifconfig” in sistemul de operare executat. Problemele pot fi postate intr-un mod usor cu ajutorul Admin Panel-ului de profesor dinainte de a da testul… Acest script nu cere resurse uriase, depinde de problemele c++ postate, de memoria limita setata… Nu afecteaza serverul prin compilare, ele se executa in background fata de celelante functii, Eu zic ca, cu nu server dedicat 1 GB ram, i3, 2 Core, banda de date de 100 mb, ar tine cu usurare cateva sute de mii de utilizatori, sa presupunem ca 10000 de utilizatori trimit surse in acelasi timp, in medie 1 secunda 10 teste pt problema si compilare etc… se poate limita cu o variabila, as zice in mysql sau intr-un fisier txt, care sa dea sleep la rularea compilarii/ testarii unei probleme. O sa fac pastrarea solutiilor trimise in database, si executarea acestora dupa un timp de exemplu la o problema cu limita de timp 0.1, care are 9 teste, deci 0.9 secunde, si eventual mai punem 0.1 de pauza daca server-ul nu raspunde repede pentru compilare. la urmatoarea solutie trimisa sa se puna sleep(1) pana la executarea ei, si daca sunt mai multe “la coada” inaintea ei sa se adune valoriile, de exemplu daca mai sunt inca 5 solutii tot la fel, care sunt in asteptare, sa se puna sleep(6)… ajuta mult… La scriptul de compilare nu mam inspirat de undeva, este ideia mea si nu cred ca se mai gaseste public pe undev. Acuma e folosita clasic, dupa ce o sa o fac cu OOP o sa fie mult mai eficienta si mai sigura. Puteti sa-mi da-ti un exemplu de domeniu pentru acest script, pentru al achizitiona. Si daca sunt intrebari sau propunei de orice fel o sa raspund cu mare drag. Multumesc! :relaxed: