Эра Шредингера. Часть 2. Пороли-пороли
А может быть, уже и не будущем.
В корпоративную почту заказчика мне прилетело оповещение об ошибках одного из моих PR на CI. Утилита под названием metastatic сообщает об ошибках в файлах, к которым я близко не подходил и вообще впервые вижу. Сомневаюсь, что название утилиты связано с медициной и соответственно метастазы либо у нее, либо она их вызывает. Так что она наверное делает "мета-статический" анализ, то есть статический анализ, который не совсем статический, или не совсем анализ. Но, что бы это ни было, оно явно трындит: “CI, ты трындишь, CI!”. Ганеша, что это вообще такое? Но Ганеша молчит и смотрит на меня своими умными глазами. Хотя это - вопрос риторический. В основном в таких ситуациях надо просто сделать rebase на master и таким образом перезапустить CI.
А раз так, то мне нужно внутри VDI открыть еще одну VDI, потому что только так я могу получить доступ к репозиторию заказчика. Пароль у этой VDI - EbenaTereno@1466 и это снова фраза на Эсперанто, которая означает "равнина", а не то, что вы подумали. Цифры 1466 вам уже должны быть знакомы.
Когда я кому-нибудь говорю о VDI внутри другой VDI, мне не верят, дескать: "Ну это ты точно придумываешь! Такого не бывает!", - поверьте, бывает. Причем, все очень просто. Дело в том, что наши заказчики - фирма Axionica - тоже используют VDI, доступ к которой возможен только из их инфраструктуры. А, так как их сотрудники используют свои корпоративные ноутбуки, то они открывают эту VDI напрямую. Но поскольку нам, то есть галерам, прямой доступ в святая святых заказчика заказан, то приходится иметь дело с дополнительным промежуточным звеном в виде еще одной VDI.
И это - отнюдь не единственный и, кстати, далеко не худший вариант. Менее прижимистые заказчики давали нам корпоративные ноутбуки, а одни даже расщедрились на айфоны для 2FA, но это был единичный случай.
Но самым фееричным в моей практике было, когда разработка велась через RDP на удаленных компьютерах, физически расположенных в офисе заказчика. И тут важны два факта. Факт первый. На тех компьютерах был установлен Windows. А Windows - система какая? Однопользовательская. Факт второй. Удаленных компьютеров было вдвое меньше, чем людей в команде. Поэтому пока этот удаленный компьютер занят одним человеком, другой вынужден заниматься non-delivery, и я пожалуй не совру, если скажу, что в большинстве случаев это было ни чем иным, как пинанием балды. Я время от времени задавался вопросом: "Это какой вид многозадачности получается: кооперативная, или вытесняющая?".
Порой сидишь себе, работаешь, и вдруг у тебя ни с того, ни с сего сообщение на пол экрана: "Такой-то такой-то хочет занять систему. Нажмите 'Отмена' в течение 10 секунд, иначе он ее займет". Естественно, нажимаешь "Отмена", а потом тебе в Zoom приходит:
- Вова, пусти за remote. Срочно нужно!
- Тебе долго работать?
- Где-то полдня.
- Ладно, подожди 20 минут, я свое доделаю.
- Спасибо!
А еще бывало такое, что отвлекаешься попить чаю, или воды налить, или в туалет сходить, возвращаешься, а в системе уже другой человек, и теперь уже ты вынужден писать в чат. Но вся команда прекрасно понимала ситуацию, поэтому никто ни на кого не злился.
Помимо этого, кто-то в офисе заказчика время от времени отсоединял этот удаленный компьютер от сети, в результате чего приходилось либо писать PO, либо ехать самому в его офис для того, чтобы воткнуть его обратно. Так на дэйли время от времени были отчеты вида: “Ездил в офис заказчика подсоединить удаленный компьютер к сети”.
В общем, время - деньги, а денег у заказчика много. Так что наш менеджмент вместе с менеджментом заказчика обеспечил нам такое окружение, которое нам давало более чем достаточно времени для занятий в анки. Кстати, Эсперанто я выучил именно в процессе работы над тем проектом. Спасибо им на то сердечное. А еще мне бы очень и очень хотелось посмотреть, как те, кто такое придумал, вместе дружно поработали за одним ноутбуком.
VDI загрузилась внутри, но произошло нечто ужасное! Она оказалась в состоянии DM с недоступным полем ввода пароля. По опыту знаю, что это лечится только перезагрузкой. Сделать это несложно и происходит все это быстро, но перспектива того, что будет дальше, заставляет кое-какие мышцы моего тела сжаться.
После перезагрузки и отображения рабочего стола VDI, появляется предложение ввести пароль. Само собой разумеется, что рабочий стол при этом блокируется. И тут есть смысл открыть блокнот и скопировать туда пароль из KeePass. Да, это плохо с точки зрения компьютерной безобразности, и я бы этого не делал, если бы не одна особенность той VDI, куда я сейчас пытаюсь попасть. Ее буфер обмена работает через раз. Поэтому копировать пароль напрямую из KeePass здесь — дохлый номер.
Так вот, мы скопировали пароль из KeePass в блокнот. А теперь надо скопировать пароль из блокнота и вставить его в поле ввода. Рабочий стол разблокируется, но радоваться рано. Я двигаю мышку и он блокируется снова. Снова надо ввести тот же пароль. И здесь есть смысл для надежности еще раз скопировать этот пароль из блокнота, потому что так больше шансов, что VDI затем вставит в поле ввода именно его, а не что-то другое. А через несколько секунд операция повторяется снова, но на этот раз VDI мне вставило в поле ввода не "EbenaTereno@1466", а "vvvvvvvvvvvvvvvvv". Удаляем буквы "v" и снова копируем и вставляем пароль. Когда я перезагружал VDI в прошлый раз, я посчитал, сколько раз она меня спросила пароль. Она это сделала около тридцати раз.
Что я там столько раз авторизую — понятия не имею. Возможно, VDI взламывает сервер Пентагона, или запускает спутник на Марс, или начинает ядерную войну. Но я все равно еще и еще ввожу пароль: "EbenaTereno@1466", "EbenaTereno@1466", скопировать - вставить, скопировать - вставить, ай черт, опять вставилось "vvvvvvvvvvvvvvvvv", и опять скопировать - вставить. Как там было в песне Тату: “Простые движенья. Я повторяю-ю-ю!!!”. И затем ловишь себя на мысли: "О да, детка! Давай! Спрашивай! А я тебе еще раз вставлю! О да!". Вставить! Вставить! Вставить! Не пойму только, почему вставляю я, а больно мне. Может, это не я вставляю, а мне вставляют? Но это странно, ведь я же нажимаю Ctrl+V, а не кто-то еще. И удовольствие уже потихоньку на нет сходит: вставляю и вставляю. EbenaTereno@1466, EbenaTereno@1466, EbenaTereno@1466. Скопировать - вставить, скопировать - вставить. Ганеее-е-е-е-ша! Камасууу-у-у-утра! Ебена Терено Эразм Роттердамский!!! Ну когда же это уже закончится?!!!
В христианстве страдания приближают человека к Богу. Ницше тоже говорит: "Что нас не убивает, то делает сильнее". В буддизме постижение природы страданий - это путь к просветлению. Так что с какой стороны ни посмотри, страдания - дело полезное и богоугодное. А раз так, то богоугодно и мучить праведников. И, хоть я и не праведник, спасибо вам огромное за эту оргию! Каюсь, делал switch по float! Каюсь, инкрементил bool! Каюсь, писал макросы и аннотации! И даже коммитил в master! Спасибо вам! Спасибо!!! Вставить!!! Вставить!!! Вставить!!!
И вот наконец настал момент, когда прошло пять секунд и все эти пять секунд система у меня не спросила пароль. Не дыша жду еще столько же и хор ангелов в моей душе начинает петь: "Ахинея!!!", - тьфу: "Аллилуйя!!!". Похоже, можно открыть терминал, сделать rebase для перезапуска CI и переключиться на другую задачу, так как проверки на CI длятся около одного дня.
Еще одна моя задача CI уже прошла и теперь требует тестирования, для которого у нас есть стэйджинг. Правда он один, а нас много. Поэтому у нас в Zoom есть канал с очередью на стэйджинг и сейчас там последнее сообщение: "IvanNov -> AlexeyKon -> AntonAna -> TatjanaKir". Добавляю в конец этой цепочки: "-> VladimirGun". Какое-то время придется подождать, что на самом деле соответствует моим планам, так как по распорядку у меня через пару минут дэйли, а затем обед. Вряд ли все они успеют так быстро справиться.
В оставшиеся пару минут проверяю гарнитуру и присоединяюсь к каналу дэйли, после чего начинают прибывать мои тим-мэйты, каждый из которых говорит всем: "Добрый день", что вызывает череду ответных "Добрых дней". Одним из последних, "Добрый день" говорит PO Axionica.
PO: Ок. Похоже, все уже на месте, так что можно начинать. Перед началом, позвольте представить нового члена команды Кирилла. Кирилл, расскажите пожалуйста о себе.
Кирилл: Я работаю в Everlogic три года. Мои основные навыки - это C++ и Питон. До назначения на этот проект, я работал с Efficienza Group над проектом под названием "Динамическое программирование как сервис". На этот проект я был назначен полгода назад, но VDI мне сделали только сейчас, так что наконец-то я могу работать над задачами
PO: VDI стоят денег и потому требуют множество согласований. Так что простите за задержку
Кирилл: Все в порядке.
PO: Владимир. Не могли бы Вы ввести Кирилла в курс проекта?
Я: Да, конечно. Кирилл, мы можем созвониться после дэйли?
Кирилл: Да. Было бы очень неплохо.
Далее рассказываем наши статусы. Я в свою очередь рассказываю, что в одном тикете написал unit-тесты для обеспечения 100%-ного покрытия и теперь жду очередь на тестирование в staging. Другой тикет у меня одобрен на всех ветках: master, global-43 и spq-2285 и я жду когда его замержат. И третий тикет у меня сейчас проходит CI.
PO: Я забыл сказать. У нас в системе обновление. Теперь надо делать еще cherry-pick на ветку fix-32. Также пожалуйста добавьте в Ваш тикет метки PDRT, StackOverdrive и Idzanagi, а еще укажите вторую версию A54. И не забудьте добавить новый PR на fix-32 в таблицу с остальными PR в описании задачи.
Я: Хорошо. Скажите, пожалуйста, когда уже закончится это жонглирование ветками и у нас будет единственный PR на master?
PO: Я Вас прекрасно понимаю. Но это - временная мера. Не знаю, как долго это еще…
И тут у нас в отделе колокольным звоном раздался истошный вопль животного, а за ним последовал дружный смех моих коллег. Это один из них приходит на работу с тамагочи - обезьянкой и она нам время от времени разряжает атмосферу своими криками. Просто сейчас ее вопль пришелся как раз на дэйли, причем тогда, когда у меня был включен микрофон. Я конечно попытался отключить звук, но просто не успел.
PO: Владимир. У Вас там какие-то шумы.
Я: Да. Извините, пожалуйста. Это я из офиса сейчас работаю.
После дэйли ищу PPT с объяснением структуры проекта. Мне конечно очень интересно, как у нас люди оказываются в команде. Для меня они просто появляются и точка. Не вижу ни профилей, не участвую в собеседованиях, просто PO в какой-то момент говорит: "Это ваш новый тим-мэйт, прошу любить". Но тут хотя бы представился - и то хорошо. Связываюсь с Кириллом в Zoom.
- Привет. Давай я сейчас расшарю экран. Видно?
- Привет. Да, видно.
- Короче, смотри. У нас три докера: M83, Gaya2 и AlphaRunner. M83 и Gaya2 имеют свои схемы в Oracle. Еще у нас два DAG: ProxyEngine7 и ProxyEngine15, а также конечный автомат и нейросеть. M83 на эндпойнте получает от ProxyEngine7 контекст, достает из базы тэги и метки. На их основе он заполняет указатели и генерирует метрики. Gaya2 по команде от ProxyEngine15 запускает конечный автомат, считывает его состояние и заполняет таблицы маркеров и ссылок. AlphaRunner не имеет своего состояния, он считывает метрики, маркеры и ссылки и использует нейросеть для создания процедур. Все понятно?
- Не уверен. Объясните, пожалуйста, что и как делает эта система?
- Я же говорю. Создает процедуры и указатели. Делается это докерами M83, Gaya2 и…
- Я это понял. Я имею в виду, что вы называете "процедурами", "указателями"? Для чего они нужны, что они из себя представляют? Хотелось бы видеть общую картину.
- А, так это - мой следующий слайд. Вот он DAG, в котором мы находимся. Он называется Idzanagi. Помнишь, PO попросил меня поставить в тикете метку "Idzanagi"?
- Да, было что-то.
- Вот. Здесь ты видишь остальные элементы системы. Как я раньше и говорил, самые важные для нас источники - это ProxyEngine7 и ProxyEngine15. Далее созданные процедуры Idzanagi разделяет на функции и процессы и они посредством Route53 попадают в Вальгаллу, но ты не бойся, AWS - это не наша забота. Давай я тебе покажу пару созданных процедур, которые у меня есть в базе. Вот процедура "Гармония Original", а вот "Рассвет Вторника"
- А почему назвали Idzanagi? Это же что-то из синтоизма.
- Не знаю, наверное перепутали кандзи и китайские иероглифы в процессе генерации шизофазии.
- А что такое Вальгалла?
- Да. Ты же раньше не работал с Аксионика. Это их изобретение. Вкратце это конфигурируемый Middleware систем менеджмента данных. Нам оно в повседневности не требуется, но поскольку ты имеешь дело с нашим заказчиком, знать это тебе будет не лишним. Я сейчас тебе не готов про это рассказывать. Давай я поищу PPT и мы свяжемся попозже на этот счет.
- А что делают наши докеры: M83, Gaya2 и AlphaRunner? Есть какие-то алгоритмы, или UML-диаграммы?
- Знаешь, у нас тут все очень динамично, так что если кто эти алгоритмы и нарисует, то они быстро устареют. То же самое относится и к UML диаграммам. Считай это инкапсуляцией. Рассматривай их как черные ящики.
- Или ящики Шредингера с котями.
- Можно и так, если хочется. Давай я тебе скину ссылку на мои странички confluence, где все это более подробно задокументировано.
- Да, было бы очень не лишним.
- Тогда план: ты читаешь документацию на confluence, а я готовлю презентацию про Вальгаллу.
- Отлично. Спасибо огромное!
- Без проблем. До скорого!
- До скорого!
Похоже, Кирилл - неплохой парень. Профессионально себя ведет, не показывает фрустрацию, несмотря на непонимание, но задает вопросы и идет разбираться. Полагаю, мы поладим.
Смотрю на часы - начало первого. Как говорится, война-войной, а обед по расписанию. Блокирую ноутбук, иду на кухню и тут вижу нечто новое. За одним из столиков сидит Аня в гарнитуре с ноутбуком, а на экране у нее Zoom. Само по себе это не новость — у нас народ иногда использует кухню для совещаний. Но сейчас Аня при этом еще и ест обед: макароны с сосиской. Увидев мой удивленный взгляд, она отодвинула один наушник. Говорю ей тихонько:
- Это такой новый best practices: обедать во время совещания?
- Все в порядке, я без видео, а звук у меня выключен.
- Ну ладно.
Ставлю свой рассольник в микроволновку, иду мыть руки, а затем сажусь напротив Ани и ем паек, глядя как кино происходящий передо мной процесс. Аня старалась брать небольшие порции, чтобы не набивать себе рот и иметь возможность оперативно отвечать, когда это требуется. Но в один момент ее застали врасплох и ей пришлось отбрехаться, дескать забыла убрать mute. Сама же она судорожно проглотила то, что у нее было во рту, толком не разжевывая, а затем постучала себе по груди, чтобы не поперхнуться. А еще я бы никогда не подумал, что она чавкает. Чмоблз-чмоблз-чвоблз.
Когда она закончила и сняла гарнитуру, говорю:
- Кухня как место для совещаний?
- Да, знаешь, здесь даже немного лучше, потому что нет этого гула.
- Понимаю, самому сегодня пришлось извиняться, когда тамагочи завопил
- Я уже поднимала тему, что нужны, если не комнаты для совещаний, то хотя бы звукозащитные экраны.
- Но они же деньги стоят. Так что вряд ли стоит ждать в ближайшем будущем.
- Да. Воз и нынче там.
- Тем не менее, наши HR сидят, отгороженные друг от друга экранами.
- Видела. Я как-то одному из них говорю: "Хороший экран. Нам бы тоже такой же", а он мне: "Да. Это я сейчас его тестирую"
- Но ты знаешь. Хорошо хоть у нас есть кухня с холодильником, микроволновкой, автоматом с водой и тому подобным. А то бывает и такое, что люди привозят на работу свои холодильники и едят прямо в отделе
- Ага. А еще некоторые в Сталинграде голодали. Так что хватит ныть, пошли работать
- Пошли. Только давай сейчас воды налью
Подхожу к автомату, ставлю чашку и стучу по иконке: "Вода", - потому что какая программа реагирует с первого нажатия? Автомат сообщает мне, что собирается налить ни сколько-нибудь, а ровно 200 миллилитров воды температурой 18 градусов Цельсия, что меня полностью устраивает и я жму на Ок, а автомат наливает в чашку нужное количество воды нужной температуры. И, честно, я бы даже не сильно возразил, если бы он мне налил не 200 миллилитров, а 220, или не 18 градусов а 17. А может он мне даже и брешет немного: чего-то недоливает, или недостаточно охлаждает. Я с удовольствием выпью налитую мне воду такой, какая она есть, невзирая на ее точный объем и температуру. Если бы он мне налил тархун, или теплую воду, то тогда я бы подумал.
Открывается дверь кухни и заходит ни кто иной, как мой эмоциональный, но похоже уже бывший коллега Александр Иванович. На Ивановиче рабочий костюм, а в руках - чемодан с инструментами.
- Здравствуйте, Александр Иванович. Давно Вас не видел.
- Привет, Вова. Я теперь, буль, чиню автоматы с водой.
- Так у нас с автоматом все в порядке. Только что протестировал на себе и жив пока. Разве что на нажатие иконки «Вода» реагирует не с первого нажатия, но это уже скорее придирки.
- Ничего, номном, особенного. Профилактика и обновление прошивки.
- Ах вот как! Настало время обновлять порШивку. ПорШивка сама себя не обновит!
- Теперь порШивка хрумном как раз таки сама себя будет через интернет обновлять. Есть и еще новые бульхрум функции.
- А как часто он будет обновляться? И в какое время?
- У нас, хрумбуль, обновления выходят ежедневно. Как ша увидит что-то новое, обновится.
- А как долго длится процесс обновления?
- Бульномбульша ты с твоими вопросами! Минут блепе 15 — полчаса.
- То есть, у нас будет ежедневный пятнадцатиминутный, или получасовой "коммендантский час", когда никто не сможет попить воды? А если кому-нибудь в это время станет плохо?
- Сказали хрумхрумхрумблепе - делаю ша бульномша!
- Ладно, удачи тебе!
- Удачи бульбульша!
Была мысль сказать ему еще, что теперь то у него совсем не удаленка. Но не стоит, и так бедолаге по больным мозолям прошелся.
Когда я вернулся на место, то оказалось, что пока я обедал и общался с Александром Ивановичем, подошла моя очередь на деплой. Однако некто SergejSol то ли нечаянно, то ли намеренно не заметил мое сообщение в чате Zoom и занял стэйджинг. То ли морду бить, то ли вежливо поговорить, то ли сам виноват, что так долго обедал. Ладно, середина 21го века, как-никак, надо быть цивилизованными. Так что просто пишу в чат: "SergejSol -> VladimirGun".
Раз так, то пока суть до дела займусь другой задачей. Надо сделать cherry-pick на ветку fix-32. Переключаюсь на master, делаю pull, но теперь неприятная неожиданность выскакивает у git и он мне показывает 100500 файлов с конфликтами, которые я даже и не думал трогать. Эх, Ганеша. За что же ты меня оставил?
Причины такому бывают разные. Но в целом это как раз тот случай, когда джуна отправляют читать исходники, чтобы разбить его иллюзии о совершенстве опенсорса.
Теперь надо клонировать репозиторий заново. У нас есть два способа это сделать: через HTTP или протокол git. Интересно, какой из них сработает сейчас. Ну что, Ганеша, давай попробуем через HTTP. А нет! Несколько секунд раздумий, а затем ошибка авторизации. Давай тогда через git. Репозиторий пошел клонироваться.
Переключаемся на fix-32, создаем новую ветку, молимся Ганеше и делаем cherry-pick. Но нет, все было бы слишком просто, если бы не было конфликтов. Посмотрим, что там не так. Ага, проблема в том, что я добавил классу аннотацию @DataObject, в то время как кто-то аннотировал его @DTO. Ну и что делать? В душе не имею представления, что этому классу лучше подходит. Ну что ж, давай спросим Claude. Claude говорит, что DTO лучше. Ну ладно, как это сказано в классике: "Жираф большой, ему видней". Попробую это дело скомпилировать, а потом мы с Ганешей осторожно запустим юнит тесты.
До чего же хорошо, что в стандарт C++26 были добавлены аннотации, как в Джава и язык стал функционально полным! А до этого он был ущербным, полагаю. Теперь у нас, как и в Жабе есть библиотеки аннотаций на все случаи жизни, которые позволяют не писать код, когда сталкиваешься со стандартной ситуацией. Интересно, я бы сам со стандартной ситуацией наверное не справился бы. Правда best practices требуют использовать аннотации и в нестандартных ситуациях и тут приходится либо рыться в тоннах документации, либо слепо доверять нейросетям, либо (О, ужас!) писать код и доказывать на ревью, что это было действительно необходимо. Так что теперь C++ стал похож на жабакод: полотно аннотаций, которые делают все, если только ты нигде не ошибся.
Запускаю компиляцию. Посмотрим, прав Claude или нет. Правда это станет ясно в лучшем случае только где-то через час. Так как я клонировал репозиторий, оно будет пересобираться с нуля и загружать все зависимости. А значит можно заняться чем-нибудь еще, и это ни что иное, как обещанное ранее кармой время на просмотр курса компьютерной безобразности.
Так, что у нас тут нового в безобразности? Хм, таки нововведения есть! Такого я еще здесь не видел: серый прямоугольник находится поверх белого и внутри него вертится кругляшок, дескать грузит что-то. Ну ладно, пусть погрузит. Разложу пока картишки в солитере.
Картишки разложил, а оно все грузит. Хорошо, попробую открыть в файрфоксе и еще разложу. Что, и в файрфоксе не открывается? Ну отлично. Что у нас там еще есть? Vivaldi. Открываю, вставляю ссылку, авторизуюсь и снова жду. Похоже, стандартная ситуация: все улучшили и теперь ничего не работает. Будем исследовать, что с этим можно сделать.
Следующий шаг в таких ситуациях - открыть это дело в режиме инкогнито. А раз инкогнито - то снова авторизация и 2FA. Но тут уже картинка другая: кругляшок провернулся пару раз и теперь у меня четыре серых квадрата вместо одного, а в углу экрана написано: "Everlogic". Выглядит многообещающе. Может инкогнито в файрфокс поможет? И... ура-а-а! После авторизации в браузере появляется проигрыватель вроде YouTube с заветным контентом курса. Надеваем гарнитуру, кликаем "смотреть" и откидываемся на спинку стула.
Проигрыватель загрузил порцию видео в буфер и начал показывать. Заиграла приятная музыка, отобразился логотип Everlogic и приятный женский голос попытался было что-то сказать, но через две секунды воспроизведение остановилось и плеер начал подгружать новую порцию видео. Через минуту плеер мне показал три секунды, а потом подумал еще полминуты и так далее. Технически, можно снять гарнитуру и пусть себе показывает, но оно же так до вечера будет крутиться и не факт, что докрутится. Похоже, пропускная способность интернета у нас в офисе не справляется с видео такого высокого качества. Что-ж, надеюсь мой домашний интернет справится с ним лучше. Так что отложу безобразность до завтра.
Полагаю, пока я пытался посмотреть курсы безобразности, мои изменения благополучно скомпилировались. Надо бы посмотреть. Правда VDI меня конечно же не дождалась и разлогинела, приняв мое бездействие за отсутствие. К счастью, соглашаться со всем и доказывать, что я не робот в этот раз не надо, а только лишь ввести НеВРотика, OTP YubiKey через блокнот, развернуть на полный экран и принять к сведению пару всплывающих сообщений.
Дальше еще один небольшой ритуал, а точнее последовательность маленьких. Каждый раз, когда VDI меня выкидывает, она почему-то думает, что у меня меняется разрешение экрана, что приводит к коллапсу окон всех запущенных приложений, которые убегают куда-то в угол. Тут можно пройтись по всем открытым приложениям и каждое сначала свернуть, а потом - развернуть. Но я это буду делать по мере того, как они мне будут требоваться. Так что переключаясь на какое-нибудь приложение, я его буду сначала сворачивать, а потом - разворачивать.
Клик-клик - сворачиваем и разворачиваем VSCode. Так, что у нас тут? Ошибка компиляции: символ ValhallaJointPredictor не найден. Странно, должен быть найден. Забыл include? Ладно, добавим. Что и include не найден? А что у нас в Bazel build? Зависимости нет. Хорошо, добавим и ее. Все равно не компилируется. Почему? А! Так это потому что его у нас на fix-32 в принципе нет! Не замержили еще. А я его использовать пытаюсь!
Клик-клик-клик - сворачиваем и разворачиваем браузер, где открываем чат с PO в зум:
- Здравствуйте. Я столкнулся с трудностью cherry-pick ISSUE-32743 на fix-32. Похоже, на нем пока отсутствует ValhallaJointPredictor
- Да, вы правы. Повремените тогда, пожалуйста, с cherry-pick. Я тогда срочно этим займусь
Ставлю на сообщение лайк, чтобы обозначить, что прочитал. Хотелось бы дизлайк, конечно, но человек же тоже работать будет.