F.A.Q. (Fígle A Qnouhau)

Důležité fígle a knowhow nebo též často kladené dotazy, které souvisí s používáním CodExu. Postupně se bude rozšiřovat, podle toho jaké dotazy budou uživatele klást. Tato sekce je rozdělena do několika kategorií podle uživatelských rolí:

Než začnete hledat odpovědi zde, přečtěte si alespoň jednou uživatelskou dokumentaci.

Témata pro běžné uživatele

Nemůžu se přihlásit...

Pravděpodobně jste zapoměl(a) heslo. Heslo vám může změnit libovolný operátor nebo správce. Snažte se kontaktovat operátora, který je k vám "nejblíže" (tj. např. vašeho cvičícího). Pokud je to možné, nepoužívejte rozhraní pro hlášení chyb.

Nemůžu se zaregistrovat...

Kontaktujte nebližšího operátora nebo správce, který vám účet vytvoří.

Po přihlášení nevidím žádné skupiny.

Zřejmě nejste členem žádné skupiny a v CodExu nejsou momentálně žádné veřejné skupiny. Kontaktujte operátora skupiny, do které chcete být zařazeni.

Odevzdal jsem řešení, které nebylo špatně, ale CodEx mi nedal žádné body.

Zkontrolujte, zda vaše řešení překročilo minimální požadovanou správnost. Rovněž se podívejte, zda jste neprošvihl(a) termín úlohy. Pozor např. termín 13.5. je ve skutečnosti 13.5. (0:00), tedy jakékoli řešení odevzdané v den 13.5. už překročilo povolený termín.

Odevzdal jsem řešení, které mi doma funguje, ale CodEx mi řešení nevyhodnotí správně.

CodEx hlídá spoustu věcí, které vaše vývojové prostředí (tím spíše ne např. BP v DOSu) nehlídá, nebo ani hlídat neumí. Proto se může stát, že vaše řešení sice naoko funguje za nějakých speciálních podmínek, ale při pořádném testování se odhalí chyby. Přehled chybových hlášek, které CodEx vrací naleznete v příručce běžného uživatele.

Odevzdal jsem řešení, které používá CRT unitu v Pascalu, a CodEx mi jej nechce zkompilovat.

Je zakázáno používat jakékoli unity a knihovny, jejichž existence není garantována normou jazyka. Tzn. Pascalisté nesmí používat žádné knihovny, naopak programátoři v C++ smí používat knihovny STL.

Rád bych si svá řešení zkompiloval stejným překladačem, jaký používá CodEx...

CodEx volí překladač a jeho nastavení podle přípony. Zde je přehled nastavení kompilátorů pro jednotlivé jazyky (přípony):

Používám jiný překladač Pascalu než CodEx, je to problém?

Pokud dodržujete standard jazyka a nepoužíváte žádná rozšížení vašeho kompilátoru, neměl byste pozorovat žádné potíže. V případě, že chcete používat nějaký speciální dialekt, můžete zkusit přepnout FPC, do jiného módu. Mód se nastavuje direktivou preprocesoru {$MODE} (umístěnou na začátku programu):

Tyto volby doporučujeme používat pouze pokročilým uživatelům. Začátečníci by se měli raději držet normy jazyka. Podrobnosti naleznete v uživatelské dokumentaci Free Pascalu (kapitola 7).

Jak velký je integer?

Mnoho lidí si také pokládá otázku, jak velké jsou některé základní datové typy, zejména pak různé verze integerů. Zde je pár nejdůležitějších:

Všechny programy běží ve 32-bitovém režimu, takže velikost ukazatele je také 32-bitů.

Pascal mi nechce zkompilovat proměnnou operator, jak to?

Toto je jediná větší odchylka od ostatních dialektů Pascalu, kterou jsme zaznamenali. Free Pascal má operator jako klíčové slovo, takže není možné toto slovo použít jako identifikátor proměnné. Buď použijte jiné slovo pro vaši proměnnou, nebo zkuste přepnout FPC do jiného dialektu (viz direktiva {$MODE} popsaná výše).

Jak mám odevzdávat řešení v Javě?

Testovací prostředí vyžaduje, aby celé vaše řešení bylo v jediném .java souboru, který nemá specifikovaný žádný package. Mimo to se musí hlavní třída (obsahující metodu main) vždy jmenovat 'CodEx'.

Informace pro operátory skupin

Následující sekce je věnována pouze operátorům skupin a správcům.

Uživatelé po mně chtějí, abych jim změnil heslo...

Nejjednodušší je vygenerovat uživateli náhodné heslo (stránka "Vlastnosti uživatelského účtu" dole). Toto heslo se pošle uživateli na jeho e-mail a on(a) má 7 dní na změnu.

Jak si přidám uživatele do své skupiny?

Tohle je trochu neintuitivní, časem ovládání snad vylepšíme. Je třeba otevřít stránku "Uživatelé", vybrat ve filtru vaši skupinu a současně zvolit podmínku "není člen". Tím se zobrazí pouze uživatelé, kteří nejsou ve vaší skupině a zároveň se pod nimi zobrazí tlačítko "Přidat do vybrané skupiny".

Otázky a postřehy k vytváření nových úloh

Vytváření úloh je poměrně choulostivá záležitost, protože při nevhodném zadání a konfiguraci úlohy budete trápit uživatele nebo případně i server. Než začnete cokoli dělat prostudujte si důkladně dokumentaci (Kterak sobě poříditi úložku).

Zde je seznam nejčastějších prohřešků, kterých se autoři úloh dopouští. Následující body berte prosím jako checklist, pomocí kterého si můžete zkontrolovat, zda je úloha dobře napsaná.

Zde je několik častých dotazů a dalších užitečných témat k vytváření úloh:

Při testování mi zlobí načítání vstupu ve Free Pascalu...

Free Pascal používá pro načítání vstupu vlastní knihovnu (ne libc, jako ostatní jazyky). Z toho vyplývá, že se funkce read a readln chovají trochu odlišně. Největší problém představuje readln, který skutečně očekává znak zalomení řádku. Při čtení ze std. vstupu se zasekne a na příslušný znak čeká. Díky tomu takto postižená řešení vytimeoutují.

Abyste předešli problémům ukončujte vždy soubor se vstupními daty zalomením řádku (tj. za daty na posledním řádku následuje ještě zalomení a za ním je teprve konec souboru). Obdobně pokud máte data na konci řádku nenechávejte další bílé znaky mezi těmito daty a zalomením na další řádek. Při uploadu testovacích souborů CodEx od verze 0.3.1 tuto vlastnost kontroluje a v případě potřeby zalomení řádku doplní.

Jak mám připravit judge?

Judge si připravte v nějakém rozumném jazyce a důkladně otestujte před posláním do CodExu. Je možné použít např. i skriptovací jazyk (perl, python, bash script, awk ...), ale silně doporučujeme (zvláště u pomalých judgů) napsat jej v C nebo C++, aby se minimalizoval jeho overhead.

Judge může mít k dispozici vstupní data, vzorová výstupní data a výstup vygenerovaný uživatelem (který se má otestovat). Je nanejvýš vhodné napsat judge tak, aby jména příslušných dat. souborů dostal jako argumenty při spuštění (snáze se to konfiguruje).

Jak vložit judge do CodExu?

Judge zatím není možné vkládat do CodExu přímo. Připravte si jej a uploadujte ho na server k testovacím datům. Následně kontaktujte vašeho správce, který judge zkompiluje a nastaví mu potřebná práva.

Jak na paměťové limity u Javovských úloh

U řešení napsaných v Javě neumíme dobře testovat spotřebovanou paměť, protože Java runtime si alokuje managed heap pevné velikosti. Velikost heapu je možné nastavit přidáním speciálního parametru úlohy JAVA_XMX, jehož hodnota je přidána za atribut -Xmx. Výchozí hodnota je '64m', tedy 64 MB.

Dále je potřeba správně nastavit velikost paměti pro sand box. Java sama si řekne o přibližně 150 MB navíc (kromě heapu), takže např. pro 64 MB heap je zdravé nastavit 256 MB paměti pro sand box. Obecně bych rovnou doporučoval nastavit maximální možnou hodnotu pro sand box a paměťový limit hlídat parametrem JAVA_XMX.