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