Именно такой человек мне и был нужен.
В общем, договор на технический разбор за фиксированную сумму Наталья Борисовна оформила за два дня. Пакет документов ушёл Рудько электронной почтой. Ответ он тоже прислал электронкой, подписанный экземпляр договора и расчёт передали обычным способом через бухгалтерию. Я счёт подписал ещё до того, как открыл письмо.
Рецензия…
Семь страниц и двадцать три пункта, без вступления. Первый абзац начинался со слов «Автор описания считает, что».
Я читал в кабинете, с чашкой земляничного чая, с распечаткой, потому что с экрана такое читать не хотелось. Пункт четвёртый был обведён мной карандашом ещё на первом проходе.
«п. 4. Выбор цепочки при равной работе. В описании (стр. 3, второй абзац) стоит „наибольшая накопленная работа“, и на этом всё. Что узел делает при равенстве, не написано нигде. Судя по присланным журналам, команда оставила этот случай на усмотрение реализации, отсюда зависание. Претензия к автору описания. Как сделал бы я, по-простому: держать ветку, увиденную первой, менять только на ту, где работы строго больше. Проверку на равенство выкинуть вместе с ожиданием, следующий блок рассудит».
Девятый пункт я сначала пролистнул, потом вернулся к нему. Транзакции проигравшей ветки у нас просто исчезали, и про это Рудько написал злее всего: «Возвращать в очередь неподтверждённых и пытаться включить в следующие блоки. Иначе подтверждение платежа зависит от того, какая ветка победила при восстановлении связи. В нормальной системе транзакция не должна молча исчезать только потому, что блок, в котором она находилась, оказался частью проигравшей ветки». На полях я приписал «Миша».
Двенадцатый был короткий, в две строки, про синхронизацию после разрыва: сначала узлы обмениваются заголовками цепочек, потом, после выбора актуальной ветки, запрашивают тела недостающих блоков.
Я положил распечатку на стол и какое-то время на неё смотрел. Я это знал. Ветка, которую узел увидел первой, держится, пока её не перевесят, и перевесить её можно только строго большей работой. В той жизни я видел это в чужих схемах и в чьих-то разборах, и слово «строго» там тоже где-то стояло. Принцип я узнавал до последней запятой. Код за ним я не помнил, потому что никогда его и не видел. У меня в голове лежала картинка с квадратиками и стрелочками, и сейчас Рудько, человек, привыкший разбирать такие системы до последнего спорного места, переводил её в формулировки, которые уже можно было отдать парням.
Я подчеркнул слово «строго» второй раз.
В два часа я позвонил.
— Станислав, это Артём Дорохов. Я прочитал.
— Хорошо. — Голос был ровный и без интереса ко мне. — Вопросы у вас есть?
— Пункт четвёртый. Вы предлагаете не переключаться при равной работе. А если две ветки так и будут расти одинаково?
— Для обычной работы сети длительное точное равенство маловероятно. Но вы сами его получили на тесте. Значит, правило для такого случая всё равно должно существовать. У вас описано, что делать, когда одна ветка сильнее другой. А когда работы поровну — ничего. Ваш клиент на этом и зависает.
— То есть проблема не в самом равенстве?
— Проблема в том, что программа не знает, что с ним делать. Равенство — нормальный случай, который вы забыли определить. Вы хотите, чтобы я вас похвалил или чтобы это заработало?
— Второе.
— Тогда перепишите четвёртый и девятый и пришлите мне. Я посмотрю ещё раз, это в сумму входит. И, Артём Сергеевич, описание писали вы?
— Я.
— Направление у вас правильное. Местами кажется, что описание писал человек, который знает, чем всё должно закончиться, и пропустил середину. Такое встречается редко. Большинство людей, которые приходят ко мне с идеями электронных денег, решают одну задачу и не видят системы целиком. Но описание протоколом ещё не стало. Протокол — это когда на каждый вопрос «а если» есть ответ. У вас их пока штук пять без ответа. Я пронумеровал.
Он попрощался и повесил трубку. Я ещё раз перечитал семь страниц, сделал на полях несколько дополнительных рабочих пометок, потом переслал письмо Рудько с приложенным отчётом всем парням по электронной почте, включая и Кита.
После этого собрал распечатку и пошёл к своим криптопионерам.
— Получил разбор от независимого специалиста, — сказал я, положив листы на стол. — От Рудько, Ярик. Я вам его уже переслал, только что. Это бумажная копия с моими пометками. Пройдёмся по тому, что он нашёл.
Я посмотрел в документ.
— Антон, тебе четвёртый пункт. Правило равной работы. Не латать зависание, а сначала решить, что именно должен делать узел, когда две ветки имеют одинаковую накопленную работу. Решение записать в описание протокола, потом уже менять код.
Шевелёв кивнул.
— Понял.
— Миша, девятый. Очередь неподтверждённых транзакций. Нужно разобраться, что происходит с транзакцией из проигравшей ветки и как при возврате в очередь исключить возможность подсунуть чужую.
— Хорошо.
— Ярослав, двенадцатый. Синхронизация после разрыва. Посмотри порядок обмена заголовками и загрузки тел блоков. И проверь, не осталось ли ещё мест, где мы подразумеваем правило, но не записали его.
Белоусов молча кивнул.
— Пётр, ты вместе с Мишей проверь возврат транзакций. Мне нужно отдельно убедиться, что после восстановления связи узел не примет чужую транзакцию за свою.
— Понял, — ответил Гурьев.
Я постучал пальцем по четвёртому пункту.
— Переписанный текст по четвёртому и девятому скиньте мне — я отправлю Рудько снова на проверку. Ммм… Да, если правило не записано, кодом мы его сейчас не чиним. Сначала решаем, как должен работать протокол. Потом фиксируем это в описании. Потом тестируем.
— И когда тест? — спросил Шевелёв.
— В эту пятницу. При мне.
— Договорились, — сказал Белоусов. — Текст по четвёртому и девятому подготовим и отправим тебе. Скорее всего, уже завтра.
До психоаналитического сеанса оставалось несколько часов, и я впервые за день подумал о чём-то, кроме криптотематики.
Марина
Тополиный пух, жара, июль…
А, нет. Июнь.
Алгебру Сашка написал на три. Списки вывесили через два дня на стекле у входа, и Сашка позвонил мне сам сразу же: «Три, Марин. Честная». Я сказала «хорошо». Что тут сказать?.. Анри Пуанкаре, скорее всего, посмотрел бы на моего брата скептически, покачал головой и не одобрил бы такой результат. Но я одобрила, не стала его пилить. Думаю, он выжал из себя всё, что мог на тот момент.
Русский он сдал на четыре. По информатике поставили четыре с минусом, и минус в ведомость, конечно, не вошёл. Я к школе не ездила, Вадим довозил его по утрам и возвращался за мной.
На физику я поехала всё же с братом, рано утром. Это был его последний экзамен, и мне хотелось хотя бы один раз нормально поддержать его. Кое-как выделила время в своём занятом графике.
Вадим поставил машину напротив школы, на другой стороне улицы. Он, как обычно, начал читать книжку, я открыла ноутбук. Пока ждали, успела разобрать несколько писем и поправить большой кусок Олесиного текста про продолжающееся следствие в отношении бывшего директора департамента здравоохранения Иванова Валерия Николаевича вскрывшиеся новые коррупционные факты. Похоже, в обозримом будущем Ивановой придётся в полном одиночестве коротать дома холодные вечера.
Глава 14
Марина
Из школы время от времени высыпали ученики. Возле забора несколько мальчишек курили, пряча сигареты от проходивших мимо взрослых. Вспомнила сейчас… Был у меня одноклассник, ровно в девятом классе, на один год. Он был второгодник, что ли. И при этом он был ещё из этих — приблатненных, околокриминальных. Костя его звали. Причем, по поведению не типичная гопота девяностых, а с манерами, вежливый. Прям джентльмен. Джентльмен из Кали, ага. Он был курящим. И я неоднократно слышала, как он после курева за углом школы говорил мальчишкам в классе: «Ребята, на меня сигареты действуют как-то чудотворно. Я как курю, чувствую, что мои лёгкие очищаются!». И находились те, кто ему верил.