e-x-a.org » NSWI095 Úvod do UNIXu

Informace o cvičení k přednášce Úvod do UNIXu — SU2, čtvrtky ve 14:00, LS 2017/18.

  • V případě čehokoliv mi napište mail na kratochvil@ksi.mff.cuni.cz
  • Materiál ke čtení:
    • Knížka Libora Forsta “Shell v příkladech” jde půjčit v knihovně (dostupné množství se před zkouškovým výrazně ztenčuje)
    • Advanced Bash Scripting Guide
    • StackOverflow a wikipedia (s rezervou!)
    • Po internetu se povaluje hromada materiálu typu ‘Sed by example’, ‘Awk by example’, apod. Manuálové stránky jsou taky online.

Požadavky na zápočet

Zápočet je potřeba k přihlášení na zkoušku, všichni by ho měli dostat ideálně do začátku zkouškového. Předem upozorňuju, že přes zkouškové a v září budu k dispozici tak napůl.

Zásadním účelem zápočtu je zajistit, že až půjdete ke zkoušce, tak odejdete s úspěchem a zkoušející z toho nebude muset mít těžkou hlavu a černé myšlenky. O této schopnosti mě můžete přesvědčit jakýmkoliv dostatečně rigorózním způsobem, doporučené postupy jsou ale tyto:

  • Spolehlivá metoda: Zápočet lze dostat za domácí úkoly, zápočťák a aktivitu.
    • Domácí úkoly budu zadávat každý týden, budou obecně dost jednoduché, odevzdávat je budeme nově přes git. Bude potřeba sesbírat aspoň 50% bodů. Termín je vždy do poslední půlnoci předcházející dalšímu cvičením.
    • Zápočťák je jakýkoliv program, který implementuje něco zajímavého/užitečného/zábavného v shellu, awku, sedu, nebo podobné unixovině, není k dispozici v miliardě kopií na internetu a má rozumný rozsah. Více viz. níže.
    • Aktivita bude probíhat podobně jako na mých ostatních cvičeních — za programování na projektor/nějakou práci u tabule dostanete bod. Doporučuju nemít nápadně málo aktivitních bodů.
  • Rychlá a těžká metoda: Pokud se nechcete zdržovat s něčím co už umíte, můžete na jednom z prvních cvičení napsat těžkou písemku spočívající ve vypracování nějakého pitoreskního ale zvládnutelného zadání v shellu/sedu/awku v časovém limitu cvičení. Dejte mi předem vědět mailem, ať vyrobím nějaké zadání. Zápočet za zvládnutí a rozumný kód je okamžitý.

Mezivýsledky můžete sledovat zde.

Témata na zápočťáky

Téma zápočťáku je potřeba dohodnout do 22. 4. 2018. Pokud jste už vytvořili něco jiného co s UNIXem souvisí, neváhejte to použít jako zápočťák.

VHODNÉ:

Rozsah: orientačně cca nad 100 a pod 400 řádků kódu. Víc není problém, ale hrozí, že toho bude zbytečně moc. Míň taky není problém, pokud kód bude dostatečně funkčně nahušťěný.

Témata:

  • zábavné náhrady nějakých shellových příkazů (simple parallel make, tiny almost-git, ...)
  • databázoviny
    • systém na evidenci nějakých věcí (knihovna, fotbalova liga, ...) s “konzolovým” “user” “interfacem”
    • mailing list management daemon
  • časoviny a kalendářoviny
    • ToDo manager
    • miniaturní cron daemon
    • kreslítko kalendáře, v něčem lepší než standardní cal
  • hry
    • textové hry
    • multiplayerové hry (piškvorky, chat, MUD, ...) pomocí netcatu
    • něco co kreslí do terminálu skoro grafiku (inspirace viz. rash, 0verkill, nethack)
  • zálohovací nebo verzovací věci (viz. rdiff-backup apod.)
  • programování
    • zvýrazňovače, zarovnávače, zkrášlovače a čističe kódu
    • interpretery, např. interpret Logo (želvičky) nebo něčeho podobného (robot karel?) — vhodné, rychlé a jednoduché řešení je přepsáním zdrojáku sedem do nějakého jiného jazyka a spuštění výsledku již existujícím interpreterem/kompilátorem.
    • build systémy/balíčkovače (např. něco co pro projekt v C++ vygeneruje přenosný Makefile, (anti)inspirace viz. např. CMake)

NEVHODNÉ:

  • cokoliv co jde vygooglit v mnoha a mnoha kopiích
  • zadání jehož smysl nepochopím do 3 minut
  • řešení které celé nepřečtu do 20 minut
Hodnocení zápočťáků

Hodnotí se následující aspekty (seřazené sestupně podle důležitosti). Pokud máte přebytek aktivitních bodů, můžete ho vyměnit za úlevy na méně důležitých bodech:

  • nejdůležitější součást — odevzdání ve formě podle návodu dole
  • rozsah (Horní hranice: dokážete to celé vysvětlit za 10 minut a za dalších 15 minut jde prozkoumat celý zdrojový kód. Spodní hranice: složitost by měla převyšovat domácí úkoly z konce semestru.)
  • pokrytí funkcionality demonstrativním kódem a dokumentací (do minuty si to můžu úspěšně celé vyzkoušet)
  • absence programovacích chyb (tj. např. program nejde rozbít špatným vstupem)
  • dodržení standartnosti v tom, jak se program chová uvnitř (např. kde má uložená pevná data a konfiguraci, dočasná data, jestli správně používá ostatní programy)
  • dodržení UNIXové “slušnosti” interfacu (tj. nahlášení chyby exit kódem, standartní reakce na standartní optiony (--help), chybové hlášky na stderr)
  • kvalita kódu (odsazování, komentáře, názvy proměnných, jde to přečíst/pochopit bez bolení očí/hlavy)
Jak odevzdat zápočťák?

Pošlete mi ho v balíku .tar.gz. Balík by měl obsahovat jediný adresář s názvem popisujícím vaše téma a jméno (např. drticka_virtualniho_odpadu_josef_novak/, v něm pak:

  • demo skript nebo README.demo — na nějakých mini testovacích datech ukažte, co program umí, případně vysvětlete, jak program rychle použít
  • testovací data k předchozímu, pokud jsou potřeba
  • program (nebo víc programů), který kromě dohodnuté funkcionality správně reaguje na standartní optiony
  • README — dokumentaci která popisuje co program jak dělá. Součástí dokumentance je “programátorská dokumentace” a.k.a. “internals” a.k.a. “hacking guide”, popis vnitřního rozložení programu do celků, poskytovaných interfaců a držených invariantů mezi nimi, a popis toku dat skrz program. Struktura P.D. se liší program od programu, ale obecné pravidlo je, že programátor s podobnou úrovní jako autor by z ní měl během cca 15 minut a) zjistit co a jak dělá každá součást kódu programu, b) být schopný v programu udělat malou rozumnou úpravu funkcionality a nerozbít to. Komentáře nemusí být (v extrémně přehledných případech) potřeba, ale většinou je vhodné kód pořádně popsat. Dobrý systém komentářů výrazně zjednodušuje programátorskou dokumentaci. Pokud se vám chce, README můžete formátovat jako manuálovou stránku.

Odevzdávání domácích úkolů

  • Založte si někde (třeba na GitHubu, GitLabu, nebo kdekoliv jinde) gitový repozitář na odevzdávání úkolů. Návod ukážu na hodině a dodatečně opíšu sem.
  • Pošlete mi gitové URL, pomocí kterého si budu moct repozitář naklonovat (případně — na GitHubu mě stačí přidat do project members)

Hodnocení úkolů bude probíhat tak, že si vaše repozitáře poměrně pohodlně stáhnu gitem a zkontroluju. Výsledky (včetně okomentovaných odevzdaných řešení) budou veřejně dostupné (link dodám).

Při nastavování všech možných správných přístupů se může hodit znát jméno mého účtu na GitHubu nebo můj SSH klíč. Případně, pokud je máte repo veřejné ale chcete mít možnost zabránit ostatním aby Vaše řešení opisovali (což jim samozřejmě nepomůže protože to poznám), můj PGP klíč je tady.

Btw.: GitHub studentům poskytuje privátní repozitáře zadarmo.

Průběh cvičení

1 (22. 2. 2018)

Crash-course pozorování černého terminálu. Jak použít SSH.

Soubory, adresáře, cesty, koncept programu, ls, cd, cat, w, echo, rmidir, mkdir, rm, rm -r, cp -r, mv, ls -a, glob.

Editování souborů pomocí vi (používejte libovolný editor, ale vi byste měli umět použít alespoň jako notepad: vi soubor, [i], editování, [esc], :wq nebo :q!).

Stihli jsme si vyzkoušet >, < a >>.

Domácí úkol 1 (termín je prodloužený až na třetí cvičení): Zařiďte si gitový repozitář podle návodu nahoře, a pošlete mi na něj link (mailem). Ve svém repozitáři pak vyrobte adresář u01 a v něm prázdný soubor ahoj, obojí přidejte do správy verzí, commitněte a pošlete do repozitáře. Případně to na githubu můžete “naklikat” i přes webové rozhraní.

Bonusový domácí úkol: Uvařte si čaj nebo kafe a spusťte a projděte si vimtutor.

2 (29. 2. 2018)

Rychloúvod do správy verzí pomocí programu git.

Filtrování: less, grep, wc.

Jednoduché shellové skripty, sh, bash.

Bonusy

  • Sed je T-kompletní (tzn. “jde v něm naprogramovat všechno”). Důkazů je hodně, ale tenhle rozhodně bude nejohyzdnější. Jen v sedu (přehazováním textu za pomoci regulárních výrazů) jde napsat třeba arkanoid nebo kalkulačka s neomezenou přesností . Jestli to je rozumné se neví.
  • The Art Of UNIX Programming (online verze). Překvapivě stále více než aktuální. Trochu filozofické. Obsahuje odpovědi na většinu položitelných otázek začínajících na “Proč se v UNIXu proboha ….?” a užitečný náhled do historie a evoluce současného počítačového světa.
Jak se připojit do labu z domova?

Z unixu: ssh LOGIN@u-pl0.ms.mff.cuni.cz. Místo LOGIN napíšete své uživatelské jméno, na heslo se vás to zeptá.

Z windows: Stáhněte si Putty. Spusťte ji, do “Host name” napište u-pl0.ms.mff.cuni.cz. Na uživatelské jméno a heslo se to zeptá samo při připojování.

Místo u-pl0 můžete použít i jiná čísla počítačů: u-pl1, u-pl2 až cca. u-pl23.