Курс › Вступ · Місія 0
Академічна↔ Сюжет С.І.Д.⌨️ команди 19 · 6 нових

Вступ. Організація роботи в курсі, робоче середовище та порядок здачі робіт

Мета

Ознайомитися зі структурою дисципліни, форматом лабораторних робіт і самостійної роботи, підготованим робочим середовищем (контейнер розробника) та порядком здачі й оцінювання робіт. Вступ не оцінюється і доступний упродовж усього семестру.

Структура дисципліни

Дисципліна складається з трьох модулів, кожен присвячений одній «межі» між програмою та машиною:

Модуль Тема Лекції Лабораторні Інструменти
1 Ізоляція процесів: межа середовища виконання 1–3 ЛР1–ЛР3 Docker, простори імен та cgroups Linux
2 Керування пам'яттю: межа безпеки 4–7 ЛР4–ЛР7 Rust, Cargo, перевірка запозичень
3 WebAssembly і асемблер: межа набору інструкцій 8–10 ЛР8–ЛР10 WABT, NASM/gcc/objdump, wasm-pack

До кожної лабораторної роботи передбачено дві теми самостійної роботи (СРС): перша готує до захисту рівня 2, друга — до розширення рівня 3. СРС окремо не оцінюється; оцінюється рівень, досягнутий у лабораторній роботі.

Кожна лабораторна робота доступна у двох еквівалентних за змістом версіях: сюжетній (основна; технічні відомості вплетені в наскрізну історію) та академічній (стисла методична форма). Перемикач між версіями розташований угорі сторінки.

Рівні виконання та оцінювання

Рівень Оцінка Зміст Форма перевірки
1 3 базове завдання за покроковою інструкцією з очікуваними результатами автотести
2 4 пояснення механізму та жива демонстрація захист (усно)
3 5 розширення: автоматизація, оптимізація або власне рішення за контрактом автотести і/або захист

Студент самостійно обирає рівень, на який претендує. Вищий рівень включає виконання попередніх.

Робоче середовище: контейнер розробника

Усі роботи виконуються в підготовленому контейнері розробника (devcontainer) з попередньо встановленими інструментами для відповідної роботи. Опис середовища кожної ЛР і СРС — базовий образ, інструменти та їхні версії, дозволені команди, порти, перевірки готовності — зафіксований у конфігурації курсу (environment/labNN.yml, environment/srsNN.yml) і використовується застосунком курсу при ініціалізації робочого простору студента; те саме середовище можна отримати в GitHub Codespaces навчального репозиторію.

Модуль Базове середовище
1 Ubuntu 24.04 з Docker Engine (Docker-in-Docker), curl, procps, iproute2, util-linux
2 Rust 1.79 (rustc, cargo, rustfmt, clippy), git
3 WABT 1.0.34, Node.js 22, gcc 13 / binutils, clang 18 / lld, Rust 1.79 з ціллю wasm32-unknown-unknown, wasm-pack, binaryen

Порядок роботи в середовищі:

  1. Відкрити лабораторну роботу в кабінеті курсу (або Codespaces). Контейнер створюється автоматично; у нього монтується навчальний репозиторій студента.
  2. Перевірити середовище: cat /etc/os-release | head -2 (очікується Ubuntu 24.04 або відповідний базовий образ) та команду перевірки інструмента роботи (docker version, cargo --version, wat2wasm --version).
  3. Виконувати роботу в терміналі контейнера; результати комітити в репозиторій. Зміни у файловій системі контейнера поза репозиторієм не зберігаються між сеансами.

Довідка з команд: man <команда> — повний посібник (вихід — q); <команда> --help (для підкоманд — docker run --help, cargo build --help) — стисла довідка. Файл README у каталозі роботи переглядається командою cat README.md або less README.md.

На кожній сторінці ЛР, СРС і конспекту наведено блок «Команди на цій сторінці» з однореченнєвим описом кожної команди терміналу, що трапляється в тексті; команди, які зустрічаються в курсі вперше, позначені.

Порядок здачі робіт

  1. Два репозиторії. Рівень 1 кожної роботи виконується в репозиторії завдання: його створює Classroom 50 у момент прийняття завдання, окремо на кожну ЛР, і саме там працюють автотести. Рівні 2 і 3 виконуються в наскрізному репозиторії vtfk-sid, який студент створює один раз у ЛР1 і веде до кінця семестру. Склад кожного визначають розділ «Здача» відповідної ЛР і starter/README.md (контракт стартового коду).

  2. Звіт REPORT.md (у репозиторії завдання) містить: варіант і його розрахунок, вивід команд кожного кроку порядку виконання, відповіді на контрольні питання.

  3. Здача рівня 1 — тегом submit/labNN у репозиторії завдання. Тег ставить скрипт здачі, а не студент: у робочому просторі — Ctrl+Shift+B (меню Terminal → Run Build Task) або, те саме з терміналу:

    bash .devcontainer/submit.sh
    

    Скрипт комітить незбережене, пушить, показує, який тег створить, і чекає підтвердження; відмова («ні» або порожній Enter) нічого не здає й не вважається помилкою.

    Запасний шлях — поза Codespaces, де скрипта немає, — ті самі команди руками:

    git add . && git commit -m "lab01: рівень 1"
    git tag submit/lab01 && git push origin submit/lab01
    

    Повторна здача — наступний вільний тег (submit/lab01-2, submit/lab01-3): належність роботи визначає ім'я репозиторію, а не ім'я тега, тож нумерований тег ні на що не впливає. Скрипт робить це сам; руками — так само наступний номер, старий тег не переставляється.

  4. Автотести запускаються за тегом і перевіряють лише рівень 1. Рівні 2 і 3 захищаються усно з живою демонстрацією вмісту vtfk-sid; автоматично вони не перевіряються.

  5. Репозиторії завдань приватні (ADR 029): автогрейдинг Classroom 50 кличе багаторазовий воркфлоу з приватного конфігураційного репозиторію курсу, а GitHub не дозволяє робити це з публічного репозиторію. Робота студента видима йому самому й викладачеві. Запобіжником від списування на рівнях 2–3 це не робить приватність: ним лишається усний захист.

Варіант. У більшості робіт параметри завдання (порт, ім'я контейнера, тестові дані) залежать від номера студента в списку групи N (зазвичай N % 4 або N % 3). Варіант і його розрахунок обов'язково зазначаються на початку REPORT.md.

Контрольні питання

  1. З яких модулів складається дисципліна і яка «межа» є предметом кожного?
  2. Чим відрізняються рівні 1, 2 і 3 виконання лабораторної роботи та форми їх перевірки?
  3. Яку роль відіграє СРС і як вона пов'язана з рівнями лабораторної роботи?
  4. Що таке контейнер розробника і чому середовище виконання робіт фіксується у конфігурації курсу?
  5. Якими командами перевірити базовий образ середовища та готовність основного інструмента роботи?
  6. Як отримати довідку з команди терміналу та як переглянути README у терміналі?
  7. Яким чином здається лабораторна робота і як виконати повторну здачу?
⌨️ КОМАНДИ НА ЦІЙ СТОРІНЦІ 19 · 6 нових▾

Кожна команда терміналу з цієї сторінки — одним реченням. Позначка нове — команда зустрічається в курсі вперше; далі вважаємо її знайомою.

bash
Командна оболонка (shell) Linux: читає команди, які ти набираєш, і запускає програми.
git add
Позначає файли, які увійдуть у наступний коміт (git add . — усе, що змінилося в каталозі).
git
Система керування версіями: історія змін, гілки, теги; здача робіт у курсі — через теги submit/labNN.
git commit
Записує позначені зміни в історію під повідомленням (git commit -m "lab01: рівень 1").
git tag
Позначає поточний коміт іменем (git tag submit/lab01) — так ти «здаєш» лабораторну.
git push
Відправляє коміти й теги у віддалений репозиторій (git push --tags).
curlнове
Консольний HTTP-клієнт: надсилає запит на URL і друкує відповідь (curl -i http://localhost:8080/ — разом із заголовками); також уміє завантажувати файли й скрипти.
rustcнове
Компілятор Rust; напряму викликається рідко (rustc --version, rustc --explain E0382 — розшифрувати помилку), зазвичай його запускає Cargo.
cargoнове
Система збірки й менеджер пакетів Rust: створює проєкт, тягне залежності (крейти), збирає, тестує, запускає.
wasm-packнове
Збирає крейт Rust у пакет для браузера: .wasm + JS-обгортка (glue code) через wasm-bindgen.
cat
Виводить вміст файлу в термінал повністю (від concatenate); зручно для коротких файлів і /proc/....
head
Показує перші рядки файлу або потоку (head -5 — перші п'ять).
docker version
Показує версії клієнта й демона — перевірка, що Docker встановлений і працює.
docker
Клієнт Docker: усі дії з образами й контейнерами — через його підкоманди (docker <підкоманда> --help — довідка).
wat2wasmнове
З WABT: перекладає текстовий формат WAT у бінарний модуль .wasm (wat2wasm m.wat -o m.wasm).
man
Відкриває посібник (manual) до команди: man ps; вихід — q.
docker run
Створює й запускає контейнер з образу (docker run -it ubuntu:24.04 bash — інтерактивно з терміналом; -d — у фоні; --rm — видалити після виходу; -p 8080:80 — прокинути порт).
cargo buildнове
Компілює проєкт у target/debug/; --release — з оптимізаціями у target/release/.
less
Показує файл посторінково з прокруткою; вихід — клавіша q.

💡 Прочитати README прямо в терміналі: cat README.md (виведе весь файл) або less README.md (посторінково; вихід — клавіша q).
Довідка з будь-якої команди: man curl (повний посібник, вихід — q) або коротко curl --help; для підкоманд — docker run --help, cargo build --help.