Diferente pentru propuneri/3-infoarena3 intre reviziile #23 si #24

Nu exista diferente intre titluri.

Diferente intre continut:

h2. Putina istorie
Site-ul infoarena1 a fost scris acum vreo 4-5 ani de Cristi pentru a fi prezentat la InfoEducatie, un concurs de soft de la Galaciuc. Site-ul era foarte impresionant si a castigat concursul 2 ani la rand. Mai mult, site-ul era atat de bun incat a intrat in "productie" si a reusit sa adune o comunitate in jurul lui. Comunitatea a produs un numar impresionant de probleme si concursuri si infoarena un loc de adunare pentru olimpicii romani.
Site-ul infoarena1 a fost scris acum vreo 4-5 ani de Cristi pentru a fi prezentat la InfoEducatie, un concurs de soft de la Galaciuc. Site-ul era foarte impresionant si a castigat concursul 2 ani la rand. Mai mult, site-ul era atat de bun incat a intrat in "productie" si a reusit sa adune o comunitate in jurul lui. Comunitatea a produs un numar impresionant de probleme si concursuri iar infoarena un loc de adunare pentru olimpicii romani.
Mult timp soft-ul din spatele site-ului a ramas aproape identic cu ce a venit Cristi la Galaciuc; s-au facut doar niste fix-uri absolut necesare. Am incercat sa punem pe picioare un 'site de development':http://hackers.devnet.ro/ si sa bagam codul in subversion dar nimeni nu s-a atins de cod. Au crescut niste lucruri pe langa infoarena1; un "portal editabil" de informatica si o integrare urata cu 'MediaWiki':http://www.mediawiki.org/. Eventual am ajuns la concluzia ca nu se poate face nimic in infoarena1 si trebuie rescris de la 0.
Mult timp soft-ul din spatele site-ului a ramas aproape identic cu ce a venit Cristi la Galaciuc; s-au facut doar niste fix-uri absolut necesare. Am incercat sa punem pe picioare un 'site de development':http://hackers.devnet.ro/ si sa bagam codul in subversion dar nimeni nu s-a atins de cod. Au crescut inca niste lucruri *pe langa* infoarena1; un "portal editabil" de informatica, un forum si o integrare urata cu 'MediaWiki':http://www.mediawiki.org/. Eventual am ajuns la concluzia ca nu se poate face nimic in infoarena1 si trebuie rescris totul de la 0.
In vara lui 2006 ne-am adunat 5-6 flacai, ne-am dus in munti si ne-am incuiat in casa ca sa facem infoarena2 (multumim din nou lui Vali pentru logistica). Intre noi il aveam doar pe Cristi cu o oarecare experienta in web-development (php/mysql), in rest eram in cea mai mare parte incepatori. Site-ul nu a fost terminat acolo in munti si a fost nevoie de un numar de "coding camp"-uri pentru a pune site-ul pe picioare. Eventual site-ul a ajuns la nivelul de functionalitate din infoarena1, si a fost lansat spre sfarsitul lui 2006. Parti de genul editarea de runde si probleme (o cerinta critica) au fost finalizate doar in 2007.
In vara lui 2006 ne-am adunat 5-6 flacai, ne-am dus in munti si ne-am incuiat in casa ca sa facem infoarena2 (multumim din nou lui Vali pentru logistica). Intre noi il aveam doar pe Cristi cu o oarecare experienta in web-development (php/mysql), in rest eram in cea mai mare parte incepatori. Site-ul nu a fost terminat acolo in munti si a fost nevoie de un numar de "coding camp"-uri pentru a pune site-ul pe picioare. Eventual site-ul a ajuns la nivelul de functionalitate din infoarena1, si a fost lansat spre sfarsitul lui 2006. Parti de genul editarea de runde/probleme si suportul de concursuri (foarte importante) au fost finalizate abia in 2007.
Softul infoarena2 este evident mult mai bun decat infoarena1. Asta se poate vedea cel mai bine in calitatea si dimensiunile site-ului. Numarul de probleme din arhiva este mai mult decat dublu, si a devenit posibil pentru comunitatea site-ului sa 'ne ajute':implica-te mult mai mult.
Pe parcursul dezvoltarii infoarena2 noi (Cristi, Leonard, Mircea, Vali, etc...) am facut un numar de greseli majore la care acum simtim efectele. Daca am incepe din nou programarea la proiectul infoarena3 nu am sa face din nou aceleasi greseli si rezultatul ar fi mult mai bun. Daca stim care au fost gresile si cum sa le evitam nu vom ajunge din nou in aceasi situatie.
Poate parea trist ca aruncam la gunoi aproape un an de efort, dar nu este cazul. Vom pastra tot continului site-ului, care valoreaza enorm (si asta tine de fapt infoarena.ro in viata). Si vom pastra lectiile infoarena2, care sunt mult mai valoroase decat codul php. Daca am fi alti omaeni care am rescrie codul probabil ca am face aceleasi prostii, si atunc ar mai bine sa ne tina de treaba la infoarean2.
Poate parea trist ca aruncam la gunoi aproape un an de efort, dar nu este cazul. Vom pastra tot continului site-ului, care valoreaza enorm (si asta tine de fapt infoarena.ro in viata). Vom pastra lectiile infoarena2, care sunt mult mai valoroase decat codul php. Daca am fi alti oameni care am rescrie codul probabil ca am face aceleasi prostii, si atunci ar mai bine sa ne tinem de treaba la infoarena2.
Am facut o lista cu ce anume am gresit in infoarena2 si cum putem face mai bine (in infoarena3). Este posibil sa reparam multe dintre probleme fara o rescriere, dar nu toate. Multe dintre aceste greseli vizeaza arhitectura fundamentala a site-ului. Acestea nu pot fi reparate decat printr-un efort enorm, iar acel efort cumulat ar fi mai mare decat o rescriere de la 0.
h3. PHP
Infoarena2 este un site traditional bazat pe php/mysql si foarte putin javascript. Nu folosim clase si nici exceptii din php. In mod similat nu folosim decat tabele MyISAM in MySQL, fara foreign key, fara constraints si fara tranzactii. Pentru layout nu folosim nici un sistem de templating, doar html presarat cu snippet-uri php. Infoarena2 foloseste absolut minimumul de tehnologie pentru un proiect web-based.
Infoarena2 este un site traditional bazat pe php/mysql si foarte putin javascript. Nu folosim clase si nici exceptii din php. In mod similar nu folosim decat tabele MyISAM in MySQL, fara foreign key-uri, constraint-uri, view-uri sau tranzactii. Pentru layout nu folosim nici un sistem de templating, doar html presarat cu snippet-uri php. Infoarena2 foloseste absolut minimumul de tehnologie posibil pentru un proiect web-based.
Aceasta decizie fost facuta in vara 2006 pentru a face site-ul simplu si usor de programat. Ne-am gandit ca sunt mai multi oameni care stii si vor sa lucreze cu php/mysql procedural decat cu orice altceva. Este discutabil daca sunt mai multi oameni interesati in php decat in python sau ruby, cel putin dintre utilizatorii nostri. Probabil ca multi ar fi tentati sa ajute la un proiect care foloseste feature-uri avansate de programare absente in C/C++/Pascal (si php). Dar oricum nu am reusit sa bagam pe nimeni din exterior in echipa de development. Mai mult, am ajuns in situatia in care nici noi noi vrei sa programam in php/mysql, sau cel putin nu in modul in care este folosit in infoarena. PHP este un limbaj foarte util pentru multe lucruri, dar pentru infoarena2 nu a functionat.
Aceasta decizie fost facuta in vara 2006 pentru a face site-ul simplu si usor de programat. Ne-am gandit ca sunt mai multi oameni care stiu si vor sa lucreze cu php/mysql procedural decat cu orice altceva. Este discutabil daca sunt mai multi oameni interesati in php decat in python sau ruby, cel putin dintre utilizatorii nostri. Probabil ca multi ar fi tentati sa ajute la un proiect care foloseste feature-uri avansate de limbaj absente in C/C++/Pascal (si PHP). Dar oricum nu am reusit sa bagam pe nimeni din exterior in echipa de development. Mai mult, am ajuns in situatia in care nici noi nu vrem sa programam in php/mysql, sau cel putin nu in modul in care este folosit in infoarena2. PHP este un limbaj foarte util pentru multe lucruri, dar pentru infoarena2 nu a functionat.
h3. Tabelul ia_parameter_values
Una dintre tintele infoarena2 a fost sa avem mai multe tipuri de runde si probleme. Fiecare tip de runda sau de problema are alti "parametri", ne-am gandit sa tinem toti acei parametri intr-un sigur tabel de forma "id-obiect", "nume-parametru", "valoare". Este o idee foarte proasta care nu are absolut nici un merit.
Una dintre tintele infoarena2 a fost sa avem mai multe tipuri de runde si probleme. Deoarece fiecare tip de runda sau de problema are alti "parametri", ne-am gandit sa tinem toti acei parametri intr-un sigur tabel de forma "id-obiect", "nume-parametru", "valoare". Este o idee foarte proasta care nu are absolut nici un merit. Acest tabel si gandirea din spatele lui a facut codul de runde si probleme sa devina mult mai complicat decat este necesar, si a avut consecinte absolut infioratoare:
Acest tabel face codul de runde si probleme sa devina mult mai complicat decat este necesar, si a avut consecinte infioratoare:
* Editorul de task-uri si runde a intarziat si e greu utilizabil.
* Securitatea per task/runda este un hack mizerabil.
* *Nu avem* mai multe tipuri de probleme si concursuri (unul dintre scopurile infoarena2).
* *Nu avem* mai multe tipuri de probleme si concursuri (scopul original).
* Rundele inca nu ruleaza automat.
Ar trebui sa avem pentru fiecare tip de problema sau runda un tabel de genul ia_classic_task, care contine o coloana task_id si apoi cate o coloana pentru fiecare parametru. Eu (Leonard) am incercat aceasta transformare dar *nu am reusit* (din cauza repercursiuni in restul site-ului).
Ar trebui sa avem pentru fiecare tip de problema sau runda un tabel de genul ia_classic_task, care contine o coloana task_id si apoi cate o coloana pentru fiecare parametru. Eu (Leonard) am incercat aceasta transformare dar *nu am reusit* (din cauza repercursiuni in restul site-ului). Consider ca inlocuirea acestui tabel e mai dificila decat rescrierea de la 0.
h3. Tabelul ia_score
Tabelul ia_score are coloanele: score_id, user_id, task_id, round_id si score. Primele 4 coloane sunt sunt nulabile, asa ca tabelul nu are PK. Ideea era sa tinem scoruri per runda cu task_id NULL si eventual statistici per task/round cu user_id NULL. Astfel puteam sa tinem toate scorurile in acelasi tabel. Din pacate am ajuns in situatia de a avea mai putine statistici decat in infoarena1. Asta cred ca este singurul punct in care infoarena1 depaseste infoarena2.
Tabelul ia_score are coloanele: score_id, user_id, task_id, round_id si score (aproximativ). Primele 4 coloane sunt sunt nulabile, asa ca tabelul nu poate avea PK. Ideea era sa tinem scoruri per runda cu task_id NULL si eventual statistici per task/round cu user_id NULL. Astfel puteam sa tinem toate scorurile in acelasi tabel. Din pacate *nu a mers* si am ajuns in situatia de a avea mai putine statistici decat in infoarena1. Asta cred ca este singurul punct in care infoarena1 *depaseste* infoarena2.
Acest tabel ar trebui spart in mai multe tabele fara coloane nulabile, si fara oroarea de score_id.

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.