SIO/Feladatok kitűzése

A MathWikiből
(Változatok közti eltérés)
 
 
(egy szerkesztő egy közbeeső változata nincs mutatva)
20. sor: 20. sor:
 
* output: (elvárt) kimenet
 
* output: (elvárt) kimenet
 
* wrong answer: rossz válasz
 
* wrong answer: rossz válasz
 +
 +
= A ''double'' mintafeladat =
 +
 +
Legjobb rögtön egy mintafeladat tanulmányozásával kezdeni a SIO-beli feladatkitűzéssel való ismerkedést. A mintafeladat rövid neve ''double'', és egész számok duplájának kiszámítását kéri. A hozzá tartozó fájlok letölthetők innen: http://www.math.bme.hu/~pts/double.tgz .
  
 
= Új feladat kiírása =
 
= Új feladat kiírása =
41. sor: 45. sor:
 
* ''par/rövidnév1.par'': környezeti beállítások az első bemenethez.  A limitek tesztesetenként külön-külön állíthatók.
 
* ''par/rövidnév1.par'': környezeti beállítások az első bemenethez.  A limitek tesztesetenként külön-külön állíthatók.
 
* ''in/rövidnév2.in'': A második tesztesethez tartozó bemenet. Csak akkor vegyünk fel második (és esetleg további) teszteseteket, ha szükség van rájuk. Teszteljük le a szélső értékeket is. (Működik-e a program nullára? Működik-e a lehető legnagyobb megengedett értékre?)
 
* ''in/rövidnév2.in'': A második tesztesethez tartozó bemenet. Csak akkor vegyünk fel második (és esetleg további) teszteseteket, ha szükség van rájuk. Teszteljük le a szélső értékeket is. (Működik-e a program nullára? Működik-e a lehető legnagyobb megengedett értékre?)
Alkalmas időlimit beállításával (lásd később) teszteljük le, hogy elég gyors-e a program. Alkalmas memórialimit beállításával teszteljük le, hogy nem pazarolja-e a memóriát. A memórialimithez adjunk hozzá 2 MB-ot a statikus linkelés miatt. Ha 10-nél több teszteset van, használjunk kétjegyű számozást (00-tól). A tesztesetek lexikografikus (10 < 9) sorrendben kerülnek futtatásra.
+
Alkalmas időlimit beállításával (lásd később) teszteljük le, hogy elég gyors-e a program. Alkalmas memórialimit beállításával teszteljük le, hogy nem pazarolja-e a memóriát. A memórialimithez adjunk hozzá 2 MB-ot (2000) a statikus linkelés miatt.  Minimum 5 MB (5000) legyen, mert különben a bash exitcode=2-es ''runtime error''-ral kilép, még mielőtt futni kezdene a program. Ha 10-nél több teszteset van, használjunk kétjegyű számozást (00-tól). A tesztesetek lexikografikus (10 < 9) sorrendben kerülnek futtatásra.
 
* stb. (''.in'', ''.out'' és ''.par'' fájlok a további tesztesetekhez)
 
* stb. (''.in'', ''.out'' és ''.par'' fájlok a további tesztesetekhez)
 
* ''prog/rövidnév.c'': a mintamegoldás, helyesen kell futnia. Elkészítése nem kötelező, de ajánlott.
 
* ''prog/rövidnév.c'': a mintamegoldás, helyesen kell futnia. Elkészítése nem kötelező, de ajánlott.
71. sor: 75. sor:
 
Az értékelés részletezéséhez kattintsünk a megoldás sorszámára. Klasszikus SIO esetén itt mindenféle szofisztikált táblázatot és okos kimutatást kapunk. sziruup esetén viszont csak egy naplófájlt látunk, amiből minden kiderül. Például benne van a fordítás eredménye, hogy milyen tesztesetekkel próbálkozott, a sikeres tesztesetek futásideje, az első sikertelen tesztesetnél a sikertelenség oka. Ha rossz a válasz (wrong answer), akkor az első hibás sor számát láthatjuk. (A klasszikus SIO rossz válasz esetén röbb részletet mutat.)
 
Az értékelés részletezéséhez kattintsünk a megoldás sorszámára. Klasszikus SIO esetén itt mindenféle szofisztikált táblázatot és okos kimutatást kapunk. sziruup esetén viszont csak egy naplófájlt látunk, amiből minden kiderül. Például benne van a fordítás eredménye, hogy milyen tesztesetekkel próbálkozott, a sikeres tesztesetek futásideje, az első sikertelen tesztesetnél a sikertelenség oka. Ha rossz a válasz (wrong answer), akkor az első hibás sor számát láthatjuk. (A klasszikus SIO rossz válasz esetén röbb részletet mutat.)
  
Azon teszteseknél, melyek sok számolást igényelnek, a kiértékelés naplójában nézzük meg, hogy a mintamegoldás milyen gyorsan futott le. Az időeredmény valós időt (real time) mutat milliszekundum pontossággal. Ezután módosítsuk az időlimiteken (lásd még ''A feladatkiírás módosítása'' szakaszban) időlimitet a kiírásban. Ökölszabály: a mintamegoldás futásidejének háromszorosa legyen az időlimit. Ha a mért idő kisebb, mint 1 másodperc, akkor nehezítsünk a teszteseten.
+
Azon teszteseknél, melyek sok számolást igényelnek, a kiértékelés naplójában nézzük meg, hogy a mintamegoldás milyen gyorsan futott le. Az időeredmény valós időt (real time) mutat milliszekundum pontossággal. Ezután módosítsuk az időlimitet (lásd még ''A feladatkiírás módosítása'' szakaszban). Ökölszabály: a mintamegoldás futásidejének háromszorosa legyen a CPU-időlimit (''TE_CPU_TIME''), és ennek további ötszöröse (''TE_REAL_TIME'') legyen a valós idejű limit. Ha a mért idő kisebb, mint 1 másodperc, akkor nehezítsünk a teszteseten.
  
 
Ha minden stimmel, akkor a webes felületen változtassuk meg a feladathoz tartozó feladatcsoportot (subcontest) ''Teszt''-ről vagy ''Szorgalmi''-ra vagy valamelyik ''Beadandó''-ra. Csak szám szerint tudunk változtatni (:-(), úgyhogy előbb nézzük meg a feadatcsoport számát.
 
Ha minden stimmel, akkor a webes felületen változtassuk meg a feladathoz tartozó feladatcsoportot (subcontest) ''Teszt''-ről vagy ''Szorgalmi''-ra vagy valamelyik ''Beadandó''-ra. Csak szám szerint tudunk változtatni (:-(), úgyhogy előbb nézzük meg a feadatcsoport számát.
79. sor: 83. sor:
 
A legtisztább az, ha töröljük a feladatot, és kitűzzük újra (azonos névvel). Ezt csak a ''Teszt'' feladatcsoportba tartozó feladatokkal tegyük meg nyugodt szívvel, mert törléskor minden infó elvész (beleértve a már beküldött megoldások összes adata).
 
A legtisztább az, ha töröljük a feladatot, és kitűzzük újra (azonos névvel). Ezt csak a ''Teszt'' feladatcsoportba tartozó feladatokkal tegyük meg nyugodt szívvel, mert törléskor minden infó elvész (beleértve a már beküldött megoldások összes adata).
  
Ha csak apró módosításokat akarunk végezni, akkor az rootként a sioweb szerveren a <code>/vol/sio</code> könyvtárban tehetjük meg. Keressük meg a feladat rövid nevét tartalmazó fájlneveket. A módosítás után semmit nem kell újraindítani. Ha módosítottuk a teszteseteket, akkor a webes felületen kérjük az adott feladat újraértékelését.
+
Ha csak apró módosításokat akarunk végezni, akkor az rootként a sioweb szerveren a <code>/vol/sio</code> könyvtárban tehetjük meg. Keressük meg a feladat rövid nevét tartalmazó fájlneveket. Érdemes a módosításokat az archív fájl alapjául szolgáló fájlokban elvégezni, és csak felmásolni a módosított fájlokat (bárcsak automatikus lenne). A módosítás után semmit nem kell újraindítani. Ha módosítottuk a teszteseteket, akkor a webes felületen kérjük az adott feladat újraértékelését.
 +
 
 +
Hasznos mappák a sioweben:
 +
 
 +
* <code>/vol/sio/data/versenynév/rövidnév</code>: itt vannak a ''.par'', ''.run'', ''.in'' és ''.out'' fájlok. Ezek már egységesre át lettek nevezve.
 +
* <code>/vol/sio/files/contests/versenynév</code>: itt vannak a ''rövidnév.html'' fájlok
 +
* <code>/vol/sio/files/contests/versenynév/user_out</code>: itt vannak a klasszikus SIO által gyűjtött programkimenetek ZIP-elve. A gyűjtés nem alapból történik, az adott feladathoz (?) külön be kell állítani.
 +
* <code>/vol/sio/submits/versenynév/rövidnév</code>: itt vannak a hallgatók által beküldött megoldásfájlok. A fájl egységesre át van nevezve, nevében benne van a rövid név, a felhasználó azonosítója, és a megoldás azonosítója. Példa: ''lcuc_u13_id41.c''.
 +
 
 +
= Feladat konvertálása klasszikus SIO-ból sziruupba =
 +
 
 +
Mivel a klasszikus SIO kiértékelése bugos, időszerűvé vált az összes feladat konvertálása sziruupossá.
 +
 
 +
Azt, hogy egy feladat már sziruupos-e, megnézhetjük az ''info''-jában (Adminra kattintva, tasks-ra kattintva, az adott feladat ''info''-jára kattintva): akkor sziruupos, ha az ''Evaluation mode'' attribútum értéke ''Online contest with sziruup''.
 +
 
 +
A konvertálás első lépéseként a sioweb szerveren rootként a <code>/vol/sio/data/versenynév/rövidnév/</code> mappában hozzuk létre a szükséges ''rövidnév.run'' és ''rövidnév.par'' fájlokat. Ezeket másolhatjuk a ''double'' mintafeladatból is. Csak a ''rövidnév.par'' fájlt módosítsuk: állítsuk be az idő- és memórialimiteket. Ha szükséges (pl. eltérő limitek megadásakor), hozzuk létre a többi ''.par'' fájlt is, ugyanitt. A SIO webes felületén beállított limiteket is kézzel kell átvezetnünk.
 +
 
 +
Ha ez megvan, akkor értékeltessük újra az adott feladat már beadott megoldásait: ''Admin''-ra kattint, ''new evaluation''-re kattint, feladatot (''Task'') kiválaszt, többi mezőt nem változtat, ''Send'' gombra kattint. Várjunk egy kicsit (pl. rootként screenben figyelve), amíg a rendszer újraértékeli a megoldásokat.
 +
 
 +
Figyelmeztessük a hallgatókat a változásra e-mailben.
 +
 
 +
Sajnos nincs automatikus eszköz, ami kilistázná azon hallgatókat, akiknek épp a konvertálás miatt romlott el az összes OK-s megoldásuk.
 +
 
 +
= Párhuzamos működés =
 +
 
 +
A klasszikus SIO megoldásértékelője több értékelő szervert kezel párhuzamosan, és ha van értékelésre váró megoldás, akkor elküldi egy éppen ráérő értékelő szervernek. Sajnos néha beragad, ezért született a siowebena a <code>/root/submitcheckd.sh</code>, ami beragadás esetén minden szerveren újraindítja a SIO-t.
 +
 
 +
A sziruup megoldásértékelője jóval egyszerűbb: az ütemező egyetlen értékelő szervert kezel. Az ütemező a sioweben fut <code>/root/sziruup_evald.pl</code> néven. Kulccsal autentikált SSH kapcsolaton ''.tar'' fájlt küld a siowebre (benne a megoldással és a tesztesetekkel), ahol a sziruupevaluser felhasználó <code>~sziruupevaluser/evaluator/doeval1.sh</code> szkriptje fogadja.
 +
 
 +
A párhuzamos műkéshez szükséges kölcsönös kizárás sziruup esetén nem biztosított automatikusan (!). A sioweben nincs gond, ott -- a sebességcsökkenésen kívül -- nem okoz galibát több, párhuzamosan futó ütemező, a siotestrunon viszont egyes könyvtárakat (pl. <code>/vol/sio/eval1dir</code> és <code>/var/sziruup/chroot</code>) egyszerre akarnak használni, és nem fog működni, ha kettő fut egyszerre. (Ez persze visszahat a siowebre is, hiszen a kiértékeléseket a sioweben futó ütemező indítja.)
 +
 
 +
= Dokumentálandó még =
  
TODO: feladatcsoportok definiálása
+
(Ezek megírásával Áron ne foglalkozzon, neki van fontosabb feladata is.)
TODO: klasszikus SIO miben különbözik, menüs állítgatások, újraértékelés, hiány
+
  
!! ''double'' mintafeladat
+
* TODO: feladatcsoportok definiálása
!! konkurrencia (sziruup és klasszikus együtt is)
+
* TODO: klasszikus SIO miben különbözik, menüs állítgatások, újraértékelés, hiány
!! user_out mappa: /vol/sio/files/contests/szimp/user_out
+

A lap jelenlegi, 2007. március 14., 23:40-kori változata

A kitűzött feladat kiértékelés szempontjából kétféle lehet:

  1. klasszikus SIO: az eredeti SIO-rendszerrel jött kiértékelő értékeli ki
  2. sziruup: az új, szirup nevű kiértékelő értékeli ki (a sziruupot pts írta 2007-03-14-én)

Mivel a klasszikus SIO-ban nem tudtuk javítani az összesítési bugot, ezért készítettük el a sziruupot, ami ezt a hibát már nem tartalmazza. Az összesítési bug a klasszikus SIO azon viselkedése, hogy egy megoldás kiértékelésekor OK-nak jelzi a beadott megoldást akkor is, amikor bizonyos tesztek sikeresen, mások viszont sikertelenül futnak le. (Az admin felületen a megoldás részletezésében meg lehet nézni, hogy mik sikerültek és mik nem.)

A továbbiakban csak a sziruupos feladatkitűzést részletezzük. Egy feladat attól lesz sziruupos, hogy a szerepel a feltöltött .tgz-ben rövidnév.run és rövidnév.par nevű fájl.

Tartalomjegyzék

Angol-magyar szótár

  • task: feladat
  • submit, submission: megoldás
  • eval, evaluation: kiértékelés
  • reevalution: újraértékelés:
  • subcontest: feladatcsoport
  • example test case: mintabemenet, mintakimenet
  • test: teszteset
  • input: bemenet
  • output: (elvárt) kimenet
  • wrong answer: rossz válasz

A double mintafeladat

Legjobb rögtön egy mintafeladat tanulmányozásával kezdeni a SIO-beli feladatkitűzéssel való ismerkedést. A mintafeladat rövid neve double, és egész számok duplájának kiszámítását kéri. A hozzá tartozó fájlok letölthetők innen: http://www.math.bme.hu/~pts/double.tgz .

Új feladat kiírása

A feladat kiírása némi előkészület után a weben történik. Az előkészület a feltöltendő archívfájl elkészítése.

A feladatnak először adjunk egy rövid nevet (angol ábécé, ékezetes betűk nélkül), a továbbiakban ez rövidnév lesz.

A fájlevek kisbetűsek legyenek, és pontosan úgy adjuk meg őket, ahogy le vannak írva. A fájlokból a könyvtárnév kimaradhat, tehát például doc/rövidnév.html és rövidnév.html egyaránt jó.

El kell készítenünk az alábbi fájlokat:

  • doc/rövidnév.html: a feladat szövege HTML formátumban. Mielőtt kiírunk egy feladatot, olvassuk el a már kiért feladatok szövegét és a szöveg HTML-forrását. Nem kell az egész HTML-fájlt megírni, rögtön <h2>-s címmel indítsunk. ISO-8859-2-es kódolású legyen a HTML. Tartalmazzon (<pre> tagek között) egy mintabemenetet és egy mintakimenetet. Adjuk meg a bemeneti adatok értelmezési tartományát (intervallum, kizárt értékek stb.).
  • par/rövidnév.par: környezeti paramétereket tartalmaz (például idő- és memórialimitek, a fordítást végző parancs). Első körben másoljuk le a double mintafeladat idevonatkozó fájlját, és esetleg módosítsuk az időlimitet. Az időlimitek nem összesen, hanem tesztesetenként külön-külön vonatkoznak.
  • par/rövidnév.run: a futtatást végző shell szkript. Nem kötelező a unixos executable bitet rátenni. Csak érvényesíti a limiteket, és elindítja a lefordított programot. Első körben másoljuk le a double mintafeladat idevonatkozó fájlját. Módosítani nem szükséges.
  • in/rövidnév0.in: a mintabemenet (ugyanaz legyen, mint a feladat szövegében)
  • out/rövidnév0.out: a mintakimenet (ugyanaz legyen, mint a feladat szövegében). Ügyeljünk a sorvégi szóközökre és a fájlvégi újsorokra, mert a sziruup ezekre is érzékeny.
  • par/rövidnév0.par: környezeti beállítások a mintabemenethez. Felül lehet bírálni vele a par/rövidnév.par fájlban beállítottakat. Általában az idő- és memórialimiteket szoktuk felülbírálni. (A fordítási opciók felülbírálása amúgy sem működik, mert már túl késő.)
  • in/rövidnév1.in: az első tesztesethez tartozó bemenet. A hallgatók nem látják a teszteseteket. Az első teszteset hasonlítson a mintabemenetre, de ne pont ugyanaz legyen.
  • out/rövidnév1.out: az első tesztesethez tartozó elvárt kimenet. A hallgatók nem látják a teszteseteket, és azt sem, hogy a hibás megoldásban pontosan hol (melyik tesztesetben és azon belül hányadik sorban) van a hiba.
  • par/rövidnév1.par: környezeti beállítások az első bemenethez. A limitek tesztesetenként külön-külön állíthatók.
  • in/rövidnév2.in: A második tesztesethez tartozó bemenet. Csak akkor vegyünk fel második (és esetleg további) teszteseteket, ha szükség van rájuk. Teszteljük le a szélső értékeket is. (Működik-e a program nullára? Működik-e a lehető legnagyobb megengedett értékre?)

Alkalmas időlimit beállításával (lásd később) teszteljük le, hogy elég gyors-e a program. Alkalmas memórialimit beállításával teszteljük le, hogy nem pazarolja-e a memóriát. A memórialimithez adjunk hozzá 2 MB-ot (2000) a statikus linkelés miatt. Minimum 5 MB (5000) legyen, mert különben a bash exitcode=2-es runtime error-ral kilép, még mielőtt futni kezdene a program. Ha 10-nél több teszteset van, használjunk kétjegyű számozást (00-tól). A tesztesetek lexikografikus (10 < 9) sorrendben kerülnek futtatásra.

  • stb. (.in, .out és .par fájlok a további tesztesetekhez)
  • prog/rövidnév.c: a mintamegoldás, helyesen kell futnia. Elkészítése nem kötelező, de ajánlott.
  • prog/rövidnévb1.c: az első számú rossz megoldás, nem szabad sikerülnie. Elkészítése nem kötelező, de ajánlott.
  • prog/rövidnévb2.c: a második számú rossz megoldás, nem szabad sikerülnie. Elkészítése nem kötelező, de ajánlott. Olyat érdemes készíteni, ami máshogy hibázik, mint az első számú rossz megoldás.
  • stb. (.c fájlok további rossz megoldásokkal).

Próbálgassuk ki, hogy jó fájlokat írtunk-e (pl. a prog/rövidnév.c lefordul, és az in/rövidnév.in bemenetre az out/rövidnév.out kimenetet adja-e). Nem kell mindent kipróbálni, feltöltés után még (némi kényelmetlenség árán) tudunk javítani.

Ha elkészültek a fájlok, csomagoljuk őket össze egy .tgz vagy .zip archív fájlba. Az archívon belüli könyvtárszerkezetre 4 jó megoldás is van:

  1. könyvtárnév nélkül: rövidnév.html, rövidnév.run, rövidnév.par, rövidnév0.in, rövidnév0.out, rövidnév1.in, rövidnév1.out, rövidnév.c, rövidnévb1.c
  2. kis könyvtárnevekkel: doc/rövidnév.html, par/rövidnév.run, par/rövidnév.par, in/rövidnév0.in, out/rövidnév0.out, in/rövidnév1.in, out/rövidnév1.out, prog/rövidnév.c, prog/rövidnévb1.c
  3. főkönyvtárnévvel: rövidnév/rövidnév.html stb.
  4. főkönyvtárnévvel és kis könyvtárnevekkel: rövidnév/doc/rövidnév.html stb.

A feladat kiírásához fel kell tölteni az archívot az adminisztrációs webfelületen (Admin menü bal oldalt, rákattintva tasks, rákattintva add). Meg kell még adni:

  • code: ez a rövid név
  • Task title: beszédesebb név, tartalmazhat ékezetes betűket is, kezdődhet nagybetűvel. Az se baj, ha egyezik a rövid névvel.
  • Subcontest: első közelítésében ez legyen Teszt, hogy a hallgatók ne lássák.
  • Evaluation mode: édesmindegy, úgyis érzékeli a SIO a feltöltött rövidnév.par fájlt, és ennek hatására átírja majd Online contest with sziruup-ra.
  • Number of points: szintén édesmindegy, maradhat az alapértelmezés

Feltöltés után a SIO elkezdi tesztelni a mintamegoldást és a rossz megoldásokat (a fájlnév sorrendjében). Nézzük meg, hogy áll (Admin / Submissions) menüpont a weben. Ha sokáig (3 másodperc + időlimit) kérdőjelet látunk, akkor baj van, ezek szerint nem fut a sziruup_evald. Kilövés után újraindítandó rootként a sioweb szerveren a /root/sziruup_evald.pl paranccsal. Ezután szép lassan elfogynak a kérdőjelek.

A klasszikus SIO-s feladatok összesítő értékelése a Submissions táblázatban nagybetűvel, a sziruuposaké kisbetűvel kezdődik.

Az értékelés részletezéséhez kattintsünk a megoldás sorszámára. Klasszikus SIO esetén itt mindenféle szofisztikált táblázatot és okos kimutatást kapunk. sziruup esetén viszont csak egy naplófájlt látunk, amiből minden kiderül. Például benne van a fordítás eredménye, hogy milyen tesztesetekkel próbálkozott, a sikeres tesztesetek futásideje, az első sikertelen tesztesetnél a sikertelenség oka. Ha rossz a válasz (wrong answer), akkor az első hibás sor számát láthatjuk. (A klasszikus SIO rossz válasz esetén röbb részletet mutat.)

Azon teszteseknél, melyek sok számolást igényelnek, a kiértékelés naplójában nézzük meg, hogy a mintamegoldás milyen gyorsan futott le. Az időeredmény valós időt (real time) mutat milliszekundum pontossággal. Ezután módosítsuk az időlimitet (lásd még A feladatkiírás módosítása szakaszban). Ökölszabály: a mintamegoldás futásidejének háromszorosa legyen a CPU-időlimit (TE_CPU_TIME), és ennek további ötszöröse (TE_REAL_TIME) legyen a valós idejű limit. Ha a mért idő kisebb, mint 1 másodperc, akkor nehezítsünk a teszteseten.

Ha minden stimmel, akkor a webes felületen változtassuk meg a feladathoz tartozó feladatcsoportot (subcontest) Teszt-ről vagy Szorgalmi-ra vagy valamelyik Beadandó-ra. Csak szám szerint tudunk változtatni (:-(), úgyhogy előbb nézzük meg a feadatcsoport számát.

A feladatkiírás módosítása

A legtisztább az, ha töröljük a feladatot, és kitűzzük újra (azonos névvel). Ezt csak a Teszt feladatcsoportba tartozó feladatokkal tegyük meg nyugodt szívvel, mert törléskor minden infó elvész (beleértve a már beküldött megoldások összes adata).

Ha csak apró módosításokat akarunk végezni, akkor az rootként a sioweb szerveren a /vol/sio könyvtárban tehetjük meg. Keressük meg a feladat rövid nevét tartalmazó fájlneveket. Érdemes a módosításokat az archív fájl alapjául szolgáló fájlokban elvégezni, és csak felmásolni a módosított fájlokat (bárcsak automatikus lenne). A módosítás után semmit nem kell újraindítani. Ha módosítottuk a teszteseteket, akkor a webes felületen kérjük az adott feladat újraértékelését.

Hasznos mappák a sioweben:

  • /vol/sio/data/versenynév/rövidnév: itt vannak a .par, .run, .in és .out fájlok. Ezek már egységesre át lettek nevezve.
  • /vol/sio/files/contests/versenynév: itt vannak a rövidnév.html fájlok
  • /vol/sio/files/contests/versenynév/user_out: itt vannak a klasszikus SIO által gyűjtött programkimenetek ZIP-elve. A gyűjtés nem alapból történik, az adott feladathoz (?) külön be kell állítani.
  • /vol/sio/submits/versenynév/rövidnév: itt vannak a hallgatók által beküldött megoldásfájlok. A fájl egységesre át van nevezve, nevében benne van a rövid név, a felhasználó azonosítója, és a megoldás azonosítója. Példa: lcuc_u13_id41.c.

Feladat konvertálása klasszikus SIO-ból sziruupba

Mivel a klasszikus SIO kiértékelése bugos, időszerűvé vált az összes feladat konvertálása sziruupossá.

Azt, hogy egy feladat már sziruupos-e, megnézhetjük az info-jában (Adminra kattintva, tasks-ra kattintva, az adott feladat info-jára kattintva): akkor sziruupos, ha az Evaluation mode attribútum értéke Online contest with sziruup.

A konvertálás első lépéseként a sioweb szerveren rootként a /vol/sio/data/versenynév/rövidnév/ mappában hozzuk létre a szükséges rövidnév.run és rövidnév.par fájlokat. Ezeket másolhatjuk a double mintafeladatból is. Csak a rövidnév.par fájlt módosítsuk: állítsuk be az idő- és memórialimiteket. Ha szükséges (pl. eltérő limitek megadásakor), hozzuk létre a többi .par fájlt is, ugyanitt. A SIO webes felületén beállított limiteket is kézzel kell átvezetnünk.

Ha ez megvan, akkor értékeltessük újra az adott feladat már beadott megoldásait: Admin-ra kattint, new evaluation-re kattint, feladatot (Task) kiválaszt, többi mezőt nem változtat, Send gombra kattint. Várjunk egy kicsit (pl. rootként screenben figyelve), amíg a rendszer újraértékeli a megoldásokat.

Figyelmeztessük a hallgatókat a változásra e-mailben.

Sajnos nincs automatikus eszköz, ami kilistázná azon hallgatókat, akiknek épp a konvertálás miatt romlott el az összes OK-s megoldásuk.

Párhuzamos működés

A klasszikus SIO megoldásértékelője több értékelő szervert kezel párhuzamosan, és ha van értékelésre váró megoldás, akkor elküldi egy éppen ráérő értékelő szervernek. Sajnos néha beragad, ezért született a siowebena a /root/submitcheckd.sh, ami beragadás esetén minden szerveren újraindítja a SIO-t.

A sziruup megoldásértékelője jóval egyszerűbb: az ütemező egyetlen értékelő szervert kezel. Az ütemező a sioweben fut /root/sziruup_evald.pl néven. Kulccsal autentikált SSH kapcsolaton .tar fájlt küld a siowebre (benne a megoldással és a tesztesetekkel), ahol a sziruupevaluser felhasználó ~sziruupevaluser/evaluator/doeval1.sh szkriptje fogadja.

A párhuzamos műkéshez szükséges kölcsönös kizárás sziruup esetén nem biztosított automatikusan (!). A sioweben nincs gond, ott -- a sebességcsökkenésen kívül -- nem okoz galibát több, párhuzamosan futó ütemező, a siotestrunon viszont egyes könyvtárakat (pl. /vol/sio/eval1dir és /var/sziruup/chroot) egyszerre akarnak használni, és nem fog működni, ha kettő fut egyszerre. (Ez persze visszahat a siowebre is, hiszen a kiértékeléseket a sioweben futó ütemező indítja.)

Dokumentálandó még

(Ezek megírásával Áron ne foglalkozzon, neki van fontosabb feladata is.)

  • TODO: feladatcsoportok definiálása
  • TODO: klasszikus SIO miben különbözik, menüs állítgatások, újraértékelés, hiány
Személyes eszközök