Add hardware lessons on the case, board, cards, drives and input devices.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
pepaskopec-blip 2026-09-25 21:25:59 +02:00
commit f521904656
7 changed files with 1762 additions and 9 deletions

View file

@ -65,7 +65,7 @@ Intel Mac, jiná architektura nebo úpravy kódu → [sestavení ze zdroje](#ses
Hause): cvičení, nápovědy, vokabeltraining
- **Správa počítačových sítí** — 1. ročník, 27 lekcí (VLSM + teorie a kvízy);
ročníky 2–4 jsou zamčené
- **Technické vybavení** — 9 lekcí (architektura, historie, data v počítači, digitalizace zvuku)
- **Technické vybavení** — 29 lekcí (architektura, data, skříň a deska, karty, disky, vstupní zařízení)
- **Český jazyk a literatura** — mluvnice (20 cvičení) a maturitní četba
(82 knih: zápisky, kvíz, sestavení děje); literární teorie je zatím zamčená
- statistiky, hledání (lupa nebo `Cmd/Ctrl+K`), 10 témat, tmavý/světlý režim, čeština/angličtina
@ -259,7 +259,7 @@ Intel Mac, another architecture, or hacking on the code →
exercises, hints, vocabulary training
- **Computer networks** — year 1, 27 lessons (VLSM + theory/quizzes);
years 2–4 are locked
- **Computer hardware** — 9 lessons (architecture, history, data representation, digitizing sound)
- **Computer hardware** — 29 lessons (architecture, data, case and board, cards, drives, input devices)
- **Czech language** — grammar (20 exercises) and required reading
(82 books: notes, quiz, plot ordering); literature theory is still locked
- statistics, search (magnifier or `Cmd/Ctrl+K`), 10 palettes, dark/light mode, Czech/English

View file

@ -8,7 +8,9 @@
--- 2026-09-25
cs: Technické vybavení: pět lekcí o digitalizaci zvuku (vzorkování, kvantování, PCM)
cs: Technické vybavení: skříň, zdroj, deska, CPU, karty, disky a vstupní zařízení
en: Hardware: five lessons on digitizing sound (sampling, quantization, PCM)
en: Hardware: case, PSU, board, CPU, cards, drives and input devices
--- 2026-09-23
cs: Repozitář se jmenuje Graduately; instalátory a updater míří tam

View file

@ -1085,7 +1085,7 @@ def main() -> int:
})
hw_lessons = []
for i in range(1, 10):
for i in range(1, 30):
hw_lessons.append({
"id": i,
"titleKey": f"hw_unit{i}",

1567
src/hw.c

File diff suppressed because it is too large Load diff

View file

@ -584,6 +584,115 @@ const TrEntry tr_ui[] = {
"Quiz: aliasing and formats"},
{"hw_quiz9_head", "Kvíz k aliasingu a parametrům záznamu",
"Quiz on aliasing and recording formats"},
{"hw_unit10", "Počítačová skříň", "Computer case"},
{"hw_unit10_sub", "2 snímky o skříni, airflow a typech a pak kvíz.",
"2 slides about the case, airflow and types, then a quiz."},
{"hw_ex10_title", "Kvíz: počítačová skříň", "Quiz: computer case"},
{"hw_quiz10_head", "Kvíz k počítačové skříni", "Quiz on the computer case"},
{"hw_unit11", "Napájecí zdroj", "Power supply"},
{"hw_unit11_sub", "2 snímky o zdroji ATX a spotřebě a pak kvíz.",
"2 slides about the ATX supply and power draw, then a quiz."},
{"hw_ex11_title", "Kvíz: napájecí zdroj", "Quiz: power supply"},
{"hw_quiz11_head", "Kvíz k napájecímu zdroji", "Quiz on the power supply"},
{"hw_unit12", "Základní deska", "Motherboard"},
{"hw_unit12_sub", "2 snímky o desce, čipsetu a BIOSu a pak kvíz.",
"2 slides about the board, chipset and BIOS, then a quiz."},
{"hw_ex12_title", "Kvíz: základní deska", "Quiz: motherboard"},
{"hw_quiz12_head", "Kvíz k základní desce", "Quiz on the motherboard"},
{"hw_unit13", "Konektory a sloty", "Connectors and slots"},
{"hw_unit13_sub", "2 snímky o napájení, SATA a slotech a pak kvíz.",
"2 slides about power, SATA and slots, then a quiz."},
{"hw_ex13_title", "Kvíz: konektory a sloty", "Quiz: connectors and slots"},
{"hw_quiz13_head", "Kvíz ke konektorům a slotům",
"Quiz on connectors and slots"},
{"hw_unit14", "Operační paměti", "Memory"},
{"hw_unit14_sub", "2 snímky o RAM, SRAM a DRAM a pak kvíz.",
"2 slides about RAM, SRAM and DRAM, then a quiz."},
{"hw_ex14_title", "Kvíz: paměti", "Quiz: memory"},
{"hw_quiz14_head", "Kvíz k operačním pamětím", "Quiz on memory"},
{"hw_unit15", "Procesor", "Processor"},
{"hw_unit15_sub", "3 snímky o CPU, jádrech a chlazení a pak kvíz.",
"3 slides about the CPU, cores and cooling, then a quiz."},
{"hw_ex15_title", "Kvíz: procesor", "Quiz: processor"},
{"hw_quiz15_head", "Kvíz k procesoru", "Quiz on the processor"},
{"hw_unit16", "Přídavné karty", "Expansion cards"},
{"hw_unit16_sub", "2 snímky o kartách a slotech PCIe a pak kvíz.",
"2 slides about cards and PCIe slots, then a quiz."},
{"hw_ex16_title", "Kvíz: přídavné karty", "Quiz: expansion cards"},
{"hw_quiz16_head", "Kvíz k přídavným kartám", "Quiz on expansion cards"},
{"hw_unit17", "Grafická karta", "Graphics card"},
{"hw_unit17_sub", "3 snímky o obrazu, typech karet a cestě obrazu a pak kvíz.",
"3 slides about the image, card types and the image path, then a quiz."},
{"hw_ex17_title", "Kvíz: grafická karta", "Quiz: graphics card"},
{"hw_quiz17_head", "Kvíz ke grafické kartě", "Quiz on the graphics card"},
{"hw_unit18", "Shadery a render", "Shaders and rendering"},
{"hw_unit18_sub", "3 snímky o shaderech, renderu a CUDA a pak kvíz.",
"3 slides about shaders, rendering and CUDA, then a quiz."},
{"hw_ex18_title", "Kvíz: shadery a render", "Quiz: shaders and rendering"},
{"hw_quiz18_head", "Kvíz k shaderům a renderování",
"Quiz on shaders and rendering"},
{"hw_unit19", "Paměť a sběrnice GPU", "GPU memory and bus"},
{"hw_unit19_sub", "3 snímky o RAMDAC, GDDR a PCIe a pak kvíz.",
"3 slides about RAMDAC, GDDR and PCIe, then a quiz."},
{"hw_ex19_title", "Kvíz: paměť a sběrnice GPU", "Quiz: GPU memory and bus"},
{"hw_quiz19_head", "Kvíz k paměti a sběrnici GPU",
"Quiz on GPU memory and the bus"},
{"hw_unit20", "Rozlišení obrazu", "Display resolutions"},
{"hw_unit20_sub", "2 snímky o portech, rozlišení a SLI a pak kvíz.",
"2 slides about ports, resolutions and SLI, then a quiz."},
{"hw_ex20_title", "Kvíz: rozlišení obrazu", "Quiz: display resolutions"},
{"hw_quiz20_head", "Kvíz k rozlišení a více kartám",
"Quiz on resolutions and multi-GPU"},
{"hw_unit21", "Zvuková karta", "Sound card"},
{"hw_unit21_sub", "3 snímky o typech karet, čipu a nahrávání a pak kvíz.",
"3 slides about card types, the chip and recording, then a quiz."},
{"hw_ex21_title", "Kvíz: zvuková karta", "Quiz: sound card"},
{"hw_quiz21_head", "Kvíz ke zvukové kartě", "Quiz on the sound card"},
{"hw_unit22", "Síťová a TV karta", "Network and TV cards"},
{"hw_unit22_sub", "2 snímky o síťové a televizní kartě a pak kvíz.",
"2 slides about network and TV cards, then a quiz."},
{"hw_ex22_title", "Kvíz: síťová a TV karta", "Quiz: network and TV cards"},
{"hw_quiz22_head", "Kvíz k síťové a televizní kartě",
"Quiz on network and TV cards"},
{"hw_unit23", "Pevný disk", "Hard drive"},
{"hw_unit23_sub", "3 snímky o HDD, parametrech a struktuře dat a pak kvíz.",
"3 slides about HDDs, parameters and data layout, then a quiz."},
{"hw_ex23_title", "Kvíz: pevný disk", "Quiz: hard drive"},
{"hw_quiz23_head", "Kvíz k pevnému disku", "Quiz on the hard drive"},
{"hw_unit24", "SSD a flash", "SSD and flash"},
{"hw_unit24_sub", "3 snímky o SSD, TRIM, SSHD a USB a pak kvíz.",
"3 slides about SSD, TRIM, SSHD and USB, then a quiz."},
{"hw_ex24_title", "Kvíz: SSD a flash", "Quiz: SSD and flash"},
{"hw_quiz24_head", "Kvíz k SSD a flash paměti", "Quiz on SSD and flash"},
{"hw_unit25", "Pásky a diskety", "Tapes and floppies"},
{"hw_unit25_sub", "3 snímky o výměnných médiích, páskách a disketách a pak kvíz.",
"3 slides about removable media, tapes and floppies, then a quiz."},
{"hw_ex25_title", "Kvíz: pásky a diskety", "Quiz: tapes and floppies"},
{"hw_quiz25_head", "Kvíz k páskám a disketám", "Quiz on tapes and floppies"},
{"hw_unit26", "Optická média", "Optical media"},
{"hw_unit26_sub", "3 snímky o CD, DVD, Blu-ray a kartách a pak kvíz.",
"3 slides about CD, DVD, Blu-ray and memory cards, then a quiz."},
{"hw_ex26_title", "Kvíz: optická média", "Quiz: optical media"},
{"hw_quiz26_head", "Kvíz k optickým a flash médiím",
"Quiz on optical and flash media"},
{"hw_unit27", "Klávesnice", "Keyboard"},
{"hw_unit27_sub", "2 snímky o částech a typech klávesnic a pak kvíz.",
"2 slides about keyboard parts and types, then a quiz."},
{"hw_ex27_title", "Kvíz: klávesnice", "Quiz: keyboard"},
{"hw_quiz27_head", "Kvíz ke klávesnici", "Quiz on the keyboard"},
{"hw_unit28", "Polohovací zařízení", "Pointing devices"},
{"hw_unit28_sub", "3 snímky o myši, tabletu a touchpadu a pak kvíz.",
"3 slides about the mouse, tablet and touchpad, then a quiz."},
{"hw_ex28_title", "Kvíz: polohovací zařízení", "Quiz: pointing devices"},
{"hw_quiz28_head", "Kvíz k polohovacím zařízením",
"Quiz on pointing devices"},
{"hw_unit29", "Herní ovladače a dotyk", "Game controls and touch"},
{"hw_unit29_sub", "3 snímky o gamepadu, Kinectu a dotyku a pak kvíz.",
"3 slides about gamepads, Kinect and touch, then a quiz."},
{"hw_ex29_title", "Kvíz: herní ovladače a dotyk",
"Quiz: game controls and touch"},
{"hw_quiz29_head", "Kvíz k herním ovladačům a dotyku",
"Quiz on game controls and touch"},
{"czech_sub", "Vyberte oblast a začněte procvičovat.",
"Pick an area and start practicing."},
{"Literatura", "Literatura", "Literature"},

View file

@ -393,6 +393,9 @@ static gboolean run_smoke_test(gpointer data) {
"hwunit4", "hwex4",
"hwunit5", "hwex5", "hwunit6", "hwex6", "hwunit7", "hwex7",
"hwunit8", "hwex8", "hwunit9", "hwex9",
"hwunit10", "hwex10", "hwunit15", "hwex15",
"hwunit20", "hwex20", "hwunit25", "hwex25",
"hwunit29", "hwex29",
"unit1", "unit2", "unit3",
"u1e1", "u1e13", "u2e1", "u2e19", "u3e1", "u3e15",
"u1vocab", "u2vocab", "u3vocab",
@ -545,6 +548,46 @@ void activate(GtkApplication *app, gpointer user_data) {
gtk_stack_add_named(main_stack, build_hw_unit8_exercise_page(), "hwex8");
gtk_stack_add_named(main_stack, build_hw_unit9_page(), "hwunit9");
gtk_stack_add_named(main_stack, build_hw_unit9_exercise_page(), "hwex9");
gtk_stack_add_named(main_stack, build_hw_unit10_page(), "hwunit10");
gtk_stack_add_named(main_stack, build_hw_unit10_exercise_page(), "hwex10");
gtk_stack_add_named(main_stack, build_hw_unit11_page(), "hwunit11");
gtk_stack_add_named(main_stack, build_hw_unit11_exercise_page(), "hwex11");
gtk_stack_add_named(main_stack, build_hw_unit12_page(), "hwunit12");
gtk_stack_add_named(main_stack, build_hw_unit12_exercise_page(), "hwex12");
gtk_stack_add_named(main_stack, build_hw_unit13_page(), "hwunit13");
gtk_stack_add_named(main_stack, build_hw_unit13_exercise_page(), "hwex13");
gtk_stack_add_named(main_stack, build_hw_unit14_page(), "hwunit14");
gtk_stack_add_named(main_stack, build_hw_unit14_exercise_page(), "hwex14");
gtk_stack_add_named(main_stack, build_hw_unit15_page(), "hwunit15");
gtk_stack_add_named(main_stack, build_hw_unit15_exercise_page(), "hwex15");
gtk_stack_add_named(main_stack, build_hw_unit16_page(), "hwunit16");
gtk_stack_add_named(main_stack, build_hw_unit16_exercise_page(), "hwex16");
gtk_stack_add_named(main_stack, build_hw_unit17_page(), "hwunit17");
gtk_stack_add_named(main_stack, build_hw_unit17_exercise_page(), "hwex17");
gtk_stack_add_named(main_stack, build_hw_unit18_page(), "hwunit18");
gtk_stack_add_named(main_stack, build_hw_unit18_exercise_page(), "hwex18");
gtk_stack_add_named(main_stack, build_hw_unit19_page(), "hwunit19");
gtk_stack_add_named(main_stack, build_hw_unit19_exercise_page(), "hwex19");
gtk_stack_add_named(main_stack, build_hw_unit20_page(), "hwunit20");
gtk_stack_add_named(main_stack, build_hw_unit20_exercise_page(), "hwex20");
gtk_stack_add_named(main_stack, build_hw_unit21_page(), "hwunit21");
gtk_stack_add_named(main_stack, build_hw_unit21_exercise_page(), "hwex21");
gtk_stack_add_named(main_stack, build_hw_unit22_page(), "hwunit22");
gtk_stack_add_named(main_stack, build_hw_unit22_exercise_page(), "hwex22");
gtk_stack_add_named(main_stack, build_hw_unit23_page(), "hwunit23");
gtk_stack_add_named(main_stack, build_hw_unit23_exercise_page(), "hwex23");
gtk_stack_add_named(main_stack, build_hw_unit24_page(), "hwunit24");
gtk_stack_add_named(main_stack, build_hw_unit24_exercise_page(), "hwex24");
gtk_stack_add_named(main_stack, build_hw_unit25_page(), "hwunit25");
gtk_stack_add_named(main_stack, build_hw_unit25_exercise_page(), "hwex25");
gtk_stack_add_named(main_stack, build_hw_unit26_page(), "hwunit26");
gtk_stack_add_named(main_stack, build_hw_unit26_exercise_page(), "hwex26");
gtk_stack_add_named(main_stack, build_hw_unit27_page(), "hwunit27");
gtk_stack_add_named(main_stack, build_hw_unit27_exercise_page(), "hwex27");
gtk_stack_add_named(main_stack, build_hw_unit28_page(), "hwunit28");
gtk_stack_add_named(main_stack, build_hw_unit28_exercise_page(), "hwex28");
gtk_stack_add_named(main_stack, build_hw_unit29_page(), "hwunit29");
gtk_stack_add_named(main_stack, build_hw_unit29_exercise_page(), "hwex29");
{
typedef GtkWidget *(*NetBuilder)(void);
static const struct {

View file

@ -112,8 +112,8 @@ extern char *app_progress_cetba;
#define NET26_SLIDES 7
#define NET27_SLIDES 8
#define NET_LESSONS 27
#define HW_UNITS 10
#define HW_LESSONS 9
#define HW_UNITS 29
#define HW_LESSONS 29
#define HW_SLIDES 3
#define HW2_SLIDES 6
#define HW3_SLIDES 2
@ -884,6 +884,46 @@ GtkWidget *build_hw_unit8_page(void);
GtkWidget *build_hw_unit8_exercise_page(void);
GtkWidget *build_hw_unit9_page(void);
GtkWidget *build_hw_unit9_exercise_page(void);
GtkWidget *build_hw_unit10_page(void);
GtkWidget *build_hw_unit10_exercise_page(void);
GtkWidget *build_hw_unit11_page(void);
GtkWidget *build_hw_unit11_exercise_page(void);
GtkWidget *build_hw_unit12_page(void);
GtkWidget *build_hw_unit12_exercise_page(void);
GtkWidget *build_hw_unit13_page(void);
GtkWidget *build_hw_unit13_exercise_page(void);
GtkWidget *build_hw_unit14_page(void);
GtkWidget *build_hw_unit14_exercise_page(void);
GtkWidget *build_hw_unit15_page(void);
GtkWidget *build_hw_unit15_exercise_page(void);
GtkWidget *build_hw_unit16_page(void);
GtkWidget *build_hw_unit16_exercise_page(void);
GtkWidget *build_hw_unit17_page(void);
GtkWidget *build_hw_unit17_exercise_page(void);
GtkWidget *build_hw_unit18_page(void);
GtkWidget *build_hw_unit18_exercise_page(void);
GtkWidget *build_hw_unit19_page(void);
GtkWidget *build_hw_unit19_exercise_page(void);
GtkWidget *build_hw_unit20_page(void);
GtkWidget *build_hw_unit20_exercise_page(void);
GtkWidget *build_hw_unit21_page(void);
GtkWidget *build_hw_unit21_exercise_page(void);
GtkWidget *build_hw_unit22_page(void);
GtkWidget *build_hw_unit22_exercise_page(void);
GtkWidget *build_hw_unit23_page(void);
GtkWidget *build_hw_unit23_exercise_page(void);
GtkWidget *build_hw_unit24_page(void);
GtkWidget *build_hw_unit24_exercise_page(void);
GtkWidget *build_hw_unit25_page(void);
GtkWidget *build_hw_unit25_exercise_page(void);
GtkWidget *build_hw_unit26_page(void);
GtkWidget *build_hw_unit26_exercise_page(void);
GtkWidget *build_hw_unit27_page(void);
GtkWidget *build_hw_unit27_exercise_page(void);
GtkWidget *build_hw_unit28_page(void);
GtkWidget *build_hw_unit28_exercise_page(void);
GtkWidget *build_hw_unit29_page(void);
GtkWidget *build_hw_unit29_exercise_page(void);
void draw_chip_icon(GtkDrawingArea *area, cairo_t *cr,
int width, int height, gpointer data);
void draw_czech_flag(GtkDrawingArea *area, cairo_t *cr,