Сьогодні ми працюємо одразу з двома компʼютерами. Перший стоїть перед тобою: ти бачиш його монітор і тримаєш руки на його клавіатурі. Другий стоїть у дата-центрі в іншому місті, і ти його ніколи не побачиш.
На уроці ти навчишся
Ти відкрив свою сторінку в nano, переписав абзац про себе, зберіг і вийшов. Оновив адресу в браузері — половина тексту зникла, а списку з пʼяти пунктів немає взагалі. Ти хочеш побачити те, що було до правки.
На уроці ти навчишся
Минулого разу твій проєкт отримав історію: коміти на сервері й другу копію — на GitHub або в bare-репозиторії на цьому ж сервері. Історія є — але подивитися на неї можна тільки командами, і щоразу різними.
На уроці ти навчишся
Твоя сторінка вперше починає приймати дані: однокласник заповнює форму, і в приватному файлі ~/data/responses.csv з'являється новий рядок. Ти верстаєш поля за власним fields.json, надсилаєш відповідь через fetch() без перезавантаження і простежуєш увесь шлях у DevTools. Потім те саме значення надсилається curl-ом повз форму — і видно, чому перевірка в браузері є зручністю, а не захистом.
На уроці ти навчишся
Ти будуєш структуру виступу за даними власного опитування: п'ять частин, у кожної одне питання, заголовок слайда — твердження, а не тема. Далі верстаєш каркас на reveal.js — звичайну веб-сторінку з тегів <section>, яку відкриває браузер. Діаграм ще немає: замість них два порожні <canvas> під наступний урок.
На уроці ти навчишся
Порожні слоти chart1 і chart2 з минулого уроку заповнюються діаграмами, які Chart.js будує з файлу data.json: виправив там число — слайд перемалювався сам. Ти проходиш дерево рішень і добираєш тип діаграми під свої числа. Друга половина уроку — про те, як діаграма викривляє правду обрізаною віссю чи переставленими стовпчиками, і як перевірити власні дві.
На уроці ти навчишся
Ти робиш комікс на шість панелей, і складність не в гарній картинці, а в тому, щоб на всіх шести був той самий герой. Складаєш аркуш канону з восьми вимірюваних ознак, ставиш цей опис у кожен промпт незмінним і міняєш по одному параметру, коли панель не вийшла. Зображення залишаються на твоєму комп'ютері: на сервер їдуть тільки три текстові файли.
На уроці ти навчишся
Шість картинок стають сторінкою, яку читають саме в тому порядку, який ти задумав. Ти розкладаєш панелі сіткою, керуєш темпом читання шириною панелі й жолоба, пишеш текст бульбашок у розмітці, а не всередині картинки. Наприкінці ставиш під коміксом видиму позначку про те, яка модель малювала панелі і що в них зробив ти сам.
На уроці ти навчишся
Музику й ефекти до майбутнього трейлера ти пишеш текстом, а не береш готовим файлом із мережі. У Strudel патерн — це рядок коду: змінив число в setcpm() — і темп змінився одразу, при вчителі. Ефекти збираєш у jsfxr і здаєш їхні числа, а не сам звук: аудіо залишається на твоєму комп'ютері.
На уроці ти навчишся
З панелей коміксу і звуку ти збираєш трейлер на 20–40 секунд, але не мишкою у відеоредакторі, а скриптом build.sh, який робить усе однією командою. Заміниш через тиждень одну панель — просто запустиш скрипт заново, нічого не згадуючи. Друга частина уроку — субтитри WebVTT, щоб ролик зрозумів і той, хто його не почує.
На уроці ти навчишся
Сирі відповіді з твоєї форми — це порожні клітинки, однакові рядки, «999 хвилин» і три написання одного й того самого слова. Ти пишеш скрипт build_dash.py, який читає CSV, чистить його і складає готові числа у data.json. Заразом рахуєш середнє й медіану на своїх даних і формулюєш кожен показник як відповідь на чиєсь питання.
На уроці ти навчишся
Скрипт із минулого уроку ти ставиш у розклад cron, і дашборд починає оновлюватися без тебе — уночі й на канікулах. Заразом вчишся помічати, коли автоматика зупинилася: сторінка виглядає так само гарно, тільки числа на ній учорашні. Наприкінці сервер видаляє твій data.json і чекає 16 хвилин — це єдиний доказ, що розклад справді працює.
На уроці ти навчишся
Ти збираєш чат-бота, який проводить опитування, і будуєш його як скінченний автомат: порядок питань і збережені відповіді тримає твій код, а модель відповідає тільки за слова. Пишеш системний промпт із межами того, чого бот не робить. Потім сам підсовуєш боту фразу «ігноруй попередні інструкції» і лагодиш те, що зламалося.
На уроці ти навчишся
Тринадцять уроків ти працював сам, а тепер у команди одна тека на трьох-чотирьох і кожен править файли одночасно з рештою. Ти клонуєш репозиторій зі шкільної Gitea, працюєш у власній гілці, відкриваєш pull request і рев'юєш чужий. Разом команда верстає каркас сайту з чотирьох сторінок зі спільною навігацією і одним файлом стилів.
На уроці ти навчишся
Чотири сторінки від чотирьох людей ти зводиш в один сайт: дослівно однаковий блок меню, один style.css, узгоджені імена файлів. Далі розбираєшся з деплоєм — що відбувається після git push, як спрацьовує вебхук і як за журналом знайти ланку, на якій публікація обірвалася. Наприкінці команда за п'ять хвилин захищає продукт на живому сайті, відкритому з телефона вчителя.
На уроці ти навчишся
Останній урок модуля — це не нова тема, а перевірка того, що ти вже зробив: сайт, форма, дашборд і бот, а разом із ними зайві права на теках, забутий токен у коді й копії чужих відповідей. Ти читаєш рядок drwxr-xr-x, шукаєш командою find файли, доступні на запис усім, і виносиш секрети за межі ~/www. Потім переходиш на вхід за SSH-ключем, рахуєш стійкість пароля в бітах і проходиш тренажер фішингу.
На уроці ти навчишся
/s/твій-логін/ · вхід на сервер: ssh твій-логін@91.219.61.4 · зміна пароля: passwd