1. Як перетворити хотілку на технічне завдання
— «Радар землетрусів усього світу… Масштабно!», — видає Льоха. — А що саме він показує? Просто точку на мапі?
Тьома відкрив рота. Закрив. Точку. Ну… де струсонуло. Вголос це прозвучало б зовсім кволо, тож він промовчав.
— Ось саме, — продовжує Льоха. — «Ну десь» і «ну якось». Це, брате, не завдання. Це настрій.
Тьома хмикнув. Настрій у нього був — хоч зараз у бій. А от що саме робити руками — суцільний туман.
— Дивись. Є хотілка, а є завдання. «Хочу радар, який показує землетруси наживо» — це хотілка. Гарно, але Сашкові з цим робити нічого. А завдання звучить інакше: потрібні ось такі дані про кожен поштовх, брати їх ось там, а якщо даних немає — поводитися ось так. Відчуваєш різницю? Перше — фантазії. Друге — те, з чим уже можна працювати.
— Тобто поки мої слова — це «іди туди, не знаю куди, принеси те, не знаю що»?
— Саме так. І щоб нарешті стало зрозуміло — уяви, що ви, припустімо, замовляєте їжу. Ви ж курʼєру не пишете «привезіть чогось поїсти»?
— Ну, так. Напишеш так — приїде якийсь холодний суп, який я й до рота не візьму.
— І самі винні. Нормальне замовлення — це три речі: що саме ви хочете, де брати і, про всяк випадок, що робити, якщо щось піде не так — кухня закрита, страва закінчилася. Хоча це я вже забігаю наперед.
Тьома зловив себе на тому, що киває у відповідь повідомленням. Курʼєр, кухня, «якщо щось піде не так» — він подумки підставив замість їжі свій радар, замість ресторану — сервіс із поштовхами, і все почало ставати на свої місця.
2. Що таке поля даних і як їх вибирати
— Продовжимо, — Льоха заводить поруч із проєктом коротку нотатку і дає їй імʼя: DATA_REQUEST. — Це бланк замовлення: що ми хочемо отримати і навіщо. Щоб не тримати все в голові.
І все. Далі мовчить. Тьома втупився в порожній бланк. З чого взагалі почати — незрозуміло.
— А що сюди писати? З чого починати?
— З полів. І поруч із кожним — навіщо воно вам потрібне та що дасть на екрані.
Цього вистачило. Тьома зрозумів, куди думати, і підсунув клавіатуру.
— Поле, — пише Льоха, — це одна окрема штука про одну подію. Не «всі дані про землетрус, звалені докупи», а по клітинках. Сила поштовху — окремо. Місце — окремо. Час — окремо. Як в анкеті: прізвище в одній клітинці, дата народження — в іншій.
— Ага. Майже зрозуміло. І що нам брати?
— Беріть тільки те, що справді зʼявиться на екрані. Якщо поле нікуди на екран не потрапить — зараз воно вам не потрібне. Не тягніть усе підряд про всяк випадок.
Тьома почав перебирати в голові: ось стався поштовх — що я про нього хочу показати? Силу поштовху. Де і коли. Щоб поставити точку — координати. І ще, мабуть, глибину. Кожне поле він подумки роняв на мапу: потрапить — беру, не потрапить — минаю. Пʼять штук лягли красиво.
# DATA_REQUEST
ДЖЕРЕЛО: публічний сервіс землетрусів
ПОЛЯ: магнітуда, місце, координати, час, глибина
— А тепер обґрунтуй, — пише Льоха. — Навіщо вам кожне?
Тьома тицьнув у рядок і пішов зверху вниз:
- магнітуда — сила поштовху, число на кшталт 4.2. Чим сильніший поштовх, тим більша точка.
- місце — де сталося, словами: «120 км на південний захід від Акарі, Перу». Підпис, щоб було по-людськи.
- координати — точка на глобусі в цифрах. Без них незрозуміло, куди ставити позначку.
- час — коли трусонуло. За ним зрозуміємо, скільки хвилин минуло, тобто наскільки дані свіжі.
- глибина — наскільки глибоко залягає осередок. Дрібниця, але хай буде.
— О, — відгукується Льоха. — Чуєш, як це звучить? Не «дай чогось справжнього», а пʼять конкретних полів, і під кожним — навіщо. Оце вже не хотілка.
Тьома знизав плечима — але усмішку стримати не зміг. Навіть трохи знітився: пʼять хвилин тому ніс повну маячню, а тут раптом говорить як людина, яка розуміє, що робить.
— Бланк каже, ЩО ми замовили, — продовжує Льоха. — Тепер друга половина: КУДИ кожне поле ляже на екрані. Інакше дані так і залишаться просто числами, які незрозуміло куди подіти.
У чат прилітає друга незнайома назва — DATA_SCHEMA-lite.
— Це про те, як воно виглядатиме. Далі самі. Думайте!
Ну гаразд — знову самому. Магнітуда — це що на екрані? Розмір. Свіжість — яскравість. Координати — куди поставити. Тьома набирає три рядки:
# DATA_SCHEMA-lite
· магнітуда → розмір точки
· свіжість (хвилин тому) → яскравість
· координати → позиція на мапі
Перечитав. Читається як меню: сильний поштовх — велика точка, свіжий — яскрава, старий — тьмяна, а місце задають координати. Поки набирав «магнітуда → розмір точки» — просто побачив картину в голові. І не рядок, а саму точку: велику, яскраву, на темній мапі. А «час → яскравість» — і ті самі точки гаснуть на очах: оця свіженька, ця вже старенька.
Точки різного розміру й яскравості вже стояли в нього перед очима.
— Гарно, — сказав він уголос.
— Гарно, — погоджується Льоха.
3. Закладаємо поведінку під час збою джерела
— А тепер скажи, — продовжує Льоха. — Що радар покаже, якщо сервіс із даними раптом не відповість? Завис, ліг під навантаженням, інтернет моргнув — хто зна.
Тьома відкрив рота з готовим «ну…» і завис.
— Нічого не покаже?
— Ось тут обережно, — пише Льоха. — Тиша буває двох видів, і їх легко сплутати. Перша: у світі зараз просто немає нових поштовхів. Тихо, спокійно, все чесно. Друга: сервіс не відповів — звʼязок обірвався, сервер ліг. Це зовсім інше. Не відрізните їх — радар або збреше «все спокійно», коли насправді не додзвонився, або почне панікувати на рівному місці.
— Тобто порожній білий екран — це взагалі не варіант?
— Не варіант. На цей випадок дописуємо в замовлення ще один рядок — план Б.
Тьома додав його в бланк:
FALLBACK: сервіс мовчить → тримаємо останній знімок + плашка «чекаю нові дані»
— Або показуємо останню картину, що встигла прийти, — каже Льоха, — або чесно пишемо «чекаю нові дані». Але не білий екран. І не брешемо, ніби дані є завжди.
Тьома відкинувся на спинку. Раніше для всіх усе було простіше: код запускається — значить, працює, все на місці. А тут інакше. Виходить, чим живіша річ, тим легше її зламати: причепив гарну картинку до чужого сервісу — і привіт, білий екран, щойно той замовкне. Отже, що робити в тиші, треба вирішити заздалегідь. Не над погаслим екраном міркувати, а до того.
— Це, виходить, треба одразу все це враховувати? — каже він. — Не потім?
— Одразу. Потім буде запізно.
— До речі, — додає Льоха, ніби між іншим. — Місце, де ми братимемо дані, — це не «інтернет загалом», а конкретний сервіс, який уміє відповідати на конкретні запити. Називається API. Поки просто запамʼятайте це слово, пізніше ми до цього ще повернемося.
Тьома подумки перевісив ярлик. Раніше в голові було розмите «десь у мережі». Тепер — «є конкретний сервіс API, який знає про землетруси». Поки просто запамʼятаймо.
— І ще, — Льоха на секунду серйознішає. — Полізете до справжніх сервісів — зʼявляться штуки, які агенту в чат кидати не можна. Без страшилок, просто зарубіть на майбутнє: скоро будуть ключі й паролі, і поводитися з ними треба дуже обережно, не так, як зі звичайним текстом.
— Ключі. Зрозумів: не кидати.
— Угу.
Тьома ще раз глянув на обидва бланки. Пів години тому він не міг вигадати нічого, крім «дані там якісь». А тепер на екрані — пʼять полів, схема того, як вони стануть точками, і рядок про те, що робити, якщо сервіс затупить. Earthquake Radar перестав бути просто красивою назвою: його вже можна віддати Сашкові в роботу. Майже.
Залишалося одне питання, і воно стирчало скалкою: як мій код узагалі добереться до цього сервісу?
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ