Slovenská technická univerzita v Bratislave
FAKULTA ELEKTROTECHNIKY A INFORMATIKY
Katedra informatiky a výpočtovej techniky
Počítačová podpora programátorskej súťaže
Tímový projekt -- PONUKA
- Peter Kósa (kosa@decef.elf.stuba.sk)
- Peter Lopeň (lopenpet@decef.elf.stuba.sk)
- Richard Richter (virgo@fornax.sk)
- Róbert Trebula (trebular@decef.elf.stuba.sk)
- Ján Zázrivec (zazrivec@decef.elf.stuba.sk)
8. Október 2001
1 Zloženie tímu
- Peter Kósa (kosa@decef.elf.stuba.sk)
- Peter Lopeň (lopenpet@decef.elf.stuba.sk)
- Richard Richter (virgo@fornax.sk)
- Róbert Trebula (trebular@decef.elf.stuba.sk)
- Ján Zázrivec (zazrivec@decef.elf.stuba.sk)
Peter Kósa ovláda programovacie jazyky C/C++, Pascal, Perl, Lisp, Prolog
a Basic, ako aj prácu v prostredí Visual C++ (MFC). Ide o zdatného
programátora, pričom jeho doménou je operačný systém Windows 9x. Disponuje
skúsenosťami s tímovým projektom z roku 1999/2000. Jeho záverečným
projektom bolo prepracovanie knižnice TINY do grafického prostredia
s využitím MFC.
Peter Lopeň ovláda jazyky C/C++, Lisp, Pascal a Prolog, pričom programuje
ako pod Unix, tak aj pod Windows. V rámci záverečného projektu sa
oboznámil s technológiu COM/DCOM a získal skúsenosti s prácou v tíme.
Popri štúdiu sa venuje vývoju aplikácií v prostredí Microsoft Visual
C++.
Richard Richter programuje v jazykoch Java, C/C++, Pascal, Lisp a Prolog.
Jeho doménou je Unix, pričom intenzívne používa aj shell-skripty.
Vo svojom záverečnom projekte sa venoval objektovému operačnému systému.
Má pracovné skúsenosti s prácou v tíme na projekte distribuovanej
aplikácie (Java) s webovským rozhraním (JSP), kde spoznal aj technológie
CORBA, JMS, JDBC a ďalšie najmä javovské technológie.
Róbert Trebula aktívne používa programovacie jazyky C/C++, Pascal,
Perl, Lisp a Prolog. Má veľké skúsenosti s administráciou unixových
strojov, ako aj s programovaním v prostredí Unixu. Zaoberal sa aj
programovaním na strane web-servera (perl/CGI, PHP/SQL), ako aj sieťových
aplikácií (TCP, HTTP). Vo svojom záverečnom projekte sa venoval vizualizácii
RBAC politík. V súčasnosti pracuje popri štúdiu ako systémový administrátor.
Ján Zázrivec má skúsenosti s programovaním v jazykoch C/C++, PHP, Pascal,
Lisp a Prolog, pričom preferuje programovanie v prostredí Unixu,
ktoré veľmi dobre pozná. Jeho záverečný projekt sa venoval problematike
rozpoznávania vzorov pomocou neurónových sietí. Momentálne pracuje
popri štúdiu ako programátor, pričom sa venuje portovaniu aplikácií
z prostredia Windows na Linux.
2 Motivácia
Vybrali sme si tému projektu Počítačová podpora programátorskej súťaže
(PROG), pretože viacerí členovia tímu majú skúsenosti s programovaním
aplikácií podobného typu (je tu zastúpený model klient-server). Celý
projekt je možné riešiť niekoľkými spôsobmi, čo nám dáva šancu využiť
maximum našich znalostí. Rovnako tak nás láka programovanie platformovo
nezávislých aplikácií (ide tu najmä o platformovú nezávislosť klienta
-- súťažiaceho).
Pri projekte môžme využiť celú škálu našich vedomostí získaných počas
štúdia, ako aj mnohé skúsenosti nadobudnuté pri práci popri štúdiu.
V neposlednom rade je tu samozrejme vôľa realizovať čo najlepší projekt,
ktorý bude skutočne užitočný a úspešne nasadený -- aby bol s nami
zákazník maximálne spokojný.
3 Čo môžeme poskytnúť
Po predbežných jednaniach máme nasledovnú predstavu o tom, do akej
miery by plánovaný systém mal byť schopný podporovať programátorskú
súťaž:
- Mal by vedieť prijímať zadania a následne ich spracovať -- a to buď
automaticky alebo ich poslať rozhodcovi, pričom chovanie je možné
nastaviť. Rovnako tak by mal systém informovať o priebežnom stave
súťaže. Je tu možnosť realizovať špecializovaného klienta pre súťažiaceho
alebo realizovať tento modul ako webovskú aplikáciu, pričom k tomuto
riešeniu sa prikláňame -- kladie nižšie požiadavky na klienta, nakoľko
prehliadač WWW je dnes skutočne takmer všade (pre klienta to teda
bude jediná požiadavka priamo súvisiaca so systémom). Druhou možnosťou
odovzdávania zadania je e-mail, čo zrejme v korešpondenčnom kole
bude bežnejší spôsob.
- Systém by mal podporovať automatické vyhodnocovanie odovzdaných zadaní.
Toto realizuje samotná aplikácia, resp. jeden z jej modulov. Systém
by obsahoval sadu testovacích vstupov, tieto by špecifickým (dopredu
známym) spôsobom predával testovanému odovzdanému programu, pričom
by sa výstup porovnával s požadovaným výstupom. Takto je možné plne
testovať presne špecifikovaný program. Tu sa zrejme uplatní nízkoúrovňové
programovanie, prípadne shell-skripty (ktoré sú veľmi vhodné pre
prácu s textami). Aj z tohto dôvodu by bolo dobré, keby serverová
časť systému bežala na unixovom stroji, ale nie je to nutná podmienka
(napr. jazyk Perl je použiteľný aj pod Windowsom a tiež je ideálny
na prácu s textom).
- Serverová časť bude obsahovať aj rozhodcovský modul, ktorý bude slúžiť
na administráciu systému počas súťaže. Tento modul umožní nastaviť
parametre systému pre konkrétnu súťaž. Je možné, že bude existovať
viacero rôznych modulov pre rozhodcov -- v závislosti od typu súťaže
(korešpondenčná, jednodňová, apod.). Toto riešenie bude umožnené
modulárnou architektúrou serverovej časti systému. Aj v prípade
rozhodcov sa uvažuje o webovskom užívateľskom rozhraní.
- Pri práci na systéme môžeme využiť naše znalosti mnohých programovacích
jazykov -- C, C++, Java, Pascal, Lisp, Prolog. Našou snahou ale
bude vyriešiť systém tak, aby použitie nového jazyka na súťaži bola
len administratívna práca a nevyžadovala od rozhodcu znalosti samotného
jazyka. Stačilo by špecifikovať napríklad len kompilátor.
4 Zdroje potrebné na realizáciu projektu
Napriek tomu, že vo voľbe technológií máme obrovský priestor, predsa
len máme isté preferencie, čo sa týka ich voľby. Na webovské rozhranie
sa zrejme použije technológia JSP, pričom ako alternatíva pripadá
do úvahy PHP, resp. Perl. Webovská aplikácia by v prípade JSP bola
poháňaná web-serverom Tomcat, ktorý je referenčnou implementáciou
štandardu JSP. Hlavná časť aplikácie zrejme bude v maximálnej miere
realizovaná v jazyku Java, čo bude najmä v spojení s JSP technológiou
na web-serveri elegantné riešenie. Môžme tak využiť širokú škálu enterprise
technológií, ktoré sú na jazyk Java naviazané. Činnosti spojené s
kompiláciou a testovaním odovzdaných zadaní budú ale zrejme realizované
spôsobom viac závislým na platforme, čo bude mať jasné výhody najmä
v jednoduchosti a pružnosti takéhoto riešenia. Uvažuje sa teda o moduloch
založených na skriptoch, alebo využijeme naše skúsenosti so systémovým
programovaním v prostredí Unixu a takéto moduly budú naprogramované
v jazyku C. Každopádne je na serverovú časť systému preferovaný operačný
systém Unix.
Z vyššie uvedeného vyplýva zhruba nasledovné:
- Pre klientov je potrebný web-browser (predpokladá sa schoponosť uploadu),
netreba žiadne ďalšie vybavenie. Druhou alternatívou je klient elektronickej
pošty. Mala by postačovať ktorákoľvek z možností.
- Operačný systém unixového typu (buď Linux, alebo robustnejšie riešenie,
ako je napríklad Solaris). Na konkrétnej distribúcii nezáleží.
- Web-server s podporou JSP -- čo bude Tomcat. Produkt je voľne použiteľný,
navyše sa jedná o referenčnú implementáciu, čo dáva isté záruky.
- Na implementáciu použijeme JDK (Java 2 Standard Edition), GCC, prípadne
Perl, shell-skripty, a podobne -- v závislosti na povahe konkrétneho
modulu. Všetky tieto riešenia sú dostupné zadarmo.
- Hardvérové nároky závisia najmä od rozsahu nasadenia. Odbaviť korešpondenčné
kolo pre tridsať súťažiacich musí zvládnuť bežný linuxový server
-- konfigurácia na úrovni Pentia 133 s 64 MB RAM musí postačovať.
Súťažným kolom konaným v jeden deň s počtom tímov nad dvadsať by
sa ale dala v špičkách vyťažiť aj výrazne lepšia konfigurácia. Možnosť
pracovať na robustných riešeniach Sun/Solaris by bola absolútne
ideálna.
5 Preferované poradie projektov
- PROG
- KONF
- ROBOCUP