Именно такой человек мне и был нужен.

В общем, договор на технический разбор за фиксированную сумму Наталья Борисовна оформила за два дня. Пакет документов ушёл Рудько электронной почтой. Ответ он тоже прислал электронкой, подписанный экземпляр договора и расчёт передали обычным способом через бухгалтерию. Я счёт подписал ещё до того, как открыл письмо.

Рецензия…

Семь страниц и двадцать три пункта, без вступления. Первый абзац начинался со слов «Автор описания считает, что».

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

«п. 4. Выбор цепочки при равной работе. В описании (стр. 3, второй абзац) стоит „наибольшая накопленная работа“, и на этом всё. Что узел делает при равенстве, не написано нигде. Судя по присланным журналам, команда оставила этот случай на усмотрение реализации, отсюда зависание. Претензия к автору описания. Как сделал бы я, по-простому: держать ветку, увиденную первой, менять только на ту, где работы строго больше. Проверку на равенство выкинуть вместе с ожиданием, следующий блок рассудит».

Девятый пункт я сначала пролистнул, потом вернулся к нему. Транзакции проигравшей ветки у нас просто исчезали, и про это Рудько написал злее всего: «Возвращать в очередь неподтверждённых и пытаться включить в следующие блоки. Иначе подтверждение платежа зависит от того, какая ветка победила при восстановлении связи. В нормальной системе транзакция не должна молча исчезать только потому, что блок, в котором она находилась, оказался частью проигравшей ветки». На полях я приписал «Миша».

Двенадцатый был короткий, в две строки, про синхронизацию после разрыва: сначала узлы обмениваются заголовками цепочек, потом, после выбора актуальной ветки, запрашивают тела недостающих блоков.

Я положил распечатку на стол и какое-то время на неё смотрел. Я это знал. Ветка, которую узел увидел первой, держится, пока её не перевесят, и перевесить её можно только строго большей работой. В той жизни я видел это в чужих схемах и в чьих-то разборах, и слово «строго» там тоже где-то стояло. Принцип я узнавал до последней запятой. Код за ним я не помнил, потому что никогда его и не видел. У меня в голове лежала картинка с квадратиками и стрелочками, и сейчас Рудько, человек, привыкший разбирать такие системы до последнего спорного места, переводил её в формулировки, которые уже можно было отдать парням.

Я подчеркнул слово «строго» второй раз.

В два часа я позвонил.

— Станислав, это Артём Дорохов. Я прочитал.

— Хорошо. — Голос был ровный и без интереса ко мне. — Вопросы у вас есть?

— Пункт четвёртый. Вы предлагаете не переключаться при равной работе. А если две ветки так и будут расти одинаково?

— Для обычной работы сети длительное точное равенство маловероятно. Но вы сами его получили на тесте. Значит, правило для такого случая всё равно должно существовать. У вас описано, что делать, когда одна ветка сильнее другой. А когда работы поровну — ничего. Ваш клиент на этом и зависает.

— То есть проблема не в самом равенстве?

— Проблема в том, что программа не знает, что с ним делать. Равенство — нормальный случай, который вы забыли определить. Вы хотите, чтобы я вас похвалил или чтобы это заработало?

— Второе.

— Тогда перепишите четвёртый и девятый и пришлите мне. Я посмотрю ещё раз, это в сумму входит. И, Артём Сергеевич, описание писали вы?

— Я.

— Направление у вас правильное. Местами кажется, что описание писал человек, который знает, чем всё должно закончиться, и пропустил середину. Такое встречается редко. Большинство людей, которые приходят ко мне с идеями электронных денег, решают одну задачу и не видят системы целиком. Но описание протоколом ещё не стало. Протокол — это когда на каждый вопрос «а если» есть ответ. У вас их пока штук пять без ответа. Я пронумеровал.

Он попрощался и повесил трубку. Я ещё раз перечитал семь страниц, сделал на полях несколько дополнительных рабочих пометок, потом переслал письмо Рудько с приложенным отчётом всем парням по электронной почте, включая и Кита.

После этого собрал распечатку и пошёл к своим криптопионерам.

— Получил разбор от независимого специалиста, — сказал я, положив листы на стол. — От Рудько, Ярик. Я вам его уже переслал, только что. Это бумажная копия с моими пометками. Пройдёмся по тому, что он нашёл.

Я посмотрел в документ.

— Антон, тебе четвёртый пункт. Правило равной работы. Не латать зависание, а сначала решить, что именно должен делать узел, когда две ветки имеют одинаковую накопленную работу. Решение записать в описание протокола, потом уже менять код.

Шевелёв кивнул.

— Понял.

— Миша, девятый. Очередь неподтверждённых транзакций. Нужно разобраться, что происходит с транзакцией из проигравшей ветки и как при возврате в очередь исключить возможность подсунуть чужую.

— Хорошо.

— Ярослав, двенадцатый. Синхронизация после разрыва. Посмотри порядок обмена заголовками и загрузки тел блоков. И проверь, не осталось ли ещё мест, где мы подразумеваем правило, но не записали его.

Белоусов молча кивнул.

— Пётр, ты вместе с Мишей проверь возврат транзакций. Мне нужно отдельно убедиться, что после восстановления связи узел не примет чужую транзакцию за свою.

— Понял, — ответил Гурьев.

Я постучал пальцем по четвёртому пункту.

— Переписанный текст по четвёртому и девятому скиньте мне — я отправлю Рудько снова на проверку. Ммм… Да, если правило не записано, кодом мы его сейчас не чиним. Сначала решаем, как должен работать протокол. Потом фиксируем это в описании. Потом тестируем.

— И когда тест? — спросил Шевелёв.

— В эту пятницу. При мне.

— Договорились, — сказал Белоусов. — Текст по четвёртому и девятому подготовим и отправим тебе. Скорее всего, уже завтра.

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

Марина

Тополиный пух, жара, июль…

А, нет. Июнь.

Алгебру Сашка написал на три. Списки вывесили через два дня на стекле у входа, и Сашка позвонил мне сам сразу же: «Три, Марин. Честная». Я сказала «хорошо». Что тут сказать?.. Анри Пуанкаре, скорее всего, посмотрел бы на моего брата скептически, покачал головой и не одобрил бы такой результат. Но я одобрила, не стала его пилить. Думаю, он выжал из себя всё, что мог на тот момент.

Русский он сдал на четыре. По информатике поставили четыре с минусом, и минус в ведомость, конечно, не вошёл. Я к школе не ездила, Вадим довозил его по утрам и возвращался за мной.

На физику я поехала всё же с братом, рано утром. Это был его последний экзамен, и мне хотелось хотя бы один раз нормально поддержать его. Кое-как выделила время в своём занятом графике.

Вадим поставил машину напротив школы, на другой стороне улицы. Он, как обычно, начал читать книжку, я открыла ноутбук. Пока ждали, успела разобрать несколько писем и поправить большой кусок Олесиного текста про продолжающееся следствие в отношении бывшего директора департамента здравоохранения Иванова Валерия Николаевича вскрывшиеся новые коррупционные факты. Похоже, в обозримом будущем Ивановой придётся в полном одиночестве коротать дома холодные вечера.

Глава 14

Марина

Из школы время от времени высыпали ученики. Возле забора несколько мальчишек курили, пряча сигареты от проходивших мимо взрослых. Вспомнила сейчас… Был у меня одноклассник, ровно в девятом классе, на один год. Он был второгодник, что ли. И при этом он был ещё из этих — приблатненных, околокриминальных. Костя его звали. Причем, по поведению не типичная гопота девяностых, а с манерами, вежливый. Прям джентльмен. Джентльмен из Кали, ага. Он был курящим. И я неоднократно слышала, как он после курева за углом школы говорил мальчишкам в классе: «Ребята, на меня сигареты действуют как-то чудотворно. Я как курю, чувствую, что мои лёгкие очищаются!». И находились те, кто ему верил.