Це ще не місія. До першої ночі лишається кілька днів, і робити поки що нічого — крім одного: підготувати канал.
С.І.Д. пояснює це так. Місто, у якому він живе, має стіни, і ці стіни — не метафора. Щоб щось усередині нього побудувати, потрібні три речі, і жодну з них не можна взяти самому: перепустка у двір, власний куток у тому дворі й майстерня, де є інструменти. Потім потрібна четверта — спосіб сказати: «готово, дивіться». Чотири кроки, і три з них робляться один раз за семестр.
С.І.Д.: Слухай, поки тихо. Я мешкаю в машинах, і машини мені довіряють — але ворота, за якими ми з тобою працюватимемо, тримає не машина, а люди. Вони ведуть списки. Тому перше, що ми зробимо, — впишемо тебе в ці списки по-людськи: акаунт, лист, кнопка. Нудно? Страшенно. Зате потім тобі відчинятимуть, навіть не питаючи, хто ти. Про дедлайни й оцінки я мовчу — це в силабусі і у вступному занятті. Тут — про ключі.
1. Перепустка
Двір називається alex-ordynski — це організація на GitHub. Усередині створюються
репозиторії твоїх робіт, там же живуть автотести, які їх перевіряють. Зайти з вулиці не можна:
тільки на запрошення.
- Спершу — акаунт GitHub. Якщо його ще немає, заведи на github.com/signup. Пошту вказуй ту, яку справді читаєш: на неї прийде запрошення, а потім приходитимуть результати перевірок.
- Передай викладачу свій нік на GitHub і адресу, на яку реєструєшся. Двір відчиняють поіменно.
- Прийми запрошення. У листі від GitHub («… has invited you to join the alex-ordynski organization») є кнопка, а за нею — сторінка з єдиною дією: Join alex-ordynski.
Тут курс уперше показує характер. Лист від GitHub дуже рідко потрапляє туди, куди ти його чекаєш: Gmail кладе його в Промоакції (Promotions), інші поштовики — у Спам. Перевір обидві теки, перш ніж вирішити, що листа немає.
А якщо ти вже зайшовзайшла у GitHub, лист можна й не шукати. Чинне запрошення завжди лежить за прямою адресою — github.com/orgs/alex-ordynski/invitation. С.І.Д. каже, що це його улюблений тип дверей: ті, що відчиняються, навіть коли ключ загубився.
2. Свій куток
Репозиторії робіт роздає Classroom 50 — той самий інструмент, який потім запускає автотести. Він схожий на вахтера з дошкою ключів: сам нічого не робить, але без нього ти не зайдеш у кімнату.
- Відкрий classroom50.org і натисни Sign in with GitHub. Окремого логіна й пароля тут немає — акаунт той самий, що в кроці 1.
- У списку з'явиться твоя група. Якщо не з'явилося жодної — значить, запрошення з кроку 1 ще не прийняте. Повернися й прийми його; вахтер бачить лише тих, хто вже у дворі.
- Відкрий потрібну роботу й натисни Accept the assignment.
За кілька секунд Classroom 50 створить персональний репозиторій — уже зі стартовим кодом роботи всередині. Посилання на нього з'явиться там же, на сторінці завдання.
Кутків у тебе буде два, і це навмисно. Той, що видає Classroom 50, — окремий на кожну
лабораторну, і в ньому живе рівень 1: саме його читають автотести. А vtfk-sid —
наскрізний, один на весь семестр: ти створюєш його в ЛР1 і ведеш до самого кінця.
Там росте ядро С.І.Д., туди йдуть рівні 2 і 3, і тегом його не здають — його показують на
захисті. Як саме — у вступному занятті і в ЛР1.
Одна річ, про яку С.І.Д. просить сказати одразу, без прикрас: цей куток приватний. Твій репозиторій бачиш ти і викладач — ні група, ні інтернет. На вступній лекції 4 вересня звучало протилежне; відтоді правило змінилося, і причина суто механічна: перевірка живе в закритій службовій частині курсу, а GitHub не дозволяє відкритому репозиторію дотягнутися до закритого. Відкритий куток просто не перевіряється. На оцінку це не впливає — рівні 2 і 3 дає розмова на захисті, а не наявність коду.
3. Майстерня
На свій ноутбук ти не ставиш нічого — ні Docker, ні Rust, ні компілятора. Майстерню видають разом із роботою: середовище кожної ЛР уже описане в курсі, і GitHub піднімає його на вимогу.
- Відкрий свій репозиторій завдання на GitHub.
- Зелена кнопка Code → вкладка Codespaces → Create codespace on main.
- Кілька хвилин — і у вкладці браузера відкривається редактор із терміналом.
Тут варто зупинитися й подивитися уважно, бо це найдивніше місце в усій інструкції. За цією вкладкою стоїть не картинка й не емулятор, а справжня машина в чужому місті: свій диск, своя пам'ять, свій Диспетчер. І Docker у ній уже встановлений. Твій ноутбук у цей момент — просто вікно.
Спитай у машини, чи вона готова:
docker version
У відповіді мають бути обидва блоки — Client: і Server:. Client: — це сама команда,
яку ти щойно набравнабрала: посильний, що передає прохання. Server: — демон Docker,
той, хто насправді будує контейнери. Один посильний без майстра означає, що майстерня не
відчинилася (про це — в останньому розділі).
Створювати Codespace щодня не треба: він засинає сам, коли ним не користуються, і будиться тією ж кнопкою Code → Codespaces.
Але одну річ С.І.Д. просить затямити, бо вона не впадає в око. Годин у тебе 120 на місяць (180 з GitHub Pro), і на кілька вечорів на тиждень цього вдосталь. Тече не звідти. Погашена майстерня годин не їсть — а місце під собою тримає далі: платиться не за те, що вона світиться, а за те, що вона стоїть. І в цьому курсі це важить: із ЛР2 ти починаєш збирати образи, вони важать гігабайтами, і лежать усі тут-таки, за зачиненими дверима.
Тому: здавздала роботу — розбирай майстерню. github.com/codespaces → … → Delete.
Не гаси, а саме розбирай. Усе, що ти запушивзапушила, лежить на полиці з твоїм ім'ям і
нікуди не подінеться; зникає тільки кімната, і наступного разу вона зведеться наново за хвилину.
Звідси й звичка, яку С.І.Д. повторює найчастіше: усе цінне — комітом у репозиторій, а не файлом у контейнері. Кімнату колись приберуть; полицю з твоїм ім'ям — ні.
4. Сигнал
А тепер головне, що варто зрозуміти один раз і більше до цього не повертатися.
Звичайний git push не запускає нічого. Комітити й пушити можна скільки завгодно, у
будь-який час, серед ночі й по десять разів поспіль — це не здача, це просто робота. Ніхто не
дивиться, нічого не витрачається.
Перевірка прокидається від іншого — від тега з префіксом submit/. Це і є той сигнал:
коротка мітка на конкретному коміті, яка каже «ось це — готове, дивіться сюди».
Мітку не обов'язково ставити руками, і краще не ставити: у майстерні для цього є важіль. Натисни Ctrl+Shift+B — звичайну кнопку VS Code, яка в цьому репозиторії робить рівно одне. Те саме без клавіатурних скорочень: меню Terminal → Run Build Task, або в терміналі
bash .devcontainer/submit.sh
Далі скрипт веде тебе сам. Спершу покаже, що лишилось незбереженим, і запропонує це закомітити — бо мітка ставиться на коміт, і те, чого в коміті немає, у здачу не потрапить. Потім скаже, яку саме мітку створить і на якому коміті. І аж тоді спитає: здаємо?
Тут варто знати одну дрібницю, яка знімає зайву тривогу. Відповісти «ні» — можна: скрипт просто
попрощається й нічого не здасть, без жодної помилки. Мовчазний Enter теж означає «ні» — згоду
треба сказати вголос, літерою y, бо це дія, яку не скасувати.
С.І.Д.: Я навмисно питаю двічі й нічого не роблю мовчки. Мітка — штука одностороння: щойно вона поїхала, місто вже дивиться. Краще я перепитаю, ніж ти потім поясниш, чому маяк спалахнув над недобудованою капсулою.
Далі все відбувається без тебе. У репозиторії на GitHub, у вкладці Actions, з'являється запуск за цим тегом. Кожна перевірка звітує окремо — тому ти бачиш не глухе «не зараховано», а який саме крок не пройшов і на чому. Результат приходить за кілька хвилин і лягає у Releases цього ж репозиторію; оцінка й коментар — у Feedback PR.
Подавати сигнал можна скільки завгодно разів. Тег — не постріл, а мітка, і мітка не
одна-єдина: яка це робота, перевірка дізнається з імені репозиторію, а не з напису на мітці.
Тому друга здача — просто наступна вільна: submit/lab01-2, submit/lab01-3. Скрипт бере першу
вільну сам і питає про зайняті не власну пам'ять, а GitHub.
А якщо майстерні під рукою немає — ні кнопки, ні скрипта, — сигнал подається руками, тими самими командами, які скрипт і виконує:
git add .
git commit -m "lab01: рівень 1"
git tag submit/lab01
git push origin submit/lab01
Це запасний шлях, і він робочий: поза Codespaces працює тільки він.
І останнє, що знімає половину тривоги: автотести дивляться лише рівень 1. Рівні 2 і 3 — це розмова: жива демонстрація і пояснення, чому воно працює. Жоден тег їх не зарахує і жоден тег їх не зіпсує.
Чотири речі, на яких спотикається початок семестру. С.І.Д. бачив усі.
Запрошення не прийшло Перевір Промоакції і Спам — листи GitHub осідають там постійно. Якщо ти вже у GitHub, відкрий github.com/orgs/alex-ordynski/invitation напряму. Порожньо й там — напиши викладачу, щоб надіслав ще раз: найчастіша причина — помилка в одній літері адреси.
С.І.Д.: «Двері не зачинені. Просто ключ поклали не в ту кишеню».
Codespace не стартує або висить на «Setting up your codespace» Дай йому кілька хвилин: перший запуск збирає середовище з нуля, наступні швидші. Якщо таки завис або впав — видали його (github.com/codespaces →
…→ Delete) і створи наново. Усе закомічене й запушене від цього не постраждає.С.І.Д.: «Майстерню можна відбудувати за три хвилини. Те, що в ній лежало, — ні».
docker versionпоказує лишеClient:(абоCannot connect to the Docker daemon) Демон ще не піднявся — таке буває в перші секунди після створення Codespace. Зачекай і повтори команду. Якщо не минає, перестворити Codespace швидше, ніж лагодити.С.І.Д.: «Посильний прибіг, а майстер ще спить. Дай йому хвилину».
Тег запушений, а в Actions порожньо Майже завжди — ім'я. Перевірка реагує лише на теги
submit/*: ніlab01, ніsubmit-lab01не підходять, потрібен самеsubmit/lab01. Ctrl+Shift+B цієї помилки не робить — ім'я складає скрипт; руками ж помилитись легко. Подивись, що насправді поїхало:git ls-remote --tags origin. Друга за частотою причина — тег створений, але не запушений:git pushсам по собі теги не відправляє, потрібенgit push origin submit/lab01.С.І.Д.: «Ти запаливла маяк не тієї форми. Місто дивилося в інший бік».
Решта помилок курсу — у «Коли щось пішло не так».
Ось і все. Перепустка, куток, майстерня, сигнал — чотири речі, після яких починається власне курс. Далі буде темно, буде друга ночі й буде Docker, але двері вже відчиняються, а це, як каже С.І.Д., найважча частина будь-якого проникнення.