mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 07:04:35 +00:00
2472 lines
137 KiB
Python
2472 lines
137 KiB
Python
#!/usr/bin/env python3
|
||
"""Years 2–4 of networks and hardware. Slides plus a four-question quiz."""
|
||
|
||
from pathlib import Path
|
||
|
||
ROOT = Path(__file__).resolve().parents[1]
|
||
|
||
|
||
def c(text):
|
||
return '"' + text.replace("\\", "\\\\").replace('"', '\\"') + '"'
|
||
|
||
|
||
def S(kicker, title, tip, *lines):
|
||
return (kicker, title, tip, lines)
|
||
|
||
|
||
def Q(prompt, options, correct, hint):
|
||
if len(options) != 4:
|
||
raise SystemExit(f"need 4 options: {prompt}")
|
||
if not 0 <= correct < 4:
|
||
raise SystemExit(prompt)
|
||
return (prompt, options, correct, hint)
|
||
|
||
|
||
def L(title, title_en, sub, sub_en, slides, quiz):
|
||
if len(slides) != 3 or len(quiz) != 4:
|
||
raise SystemExit(title)
|
||
return {
|
||
"title": title, "title_en": title_en,
|
||
"sub": sub, "sub_en": sub_en,
|
||
"slides": slides, "quiz": quiz,
|
||
}
|
||
|
||
|
||
def course(prefix, sub, sub_en, lessons):
|
||
if len(lessons) != 8:
|
||
raise SystemExit(f"{prefix} has {len(lessons)}")
|
||
return {"prefix": prefix, "sub": sub, "sub_en": sub_en, "lessons": lessons}
|
||
|
||
|
||
NET2 = course(
|
||
"net2",
|
||
"VLAN, STP, DHCP, DNS, NAT, IPv6, statické směrování a ACL.",
|
||
"VLANs, STP, DHCP, DNS, NAT, IPv6, static routing and ACLs.",
|
||
[
|
||
L("VLAN a trunk", "VLANs and trunks",
|
||
"Logické sítě na jednom přepínači a značkovaný spoj.",
|
||
"Logical networks on one switch and a tagged link.",
|
||
[
|
||
S("1 / 3 • VLAN", "Oddělení provozu",
|
||
"Tip: VLAN není samostatný kabel, je to značka v rámci.",
|
||
"VLAN sdružuje porty do jedné vysílací domény.",
|
||
"Počítače v různých VLAN spolu přímo na druhé vrstvě nemluví.",
|
||
"Číslo VLAN se na trunku vozí ve značce 802.1Q.",
|
||
"Nativní VLAN na trunku jede neznačkovaná. Na obou koncích musí sedět."),
|
||
S("2 / 3 • Porty", "Access a trunk",
|
||
"Tip: access port patří do jedné VLAN, trunk jich nese víc.",
|
||
"Access port se připojuje ke koncovému zařízení.",
|
||
"Trunk spojuje přepínače nebo přepínač s routerem.",
|
||
"Povolené VLAN na trunku omezí, co smí přejít.",
|
||
"Špatně nastavený trunk pustí cizí VLAN do špatné sítě."),
|
||
S("3 / 3 • Provoz", "K čemu se VLAN hodí",
|
||
"Tip: oddělení hostů od školy nesmí stát jen na hesle Wi-Fi.",
|
||
"Hosté, škola a správa mohou sdílet jeden přepínač.",
|
||
"Hlasová VLAN oddělí telefony od dat.",
|
||
"Mezi VLAN se dostane jen směrovač nebo přepínač třetí vrstvy.",
|
||
"VLAN zmenšuje broadcast, nenahrazuje firewall."),
|
||
],
|
||
[
|
||
Q("Co VLAN na přepínači dělá?",
|
||
["Sdruží porty do jedné vysílací domény", "Zrychlí procesor serveru",
|
||
"Nahradí šifrování WPA3", "Přidělí veřejnou IPv4 adresu"],
|
||
0, "VLAN odděluje provoz na druhé vrstvě."),
|
||
Q("Jak se VLAN pozná na trunku?",
|
||
["Značkou 802.1Q v rámci", "Jinou MAC adresou zdroje",
|
||
"Jiným konektorem RJ11", "Bitem v ICMP"],
|
||
0, "802.1Q vloží do ethernetového rámce číslo VLAN."),
|
||
Q("Kam patří access port?",
|
||
["Ke koncovému počítači v jedné VLAN", "Jen mezi dvěma routery",
|
||
"Na optický spoj s vlnovým multiplexem", "Do napájecího zdroje"],
|
||
0, "Access port má jednu VLAN a značku obvykle sundá."),
|
||
Q("Jak spolu mluví dvě různé VLAN?",
|
||
["Přes směrování, ne přímo na druhé vrstvě",
|
||
"Samy od sebe, VLAN je jen barva kabelu",
|
||
"Jedině přes ARP broadcast do všech VLAN",
|
||
"Jen když mají stejnou MAC adresu"],
|
||
0, "Mezi VLAN je potřeba router nebo L3 switch."),
|
||
]),
|
||
L("STP a smyčky", "STP and loops",
|
||
"Proč smyčka na druhé vrstvě shodí síť a jak ji STP přeruší.",
|
||
"Why a layer-2 loop takes the network down, and how STP breaks it.",
|
||
[
|
||
S("1 / 3 • Smyčka", "Broadcastová bouře",
|
||
"Tip: na druhé vrstvě není TTL, rámec může kroužit donekonečna.",
|
||
"Dva kabely mezi stejnými přepínači vytvoří smyčku.",
|
||
"Broadcast se kopíruje na všechny porty a vrátí se zpět.",
|
||
"Přepínač se zahltí a přestane přenášet užitečný provoz.",
|
||
"Na třetí vrstvě paket TTL snižuje, ethernetový rámec ne."),
|
||
S("2 / 3 • STP", "Jedna aktivní cesta",
|
||
"Tip: STP nevybírá nejrychlejší cestu pro data, brání smyčce.",
|
||
"Přepínače si volí root bridge, obvykle nejnižší bridge ID.",
|
||
"Některé porty zůstanou ve stavu blocking a rámce nepřeposílají.",
|
||
"Když aktivní linka spadne, blocking port se může otevřít.",
|
||
"RSTP reaguje rychleji než původní STP."),
|
||
S("3 / 3 • Ochrana", "Porty, které nemají přepínat",
|
||
"Tip: port k tiskárně nemá poslouchat cizí BPDU.",
|
||
"PortFast na access portu zrychlí připojení počítače.",
|
||
"BPDU Guard port shodí, když na něm přijde BPDU.",
|
||
"Root Guard brání tomu, aby se cizí switch stal rootem.",
|
||
"Záložní kabel má smysl, ale jen se zapnutým STP."),
|
||
],
|
||
[
|
||
Q("Proč je smyčka na přepínačích nebezpečná?",
|
||
["Broadcast může kroužit bez omezení TTL",
|
||
"IPv4 přestane mít masku",
|
||
"DNS přejmenuje domény",
|
||
"Procesor v počítači se vypne"],
|
||
0, "Ethernetový rámec nemá TTL."),
|
||
Q("Co STP s nadbytečným portem udělá?",
|
||
["Nechá ho blokovat, aby nevznikla smyčka",
|
||
"Zdvojnásobí rychlost obou kabelů",
|
||
"Smaže MAC tabulku navždy",
|
||
"Přesměruje port na VLAN 1 a vypne ostatní"],
|
||
0, "Blocking port rámce nepřeposílá, dokud není potřeba."),
|
||
Q("K čemu je BPDU Guard?",
|
||
["Shodí access port, na kterém se objeví cizí přepínač",
|
||
"Šifruje heslo k Wi-Fi",
|
||
"Přiděluje IPv6 adresy",
|
||
"Měří útlum optiky"],
|
||
0, "Na portu pro počítač nemá co dělat protokol přepínačů."),
|
||
Q("Které tvrzení o RSTP sedí?",
|
||
["Na výpadek reaguje rychleji než původní STP",
|
||
"Ruší potřebu VLAN",
|
||
"Funguje jen na IPv6",
|
||
"Nahrazuje směrovací tabulku"],
|
||
0, "RSTP zkracuje čekání při změně topologie."),
|
||
]),
|
||
L("DHCP a DNS", "DHCP and DNS",
|
||
"Kdo přiděluje adresu a kdo překládá jméno.",
|
||
"Who hands out an address, and who translates a name.",
|
||
[
|
||
S("1 / 3 • DHCP", "Adresa bez opisování",
|
||
"Tip: DHCP dává adresu na čas, ne navždy.",
|
||
"Klient pošle broadcast a hledá server.",
|
||
"Nabídka obsahuje adresu, masku, bránu a DNS.",
|
||
"Zapůjčení má dobu platnosti a klient ji obnovuje.",
|
||
"Rezervace přiváže adresu ke konkrétní MAC adrese."),
|
||
S("2 / 3 • Rozsah", "Co se nesmí překrývat",
|
||
"Tip: dva servery se stejnou adresou v jedné síti si škodí.",
|
||
"Rozsah musí ležet v síti, kterou má brána.",
|
||
"Statické adresy serverů do rozsahu nepatří, nebo se vyloučí.",
|
||
"Špatná brána v nabídce odřízne celou VLAN od internetu.",
|
||
"DHCP relay přenese požadavek z VLAN, kde server není."),
|
||
S("3 / 3 • DNS", "Jméno na adresu",
|
||
"Tip: DNS není totéž co DHCP. Jedno dává adresu, druhé jméno.",
|
||
"A záznam ukazuje na IPv4, AAAA na IPv6.",
|
||
"Reverzní PTR překládá adresu zpět na jméno.",
|
||
"Rekurzivní resolver se ptá dál, autoritativní server zónu vlastní.",
|
||
"TTL u záznamu říká, jak dlouho se smí odpověď cacheovat."),
|
||
],
|
||
[
|
||
Q("Co klient od DHCP obvykle dostane?",
|
||
["Adresu, masku, bránu a DNS", "Jen heslo k Wi-Fi",
|
||
"Novou MAC adresu", "Kořenový certifikát webu"],
|
||
0, "To jsou čtyři údaje, bez kterých stanice v síti nepracuje."),
|
||
Q("Proč se rezervace v DHCP hodí?",
|
||
["Zařízení s danou MAC dostane pořád stejnou adresu",
|
||
"Vypne potřebu masky",
|
||
"Nahradí směrování",
|
||
"Zašifruje disk"],
|
||
0, "Rezervace je vhodná pro tiskárny a kamery."),
|
||
Q("Čím se liší A a AAAA?",
|
||
["A je IPv4, AAAA je IPv6", "A je pošta, AAAA je web",
|
||
"A je jméno VLAN, AAAA je číslo portu",
|
||
"Oba ukazují jen na IPv4"],
|
||
0, "Čtyři A v názvu připomínají delší IPv6 adresu."),
|
||
Q("K čemu je DHCP relay?",
|
||
["Pošle požadavek z jiné VLAN k serveru",
|
||
"Překládá jména bez DNS",
|
||
"Blokuje STP",
|
||
"Mění rychlost portu na 10 Gb/s"],
|
||
0, "Broadcast DHCP jinak VLAN neopustí."),
|
||
]),
|
||
L("NAT a PAT", "NAT and PAT",
|
||
"Jedna veřejná adresa pro mnoho počítačů.",
|
||
"One public address for many computers.",
|
||
[
|
||
S("1 / 3 • NAT", "Soukromé adresy ven",
|
||
"Tip: 192.168.0.0/16 a 10.0.0.0/8 na internetu směrovat nejdou.",
|
||
"NAT přepíše zdrojovou adresu při odchodu z lokální sítě.",
|
||
"Zpět router podle tabulky překladů provoz vrátí.",
|
||
"Zvenku nikdo sám od sebe spojení dovnitř nenaváže.",
|
||
"To je vedlejší efekt, ne náhrada firewallu."),
|
||
S("2 / 3 • PAT", "Mnoho počítačů, jedna adresa",
|
||
"Tip: PAT si pamatuje i číslo portu, ne jen adresu.",
|
||
"Více vnitřních adres sdílí jednu veřejnou.",
|
||
"Rozliší je zdrojový port.",
|
||
"Domácí router dělá téměř vždy PAT, ne čistý NAT jedna ku jedné.",
|
||
"Dojdou-li porty, nová spojení se neotevřou."),
|
||
S("3 / 3 • Dovnitř", "Když má server být vidět",
|
||
"Tip: přesměrování portu otevře jen tu službu, kterou opravdu chcete.",
|
||
"Port forward pošle příchozí port na vnitřní adresu.",
|
||
"Na serveru pak musí poslouchat daná služba a firewall ji pustit.",
|
||
"DMZ na domácím routeru vystaví jeden počítač hodně otevřeně.",
|
||
"Lepší je konkrétní port než celá DMZ."),
|
||
],
|
||
[
|
||
Q("Proč stanice s adresou 192.168.1.20 není z internetu vidět přímo?",
|
||
["Je to soukromá adresa a ven jde až přes NAT",
|
||
"IPv4 takové adresy nezná",
|
||
"MAC adresa se na internetu nesmí použít jako jméno",
|
||
"DNS soukromé adresy maže"],
|
||
0, "Soukromé rozsahy se mezi poskytovateli nesměrují."),
|
||
Q("Čím se PAT liší od NAT jedna ku jedné?",
|
||
["Více vnitřních adres sdílí jednu veřejnou a liší se portem",
|
||
"PAT šifruje provoz",
|
||
"PAT funguje jen pro IPv6",
|
||
"PAT ruší potřebu brány"],
|
||
0, "Překlad zahrnuje adresu i port."),
|
||
Q("K čemu je přesměrování portu?",
|
||
["Příchozí spojení na daný port pošle na vnitřní server",
|
||
"Přidělí VLAN",
|
||
"Zapne STP",
|
||
"Změní masku celé školy na /8"],
|
||
0, "Bez něj zvenku na vnitřní web sami nedosáhnete."),
|
||
Q("Proč NAT není firewall?",
|
||
["Jen překládá adresy, pravidla provozu řeší firewall",
|
||
"NAT umí totéž co antivir",
|
||
"NAT kontroluje hesla uživatelů",
|
||
"NAT šifruje Wi-Fi"],
|
||
0, "Nechtěný publikovaný port NAT klidně pustí."),
|
||
]),
|
||
L("IPv6 základy", "IPv6 basics",
|
||
"Delší adresa, jiný zápis a co se nemění.",
|
||
"A longer address, a different notation, and what stays the same.",
|
||
[
|
||
S("1 / 3 • Adresa", "128 bitů",
|
||
"Tip: nuly v jedné skupině za sebou smí zkrátit :: jen jednou.",
|
||
"Adresa má osm skupin po čtyřech hexadecimálních číslicích.",
|
||
"Prefix se píše jako /64, ne jako stará maska 255.255.255.0.",
|
||
"Link-local adresa fe80:: platí jen na tom spoji.",
|
||
"Globální adresa je vidět i mimo místní spoj."),
|
||
S("2 / 3 • Přidělení", "SLAAC a DHCPv6",
|
||
"Tip: výchozí bránu v IPv6 často ohlašuje router, ne DHCP.",
|
||
"Router advertisement řekne prefix a jestli se stanice smí nastavit sama.",
|
||
"SLAAC složí adresu z prefixu a identifikátoru rozhraní.",
|
||
"DHCPv6 přidá adresu nebo jen DNS, podle příznaků.",
|
||
"Obě varianty mohou běžet vedle sebe."),
|
||
S("3 / 3 • Vedle IPv4", "Dual stack",
|
||
"Tip: IPv6 nevypínejte jen proto, že mu nerozumíte. Rozbitý IPv6 zpomalí i weby.",
|
||
"Počítač může mít IPv4 i IPv6 naráz.",
|
||
"DNS AAAA záznam rozhoduje, jestli se klient zkusí spojit po IPv6.",
|
||
"NAT u IPv6 není nutný tak jako u IPv4, ale firewall ano.",
|
||
"Ping na IPv6 je jiný příkaz než ping na IPv4, podle systému."),
|
||
],
|
||
[
|
||
Q("Jak je IPv6 adresa dlouhá?",
|
||
["128 bitů", "32 bitů", "48 bitů", "256 bitů"],
|
||
0, "IPv4 má 32 bitů, IPv6 čtyřikrát tolik."),
|
||
Q("Která adresa je link-local?",
|
||
["fe80::1", "192.168.1.1", "8.8.8.8", "255.255.255.255"],
|
||
0, "fe80:: platí jen na místním spoji."),
|
||
Q("Kdo v IPv6 často oznámí prefix?",
|
||
["Router advertisement", "ARP request",
|
||
"STP hello", "Jen ruční zápis do hosts"],
|
||
0, "Router říká stanicím, jaký prefix na spoji platí."),
|
||
Q("Co znamená dual stack?",
|
||
["Zařízení používá IPv4 i IPv6",
|
||
"Dva switche v jedné VLAN",
|
||
"Dvě masky u jedné IPv4 adresy",
|
||
"Záloha jen na pásku"],
|
||
0, "Oba protokoly běží současně."),
|
||
]),
|
||
L("Statické směrování", "Static routing",
|
||
"Ruční cesta, metrika a kdy přestane stačit.",
|
||
"A hand-written route, the metric, and when it is no longer enough.",
|
||
[
|
||
S("1 / 3 • Trasa", "Kam s paketem",
|
||
"Tip: směrovací tabulka se dívá na síť, ne na jednu adresu stanice.",
|
||
"Záznam říká síť, masku nebo prefix a další skok.",
|
||
"Další skok musí být dosažitelný na přímo připojeném rozhraní.",
|
||
"Výchozí trasa 0.0.0.0/0 chytí vše, co nemá přesnější záznam.",
|
||
"Přesnější prefix vyhraje nad kratším."),
|
||
S("2 / 3 • Metrika", "Když je cest víc",
|
||
"Tip: nižší administrativní vzdálenost znamená důvěryhodnější zdroj trasy.",
|
||
"Statická trasa má lepší vzdálenost než OSPF nebo RIP.",
|
||
"Metrika porovnává trasy ze stejného zdroje.",
|
||
"Plovoucí statická trasa má horší vzdálenost a čeká jako záloha.",
|
||
"Špatný další skok vytvoří černou díru: paket odejde a ztratí se."),
|
||
S("3 / 3 • Meze", "Kdy ruční tabulka nestačí",
|
||
"Tip: deset poboček se statickými trasami neudržíte po každé změně.",
|
||
"Statika je přehledná v malé síti a na okraji k poskytovateli.",
|
||
"Neumí sama obejít spadlou cestu, pokud záloha není připravená.",
|
||
"Na směrovači musí sedět trasa tam i zpět, jinak odpověď nepřijde.",
|
||
"Změna adresace znamená obejít všechny ruční záznamy."),
|
||
],
|
||
[
|
||
Q("Na co se směrovač dívá při výběru trasy?",
|
||
["Na síť a prefix, ne na jméno počítače",
|
||
"Na barvu kabelu",
|
||
"Na VLAN jméno v DNS",
|
||
"Jen na MAC adresu cíle"],
|
||
0, "Třetí vrstva směruje podle prefixu."),
|
||
Q("Která trasa je výchozí?",
|
||
["0.0.0.0/0", "255.255.255.255/32", "192.168.1.1/32", "::1/128"],
|
||
0, "Nulová síť s nulovým prefixem chytí zbytek."),
|
||
Q("Co je plovoucí statická trasa?",
|
||
["Záložní ruční trasa s horší vzdáleností",
|
||
"Trasa, která plave mezi VLAN bez routeru",
|
||
"Automatický OSPF",
|
||
"Záznam jen v ARP"],
|
||
0, "Nastoupí, až když zmizí lepší cesta."),
|
||
Q("Proč odpověď ze serveru nedorazí, i když tam paket došel?",
|
||
["Chybí zpáteční trasa",
|
||
"TCP nemá porty",
|
||
"IPv4 neumí odpovědi",
|
||
"Switch maže cílové MAC adresy"],
|
||
0, "Cesta musí existovat oběma směry."),
|
||
]),
|
||
L("ACL a filtrování", "ACLs and filtering",
|
||
"Seznam, který provoz pustí a který zahodí.",
|
||
"A list that permits traffic or drops it.",
|
||
[
|
||
S("1 / 3 • Pravidla", "Pořadí rozhoduje",
|
||
"Tip: první shoda vyhrává. Obecné povolení na začátku pozdější zákaz schová.",
|
||
"ACL zkouší řádky shora dolů.",
|
||
"Na konci bývá tiché zamítnutí všeho ostatního.",
|
||
"Pravidlo umí adresu, protokol a port.",
|
||
"Jedno špatné pořadí otevře službu, kterou jste chtěli zavřít."),
|
||
S("2 / 3 • Směr", "Dovnitř a ven",
|
||
"Tip: blíž zdroji filtrujte to, co nemá vůbec vstoupit.",
|
||
"Příchozí ACL sedí na paketech, které do rozhraní vcházejí.",
|
||
"Odchozí ACL sedí na paketech, které rozhraní opouštějí.",
|
||
"Filtr na VLAN rozhraní hlídá provoz mezi sítěmi.",
|
||
"ACL na směrovači nevidí provoz, který zůstane uvnitř jednoho switche."),
|
||
S("3 / 3 • Praxe", "Co obvykle pustit",
|
||
"Tip: nejdřív povolte, co potřebujete, a zbytek nechte spadnout.",
|
||
"Správa směrovače nemá poslouchat z hostovské VLAN.",
|
||
"Do serverové sítě pusťte jen porty služeb, které tam jsou.",
|
||
"ICMP můžete omezit, ale úplný zákaz ztíží hledání chyb.",
|
||
"Po změně ACL ověřte, že legitimní provoz pořád prochází."),
|
||
],
|
||
[
|
||
Q("Jak ACL vybírá pravidlo?",
|
||
["Použije první řádek, který sedí",
|
||
"Sečte všechny řádky a udělá průměr",
|
||
"Vždy použije poslední řádek",
|
||
"Ptá se DNS"],
|
||
0, "Pořadí je součást významu seznamu."),
|
||
Q("Co udělá tiché zamítnutí na konci?",
|
||
["Zahodí provoz, který žádný řádek nepovolil",
|
||
"Povolí všechno, co zbylo",
|
||
"Přepne port do trunku",
|
||
"Pošle paket do IPv6"],
|
||
0, "Co není povoleno, neprojde."),
|
||
Q("Proč ACL na routeru nehlídá dva počítače v jedné VLAN?",
|
||
["Jejich rámce jdou jen přes switch a k routeru nemusí",
|
||
"ACL umí jen Wi-Fi",
|
||
"VLAN nemá MAC adresy",
|
||
"TCP takový provoz šifruje před switchem"],
|
||
0, "Provoz uvnitř VLAN zůstane na druhé vrstvě."),
|
||
Q("Kam nepatří správa routeru?",
|
||
["Do hostovské sítě", "Na konzolový port technika",
|
||
"Do správní VLAN", "Na šifrované SSH z dohledu"],
|
||
0, "Host nemá mít cestu na správu infrastruktury."),
|
||
]),
|
||
L("Podniková Wi-Fi", "Enterprise Wi-Fi",
|
||
"SSID, WPA3 a proč jedno heslo na nástěnce nestačí.",
|
||
"SSIDs, WPA3, and why one password on the wall is not enough.",
|
||
[
|
||
S("1 / 3 • SSID", "Více sítí, jedna infrastruktura",
|
||
"Tip: hostovské SSID má skončit v jiné VLAN než učitelé.",
|
||
"Jedno rádio může ohlašovat víc SSID.",
|
||
"Každé SSID se mapuje na VLAN.",
|
||
"Schované SSID není zabezpečení, jméno jde pořád zachytit.",
|
||
"Stejné SSID na více přístupových bodech umožní přechod."),
|
||
S("2 / 3 • Klíče", "WPA2 a WPA3",
|
||
"Tip: společné heslo PSK se nedá vzít jednomu člověku, aniž by ho dostali všichni.",
|
||
"WPA2-Personal sdílí jedno heslo.",
|
||
"WPA2-Enterprise ověřuje uživatele přes RADIUS.",
|
||
"WPA3 lépe chrání i slabší hesla a má lepší dopředné utajení.",
|
||
"Starý WEP se nepoužívá."),
|
||
S("3 / 3 • Pokrytí", "Kanály a přechod",
|
||
"Tip: dva sousední body na stejném kanále si překážejí.",
|
||
"Pásmo 2,4 GHz má málo nepřekrývajících se kanálů.",
|
||
"5 GHz má víc kanálů a hůř prochází zdí.",
|
||
"Výkon nesmí být zbytečně vysoký, jinak buňky slyší i cizí provoz.",
|
||
"Roaming funguje, když se SSID a zabezpečení shodují."),
|
||
],
|
||
[
|
||
Q("Kam má vést hostovské SSID?",
|
||
["Do vlastní VLAN, oddělené od školní sítě",
|
||
"Do stejné sítě jako ředitelna",
|
||
"Přímo do správy routeru",
|
||
"Do sítě bez DHCP i bez izolace"],
|
||
0, "Host nemá vidět školní servery."),
|
||
Q("Čím se liší WPA2-Enterprise od společného hesla?",
|
||
["Každý uživatel se ověřuje zvlášť, často přes RADIUS",
|
||
"Nemá šifrování",
|
||
"Funguje jen na 2,4 GHz",
|
||
"Sdílí jeden klíč napsaný na tabuli"],
|
||
0, "Účet jde odebrat jednomu člověku."),
|
||
Q("Proč schované SSID není ochrana?",
|
||
["Jméno sítě jde při připojení stejně zachytit",
|
||
"Skryté SSID nejde vůbec použít",
|
||
"WPA3 ho zakazuje",
|
||
"Switch ho vyhlásí v STP"],
|
||
0, "Utajené jméno není šifra."),
|
||
Q("Co vadí dvěma sousedním AP na stejném kanále?",
|
||
["Slyší se a kazí si přenos",
|
||
"Smažou si VLAN",
|
||
"Přestanou dělat DHCP",
|
||
"Změní IPv6 na IPv4"],
|
||
0, "Kanály se mají plánovat, ne nechat náhodě."),
|
||
]),
|
||
],
|
||
)
|
||
|
||
NET3 = course(
|
||
"net3",
|
||
"OSPF, směrování mezi VLAN, WAN, VPN, firewall, QoS a dohled.",
|
||
"OSPF, inter-VLAN routing, WAN, VPN, firewalls, QoS and monitoring.",
|
||
[
|
||
L("OSPF", "OSPF",
|
||
"Směrovače si samy řeknou, jaké sítě znají.",
|
||
"Routers tell each other which networks they know.",
|
||
[
|
||
S("1 / 3 • Sousedé", "Stejná oblast",
|
||
"Tip: OSPF soused nevznikne, když se neshoduje oblast nebo hello.",
|
||
"Směrovače v jednom spoji si vymění hello.",
|
||
"Hello interval a dead interval musí sedět.",
|
||
"Oblast 0 je páteř. Ostatní oblasti se k ní připojují.",
|
||
"Pasivní rozhraní hello neposílá, třeba k počítačům."),
|
||
S("2 / 3 • Cena", "Kratší neznamená míň skoků",
|
||
"Tip: OSPF sčítá cenu linek, ne počet routerů jako RIP.",
|
||
"Rychlejší linka má obvykle nižší cenu.",
|
||
"Součet cen rozhodne, kudy paket půjde.",
|
||
"Ruční cena umí odtáhnout provoz ze špatné linky.",
|
||
"Změna topologie se přepočítá bez přepisování statických tras."),
|
||
S("3 / 3 • Tabulka", "Co se z OSPF stane",
|
||
"Tip: v tabulce uvidíte zdroj trasy, ne jen další skok.",
|
||
"Naučená síť se vloží do směrovací tabulky.",
|
||
"Když lepší cesta spadne, použije se náhradní.",
|
||
"Redistribuce natáhne do OSPF i statiku nebo jiný protokol.",
|
||
"Špatná redistribuce umí do sítě pustit cizí trasy."),
|
||
],
|
||
[
|
||
Q("Co musí u OSPF sousedů sedět?",
|
||
["Oblast a časy hello", "Stejná MAC adresa",
|
||
"Stejné SSID", "Stejný počet VLAN na switchi"],
|
||
0, "Nesoulad hello nebo oblasti sousedství nesestaví."),
|
||
Q("Podle čeho OSPF vybírá cestu?",
|
||
["Podle součtu cen linek", "Podle počtu písmen v názvu routeru",
|
||
"Podle VLAN ID", "Podle stáří DNS záznamu"],
|
||
0, "Cena vyjadřuje náklad cesty, často odvozený z rychlosti."),
|
||
Q("K čemu je pasivní rozhraní?",
|
||
["Neposílá hello tam, kde žádný soused být nemá",
|
||
"Vypne směrování celé sítě",
|
||
"Zapne NAT",
|
||
"Skryje SSID"],
|
||
0, "K uživatelům se hello zbytečně neposílá."),
|
||
Q("Co je oblast 0?",
|
||
["Páteř, ke které se ostatní oblasti připojují",
|
||
"VLAN pro hosty",
|
||
"Výchozí heslo WPA",
|
||
"Číslo konzolového portu"],
|
||
0, "Bez páteře se víc oblastí OSPF nespojí správně."),
|
||
]),
|
||
L("Směrování mezi VLAN", "Inter-VLAN routing",
|
||
"Jedna brána pro každou VLAN.",
|
||
"One gateway for each VLAN.",
|
||
[
|
||
S("1 / 3 • Router na tyči", "Jeden spoj, víc VLAN",
|
||
"Tip: trunk k routeru nese značky a každá VLAN má své podrozhraní.",
|
||
"Switch pošle trunk do routeru.",
|
||
"Každá VLAN má vlastní IP bránu.",
|
||
"Stanice má jako bránu adresu své VLAN, ne cizí.",
|
||
"Bez trasy mezi VLAN k sobě sítě nedosáhnou."),
|
||
S("2 / 3 • L3 switch", "Směrování v přepínači",
|
||
"Tip: přepínač třetí vrstvy má pro VLAN rozhraní SVI.",
|
||
"SVI je virtuální rozhraní s adresou brány.",
|
||
"Provoz mezi VLAN nemusí odejít na samostatný router.",
|
||
"ACL na SVI hlídá, která VLAN kam smí.",
|
||
"Zapomenuté SVI znamená, že VLAN nemá bránu."),
|
||
S("3 / 3 • Chyby", "Když to nejde",
|
||
"Tip: nejdřív ověřte, že stanice je ve správné VLAN a má správnou bránu.",
|
||
"Špatná maska na bráně rozhodí celou VLAN.",
|
||
"Trunk, který VLAN nepropouští, bránu odstřihne.",
|
||
"Stanice v access portu špatné VLAN dostane cizí DHCP.",
|
||
"Kontrola: adresa, maska, brána, VLAN, trunk, ACL."),
|
||
],
|
||
[
|
||
Q("Co je brána pro stanici ve VLAN?",
|
||
["Adresa routeru nebo SVI v té samé VLAN",
|
||
"Libovolná veřejná DNS adresa",
|
||
"MAC adresa switche",
|
||
"Číslo VLAN zapsané do masky"],
|
||
0, "Brána musí být dosažitelná na druhé vrstvě, tedy ve stejné VLAN."),
|
||
Q("Co je SVI?",
|
||
["Virtuální rozhraní VLAN na L3 přepínači",
|
||
"Typ optického vlákna",
|
||
"Protokol pošty",
|
||
"Záloha konfigurace"],
|
||
0, "SVI nese IP adresu brány dané VLAN."),
|
||
Q("Jak router na tyči pozná VLAN?",
|
||
["Podle značky 802.1Q na trunku",
|
||
"Podle barvy LED na počítači",
|
||
"Podle jména v DNS",
|
||
"Podle rychlosti ventilátoru"],
|
||
0, "Každé podrozhraní patří jedné značce."),
|
||
Q("Co udělá trunk, který VLAN 20 nepropouští?",
|
||
["Střihne bránu VLAN 20 od zbytku sítě",
|
||
"Smaže OSPF v celé škole",
|
||
"Přepne Wi-Fi na WEP",
|
||
"Zdvojí adresy DHCP"],
|
||
0, "Povolené VLAN na trunku jsou součást návrhu."),
|
||
]),
|
||
L("WAN", "WAN",
|
||
"Spoj mezi pobočkami a k poskytovateli.",
|
||
"A link between sites and towards the provider.",
|
||
[
|
||
S("1 / 3 • Okraj", "Kde končí vaše síť",
|
||
"Tip: za routerem k poskytovateli už neřídíte fyzickou cestu.",
|
||
"WAN spojuje vzdálené sítě přes síť, kterou nevlastníte.",
|
||
"Poskytovatel vám dá adresu, bránu a často i VLAN.",
|
||
"Výchozí trasa obvykle míří právě sem.",
|
||
"Výpadek poslední míle odřízne pobočku, i když jádro žije."),
|
||
S("2 / 3 • Technologie", "Čím se to vozí",
|
||
"Tip: dnešní WAN často vypadá jako ethernet, i když pod ním je jiná síť.",
|
||
"Starší spoje používaly pronajaté linky a PPP.",
|
||
"MPLS u poskytovatele spojí pobočky jako jednu službu.",
|
||
"Metro Ethernet přivede do budovy běžný ethernetový port.",
|
||
"Rychlost, odezva a ztráty jsou parametry, které se sledují."),
|
||
S("3 / 3 • Návrh", "Co domluvit",
|
||
"Tip: záložní spoj má smysl jen s cestou, která se na něj umí přepnout.",
|
||
"Jedna přípojka je jednoduchá a křehká.",
|
||
"Druhý poskytovatel sníží riziko, když nejde stejnou trasou.",
|
||
"Adresy od poskytovatele musí sedět s vaším NAT a firewallem.",
|
||
"Na okraji filtrujte, co do školy z internetu lézt nemá."),
|
||
],
|
||
[
|
||
Q("Co je WAN z pohledu školy?",
|
||
["Spoj mimo budovu, často přes poskytovatele",
|
||
"Kabel mezi dvěma porty jednoho switche",
|
||
"VLAN pro tiskárny",
|
||
"Diskové pole"],
|
||
0, "WAN překračuje místní síť."),
|
||
Q("Kam obvykle míří výchozí trasa?",
|
||
["K poskytovateli", "Na tiskárnu",
|
||
"Do STP rootu", "Na adresu 127.0.0.1"],
|
||
0, "Co směrovač nezná, pošle ven."),
|
||
Q("Proč dva spoje stejnou ulicí nemusí být záloha?",
|
||
["Jedna porucha překope oba naráz",
|
||
"OSPF dva spoje zakazuje",
|
||
"IPv4 umí jen jednu bránu na světě",
|
||
"Ethernet nesmí mít zálohu"],
|
||
0, "Fyzicky oddělená trasa je součást redundance."),
|
||
Q("Co je metro Ethernet?",
|
||
["WAN služba, která u vás končí ethernetovým portem",
|
||
"Wi-Fi ve vlaku",
|
||
"Protokol místo DNS",
|
||
"Typ procesoru"],
|
||
0, "Pod portem může být síť poskytovatele, vy vidíte ethernet."),
|
||
]),
|
||
L("VPN", "VPN",
|
||
"Šifrovaný tunel přes síť, které nevěříte.",
|
||
"An encrypted tunnel across a network you do not trust.",
|
||
[
|
||
S("1 / 3 • Tunel", "Cizí síť jako kabel",
|
||
"Tip: VPN neschová provoz před sítí, ve které tunel končí.",
|
||
"Mezi dvěma body se postaví šifrovaný tunel.",
|
||
"Uvnitř mohou téct soukromé adresy.",
|
||
"Venku je vidět jen obal mezi konci tunelu.",
|
||
"Bez shodných klíčů nebo certifikátů tunel nevstane."),
|
||
S("2 / 3 • Dva tvary", "Pobočka a člověk",
|
||
"Tip: site-to-site spojuje sítě, remote access jednoho uživatele.",
|
||
"Site-to-site propojí dvě pobočky trvale.",
|
||
"Remote access pustí notebook do školní sítě.",
|
||
"Uživatel se ověřuje účtem, ne jen společným heslem na zdi.",
|
||
"Split tunnel posílá tunelem jen školní sítě, zbytek jde přímo."),
|
||
S("3 / 3 • Chyby", "Když tunel stojí a data ne",
|
||
"Tip: tunel může svítit zeleně a přesto chybí trasa dovnitř.",
|
||
"Musí sedět návrh šifry na obou koncích.",
|
||
"Firewall po cestě musí pustit port VPN.",
|
||
"Uvnitř musí existovat trasa do cílových sítí.",
|
||
"Příliš široký tunel stáhne na školu i provoz, který tam být neměl."),
|
||
],
|
||
[
|
||
Q("Co VPN před cizí sítí skrývá?",
|
||
["Obsah a vnitřní adresy, venku je vidět obal tunelu",
|
||
"I to, že nějaký provoz existuje",
|
||
"MAC adresu switche ve třídě",
|
||
"Úplně všechno včetně konců tunelu"],
|
||
0, "Koncové adresy tunelu vidět jsou, náklad ne."),
|
||
Q("Čím se liší site-to-site od remote access?",
|
||
["První spojuje sítě, druhá připojuje uživatele",
|
||
"První je Wi-Fi, druhá je VLAN",
|
||
"Obě jen mění DNS",
|
||
"Remote access nejde šifrovat"],
|
||
0, "Notebook není druhá pobočka, i když tunel vypadá podobně."),
|
||
Q("Proč tunel svítí, ale server nehraje?",
|
||
["Chybí trasa nebo firewall uvnitř",
|
||
"IPv4 zakazuje VPN",
|
||
"STP tunely maže",
|
||
"DNS přejmenuje šifru"],
|
||
0, "Šifra a dosažitelnost jsou dvě vrstvy."),
|
||
Q("Co je split tunnel?",
|
||
["Tunelem jde jen provoz do vnitřních sítí",
|
||
"Každý paket se rozpůlí",
|
||
"VPN bez šifry",
|
||
"Dva SSID na jednom kanále"],
|
||
0, "Internet z notebooku pak nemusí téct přes školu."),
|
||
]),
|
||
L("Firewall a zóny", "Firewalls and zones",
|
||
"Kdo s kým smí mluvit, ne jen jestli kabel svítí.",
|
||
"Who may talk to whom, not only whether the cable is lit.",
|
||
[
|
||
S("1 / 3 • Zóny", "Důvěra není stejná",
|
||
"Tip: LAN, WAN a DMZ nemají stejná pravidla.",
|
||
"Rozhraní se sdruží do zón podle důvěry.",
|
||
"Z důvěryhodnější zóny ven se často povoluje snáz.",
|
||
"Z internetu dovnitř se povoluje jen to, co je schválené.",
|
||
"Pravidlo se píše od zóny ke zóně, ne jen na jednu adresu."),
|
||
S("2 / 3 • Stav", "Pamatuje si spojení",
|
||
"Tip: stavový firewall pustí odpověď, aniž byste psali pravidlo nazpátek.",
|
||
"Nové spojení se kontroluje proti politice.",
|
||
"Odpověď patřící ke spojení se pustí.",
|
||
"Bezestavový filtr zkoumá každý paket zvlášť.",
|
||
"Ukončené spojení se z tabulky smaže."),
|
||
S("3 / 3 • DMZ", "Server, který má být vidět",
|
||
"Tip: web v DMZ nemá mít cestu ke všem diskům ve škole.",
|
||
"Veřejná služba sedí v oddělené zóně.",
|
||
"Z internetu se otevře jen její port.",
|
||
"Z DMZ do LAN se pustí jen to, co služba opravdu potřebuje.",
|
||
"Kompromitovaný web pak neotevře celou školu."),
|
||
],
|
||
[
|
||
Q("Proč se zóny liší?",
|
||
["Mají jinou důvěru a tedy jiná pravidla",
|
||
"Každá zóna musí mít vlastní DNS jméno switche",
|
||
"Zóny nahrazují IP adresy",
|
||
"Bez zón nejde STP"],
|
||
0, "Internet a učebna nejsou stejně důvěryhodné."),
|
||
Q("Co umí stavový firewall?",
|
||
["Pustí odpověď k už otevřenému spojení",
|
||
"Smaže VLAN",
|
||
"Přidělí MAC adresu",
|
||
"Nahradí směrovací protokol"],
|
||
0, "Pamatuje si, kdo spojení začal."),
|
||
Q("Kam patří veřejný web, který nemá vidět celou LAN?",
|
||
["Do DMZ", "Do stejné sítě jako účtárna",
|
||
"Na access port ředitele", "Do nativní VLAN trunku bez pravidel"],
|
||
0, "DMZ omezí, kam se útočník dostane dál."),
|
||
Q("Co samotná zóna ještě není?",
|
||
["Náhrada za konkrétní pravidla služeb",
|
||
"Způsob, jak sdružit rozhraní",
|
||
"Hranice důvěry",
|
||
"Místo, kam se píše politika"],
|
||
0, "Zóna bez pravidel nic nechrání."),
|
||
]),
|
||
L("QoS", "QoS",
|
||
"Když je linka plná, někdo musí dostat přednost.",
|
||
"When the link is full, someone has to go first.",
|
||
[
|
||
S("1 / 3 • Fronty", "Ne všechno snese čekání",
|
||
"Tip: QoS nevytvoří rychlost, jen rozhodne, kdo počká.",
|
||
"Hlas a videohovor kazí zpoždění a kolísání.",
|
||
"Záloha disku snese čekání líp než telefonát.",
|
||
"Fronta na úzké lince řadí pakety.",
|
||
"Bez označení provozu switch neví, co je hlas."),
|
||
S("2 / 3 • Značky", "Kdo si řekne o přednost",
|
||
"Tip: značce z koncového portu nevěřte, uživatel si ji může nastavit sám.",
|
||
"IP hlavička umí nést DSCP.",
|
||
"Ethernet umí prioritu na VLAN značce.",
|
||
"Na vstupu se značka přepíše podle politiky.",
|
||
"Hlasová VLAN se často značí automaticky."),
|
||
S("3 / 3 • Praxe", "Kde to má smysl",
|
||
"Tip: na prázdné gigabitové lince QoS nic viditelného neudělá.",
|
||
"Úzké hrdlo bývá WAN, ne páteřní switch.",
|
||
"Rezervace pro hlas nesmí sežrat celou linku.",
|
||
"Testujte hovor ve chvíli, kdy běží velká kopie.",
|
||
"Špatná politika umí zpomalit i správu sítě."),
|
||
],
|
||
[
|
||
Q("Co QoS neumí?",
|
||
["Vyrobit větší rychlost linky",
|
||
"Dát přednost hlasu před zálohou",
|
||
"Omezit kolísání hovoru",
|
||
"Označit provoz"],
|
||
0, "Dělí existující kapacitu, nepřidá ji."),
|
||
Q("Proč se značka z počítače přepisuje?",
|
||
["Uživatel by si jinak dal nejvyšší prioritu",
|
||
"DSCP nejde číst",
|
||
"IPv4 značky zakazuje",
|
||
"STP značky maže"],
|
||
0, "Důvěryhodná značka vznikne na vstupu podle pravidel."),
|
||
Q("Kde QoS obvykle pomůže nejdřív?",
|
||
["Na pomalé WAN lince", "Na prázdném 10Gb portu mezi switchi",
|
||
"Uvnitř jednoho počítače na smyčce", "Na vypnutém Wi-Fi"],
|
||
0, "Přednost se projeví, až když se linka plní."),
|
||
Q("Který provoz čekání snese hůř?",
|
||
["Telefonní hovor", "Noční kopie disku",
|
||
"Stahování aktualizace", "Archiv pošty"],
|
||
0, "Hlas potřebuje malé a stálé zpoždění."),
|
||
]),
|
||
L("Dohled sítě", "Watching the network",
|
||
"SNMP, syslog a co z grafu opravdu plyne.",
|
||
"SNMP, syslog, and what a graph really tells you.",
|
||
[
|
||
S("1 / 3 • SNMP", "Čísla z zařízení",
|
||
"Tip: SNMPv2c posílá jméno komunity skoro jako heslo v čistém textu.",
|
||
"Dohled se ptá na vytížení, chyby a stav portů.",
|
||
"Komunita není ozdoba, je to přístup.",
|
||
"SNMPv3 umí uživatele a šifrování.",
|
||
"Zařízení má poslouchat SNMP jen ze sítě dohledu."),
|
||
S("2 / 3 • Syslog", "Věty o tom, co se stalo",
|
||
"Tip: log na zařízení se při restartu může ztratit. Posílejte ho pryč.",
|
||
"Syslog odnáší hlášky na server.",
|
||
"Úrovně od ladění po nouzi se nemají všechny sypat do jedné hromady.",
|
||
"Čas na zařízeních musí sedět, jinak nejde srovnat události.",
|
||
"NTP je proto součást dohledu, ne jen hodiny na zdi."),
|
||
S("3 / 3 • Čtení", "Graf není diagnóza",
|
||
"Tip: špička jednou za den může být záloha, ne útok.",
|
||
"Chyby na portu často znamenají kabel nebo duplex.",
|
||
"Vytrvalé vytížení WAN řekne, jestli je čas na silnější spoj.",
|
||
"Výpadek, který nikdo nevidí, se bude opakovat.",
|
||
"Upozornění má chodit člověku, který může reagovat."),
|
||
],
|
||
[
|
||
Q("Proč SNMPv2c nestačí na nezabezpečené síti?",
|
||
["Jméno komunity jde odposlechnout",
|
||
"Neumí číst vytížení",
|
||
"Funguje jen na IPv6",
|
||
"Maže syslog"],
|
||
0, "Komunita cestuje bez pořádné ochrany. Lepší je SNMPv3."),
|
||
Q("Proč posílat syslog pryč ze zařízení?",
|
||
["Lokální log se při restartu může ztratit",
|
||
"Syslog nahrazuje heslo",
|
||
"Switch jinak vypne porty",
|
||
"DNS bez logu nefunguje"],
|
||
0, "Po restartu už příčinu pádu na zařízení nemusíte najít."),
|
||
Q("K čemu je při dohledu NTP?",
|
||
["Aby časy událostí šly srovnat",
|
||
"Aby přidělil VLAN",
|
||
"Aby šifroval Wi-Fi",
|
||
"Aby nahradil SNMP"],
|
||
0, "Bez společného času nejde říct, co bylo dřív."),
|
||
Q("Co často znamenají rostoucí chyby na portu?",
|
||
["Špatný kabel nebo duplex",
|
||
"Že je VLAN správně",
|
||
"Že OSPF konverguje",
|
||
"Že DNS TTL vypršelo"],
|
||
0, "Fyzická vrstva se v počítadlech chyb projeví dřív než v teorii."),
|
||
]),
|
||
L("Záloha konfigurace", "Configuration backups",
|
||
"Co uložit, než se přepínač vymění.",
|
||
"What to save before a switch is replaced.",
|
||
[
|
||
S("1 / 3 • Běžící a uložená", "Restart není uložení",
|
||
"Tip: změna v běžící konfiguraci po restartu zmizí, dokud ji neuložíte.",
|
||
"Běžící konfigurace je to, co zařízení právě dělá.",
|
||
"Startovní se načte po zapnutí.",
|
||
"Uložení zkopíruje běžící do startovní.",
|
||
"Bez uložení druhý den síť vypadá jako včera."),
|
||
S("2 / 3 • Kopie ven", "Nejen na zařízení",
|
||
"Tip: záloha na tom samém přepínači shoří spolu s ním.",
|
||
"Konfigurace patří na server mimo to zařízení.",
|
||
"Ukládejte i verzi, ať víte, co se změnilo.",
|
||
"Hesla v exportu mohou být čitelná. Soubor chraňte.",
|
||
"Automatická záloha po změně porazí dobrý úmysl."),
|
||
S("3 / 3 • Popis", "Aby to přečetl i kolega",
|
||
"Tip: port bez popisu je za půl roku hádanka.",
|
||
"Popis portu říká, co je na druhém konci.",
|
||
"Schéma VLAN a adres má sedět s konfigurací.",
|
||
"Změna bez poznámky se špatně vrací.",
|
||
"Nový switch postavíte z zálohy jen tehdy, když záloha existuje."),
|
||
],
|
||
[
|
||
Q("Co se stane se změnou, kterou neuložíte?",
|
||
["Po restartu zmizí", "Zapíše se do VLAN navždy",
|
||
"Přepíše firmware", "Pošle se sama do DNS"],
|
||
0, "Běžící konfigurace není totéž co startovní."),
|
||
Q("Proč záloha jen na tom samém switchi nestačí?",
|
||
["S poškozeným switchem zmizí i ona",
|
||
"Switch zálohy šifruje tak, že je nečitelné i pro vás",
|
||
"STP zálohy maže",
|
||
"IPv6 zálohy zakazuje"],
|
||
0, "Kopie musí žít jinde."),
|
||
Q("Co má být u portu napsané?",
|
||
["Co je na druhém konci", "Heslo administrátora",
|
||
"Celá směrovací tabulka", "Soukromý klíč VPN"],
|
||
0, "Popis portu šetří hodiny při poruše."),
|
||
Q("Proč chránit soubor se zálohou?",
|
||
["Může obsahovat čitelná hesla",
|
||
"Soubor sám otevírá porty",
|
||
"DNS ho publikuje",
|
||
"Je větší než disk"],
|
||
0, "Export není vždy v zašifrované podobě."),
|
||
]),
|
||
],
|
||
)
|
||
|
||
NET4 = course(
|
||
"net4",
|
||
"Návrh adres, redundance, 802.1X, hledání chyb, cloud a maturita.",
|
||
"Address plans, redundancy, 802.1X, troubleshooting, cloud and the exam.",
|
||
[
|
||
L("Adresní plán", "An address plan",
|
||
"Sítě se navrhují dřív, než se zapojí první kabel.",
|
||
"Networks are designed before the first cable is patched.",
|
||
[
|
||
S("1 / 3 • Rozsahy", "Každá VLAN má svůj prefix",
|
||
"Tip: nenechávejte v každé síti jen čtyři volné adresy.",
|
||
"Nejdřív spočítejte stanice, tiskárny, AP a rezervu.",
|
||
"Brána, síťová a broadcast adresa se do stanic nepočítají.",
|
||
"Sousední VLAN nemají mít překryv.",
|
||
"Dokument říká, která čísla jsou volná."),
|
||
S("2 / 3 • Členění", "Škola není jedna velká síť",
|
||
"Tip: /16 na celou budovu se snadno spravuje a špatně izoluje.",
|
||
"Učebny, správa, servery, hosté a telefony patří odděleně.",
|
||
"Stejný řád čísel ve všech budovách se líp pamatuje.",
|
||
"Souhrn tras na páteři zmenší tabulku.",
|
||
"Výjimka pro jednu tiskárnu se má zapsat, ne jen zapamatovat."),
|
||
S("3 / 3 • Změna", "Plán, který jde rozšířit",
|
||
"Tip: když přidáte budovu, neměli byste přečíslovat celou školu.",
|
||
"Nechte v páteřním rozsahu díry pro další sítě.",
|
||
"Přechod na nový prefix znamená DHCP, DNS, brány i firewall.",
|
||
"IPv6 prefix se plánuje stejně vědomě, ne jako dodatek.",
|
||
"Tabulka adres je součást maturity i běžného provozu."),
|
||
],
|
||
[
|
||
Q("Co se v síti /24 nedá přiřadit stanici?",
|
||
["Adresa sítě a broadcast", "První použitelná adresa",
|
||
"Adresa brány, pokud ji stanice nemá mít",
|
||
"Adresa s lichým posledním oktetem"],
|
||
0, "Krajní adresy mají zvláštní význam. Brána se stanicím také nedává dvakrát."),
|
||
Q("Proč nerozdat celé škole jednu velkou síť?",
|
||
["Špatně se izoluje porucha i provoz",
|
||
"IPv4 to zakazuje",
|
||
"Switch umí jen 8 adres",
|
||
"DNS pak nejde spustit"],
|
||
0, "Menší sítě se líp hlídají a míň se ruší broadcastem."),
|
||
Q("K čemu je souhrn tras?",
|
||
["Jedna trasa pokryje víc menších sítí",
|
||
"Smaže VLAN",
|
||
"Nahradí NAT",
|
||
"Zapne WPA3"],
|
||
0, "Páteř nemusí znát každou učebnu zvlášť."),
|
||
Q("Co patří do adresního plánu?",
|
||
["Prefix, VLAN, brána a k čemu síť je",
|
||
"Jen heslo Wi-Fi",
|
||
"Typ procesoru serveru",
|
||
"Seznam učitelů"],
|
||
0, "Bez účelu sítě je tabulka jen sloupec čísel."),
|
||
]),
|
||
L("Redundance", "Redundancy",
|
||
"Druhá cesta, která se opravdu použije.",
|
||
"A second path that is actually used.",
|
||
[
|
||
S("1 / 3 • Dvojice", "Dva boxy nestačí",
|
||
"Tip: dva switche se stejnou konfigurací nejsou záloha, dokud provoz neumí přejít.",
|
||
"Redundance chce druhou cestu i protokol, který ji hlídá.",
|
||
"STP řeší smyčku na druhé vrstvě.",
|
||
"Na třetí vrstvě zálohu hlídá směrování nebo HSRP a příbuzné protokoly.",
|
||
"Jedna brána v DHCP znamená, že pád routeru odstřihne všechny."),
|
||
S("2 / 3 • Brána", "Virtuální adresa",
|
||
"Tip: stanice mají jako bránu virtuální adresu, ne jednu fyzickou krabici.",
|
||
"Dva směrovače sdílejí jednu adresu brány.",
|
||
"Aktivní drží provoz, druhý čeká.",
|
||
"Když aktivní ztichne, druhý adresu převezme.",
|
||
"Stanice nemusí dostat nové DHCP."),
|
||
S("3 / 3 • Zkouška", "Nevyzkoušená záloha je teorie",
|
||
"Tip: vytáhněte kabel v okně, kdy smíte, ne až při maturitní písemce.",
|
||
"Ověřte, že záložní cesta opravdu přenáší data.",
|
||
"Sledujte, za jak dlouho se provoz vrátí.",
|
||
"Záložní zdroj má jinou pojistku a jinou fázi, když to jde.",
|
||
"Zápis z zkoušky říká, co se má stát příště."),
|
||
],
|
||
[
|
||
Q("Proč dva stejné routery samy o sobě nestačí?",
|
||
["Stanice musí mít kam přejít, když jeden ztichne",
|
||
"IPv4 povoluje jen jeden router v budově",
|
||
"Druhý router maže VLAN",
|
||
"STP dva routery zakazuje"],
|
||
0, "Bez společné nebo přepínané brány počítače zůstanou na mrtvé adrese."),
|
||
Q("Co stanice používá při protokolu virtuální brány?",
|
||
["Virtuální adresu, ne konkrétní krabici",
|
||
"Svou vlastní MAC jako bránu",
|
||
"Adresu DNS",
|
||
"Broadcast 255.255.255.255 jako další skok"],
|
||
0, "Převzetí adresy stanice nepozná jako výměnu DHCP."),
|
||
Q("Kdy se záloha ověřuje?",
|
||
["Nanečisto, dřív než o ni opřete provoz",
|
||
"Až když síť leží",
|
||
"Jen na papíře",
|
||
"Záloha se ověřovat nemá, ať se nepokazí"],
|
||
0, "Nevyzkoušený přepínač překvapí v nejhorší chvíli."),
|
||
Q("Co na druhé vrstvě řeší náhradní kabel?",
|
||
["STP, jinak vznikne smyčka",
|
||
"Jen NAT",
|
||
"Jen WPA3",
|
||
"Nic, ethernet smyčky umí sám"],
|
||
0, "Druhý kabel bez STP je recept na bouři."),
|
||
]),
|
||
L("802.1X", "802.1X",
|
||
"Port pustí data, až když se zařízení představí.",
|
||
"A port forwards data only after the device identifies itself.",
|
||
[
|
||
S("1 / 3 • Port", "Nejdřív průkaz",
|
||
"Tip: dokud ověření neskončí, na portu nemá téct běžný provoz.",
|
||
"Počítač se prokáže certifikátem nebo jménem a heslem.",
|
||
"Switch se ptá serveru RADIUS.",
|
||
"Až pak pustí port do dané VLAN.",
|
||
"Neznámé zařízení zůstane venku nebo v omezené síti."),
|
||
S("2 / 3 • Lidé a věci", "Ne všechno umí 802.1X",
|
||
"Tip: tiskárna bez klienta potřebuje výjimku, ne vypnutí celé ochrany.",
|
||
"Počítač v doméně zvládne ověření sám.",
|
||
"Tiskárna, kamera a telefon často ne.",
|
||
"MAB pustí zařízení podle MAC adresy. Tu jde zfalšovat.",
|
||
"Výjimka má být na konkrétní port, ne na celý switch."),
|
||
S("3 / 3 • VLAN", "Kam koho pustit",
|
||
"Tip: učitel a host nemají po ověření skončit ve stejné VLAN.",
|
||
"Úspěch může přiřadit VLAN podle skupiny.",
|
||
"Neúspěch skončí v síti bez přístupu k serverům.",
|
||
"Účet jde odebrat, aniž by se měnilo heslo Wi-Fi.",
|
||
"Stejný princip sedí na kabel i na podnikovou Wi-Fi."),
|
||
],
|
||
[
|
||
Q("Kdo rozhodne, že zařízení smí do sítě?",
|
||
["RADIUS na základě údajů od switche",
|
||
"Sám kabel podle barvy",
|
||
"DNS záznam A",
|
||
"STP root"],
|
||
0, "Switch se ptá, server odpovídá."),
|
||
Q("Proč MAB není silné ověření?",
|
||
["MAC adresu lze zfalšovat",
|
||
"MAC adresa je jednorázové heslo",
|
||
"MAB šifruje silněji než certifikát",
|
||
"Funguje jen na IPv6"],
|
||
0, "Adresa na štítku není průkaz."),
|
||
Q("Kam patří zařízení, které ověřením neprojde?",
|
||
["Do omezené sítě nebo nikam",
|
||
"Do VLAN serverů",
|
||
"Na trunk všech VLAN",
|
||
"Do správy routeru"],
|
||
0, "Neúspěch nemá otevírat vnitřní síť."),
|
||
Q("Jaká je výhoda účtů proti jednomu heslu Wi-Fi?",
|
||
["Jednomu člověku jde přístup odebrat",
|
||
"Heslo se nemusí nikdy měnit, protože účty ho ruší",
|
||
"Netřeba RADIUS ani switch",
|
||
"WEP pak stačí"],
|
||
0, "Sdílené heslo po odchodu člověka zná pořád."),
|
||
]),
|
||
L("Hledání chyby", "Troubleshooting",
|
||
"Postup zdola nahoru, ne náhodné restarty.",
|
||
"Bottom-up steps, not random reboots.",
|
||
[
|
||
S("1 / 3 • Vrstvy", "Nejdřív světlo na portu",
|
||
"Tip: nehledejte chybu v DNS, když port nesvítí.",
|
||
"Fyzická vrstva: kabel, port, napájení, duplex, chyby.",
|
||
"Druhá vrstva: VLAN, MAC tabulka, trunk, STP.",
|
||
"Třetí vrstva: adresa, maska, brána, trasa, ACL.",
|
||
"Výš: DNS, port služby, firewall na konci."),
|
||
S("2 / 3 • Jedna změna", "Ať víte, co pomohlo",
|
||
"Tip: pět změn naráz nic nenaučí.",
|
||
"Zapište, co vidíte, než něco přepnete.",
|
||
"Ověřte jednu hypotézu.",
|
||
"Ping na bránu, pak za ni, pak jméno.",
|
||
"Když oprava sedí, uložte konfiguraci a dopište důvod."),
|
||
S("3 / 3 • Rozsah", "Koho to postihlo",
|
||
"Tip: jeden počítač je jiná chyba než celá učebna.",
|
||
"Jeden stroj: jeho kabel, port, adresa, účet.",
|
||
"Celá VLAN: brána, DHCP, trunk, SVI.",
|
||
"Celá škola: jádro, firewall, poskytovatel.",
|
||
"Čas začátku často sedí se změnou, kterou někdo neoznámil."),
|
||
],
|
||
[
|
||
Q("Co ověříte jako první, když port nesvítí?",
|
||
["Kabel, port a napájení", "Záznam AAAA",
|
||
"Cenu OSPF", "Pravidlo QoS pro hlas"],
|
||
0, "Vyšší vrstvy nemají na čem jet."),
|
||
Q("Proč měnit jen jednu věc?",
|
||
["Ať je vidět, která změna pomohla",
|
||
"Switch víc změn zakazuje",
|
||
"IPv4 umí jen jednu opravu denně",
|
||
"DNS jinak smaže zónu"],
|
||
0, "Více zásahů naráz zamaskuje příčinu."),
|
||
Q("Celá učebna nedostane adresu. Kde začnete?",
|
||
["DHCP, VLAN a brána té sítě",
|
||
"Heslem jednoho studenta k webu",
|
||
"Jasem monitoru",
|
||
"Verzí prohlížeče"],
|
||
0, "Společný příznak ukazuje na společnou službu."),
|
||
Q("Co uděláte, když oprava sedí?",
|
||
["Uložíte konfiguraci a zapíšete důvod",
|
||
"Restartujete všechno ještě jednou",
|
||
"Smažete popis portů",
|
||
"Vypnete dohled, ať neruší"],
|
||
0, "Neuložená oprava do rána zmizí."),
|
||
]),
|
||
L("Cloud a hybrid", "Cloud and hybrid networks",
|
||
"Část služeb není ve skříni na chodbě.",
|
||
"Some services are no longer in the cupboard in the corridor.",
|
||
[
|
||
S("1 / 3 • Kam s tím", "Vlastní sál, nebo cizí",
|
||
"Tip: cloud neruší síť ve škole, mění jen to, kam vede spoj.",
|
||
"Veřejný cloud provozuje poskytovatel a vy si berete službu.",
|
||
"Soukromý cloud je pořád vaše zařízení, jen obalené portálem.",
|
||
"Hybrid nechá část dat ve škole a část venku.",
|
||
"Účet a síťová cesta jsou pořád vaše odpovědnost."),
|
||
S("2 / 3 • Cesta", "Jak se tam školní síť dostane",
|
||
"Tip: služba v cloudu bez cesty a bez jmen je jen faktura.",
|
||
"VPN do cloudu vypadá jako další pobočka.",
|
||
"Veřejná služba jede přes internet a firewall.",
|
||
"DNS musí ukazovat na nové adresy.",
|
||
"Výpadek WAN teď shodí i to, co dřív jelo z místního serveru."),
|
||
S("3 / 3 • Hranice", "Kdo zálohuje a kdo pustí dovnitř",
|
||
"Tip: poskytovatel nezálohuje vaše data, dokud to není ve smlouvě.",
|
||
"Pravidla firewallu se stěhují s službou.",
|
||
"Účty v cloudu mají mít stejný řád jako účty ve škole.",
|
||
"Test obnovy platí i pro data, která nejsou ve vašem racku.",
|
||
"Škola pořád řeší osobní údaje, i když disk je jinde."),
|
||
],
|
||
[
|
||
Q("Co hybridní síť znamená?",
|
||
["Část služeb je ve škole a část u poskytovatele",
|
||
"Dva switche v jedné VLAN",
|
||
"IPv4 i papírový sešit",
|
||
"Wi-Fi bez hesla"],
|
||
0, "Hranice školy už není hranicí všech služeb."),
|
||
Q("Co se pokazí, když WAN spadne a pošta je jen v cloudu?",
|
||
["Škola se k poště nedostane",
|
||
"Místní switch přestane dělat VLAN",
|
||
"STP zvolí cloud jako root",
|
||
"Nic, cloud WAN nepotřebuje"],
|
||
0, "Cesta ven je součást dostupnosti služby."),
|
||
Q("Kdo zálohuje data v cloudu?",
|
||
["Ten, koho to smlouva a nastavení opravdu určují",
|
||
"Vždy automaticky stát",
|
||
"STP",
|
||
"Nikdo, cloud zálohy zakazuje"],
|
||
0, "Předpoklad, že poskytovatel zálohuje vše, často neplatí."),
|
||
Q("Co škola řeší i u cizího disku?",
|
||
["Kdo má přístup a jak se chrání osobní údaje",
|
||
"Jen barvu loga",
|
||
"Jen typ ventilátoru v sále poskytovatele",
|
||
"Nic, odpovědnost přechází celá"],
|
||
0, "Umístění dat nemaže pravidla přístupu."),
|
||
]),
|
||
L("Automatizace", "Automation",
|
||
"Opakovanou práci ať dělá skript, ne deset kliknutí.",
|
||
"Let a script do the repeated work, not ten clicks.",
|
||
[
|
||
S("1 / 3 • SSH", "Správa bez společného hesla na lístečku",
|
||
"Tip: Telnet posílá heslo čitelně. Na správu patří SSH.",
|
||
"Klíč jde odebrat konkrétnímu člověku.",
|
||
"Heslo v příkazu historie nemá ležet.",
|
||
"Přístup omezte na správní síť.",
|
||
"Záznam, kdo se přihlásil, patří do logu."),
|
||
S("2 / 3 • Opakování", "Stejná VLAN ve dvaceti switchích",
|
||
"Tip: ruční opis se v desátém switchi liší v jednom čísle.",
|
||
"Šablona drží názvy VLAN a popis portů.",
|
||
"Skript změnu pošle na seznam zařízení.",
|
||
"Nejdřív ho pusťte na jednom switchi.",
|
||
"Záloha před hromadnou změnou je povinnost, ne ozdoba."),
|
||
S("3 / 3 • Mez", "Skript není výmluva",
|
||
"Tip: automat neopraví špatný záměr, jen ho provede rychleji.",
|
||
"Kontrola po běhu srovná, co opravdu sedí.",
|
||
"Tajné heslo nepatří do veřejného souboru.",
|
||
"Člověk pořád schvaluje změnu, která shodí výuku.",
|
||
"Verzovaný soubor konfigurace ukáže, kdo řádek změnil."),
|
||
],
|
||
[
|
||
Q("Proč na správu nepoužívat Telnet?",
|
||
["Heslo jde po síti čitelně",
|
||
"Telnet neumí IPv4",
|
||
"Switch Telnet zakazuje standardem STP",
|
||
"Telnet maže VLAN"],
|
||
0, "SSH spojení chrání."),
|
||
Q("Jak pustíte stejnou změnu do dvaceti switchů?",
|
||
["Šablonou a skriptem, neopisovat ji dvacetkrát",
|
||
"Jen restartem všech naráz",
|
||
"Přes DHCP",
|
||
"Jedním broadcastem bez kontroly"],
|
||
0, "Nejdřív jeden switch, pak ostatní."),
|
||
Q("Co před hromadnou změnou uděláte?",
|
||
["Zálohu konfigurací",
|
||
"Vypnete dohled",
|
||
"Smažete popisy portů",
|
||
"Zakážete SSH"],
|
||
0, "Ať se máte kam vrátit."),
|
||
Q("Co skript neumí?",
|
||
["Poznat, že záměr byl špatně",
|
||
"Poslat stejný příkaz víckrát",
|
||
"Uložit konfiguraci",
|
||
"Připojit se přes SSH"],
|
||
0, "Rychlost neopraví chybný příkaz."),
|
||
]),
|
||
L("Provoz a maturita", "Operations and the exam",
|
||
"Síť ve škole má pravidla, ne jen blikající porty.",
|
||
"A school network has rules, not only blinking ports.",
|
||
[
|
||
S("1 / 3 • Řád", "Kdo smí co změnit",
|
||
"Tip: heslo admin na lístečku u switche není provozní řád.",
|
||
"Účty jsou jmenné, ne jedno společné admin.",
|
||
"Změna ve výuce se hlásí dopředu.",
|
||
"Hostovská síť je oddělená a časově omezená.",
|
||
"Osobní údaje v logu se nenechávají ležet bez důvodu."),
|
||
S("2 / 3 • Výpadek", "Co říct a co udělat",
|
||
"Tip: nejdřív rozsah a dopad, pak ladění detailu.",
|
||
"Řekněte, co nejede a koho se to týká.",
|
||
"Oddělte výpadek poskytovatele od chyby ve škole.",
|
||
"Po obnově ověřte poštu, přihlášení i tisk, ne jen ping.",
|
||
"Krátký zápis příště zkrátí stejnou poruchu."),
|
||
S("3 / 3 • U zkoušky", "Co umět ukázat",
|
||
"Tip: maturita chce důvod, ne jen zkratku.",
|
||
"Umíte přečíst adresu, masku, bránu a VLAN.",
|
||
"Umíte říct, k čemu je trunk, NAT, firewall a záloha.",
|
||
"Schéma malé sítě nakreslíte i bez nápovědy.",
|
||
"Postup hledání chyby od kabelu po službu odvykládáte po vrstvách."),
|
||
],
|
||
[
|
||
Q("Jak nemají vypadat účty ke switchi?",
|
||
["Jedno heslo admin pro celou sborovnu",
|
||
"Jmenný účet s možností odebrání",
|
||
"Přístup jen ze správní sítě",
|
||
"Záznam přihlášení"],
|
||
0, "Společné heslo nejde vzít jednomu člověku."),
|
||
Q("Co řeknete jako první při výpadku?",
|
||
["Co nejede a koho se to týká",
|
||
"Celou směrovací tabulku zpaměti",
|
||
"Typ ventilátoru v racku",
|
||
"Že se to vyřeší samo"],
|
||
0, "Rozsah je důležitější než první domněnka."),
|
||
Q("Co po obnově nestačí?",
|
||
["Jen ping na bránu",
|
||
"Ověřit poštu a přihlášení",
|
||
"Podívat se na tisk",
|
||
"Zkontrolovat, že VLAN sedí"],
|
||
0, "Brána může žít a služba pořád ne."),
|
||
Q("Co u maturity k VLAN umíte říct?",
|
||
["Odděluje provoz a mezi VLAN se směruje",
|
||
"Je to typ pevného disku",
|
||
"Nahrazuje zálohu konfigurace",
|
||
"Je totéž co WPA3"],
|
||
0, "Definice a důvod, ne jen zkratka."),
|
||
]),
|
||
L("Dokumentace sítě", "Network documentation",
|
||
"Schéma, které sedí s tím, co je ve zdi.",
|
||
"A diagram that matches what is actually in the wall.",
|
||
[
|
||
S("1 / 3 • Schéma", "Co na něm má být",
|
||
"Tip: schéma z doby instalace bez datumu je pohádka.",
|
||
"Jsou na něm jádro, učebny, VLAN a přípojka ven.",
|
||
"Adresní plán sedí se schématem, ne s pamětí.",
|
||
"Porty páteře mají popisky na obou koncích.",
|
||
"Datum a jméno autora říkají, jak je obrázek starý."),
|
||
S("2 / 3 • Změna", "Nejdřív papír, pak kabel",
|
||
"Tip: přepojit a zapsat až za měsíc znamená, že zápis už nesedí.",
|
||
"Změna VLAN se zapíše ve stejný den.",
|
||
"Fotka rozvaděče doplní schéma tam, kde čáry lžou.",
|
||
"Hesla do schématu nepatří. Patří do trezoru účtů.",
|
||
"Kopie schématu není jen na počítači, který ta síť živí."),
|
||
S("3 / 3 • Předání", "Až tu nebudete",
|
||
"Tip: kolega má síť převzít bez vašeho telefonu.",
|
||
"Seznam zařízení, adres správy a kde leží zálohy.",
|
||
"Kontakt na poskytovatele a číslo spoje.",
|
||
"Co se nesmí restartovat ve výuce.",
|
||
"Jedna stránka je lepší než nikde neuložená hlava."),
|
||
],
|
||
[
|
||
Q("Co do schématu sítě nepatří?",
|
||
["Heslo správce", "VLAN a jejich účel",
|
||
"Přípojka k poskytovateli", "Datum, kdy naposledy sedělo"],
|
||
0, "Heslo patří jinam než na obrázek, který visí ve sborovně."),
|
||
Q("Kdy se změna zapíše?",
|
||
["V den, kdy se provede", "Až se na ni někdo zeptá u maturity",
|
||
"Jen když spadne celá škola", "Zápis není potřeba, stačí paměť"],
|
||
0, "Nezapsaná změna je příští závada."),
|
||
Q("Proč mít kopii schématu i mimo školní server?",
|
||
["Když síť neběží, schéma na ní neotevřete",
|
||
"Server schémata maže",
|
||
"IPv6 schémata zakazuje",
|
||
"STP obrázky nepouští"],
|
||
0, "Dokumentace má přežít výpadek toho, co popisuje."),
|
||
Q("Co má kolega najít bez vašeho telefonu?",
|
||
["Adresy správy, zálohy a kontakt na poskytovatele",
|
||
"Jen barvu racku",
|
||
"Vaše soukromé heslo",
|
||
"Nic, síť se nepředává"],
|
||
0, "Provoz nesmí stát na jednom člověku."),
|
||
]),
|
||
],
|
||
)
|
||
|
||
HW2 = course(
|
||
"hw2",
|
||
"Monitory, tisk, sběrnice, chlazení, sestavení, UEFI a diagnostika.",
|
||
"Displays, printing, buses, cooling, assembly, UEFI and diagnostics.",
|
||
[
|
||
L("Monitory", "Displays",
|
||
"Panel, rozlišení a proč 60 Hz není jediné číslo.",
|
||
"The panel, the resolution, and why 60 Hz is not the only number.",
|
||
[
|
||
S("1 / 3 • Panel", "LCD a OLED",
|
||
"Tip: rozbité podsvícení LCD zhasne obraz, i když panel pořád kreslí.",
|
||
"LCD svítí podsvícením a panel světlo cloní.",
|
||
"OLED svítí samotnými body a umí opravdovou černou.",
|
||
"Lesklý panel má vyšší kontrast a víc odlesků.",
|
||
"Uhlopříčka v palcích není totéž co pracovní plocha v bodech."),
|
||
S("2 / 3 • Obraz", "Rozlišení a frekvence",
|
||
"Tip: nativní rozlišení panelu je to, na které je mřížka bodů.",
|
||
"Nižší rozlišení interpoluje a obraz měkne.",
|
||
"Obnovovací frekvence říká, kolikrát za sekundu se obraz překreslí.",
|
||
"Odezva panelu není totéž co frekvence.",
|
||
"HDR chce vyšší jas, ne jen zaškrtnutou volbu."),
|
||
S("3 / 3 • Kabel", "Obraz musí stihnout pásmo",
|
||
"Tip: starý kabel nebo slabá verze HDMI oseká frekvenci i rozlišení.",
|
||
"DisplayPort a HDMI mají verze s různým datovým tokem.",
|
||
"VGA je analogové a na dlouhém kabelu měkne.",
|
||
"USB-C obraz poveze jen tehdy, když port umí alternativní režim.",
|
||
"Dokovací stanice má vlastní limit, ne limit notebooku."),
|
||
],
|
||
[
|
||
Q("Čím se OLED liší od běžného LCD?",
|
||
["Body samy svítí a černá je opravdu zhasnutá",
|
||
"Nemá rozlišení",
|
||
"Jede jen po VGA",
|
||
"Nepotřebuje grafickou kartu"],
|
||
0, "LCD obraz skládá cloněním podsvícení."),
|
||
Q("Co je nativní rozlišení?",
|
||
["Počet bodů, na který je panel vyroben",
|
||
"Nejvyšší číslo v herním menu bez ohledu na panel",
|
||
"Rychlost procesoru",
|
||
"Počet USB portů"],
|
||
0, "Jiné rozlišení se musí přepočítat."),
|
||
Q("Proč 4K při 144 Hz někdy nejde?",
|
||
["Kabel nebo verze portu nestihne datový tok",
|
||
"OLED zakazuje frekvenci nad 60 Hz",
|
||
"IPv4 omezuje monitory",
|
||
"BIOS maže rozlišení"],
|
||
0, "Pásmo portu je strop, ne přání v menu."),
|
||
Q("Kdy USB-C nepřenese obraz?",
|
||
["Když port umí jen data a nabíjení",
|
||
"Když je kabel černý",
|
||
"Když má notebook SSD",
|
||
"Když je v síti VLAN"],
|
||
0, "Konektor stejného tvaru ještě neznamená DisplayPort v něm."),
|
||
]),
|
||
L("Tisk a sken", "Print and scan",
|
||
"Laser, inkoust a síťová fronta.",
|
||
"Laser, inkjet, and a network queue.",
|
||
[
|
||
S("1 / 3 • Princip", "Toner a kapky",
|
||
"Tip: laser netaví toner na papír sám, dělá to zapékací válec.",
|
||
"Laser nabije válec a toner se chytí podle obrazu.",
|
||
"Inkoust stříká kapky a hodí se na fotky i občasný tisk.",
|
||
"Zaschnutá hlava je častější než porucha desky.",
|
||
"Termotransfer na štítky není totéž co kancelářský laser."),
|
||
S("2 / 3 • Síť", "Jedna tiskárna pro učebnu",
|
||
"Tip: tiskárna s vlastní adresou má rezervaci v DHCP.",
|
||
"Sdílená tiskárna na počítači žije, jen když je ten počítač zapnutý.",
|
||
"Síťová tiskárna poslouchá sama.",
|
||
"Fronta na serveru drží ovladač na jednom místě.",
|
||
"Špatný ovladač tiskne znaky místo stránky."),
|
||
S("3 / 3 • Sken", "Obraz zpět do počítače",
|
||
"Tip: rozlišení 600 dpi na text stačí, plakát chce víc.",
|
||
"Plochý skener i podavač mají jiný limit gramáže.",
|
||
"ADF nezvládne sešité listy.",
|
||
"Síťový sken může poslat soubor do složky nebo na poštu.",
|
||
"Sklo a podavač se mažou, jinak jsou na stránce pruhy."),
|
||
],
|
||
[
|
||
Q("Co v laserové tiskárně připevní toner k papíru?",
|
||
["Zapékací válec", "Inkoustová hlava",
|
||
"Ventilátor zdroje", "VGA kabel"],
|
||
0, "Teplo a tlak toner zataví."),
|
||
Q("Kdy sdílená tiskárna na učitelském počítači netiskne?",
|
||
["Když je ten počítač vypnutý",
|
||
"Když má tiskárna vlastní IP a server",
|
||
"Když je v síti DHCP",
|
||
"Když je papír v zásobníku"],
|
||
0, "Sdílení přes počítač z toho počítače dělá server."),
|
||
Q("Proč dát tiskárně rezervaci v DHCP?",
|
||
["Aby ovladače mířily pořád na stejnou adresu",
|
||
"Aby se zvýšilo rozlišení",
|
||
"Aby toner vydržel dýl",
|
||
"Aby nešla skenovat"],
|
||
0, "Nová adresa po restartu rozbije frontu."),
|
||
Q("Co podavač skeneru nezvládne?",
|
||
["Sešitou sadu listů", "Jednotlivé běžné listy",
|
||
"Černobílý text", "Odeslání do složky, pokud to umí firmware"],
|
||
0, "Sešit patří na sklo, ne do ADF."),
|
||
]),
|
||
L("Sběrnice a disky", "Buses and drives",
|
||
"USB, SATA a NVMe nejsou zaměnitelné jen konektorem.",
|
||
"USB, SATA and NVMe are not interchangeable just because of the plug.",
|
||
[
|
||
S("1 / 3 • USB", "Versie a napájení",
|
||
"Tip: port USB-A 2.0 fyzicky vezme i rychlý flash disk a stáhne ho na svou rychlost.",
|
||
"USB 2.0, 3.x a 4 se liší tokem dat.",
|
||
"USB-C je tvar, ne záruka rychlosti.",
|
||
"Thunderbolt po stejném tvaru umí obraz, síť i disk.",
|
||
"Hub bez napájení nestačí pro víc disků."),
|
||
S("2 / 3 • SATA", "Klasické disky",
|
||
"Tip: napájení SATA a datový kabel jsou dva různé vodiče.",
|
||
"HDD i starší SSD sedí na SATA.",
|
||
"Rychlost rozhraní je strop, disk může být pomalejší.",
|
||
"Kabel bez západky vypadne a disk zmizí z BIOSu.",
|
||
"Externí box schová SATA za USB."),
|
||
S("3 / 3 • NVMe", "SSD přímo na PCIe",
|
||
"Tip: M.2 je rozměr destičky. NVMe a SATA na M.2 nejsou totéž.",
|
||
"NVMe jede po PCIe a obchází starý řadič SATA.",
|
||
"Slot M.2 na desce může umět jen jednu z variant.",
|
||
"Dlouhá destička do krátkého slotu nepatří.",
|
||
"Bez chlazení rychlé SSD ve špičce zpomalí."),
|
||
],
|
||
[
|
||
Q("Co říká samotný tvar USB-C?",
|
||
["Jen tvar konektoru, ne rychlost ani obraz",
|
||
"Vždy Thunderbolt",
|
||
"Vždy 40 Gb/s",
|
||
"Vždy nabíjení 100 W a DisplayPort"],
|
||
0, "Schopnosti určuje řadič a kabel, ne obrys."),
|
||
Q("Čím se NVMe liší od SATA SSD?",
|
||
["Jede po PCIe, ne po starém SATA",
|
||
"Nemá paměťové buňky",
|
||
"Jde zapojit jen do VGA",
|
||
"Nepotřebuje desku"],
|
||
0, "Protokol a sběrnice jsou rychlejší cesta."),
|
||
Q("Co může umět slot M.2?",
|
||
["Jen SATA, jen NVMe, nebo obojí, podle desky",
|
||
"Vždy obojí",
|
||
"Jen grafickou kartu",
|
||
"Jen operační paměť"],
|
||
0, "Manuál desky je závaznější než tvar zářezu."),
|
||
Q("Proč rychlé SSD ve špičce zpomalí?",
|
||
["Přehřeje se a stáhne výkon",
|
||
"SATA mu sebere VLAN",
|
||
"BIOS maže buňky",
|
||
"USB-C ho přepne na 2.0 vždy"],
|
||
0, "Řadič hlídá teplotu."),
|
||
]),
|
||
L("Chlazení", "Cooling",
|
||
"Vzduch musí mít kudy dovnitř a ven.",
|
||
"Air needs a way in and a way out.",
|
||
[
|
||
S("1 / 3 • Tok", "Podtlak a přetlak",
|
||
"Tip: všechny ventilátory foukající dovnitř bez odtahu jen víří prach.",
|
||
"Vpředu a dole se vzduch nasává, vzadu a nahoře odchází.",
|
||
"Filtr patří na vstup, ne na výfuk.",
|
||
"Zavřená přední stěna designové skříně škrtí přívod.",
|
||
"Kabel přes ventilátor je ucpaný filtr."),
|
||
S("2 / 3 • CPU", "Chladič musí sednout",
|
||
"Tip: pasta není vrstva másla. Má vyplnit nerovnosti.",
|
||
"Vzduchový chladič potřebuje místo k bočnici.",
|
||
"Voda odvede teplo do radiátoru, který pořád potřebuje vzduch.",
|
||
"Špatně dotažený chladič pustí teplotu hned po startu.",
|
||
"Limit teploty v BIOSu je pojistka, ne pracovní režim."),
|
||
S("3 / 3 • Prach", "Tichý vrah zdroje",
|
||
"Tip: vrstva prachu na žebru je izolace.",
|
||
"Zdroj s filtrem se čistí, nezalepuje.",
|
||
"Notebookový výfuk do měkké deky se udusí.",
|
||
"Po roce bez čištění rostou otáčky a teplota.",
|
||
"Čištění stlačeným vzduchem nedrží ventilátor v roztočeném stavu naslepo."),
|
||
],
|
||
[
|
||
Q("Kam patří prachový filtr?",
|
||
["Na vstup vzduchu", "Jen na výfuk vzadu",
|
||
"Dovnitř zdroje bez mřížky", "Na displej"],
|
||
0, "Filtruje se to, co teprve vstupuje."),
|
||
Q("Co dělá příliš silná vrstva pasty?",
|
||
["Zhorší přestup tepla", "Zvýší takt samo",
|
||
"Nahradí chladič", "Opraví špatný socket"],
|
||
0, "Pasta vede hůř než kov chladiče."),
|
||
Q("Proč vodní chlazení pořád potřebuje vzduch?",
|
||
["Radiátor musí teplo předat do místnosti",
|
||
"Voda chladí jen při otevřeném okně skříně",
|
||
"Čerpadlo jede na VGA",
|
||
"Bez ventilátoru se voda vaří vždy do minuty"],
|
||
0, "Okruh teplo přesune, radiátor ho odvede."),
|
||
Q("Co udělá notebook na dece?",
|
||
["Zakryje sání a přehřeje se",
|
||
"Zvýší jas panelu",
|
||
"Přepne disk na NVMe",
|
||
"Opraví ventilátor"],
|
||
0, "Sání bývá zespodu."),
|
||
]),
|
||
L("Sestavení", "Building a PC",
|
||
"Pořadí, které nerozbije desku.",
|
||
"An order that does not break the board.",
|
||
[
|
||
S("1 / 3 • Příprava", "Nejdřív mimo skříň",
|
||
"Tip: sestavu nejdřív oživte na stole. Ve skříni se špatně hledá nedosedlá paměť.",
|
||
"Deska, procesor, chladič a jeden modul paměti.",
|
||
"Zdroj mimo skříň a obraz na základní grafiku.",
|
||
"Až potom disk, karty a zbytek paměti.",
|
||
"Antistatická podložka a klidné ruce porazí koberec."),
|
||
S("2 / 3 • Socket", "Procesor nemá kam spadnout",
|
||
"Tip: ohnutý pin na desce LGA nevrátíte pinzetou naslepo.",
|
||
"Trojúhelník na procesoru sedí se značkou na socketu.",
|
||
"Páka se zavírá až když procesor leží rovně.",
|
||
"Pasta až po usazení, ne do socketu.",
|
||
"Chladič se dotahuje křížem, ne jednou stranou nadoraz."),
|
||
S("3 / 3 • Skříň", "Kabely jsou součást airflow",
|
||
"Tip: distanční sloupky pod deskou musí sedět s otvory, jinak deska zkratuje.",
|
||
"Nejdřív zdroj a distanční sloupky, potom deska.",
|
||
"Napájení desky, procesoru a karty jsou tři různé konektory.",
|
||
"Přední USB a tlačítko mají malé konektory podle manuálu.",
|
||
"První start se sleduje: ventilátory, obraz, pípnutí nebo LED."),
|
||
],
|
||
[
|
||
Q("Proč oživit sestavu nejdřív mimo skříň?",
|
||
["Nedosedlá paměť se ve skříni hledá hůř",
|
||
"Ve skříni nejde zapnout zdroj",
|
||
"BIOS ve skříni neběží",
|
||
"Pasta venku schne"],
|
||
0, "Minimum dílů na stole ukáže, jestli jádro žije."),
|
||
Q("Co se nesmí stát pinům na socketu LGA?",
|
||
["Ohnout je", "Nechat je v socketu",
|
||
"Srovnat procesor podle značky",
|
||
"Zavřít páku až po usazení"],
|
||
0, "Pin na desce je křehký."),
|
||
Q("K čemu jsou distanční sloupky?",
|
||
["Drží desku dál od plechu skříně",
|
||
"Napájí ventilátor",
|
||
"Jsou to šrouby do disku",
|
||
"Uzemňují jen přední LED"],
|
||
0, "Bez nich nebo se špatnými sloupky deska zkratuje."),
|
||
Q("Který konektor nepatří do napájení procesoru?",
|
||
["PCIe konektor grafické karty místo EPS",
|
||
"Hlavní 24pin na desku",
|
||
"EPS konektor k socketu",
|
||
"SATA napájení disku"],
|
||
0, "Konektory si jsou podobné a sedí špatně záměrně."),
|
||
]),
|
||
L("UEFI a boot", "UEFI and boot",
|
||
"Co se děje, než naběhne systém.",
|
||
"What happens before the operating system starts.",
|
||
[
|
||
S("1 / 3 • Firmware", "BIOS a UEFI",
|
||
"Tip: UEFI není jen barevné menu. Umí jiné dělení disku a Secure Boot.",
|
||
"Firmware otestuje železo a najde disk se systémem.",
|
||
"UEFI používá tabulku GPT, starý BIOS často MBR.",
|
||
"Secure Boot pustí jen podepsaný zavaděč.",
|
||
"Vypnutí Secure Bootu je výjimka, ne výchozí rada."),
|
||
S("2 / 3 • Pořadí", "Z čeho se startuje",
|
||
"Tip: flash disk v pořadí před systémem nabootuje omylem instalaci.",
|
||
"Nabídka bootu umí jednorázově vybrat zařízení.",
|
||
"Disk bez zavaděče se v seznamu nechytí.",
|
||
"Více systémů potřebuje bootovací nabídku, ne přepisování pořád dokola.",
|
||
"Síťový boot PXE hledá obraz na serveru."),
|
||
S("3 / 3 • Heslo", "Menu není pro celou třídu",
|
||
"Tip: heslo BIOSu bez záznamu je past, až se bude měnit disk.",
|
||
"Heslo na setup brání přehazování bootu.",
|
||
"Heslo na disk je silnější a bez něj jsou data nedostupná.",
|
||
"Clear CMOS heslo setupu často smaže a vezme i nastavení.",
|
||
"Po změně profilu paměti ověřte, že systém naběhne dvakrát."),
|
||
],
|
||
[
|
||
Q("Co Secure Boot hlídá?",
|
||
["Aby se spustil jen důvěryhodný zavaděč",
|
||
"Aby měl disk aspoň 1 TB",
|
||
"Aby ventilátor točil na maximum",
|
||
"Aby nešel USB flash disk vůbec zapojit"],
|
||
0, "Nepodepsaný zavaděč se nespustí."),
|
||
Q("Čím se liší GPT od MBR?",
|
||
["GPT je tabulka oddílů pro UEFI a větší disky",
|
||
"GPT je typ pasty",
|
||
"MBR je jen pro NVMe",
|
||
"Jsou to totéž"],
|
||
0, "Starý MBR má omezení, na která velký disk naráží."),
|
||
Q("Proč nenechat flash disk trvale první v bootu?",
|
||
["Omylem z něj naběhne cizí systém",
|
||
"Flash disk vypne Secure Boot navždy",
|
||
"UEFI flash disky zakazuje",
|
||
"Smaže TPM"],
|
||
0, "Jednorázová nabídka bootu je bezpečnější."),
|
||
Q("Co často udělá vymazání CMOS?",
|
||
["Smaže heslo setupu i ostatní volby",
|
||
"Smaže jen soubory na ploše",
|
||
"Přepne Windows na jiný jazyk",
|
||
"Opraví ohnutý pin"],
|
||
0, "Je to návrat firmware k výchozímu stavu."),
|
||
]),
|
||
L("Diagnostika", "Diagnostics",
|
||
"POST, pípání a minimum, které ještě naběhne.",
|
||
"POST, beep codes, and the smallest build that still starts.",
|
||
[
|
||
S("1 / 3 • POST", "Test hned po zapnutí",
|
||
"Tip: žádný obraz a žádné pípnutí neznamená automaticky mrtvý procesor.",
|
||
"Firmware zkouší procesor, paměť a grafiku.",
|
||
"Kódy na displeji desky jsou přesnější než staré pípání.",
|
||
"Reproduktor skříně musí být zapojený, jinak ticho nic neřekne.",
|
||
"Manuál desky překládá kódy. Nejsou u všech stejné."),
|
||
S("2 / 3 • Minimum", "Uberte, co může lhát",
|
||
"Tip: jeden modul paměti v doporučeném slotu porazí čtyři najednou.",
|
||
"Ven grafika, pokud má procesor vlastní obraz.",
|
||
"Ven disky a karty.",
|
||
"Zkuste jiný kabel obrazu a jiný port.",
|
||
"Až jádro naběhne, vracejte díly po jednom."),
|
||
S("3 / 3 • Paměť a disk", "Náhodné pády",
|
||
"Tip: pád až ve Windows může být paměť, ne jen ovladač.",
|
||
"Test paměti běží déle než jedno pípnutí.",
|
||
"Chyby čtení disku se projeví v jeho vlastních statistikách.",
|
||
"Přehřátí shodí stroj až při zátěži, ne v menu BIOSu.",
|
||
"Vyměněný díl ověřte stejnou zkouškou, která předtím selhala."),
|
||
],
|
||
[
|
||
Q("Co POST dělá?",
|
||
["Po zapnutí zkouší základní díly",
|
||
"Instaluje systém",
|
||
"Formátuje SSD",
|
||
"Stahuje ovladače z internetu"],
|
||
0, "Je to první test firmware, ne operační systém."),
|
||
Q("Proč začít s jedním modulem paměti?",
|
||
["Špatný modul nebo slot se snáz odhalí",
|
||
"Deska víc modulů zakazuje",
|
||
"BIOS umí jen 4 GB",
|
||
"Druhý modul maže UEFI"],
|
||
0, "Minimum dílů zužuje chybu."),
|
||
Q("Kdy se přehřátí často neprojeví?",
|
||
["V menu BIOSu bez zátěže",
|
||
"Při dlouhém testu procesoru",
|
||
"Ve hře",
|
||
"Při kódování videa"],
|
||
0, "Teplota roste až s odběrem."),
|
||
Q("Co ověří výměnu dílu?",
|
||
["Stejná zkouška, která předtím selhala",
|
||
"Jen to, že ventilátor se točí",
|
||
"Nová tapeta",
|
||
"Jiná barva skříně"],
|
||
0, "Bez opakování testu nevíte, jestli to byla příčina."),
|
||
]),
|
||
L("Porty a dokování", "Ports and docks",
|
||
"Co z notebooku opravdu vyleze.",
|
||
"What a laptop can actually drive.",
|
||
[
|
||
S("1 / 3 • Dok", "Jeden kabel, mnoho omezení",
|
||
"Tip: levný USB hub není dok. Nepřenese obraz, který port neumí.",
|
||
"Dok může nést obraz, síť i napájení.",
|
||
"Limit je nejslabší článek: port, kabel nebo dok.",
|
||
"Dva externí monitory chtějí port, který to umí, ne přání uživatele.",
|
||
"Napájení přes dok nemusí stačit hernímu notebooku."),
|
||
S("2 / 3 • Síť", "Kabel z notebooku",
|
||
"Tip: mnoho tenkých notebooků už ethernet nemá a potřebuje adaptér.",
|
||
"USB adaptér je síťová karta mimo šasi.",
|
||
"Rychlost adaptéru bývá 1 Gb/s, ne rychlost školní páteře.",
|
||
"Dok s vlastní síťovkou má vlastní MAC adresu.",
|
||
"Rezervace DHCP na MAC notebooku pak neplatí pro dok."),
|
||
S("3 / 3 • Výběr", "Na co se ptát",
|
||
"Tip: stejný USB-C na dvou noteboocích nemá stejné schopnosti.",
|
||
"Kolik obrazů, jaké rozlišení a jestli se notebook nabíjí.",
|
||
"Jestli síť jede z doku, nebo se čeká Wi-Fi.",
|
||
"Jestli čtečka karet a USB sedí verzi, kterou škola používá.",
|
||
"Manuál portu je důležitější než fotka konektoru."),
|
||
],
|
||
[
|
||
Q("Kdy USB-C dok nepřenese dva monitory?",
|
||
["Když port notebooku umí jen data",
|
||
"Když je dok černý",
|
||
"Když je v učebně VLAN",
|
||
"Když má disk NVMe"],
|
||
0, "Dok neumí vyrobit schopnost, kterou port nemá."),
|
||
Q("Proč DHCP rezervace na notebook neplatí přes dok?",
|
||
["Dok má vlastní MAC adresu",
|
||
"DHCP doky zakazuje",
|
||
"VLAN maže rezervace",
|
||
"Ethernet nemá MAC"],
|
||
0, "Rezervace sedí na adresu, kterou server vidí."),
|
||
Q("Co je nejslabší článek řetězu obrazu?",
|
||
["Port, kabel nebo dok, podle toho, co umí nejmíň",
|
||
"Vždy monitor",
|
||
"Vždy procesor",
|
||
"Vždy tapeta"],
|
||
0, "Datový tok musí projít všemi."),
|
||
Q("Čím se liší USB hub od doku s obrazem?",
|
||
["Hub sám o sobě obraz z datového portu nevyrobí",
|
||
"Hub je vždy rychlejší",
|
||
"Dok neumí napájení",
|
||
"Jsou to totéž"],
|
||
0, "Obraz chce alternativní režim nebo DisplayPort v kabelu."),
|
||
]),
|
||
],
|
||
)
|
||
|
||
HW3 = course(
|
||
"hw3",
|
||
"RAID, NAS, servery, virtualizace, zálohy, UPS a firmware.",
|
||
"RAID, NAS, servers, virtualisation, backups, UPS and firmware.",
|
||
[
|
||
L("RAID", "RAID",
|
||
"Více disků jako jeden svazek, ne jako záloha.",
|
||
"Several drives as one volume, not as a backup.",
|
||
[
|
||
S("1 / 3 • Zrcadlo", "RAID 1",
|
||
"Tip: zrcadlo přežije pád jednoho disku, ne smazání souboru.",
|
||
"Stejná data jsou na dvou discích.",
|
||
"Kapacita je jako jeden disk.",
|
||
"Čtení může být rychlejší, zápis ne dvojnásobný.",
|
||
"Po výměně disku se pole musí obnovit."),
|
||
S("2 / 3 • Prokládání", "RAID 0 a 5",
|
||
"Tip: RAID 0 při pádu jednoho disku ztratí všechno.",
|
||
"RAID 0 skládá rychlost a kapacitu a nemá ochranu.",
|
||
"RAID 5 snese pád jednoho disku z aspoň tří.",
|
||
"Parita zabere kapacitu jednoho disku.",
|
||
"Obnova velkého pole trvá dlouho a druhý pád v té době je zkáza."),
|
||
S("3 / 3 • Řadič", "Hardware a software",
|
||
"Tip: pole z jiného řadiče v novém serveru nemusí naběhnout.",
|
||
"Hardwarový řadič má vlastní cache a baterii.",
|
||
"Softwarové pole řeší systém a je přenosnější.",
|
||
"Cache bez ochrany při výpadku proudu rozbije zápis.",
|
||
"RAID nenahrazuje zálohu na jiné místo."),
|
||
],
|
||
[
|
||
Q("Co RAID 1 přežije?",
|
||
["Pád jednoho z dvojice disků",
|
||
"Smazání souboru uživatelem",
|
||
"Požár místnosti",
|
||
"Ransomware na obou discích naráz"],
|
||
0, "Oba disky mají stejná data, včetně chyby, kterou tam zapíšete."),
|
||
Q("Co je RAID 0?",
|
||
["Prokládání bez ochrany při pádu disku",
|
||
"Zrcadlo",
|
||
"Záloha na pásku",
|
||
"Šifrování disku"],
|
||
0, "Rychlost a kapacita, nulová odolnost."),
|
||
Q("Proč RAID není záloha?",
|
||
["Neochrání před smazáním, malwarem ani požárem skříně",
|
||
"Protože neumí víc než dva disky",
|
||
"Protože Windows RAID zakazuje",
|
||
"Protože parita maže soubory"],
|
||
0, "Záloha je další kopie jinde a v jiném čase."),
|
||
Q("Co hrozí velkému poli při obnově?",
|
||
["Druhý disk spadne dřív, než se obnova dopočítá",
|
||
"Pole se samo přepne na RAID 0",
|
||
"BIOS smaže paritu",
|
||
"NIC se při obnově nesmí točit"],
|
||
0, "Obnova je dlouhá a disky jsou stejně staré."),
|
||
]),
|
||
L("NAS a sítě disků", "NAS and storage networks",
|
||
"Disky, které nejsou uvnitř jednoho počítače.",
|
||
"Drives that are not inside one computer.",
|
||
[
|
||
S("1 / 3 • NAS", "Souborový server v krabici",
|
||
"Tip: NAS v učebně bez zálohy je jen jeden košík na všechna data.",
|
||
"Nabízí složky po síti.",
|
||
"Má vlastní účty nebo se ptá školního adresáře.",
|
||
"Dva porty se dají spojit, ale jen když to umí i switch.",
|
||
"Hlučný diskový provoz nepatří do tiché učebny."),
|
||
S("2 / 3 • SAN", "Disk jako místní",
|
||
"Tip: SAN nedává složku, dává blokové zařízení.",
|
||
"Server vidí disk, i když leží jinde.",
|
||
"Síť pro SAN se nemíchá s provozem žáků.",
|
||
"Špatné zónování vystaví disk cizímu serveru.",
|
||
"Výpadek této sítě shodí systémy, které na disku jedou."),
|
||
S("3 / 3 • Soubor", "Práva a snímky",
|
||
"Tip: snímek disku není záloha, dokud leží na stejném poli.",
|
||
"Práva na složce mají sedět se skupinami, ne s jedním účtem učitele.",
|
||
"Snímek umí vrátit soubor smazaný dopoledne.",
|
||
"Plný svazek zastaví i zdánlivě nesouvisející službu.",
|
||
"Kapacita se hlídá dřív, než svítí červeně."),
|
||
],
|
||
[
|
||
Q("Co NAS obvykle nabízí?",
|
||
["Složky po síti", "Blokový disk celé škole bez oprávnění",
|
||
"Náhradu procesoru v noteboocích", "Obraz monitoru"],
|
||
0, "Je to souborová služba."),
|
||
Q("Čím se SAN liší?",
|
||
["Server dostane disk jako bloky, ne jako složku",
|
||
"Je to jen jiné jméno pro USB flash disk",
|
||
"Jede jen po Wi-Fi",
|
||
"Nemá disky"],
|
||
0, "Souborový systém si na těch blocích dělá až server."),
|
||
Q("Proč snímek na stejném poli není záloha?",
|
||
["Pád pole vezme i snímek",
|
||
"Snímek nejde vytvořit",
|
||
"Snímek maže RAID",
|
||
"SMB snímky zakazuje"],
|
||
0, "Záloha musí přežít ztrátu původního úložiště."),
|
||
Q("Kam nepatří hlučné diskové pole?",
|
||
["Do tiché učebny vedle žáků",
|
||
"Do racku s odtahem",
|
||
"Do místnosti se zámek",
|
||
"Do sítě oddělené od hostů"],
|
||
0, "Hluk a přístup jsou součást návrhu."),
|
||
]),
|
||
L("Servery a rack", "Servers and racks",
|
||
"Skříň, do které se nedává herní počítač naležato.",
|
||
"A cabinet that is not a gaming PC on its side.",
|
||
[
|
||
S("1 / 3 • Tvar", "Racková jednotka",
|
||
"Tip: 1U je výška, ne výkon.",
|
||
"Server v racku se měří v jednotkách U.",
|
||
"Kolejnice musí unést hloubku skříně.",
|
||
"Napájecí lišta není prodlužovačka z kuchyně.",
|
||
"Proud a teplo se počítají dopředu, ne až když jistič spadne."),
|
||
S("2 / 3 • Vzduch", "Studená ulička",
|
||
"Tip: servery v racku sají vepředu a foukají dozadu. Otočený kus kazí ostatním.",
|
||
"Studený vzduch jde před servery, teplý za ně.",
|
||
"Zaslepení prázdných pozic nutí vzduch přes stroje.",
|
||
"Kabelová armáda před sáním je ucpávka.",
|
||
"Teplota v místnosti není teplota uvnitř 1U serveru."),
|
||
S("3 / 3 • Vzdáleně", "Když nejste ve škole",
|
||
"Tip: vzdálená správa má vlastní port a vlastní heslo.",
|
||
"IPMI nebo iDRAC žije i když systém ne.",
|
||
"Patří do správní sítě, ne do učebny.",
|
||
"Konzole v racku je záloha, když síť správy spadne.",
|
||
"Štítek na serveru říká, co na něm jede."),
|
||
],
|
||
[
|
||
Q("Co znamená 1U?",
|
||
["Výšku zařízení v racku", "Výkon jednoho jádra",
|
||
"Rychlost disku", "Počet zdrojů"],
|
||
0, "Je to rozměr, ne třída výkonu."),
|
||
Q("Kudy má server v racku sát vzduch?",
|
||
["Vepředu a foukat dozadu", "Zezadu dopředu",
|
||
"Jen shora bez mřížky", "Z podlahy dírami v desce"],
|
||
0, "Otočený server ohřívá sousedům sání."),
|
||
Q("K čemu je vzdálená správa serveru?",
|
||
["Ovládáte ho, i když systém neběží",
|
||
"Nahrazuje zálohu dat",
|
||
"Je to Wi-Fi pro žáky",
|
||
"Maže RAID"],
|
||
0, "Vidíte obraz a umíte stroj zapnout po síti."),
|
||
Q("Kam nepatří port vzdálené správy?",
|
||
["Do žákovské VLAN", "Do správní sítě",
|
||
"Za firewall", "Na heslo jiné než admin na lístečku"],
|
||
0, "Je to klíče od serveru."),
|
||
]),
|
||
L("Virtualizace", "Virtualisation",
|
||
"Více systémů na jednom železe.",
|
||
"Several systems on one piece of hardware.",
|
||
[
|
||
S("1 / 3 • Hypervizor", "Kdo rozděluje železo",
|
||
"Tip: virtuální počítač nemá vlastní zdroj. Dělí se o ten fyzický.",
|
||
"Hypervizor pouští více systémů nad jedním hardwarem.",
|
||
"Každý systém má vlastní diskový soubor a virtuální síťovku.",
|
||
"Paměť, kterou slíbíte navíc, se ve špičce potká.",
|
||
"Pád fyzického serveru shodí všechny hosty naráz."),
|
||
S("2 / 3 • Síť", "Virtuální switch",
|
||
"Tip: VLAN ve virtuálu musí sedět s trunkem na fyzické kartě.",
|
||
"Virtuální switch propojí hosty mezi sebou.",
|
||
"Most je pustí ven fyzickým portem.",
|
||
"Izolovaná síť jen mezi virtuály ven nevede.",
|
||
"Špatný trunk vystaví správní virtuál do učebny."),
|
||
S("3 / 3 • Disk", "Soubor není kouzlo",
|
||
"Tip: tenký disk roste a může zaplnit svazek, na kterém leží.",
|
||
"Tenké provizionování slíbí víc, než je na začátku obsazeno.",
|
||
"Snímek před změnou umí vrátit systém.",
|
||
"Zapomenuté snímky zpomalí disk a zaplní úložiště.",
|
||
"Záloha virtuálu patří mimo ten samý disk."),
|
||
],
|
||
[
|
||
Q("Co se stane, když spadne fyzický server s pěti virtuály?",
|
||
["Spadnou všechny, pokud nemají kam utéct",
|
||
"Přežije aspoň správní virtuál",
|
||
"Hypervizor je přenese na notebook",
|
||
"Nic, virtuál zdroj nepotřebuje"],
|
||
0, "Sdílejí jedno železo."),
|
||
Q("K čemu je most virtuálního switche?",
|
||
["Pustí virtuál do fyzické sítě",
|
||
"Smaže VLAN",
|
||
"Nahradí RAID",
|
||
"Zapne Secure Boot hostitele"],
|
||
0, "Bez mostu virtuál ven neodejde."),
|
||
Q("Čím je tenký disk nebezpečný?",
|
||
["Doroste a zaplní úložiště pod sebou",
|
||
"Nejde zálohovat",
|
||
"Nemá souborový systém",
|
||
"Vypne hypervizor"],
|
||
0, "Slíbená kapacita není volné místo."),
|
||
Q("Co udělá zapomenutý snímek?",
|
||
["Roste a zpomaluje disk",
|
||
"Smaže heslo BIOSu",
|
||
"Opraví RAID 0",
|
||
"Přidá paměť"],
|
||
0, "Snímek je dočasná pojistka, ne trvalý režim."),
|
||
]),
|
||
L("Zálohování", "Backups",
|
||
"Kopie, kterou umíte vrátit.",
|
||
"A copy you can actually restore.",
|
||
[
|
||
S("1 / 3 • Pravidlo", "Tři místa",
|
||
"Tip: kopie na tom samém disku přežije jen omyl v koši, ne pád disku.",
|
||
"Jedna kopie je málo, když leží u originálu.",
|
||
"Druhá má být mimo stroj a třetí mimo budovu, když na tom záleží.",
|
||
"Verze v čase vrátí soubor z pátku, ne jen ze včerejška.",
|
||
"Šifrovaná záloha bez klíče je hromada nic."),
|
||
S("2 / 3 • Co zálohovat", "Ne jen plochu",
|
||
"Tip: obraz systému bez dat školy je pěkná, ale prázdná záchrana.",
|
||
"Data, účty a konfigurace sítě jsou různé věci.",
|
||
"Poštovní schránka v cloudu má vlastní nastavení retence.",
|
||
"Databáze se nezálohuje kopírováním otevřeného souboru naslepo.",
|
||
"Seznam, co se nezálohuje, má být vědomý."),
|
||
S("3 / 3 • Zkouška", "Obnova je součást zálohy",
|
||
"Tip: záloha, kterou jste nikdy neobnovili, je hypotéza.",
|
||
"Jednou za čas obnovte soubor i celý systém nanečisto.",
|
||
"Měřte, jak dlouho obnova trvá.",
|
||
"Zápis říká, kdo má klíče a kde leží média.",
|
||
"Po ransomware rozhoduje stáří poslední čisté kopie."),
|
||
],
|
||
[
|
||
Q("Proč nestačí kopie na stejném disku?",
|
||
["Pád disku vezme originál i kopii",
|
||
"Systém druhou složku zakazuje",
|
||
"RAID ji sám smaže",
|
||
"NTFS umí jen jeden soubor"],
|
||
0, "Chyba média je společná."),
|
||
Q("Co není pořádná zkouška zálohy?",
|
||
["Jen to, že noční úloha svítí zeleně",
|
||
"Obnova jednoho souboru",
|
||
"Změřený čas obnovy systému",
|
||
"Ověření, že klíč k šifře existuje"],
|
||
0, "Zelená fajfka neznamená, že data jdou otevřít."),
|
||
Q("Co rozhoduje po ransomware?",
|
||
["Jestli existuje čistá kopie starší než nákaza",
|
||
"Barva skříně",
|
||
"Počet ventilátorů",
|
||
"Verze spořiče obrazovky"],
|
||
0, "Šifrovaná záloha z doby, kdy už malware běžel, je taky šifrovaná."),
|
||
Q("Proč nekopírovat otevřenou databázi jako obyčejný soubor?",
|
||
["Rozpracovaný zápis bude nekonzistentní",
|
||
"Databáze nemá soubor",
|
||
"SMB databáze zakazuje",
|
||
"Kopie by smazala RAID"],
|
||
0, "Běžící databáze se zálohuje nástrojem, který umí konzistentní snímek."),
|
||
]),
|
||
L("UPS", "UPS",
|
||
"Minuty na uložení, ne náhradní elektrárna.",
|
||
"Minutes to shut down cleanly, not a spare power station.",
|
||
[
|
||
S("1 / 3 • Úkol", "Překlenout výpadek",
|
||
"Tip: malá UPS neutáhne učebnu. Utáhne server, než se uloží.",
|
||
"Při výpadku přejde na baterii.",
|
||
"Čas běhu závisí na odběru, ne na nálepce bez zátěže.",
|
||
"Server dostane signál a vypne se po pořádku.",
|
||
"Tiskárna a monitor na UPS servery okrádají o minuty."),
|
||
S("2 / 3 • Tvar", "Ne každá UPS je pro zdroj serveru",
|
||
"Tip: levná UPS s obdélníkovým průběhem modernímu zdroji vadí.",
|
||
"Sinusový výstup je jistější pro aktivní PFC zdroje.",
|
||
"Výkon ve voltampérech není totéž co watty na štítku zdroje.",
|
||
"Přetížená UPS spadne právě ve výpadku.",
|
||
"Zkouška pod zátěží ukáže skutečné minuty."),
|
||
S("3 / 3 • Baterie", "Spotřební díl",
|
||
"Tip: baterie po třech letech v teple už slíbené minuty nedá.",
|
||
"Test baterie nečeká na první bouřku.",
|
||
"Výměna se dělá dřív, než článek nabobtná.",
|
||
"Teplá místnost baterii ničí rychleji.",
|
||
"UPS není náhrada za zálohu dat."),
|
||
],
|
||
[
|
||
Q("K čemu malá UPS u serveru je?",
|
||
["Aby se systém stihl uložit a vypnout",
|
||
"Aby učebna jela celé odpoledne",
|
||
"Aby nahradila zálohu disků",
|
||
"Aby chladila rack"],
|
||
0, "Jsou to minuty, ne směna."),
|
||
Q("Proč na UPS nepatří laserová tiskárna?",
|
||
["Má velký odběr a sebere čas serverům",
|
||
"Tiskárna UPS zničí vždy okamžitě",
|
||
"USB tiskárny UPS zakazuje",
|
||
"Toner potřebuje jinou frekvenci"],
|
||
0, "Špička zapékání baterii vybíjí zbytečně."),
|
||
Q("Co ukáže jen nálepka bez zátěže?",
|
||
["Optimistický čas, který v provozu neplatí",
|
||
"Přesné minuty při plném serveru",
|
||
"Stav RAID",
|
||
"Teplotu procesoru"],
|
||
0, "Měří se s tím, co na UPS opravdu visí."),
|
||
Q("Jak často baterie přestane držet slib?",
|
||
["Po letech, dřív v teple",
|
||
"Nikdy, je součástí zdroje navždy",
|
||
"Až po deseti minutách prvního provozu",
|
||
"Jen když je UPS černá"],
|
||
0, "Je to spotřební díl a má se zkoušet."),
|
||
]),
|
||
L("Firmware", "Firmware",
|
||
"Aktualizace, která nejde udělat uprostřed hodiny.",
|
||
"An update that is not applied in the middle of a lesson.",
|
||
[
|
||
S("1 / 3 • Co to je", "Program v železe",
|
||
"Tip: firmware není ovladač ve Windows. Žije v zařízení i bez systému.",
|
||
"Deska, disk, switch i BIOS mají vlastní verzi.",
|
||
"Chyba ve firmware shodí zařízení bez ohledu na systém.",
|
||
"Výrobce vydává opravy i roky po prodeji.",
|
||
"Neznámá verze se nejdřív zjistí, potom se teprve stahuje."),
|
||
S("2 / 3 • Postup", "Jedno zařízení, zdroj, záloha",
|
||
"Tip: aktualizace při bouřce bez UPS je způsob, jak dostat cihlu.",
|
||
"Přečtěte, co verze opravuje a co rozbije.",
|
||
"Záloha konfigurace switche jde bokem.",
|
||
"Napájení nesmí vypadnout v půlce zápisu.",
|
||
"Po dokončení ověřte, že naběhla i služba, ne jen dioda."),
|
||
S("3 / 3 • Řada", "Ne všechno v pátek odpoledne",
|
||
"Tip: neaktualizujte jádro sítě a jediný server ve stejné hodině.",
|
||
"Nejdřív méně důležité zařízení.",
|
||
"Okno, kdy smí síť ležet, je domluvené.",
|
||
"Když nová verze zlobí, musíte umět předchozí.",
|
||
"Zápis verze patří k zařízení, ne do hlavy jednoho člověka."),
|
||
],
|
||
[
|
||
Q("Čím se firmware liší od ovladače?",
|
||
["Je v zařízení a běží i bez operačního systému",
|
||
"Je to jen soubor na ploše",
|
||
"Maže se s přeinstalací vždy",
|
||
"Umí ho jen tiskárna"],
|
||
0, "BIOS a firmware disku přežijí nový systém."),
|
||
Q("Co před aktualizací switche uložíte?",
|
||
["Konfiguraci a zajistíte napájení",
|
||
"Jen tapetu na ploše",
|
||
"Heslo Wi-Fi na tabuli",
|
||
"Nic, aktualizace si pamatuje sama"],
|
||
0, "Přerušený zápis a chybějící záloha jsou dvě pasti."),
|
||
Q("Proč neaktualizovat jádro a jediný server naráz?",
|
||
["Když obojí selže, nemáte z čeho učit ani spravovat",
|
||
"Výrobce to technicky zakazuje vždy",
|
||
"Firmware umí jen jedno zařízení na budovu",
|
||
"UPS to nesežere"],
|
||
0, "Nechte si cestu zpět."),
|
||
Q("Co po aktualizaci ověříte?",
|
||
["Že služba opravdu naběhla, ne jen že svítí dioda",
|
||
"Že je krabice teplejší",
|
||
"Že se změnila barva menu",
|
||
"Nic, firmware se neověřuje"],
|
||
0, "Start zařízení není totéž co fungující síť."),
|
||
]),
|
||
L("Měření výkonu", "Measuring performance",
|
||
"Číslo bez podmínek nic neznamená.",
|
||
"A number without the conditions means nothing.",
|
||
[
|
||
S("1 / 3 • Co měřit", "Úzké hrdlo",
|
||
"Tip: rychlý procesor nezachrání pomalý disk, na kterém systém čeká.",
|
||
"Sledujte procesor, paměť, disk a síť zvlášť.",
|
||
"Vytížení 100 % chvíli není chyba, trvale ano.",
|
||
"Fronta na disku řekne víc než otáčky ventilátoru.",
|
||
"Jedno číslo z herního testu není návrh školního serveru."),
|
||
S("2 / 3 • Podmínky", "Stejná zkouška",
|
||
"Tip: srovnávejte stejný test, stejná data a stejný čas běhu.",
|
||
"Studený start a druhý běh z cache nejsou totéž.",
|
||
"Notebook na baterii schválně zpomalí.",
|
||
"Antivirus v testu umí sežrat výsledek.",
|
||
"Zapište verzi systému i to, co na pozadí jelo."),
|
||
S("3 / 3 • Rozhodnutí", "Kdy dokoupit",
|
||
"Tip: nejdřív paměť nebo disk, ne automaticky nejnovější procesor.",
|
||
"Málo paměti žene systém na disk a všechno zpomalí.",
|
||
"Plný a pomalý disk kazí i silný procesor.",
|
||
"Slabé Wi-Fi nezrychlíte výměnou grafické karty.",
|
||
"Nákup bez měření je odhad."),
|
||
],
|
||
[
|
||
Q("Co neznamená krátká špička procesoru na 100 %?",
|
||
["Že je procesor nutně slabý",
|
||
"Že je všechno v pořádku navždy",
|
||
"Že disk neexistuje",
|
||
"Že se má hned vyměnit deska"],
|
||
0, "Záleží, jestli špička trvá a jestli na ní někdo čeká."),
|
||
Q("Proč druhý běh testu bývá rychlejší?",
|
||
["Data už jsou v cache",
|
||
"Procesor se sám přetaktuje natrvalo",
|
||
"Disk se zmenší",
|
||
"BIOS test podruhé vynechá"],
|
||
0, "Cache není výkon železa v prvním čtení."),
|
||
Q("Co často zpomalí celý systém dřív než procesor?",
|
||
["Málo paměti a pomalý disk",
|
||
"Příliš mnoho USB myš",
|
||
"Barva skříně",
|
||
"Počet ikon na ploše"],
|
||
0, "Systém pak pořád čeká na stránkování."),
|
||
Q("Co k výsledku testu patří zapsat?",
|
||
["Verze, napájení a co jelo na pozadí",
|
||
"Jen nejvyšší číslo",
|
||
"Jméno učitele",
|
||
"Heslo k BIOSu"],
|
||
0, "Bez podmínek číslo nejde zopakovat."),
|
||
]),
|
||
],
|
||
)
|
||
|
||
HW4 = course(
|
||
"hw4",
|
||
"Údržba, TPM, nákup, mobily, periferie, ekologie a maturita.",
|
||
"Maintenance, TPM, buying, mobiles, peripherals, disposal and the exam.",
|
||
[
|
||
L("Údržba", "Maintenance",
|
||
"Čištění a revize dřív, než něco shoří.",
|
||
"Cleaning and checks before something burns.",
|
||
[
|
||
S("1 / 3 • Prašnost", "Řád, ne až když hučí",
|
||
"Tip: otevřená skříň vysátá naslepo umí nasát prach dovnitř zdroje.",
|
||
"Filtry se perou dřív, než zčernají.",
|
||
"Zdroj se neotevírá. Čistí se zvenku.",
|
||
"Klávesnice a myš učebny jsou spotřební a špinavé.",
|
||
"Zápis, kdy se učebna dělala, příště určí interval."),
|
||
S("2 / 3 • Kontakty", "Uvolněný kabel vypadá jako mrtvá deska",
|
||
"Tip: než objednáte desku, domáčkněte napájení a vyzkoušejte jiný kabel obrazu.",
|
||
"Oxidy na stolních konektorech kazí obraz i USB.",
|
||
"Ohnutý konektor HDMI se do portu necpe silou.",
|
||
"Napájecí kabel s poškozenou izolací se vyřadí, nelepí páskou.",
|
||
"Prodlužovačka pod kobercem je požár, ne úspora místa."),
|
||
S("3 / 3 • Evidence", "Co ve třídě vůbec je",
|
||
"Tip: bez inventárního čísla nepoznáte, který zdroj se vrací do záruky.",
|
||
"Štítek, umístění a rok pořízení.",
|
||
"Záruka a doklad nejsou v šuplíku jednoho člověka.",
|
||
"Odepsaný stroj se nevrací do sítě s původním účtem.",
|
||
"Pravidelná prohlídka je levnější než hodina bez učebny."),
|
||
],
|
||
[
|
||
Q("Co se při údržbě se zdrojem nedělá?",
|
||
["Neotevírá se", "Omývá se mu mřížka zvenku",
|
||
"Kontroluje se kabel", "Píše se, kdy byl čištěný"],
|
||
0, "Uvnitř je napětí i po odpojení."),
|
||
Q("Co uděláte s kabelem s porušenou izolací?",
|
||
["Vyřadíte ho", "Zalepíte izolepou a vrátíte pod koberec",
|
||
"Schováte ho za skříň", "Dáte ho k žákovskému počítači"],
|
||
0, "Poškozená izolace je požár a úraz."),
|
||
Q("K čemu je inventární číslo?",
|
||
["Aby šlo dohledat záruku a umístění",
|
||
"Aby zrychlilo procesor",
|
||
"Nahrazuje heslo BIOSu",
|
||
"Je to sériové číslo Windows"],
|
||
0, "Bez něj je reklamace hádanka."),
|
||
Q("Kam nepatří odepsaný počítač?",
|
||
["Zpět do sítě s původními účty",
|
||
"Do evidence odpadu",
|
||
"K smazání disků",
|
||
"Mimo žákovskou VLAN"],
|
||
0, "Starý účet na mrtvém stroji je pořád díra, když ho někdo zapne."),
|
||
]),
|
||
L("TPM a Secure Boot", "TPM and Secure Boot",
|
||
"Železo, které hlídá start systému.",
|
||
"Hardware that watches the system start.",
|
||
[
|
||
S("1 / 3 • TPM", "Klíče mimo disk",
|
||
"Tip: TPM není heslo, které uživatel píše při každém startu.",
|
||
"Čip drží klíče použité při startu a šifrování disku.",
|
||
"Bez něj některé systémy šifrování disku odmítnou.",
|
||
"Vymazání TPM bez zálohy klíčů znamená ztrátu přístupu k disku.",
|
||
"Na virtuálu bývá TPM také virtuální a patří k tomu stroji."),
|
||
S("2 / 3 • Start", "Řetěz důvěry",
|
||
"Tip: Secure Boot a TPM řeší start, ne to, co uživatel spustí odpoledne.",
|
||
"Firmware ověří zavaděč.",
|
||
"Zavaděč ověří jádro.",
|
||
"Cizí systém z flash disku bez podpisu nenaběhne.",
|
||
"V laboratoři se výjimka zapíše, nenechá vypnutá navždy."),
|
||
S("3 / 3 • Zámek", "Kensington není šifra",
|
||
"Tip: lankový zámek zdrží odnesení, data chrání šifrování disku.",
|
||
"Zámek skříně zpomalí toho, kdo chce odnést RAM.",
|
||
"Heslo BIOSu zpomalí toho, kdo chce přeházet boot.",
|
||
"Šifra disku zastaví toho, kdo disk odnese.",
|
||
"Všechny tři vrstvy řeší jiného zloděje."),
|
||
],
|
||
[
|
||
Q("Co TPM drží?",
|
||
["Klíče pro start a šifrování",
|
||
"Zálohu všech dokumentů školy",
|
||
"Obraz monitoru",
|
||
"Seznam VLAN"],
|
||
0, "Není to úložiště souborů."),
|
||
Q("Co se stane po vymazání TPM bez zálohy klíčů?",
|
||
["Šifrovaný disk nemusí jít otevřít",
|
||
"Zrychlí se start",
|
||
"Smaže se jen spořič",
|
||
"Nic, TPM klíče nepoužívá"],
|
||
0, "Klíč v čipu bez kopie je pryč."),
|
||
Q("Co Secure Boot nezastaví?",
|
||
["Program, který uživatel spustí v už naběhlém systému",
|
||
"Nepodepsaný zavaděč",
|
||
"Cizí systém z flashe, pokud podpis chybí",
|
||
"Změnu řetězu startu"],
|
||
0, "Hlídá start, ne každé pozdější kliknutí."),
|
||
Q("Co ochrání data na odcizeném disku?",
|
||
["Šifrování disku", "Jen lankový zámek skříně",
|
||
"Heslo spořiče", "Inventární štítek"],
|
||
0, "Zámek zdrží odnesení celé skříně, ne čtení disku na jiném stroji."),
|
||
]),
|
||
L("Nákup sestavy", "Buying a computer",
|
||
"Nejdřív práce, potom krabice.",
|
||
"The work comes first, then the box.",
|
||
[
|
||
S("1 / 3 • Účel", "Učebna není střih videa",
|
||
"Tip: stejná sestava pro psaní a pro CAD je buď drahá, nebo pomalá.",
|
||
"Kancelář chce spolehlivost, ticho a dost paměti na prohlížeč.",
|
||
"Střih a CAD chtějí procesor, paměť a často grafiku.",
|
||
"Server chce ECC nebo aspoň diskové pole a správu, ne podsvícení.",
|
||
"Počet portů a dokování je součást ceny, ne doplněk potom."),
|
||
S("2 / 3 • Čísla", "Co srovnávat",
|
||
"Tip: více jader nepomůže programu, který umí jen jedno.",
|
||
"Paměť berte s rezervou na čtyři roky, ne na dnešní minimum.",
|
||
"SSD jako systémový disk je základ. Velký sklad může být pomalejší.",
|
||
"Zdroj má rezervu nad součtem štítků, ne jen přesný součet.",
|
||
"Záruka na místě je u učebny levnější než odvoz dvaceti strojů."),
|
||
S("3 / 3 • Stejnost", "Jedna image",
|
||
"Tip: dvacet různých desek znamená dvacet ovladačů.",
|
||
"Stejný model v učebně zjednoduší image i náhradní díl.",
|
||
"Dokoupit za dva roky stejnou desku často nejde. Pište, co je uvnitř.",
|
||
"Nejlevnější kus bez portů, které učebna používá, levný není.",
|
||
"Příkon a hluk patří do zadání, ne až do reklamace."),
|
||
],
|
||
[
|
||
Q("Podle čeho se volí sestava?",
|
||
["Podle práce, kterou na ní škola dělá",
|
||
"Podle barvy krabice",
|
||
"Podle nejvyššího čísla v reklamě",
|
||
"Podle počtu RGB ventilátorů"],
|
||
0, "CAD a psaní dopisu nechtějí stejné železo."),
|
||
Q("Proč v učebně stejný model?",
|
||
["Jedna image a jeden náhradní díl",
|
||
"Aby se lišily ovladače",
|
||
"Aby každý stroj bootoval jinak",
|
||
"Zákon to vyžaduje kvůli VLAN"],
|
||
0, "Různé desky znamenají různou údržbu."),
|
||
Q("Co u zdroje nestačí?",
|
||
["Součet štítků bez rezervy",
|
||
"Rezerva nad typický odběr",
|
||
"Správný formát do skříně",
|
||
"Pojistka, která sedí k rozvodu"],
|
||
0, "Špička a stárnutí se do přesného součtu nevejdou."),
|
||
Q("Co zdraží zdánlivě levný notebook?",
|
||
["Chybějící porty a dok, který musíte dokoupit",
|
||
"To, že má SSD",
|
||
"To, že má záruku",
|
||
"To, že je tichý"],
|
||
0, "Učebna bez obrazových výstupů potřebuje doky."),
|
||
]),
|
||
L("Mobilní zařízení", "Mobile devices",
|
||
"Tablet a telefon ve školní síti.",
|
||
"Tablets and phones on the school network.",
|
||
[
|
||
S("1 / 3 • Správa", "Cizí kapsy",
|
||
"Tip: telefon žáka není školní majetek a nepatří mu školní certifikát natrvalo.",
|
||
"Školní tablet se dá zapsat do správy a na dálku smazat.",
|
||
"Soukromý telefon do správy školy nepatří.",
|
||
"Účet školy na soukromém zařízení má jít odebrat.",
|
||
"Ztracený školní tablet bez správy je cizí počítač s vašimi daty."),
|
||
S("2 / 3 • Síť", "Kam ho pustit",
|
||
"Tip: telefon učitelů ve stejné VLAN jako servery je zbytečné riziko.",
|
||
"Hostovská nebo mobilní síť je oddělená.",
|
||
"Školní tablet může dostat jinou síť než návštěva.",
|
||
"Sdílené tablety se mezi žáky mažou nebo přepínají profil.",
|
||
"Nabíjení ve třídě je otázka pojistek, ne jen kabelů na stole."),
|
||
S("3 / 3 • Život", "Baterie a pád",
|
||
"Tip: cyklování baterie v nabíjecím kufru ji po dvou letech unaví.",
|
||
"Obal a popruh jsou součást nákupu, ne charita.",
|
||
"Aktualizace systému se dělají hromadně, ne podle nálady.",
|
||
"Rozbitý displej se nevrací do oběhu s trčícím sklem.",
|
||
"Evidence IMEI nebo sériového čísla patří k inventuře."),
|
||
],
|
||
[
|
||
Q("Čím se liší školní tablet od soukromého telefonu?",
|
||
["Školní jde zapsat do správy a na dálku vymazat",
|
||
"Soukromý musí mít školní certifikát navždy",
|
||
"Jsou to stejné režimy",
|
||
"Tablet nepatří do inventury"],
|
||
0, "Majetek školy se dá spravovat, kapsa žáka ne."),
|
||
Q("Kam nepatří učitelský telefon?",
|
||
["Do VLAN se servery",
|
||
"Do oddělené mobilní sítě",
|
||
"Na účet, který jde odebrat",
|
||
"Mimo žákovská data, pokud to jde"],
|
||
0, "Ztracený telefon nemá být klíč k serverům."),
|
||
Q("Co sdílený tablet mezi žáky potřebuje?",
|
||
["Mazání profilu nebo oddělené účty",
|
||
"Jedno heslo napsané na obalu",
|
||
"Trvalou složku předchozího žáka",
|
||
"Vypnuté aktualizace"],
|
||
0, "Cizí účet na dalším žákovi je únik."),
|
||
Q("Co patří do evidence tabletu?",
|
||
["Sériové číslo a umístění",
|
||
"Jen barva obalu",
|
||
"Heslo žáka",
|
||
"Soukromé fotky"],
|
||
0, "Bez čísla ho nepoznáte v kupě stejných."),
|
||
]),
|
||
L("Periferie v provozu", "Peripherals in daily use",
|
||
"Tiskárny, projektory a co se na nich láme.",
|
||
"Printers, projectors, and what actually breaks.",
|
||
[
|
||
S("1 / 3 • Projektor", "Lampa a síť",
|
||
"Tip: lampa má hodiny. Nečekejte, až praskne uprostřed hodiny.",
|
||
"Zdroj obrazu a kabel jsou častější chyba než deska.",
|
||
"Filtr projektoru se ucpe prachem a přístroj se vypne.",
|
||
"Stropní držák se dotahuje, nevěší se na něj.",
|
||
"Náhradní kabel ve třídě je levnější než přestávka."),
|
||
S("2 / 3 • Tisk", "Fronta a toner",
|
||
"Tip: prázdný toner a zaseknutý papír jsou dvě různé hlášky.",
|
||
"Sklad toneru má být suchý, ne na topení.",
|
||
"Účet tisku omezí náhodné desítky stran.",
|
||
"Síťová tiskárna se po výměně adresy musí najít znovu.",
|
||
"Servisní interval bubnu není totéž co výměna toneru."),
|
||
S("3 / 3 • Drobnosti", "Myš, sluchátka, kamera",
|
||
"Tip: bezdrátová myš bez náhradní baterie je v hodině mrtvá.",
|
||
"Sluchátka ve třídě mají být omyvatelná.",
|
||
"Kamera na dálkovou výuku chce světlo před obličejem, ne za zády.",
|
||
"USB přijímač myši ztracený v portu projektoru se špatně hledá.",
|
||
"Spotřební věci se objednávají dřív, než dojde poslední kus."),
|
||
],
|
||
[
|
||
Q("Co u projektoru kontrolovat dřív než desku?",
|
||
["Zdroj obrazu, kabel a filtr",
|
||
"Jen typ žárovky ve stropě učebny",
|
||
"Heslo Wi-Fi",
|
||
"Verzi BIOSu učitelského telefonu"],
|
||
0, "Obraz často končí na kabelu."),
|
||
Q("Čím se liší toner a buben?",
|
||
["Toner je prach s barvou, buben je díl, který obraz přenáší",
|
||
"Jsou to totéž",
|
||
"Buben se mění každý den",
|
||
"Toner je jen u inkoustové tiskárny"],
|
||
0, "Prázdný toner a unavený buben vypadají na stránce jinak."),
|
||
Q("Proč účty tisku?",
|
||
["Omezí náhodné velké tisky",
|
||
"Zvýší rozlišení",
|
||
"Nahradí papír",
|
||
"Vypnou skener"],
|
||
0, "Fronta bez limitu tiskne omylem celé knihy."),
|
||
Q("Co ve třídě dochází bez náhrady jako první?",
|
||
["Baterie, kabely a spotřební díly",
|
||
"Procesory",
|
||
"Rackové lišty",
|
||
"TPM čipy"],
|
||
0, "Drobnost zastaví hodinu stejně jako velká porucha."),
|
||
]),
|
||
L("Ekologie a data", "Disposal and data",
|
||
"Vyhozený disk pořád obsahuje školu.",
|
||
"A discarded drive still contains the school.",
|
||
[
|
||
S("1 / 3 • Disk", "Smazat neznamená vyhodit",
|
||
"Tip: rychlé formátování nechá data čitelná.",
|
||
"Před vyřazením se disk smaže tak, aby nešel běžně obnovit.",
|
||
"Nefunkční disk se fyzicky zničí, ne jen odloží.",
|
||
"SSD se maže příkazem, který buňky opravdu uvolní.",
|
||
"Potvrzení o likvidaci patří k inventuře."),
|
||
S("2 / 3 • Železo", "Není to směsný odpad",
|
||
"Tip: monitor a deska nepatří do popelnice za školou.",
|
||
"Elektroodpad se odevzdává na určené místo.",
|
||
"Baterie zvlášť, a nabobtnané ještě opatrněji.",
|
||
"Toner je taky odpad s režimem, ne koš ve sborovně.",
|
||
"Štítek s jménem žáka se před odvozem sundá."),
|
||
S("3 / 3 • Darování", "Starý stroj ven ze školy",
|
||
"Tip: darovaný počítač bez smazání účtů je dar i s přístupy.",
|
||
"Nejdřív data, potom majetek.",
|
||
"Licence vázaná na školu se nesmí odstěhovat s počítačem.",
|
||
"Zápis, komu stroj připadl, chrání školu.",
|
||
"Nefunkční dar je jen přesun odpadu."),
|
||
],
|
||
[
|
||
Q("Proč nestačí rychlé formátování?",
|
||
["Data jdou často obnovit",
|
||
"Formát disk fyzicky rozbije",
|
||
"SSD formát zakazuje",
|
||
"Smaže i TPM v jiném počítači"],
|
||
0, "Zmizí odkaz, ne obsah buněk."),
|
||
Q("Kam nepatří stará deska?",
|
||
["Do směsného koše",
|
||
"Do elektroodpadu",
|
||
"K evidované likvidaci",
|
||
"Po smazání dat, pokud se vyřazuje"],
|
||
0, "Elektroodpad má vlastní režim."),
|
||
Q("Co před darem počítače uděláte?",
|
||
["Smažete data a ověříte licence",
|
||
"Necháte účty, ať se nový majitel přihlásí",
|
||
"Jen umyjete skříň",
|
||
"Přilepíte heslo na víko"],
|
||
0, "Dar není předání školní sítě."),
|
||
Q("Čím se maže SSD líp než jedním přepisem naslepo?",
|
||
["Příkazem, který buňky opravdu uvolní",
|
||
"Smazáním koše",
|
||
"Změnou tapety",
|
||
"Vypnutím Secure Boot"],
|
||
0, "Řadič SSD přepis naslepo nemusí uložit tam, kde čekáte."),
|
||
]),
|
||
L("Metodika závady", "A fault method",
|
||
"Jedna věta, která drží celý postup.",
|
||
"One sentence that holds the whole procedure.",
|
||
[
|
||
S("1 / 3 • Příznak", "Co přesně nejde",
|
||
"Tip: ‚nejde počítač‘ může být černý obraz, špatné heslo i spadlá síť.",
|
||
"Zeptejte se, co uživatel čekal a co vidí.",
|
||
"Od kdy a jestli to jde jinde.",
|
||
"Jedna učebna, nebo jen jeden stůl.",
|
||
"Bez příznaku se mění díly naslepo."),
|
||
S("2 / 3 • Izolace", "Nejužší místo",
|
||
"Tip: fungující kabel a fungující port rozdělí chybu na dvě hromady.",
|
||
"Vyměňte kabel, port, účet nebo zařízení, vždy jen jedno.",
|
||
"Když náhradní kus funguje, původní je vinný nebo špatně nastavený.",
|
||
"Když nefunguje ani náhradní, chyba je ve společné věci.",
|
||
"Pište si mezivýsledky. Paměť po obědě lže."),
|
||
S("3 / 3 • Závěr", "Oprava a prevence",
|
||
"Tip: vyměněný kabel bez zápisu se příští měsíc tváří jako záhada.",
|
||
"Opravte příčinu, ne jen příznak na jednom stole.",
|
||
"Řekněte uživateli, co se změnilo.",
|
||
"Díly do opravy nepatří zpátky do skříně potichu.",
|
||
"Opakovaná závada chce úpravu nákupu nebo zapojení."),
|
||
],
|
||
[
|
||
Q("Co je první otázka?",
|
||
["Co přesně nejde a od kdy",
|
||
"Jakou má deska barvu",
|
||
"Jestli je ve škole VLAN 20",
|
||
"Kolik stojí nový notebook"],
|
||
0, "Příznak zužuje vrstvu, kterou budete zkoušet."),
|
||
Q("Proč měnit jen jeden díl?",
|
||
["Ať víte, který rozdíl pomohl",
|
||
"Sklad má jen jeden kabel",
|
||
"BIOS víc výměn zakazuje",
|
||
"Uživatel jinak zapomene heslo"],
|
||
0, "Dvě výměny naráz nic nedokážou."),
|
||
Q("Náhradní kabel taky nejde. Co z toho plyne?",
|
||
["Chyba je spíš ve portu, účtu nebo zařízení",
|
||
"Oba kabely jsou vždy špatné",
|
||
"Síť nemá smysl",
|
||
"Je rozbitý TPM"],
|
||
0, "Společné selhání ukazuje na společnou část."),
|
||
Q("Co patří do zápisu opravy?",
|
||
["Příznak, příčina a co se vyměnilo",
|
||
"Jen ‚hotovo‘",
|
||
"Heslo uživatele",
|
||
"Soukromý názor na učitele"],
|
||
0, "Příště podle zápisu nezačínáte od nuly."),
|
||
]),
|
||
L("Opakování k maturitě", "Exam review",
|
||
"Železo, které umíte pojmenovat a zdůvodnit.",
|
||
"Hardware you can name and justify.",
|
||
[
|
||
S("1 / 3 • Tok dat", "Od kliknutí k disku",
|
||
"Tip: maturita chce cestu, ne seznam zkratek.",
|
||
"Vstup, paměť, procesor, sběrnice, disk a výstup.",
|
||
"RAM je pracovní, disk je trvalý. Není to totéž.",
|
||
"Grafika může mít vlastní paměť a pořád jede po sběrnici.",
|
||
"Úzké hrdlo je nejpomalejší článek této cesty."),
|
||
S("2 / 3 • Spolehlivost", "Co drží učebnu",
|
||
"Tip: záloha, RAID a UPS řeší tři různé nehody.",
|
||
"RAID drží provoz při pádu disku.",
|
||
"Záloha vrátí data z jiného místa a času.",
|
||
"UPS dá čas na vypnutí.",
|
||
"Firmware a čištění jsou prevence, ne oprava po požáru."),
|
||
S("3 / 3 • Rozhodnutí", "Proč právě tahle krabice",
|
||
"Tip: umíte obhájit paměť, disk a porty pro konkrétní učebnu.",
|
||
"Kancelář, střih a server mají jiné priority.",
|
||
"Stejný model ve třídě šetří image.",
|
||
"Vyřazení začíná smazáním dat.",
|
||
"Závadu vedete od příznaku po jedné změně."),
|
||
],
|
||
[
|
||
Q("Čím se liší RAM a disk?",
|
||
["RAM je pracovní paměť, disk drží data i bez napájení",
|
||
"Jsou to totéž",
|
||
"Disk je vždy rychlejší",
|
||
"RAM se zálohuje na pásku"],
|
||
0, "Vypnutí smaže obsah RAM, ne uložený soubor na disku."),
|
||
Q("Co vrátí soubor smazaný před týdnem?",
|
||
["Záloha z dřívějšího dne, ne RAID",
|
||
"RAID 1 sám",
|
||
"UPS",
|
||
"Secure Boot"],
|
||
0, "RAID má pořád aktuální, tedy i smazaný stav."),
|
||
Q("Co dá UPS?",
|
||
["Čas na pořádné vypnutí",
|
||
"Kopii dat v jiné budově",
|
||
"Rychlejší procesor",
|
||
"Nový disk"],
|
||
0, "Baterie není archiv."),
|
||
Q("Čím začíná vyřazení počítače?",
|
||
["Smazáním dat",
|
||
"Sundáním obalu",
|
||
"Darem bez kontroly",
|
||
"Zápisem do VLAN"],
|
||
0, "Nejdřív obsah, potom plech."),
|
||
]),
|
||
],
|
||
)
|
||
|
||
COURSES = [NET2, NET3, NET4, HW2, HW3, HW4]
|
||
BACK = {
|
||
"net2": "netyears", "net3": "netyears", "net4": "netyears",
|
||
"hw2": "hwyears", "hw3": "hwyears", "hw4": "hwyears",
|
||
}
|
||
TITLE = {
|
||
"net2": "net_year2", "net3": "net_year3", "net4": "net_year4",
|
||
"hw2": "hw_year2", "hw3": "hw_year3", "hw4": "hw_year4",
|
||
}
|
||
PTR = {
|
||
"net2": "qy_net2", "net3": "qy_net3", "net4": "qy_net4",
|
||
"hw2": "qy_hw2", "hw3": "qy_hw3", "hw4": "qy_hw4",
|
||
}
|
||
|
||
|
||
def emit():
|
||
lines = [
|
||
'#include "graduately.h"',
|
||
"",
|
||
"/* Generated by scripts/gen-it-years.py. Do not edit by hand. */",
|
||
"",
|
||
]
|
||
i18n = []
|
||
pages = []
|
||
for course in COURSES:
|
||
p = course["prefix"]
|
||
i18n.append(
|
||
f' {{"{p}_sub", {c(course["sub"])}, {c(course["sub_en"])}}},'
|
||
)
|
||
for n, lesson in enumerate(course["lessons"], start=1):
|
||
i18n.append(
|
||
f' {{"{p}_unit{n}", {c(lesson["title"])}, {c(lesson["title_en"])}}},'
|
||
)
|
||
i18n.append(
|
||
f' {{"{p}_unit{n}_sub", {c(lesson["sub"])}, {c(lesson["sub_en"])}}},'
|
||
)
|
||
i18n.append(
|
||
f' {{"{p}_ex{n}_title", {c("Kvíz: " + lesson["title"])}, '
|
||
f'{c("Quiz: " + lesson["title_en"])}}},'
|
||
)
|
||
i18n.append(
|
||
f' {{"{p}_quiz{n}_head", {c("Kvíz k tématu " + lesson["title"])}, '
|
||
f'{c("Quiz on " + lesson["title_en"])}}},'
|
||
)
|
||
lines.append(f"static GtkWidget *build_{p}_unit{n}_page(void) {{")
|
||
lines.append(" static const NetSlide slides[] = {")
|
||
for kicker, title, tip, bullets in lesson["slides"]:
|
||
lines.append(" {")
|
||
lines.append(f" {c(kicker)}, {c(title)}, {c(tip)},")
|
||
lines.append(" {")
|
||
for bullet in bullets:
|
||
lines.append(f" {c(bullet)},")
|
||
lines.append(" NULL,")
|
||
lines.append(" },")
|
||
lines.append(" },")
|
||
lines.append(" };")
|
||
lines.append(
|
||
f' return quizyear_unit({PTR[p]}, {n - 1}, "{p}_unit{n}", '
|
||
f'"{p}_unit{n}_sub", slides, (int)(sizeof slides / sizeof slides[0]));'
|
||
)
|
||
lines.append("}")
|
||
lines.append("")
|
||
lines.append(f"static GtkWidget *build_{p}_unit{n}_exercise_page(void) {{")
|
||
lines.append(" static const ChoiceQ qs[] = {")
|
||
for prompt, options, correct, _hint in lesson["quiz"]:
|
||
opts = ", ".join(c(o) for o in options)
|
||
lines.append(f" {{{c(prompt)}, {{{opts}}}, 4, {correct}}},")
|
||
lines.append(" };")
|
||
lines.append(" static const char *hints[] = {")
|
||
for _prompt, _options, _correct, hint in lesson["quiz"]:
|
||
lines.append(f" {c(hint)},")
|
||
lines.append(" };")
|
||
lines.append(
|
||
f' return quizyear_quiz({PTR[p]}, {n - 1}, "{p}_ex{n}_title", '
|
||
f'"{p}_quiz{n}_head", qs, hints, (int)(sizeof qs / sizeof qs[0]));'
|
||
)
|
||
lines.append("}")
|
||
lines.append("")
|
||
pages.append((f"{p}unit{n}", f"build_{p}_unit{n}_page"))
|
||
pages.append((f"{p}ex{n}", f"build_{p}_unit{n}_exercise_page"))
|
||
|
||
lines.append("void add_it_year_pages(GtkStack *stack) {")
|
||
lines.append(" quizyear_boot();")
|
||
for course in COURSES:
|
||
p = course["prefix"]
|
||
lines.append(
|
||
f' gtk_stack_add_named(stack, quizyear_map({PTR[p]}), "{p}map");'
|
||
)
|
||
for name, fn in pages:
|
||
lines.append(f' gtk_stack_add_named(stack, {fn}(), "{name}");')
|
||
lines.append("}")
|
||
lines.append("")
|
||
|
||
(ROOT / "src" / "it_year_pages.c").write_text("\n".join(lines) + "\n", encoding="utf-8")
|
||
(ROOT / "src" / "it_years_i18n.inc").write_text("\n".join(i18n) + "\n", encoding="utf-8")
|
||
print(f"wrote {len(COURSES) * 8} lessons")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
emit()
|