Add the Next.js web app and shared lesson content.

Move lessons out of the C sources into JSON so the web client can use the same material as the desktop app, and point release builds at desktop/.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
FBukovina 2026-09-17 16:06:15 +02:00
commit f7470d333c
113 changed files with 25817 additions and 9 deletions

View file

@ -0,0 +1,178 @@
{
"id": "unit-01",
"subject": "networks",
"number": 1,
"titleKey": "net_unit1",
"subtitleKey": "net_unit1_sub",
"slides": [
{
"kicker": "1 / 4 • VLSM",
"title": "Podsíťování sítí",
"tip": "Tip: prefix /n = počet jedniček v masce. /24 = 255.255.255.0",
"lines": [
"Cíl: rozdělit jednu IP síť na menší podsítě podle počtu uzlů.",
"Pamatuj si tři role adres v každém bloku:",
"síťová = první adresa bloku",
"broadcast = poslední adresa bloku",
"uzly = vše mezi nimi (síť + 1 až broadcast − 1)"
]
},
{
"kicker": "2 / 4 • Velikosti",
"title": "Jak velký blok potřebuji?",
"tip": "Počet bitů pro uzly h = log₂(velikost), prefix = 32 − h",
"lines": [
"Pro X uzlů potřebuješ blok, do kterého se vejde X + 2 adresy (síť a broadcast).",
"Velikost bloku je vždy mocnina dvojky – vezmi nejmenší blok, který je větší nebo roven X + 2.",
"60 uzlů → 62 → blok 64 → /26",
"30 uzlů → 32 → blok 32 → /27",
"14 uzlů → 16 → blok 16 → /28",
"7 uzlů → 9 → blok 16 → /28"
]
},
{
"kicker": "3 / 4 • Postup",
"title": "Jak na to krok za krokem",
"tip": null,
"lines": [
"1. Seřaď podsítě od největší po nejmenší.",
"2. Pro každou najdi potřebný prefix.",
"3. Začni na síťové adrese ze zadání.",
"4. Rozsah podsítě = od síťové adresy po broadcast.",
"5. Rozsah uzlů = síťová + 1 až broadcast − 1.",
"6. Posuň se hned za broadcast a pokračuj dál."
]
},
{
"kicker": "4 / 4 • Příklad",
"title": "Ukázka: 10.0.0.0/24",
"tip": "A: 60 uzlů, B: 30, C: 14, D: 7",
"lines": [
"A → 10.0.0.0/26 uzly 10.0.0.1–10.0.0.62 broadcast 10.0.0.63",
"B → 10.0.0.64/27 uzly 10.0.0.65–10.0.0.94 broadcast 10.0.0.95",
"C → 10.0.0.96/28 uzly 10.0.0.97–10.0.0.110 broadcast 10.0.0.111",
"D → 10.0.0.112/28 uzly 10.0.0.113–10.0.0.126 broadcast 10.0.0.127"
]
}
],
"tasks": [
{
"number": 1,
"title": "VLSM",
"subtitleKey": "net_ex1_title",
"items": [
{
"kind": "subnet",
"scenario": "1.) Síť má adresu 10.0.0.0/24. Rozdělte ji do podsítí s následujícími požadavky:\n\nPodsíť A: 60 uzlů\nPodsíť B: 30 uzlů\nPodsíť C: 14 uzlů\nPodsíť D: 7 uzlů",
"solution": "A: 10.0.0.0/26 síť 10.0.0.0 uzly 10.0.0.1–10.0.0.62 broadcast 10.0.0.63\nB: 10.0.0.64/27 síť 10.0.0.64 uzly 10.0.0.65–10.0.0.94 broadcast 10.0.0.95\nC: 10.0.0.96/28 síť 10.0.0.96 uzly 10.0.0.97–10.0.0.110 broadcast 10.0.0.111\nD: 10.0.0.112/28 síť 10.0.0.112 uzly 10.0.0.113–10.0.0.126 broadcast 10.0.0.127",
"blocks": [
{
"prefix": 26,
"network": "10.0.0.0",
"broadcast": "10.0.0.63",
"firstHost": "10.0.0.1",
"lastHost": "10.0.0.62"
},
{
"prefix": 27,
"network": "10.0.0.64",
"broadcast": "10.0.0.95",
"firstHost": "10.0.0.65",
"lastHost": "10.0.0.94"
},
{
"prefix": 28,
"network": "10.0.0.96",
"broadcast": "10.0.0.111",
"firstHost": "10.0.0.97",
"lastHost": "10.0.0.110"
},
{
"prefix": 28,
"network": "10.0.0.112",
"broadcast": "10.0.0.127",
"firstHost": "10.0.0.113",
"lastHost": "10.0.0.126"
}
]
},
{
"kind": "subnet",
"scenario": "2.) Síť má adresu 172.16.0.0/16. Rozdělte ji do podsítí s následujícími požadavky:\n\nPodsíť A: 500 uzlů\nPodsíť B: 200 uzlů\nPodsíť C: 100 uzlů\nPodsíť D: 50 uzlů",
"solution": "A: 172.16.0.0/23 síť 172.16.0.0 uzly 172.16.0.1–172.16.1.254 broadcast 172.16.1.255\nB: 172.16.2.0/24 síť 172.16.2.0 uzly 172.16.2.1–172.16.2.254 broadcast 172.16.2.255\nC: 172.16.3.0/25 síť 172.16.3.0 uzly 172.16.3.1–172.16.3.126 broadcast 172.16.3.127\nD: 172.16.3.128/26 síť 172.16.3.128 uzly 172.16.3.129–172.16.3.190 broadcast 172.16.3.191",
"blocks": [
{
"prefix": 23,
"network": "172.16.0.0",
"broadcast": "172.16.1.255",
"firstHost": "172.16.0.1",
"lastHost": "172.16.1.254"
},
{
"prefix": 24,
"network": "172.16.2.0",
"broadcast": "172.16.2.255",
"firstHost": "172.16.2.1",
"lastHost": "172.16.2.254"
},
{
"prefix": 25,
"network": "172.16.3.0",
"broadcast": "172.16.3.127",
"firstHost": "172.16.3.1",
"lastHost": "172.16.3.126"
},
{
"prefix": 26,
"network": "172.16.3.128",
"broadcast": "172.16.3.191",
"firstHost": "172.16.3.129",
"lastHost": "172.16.3.190"
}
]
},
{
"kind": "subnet",
"scenario": "3.) Síť má adresu 192.168.10.0/24. Rozdělte ji do podsítí s následujícími požadavky:\n\nPodsíť A: 120 uzlů\nPodsíť B: 70 uzlů\nPodsíť C: 35 uzlů\nPodsíť D: 15 uzlů",
"solution": "Do sítě /24 se tyto požadavky nevejdou: A i B potřebují /25 (2 × 128 = 256 adres), na C a D už nezbude žádný blok. Při zachování velikostí by bylo nutné větší síť (např. /23).",
"blocks": null
},
{
"kind": "subnet",
"scenario": "4.) Síť má adresu 192.168.2.0/25. Rozdělte ji do podsítí s následujícími požadavky:\n\nPodsíť A: 50 uzlů\nPodsíť B: 25 uzlů\nPodsíť C: 12 uzlů\nPodsíť D: 5 uzlů",
"solution": "A: 192.168.2.0/26 síť 192.168.2.0 uzly 192.168.2.1–192.168.2.62 broadcast 192.168.2.63\nB: 192.168.2.64/27 síť 192.168.2.64 uzly 192.168.2.65–192.168.2.94 broadcast 192.168.2.95\nC: 192.168.2.96/28 síť 192.168.2.96 uzly 192.168.2.97–192.168.2.110 broadcast 192.168.2.111\nD: 192.168.2.112/28 síť 192.168.2.112 uzly 192.168.2.113–192.168.2.126 broadcast 192.168.2.127",
"blocks": [
{
"prefix": 26,
"network": "192.168.2.0",
"broadcast": "192.168.2.63",
"firstHost": "192.168.2.1",
"lastHost": "192.168.2.62"
},
{
"prefix": 27,
"network": "192.168.2.64",
"broadcast": "192.168.2.95",
"firstHost": "192.168.2.65",
"lastHost": "192.168.2.94"
},
{
"prefix": 28,
"network": "192.168.2.96",
"broadcast": "192.168.2.111",
"firstHost": "192.168.2.97",
"lastHost": "192.168.2.110"
},
{
"prefix": 28,
"network": "192.168.2.112",
"broadcast": "192.168.2.127",
"firstHost": "192.168.2.113",
"lastHost": "192.168.2.126"
}
]
}
]
}
]
}