
KafkaRail гудел на фоне.
Паб The Broken Tag, где начиналось утро героев, только просыпался — запах старого эля, крошки лог‑файлов, и бильярдный стол под тусклым светом прожектора. Через узел маршрута /corp/news метропоезд пронёсся, как push‑уведомление на рассвете. День в Киберляндии начинался.
JSON откинул капюшон куртки BitStone Protocol с QR‑патчем на рукаве, кивнул Mr. Parseley и заказал, как обычно, Schema Fresca. Он прошёл к бильярдному столу английского пула, стоявшему под старым плакатом «Keep Calm and Close Tags», где RAMmy спорил с TryCatch о синтаксисе ударов.
Из старых колонок у стойки звучала группа Lost In Commit:
I render hopes in brittle code
Escaped a tag I never closed
In echoed rooms of trailing lines
I seek her name in error signs
RAMmy, в своём бомбере от HardLoop, цедил Stack Overflow Stout, как будто распарсивал его. TryCatch, в жилете Threadidas, осторожно отпивал Uncaught Pale Ale, словно ждал исключения на вкус.
— Ты видел вчерашнюю сборку? — пробормотал RAMmy, нацеливаясь на белый шар.
— Сборка, как моя бывшая — зависает, когда не надо, — ответил TryCatch, закатывая очередной шар в лузу.
Indexor подошёл с блокнотом в своём неизменном пиджаке HardLoop с патчем «RFC-9219 inside» и пинтой Cask & Query Ale:
— Вы забыли декларировать приоритет удара. Сначала средний, потом угловой. Прочитайте регламент.
— Мы тут не JSON Schema валидируем, а играем, — огрызнулся RAMmy.
RAMmy в итоге выиграл партию, аккуратно закатив восьмёрку — чёрный шар — в среднюю лузу после серии жёлтых. Его цвет был ясен — красные достались TryCatch.
— Стол 7 футов, а ты всё равно не просчитал отскок, — усмехнулся RAMmy.
— Зато я умею проигрывать красиво и без фолов, — пожал плечами TryCatch.
Mr. Parseley, вытирая пинту уголком старого лог‑файла, подмигнул:
— Валидировано. Но без гарантий.
— Знаете, кого я вчера встретил на КорпКоре? — сказал JSON, глядя на пену. — SyntaXis.
— Оооо, — протянул RAMmy. — Тебе снова поставили strict mode?
— Она прекрасна, как идеально вложенный объект. Но когда я сказал ей «ты дополняешь мою структуру», она нашла у меня лишнюю запятую.
— Любит порядок, ничего не скажешь, — хмыкнул TryCatch.
Дверь чуть скрипнула — не для драмы, а по причине устаревшей смазки. Вошёл Сэр Регинальд Таггингтон III, он же XML Dragon. Не потому что хотел, а потому что паб The Closing Tag на Архитекстауне временно закрылся на валидацию.
— А вот и он... — пробурчал Indexor. — Валидатор со стажем. У него DOCTYPE прописан даже на визитке.
— JSON, снова в своих этих… полуструктурных шалостях? — буркнул XML Dragon.
— У нас тут паб, сэр. А не валидаторская.
— У вас тут отсутствие DTD и моральной схемы. Всё рассыплется от первого undefined.
RAMmy выронил кружку:
— Ну всё, опять началось.
— Ты, JSON, можешь сколько угодно стучать кавычками, но с дамами вроде SyntaXis тебе не светит. — Добавил XML.
— Я хотя бы живу, а не валидирую своё прошлое.
— Потом не удивляйся, что тебе вернут null вместо ответа.
— Лишь бы не 403.
— Если не умеешь закрывать скобки — не открывай. — сказал XML Dragon и хмыкнул.
Они обменялись долгим взглядом, словно старый тег и свежий ключ. Затем XML Dragon взял свой бокал виски Tag & Order с барной стойки, развернулся и сел за дальний столик — подальше от шума, ближе к воспоминаниям.
— Mr. Parseley, а ты бы как пригласил её? — неожиданно спросил JSON, не отрывая взгляда от пены.
— Пиши просто, но логично. Если она валидируется — значит, совпадение по типу.
— А если нет?
— Тогда делай graceful fallback. Главное — не теряй контекст.
— Запятые могут всё испортить. Но и без них — никак. Не забудь закрыть теги. — сказал Mr. Parseley, отставляя бокал.
? А в колонках продолжала играть группа Lost In Commit:
She validates what I can”t name
A schema written into flame
And though my logic still may fail
I”ll loop again — without a trail