2674 lines
124 KiB
JSON
2674 lines
124 KiB
JSON
{
|
||
"schema": "esc-card-react-view.v1",
|
||
"card": {
|
||
"id": "mpabi-inf-console-bash-03-neovim",
|
||
"series": "console-bash",
|
||
"series_title": "Bash · Console Tools",
|
||
"number": "03",
|
||
"count": "08",
|
||
"slug": "neovim",
|
||
"title": "L03 · Neovim — navigation and editing",
|
||
"topic": "Nawigacja, wyszukiwanie, edycja, zapis i historia zmian",
|
||
"project": "Warsztat terminalowy",
|
||
"subject": "Informatyka",
|
||
"level": "Rok 1 · Console",
|
||
"revision_date": "2026-07-21T00:00:00+02:00",
|
||
"status": "Gotowa do wykonania",
|
||
"version": "v00.01",
|
||
"uuid": "bcbeea7b-d87a-5b1c-9364-c19edddf86ce",
|
||
"author": "M. Pabiszczak",
|
||
"year": "2026"
|
||
},
|
||
"library": {
|
||
"schema": "stem-card-library.v2",
|
||
"workspace": "edu",
|
||
"subjects": [
|
||
{
|
||
"id": "inf",
|
||
"title": "INF · Informatyka",
|
||
"current": true,
|
||
"levels": [
|
||
{
|
||
"id": "year-1",
|
||
"title": "Rok 1",
|
||
"current": true,
|
||
"series": [
|
||
{
|
||
"id": "console-bash",
|
||
"title": "Bash · Console Tools",
|
||
"current": true,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "L01",
|
||
"title": "BusyBox — the Swiss Army Knife",
|
||
"repo": "lab-console-busybox",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "01",
|
||
"version": "v00.01",
|
||
"status": "planned",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L02",
|
||
"title": "Tmux — sessions, windows and panes",
|
||
"repo": "lab-console-tmux",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "v00.01",
|
||
"status": "planned",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L03",
|
||
"title": "Neovim — navigation and editing",
|
||
"repo": "lab-console-neovim",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": true,
|
||
"number": "03",
|
||
"version": "v00.01",
|
||
"status": "planned",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L04",
|
||
"title": "Git Basics I — status, add and commit",
|
||
"repo": "lab-console-git-basics-1",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "L05",
|
||
"title": "Git Basics II — log, diff and restore",
|
||
"repo": "lab-console-git-basics-2",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "L06",
|
||
"title": "Git Branching I — branch, switch and merge",
|
||
"repo": "lab-console-git-branching-1",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "L07",
|
||
"title": "Git Branching II — rebase and conflicts",
|
||
"repo": "lab-console-git-branching-2",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "L08",
|
||
"title": "Docker Fundamentals",
|
||
"repo": "lab-console-docker",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "rv32i-asm",
|
||
"title": "ASM · RV32I From Blinker to RISC-V",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "L01",
|
||
"title": "Number Systems and Storage",
|
||
"repo": "lab-rv32i-asm-number-systems",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "01",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "L02",
|
||
"title": "FPGA Bring-up and Programming",
|
||
"repo": "lab-rv32i-asm-fpga-bringup",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "L03",
|
||
"title": "Blinker and Synchronous Logic",
|
||
"repo": "lab-rv32i-asm-blinker",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "03",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L04",
|
||
"title": "The RISC-V ISA and Instruction Decoder",
|
||
"repo": "lab-rv32i-asm-decoder",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L05",
|
||
"title": "ALU and the Verilog Assembler",
|
||
"repo": "lab-rv32i-asm-alu",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L06",
|
||
"title": "Control Flow — Jumps and Branches",
|
||
"repo": "lab-rv32i-asm-control-flow",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L07",
|
||
"title": "Addresses and Memory",
|
||
"repo": "lab-rv32i-asm-addresses-memory",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L08",
|
||
"title": "Subroutines and ABI",
|
||
"repo": "lab-rv32i-asm-subroutines-abi",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "L09",
|
||
"title": "Load and Store Semantics",
|
||
"repo": "lab-rv32i-asm-load-store",
|
||
"href": "http://localhost:8080",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "09",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "c",
|
||
"title": "C · Freestanding RV32I and K&R",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "C01",
|
||
"title": "ASM, C and GCC",
|
||
"repo": "lab-rv32i-strlen-asm-c-gcc",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/852fa3c7-8329-583a-a244-b639d2e04495",
|
||
"local_href": "/852fa3c7-8329-583a-a244-b639d2e04495/",
|
||
"resource_uuid": "852fa3c7-8329-583a-a244-b639d2e04495",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "01",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Ręczna implementacja RV32I ASM"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "Referencyjna implementacja w C"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "ASM wyemitowany przez GCC"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C02",
|
||
"title": ".bss, .data and static storage",
|
||
"repo": "lab-rv32i-strlen-bss-data-stack",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/74afa921-fb51-5017-bcdb-f6e84fb444d8",
|
||
"local_href": "/74afa921-fb51-5017-bcdb-f6e84fb444d8/",
|
||
"resource_uuid": "74afa921-fb51-5017-bcdb-f6e84fb444d8",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Wynik strlen w .bss"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "Wynik i napis w .data"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "Nieużyta tablica lokalna"
|
||
},
|
||
{
|
||
"id": "task04",
|
||
"title": "Użyta tablica lokalna i stack frame"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C03",
|
||
"title": "ABI and Stack Frame",
|
||
"repo": "lab-rv32i-strlen-abi-stack",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/72b22a0a-3297-5d75-a6ff-d1af48132d6c",
|
||
"local_href": "/72b22a0a-3297-5d75-a6ff-d1af48132d6c/",
|
||
"resource_uuid": "72b22a0a-3297-5d75-a6ff-d1af48132d6c",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "03",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Argument i wynik bez powrotu z main"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "Pełny stack frame i zachowanie ra"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C04",
|
||
"title": "Types, Operators and Expressions",
|
||
"repo": "lab-rv32i-c-types-operators-expressions",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/7818aa68-4983-5aca-bf7f-541cfce5c601",
|
||
"local_href": "/7818aa68-4983-5aca-bf7f-541cfce5c601/",
|
||
"resource_uuid": "7818aa68-4983-5aca-bf7f-541cfce5c601",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Nazwy i stałe symboliczne"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "Typy i zakresy"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "Stałe, długość i enum"
|
||
},
|
||
{
|
||
"id": "task04",
|
||
"title": "Deklaracje, inicjalizacja i const"
|
||
},
|
||
{
|
||
"id": "task05",
|
||
"title": "Arytmetyka i rok przestępny"
|
||
},
|
||
{
|
||
"id": "task06",
|
||
"title": "Porównania i logika"
|
||
},
|
||
{
|
||
"id": "task07",
|
||
"title": "Konwersje: atoi, lower i htoi"
|
||
},
|
||
{
|
||
"id": "task08",
|
||
"title": "Inkrementacja i operacje na napisach"
|
||
},
|
||
{
|
||
"id": "task09",
|
||
"title": "Operatory bitowe"
|
||
},
|
||
{
|
||
"id": "task10",
|
||
"title": "Przypisania i bitcount"
|
||
},
|
||
{
|
||
"id": "task11",
|
||
"title": "Operator warunkowy"
|
||
},
|
||
{
|
||
"id": "task12",
|
||
"title": "Priorytet i kolejność obliczeń"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C05",
|
||
"title": "Control Flow",
|
||
"repo": "lab-rv32i-c-control-flow",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/7512361d-e5e6-5c08-ab18-8be29dacdc10",
|
||
"local_href": "/7512361d-e5e6-5c08-ab18-8be29dacdc10/",
|
||
"resource_uuid": "7512361d-e5e6-5c08-ab18-8be29dacdc10",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Instrukcje i bloki"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "if-else i dangling else"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "else-if i wyszukiwanie binarne"
|
||
},
|
||
{
|
||
"id": "task04",
|
||
"title": "switch: escape i unescape"
|
||
},
|
||
{
|
||
"id": "task05",
|
||
"title": "while, for i Shell sort"
|
||
},
|
||
{
|
||
"id": "task06",
|
||
"title": "do-while i itoa"
|
||
},
|
||
{
|
||
"id": "task07",
|
||
"title": "break i continue"
|
||
},
|
||
{
|
||
"id": "task08",
|
||
"title": "goto i etykiety"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C06",
|
||
"title": "Functions and Program Structure",
|
||
"repo": "lab-rv32i-c-functions-program-structure",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/9667818d-b691-501d-817c-b58be4cbd594",
|
||
"local_href": "/9667818d-b691-501d-817c-b58be4cbd594/",
|
||
"resource_uuid": "9667818d-b691-501d-817c-b58be4cbd594",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Funkcje i strindex"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "double i atof z wykładnikiem"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "Zewnętrzny stos RPN"
|
||
},
|
||
{
|
||
"id": "task04",
|
||
"title": "Scope i extern"
|
||
},
|
||
{
|
||
"id": "task05",
|
||
"title": "Nagłówki i prototypy"
|
||
},
|
||
{
|
||
"id": "task06",
|
||
"title": "Static storage"
|
||
},
|
||
{
|
||
"id": "task07",
|
||
"title": "Zmienne register"
|
||
},
|
||
{
|
||
"id": "task08",
|
||
"title": "Struktura blokowa"
|
||
},
|
||
{
|
||
"id": "task09",
|
||
"title": "Inicjalizacja"
|
||
},
|
||
{
|
||
"id": "task10",
|
||
"title": "Rekurencja i quicksort"
|
||
},
|
||
{
|
||
"id": "task11",
|
||
"title": "Preprocesor i makra"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C07",
|
||
"title": "Pointers, Arrays and Linear Allocator",
|
||
"repo": "lab-rv32i-c-pointers-arrays",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/98dbe323-c624-53d6-9fe2-4ee688c44b38",
|
||
"local_href": "/98dbe323-c624-53d6-9fe2-4ee688c44b38/",
|
||
"resource_uuid": "98dbe323-c624-53d6-9fe2-4ee688c44b38",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "task01"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "task02"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "task03"
|
||
},
|
||
{
|
||
"id": "task04",
|
||
"title": "K&R 5.4 -- Linear Memory Allocator"
|
||
},
|
||
{
|
||
"id": "task05",
|
||
"title": "task05"
|
||
},
|
||
{
|
||
"id": "task06",
|
||
"title": "task06"
|
||
},
|
||
{
|
||
"id": "task07",
|
||
"title": "task07"
|
||
},
|
||
{
|
||
"id": "task08",
|
||
"title": "task08"
|
||
},
|
||
{
|
||
"id": "task09",
|
||
"title": "task09"
|
||
},
|
||
{
|
||
"id": "task10",
|
||
"title": "task10"
|
||
},
|
||
{
|
||
"id": "task11",
|
||
"title": "task11"
|
||
},
|
||
{
|
||
"id": "task12",
|
||
"title": "task12"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C08",
|
||
"title": "Structures and Linked State",
|
||
"repo": "lab-rv32i-c-structures",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/f60fbba3-a788-5f1e-bc24-52af82f227c9",
|
||
"local_href": "/f60fbba3-a788-5f1e-bc24-52af82f227c9/",
|
||
"resource_uuid": "f60fbba3-a788-5f1e-bc24-52af82f227c9",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Układ BlockHeader"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "Nagłówek, payload i odzyskanie właściciela"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "Intruzywna lista wolnych bloków"
|
||
},
|
||
{
|
||
"id": "task04",
|
||
"title": "Wyrównana arena dwóch bloków"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C09",
|
||
"title": "smalloc, sbrk and minimal libc",
|
||
"repo": "lab-rv32i-c-smalloc-sbrk-libc",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0",
|
||
"local_href": "/8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0/",
|
||
"resource_uuid": "8e4f8bee-41f0-523b-8ea2-8926bd3d7ab0",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "09",
|
||
"version": "v00.01",
|
||
"status": "planned",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "strlen z libc bez sterty"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "Kontrolowany brak dostawcy sbrk"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "Bounded sbrk i atomowy błąd"
|
||
},
|
||
{
|
||
"id": "task04",
|
||
"title": "Wyrównany smalloc append-only"
|
||
},
|
||
{
|
||
"id": "task05",
|
||
"title": "malloc/free picolibc jako czarna skrzynka"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C10",
|
||
"title": "RV32I Traps and Interrupt Control",
|
||
"repo": "lab-rv32i-c-interrupts",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8fb9c110-557b-5081-8ae2-a56800f872e8",
|
||
"local_href": "/8fb9c110-557b-5081-8ae2-a56800f872e8/",
|
||
"resource_uuid": "8fb9c110-557b-5081-8ae2-a56800f872e8",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "10",
|
||
"version": "v00.01",
|
||
"status": "planned",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "ECALL i wznowienie pod mepc+4"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "Machine software IRQ i clear źródła"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "Macierz pending, MSIE i MIE"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C11",
|
||
"title": "Machine Timer and Periodic Work",
|
||
"repo": "lab-rv32i-c-timer",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "11",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "C12",
|
||
"title": "UART — polling and interrupts",
|
||
"repo": "lab-rv32i-c-uart",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/64f7c516-78b1-58ee-8619-a82d7061079f",
|
||
"local_href": "/64f7c516-78b1-58ee-8619-a82d7061079f/",
|
||
"resource_uuid": "64f7c516-78b1-58ee-8619-a82d7061079f",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "12",
|
||
"version": "v00.01",
|
||
"status": "planned",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Polling jednego bajtu"
|
||
},
|
||
{
|
||
"id": "task02",
|
||
"title": "Odbiór R przez external IRQ 16"
|
||
},
|
||
{
|
||
"id": "task03",
|
||
"title": "Jednokomórkowa skrzynka drop-newest"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "C13",
|
||
"title": "GPIO, Edges and Debounce",
|
||
"repo": "lab-rv32i-c-gpio",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "13",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "year-2",
|
||
"title": "Rok 2",
|
||
"current": false,
|
||
"series": [
|
||
{
|
||
"id": "cpp",
|
||
"title": "C++",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "CPP01",
|
||
"title": "Translation Units, Linkage and Namespaces",
|
||
"repo": "lab-cpp-build-namespaces",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "01",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP02",
|
||
"title": "Classes, Encapsulation and Invariants",
|
||
"repo": "lab-cpp-classes-invariants",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP03",
|
||
"title": "Construction, Destruction and RAII",
|
||
"repo": "lab-cpp-lifetime-raii",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "03",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP04",
|
||
"title": "References, const and Value Categories",
|
||
"repo": "lab-cpp-references-const",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP05",
|
||
"title": "Copy, Move and the Rule of Zero/Five",
|
||
"repo": "lab-cpp-copy-move",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP06",
|
||
"title": "Ownership and Resource Types",
|
||
"repo": "lab-cpp-ownership",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP07",
|
||
"title": "Function and Class Templates",
|
||
"repo": "lab-cpp-templates",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP08",
|
||
"title": "Static Polymorphism and CRTP",
|
||
"repo": "lab-cpp-static-polymorphism",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP09",
|
||
"title": "Inheritance, Interfaces and Dynamic Dispatch",
|
||
"repo": "lab-cpp-dynamic-polymorphism",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "09",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP10",
|
||
"title": "Operator Overloading and Strong Types",
|
||
"repo": "lab-cpp-strong-types",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "10",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP11",
|
||
"title": "Containers, Iterators and Algorithms",
|
||
"repo": "lab-cpp-containers-iterators",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "11",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP12",
|
||
"title": "Lambdas, Function Objects and Callables",
|
||
"repo": "lab-cpp-lambdas-callables",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "12",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP13",
|
||
"title": "Error Models with and without Exceptions",
|
||
"repo": "lab-cpp-error-models",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "13",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP14",
|
||
"title": "Object Layout, ABI and Binary Evidence",
|
||
"repo": "lab-cpp-abi-evidence",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "14",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "CPP15",
|
||
"title": "Resource-type Integration Project",
|
||
"repo": "lab-cpp-resource-integration",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "15",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "freertos-c",
|
||
"title": "FreeRTOS C",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "FC01",
|
||
"title": "heap_4: From Linear Cursor to Reusable Blocks",
|
||
"repo": "lab-rv32i-freertos-heap4",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/aea09ab7-9bfd-5368-8d1b-c8724871c1a7",
|
||
"local_href": "/aea09ab7-9bfd-5368-8d1b-c8724871c1a7/",
|
||
"resource_uuid": "aea09ab7-9bfd-5368-8d1b-c8724871c1a7",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "01",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Predict and prove reusable heap_4 blocks"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC02",
|
||
"title": "First Task, TCB and Task Stack",
|
||
"repo": "lab-rv32i-freertos-c-first-task",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/a2538a1a-3c37-4c14-a6ea-db5aba8fd038",
|
||
"local_href": "/a2538a1a-3c37-4c14-a6ea-db5aba8fd038/",
|
||
"resource_uuid": "a2538a1a-3c37-4c14-a6ea-db5aba8fd038",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Pierwszy task FreeRTOS — callback, context, TCB i stos"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC03",
|
||
"title": "Tick, Scheduler, Priorities and Time Slicing",
|
||
"repo": "lab-rv32i-freertos-c-scheduler",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2214a13f-34c6-40a1-a561-70a00ec98285",
|
||
"local_href": "/2214a13f-34c6-40a1-a561-70a00ec98285/",
|
||
"resource_uuid": "2214a13f-34c6-40a1-a561-70a00ec98285",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "03",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Kontrolowany eksperyment schedulera FreeRTOS"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC04",
|
||
"title": "Delay, Blocking and Task States",
|
||
"repo": "lab-rv32i-freertos-c-delay-state",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/4a7ef04c-ab08-5783-9192-5b02a90f05f8",
|
||
"local_href": "/4a7ef04c-ab08-5783-9192-5b02a90f05f8/",
|
||
"resource_uuid": "4a7ef04c-ab08-5783-9192-5b02a90f05f8",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Delay, blokowanie, zawieszenie i self-delete"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC05",
|
||
"title": "Queues and Byte-copy Semantics",
|
||
"repo": "lab-rv32i-freertos-c-queue",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/8ee8f36a-471b-51bc-97b8-e204bd541c61",
|
||
"local_href": "/8ee8f36a-471b-51bc-97b8-e204bd541c61/",
|
||
"resource_uuid": "8ee8f36a-471b-51bc-97b8-e204bd541c61",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Kolejka długości 1: empty, full, copy i FIFO"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC06",
|
||
"title": "Software Timers and the Daemon Task",
|
||
"repo": "lab-rv32i-freertos-c-software-timers",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/ab188300-f03d-5ddb-8316-b9534876a5bc",
|
||
"local_href": "/ab188300-f03d-5ddb-8316-b9534876a5bc/",
|
||
"resource_uuid": "ab188300-f03d-5ddb-8316-b9534876a5bc",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "One-shot, auto-reload i timer daemon"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC07",
|
||
"title": "Interrupt-safe API and Semaphore Handoff",
|
||
"repo": "lab-rv32i-freertos-c-isr-semaphore",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/a6da1075-8d1f-5615-b0e6-0fc33e59e1e3",
|
||
"local_href": "/a6da1075-8d1f-5615-b0e6-0fc33e59e1e3/",
|
||
"resource_uuid": "a6da1075-8d1f-5615-b0e6-0fc33e59e1e3",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "External IRQ → FromISR semaphore → high-priority task"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC08",
|
||
"title": "Critical Sections, Mutexes and Priority Inheritance",
|
||
"repo": "lab-rv32i-freertos-c-resource-management",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2392f81a-ed6c-510b-86b5-06c5e2f1c6aa",
|
||
"local_href": "/2392f81a-ed6c-510b-86b5-06c5e2f1c6aa/",
|
||
"resource_uuid": "2392f81a-ed6c-510b-86b5-06c5e2f1c6aa",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Low/Medium/High: ownership i dziedziczenie priorytetu"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC09",
|
||
"title": "Event Groups and Multi-event Synchronization",
|
||
"repo": "lab-rv32i-freertos-c-event-groups",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/3f4c1b8b-d54b-58d5-b92d-87a7233cbd9f",
|
||
"local_href": "/3f4c1b8b-d54b-58d5-b92d-87a7233cbd9f/",
|
||
"resource_uuid": "3f4c1b8b-d54b-58d5-b92d-87a7233cbd9f",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "09",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "ALL-ready i trzyosobowa bariera"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC10",
|
||
"title": "Direct-to-task Notifications",
|
||
"repo": "lab-rv32i-freertos-c-notifications",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/3b57334e-2c35-5207-a51d-9321906db078",
|
||
"local_href": "/3b57334e-2c35-5207-a51d-9321906db078/",
|
||
"resource_uuid": "3b57334e-2c35-5207-a51d-9321906db078",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "10",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Count, overwrite i bit flags na jednym slocie"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC11",
|
||
"title": "Static Allocation and Bounded Storage",
|
||
"repo": "lab-rv32i-freertos-c-static-allocation",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/f4d7caf3-d665-5a2d-b9eb-39a120a64ff7",
|
||
"local_href": "/f4d7caf3-d665-5a2d-b9eb-39a120a64ff7/",
|
||
"resource_uuid": "f4d7caf3-d665-5a2d-b9eb-39a120a64ff7",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "11",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Same behavior, two storage policies"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC12",
|
||
"title": "Assertions, Hooks, Stack Checks and Runtime Diagnostics",
|
||
"repo": "lab-rv32i-freertos-c-diagnostics",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/c3027314-85a4-5e4a-af13-0939c7467a62",
|
||
"local_href": "/c3027314-85a4-5e4a-af13-0939c7467a62/",
|
||
"resource_uuid": "c3027314-85a4-5e4a-af13-0939c7467a62",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "12",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Diagnose before changing the program"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC13",
|
||
"title": "UART Interrupt-to-task Pipeline",
|
||
"repo": "lab-rv32i-freertos-c-uart",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/6a838fd1-ab1b-52b6-baaf-659120a4d60a",
|
||
"local_href": "/6a838fd1-ab1b-52b6-baaf-659120a4d60a/",
|
||
"resource_uuid": "6a838fd1-ab1b-52b6-baaf-659120a4d60a",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "13",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Build and prove a bounded UART RX pipeline"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC14",
|
||
"title": "GPIO, Hardware Timer and Deferred Work",
|
||
"repo": "lab-rv32i-freertos-c-gpio-timer",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/0cc561df-bf81-5bba-9df1-c872d5b42eb8",
|
||
"local_href": "/0cc561df-bf81-5bba-9df1-c872d5b42eb8/",
|
||
"resource_uuid": "0cc561df-bf81-5bba-9df1-c872d5b42eb8",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "14",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Prove one machine-timer event from ISR to daemon GPIO work"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "FC15",
|
||
"title": "Integrated Deterministic FreeRTOS C Application",
|
||
"repo": "lab-rv32i-freertos-c-integration",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/fe92efeb-3c38-5975-86d8-ed630e1ad3bb",
|
||
"local_href": "/fe92efeb-3c38-5975-86d8-ed630e1ad3bb/",
|
||
"resource_uuid": "fe92efeb-3c38-5975-86d8-ed630e1ad3bb",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "15",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Prove one complete FreeRTOS C architecture"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "freertos-cpp",
|
||
"title": "FreeRTOS C++",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "K02",
|
||
"title": "C++ Task<Derived> Wrapper, CRTP and Lifecycle",
|
||
"repo": "lab-rv32i-freertos-task-stack-vector",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/948ce9fd-3d0c-5721-a0ae-ef422008fec8",
|
||
"local_href": "/948ce9fd-3d0c-5721-a0ae-ef422008fec8/",
|
||
"resource_uuid": "948ce9fd-3d0c-5721-a0ae-ef422008fec8",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "v00.04",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "C++ Task wrapper — OOP i debugowanie cyklu życia"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K03",
|
||
"title": "Vector V1 — Destructor, Move, Ownership and RAII",
|
||
"repo": "lab-rv32i-freertos-vector-raii",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/de1a2818-4c30-5760-8b31-255114f82e90",
|
||
"local_href": "/de1a2818-4c30-5760-8b31-255114f82e90/",
|
||
"resource_uuid": "de1a2818-4c30-5760-8b31-255114f82e90",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "03",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Vector V1 — transfer własności i powrót heapu"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K04",
|
||
"title": "Scheduler States, Priorities and Typed Ticks",
|
||
"repo": "lab-rv32i-freertos-scheduler-states",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/853a7dd7-b00b-4f4a-96e8-c160fc5bb04a",
|
||
"local_href": "/853a7dd7-b00b-4f4a-96e8-c160fc5bb04a/",
|
||
"resource_uuid": "853a7dd7-b00b-4f4a-96e8-c160fc5bb04a",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Osiem snapshotów decyzji schedulera"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K05",
|
||
"title": "C++ Heap Bridge, Heap Models and HeapStats",
|
||
"repo": "lab-rv32i-freertos-heap-models",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/c456b505-dc5c-4894-b832-bb4c5afd0feb",
|
||
"local_href": "/c456b505-dc5c-4894-b832-bb4c5afd0feb/",
|
||
"resource_uuid": "c456b505-dc5c-4894-b832-bb4c5afd0feb",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Fragmentacja, koalescencja i historyczny watermark"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K06",
|
||
"title": "MemoryResource and FreeRtosAllocator<T>",
|
||
"repo": "lab-rv32i-freertos-allocator-resource",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/1af48a2e-8564-4e18-8115-b2c0208169d6",
|
||
"local_href": "/1af48a2e-8564-4e18-8115-b2c0208169d6/",
|
||
"resource_uuid": "1af48a2e-8564-4e18-8115-b2c0208169d6",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Dwa zasoby, jeden typed allocator"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K07",
|
||
"title": "TaskHandle_t, Explicit Start and Static Trampoline",
|
||
"repo": "lab-rv32i-freertos-task-wrapper",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/9bffead0-4341-4350-806d-e975b1a3a08f",
|
||
"local_href": "/9bffead0-4341-4350-806d-e975b1a3a08f/",
|
||
"resource_uuid": "9bffead0-4341-4350-806d-e975b1a3a08f",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Stabilny obiekt przez statyczny trampoline"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K08",
|
||
"title": "DynamicTask, StaticTask, Deletion and Lifetime",
|
||
"repo": "lab-rv32i-freertos-static-task",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/d9e45417-a37f-487c-813f-fc7a44d4b4f3",
|
||
"local_href": "/d9e45417-a37f-487c-813f-fc7a44d4b4f3/",
|
||
"resource_uuid": "d9e45417-a37f-487c-813f-fc7a44d4b4f3",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Dwie polityki storage i pełna oś delete"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K09",
|
||
"title": "Scheduler Facade and Scoped Kernel Guards",
|
||
"repo": "lab-rv32i-freertos-kernel-facade",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/6a2ab068-17e7-4bfa-b726-2df37787ed69",
|
||
"local_href": "/6a2ab068-17e7-4bfa-b726-2df37787ed69/",
|
||
"resource_uuid": "6a2ab068-17e7-4bfa-b726-2df37787ed69",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "09",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Fasada kernela i restore na każdej ścieżce"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K10",
|
||
"title": "Queue<T> and StaticQueue<T, N>",
|
||
"repo": "lab-rv32i-freertos-queue",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/66967c2d-bb34-4344-8064-f54d06cce47a",
|
||
"local_href": "/66967c2d-bb34-4344-8064-f54d06cce47a/",
|
||
"resource_uuid": "66967c2d-bb34-4344-8064-f54d06cce47a",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "10",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Typed byte-copy queue z dwiema politykami storage"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K11",
|
||
"title": "Mutex, LockGuard and Priority Inheritance",
|
||
"repo": "lab-rv32i-freertos-mutex",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/34d7ad61-6b03-4922-8e58-b8b98316e5f7",
|
||
"local_href": "/34d7ad61-6b03-4922-8e58-b8b98316e5f7/",
|
||
"resource_uuid": "34d7ad61-6b03-4922-8e58-b8b98316e5f7",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "11",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "LockGuard i zmierzone priority inheritance"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K12",
|
||
"title": "Semaphores and Task Notifications",
|
||
"repo": "lab-rv32i-freertos-semaphore-notify",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/fcb6107c-268f-4e86-a8cc-092e5875f6f0",
|
||
"local_href": "/fcb6107c-268f-4e86-a8cc-092e5875f6f0/",
|
||
"resource_uuid": "fcb6107c-268f-4e86-a8cc-092e5875f6f0",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "12",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Semaphore slots i jednoodbiorcza notification"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K13",
|
||
"title": "EventGroup and Coordinated State",
|
||
"repo": "lab-rv32i-freertos-event-group",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/5fbcd7c6-3a73-4cd2-b76c-bdb016d1daaa",
|
||
"local_href": "/5fbcd7c6-3a73-4cd2-b76c-bdb016d1daaa/",
|
||
"resource_uuid": "5fbcd7c6-3a73-4cd2-b76c-bdb016d1daaa",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "13",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Typed EventGroup i trzy źródła stanu"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K14",
|
||
"title": "Software Timer and the Timer Daemon Task",
|
||
"repo": "lab-rv32i-freertos-sw-timer",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/78db37df-63e5-4c5b-80ce-f73a411f0b50",
|
||
"local_href": "/78db37df-63e5-4c5b-80ce-f73a411f0b50/",
|
||
"resource_uuid": "78db37df-63e5-4c5b-80ce-f73a411f0b50",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "14",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "Static one-shot i periodic timer na daemon tasku"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K15",
|
||
"title": "Explicit FromISR, UART and GPIO Wrappers",
|
||
"repo": "lab-rv32i-freertos-isr-drivers",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/02f6cd71-5c85-4883-a237-1d4ba08d9469",
|
||
"local_href": "/02f6cd71-5c85-4883-a237-1d4ba08d9469/",
|
||
"resource_uuid": "02f6cd71-5c85-4883-a237-1d4ba08d9469",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "15",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "UART queue i GPIO notify z realnego IRQ"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "K16",
|
||
"title": "Integrated Real-time Application and Evidence",
|
||
"repo": "lab-rv32i-freertos-integration",
|
||
"href": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/05b4f486-a27c-455d-a315-f4e51a4c66b3",
|
||
"local_href": "/05b4f486-a27c-455d-a315-f4e51a4c66b3/",
|
||
"resource_uuid": "05b4f486-a27c-455d-a315-f4e51a4c66b3",
|
||
"available": true,
|
||
"current": false,
|
||
"number": "16",
|
||
"version": "v00.01",
|
||
"status": "existing",
|
||
"tasks": [
|
||
{
|
||
"id": "task01",
|
||
"title": "End-to-end RTOS service i evidence report"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "posix-threads",
|
||
"title": "POSIX Threads",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "PT01",
|
||
"title": "Process and Thread Execution Context",
|
||
"repo": "lab-posix-process-thread",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "01",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT02",
|
||
"title": "pthread_create, pthread_join and Lifecycle",
|
||
"repo": "lab-posix-pthread-create-join",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT03",
|
||
"title": "Arguments, Return Values and Ownership",
|
||
"repo": "lab-posix-thread-arguments",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "03",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT04",
|
||
"title": "Data Races and the Happens-before Question",
|
||
"repo": "lab-posix-data-races",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT05",
|
||
"title": "Mutex, Critical Section and Deadlock",
|
||
"repo": "lab-posix-mutex",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT06",
|
||
"title": "Condition Variables and Predicates",
|
||
"repo": "lab-posix-condition-variable",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT07",
|
||
"title": "Bounded Producer–Consumer Queue",
|
||
"repo": "lab-posix-producer-consumer",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT08",
|
||
"title": "POSIX Semaphores",
|
||
"repo": "lab-posix-semaphore",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT09",
|
||
"title": "Reader–Writer Lock",
|
||
"repo": "lab-posix-rwlock",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "09",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT10",
|
||
"title": "C Atomics and Memory Ordering",
|
||
"repo": "lab-posix-atomics",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "10",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT11",
|
||
"title": "Cancellation, Cleanup and Safe Shutdown",
|
||
"repo": "lab-posix-cancellation-cleanup",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "11",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT12",
|
||
"title": "Thread-local Storage",
|
||
"repo": "lab-posix-thread-local",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "12",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT13",
|
||
"title": "Scheduling Policy, Priority and Affinity",
|
||
"repo": "lab-posix-scheduling",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "13",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT14",
|
||
"title": "GDB, Sanitizers and Race Evidence",
|
||
"repo": "lab-posix-thread-debugging",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "14",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "PT15",
|
||
"title": "POSIX Threads vs FreeRTOS Integration",
|
||
"repo": "lab-posix-freertos-comparison",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "15",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "oop",
|
||
"title": "OOP and Design Patterns",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "reference",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "OOP01",
|
||
"title": "Strategy — Replaceable Behaviour",
|
||
"repo": "lab-cpp-oop-strategy",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "01",
|
||
"version": "",
|
||
"status": "design",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP02",
|
||
"title": "Adapter — Stable Boundary",
|
||
"repo": "lab-cpp-oop-adapter",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP03",
|
||
"title": "Template Method — Fixed Skeleton",
|
||
"repo": "lab-cpp-oop-template-method",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "03",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP04",
|
||
"title": "Static vs Dynamic Dispatch",
|
||
"repo": "lab-cpp-oop-dispatch",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP05",
|
||
"title": "RAII and Ownership",
|
||
"repo": "lab-cpp-oop-raii",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP06",
|
||
"title": "State — Explicit Behaviour",
|
||
"repo": "lab-cpp-oop-state",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP07",
|
||
"title": "Facade — Subsystem Boundary",
|
||
"repo": "lab-cpp-oop-facade",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP08",
|
||
"title": "Command — Request as Object",
|
||
"repo": "lab-cpp-oop-command",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP09",
|
||
"title": "Observer — Subscription and Telemetry",
|
||
"repo": "lab-cpp-oop-observer",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "09",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP10",
|
||
"title": "Factory Method — Resource Policy",
|
||
"repo": "lab-cpp-oop-factory-method",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "10",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP11",
|
||
"title": "Builder — Valid Configuration",
|
||
"repo": "lab-cpp-oop-builder",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "11",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP12",
|
||
"title": "Decorator — Measurement and Diagnostics",
|
||
"repo": "lab-cpp-oop-decorator",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "12",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP13",
|
||
"title": "Composite — Component Tree",
|
||
"repo": "lab-cpp-oop-composite",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "13",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP14",
|
||
"title": "Chain of Responsibility",
|
||
"repo": "lab-cpp-oop-chain",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "14",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP15",
|
||
"title": "Pattern-language Integration",
|
||
"repo": "lab-cpp-oop-integration",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "15",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "year-3",
|
||
"title": "Rok 3 · plan",
|
||
"current": false,
|
||
"series": [
|
||
{
|
||
"id": "modern-cpp-stl",
|
||
"title": "Modern C++ / STL",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "scope-reserved",
|
||
"cards": []
|
||
},
|
||
{
|
||
"id": "std-threads",
|
||
"title": "std::thread / std::jthread",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "scope-reserved",
|
||
"cards": []
|
||
},
|
||
{
|
||
"id": "boost-asio",
|
||
"title": "Boost.Asio",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "scope-reserved",
|
||
"cards": []
|
||
},
|
||
{
|
||
"id": "oop",
|
||
"title": "OOP and Design Patterns",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "reference",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "OOP01",
|
||
"title": "Strategy — Replaceable Behaviour",
|
||
"repo": "lab-cpp-oop-strategy",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "01",
|
||
"version": "",
|
||
"status": "design",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP02",
|
||
"title": "Adapter — Stable Boundary",
|
||
"repo": "lab-cpp-oop-adapter",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "02",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP03",
|
||
"title": "Template Method — Fixed Skeleton",
|
||
"repo": "lab-cpp-oop-template-method",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "03",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP04",
|
||
"title": "Static vs Dynamic Dispatch",
|
||
"repo": "lab-cpp-oop-dispatch",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "04",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP05",
|
||
"title": "RAII and Ownership",
|
||
"repo": "lab-cpp-oop-raii",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "05",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP06",
|
||
"title": "State — Explicit Behaviour",
|
||
"repo": "lab-cpp-oop-state",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "06",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP07",
|
||
"title": "Facade — Subsystem Boundary",
|
||
"repo": "lab-cpp-oop-facade",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "07",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP08",
|
||
"title": "Command — Request as Object",
|
||
"repo": "lab-cpp-oop-command",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "08",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP09",
|
||
"title": "Observer — Subscription and Telemetry",
|
||
"repo": "lab-cpp-oop-observer",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "09",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP10",
|
||
"title": "Factory Method — Resource Policy",
|
||
"repo": "lab-cpp-oop-factory-method",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "10",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP11",
|
||
"title": "Builder — Valid Configuration",
|
||
"repo": "lab-cpp-oop-builder",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "11",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP12",
|
||
"title": "Decorator — Measurement and Diagnostics",
|
||
"repo": "lab-cpp-oop-decorator",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "12",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP13",
|
||
"title": "Composite — Component Tree",
|
||
"repo": "lab-cpp-oop-composite",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "13",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP14",
|
||
"title": "Chain of Responsibility",
|
||
"repo": "lab-cpp-oop-chain",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "14",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "OOP15",
|
||
"title": "Pattern-language Integration",
|
||
"repo": "lab-cpp-oop-integration",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "15",
|
||
"version": "",
|
||
"status": "planned",
|
||
"tasks": []
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "year-4",
|
||
"title": "Rok 4 · plan",
|
||
"current": false,
|
||
"series": [
|
||
{
|
||
"id": "transformers-gpu",
|
||
"title": "Transformers on GPU",
|
||
"current": false,
|
||
"catalog_only": true,
|
||
"role": "",
|
||
"status": "scope-reserved",
|
||
"cards": []
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "fiz",
|
||
"title": "FIZ · Fizyka",
|
||
"current": false,
|
||
"levels": [
|
||
{
|
||
"id": "all",
|
||
"title": "Katalog",
|
||
"current": false,
|
||
"series": [
|
||
{
|
||
"id": "fiz",
|
||
"title": "Fizyka",
|
||
"current": false,
|
||
"catalog_only": false,
|
||
"role": "",
|
||
"status": "",
|
||
"cards": [
|
||
{
|
||
"id": "ruch-1d",
|
||
"title": "Ruch 1D",
|
||
"repo": "ruch-1d",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "",
|
||
"version": "",
|
||
"status": "",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "ruch-2d",
|
||
"title": "Ruch 2D",
|
||
"repo": "ruch-2d",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "",
|
||
"version": "",
|
||
"status": "",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "ruch-po-okregu",
|
||
"title": "Ruch po okręgu",
|
||
"repo": "ruch-po-okregu",
|
||
"href": "",
|
||
"local_href": "",
|
||
"resource_uuid": "",
|
||
"available": false,
|
||
"current": false,
|
||
"number": "",
|
||
"version": "",
|
||
"status": "",
|
||
"tasks": []
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"total_pages": 5,
|
||
"front": {
|
||
"header_html": "<header class=\"page-resource-header\" data-resource-url=\"http://localhost:8080\" data-repository-url=\"https://gitea.local/edu-inf/lab-console-neovim\" data-page=\"1\" data-page-total=\"5\"><table class=\"resource-header-table\"><colgroup><col><col style=\"width:24mm\"></colgroup><tbody><tr><td class=\"resource-header-center\"><div class=\"resource-header-grid\"><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 18fr 41.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">TITLE</span><span class=\"resource-value\">L03 · Neovim — navigation and editing</span></div><div class=\"resource-header-field resource-header-field--emphasis\"><span class=\"resource-label\">VER.</span><span class=\"resource-value\">1</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">DATETIME</span><span class=\"resource-value\">21.07.2026</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 30fr 17fr 12.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">PROJECT</span><span class=\"resource-value\">Warsztat terminalowy</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SERIES</span><span class=\"resource-value\">Bash · Console Tools</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">CARD</span><span class=\"resource-value\">03/08</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SHEET</span><span class=\"resource-value\">1/5</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:7fr 6fr 17.5fr 11fr 9fr 9fr 59.5fr\"><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SUBJ.</span><span class=\"resource-value\">Inf.</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">PROG.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">CORE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SCOPE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">LEVEL</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">POS.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--identity\"><span><b>GITEA UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span></span><span><b>CARD UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span><b class=\"resource-author\">AUTHOR M. Pabiszczak</b></span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"https://gitea.local/edu-inf/lab-console-neovim\"><b>GITEA</b> https://gitea.local/edu-inf/lab-console-neovim</a></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"http://localhost:8080\"><b>HTML</b> http://localhost:8080</a></div></div></div></td><td class=\"resource-qr-cell resource-qr-cell--right\"><div class=\"resource-qr resource-qr-page resource-qr-empty\"><span>QR</span><strong>HTML wyłączony</strong></div></td></tr></tbody></table></header>",
|
||
"footer_html": "<footer class=\"page-resource-footer\"><code class=\"page-resource-footer__uuid\">UUID bcbeea7b-d87a-5b1c-9364-c19edddf86ce</code><span class=\"page-resource-footer__author\">M. Pabiszczak</span><span class=\"page-resource-footer__page\">STRONA 1/5</span></footer>",
|
||
"left_margin_html": "<div class=\"margin-title\">TECH</div><div class=\"margin-list\"><button class=\"margin-tag we\" style=\"--indent:0.00em\" type=\"button\" data-margin-display=\"WE 01\" data-margin-tip=\"\" title=\"\"><span>WE 01</span><span class=\"local\"></span></button><button class=\"margin-tag tech\" style=\"--indent:0.28em\" type=\"button\" data-margin-display=\"EK\" data-margin-tip=\"Uczeń edytuje plik w Neovim.\" title=\"Uczeń edytuje plik w Neovim.\"><span>EK</span><span class=\"local\"></span></button><button class=\"margin-tag kw\" style=\"--indent:0.54em\" type=\"button\" data-margin-display=\"KW\" data-margin-tip=\"Uzyskuje trzy mierzalne wyniki PASS.\" title=\"Uzyskuje trzy mierzalne wyniki PASS.\"><span>KW</span><span class=\"local\"></span></button></div>",
|
||
"right_margin_html": "<div class=\"margin-title\">OG</div><div class=\"margin-list\"><button class=\"margin-tag we\" style=\"--indent:0.00em\" type=\"button\" data-margin-display=\"WE 01\" data-margin-tip=\"\" title=\"\"><span>WE 01</span><span class=\"local\"></span></button><button class=\"margin-tag og\" style=\"--indent:0.28em\" type=\"button\" data-margin-display=\"EN WO\" data-margin-tip=\"Uczeń analizuje granicę bufor/dysk.\" title=\"Uczeń analizuje granicę bufor/dysk.\"><span>EN WO</span><span class=\"local\"></span></button><button class=\"margin-tag kw\" style=\"--indent:0.54em\" type=\"button\" data-margin-display=\"KW WS\" data-margin-tip=\"Wyjaśnia, kiedy write jest potrzebny.\" title=\"Wyjaśnia, kiedy write jest potrzebny.\"><span>KW WS</span><span class=\"local\"></span></button></div>",
|
||
"goal_title": "Cel karty",
|
||
"goal_html": "<p>Uczeń mierzy pozycję kursora, wyszukuje i zapisuje zmianę oraz świadomie używa historii undo/redo.</p>",
|
||
"scope_title": "Zakres tasków",
|
||
"scope_html": "",
|
||
"scope_columns": [
|
||
"chapter",
|
||
"task",
|
||
"idea",
|
||
"priority",
|
||
"status",
|
||
"version"
|
||
],
|
||
"scope_headers": [
|
||
"Krok",
|
||
"Numer tasku",
|
||
"Najważniejsza idea",
|
||
"Priorytet",
|
||
"Status",
|
||
"Version"
|
||
],
|
||
"scope_rows": [
|
||
{
|
||
"chapter": "3",
|
||
"task": "Task01",
|
||
"idea_html": "<p>nawigacja kursora</p>",
|
||
"priority": "obowiązkowe",
|
||
"status": "ready",
|
||
"status_label": "opracowane",
|
||
"version": "v00.01",
|
||
"key": false
|
||
},
|
||
{
|
||
"chapter": "3",
|
||
"task": "Task02",
|
||
"idea_html": "<p>search, edit, write</p>",
|
||
"priority": "obowiązkowe",
|
||
"status": "ready",
|
||
"status_label": "opracowane",
|
||
"version": "v00.01",
|
||
"key": false
|
||
},
|
||
{
|
||
"chapter": "3",
|
||
"task": "Task03",
|
||
"idea_html": "<p>undo i redo</p>",
|
||
"priority": "obowiązkowe",
|
||
"status": "ready",
|
||
"status_label": "opracowane",
|
||
"version": "v00.01",
|
||
"key": false
|
||
}
|
||
]
|
||
},
|
||
"sections": [
|
||
{
|
||
"id": "section-1-content",
|
||
"index": 1,
|
||
"title": "Task01 · Nawigacja",
|
||
"show_heading": true,
|
||
"toc_entry": true,
|
||
"header_html": "<header class=\"page-resource-header\" data-resource-url=\"http://localhost:8080\" data-repository-url=\"https://gitea.local/edu-inf/lab-console-neovim\" data-page=\"2\" data-page-total=\"5\"><table class=\"resource-header-table\"><colgroup><col><col style=\"width:24mm\"></colgroup><tbody><tr><td class=\"resource-header-center\"><div class=\"resource-header-grid\"><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 18fr 41.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">TITLE</span><span class=\"resource-value\">L03 · Neovim — navigation and editing</span></div><div class=\"resource-header-field resource-header-field--emphasis\"><span class=\"resource-label\">VER.</span><span class=\"resource-value\">1</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">DATETIME</span><span class=\"resource-value\">21.07.2026</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 30fr 17fr 12.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">PROJECT</span><span class=\"resource-value\">Warsztat terminalowy</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SERIES</span><span class=\"resource-value\">Bash · Console Tools</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">CARD</span><span class=\"resource-value\">03/08</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SHEET</span><span class=\"resource-value\">2/5</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:7fr 6fr 17.5fr 11fr 9fr 9fr 59.5fr\"><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SUBJ.</span><span class=\"resource-value\">Inf.</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">PROG.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">CORE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SCOPE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">LEVEL</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">POS.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--identity\"><span><b>GITEA UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span></span><span><b>CARD UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span><b class=\"resource-author\">AUTHOR M. Pabiszczak</b></span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"https://gitea.local/edu-inf/lab-console-neovim\"><b>GITEA</b> https://gitea.local/edu-inf/lab-console-neovim</a></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"http://localhost:8080\"><b>HTML</b> http://localhost:8080</a></div></div></div></td><td class=\"resource-qr-cell resource-qr-cell--right\"><div class=\"resource-qr resource-qr-page resource-qr-empty\"><span>QR</span><strong>HTML wyłączony</strong></div></td></tr></tbody></table></header>",
|
||
"footer_html": "<footer class=\"page-resource-footer\"><code class=\"page-resource-footer__uuid\">UUID bcbeea7b-d87a-5b1c-9364-c19edddf86ce</code><span class=\"page-resource-footer__author\">M. Pabiszczak</span><span class=\"page-resource-footer__page\">STRONA 2/5</span></footer>",
|
||
"left_margin_html": "<div class=\"margin-title\">TECH</div><div class=\"margin-list\"><button class=\"margin-tag we\" style=\"--indent:0.00em\" type=\"button\" data-margin-display=\"WE 01\" data-margin-tip=\"\" title=\"\"><span>WE 01</span><span class=\"local\"></span></button></div>",
|
||
"right_margin_html": "<div class=\"margin-title\">OG</div><div class=\"margin-list\"><button class=\"margin-tag we\" style=\"--indent:0.00em\" type=\"button\" data-margin-display=\"WE 01\" data-margin-tip=\"\" title=\"\"><span>WE 01</span><span class=\"local\"></span></button></div>",
|
||
"content_html": "<p>Przejdź do linii 4 bez zmiany pliku. W interaktywnym Neovim odpowiada temu ruch 4G.</p>",
|
||
"tasks": [],
|
||
"assets": [
|
||
{
|
||
"label": "fig:neovim-cycle",
|
||
"logical_label": "fig:neovim-cycle",
|
||
"figure_number": 1,
|
||
"caption": "Nawigacja i wyszukiwanie prowadzą do zmiany bufora, historii i zapisu.",
|
||
"alt": "Diagram navigate, search, edit, write.",
|
||
"href": "figures/neovim-cycle.svg",
|
||
"source_href": "",
|
||
"width": 0.9,
|
||
"kind": "diagram",
|
||
"interactive": null,
|
||
"tile": null,
|
||
"diagram_title": "Nawigacja i wyszukiwanie prowadzą do zmiany bufora, historii i zapisu.",
|
||
"diagram_block_label": "",
|
||
"diagram_description": "",
|
||
"diagram_phase_labels": []
|
||
}
|
||
],
|
||
"steps": [
|
||
{
|
||
"id": "T01-NAV",
|
||
"title": "Zmierz cursor_line=4 oraz total_lines=5."
|
||
}
|
||
],
|
||
"spread_group": "",
|
||
"spread_label": "",
|
||
"spread_columns": 1,
|
||
"spread_index": 1,
|
||
"spread_count": 1,
|
||
"page_orientation": "portrait"
|
||
},
|
||
{
|
||
"id": "section-2-content",
|
||
"index": 2,
|
||
"title": "Task02 · Wyszukiwanie, edycja i zapis",
|
||
"show_heading": true,
|
||
"toc_entry": true,
|
||
"header_html": "<header class=\"page-resource-header\" data-resource-url=\"http://localhost:8080\" data-repository-url=\"https://gitea.local/edu-inf/lab-console-neovim\" data-page=\"3\" data-page-total=\"5\"><table class=\"resource-header-table\"><colgroup><col><col style=\"width:24mm\"></colgroup><tbody><tr><td class=\"resource-header-center\"><div class=\"resource-header-grid\"><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 18fr 41.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">TITLE</span><span class=\"resource-value\">L03 · Neovim — navigation and editing</span></div><div class=\"resource-header-field resource-header-field--emphasis\"><span class=\"resource-label\">VER.</span><span class=\"resource-value\">1</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">DATETIME</span><span class=\"resource-value\">21.07.2026</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 30fr 17fr 12.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">PROJECT</span><span class=\"resource-value\">Warsztat terminalowy</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SERIES</span><span class=\"resource-value\">Bash · Console Tools</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">CARD</span><span class=\"resource-value\">03/08</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SHEET</span><span class=\"resource-value\">3/5</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:7fr 6fr 17.5fr 11fr 9fr 9fr 59.5fr\"><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SUBJ.</span><span class=\"resource-value\">Inf.</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">PROG.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">CORE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SCOPE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">LEVEL</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">POS.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--identity\"><span><b>GITEA UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span></span><span><b>CARD UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span><b class=\"resource-author\">AUTHOR M. Pabiszczak</b></span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"https://gitea.local/edu-inf/lab-console-neovim\"><b>GITEA</b> https://gitea.local/edu-inf/lab-console-neovim</a></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"http://localhost:8080\"><b>HTML</b> http://localhost:8080</a></div></div></div></td><td class=\"resource-qr-cell resource-qr-cell--right\"><div class=\"resource-qr resource-qr-page resource-qr-empty\"><span>QR</span><strong>HTML wyłączony</strong></div></td></tr></tbody></table></header>",
|
||
"footer_html": "<footer class=\"page-resource-footer\"><code class=\"page-resource-footer__uuid\">UUID bcbeea7b-d87a-5b1c-9364-c19edddf86ce</code><span class=\"page-resource-footer__author\">M. Pabiszczak</span><span class=\"page-resource-footer__page\">STRONA 3/5</span></footer>",
|
||
"left_margin_html": "<div class=\"margin-title\">TECH</div><div class=\"margin-list\"><button class=\"margin-tag we\" style=\"--indent:0.00em\" type=\"button\" data-margin-display=\"WE 01\" data-margin-tip=\"\" title=\"\"><span>WE 01</span><span class=\"local\"></span></button></div>",
|
||
"right_margin_html": "<div class=\"margin-title\">OG</div><div class=\"margin-list\"><button class=\"margin-tag we\" style=\"--indent:0.00em\" type=\"button\" data-margin-display=\"WE 01\" data-margin-tip=\"\" title=\"\"><span>WE 01</span><span class=\"local\"></span></button></div>",
|
||
"content_html": "<p>Znajdź beta na linii 2, zmień zawartość bufora na BETA i jawnie zapisz plik.</p>",
|
||
"tasks": [],
|
||
"assets": [],
|
||
"steps": [
|
||
{
|
||
"id": "T02-EDIT",
|
||
"title": "Potwierdź linię trafienia i dokładną zawartość pliku."
|
||
}
|
||
],
|
||
"spread_group": "",
|
||
"spread_label": "",
|
||
"spread_columns": 1,
|
||
"spread_index": 1,
|
||
"spread_count": 1,
|
||
"page_orientation": "portrait"
|
||
},
|
||
{
|
||
"id": "section-3-content",
|
||
"index": 3,
|
||
"title": "Task03 · Undo i redo",
|
||
"show_heading": true,
|
||
"toc_entry": true,
|
||
"header_html": "<header class=\"page-resource-header\" data-resource-url=\"http://localhost:8080\" data-repository-url=\"https://gitea.local/edu-inf/lab-console-neovim\" data-page=\"4\" data-page-total=\"5\"><table class=\"resource-header-table\"><colgroup><col><col style=\"width:24mm\"></colgroup><tbody><tr><td class=\"resource-header-center\"><div class=\"resource-header-grid\"><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 18fr 41.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">TITLE</span><span class=\"resource-value\">L03 · Neovim — navigation and editing</span></div><div class=\"resource-header-field resource-header-field--emphasis\"><span class=\"resource-label\">VER.</span><span class=\"resource-value\">1</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">DATETIME</span><span class=\"resource-value\">21.07.2026</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 30fr 17fr 12.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">PROJECT</span><span class=\"resource-value\">Warsztat terminalowy</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SERIES</span><span class=\"resource-value\">Bash · Console Tools</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">CARD</span><span class=\"resource-value\">03/08</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SHEET</span><span class=\"resource-value\">4/5</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:7fr 6fr 17.5fr 11fr 9fr 9fr 59.5fr\"><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SUBJ.</span><span class=\"resource-value\">Inf.</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">PROG.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">CORE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SCOPE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">LEVEL</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">POS.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--identity\"><span><b>GITEA UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span></span><span><b>CARD UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span><b class=\"resource-author\">AUTHOR M. Pabiszczak</b></span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"https://gitea.local/edu-inf/lab-console-neovim\"><b>GITEA</b> https://gitea.local/edu-inf/lab-console-neovim</a></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"http://localhost:8080\"><b>HTML</b> http://localhost:8080</a></div></div></div></td><td class=\"resource-qr-cell resource-qr-cell--right\"><div class=\"resource-qr resource-qr-page resource-qr-empty\"><span>QR</span><strong>HTML wyłączony</strong></div></td></tr></tbody></table></header>",
|
||
"footer_html": "<footer class=\"page-resource-footer\"><code class=\"page-resource-footer__uuid\">UUID bcbeea7b-d87a-5b1c-9364-c19edddf86ce</code><span class=\"page-resource-footer__author\">M. Pabiszczak</span><span class=\"page-resource-footer__page\">STRONA 4/5</span></footer>",
|
||
"left_margin_html": "<div class=\"margin-title\">TECH</div><div class=\"margin-list\"><button class=\"margin-tag we\" style=\"--indent:0.00em\" type=\"button\" data-margin-display=\"WE 01\" data-margin-tip=\"\" title=\"\"><span>WE 01</span><span class=\"local\"></span></button></div>",
|
||
"right_margin_html": "<div class=\"margin-title\">OG</div><div class=\"margin-list\"><button class=\"margin-tag we\" style=\"--indent:0.00em\" type=\"button\" data-margin-display=\"WE 01\" data-margin-tip=\"\" title=\"\"><span>WE 01</span><span class=\"local\"></span></button></div>",
|
||
"content_html": "<p>Dodaj linię delta, wykonaj undo i redo. Dopiero wynik po redo zapisz na dysk.</p>",
|
||
"tasks": [],
|
||
"assets": [],
|
||
"steps": [
|
||
{
|
||
"id": "T03-HISTORY",
|
||
"title": "Zmierz liczbę linii 4, 3, 4 i zapisz trace."
|
||
}
|
||
],
|
||
"spread_group": "",
|
||
"spread_label": "",
|
||
"spread_columns": 1,
|
||
"spread_index": 1,
|
||
"spread_count": 1,
|
||
"page_orientation": "portrait"
|
||
}
|
||
],
|
||
"viewpoints": [],
|
||
"has_spread": false,
|
||
"has_allocator_model": false,
|
||
"dictionary": {
|
||
"header_html": "<header class=\"page-resource-header\" data-resource-url=\"http://localhost:8080\" data-repository-url=\"https://gitea.local/edu-inf/lab-console-neovim\" data-page=\"5\" data-page-total=\"5\"><table class=\"resource-header-table\"><colgroup><col><col style=\"width:24mm\"></colgroup><tbody><tr><td class=\"resource-header-center\"><div class=\"resource-header-grid\"><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 18fr 41.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">TITLE</span><span class=\"resource-value\">L03 · Neovim — navigation and editing</span></div><div class=\"resource-header-field resource-header-field--emphasis\"><span class=\"resource-label\">VER.</span><span class=\"resource-value\">1</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">DATETIME</span><span class=\"resource-value\">21.07.2026</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:59.5fr 30fr 17fr 12.5fr\"><div class=\"resource-header-field resource-header-field--title\"><span class=\"resource-label\">PROJECT</span><span class=\"resource-value\">Warsztat terminalowy</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SERIES</span><span class=\"resource-value\">Bash · Console Tools</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">CARD</span><span class=\"resource-value\">03/08</span></div><div class=\"resource-header-field\"><span class=\"resource-label\">SHEET</span><span class=\"resource-value\">5/5</span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:7fr 6fr 17.5fr 11fr 9fr 9fr 59.5fr\"><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SUBJ.</span><span class=\"resource-value\">Inf.</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">PROG.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">CORE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">SCOPE</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">LEVEL</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--compact\"><span class=\"resource-label\">POS.</span><span class=\"resource-value\">—</span></div><div class=\"resource-header-field resource-header-field--identity\"><span><b>GITEA UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span></span><span><b>CARD UUID</b><span class=\"resource-identity-value\">bcbeea7b-d87a-5b1c-9364-c19edddf86ce</span><b class=\"resource-author\">AUTHOR M. Pabiszczak</b></span></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"https://gitea.local/edu-inf/lab-console-neovim\"><b>GITEA</b> https://gitea.local/edu-inf/lab-console-neovim</a></div></div><div class=\"resource-header-row\" style=\"grid-template-columns:119fr\"><div class=\"resource-header-field resource-header-field--url-row\"><a href=\"http://localhost:8080\"><b>HTML</b> http://localhost:8080</a></div></div></div></td><td class=\"resource-qr-cell resource-qr-cell--right\"><div class=\"resource-qr resource-qr-page resource-qr-empty\"><span>QR</span><strong>HTML wyłączony</strong></div></td></tr></tbody></table></header>",
|
||
"footer_html": "<footer class=\"page-resource-footer\"><code class=\"page-resource-footer__uuid\">UUID bcbeea7b-d87a-5b1c-9364-c19edddf86ce</code><span class=\"page-resource-footer__author\">M. Pabiszczak</span><span class=\"page-resource-footer__page\">STRONA 5/5</span></footer>",
|
||
"content_html": "<details class=\"we-block\"><summary><strong>WE 01</strong> Neovim</summary><p>Powtarzalna edycja tekstu w Neovim bez zależności od konfiguracji użytkownika.</p><h4>OG</h4><details><summary><code>EN IP CB03.01</code> Uczeń analizuje granicę bufor/dysk.</summary><ul><li><code>KW IP CB03.01</code> Wyjaśnia, kiedy write jest potrzebny.</li></ul></details><h4>TECH</h4><details><summary><code>EK INF04 CB03.01</code> Uczeń edytuje plik w Neovim.</summary><ul><li><code>KW INF04 CB03.01</code> Uzyskuje trzy mierzalne wyniki PASS.</li></ul></details></details>"
|
||
},
|
||
"toc": [
|
||
{
|
||
"id": "section-1-content",
|
||
"label": "1. Task01 · Nawigacja"
|
||
},
|
||
{
|
||
"id": "section-2-content",
|
||
"label": "2. Task02 · Wyszukiwanie, edycja i zapis"
|
||
},
|
||
{
|
||
"id": "section-3-content",
|
||
"label": "3. Task03 · Undo i redo"
|
||
}
|
||
]
|
||
}
|