Згенерувала 495 сторінок досягнень трьома мовами з експорту SQLite лише для читання, де адреса сторінки задається як дані, тож виправлення речення більше не змінювало адресу сторінки й не ламало посилання.
Роботу виконано: серпень 2026
495 сторінок досягнень згенеровано з експорту лише для читання
Ситуація. Вміст портфоліо компанії ведуть в окремій базі даних — тій самій, з якої генерується CV, — і вебсайт має публікувати його у вигляді сторінок трьома мовами так, щоб дві копії не розходилися. Наївний підхід — писати сторінки вручну й синхронізувати їх — ламається на першому ж виправленні.
Завдання. Вебсайт мав генерувати свій вміст із бази даних як вхідні дані для збірки, а адреси сторінок мали залишатися незмінними, навіть коли речення на них переписують.
Дія. Експортер відкриває базу даних лише для читання й записує по одній сторінці на кожне досягнення кожною мовою — 495 сторінок, — а також дані таксономії та послуг, потрібні шаблонам. Він використовує лише стандартну бібліотеку, тож збірка сайту не залежить від середовища генератора, а оскільки результат закомічено, сайт збирається автономно. Найважливіше рішення в ньому стосується адрес. Раніше сайт виводив URL сторінки з перших слів її англійського формулювання, тож виправлення речення непомітно переносило сторінку й ламало всі посилання на неї: сайт, головний аргумент якого на свою користь — те, що він виправляє помилки, щоразу карав себе битим посиланням. Тепер адресу задають як дані: по одному рядку на кожну адресу кожного досягнення; перша адреса — поточна, а кожна наступна — виведена з ужитку, і для неї сайт видає перенаправлення. Під час тієї самої роботи зафіксували ще дві пастки. Порівняння періоду з текстовим стовпцем непомітно збігалося з усіма тридцятьма двома рядками через те, як база даних визначає спорідненість типів (type affinity) під час порівняння. А перелік мов тепер — єдина вісь, від якої залежать і цикл запису, і файли даних, і запити, тож додати четверту мову — це один запис у словнику, а не пошук по коду.
Результат. Чотириста дев’яносто п’ять сторінок генеруються з одного джерела, виправлення формулювання нічого не коштує, а всі адреси, які сайт будь‑коли публікував, і далі працюють. Експортер ухвалює рівно одне рішення щодо подання — як групувати послуги в тематичні розділи, — і це зроблено навмисно: усе інше, що він записує, належить базі даних, а якщо заголовка групи бракує якоюсь мовою, експорт зупиняється, замість того щоб показати англійський текст поверх перекладеного вмісту.
Читати далі: Написала тести для самих перевірок, з'ясувавши, що перевірка, яка отримує лише чисті вхідні дані, одного дня звітуватиме про чистоту, бо нічого не прочитала: підклала помилку правопису, щоб підтвердити, що перевірка орфографії її знаходить, і взяла діапазон ідентифікаторів із бази даних, а не з числа в тесті. Або перегляньте повне портфоліо.
Одна частина довшого переліку — і він увесь на цьому сайті.
Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.