#51 - System Engineering
Alexandru Dorobanțiu a prezentat "Systems Engineering (Plural)", arătând cum a dezvoltat o platformă de concurs de programare pentru liceeni. S-au discutat deciziile cheie de arhitectură: folosirea SQLite pentru DB, Docker pentru securitatea rulării codului și Panel pentru frontend.
Contextul și Viziunea „Systems Engineering (Plural)”
Alexandru Dorobanțiu, a susținut o prezentare valoroasă despre Systems Engineering (Plural), un concept ce depășește simpla inginerie software. Acesta se referă la procesul holistic de a te asigura că toate aspectele unui proiect complex sunt luate în considerare și gestionate: de la cerințele funcționale și tehnice, la analiza utilizatorilor și sponsorilor, gestionarea costurilor, până la fiabilitatea (reliability) sistemului și necesitatea de a lua decizii ferme la momentul potrivit. Prezentarea a fost, de fapt, o lecție despre cum se traduce gândirea de inginer de sistem în rezolvarea unei probleme reale.
Studiul de Caz: Platforma de Concurs pentru Liceeni
Alexandru a utilizat ca studiu de caz dezvoltarea unei platforme complexe pentru organizarea unui concurs de programare destinat elevilor de liceu, în scopul pregătirii pentru examenul de Bacalaureat la Informatică.
Cerința principală a fost implementarea unui sistem cu:
- Evaluare automată a codului (cu posibilitatea de a rula codul elevilor în siguranță).
- Sistem de reîncercări (retries), în care doar prima încercare beneficiază de punctaj maxim, iar următoarele atrag o penalizare de punctaj.
- Gestionarea actorilor diferiți: elevii, profesorii, creatorii de subiecte, corectorii (pentru problemele care nu pot fi evaluate automat) și administratorii de sistem.
Detalii de Arhitectură și Soluțiile Adoptate
Proiectul, realizat în doar câteva zile de cod intensiv (aproximativ 4 zile), s-a bazat pe o serie de decizii pragmatice pentru a atinge scopul rapid și fiabil:
1. Baza de Date: Pragmatism cu SQLite
Pentru a elimina complexitatea și dependența de rețea asociate bazelor de date clasice (precum PostgreSQL sau MySQL) și pentru a simplifica operațiunile de administrare, s-a optat pentru SQLite.
- Beneficiu major: Baza de date este un singur fișier încorporat în aplicație. Backup-ul devine extrem de simplu (o simplă copiere de fișier), iar dependența de rețea dintre aplicație și DB dispare.
2. Configurația Subiectelor: Evitarea Interfeței Administrative Complexe
În loc să se dezvolte o interfață web securizată complexă pentru crearea și administrarea subiectelor, Alexandru a ales o abordare bazată pe fișiere:
- Structura Subiectelor: Fără UI, subiectele sunt definite prin fișiere de configurare în format TOML (Tom's Obvious Minimal Language).
- Textul Problemelor: Textul propriu-zis este scris în Markdown.
- Evaluarea Personalizată: Pentru problemele complexe (evaluare parțială sau logică specifică), creatorul subiectului este obligat să scrie un mic program (un "verificator") care rulează și validează răspunsul elevului, returnând punctajul obținut.
- Regulament: Aplicația include un regulament specific, afișat pe homepage, care este de fapt un regulament de olimpiadă adaptat contextului concursului.
3. Securitate și Izolare: Containere Docker
Cea mai mare provocare de securitate a fost rularea codului sursă trimis de elevi, deoarece acesta putea conține tentative de cod malițios (acces la fișiere, ștergeri, atacuri de tip DoS, etc.). Soluția a fost izolarea completă a execuției:
- Execuția Securizată: Codul studenților este rulat întotdeauna în containere Docker efemere. Acest lucru previne orice tentativă de a accesa sau afecta serverul gazdă sau fișierele altor participanți.
- Feedback Limitat: Sistemul nu oferă elevilor datele de intrare sau ieșire ale testelor, ci doar un cod de eroare în cazul unui eșec (ex:
timeout,segmentation fault,assertion failed), pentru a menține integritatea testelor. - Verificări Post-Concurs: După concurs, au fost verificate logurile de sistem pentru a se asigura că nu au existat încercări de compromitere a platformei.
4. Frontend: Alegerea Panel și WebSocket
Pentru interfața web (Frontend), s-a ales biblioteca Python Panel (parte din ecosistemul HoloViz), o opțiune menită să accelereze dezvoltarea:
- Viteza de Implementare: Panel facilitează construirea rapidă de aplicații interactive și dashboard-uri direct din Python.
- Arhitectură Hibridă: Panel menține starea aplicației pe server și comunică cu browser-ul prin WebSocket (folosind un server bazat pe uvicorn), eliminând astfel complexitatea managementului stării separate în frontend și backend.
Concluzie și Următorul Eveniment
Concursul a fost un succes, cu 32 de participanți. Prezentarea lui Alexandru a demonstrat că Systems Engineering înseamnă a face alegeri inteligente și a folosi instrumente flexibile pentru a rezolva probleme cu resurse limitate.