Я понял, что у меня мозг потечет из ушей, если я буду думать об этом всю ночь. Нужно переключиться – отвлечься на что-нибудь важное и увлекательное. Я открываю ноут и возвращаюсь к работе над 3D-книжным.

То и дело я поднимаю глаза на улицу за стеклом. Высматриваю тени, край серого пиджака или блеск темного глаза. Но там пустота. Работа мало-помалу развеивает мою оторопь, и я наконец вхожу в ритм.

Если трехмерная модель этого магазина предполагает какую-то пользу, то, наверное, она должна показывать не только где какая книга стоит, но и какие в данный момент на руках, и у кого. Для этого я наскоро запрограммировал журнальные записи последних недель и научил модель исчислять время.

Теперь книжки светятся на массивных 3D-полках, будто лампочки, а их цвета – это код: те, что брал Тиндэлл, светятся синим, зеленые – это Лапен, желтые – Федоров, и так далее. Довольно клево. Но тут же вылез баг: теперь, если раскрутить магазин вокруг оси, все полки гаснут и пропадают.

Я сижу, согнувшись над кодом и тщетно пытаясь найти ошибку, и вдруг весело звякает колокольчик.

От неожиданности я невольно всхрюкиваю. Не Эрик ли, случаем, вернулся снова орать на меня? А то, может, сам генеральный, Корвина, наконец явился, чтобы обрушить свой гнев на…

Это девушка. Она заглядывает в магазин от порога, она смотрит на меня и спрашивает:

– Вы открыты?

Ой, да, девушка с каштановыми волосами до подбородка и в красной футболке с оттиснутым на ней горчично-желтым словом «Шмяк», да, вообще-то мы открыты.

– Безусловно, – говорю я. – Можете войти. Мы открыты всегда.

– Я тут ждала автобус, и мне пришло сообщение – кажется, я получила купон?

Она проходит прямиком к стойке, протягивая мне телефон, и там на экранчике моя гугловская реклама. Супертаргетированная рекламная кампания для местных – я забыл о ней, а она все идет, и вот кого-то нашла. И цифровой купон, нарисованный мной, вот он, поглядывает с поцарапанного экрана ее смартфона. У нее шикарные ногти.

– Да! – подтверждаю я. – И отличный купон. Самый лучший!

Я говорю слишком громко. Она сейчас развернется и уйдет. Непостижимые рекламные алгоритмы Гугла привели ко мне девчонку-суперочаровашку, а я понятия не имею, что мне с ней делать. Она крутит головой, оглядывая магазин. Как будто с недоверием.

От таких мелочей зависит история. Разница в тридцать градусов, и моя история окончилась бы прямо здесь. Но угол наклона моего ноута ровно таков, а на экране трехмерная модель магазина бешено вращается в двух плоскостях, как звездолет, кувыркающийся в пустыне космоса, и девушка бросает на него взгляд, и… – Что это? – спрашивает она, подняв бровь.

Прекрасную темную бровь.

Ага, теперь я должен все сделать как надо. Не показаться конченным ботаном.

– Ну, это модель вот этого магазина, и тут видно, какие книги можно…

У девушки загораются глаза:

– Визуализация данных!

Недоверия как не бывало. Она чем-то внезапно довольна.

– Точно, – подтверждаю я.

– Именно она. Вот, глядите.

Двинувшись навстречу друг другу, мы встречаемся на торце стойки, и я показываю 3D-книжный, который по-прежнему исчезает, если слишком раскрутится. Она наклоняется к экрану.

– Можно посмотреть исходный код?

Если злоба Эрика удивляла, то любопытство этой гостьи просто изумляет.

– Конечно, – отвечаю я и тасую темные окошки, пока экран не заполняется чистым Ruby, пестрящим красными, золотыми и зелеными фразами.

– Этим я занимаюсь на работе, – говорит девушка, нависая над экраном и вглядываясь в код. – Визуалом. Не против?

Она показывает на клавиатуру. Ха, нет, прекрасная ночная хакерша, я не против.