Топорщившиеся усы подчёркивали благородство взгляда. Тёмные пятна оттеняли благородный серый оттенок. Длинный хвост изо всех сил молотил его по руке, когти впились в плечо, но всё вокруг — ладно, всё вокруг за исключением Саши, — потеряло своё первоначальное значение, пока он смотрел на здоровущего кота, устроившегося у него на руках и явно собиравшегося вытолкать в дверь.
— Ох, — только и выдавила из себя Александра. — Магнус, пожалуйста… — она протянула руку и попыталась вытащить когти кота из мужского плеча. Получалось плохо, но Игорь об этом ей не сказал. — Ну почему это всегда заканчивается одинаково? Почему ты на всех бросаешься?
— Магнус? — переспросил Игорь, поглаживая по толстой серой спине. — Что, прямо-таки на всех?
Саша потупила взгляд.
— Он даже моих родителей не переваривает, — призналась она. — Не говоря уж о каких-либо гостях. Однажды я вызывала врача на дом, так он едва его не искусал.
— Он ревнует, — Игорь улыбнулся коту в ответ на грозное шипение и обхватил его покрепче, прижимая к себе. Магнус, поразмыслив, втянул всё-таки когти и выдал то ли короткий рык, то ли особенно грозное мурчание. Но эта демонстрация дурного кошачьего характера была пропущена мимо ушей. — Твой котяра сейчас меня раздерёт. Моя сестры уверена в том, что коты так реагируют на мужчин, опасаясь, что будут притесняться в будущей… как она выражается? "Ячейке общества", что ли.
— Магнус видит мужчину впервые за последние полгода, — отметила Саша. — Папа уже давно к нам не заходил. Но на него он реагирует хуже. В тебе он, наверное, не видит угрозы.
Кот мяукнул и продемонстрировал Игорю внушительную лапу. Тот, впрочем, не спешил спускать зверя с рук; сколько лет он мечтал о коте! Большом сером коте, что будет встречать его дома…
Идеальная девушка: умная, красивая, да ещё и с таким прелестным питомцем. Чем не прекрасный выбор?
— Или считает меня удобным вариантом, — Игорь отказывался соглашаться с мнением кота, что больше никогда сюда не вернётся.
Саша услышала его возражение и как-то немного неловко потупила взгляд.
— Магнус, оставь человека в покое.
Игорь и Магнус одновременно уцепились друг в друга, словно не желали расставаться больше никогда на свете, и одинаково обиженно посмотрели на Сашу.
— Мрр-р-ру? — уточнил кот, потёршись головой о подбородок державшего его парня. Тот почесал Магнуса за ухом, получил ещё один укус, но, кажется, вполне доброжелательный, и вздохнул.
— Ты есть хочешь? — вопрос относился к Игорю, но согласно поспешил ответить Магнус. Он сиганул с мужского плеча прямо на хозяйку, едва не сбил по пути люстру с потолка и помчался к столу.
— Магнус хочет, — пожал плечами он. — А мне водички, если можно.
Саша практически бросилась на кухню; Магнус уже сидел на стульчике за столом и косился на неё, ожидая, когда его накормят, но девушка, кажется, предпочла сначала налить воды. Игорь последовал за нею: стоять одному в коридоре было как-то уж совсем не к лицу, и чувствовал он себя, если честно, ну очень неловко.
Впрочем, Александра тоже не знала, куда деться. Тоскливо посмотрела на немытую чашку, спешно откручивая кран, насыпала Магнусу в тарелку еду, и только потом с извинением посмотрела на него, ибо кошачья посуда ничем не отличалась от человеческой и стояла на столе.
— Он не хочет есть с миски, — пояснила она, пока кот вставал на задние лапы и тянулся к тарелке, не запрыгивая при этом на стол. — Только вот так. Я понимаю, что это странно выглядит.
— Коты не могут выглядеть странно, — Игорь занял свободный стул и почти с завистью посмотрел на Магнуса. — Они прекрасны в любом своём проявлении, — он сделал несколько глотков воды и сонно зевнул. — Сколько ж он весит?
— Одиннадцать с половиной, — Саша остановилась за спиной у кота и заботливо почесала ему шею. Тот не отвлёкся от еды ни на секундочку, чтобы отогнать или поощрить действия хозяйки, но на её губах уже расцвела нежная, полная любви улыбка. — Если б не Магнус, я, наверное, одурела бы от одиночества…
Игорь поднялся на ноги, опасливо косясь на люстру. Кухонька была маленькой, потолки — низкими, да и квартира, хоть и опрятная и довольно чистая, казалась просто крохотной. Он искренне надеялся, что Саша не заметит этот его взгляд, что это не повлечёт за собою очередную волну извинений; в конце концов, ему не хотелось бы её обидеть. Жилищные условия далеко не всегда определяют человека, и это был как раз тот случай.
Но так они оказались ближе друг к другу, чем предполагалось. Где-то фоном чавкал кот, доедая свою вечернюю порцию, и эти звуки самым наглым образом заменяли положенную в подобных ситуациях романтическую мелодию.
Подсознание требовало обнять Сашу и попытаться её поцеловать, сознание — отступить на пару шагов и не пугать девушку своей настойчивостью. Да и она сама, кажется, не знала, что делать; на мгновение подалась было вперёд, а после отшатнулась к стенке и неопределённо как-то махнула рукой.
— Я на диване постелю, — она едва слышно запиналась, явно волнуясь и не зная, что правильно было бы сказать. — Только… Магнус… Он обычно там спит и может быть против, но…
— Иди отдыхай, я сам разберусь с Магнусом. Дашь какой-то плед, и мне хватит, — усмехнулся Игорь. — Хотя тут тепло.
— Он очень сильно царапается, — начала было Саша, но закусила губу, вынудив себя умолкнуть. — Мне следовало поехать домой одной, правда. Не было бы столько проблем.
— Он, — кивнул Игорь на кота, — стоит любого расстояния.
И Саша тоже.
…Несомненно, диван не был примером удобства. Он оказался не таким уж и коротким, как мог предположить Игорь, но при этом пружинистым. Сашу этот факт, правда, смущал едва ли не больше его самого, и единственной причиной, по которой она не извинялась каждые три минуты, было то, что и это оказалось бы крайне неловким. Сейчас, в темноте крохотной квартиры, кажется, превращённой в двухкомнатную путём манипуляций с новыми стенами, было слышно, как она ворочалась в кровати за закрытой дверью.
Магнус остался снаружи, хотя Игорь предполагал, что обычно он спал либо на диване, либо с хозяйкой в постели. Кот вообще не слишком обрадовался, когда какой-то посторонний мужчина явился к нему в квартиру, а сейчас, кажется, возмутился до глубины души и, решив занять-таки законное положение, запрыгнул на гостя и устроился у него на животе, возложив тяжеленные лапы и голову на Игорю на грудь.
Однако, с котом лежать было интереснее, чем просто коротать время на коротком диване. Игорь, правда, стянул его с себя, сел, освобождая Магнусу вторую половину, и кот устроился поудобнее, поджав под себя лапы и сверкая в темноте своими глазищами.
— Скажи-ка, — промолвил Игорь, чувствуя себя полным идиотом, но при этом всё равно обращаясь к коту, — есть кто-нибудь у твоей хозяйки?
— М-не, — Магнус, кажется, всё понял, посмотрел на дверь, а после встал и перебрался к Игорю на колени. Сталкивать его во второй раз было бы уже совершенно некультурно, и Ольшанский запустил в тёплую мягкую шерсть пальцы.
Кот не вырывался. Это было по меньшей мере странно — коты редко положительно реагировали на посторонних. Но, очевидно, он искренне понравился Магнусу — иначе с чего бы оказывать подобную высокую честь и допускать до его пушистого высочества? Или, может быть, пушистый зверь и вправду что-то чувствовал.
…Игорь не помнил, когда уснул, но утром шея не болела — Магнус, свернувшись вокруг его плеч пушистой подушкой, обеспечил идеальный комфорт.
350
18 мая 2017 года
Четверг
Впервые за долгие годы работы Игорь второй раз подряд приходил первым на работу. То, что он заменял Регину, давало право требовать у охраны открыть офис пораньше; впервые причиной для этого было то, что они с Сашей приехали слишком рано — чтобы не выслушивать болтовню и дурацкие сплетни, во второй раз он был гоним уже жаждой разобраться с реализационными трудностями, с которыми они столкнулись, работая над проектом.
Структура наследования напоминала дерево — и какая-то из его ветвей вела не туда, куда следовало. Впервые за последние две недели он взялся за работу действительно серьёзно, ни на что не отвлекаясь; оно того стоило — запереться в кабинете, изолировавшись от постороннего шума, и отвлечься от всех жизненных неприятностей работой.
Что-то упорно не складывалось. Игорь смотрел на тонкую линию связи между старыми, уже существующими блоками закрытого кода и новыми планируемыми функциями и понимал, что этого будет мало. Даже если они реализуют всё а таком виде без фатальных ошибок, то рано или поздно неработоспособность будущего приложения даст о себе знать.
К сожалению, рано.
Он перевёл взгляд на тяжеленую структуру. Даже после того, как они вышвырнули оттуда целый кусок ежедневного обновления, а видоизменения вместо даты привязали к рандомайзеру и сошлись на комбинации из элементов — теперь это была уже проблема дизайнеров, как толково всё собрать, — всё равно оставалась целая куча звеньев, которые следовало выбросить к чертям собачьим.
Игорь раздражённо зашипел, глядя на строки бесполезного труда. Ему казалось, что элементы будут составлять ещё много-много недель, а когда придёт время всё соединять воедино, он уже сумеет найти какое-то красивое решение, но это изначально было очень наивно. Если не выдать результат до следующей пятницы, то он так и останется в этой точке — сдвигаться было некуда. Соединять элементы по блокам?
Не подойдёт.
Если бы они работали по старому доброму вотерфолу, то он бы оттянул это ещё дальше. Но сейчас, когда тестировщики уже висели на голове и интересовались, когда поток работы доберётся и до них, когда кто-то уже вздумал запилить юнит-тестирование, а у них не было цельной структуры…
Может быть, следовало заняться этой проблемой чуть раньше. Но когда? Игорь и так понимал, что выделяемого им года слишком мало для того, чтобы оправдать ожидания.
Зато как красиво сначала предлагали забрать в главный офис, туда, дать возможность карьерного роста… Согласились на свою голову.
Где-то здесь, в бесконечных перечнях блоков, было что-то, что он не дописал. Красивая связка, промежуточный контейнер, который теперь будет некому дать.
Игорь прежде не особенно уважал карандаши да бумагу — он предпочитал всё сразу переводить в код. Но с каждым днём проекты становились всё сложнее, и так просто воплотить свои идеи без предварительного плана больше не удавалось. Наверное, именно в тот момент он понял, насколько удобно иногда бывало накидать предварительную структуру.
И очень зря он раздал задания до того, как придумал это связующее. Теперь столько всего следовало подкручивать под уже готовые части…
Это должен быть аккуратный кусочек кода, несколько классов (абы не несколько десятков), которые потом станут расширяться и вылезут в полноценную систему… Более продуманный рандомайзер, возможно, часть, что будет продумывать сборку…
Он застыл с карандашом в руках, поймав наконец-то столь желанную идею за хвост.
Сочетаемость элементов. Не надо никакого дополнительного связующего звена; им нужно что-то вроде базы данных и блока по принятию решения. Не ежедневно новая линия взаимодействия с пользователем, не триста шестьдесят пять вариантов поведения, а крохотная сеть связей с нечёткой логикой, что поможет по подлавливаемым параметрам определить-таки, что нужно пользователю!
В дверь тихонько постучали. Он не поднял головы, не отреагировал даже, когда кто-то вошёл в кабинет.
На столе внезапно оказались стакан с водой и какие-то бутерброды.
— Ты безвылазно сидишь тут уже часов пять, — промолвил мягкий женский голос, и Игорь, посмотрев на часы, понял, что провалился слишком надолго. — Надеюсь, я не помешала.
— Как ты думаешь, — протянул он, — если отказаться от рандомизированных комбинаций и от подстройки соответствующих паттернов, а сойтись на маленькой сети, что будет провязывать элементы друг с другом и вызывать нужные в зависимости от соответствующей системы? И вшить эту систему таким образом, чтобы она основывалась на предпочтениях пользователя и менялась в зависимости от активности его взаимодействия с интерфейсом? Сначала что-то вроде демонстрации всех вариантов, сочетания элементов, а после анализ активности с ведением статистики и динамическая переработка индивидуально для пользователя, с помощью программы? Не искусственный интеллект, конечно, но действительно интерактивное взаимодействие, как от нас и хотели. Только не основанное на случайностях, а более продуманное.
— Да, но эту статистику придётся не только очень хорошо спрятать, а и ограничить в использовании ресурсов, чтобы она не была слишком трудоёмкой. И определить места, где логичнее всего было бы вести подсчёт. В таком случае, возможно, есть шанс определять всё без вреда для производительности, — кивнула Саша. — В целом, мне кажется, это очень хорошая идея. Возможно, она реализуется не так просто, как то, что мы думали раньше.