Nedávný update GitLabu přinesl několik přejmenování. Nejvýraznější změnou pro nás je zobecnění Issues na Work items. Úpravy materiálů reflektující tyto změny se pokusíme provést co nejdříve.

Tato stránka popisuje, jak budou vypadat testy na cvičeních a časem bude obsahovat i popis (velké) domácí úlohy.

Podívejte se, prosím, na stránku průvodce předmětem, kde najdete podrobnosti o tom, jak funguje hodnocení jako takové.

Testy na cvičení

Toto je rozpis testů na cvičení. Test proběhne na začátku cvičení (doba trvání testu je 45 minut).

Týden (datum) Téma
09 (13. dubna - 17. dubna) T01: Verzovací systém Git
12 (4. května - 7. května + 15. května) T02: Skriptování v shellu
14 (18. května - 22. května) T03: Sestavovací nástroj make

Očekává se, že se dostavíte na cvičení, na které jste zapsáni.

Protože 8. května je státní svátek, písemka T2 bude pro páteční cvičení odložena o týden. Víme, že to není nejlepší řešení, ale rozvrh pro tenhle semestr v podstatě nemá žádný celý týden (tj. kdy probíhá výuka ve všech dnech) v druhé polovině semestru.

Test se bude psát na školních počítačích. Ujistěte se, že se tam můžete přihlásit.

Můžete používat naše webové stránky, off-line manuálové stránky a můžete nahlížet do svých poznámek a řešení příkladů, které jsou součástí našich materiálů.

Nesmíte používat žádná jiná zařízení (mobilní telefony, vlastní notebooky atd.), nahlížet do jiných on-line zdrojů (stroje budou mít stejně omezený přístup k internetu) ani sdělovat své řešení ostatním studentům (a naopak).

Pokud používáte správce hesel pro váš účet u CASu/SISu, prosím, napište si heslo na papír nebo ho dočasně změňte na nějaké, které si můžete zapamatovat po dobu trvání zkoušky.

(Povolit použití telefonů/notebooků/… jen na začátku zkoušky přináší příliš mnoho problémů pro celkovou organizaci. Za komplikace se omlouváme.)

Jinými slovy, testy na cvičení vyžadují, abyste dokázali řešit úkoly samostatně pouze s pomocí technické dokumentace.

Prosím, nechte svoje zařízení ve vašich batůžkách během zkoušky a odložte batohy vpředu u tabule nebo na jiném viditelném (ale nedosažitelném) místě, abychom mohli zajistit rovné podmínky pro všechny. Moc děkujeme!

Jakýkoli pokus o obejití výše uvedených pravidel (např. pokus o použití AI asistenta na mobilním telefonu) znamená okamžité neúspěšné ukončení předmětu.

Pokud zadání nerozumíte, můžete samozřejmě požádat učitele o dovysvětlení. Pokud je zřejmé, že se ubíráte správným směrem a potřebujete jen trochu postrčit, můžeme vám i lehce poradit.

Prosím, podívejte se též na obecné zásady v průvodci předmětem.

Průběh zkoušky

Vaše řešení bude odevzdáno prostřednictvím Gitového repozitáře: ujistěte se, že umíte provést klonování prostřednictvím příkazové řádky.

Písemka proběhne na školních počítačích. Během zkoušky budete používat dočasný účet: nebudete mít přístup k žádným vašim souborům z domovského adresáře na AFS. Na začátku zkoušky si vygenerujete nový SSH klíč, nahrajete ho na náš keyserver a potom si naklonujete Gitový repozitář s vlastní písemkou.

Extra tip: nechte váš dočasný SSH klíč bez passphrase. Bude stejně funkční jen během 45 minut zkoušky a bez passphrase budou síťová akce přeci jen rychlejší.

Dočasný účet na školních strojích bude připraven na zkoušku. Budou k dispozici určité zkratky (vizte, prosím, níže) pro snazší přístup k repozitářům, které budete potřebovat. Pro vlastní nastavení budete muset provést nějaké akce navíc.

Protože budete nahrávat vaše řešení do Gitového repozitáře v Gitolite (s ním jsme pracovali během cvičení 05), budete mít k dispozici alias exam. Takže budete moci klonovat repozitáře jen pomocí volání

git clone exam:REPO

namísto

git clone gitolite3@linux.ms.mff.cuni.cz:REPO

Podobně, pro nahrávání vašeho SSH klíče (který si vygenerujete na začátku zkoušky) budete moci použít zkratku

ssh-copy-id keyserver

namísto

ssh-copy-id -p 2222 LOGIN@linux.ms.mff.cuni.cz

Budete mít též k dispozici přístup k repozitáři config-LOGIN (ale jen pro čtení), kde si budete moci uložit vaše úpravy shellu a Gitu (např. aliasy, vlastní prompt apod.).

Do config-LOGIN si můžete též uložit vaše poznámky, takže si je nemusíte tisknout. Neukládejte tam nic, co by mohlo porušovat pravidla předmětu (to například zahrnuje AI agenta nebo řešení zkoušky od kolegy). Prosím, udržte velikost tohoto repozitáře v rozumných mezích (pod 5MB). Děkujeme.

Detailní informace o repozitáři config-LOGIN je na samostatné stránce.

Můžete zkusit spustit ssh-copy-id -p 2222 LOGIN@linux.ms.mff.cuni.cz klidně před zkouškou pro vyzkoušení, ale stejně si budete muset během zkoušky vygenerovat nový klíč.

Poznámky k úloze na Git CLI

Informace pro zapsané na speciální páteční cvičení 25bNSWI177x13.

Pokud váš SIS/GitLab-ový login začíná na [a-j], přijďte, prosím, v 8.50; pokud váš login začíná na [k-z], prosím, přijďte v 9.40.

Pokyny ke zkoušce budou vytištěné. Budou obsahovat i nápovědu k vygenerování SSH klíče a jak ho nahrát na náš keyserver.

Očekáváme, že zvládnete následující úlohy pomocí Gitu na příkazové řádce.

  • Nastavit si prostředí Gitu (autor a e-mail)
  • Naklonovat repozitář (z gitolite3@linux.ms.mff.cuni.cz nebo obecně přes HTTPS)
  • Vytvořit commit
  • Vytvořit větev
  • Přepínat mezi větvemi
  • Zmergovat větev (a vyřešit případné konflikty)
  • Nahrát změny (větve) na server

Nebudete muset napsat žádný skript tzv. od nuly, ale budete pracovat s repozitářem obsahujícím následující skript pro tisk jednoduchých sloupcových grafů do konzole. Budete v něm ale dělat drobné změny (třeba opravy překlepů), na správné místo v kódu vás ale vždy navedeme.

Zaměření zkoušky je na práci s Gitem, ale musíte být schopni provádět výše uvedené změny korektně. Jinými slovy, skript v Pythonu musí pořád fungovat (tj., pokud sice vytvoříte správně větev, ale skript skončí se syntaktickou chybou, je to zásadní nedostatek).
import argparse
import sys

def parse_config():
    args = argparse.ArgumentParser(description='Console bar plot')
    args.add_argument('--columns', default=60, type=int, metavar='N')
    return args.parse_args()

def load_input(inp):
    values = []
    for line_raw in inp:
        line = line_raw.strip()
        if line.startswith('#') or not line:
            continue
        try:
            val = float(line)
        except ValueError:
            print(f"WARNING: ignoring invalid line '{line}'.", file=sys.stderr)
            continue
        values.append(val)
    return values

def print_barplot(values, scale, symbol):
    for val in values:
        print(symbol * round(val / scale))

def main():
    config = parse_config()
    values = load_input(sys.stdin)
    if not values:
        sys.exit(0)
    coef = max(values) / config.columns
    print_barplot(values, coef, '#')

if __name__ == '__main__':
    main()

Kvízy

Kvízy budou na cvičeních 02, 03, 04, 05, 06 a 07 (a 08 pro páteční paralelky).

Malé domácí úkoly