
Полная версия:
Новый рассвет. Перелом
Он задержал взгляд на прямоугольнике с подписью «Palingenesis v0.4 – planned». Маленький серый блок, от которого отходили пунктирные стрелки к другим модулям. Пунктир его раздражал. Пунктир в архитектуре значил одно: «подумаем потом». А «потом» в таких системах обычно приходило либо слишком поздно, либо в самый неудобный момент.
Самир открыл новое «слойное» окно и начал перекладывать элементы, как ребёнок – детали конструктора, только вместо пластика были процессы. Внутри у него был привычный спокойный азарт: сейчас из разрозненных кусков нужно собрать живую структуру.
За его спиной послышались шаги. Голос Джаса прозвучал ещё до того, как тот вошёл:
– Опять перекраиваешь всю вселенную без согласования с богами железа?
Самир не отвлёкся от экрана:
– Вселенную – нет. Только те куски, которые у тебя сужают горлышко.
– Горлышко не у меня, – возмутился Джас, проходя внутрь. – Горлышко – у твоих фильтров. Ты видел, сколько они жрут по времени?
– Видел, – спокойно ответил Самир. – Поэтому и перекраиваю.
Он щёлкнул по экрану, и схема увеличилась. Теперь Aegis-модуль занимал левую половину дисплея: набор катушек, экранов, датчиков и управляющих контуров. Справа – блоки анализа и управления: Palingenesis, Q-модули, системы логирования.
– Смотри, – сказал он. – Сейчас у нас так:
Aegis-β → сырые данные → Palingenesis v0.3x → фильтры → автокорреляция → отчёты.
Он провёл пальцем по стрелке.
– Узкое место – на стыке «сырые данные → алгоритм». Мы гоняем слишком много мусора через сложные фильтры. Я хочу часть работы отдать железу, а не только софту.
– То есть повесить на мой Aegis ещё одну гирю, – вздохнул Джас. – А ты знаешь, что каждый новый блок – это не только красивые квадратики, но и килограммы железа, ампер и ватты?
– Знаю, – кивнул Самир. – Поэтому и пришёл рано, чтобы успеть поругаться до всех.
Он щёлкнул ещё раз. Поверх исходной схемы появилась новая, чуть отличающаяся: на линии от Aegis к Palingenesis вклинился маленький блок «Q-PreFilter».
– Я предлагаю часть предварительной фильтрации и временного усреднения вынести в отдельный модуль, привязанный к Q-Beacon. Пусть он отбрасывает заведомо бессмысленный шум до того, как данные попадут в основной алгоритм.
– То есть маленький мозг между моими катушками и твоими матрицами? – уточнил Джас. – Ещё один потенциальный источник глюков.
– Скорее хороший слуховой фильтр, – поправил Самир. – Который не пытается понимать музыку, но отсеивает фоновый шум кондиционера.
Он посмотрел на него поверх очков:
– И, кстати, твои катушки тоже должны будут кое-что сделать для алгоритма.
– Знал, что будет подвох, – вздохнул Джас.
Через двадцать минут к ним присоединился Дмитрий. Он вошёл с чашкой кофе и с тем выражением человека, который уже принял, что утро будет о спорах, а не о медитации.
– Я смотрю, вы начали без меня, – сказал он, отмечая изменённую схему на экране.
– Мы просто размечаем поле боя, – ответил Джас. – Самир хочет впаять между моим железом и его алгоритмом ещё один мозг. Я думаю, что у нас достаточно мозгов в этой комнате.
– Я хочу перераспределить нагрузку, – поправил Самир. – Сейчас Palingenesis ест слишком много, потому что на него сваливают всё: и фильтрацию, и анализ, и корреляцию.
Дмитрий подошёл ближе, вглядываясь в схему.
– Расскажите по очереди, – сказал он. – Сначала: как *сейчас*. Потом – что вы предлагаете.
Самир взял маркер и подошёл к виртуальной доске – прозрачной панели, на которую можно было проецировать схему и рисовать поверх. Этот формат он любил: было видно, где старая архитектура, а где – его вмешательство.
– Сейчас, – начал он, рисуя простую линейку блоков, – у нас Aegis-β даёт нам пачки сырых данных: временные ряды от датчиков поля, тока, напряжения, положения образца. Всё это валится в один агрегатор, потом в Palingenesis v0.3.
Он отметил блок.
– Внутри этого блока мы делаем:
– предварительную фильтрацию по частоте;
– нормализацию амплитуд;
– расчёт автокорреляции по окну τ;
– сравнение с эталонными шаблонами;
– генерацию отчёта.
Он обвёл блок в воздухе:
– Это слишком много для одного слоя. Любое изменение на входе – и нам приходится перекраивать весь алгоритм.
– А что предлагаешь? – спросил Дмитрий.
Самир переключил слой. Новая схема была похожа, но с дополнительными ветвями.
– Предлагаю трёхуровневую архитектуру:
1. Аппаратный уровень (Aegis-β → β-2)
– часть фильтрации и синхронизации делаем сразу на железе:
– вводим дополнительные Q-модули, которые обеспечивают стабильный временной шаг и базовую отбраковку шумовых участков;
– добавляем элементарные пороговые фильтры, чтобы не гонять совсем мусор.
2. Промежуточный уровень (Q-PreFilter)
– маленький, но быстрый блок, привязанный к Q-Beacon, который:
– пересинхронизирует данные по единому «маяку»;
– вычисляет простейшие статистики (средние, дисперсии);
– отметает участки, явно не содержащие полезной информации.
3. Алгоритмический уровень (Palingenesis v0.4)
– уже не занимается «выгребанием мусора», а работает по чище подготовленным данным:
– фокусируется на фазовых корреляциях;
– строит модели «эхо» и устойчивых паттернов;
– готовит материал для дальнейшей реконструкции.
– То есть, – подытожил Дмитрий, – ты хочешь, чтобы Palingenesis перестал быть свалкой всех задач и стал специализироваться на главном – работе с паттернами и корреляциями.
– Да, – подтвердил Самир. – И это позволит нам перейти от v0.3x, которая в основном считает, к v0.4, которая уже начинает *моделировать*.
Джас хмыкнул:
– Звучит красиво. Но это всё равно перекладывает часть работы на мой Aegis. Ты хочешь от меня Aegis-β-2, который не просто «снимает», а ещё и «думает».
– Не думает, – возразил Самир. – Слушает. И чётче стучит в Q-Beacon.
Дмитрий задумчиво посмотрел на схему.
– Джас, а что у нас реально по запасу по мощности и стабильности, если мы начнём вешать на Aegis-β дополнительные Q-модули и пороговые фильтры?
Инженер пожал плечами:
– Запас есть. Мы делали β с прицелом на расширение. Но любая новая цепь – это потенциальный источник шумов, резонансов и физических точек отказа. С твоими софтовыми блоками можно откатиться, здесь – нужно перетирать металл.
– И тут, – сказал Самир спокойным тоном, который у него появлялся, когда он готовился к долгому спору, – мы подходим к вопросу, где у нас на самом деле «бутылочное горлышко».
Технический спор начался не с крика, а с определений. Так, как любят люди, которые по профессии должны быть точными.
– На мой взгляд, – сказал Самир, – сейчас горлышко – в алгоритме. Мы не можем быстро проверять гипотезы, потому что каждый раз тонем в объёмах сырых данных. Любая новая идея превращается в переписывание полутора тысяч строк кода.
– На мой взгляд, – ответил Джас, – горлышко – в железе. Мы можем придумать какую угодно архитектуру, но если Aegis физически не держит стабильность под нужной нагрузкой, всё остальное – красивые схемы.
Он ткнул пальцем в блок «Aegis-β» на схеме:
– У тебя в модельках всё идеально: нет дрейфа температуры, нет микровибраций, нет паразитных полей от соседних блоков. В реальной лаборатории это всё есть. И каждый дополнительный «мини-мозг» на железе – это ещё один источник паразитики.
– Именно поэтому, – парировал Самир, – я и хочу развести уровни. Сейчас всё это сваливается в Palingenesis, и мы туда записываем не только сигналы, но и наши ошибки. Потом начинаем объяснять «эхо» железом, алгоритмами, погодой и фазой луны одновременно.
Он кивнул на Aegis:
– Если мы научим твой β-2 отдавать нам более структурированный поток, мы сможем отдельно анализировать, где физика, а где математика.
Дмитрий слушал, не вмешиваясь. Он привык, что споры между этими двоими рано или поздно давали лучший результат, чем любые совещания.
– Давайте конкретнее, – сказал он. – Джас, что тебе нужно, чтобы перейти от β к β-2 в том виде, который предлагает Самир?
Джас задумчиво посмотрел на схему и, чуть прищурившись, начал раскладывать по полочкам:
– По железу:
– дополнительный слой экранирования вокруг новых Q-модулей;
– новая разводка питания, чтобы они не садились на уже загруженные линии;
– отдельные датчики температуры и вибраций в зоне этих модулей;
– переразметка кабельных трасс, чтобы не было перекрёстных наводок.
Он вздохнул:
– По времени – месяц плотной работы с парой ночных смен и серией калибровок. По людям – нужны мои руки, руки Алексея и ещё одного техника. По нервам – много кофе.
– По алгоритмам, – сказал Самир, продолжая цепочку, – мне нужно:
– совместно с тобой определить формат данных, которые отдают эти Q-префильтры;
– задать жёсткие временные ограничения: сколько миллисекунд они могут задерживать поток;
– заложить в Palingenesis v0.4 логику, которая будет учитывать, где данные прошли через железный фильтр, а где – нет.
Он помолчал и добавил:
– И ещё: мне нужно, чтобы Оскар участвовал в проектировании архитектуры логов. Иначе мы опять получим кашу из сырых, полуобработанных и «когда-то префильтрованных» данных без понятного происхождения.
– То есть ты хочешь, чтобы я затащил в святая святых нашего железа хакера, который вчера ещё мог смотреть на нас снаружи? – уточнил Джас.
– Я хочу, чтобы человек, который понимает, как данные текут по сети и где они могут потеряться или исказиться, помог нам не сделать глупостей, – ответил Самир. – Он теперь часть команды. Либо мы это учитываем, либо потом будем смотреть расследования Маши о том, как «ошибка в логировании привела к…».
Дмитрий кивнул:
– Оскар должен быть в этой комнате, когда вы окончательно решите, как выглядит Q-PreFilter и система логов. Я приглашаю его на следующее обсуждение.
Он сделал глоток кофе и добавил:
– А теперь давайте посмотрим на это глазами людей, которые будут этим пользоваться. Архитектура – это не только блоки и линии. Это ещё и то, как Алексей в три часа ночи поймёт, куда смотреть, если что-то пойдёт не так.
Чертёж Aegis-β-2 они открыли как отдельный документ. Без формул, но с ясно обозначенными слоями.
Черновой описательный чертёж Aegis-β-2 (extract)
1. Основная структура:
– Центральная камера для образца (объём до X см³), окружённая тремя концентрическими рамами катушек.
– Внутренний слой катушек отвечает за формирование основного поля (диапазон частот f_base ± Δf).
– Средний слой – корректирующий, компенсирующий локальные неоднородности и дрейф.
– Внешний слой – экранирующий, минимизирующим влияние внешних полей.
2. Q-модули (расширение β → β-2):
– Дополнительные синхро-модули, привязанные к центральному Q-Beacon:
• обеспечивают временную метку для каждого импульса/ответа с точностью до микросекунд;
• осуществляют первичную пороговую фильтрацию по амплитуде и спектру (отбрасывают шумовые участки ниже заданного порога).
– Встроенные датчики температуры и вибрации для мониторинга стабильности работы блока.
3. Интерфейс с алгоритмическим уровнем:
– Формат выходных данных стандартизирован:
• сырые данные (по запросу);
• предварительно фильтрованные (по умолчанию для Palingenesis v0.4);
• диагностические (для анализа сбоев и дрейфов).
Примечание:
Конфигурация β-2 рассчитана на возможность дальнейшей модернизации под режимы MR без полной перестройки аппаратуры (резерв по мощности и по каналам связи).
– Кто-нибудь, кроме вас троих, поймёт это с первого раза? – спросила Ханна, появившись в дверях, когда они дочитали.
– Мы надеемся, что да, – ответил Джас. – Но если нет – будем рисовать картинки.
– Я бы попросила, – сказала она, подходя ближе, – чтобы в «интерфейсе с алгоритмическим уровнем» сразу были учтены две вещи.
Она показала на раздел 3:
– Во-первых, чтобы было чётко понятно, какой канал используется для эксперимента, а какой – только для диагностики. Во-вторых, чтобы существовал физический способ «разорвать» подачу импульсов – не только через софт.
– Ты про аппаратный стоп, – понял Джас.
– Да, – кивнула Ханна. – В кодексе, который мы приняли на прошлой неделе, были прописаны стоп-процедуры. Теперь нужно, чтобы архитектура тоже их знала.
Дмитрий улыбнулся:
– Это тот редкий случай, когда всё действительно складывается в систему.
Когда пришёл Оскар, спор между Самиром и Джасом уже оформился в набор конкретных пунктов. Он вошёл в лабораторию, как всегда, в худи и с наушниками на шее, но в этот раз – с официальным бейджем сотрудника.
– Меня вызывали? – спросил он, оглядывая схему на экране. – Вы решили, что пора добавить немного паранойи в архитектуру?
– Паранойя – это то, что мы теперь называем «архитектурой безопасности», – ответил Дмитрий. – Нам нужно, чтобы данные, которые бегут через Aegis, Q-модули и Palingenesis, были не только красивыми, но и отслеживаемыми.
Самир кратко изложил идею Q-PreFilter и трёх уровней. Оскар слушал, покачивая ногой, как человек, для которого сложные схемы – привычный ландшафт.
– То есть, – подвёл он, – у вас будет:
– железный слой, который уже что-то отбрасывает;
– небольшой промежуточный мозг, который структурирует поток;
– и большой софт-мозг, который делает магию.
Он перевёл взгляд на Самира:
– И ты хочешь, чтобы я помог сделать так, чтобы мы потом понимали, что именно прошло через каждый из этих слоёв?
– Да, – ответал Самир. – Мне не нужны чудеса. Мне нужны трассировки.
Оскар сел за свободный терминал и быстро вывел свою версию архитектуры:
Technical Memo – Q-Logging Architecture (draft)
Автор: O. Holz, совместно с S. Ahmed
Уровень 1: RawLog (железо)
– минимальные, но неизменяемые записи о каждом импульсе и ответе: временная метка от Q-Beacon, ID канала, базовые амплитуды.
– пишутся напрямую с Aegis-β-2 на защищённый модуль, недоступный для перезаписи из Palingenesis.
Уровень 2: PreFilterLog (Q-PreFilter)
– записи о том, какие участки данных были отброшены пороговыми фильтрами (шум) и по каким критериям.
– связываются с RawLog через общий ID события и временную метку.
Уровень 3: AlgoLog (Palingenesis v0.4)
– записи о том, какие алгоритмические решения были приняты (обнаружение паттернов, «эхо», расчёты корреляций).
– содержат ссылки на соответствующие записи в RawLog и PreFilterLog.
Цель:
– обеспечить возможность задним числом восстановить путь любого результата: что было на входе, что отсеялось, что интерпретировал алгоритм.
– Если мы это сделаем, – сказал Оскар, – то в случае аномалий или, не дай бог, инцидентов, мы сможем честно ответить на три вопроса:
1) Это было в железе?
2) Это появилось в префильтре?
3) Это нарисовал софт?
Он усмехнулся:
– И у Маши будет меньше поводов говорить, что мы всё прячем.
– А у нас – больше работы, – пробурчал Джас. – Но ладно. Если это поможет потом не объяснять на слушаниях, что «логов как раз за это число нет», я готов потерпеть.
Самир чувствовал приятное ощущение, которое редко бывает в больших проектах: как будто кусочки из разных голов начали встать в один рисунок. Aegis-β-2, Q-PreFilter, Palingenesis v0.4, логирование – всё это складывалось в нечто, что уже можно было назвать архитектурой, а не набором идей.
Спор о том, где на самом деле «бутылочное горлышко», продолжился, но из плоскости общих фраз перешёл в плоскость конкретных чисел.
– Смотри, – сказал Самир, выводя на экран графики нагрузки, – вот наши последние ночные тесты. Aegis выдаёт примерно N мегасэмплов в секунду по всем каналам. Palingenesis v0.3 переваривает это, но на грани – мы работаем почти в реальном времени, но запас минимальный.
Он показал другой график:
– Если мы добавляем более сложные модели «эхо», Palingenesis начнёт тормозить. Без префильтрации мы не сможем ни увеличивать разрешение, ни расширять спектр.
– А если мы добавим префильтрацию на железе, – возразил Джас, – то у нас появятся требования к стабильности Q-модулей, которых сейчас нет. Малейший сбой – и ты будешь считать идеальные модели по кривым данных.
– Именно для этого, – вмешался Дмитрий, – и нужны выделенные диагностические каналы и RawLog. Чтобы мы могли отловить такие сбои.
Он подошёл к доске и, к удивлению обоих, начал рисовать свою версию разбиения:
– Давайте ещё раз.
– У нас есть физический слой: Aegis-β-2. Там должно быть:
• стабильность полей;
• чёткая связь с Q-Beacon;
• возможность физического отключения импульсов (аппаратный стоп).
– Есть слой структурирования: Q-PreFilter. Он:
• не принимает «умных» решений;
• только метит участки как «шум» или «кандидат в сигнал»;
• отдаёт ссылки в лог.
– И есть слой интерпретации: Palingenesis v0.4. Он:
• отвечает за смысл;
• не имеет права переписывать историю того, что пришло снизу.
Он обвёл три слоя разными цветами:
– Горлышко будет там, где мы нарушим это разделение. Если Aegis начнёт «думать», или Palingenesis – «подчищать» логи, или Q-PreFilter – играть в маленького учёного, мы потеряем прозрачность.
Самир почувствовал лёгкое уважение к тому, как Дмитрий умел переводить их технические споры в структуру принципов. Это было удобно не только для протоколов – ему самому так было легче держать в голове, где кончается математика и начинается политика.
– Считай, что это наша внутренняя «конституция архитектуры», – сказал Дмитрий. – И да, я хочу, чтобы это потом было прописано в документах ВНС. Не только как схема, но и как принцип: разделение физики, структурирования и смысла.
Джас вздохнул:
– Ладно. Я согласен, что моё горлышко – не единственное. Твоё тоже не без греха, Самир.
– Алгоритмы всегда грешны, – спокойно сказал Самир. – Вопрос в том, признают ли они это в логах.
День прошёл в привычной суете. Алексею достались самые осязаемые задачи: он вместе с ещё двумя техниками начал подготовку к физической модернизации Aegis. Для него архитектура была не только блоками на экране, но и тяжёлыми стойками, кабелями, которые нужно было аккуратно проложить, и новыми креплениями под Q-модули.
– Это всё потом где-то там будет мигать и считать, – пробормотал один из техников, помогая ему нести новый модуль. – А мы – как всегда, «руки».
Алексей улыбнулся:
– Руки – это не только таскать. Это ещё и первыми видят, когда что-то не так.
Он уже начинал чувствовать, что архитектура – это не только то, что рисуют Самир и Джас. Это ещё и то, как удобно добраться до кабеля в три часа ночи, чтобы проверить, не перегрелся ли блок.
У двери секции он снова заметил синий стикер с надписью «Кодекс до модернизации – и после тоже». Теперь он воспринимал его не как абстрактную фразу, а как напоминание: любое железо, которое они сюда принесут, будет работать не в пустоте, а внутри тех правил, которые они вчера обсуждали.
К вечеру они снова собрались у виртуальной доски – уже в более широком составе: Дмитрий, Самир, Джас, Ханна, Оскар, Алексей на заднем плане.
Схема, которая утром была набором пунктира и черновых стрелок, теперь выглядела иначе. Меньше пунктиров, больше плотных линий.
– Итак, – сказал Дмитрий, – подведём промежуточный итог. Что мы сегодня сделали с архитектурой?
Самир начал перечислять, пункт за пунктом:
– Мы:
1. Зафиксировали трёхслойную архитектуру:
– физический слой (Aegis-β-2);
– структурирующий слой (Q-PreFilter);
– алгоритмический слой (Palingenesis v0.4).
2. Определили принципы разделения ответственности:
– Aegis обеспечивает стабильность поля и базовые измерения, плюс аппаратный стоп;
– Q-PreFilter очищает поток от явно шумовых участков, не принимая «содержательных» решений;
– Palingenesis занимается смыслом – корреляциями, моделями, «эхо».
3. Заложили архитектуру логирования:
RawLog, PreFilterLog, AlgoLog, связки между ними.
4. Согласовали, что модернизация Aegis до β-2 включает дополнительные Q-модули, датчики и резерв по мощности под возможные MR-режимы.
Он сделал паузу и добавил:
– И главное – мы договорились, что архитектура будет учитывать не только вычислительную эффективность, но и этический кодекс.
Ханна кивнула:
– Да. Я хочу, чтобы в документации к Aegis-β-2 прямо было написано, где и как реализуется аппаратный стоп, и кто имеет право им пользоваться. И чтобы в логи это тоже попадало.
– Будет, – сказал Джас. – Я поставлю в схему отдельный блок и назову его так, чтобы ни у кого не было соблазна обойти.
– Назови его просто, – предложил Оскар. – Не «Emergency Override», а «Stop». Чтобы даже в стрессе не перепутать.
– Я могу, – сказал Джас, – нарисовать на нём большую красную кнопку.
– Только не делай её настоящей красной пластмассовой кнопкой на виду, – вмешался Дмитрий. – Мы живём не в фильме.
Они улыбнулись. В этих коротких репликах чувствовалось не только напряжение, но и какое-то новое, тёплое чувство: как будто система переставала быть только суммой рисков и начинала становиться чем-то, что они действительно могли назвать своим делом.
Когда большинство разошлось, в лаборатории остались трое: Самир, Джас и Дмитрий. На экране всё ещё горела схема, теперь уже с пометкой в углу: «Arch v0.4 – draft».
– Знаете, – тихо сказал Джас, глядя на блок Aegis-β-2, – я впервые смотрю на эту штуку и думаю не только о том, как она будет «жечь красиво», но и о том, как она впишется в весь этот слой логов и кодексов.
Он постучал пальцем по изображению:
– Раньше было проще: сделал железо – отдал наверх, дальше пусть математики разбираются. А сейчас у меня ощущение, что я строю не просто модуль, а часть чего-то большего.
– Потому что так и есть, – ответил Самир. – И это «большее» – не только наука, но и институт.
Он взглянул на Дмитрия:
– Это то, о чём ты говорил в самой первой речи: чтобы инженеры не могли потом сказать: «мы не знали».
– И чтобы математики не могли сказать: «мы только считали, мы не при делах», – добавил Дмитрий.
Он посмотрел на Palingenesis v0.4 и почувствовал лёгкий ток воодушевления. Не того восторга, который бывает от красивой теоремы, и не адреналина от успешной демонстрации. Скорее тихого удовлетворения от того, что идея начинает обрастать плотью и нервами.
– У нас ещё будет много споров, – сказал он. – И архитектурa ещё не раз поменяется. Но сегодня, кажется, мы впервые сделали шаг, который связывает всё: физику, алгоритмы, безопасность, ответственность.
Джас взял маркер и, почти не думая, на свободном месте схемы нарисовал маленький круг. Внутри написал: «Aegis-β-2 – core».
– Ладно, – сказал он. – Соберём из этого мир.
Фраза повисла в воздухе не как шутка, а как обещание.
Самир, глядя на схему, мысленно добавил к ней маленькую надпись, которую не стал выводить на экран: «Palingenesis v0.4 – первый шаг к тому, чтобы не только слушать эхо, но и понимать, что оно говорит».
Поздним вечером он сидел один перед уже полупогашенным дисплеем, просматривая свои заметки. В папке проекта появилось новое дерево:
– /arch/
– arch_v0.3x_diagram.png
– arch_v0.4_draft.png
– q_logging_memo_OH_SA.txt
– aegis_beta2_notes_JS.txt
Он открыл текстовый файл и добавил строку:
«Архитектура – это не только способ заставить систему работать быстрее. Это способ заставить её работать честнее».
Потом выключил монитор. В темноте лаборатории мягко светились только индикаторы Aegis и Q-Beacon. Где-то глубоко внутри стоек уже готовилось место для новых модулей, фильтров и логов.
Мир ещё не знал, как именно изменится от того, что они строили. Но внутри команды на один шаг стало понятнее, *как* они собираются это делать – и на каком фундаменте.
И это знание, тихое и ещё хрупкое, было тем самым воодушевлением, которого им сейчас не хватало: ощущением, что они не просто гонятся за прорывом, а выстраивают архитектуру, в которой этот прорыв сможет случиться не ценой чьей-то сломанной жизни.
Глава 9. Первая публикация
Ранним утром лаборатория была полупустой; щёлкающие вентиляторы и ровное, синее свечение экранов создавали ощущение пространства, где мысли и данные были плотно связаны. Для Самира день начинался не с кофе – хотя он пил его, как все, – а со списка задач: финализировать разделы метода, убедиться, что все графики подписаны, и проследить, чтобы артефакты в логах были помечены и объяснены. Препринт. Наконец.

