Cvičení: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14.
Než se pustíme do Linuxu, musíme vysvětlit, jak bude celý předmět probíhat a jak budete hodnoceni.
První kroky v Linuxu
Dále budeme už předpokládat, že máte připravený váš USB disk nebo spuštěný virtuální stroj. Informace ke spuštění počítače z USB jsou na jiné stránce.
Vratťe se na tuto stránku až budete mít nastartováno z USB (nebo alternativy) abyste mohli ve cvičení pokračovat. Klidně si i doneste počítač na cvičení pokud budete potřebovat pomoc s bootováním.
Výběr pracovního prostředí
Jakmile nastartujete z USB disku, můžete si vybrat vaše pracovní prostředí (tzv. desktop environment).
Ve většině operačních systémů není příliš na výběr, jak budete ovládat grafické rozhraní. V Linuxu je větší možnost volby. Škála začíná na komplexních prostředích se spoustu efektů a končí na velmi asketických, které ani nepotřebují k ovládání myš. A samozřejmě jsou spousty někde mezi tím.
Vzpomeňte si, že tohle je poměrně jednoduché, protože GUI je řízeno normální aplikací: není pevnou součástí systému.
Ve vaší instalaci si můžete vybrat z šesti různých prostředí:
GNOME, Plasma (a.k.a. KDE), Xfce a LXDE jsou zástupci mainstreamu a jejich ovládání vám bude blízké pokud přecházíte z Windows nebo Macu. Výše zmíněné pořadí zhruba odpovídá množství vizuálních vychytávek a efektů (a také hardwarovým nárokům).
Openbox a i3 jsou speciální prostředí protože nemají např. tradiční task bar se seznamem oken a vyžadují trochu více trpělivosti, než se s nimi sžijete. Na druhou stranu, investovaný čas – především u i3, které se ovládá jen klávesnicí – se vrátí mnohem větší efektivitou při práci na počítači.
Zkuste si všechny. Přihlaste se do daného prostředí, zjistěte, jak se spouští aplikace a rozhodněte se, které se vám nejvíce líbí. Pochopitelně jde každé prostředí dále upravit – od barevného schématu až po klávesové zkratky.
Pokud se nemůžete rozhodnout, Plasma je určitě dobrá volba pro ex-uživatele Windows s výkonnějším strojem. Podobně tak LXDE, které poběží i na slabším počítači. A až je budete používat měsíc, přepněte se na i3 a staňte se mistry.
Výběr aplikací
Jakmile si vyberete desktopové prostředí, podívejte jaké další aplikace budete potřebovat.
Především se podívejte po textovém editoru. Několik populárních editorů je už předinstalovaných jak můžete vidět na následujícím screenshotu.
Další editory jsou dostupné v režimu příkazové řádky: o nich budeme mluvit na dalším cvičení.
Základy správy softwarových projektů
Přepneme na vedlejší kolej a chvíli si budeme povídat o softwarových projektech obecně.
Moderní software je málokdy produktem jednoho člověka. Mnohem častěji je vyvíjen v obrovských týmech, které jsou rozprostřeny přes různé časové zóny či dokonce kontinenty.
Vývoj v takovém týmu vyžaduje, aby každý vývojář měl přístup ke zdrojovému kódu (resp. jeho poslední verzi) a také, aby spolu mohli členové týmu efektivně komunikovat.
Je mnoho možností: od e-mailu a sdílených síťových složek až po mnohem sofistikovanější řešení. Abychom vás trochu připravili na reálný svět, budeme tu používat jeden z těch sofistikovanějších nástrojů a to GitLab.
GitLab je místo, kde vývojáři sdílí kód, ale také udržují seznam nahlášených chyb, dokumentaci nebo prostor, kde mohou svůj kód automaticky testovat. A protože může být integrován ještě s řadou dalších nástrojů, pro mnoho firem i open source projektů je GitLab centrálním místem pro vývoj jejich produktu.
Jeho výhody můžete využít i pokud pracujete sami. Třeba tak, že bude fungovat jako chytrá záloha pro vaše zdrojáky.
GitLab bude centrálním prvkem pro mnoho úloh i na tomto předmětu. Budete přes něj odevzdávat úlohy a je tu také Forum kde se můžete ptát.
GitLab není jediný svého druhu. My se zaměříme na GitLab, ale obecné principy jsou využitelné i v dalších nástrojích.
Nástroje pro správu verzí
Těžištěm každého softwarového projektu je jeho zdrojový kód. Bez něj není co spustit. Takže existujíc speciální nástroje zaměřené jen na správu zdrojového kódu jako takového.
GitLab jako takový je postaven okolo Gitu. Git je nástroj pro správu verzí. Polopaticky to znamená, že sleduje změny ve vašich souborech a pamatuje si předchozí stav (verze). To má tu obrovskou výhodu, že můžete bez obav upravovat váš kód a kdykoliv se vrátit k předchozí verzi.
Na Git jako takový se zaměříme v některém z dalších cvičení. Zatím to berte jako úvodní seznámení, abyste mohli začít používat Git pomocí GUI v GitLabu.
Git vždy pracuje nad konkrétním adresářem, který typicky obsahuje jeden projekt. Uživatel pak musí Gitu sdělit, které soubory mají být sledovány a kdy vytvořit novou verzi.
Git nevytváří verze automaticky protože každá verze má zachycovat rozumný stav projektu. Na příklad tedy vytvoříte novou verzi (občas též revizi, revision) pokud přidáte novou funkci (česky též fíčuru). Nebo pokud opravíte chybu. Nebo když opravíte překlep v dokumentaci. A nebo pokud potřebujete zazálohovat práci než odejdete na oběd :-).
Umožní vám to vytvářet smysluplnou historii projektu, která je rozumně velká třeba na tzv. code review ale neuchovává každý malý překlep. Verzování nenahrazuje undo/redo vašeho editoru, protože funguje o jednu vrstvu výše.
A pokud je Git nasazen na týmové projekt, umožní snadnou spolupráci protože
bez problémů automaticky zkombinuje nekonfliktní změny.
Na příklad, pokud Alice provede změnu do souboru alpha.txt
a Bob v ten
samý okamžik změní soubor bravo.txt
, Git umožní Carol abyste si stáhla
změny od obou bez obav o to, že některá změna přepíše jinou.
Tohle si sami vyzkoušíte v některém z pozdějších cvičení, zatím budete používat jen webové GUI. A protože budete jediní uživatelé daného projektu, nemusíte se případných konfliktů v obsahu bát.
Používání MFF GitLabu
Na tomhle předmětu budeme používat fakultní instanci GitLabu na adrese https://gitlab.mff.cuni.cz. Prosím, nepleťte si ji z instancí na https://gitlab.com, kterou můžete bez problémů používat, ale není nijak spjatá s tímto kurzem.
Pro přihlášení využijte přihlašovací údaje z CASu, tedy tytéž co fungují do SISu. Váš účet bude aktivován po první přihlášení.
Prosím, aktivujte si váš účet teď, pokud jste tak ještě neučinili. Pokud máte s přihlášením problém, prosím, přečtěte si sekci otázek a odpovědí.
První kroky v GitLabu
Abyste si GitLab rychle vyzkoušeli (ještě s ním budeme více pracovat v dalších cvičeních), vytvořte si nový projekt (vytvořte Blank project). Musíte vyplnit jméno, tzv. slug (krátké jméno, které se objeví v URL) a jeho viditelnost. V ukázkových screenshotech vidíte, že jsme vytvořili projekt pro zdrojáky z úvodního kurzu programování. Nezapomeňte zaškrtnout, že chcete vytvořit projekt s README.
Teď otevřete Web IDE, které obsahuje jednoduchý editor pro on-line úpravu souborů se zdrojáky.
Pomocí ikon a následujících screenshotů vytvořte nový soubor hello.py
a
vložte do něj nějaký jednoduchý Pythoní program.
Teď vytvoříme tzv. commit. Commit v Gitu zachytí aktuální stav projektu a můžeme na něj nahlížet jako na pojmenovanou verzi. Jakmile vytvoříte v Gitu commit, Git se vás zeptá na tzv. commit zprávu (commit message), kde byste měli popsat, jaké změny jste provedli.
Zatím budeme dělat změny přímo v tzv. master větvi. Koncepty větví si vysvětlíme později, zatím je berte jako magii, která prostě funguje :-).
To, co je důležité si zapamatovat je, že commit vlastně přiřadí jméno stavu vašeho projektu (revizi). Takže často uvidíte jména jako Přidány ikony do menu, Opravy překlepu v tlačítku nebo Dokončení slovenského překladu. Jak vidíte, odkazují se na stav projektu.
Teď se z GitLabu odhlašte.
Sami si zkuste se znovu do GitLabu přihlásit, najít váš projekt a vytvořit nový soubor. Vložte do nějak nějaký zdrojový kód. Všimněte si, že když kliknete na název souboru tak se objeví jeho obsah a opět odkaz na úpravy.
Odevzdávání úloh
GitLab budeme používat na odevzdávání a vyhodnocování vašich úloh.
Pro každého z vás vytvoříme projekt v tomto podstromu, který bude mít váš CASový login ve jméně.
Z technických důvodů můžeme projekt vytvořit až poté, co se do GitLabu poprvé přihlásíte. Zatím tyto projekty vytváříme semi-automaticky, takže možná budete muset počkat do dalšího dne, aby se váš projekt objevil.
Každá úloha bude mít předepsané jméno souboru, kam se má uložit řešení. Odevzdání pod jiným jménem (nebo do jiné složky) znamená, že vaše řešení neuvidíme (tj. ho neuznáme jako odevzdané). Do předmětu je zapsáno okolo 300 studentů a spousty věcí musíme automatizovat: z tohoto pohledu skutečně nemůžeme prohlížet váš projekt a tipovat, kam jste mohli řešení uložit.
Názvy souborů na Linuxu (a v GitLabu též) rozlišují velikost písmen.
Každé odevzdání – přesněji řečeno, každý commit – spustí automatické testy na vašem repozitáři. Tyto testy zkontrolují, že jste řešení odevzdali a též zkontrolují, že funguje.
Vysvětlení výsledků automatických testů
Až si otevřete váš předmětový projekt tak uvidíte, že vedle poslední commit zprávy je červená nebo zelená ikonka, které reprezentuje stav projektu.
Klepnutím na ikonu se dostanete ke skutečným výsledkům testů. Jsou tam dvě skupiny – kvízy před cvičením a úlohy po cvičení.
Ať už otevřete kteroukoliv z nich, uvidíte přepis akcí, které pro vás GitLab provedl.
Pro nás důležitá část začíná s bin/test.sh následována textem podobným tomu následujícímu.
1..2
ok 1 01/factor.py - submitted (0)
not ok 2 01/factor.py - number 12 (20)
# -- output differs --
# expected (3 lines):
# 2
# 2
# 3
# actual (1 line):
# 8
# --
Tohle je výstup v tzv. Test Anything Protocol
(TAP) který říká, že proběhly dva testy (1..2
)
a první z nich byl v pořádku (ok 1 ...
) zatímco druhý selhal (not ok 2 ...
).
Zpráva pro procházející test je poměrně krátká – říká jen jméno testu
(01/factor.py - submitted (0)
). Budeme používat tento formát jména testu
pro určení, že soubor je v projektu vůbec přítomen.
Pro selhaný test zpráva obsahuje opět jméno testu (01/factor.py - number 12 (20)
) po kterém následuje popis chyby.
TAP používá syntaxi Pythoních komentářů pro řádky s detaily o chybě (#
).
Tam si můžete všimnout, že test očekával, že program vypíše 3 řádky
obsahující 2
, 2
a 3
. Místo toho ale program vytiskl jediný řádek s
hodnotou 8
.
To by vám mělo poskytnout dostatek informací k nápravě. V tomto případě byl program napsán v Pythonu, takže ho můžete pochopitelně odladit na svém počítači.
Prosím, nepoužívejte GitLab jako vaši vývojovou platformu. Vždy vyzkoušejte a odlaďte vaše řešení lokálně – GitLab nemůže sloužit jako náhrada chybějící instalace Pythonu na vašem počítači. Úlohy na GitLabu jsou spouštěny na sdíleném stroji – nechte jej k dispozici i ostatním uživatelům.
Každý test také obsahuje číslo v závorkách za názvem testu (tady je to 0
a
20
). Toto číslo zhruba odpovídá počtu bodů za tento test. Při
vyhodnocování vašich řešení jej můžeme lehce upravit, pokud to uznáme za
vhodné.
Rozhodně neplánujte vaše řešení tak, abyste s těmito body těsně prošli.
Jejich účel je zobrazit relativní důležitost testu, nikoliv přesný počet
bodů.
Pokud je číslo v závorkách záporné, odpovídá počtu bodů, které odečteme,
pokud test selže. To budeme používat pro testy kontrolující dávno známé věci
(např. že váš kód nepoužívá v Pythonu import *
).
GitLab vám také pošle e-mail vždy, když některá z těchto automatických akcí selže (v terminologii GitLabu jde o pipeline a job). Notifikace lze vypnout, ale nezapomeňte si pak výsledky zkontrolovat ručně.
Hodnocené úlohy pro toto cvičení (deadline: 27. únor)
První úloha je automaticky testovaná GitLabem, druhá nikoliv.
01/factor.py
(50 bodů)
Napište program v Pythonu, která faktorizuje číslo na součin
prvočísel. Číslo bude načteno ze souboru input.txt
, který bude obsahovat
jen jedno číslo.
Pro neplatný vstup (záporné číslo apod.) musí program vypsat pomlčku -
.
Každé prvočíslo bude na samostatné řádce.
Můžete se také podívat na výstup z testů, pokud chování v některých situacích není zřejmé z popisu výše.
Důležité: nenahrávejte soubor input.txt
do vašeho projektu.
Tento soubor je automaticky vytvořen při testování
(ale, pochopitelně si jej vytvořte lokálně, když budete vaše řešení testovat).
Důležité: první řádka s #!
má svůj důvod a musíte ji tam nechat (vysvětlíme později).
Stejně tak ponechejte použití main()
a podmínku s __name__
, protože jde o správnou přípravu na modulární kód.
Poznámka: uznáváme, že návrh programu je chybný, protože vstup by měl přijít jinou cestou. Později se k němu vrátíme, až budeme vědět více o standardních vstupech a výstupech a o argumentech programu.
Tajná issue na Foru (50 bodů)
Issue na GitLabu je hlášení, které obvykle popisuje existující chybu v projektu. My budeme issue používat i pro off-line komunikaci v tomto předmětu.
Když je issue označena jako Confidential (řekněme, tajná), tak ji uvidí jen uživatelé s určitým oprávněním. V případě našeho Fora ji uvidí jen cvičící.
Tato úloha po vás chce vytvořit Confidential Issue na Foru s následujícími vlastnostmi.
- Název issue musí být
01/issue
(prosím, žádné další písmenka či znaky). - Issue přiřaďte uživateli
horkv6am
(Vojtěch Horký). - Připojte k issue soubor
/etc/os-release
z vašeho Linuxu (použití počítače z laboratoře v IMPAKTu je též v pořádku). Odkaz na přílohu v popisu issue musí být/etc/os-release
. - Pod odkaz na přílohu
/etc/os-release
vložte obsah souboru/proc/loadavg
jako zdrojový kód (najděte si Code block formatting v nápovědě). Budete muset tento soubor otevřít v textovém editoru, abyste mohli zkopírovat jeho obsah. Nebuďte překvapeni tím, že jeho velikost je 0 a přesná obsahuje zajímavý obsah. Opět, prosím, použijte hodnotu z vašeho počítače nebo z počítače v učebně. - Pod obsah souboru
/proc/loadavg
napište jeden odstavec, ve kterém popíšete, jaké (Linuxové) prostředí jste si vybrali a proč. Odstavec napište v celých větách. - Nechte issue otevřenou (zavřeme ji po deadline).
Issue bude tedy před odesláním vypadat na Preview záložce nějak takto.
Důležité: ujistěte se, že jde o confidential issue. Veřejné issue odesílají notifikace všem členům projektu. V tomto případě tedy všem vašim spolužákům, kteří by tak dostali e-mail, o který určitě neměli zájem.
Učební výstupy
Znalosti konceptů
Znalost konceptů znamená, že rozumíte významu a kontextu daného tématu a jste schopni témata zasadit do většího rámce. Takže, jste schopni …
-
vysvětlit, proč není grafické uživatelské rozhraní pevnou součástí Linuxu
-
vyjmenovat několik druhů objektů které jsou obvykle potřebné pro softwarové projekty (kromě zdrojového kódu)
-
vysvětlit základní (vysokoúrovňové) operace verzovacích nástrojů
-
vysvětlit, jaké jsou možnosti, pokud má více lidí spolupracovat na zdrojovém kódu
Praktické dovednosti
Praktické dovednosti se obvykle týkají použití daných programů pro vyřešení různých úloh. Takže, dokážete …
-
nastartovat vlastní počítač do Linuxu (buď použitím USB disku nebo přes virtuální stroj)
-
přihlásit se do grafického linuxového prostředí
-
přihlásit se do fakultní instance GitLabu
-
vytvořit nový projekt na GitLabu
-
vytvořit nový soubor v GitLabovém projektu a uložit změny (vytvořit commit) (ve webovém rozhraní GitLabu)
-
upravit existující soubory v GitLabovém projektu (ve webovém rozhraní GitLabu)
-
upravit nastavení upřednostňovaného (Linuxového) prostředí