03.12.2018

История одного ядра от Сергея Бирюкова

Мы продолжаем серию интервью «История одного ядра» с командой C3D Labs о том, как создается российское коммерческое 3D-ядро. Сегодня свою историю рассказывает математик-программист Сергей Бирюков. Он не только разрабатывает математические алгоритмы, но и отвечает за тестирование компонентов C3D Toolkit.

Сергей Бирюков:

  • Приложил руку почти ко всем составляющим геометрического ядра C3D Modeler: булевой операции, листовым телам, скруглениям, телам по сечениям
  • Отладил систему автоматического регрессионного тестирования ядра
  • В детстве случайно купил газету «Поле чудес», в результате чего стал участником четырех чемпионатов мира по решению головоломок
  • Каждое воскресенье на протяжении 15 лет играет в футбол

Всех разработчиков C3D Labs можно разделить по их профессиональному бэкграунду на айтишников и инженеров. Ты, единственный, не принадлежишь ни к тем, ни к другим…

Я окончил физико-математический факультет Коломенского Государственного Педагогического Института и почти десять лет проработал в школе. Начинал вожатым в детском оздоровительном лагере, затем преподавал физику в интернате при Свято-Троицком Ново-Голутвином монастыре, параллельно учился в аспирантуре. Позже работал учителем математики в Карасёвской средней общеобразовательной школе Коломенского района.


Сергей — вожатый в детском оздоровительном лагере

А как состоялся выбор в пользу математики?

Как и мои коллеги, я скажу, что очень многое зависит от учителя. У меня было несколько учителей математики, и каждый внес что-то свое. Например, на уроках у Татьяны Вячеславовны в 5 классе мы решали юмористические задачки, как Иван-Царевич нашел на болоте 15 лягушек, а отрицательные числа изучали на примере Буратино, задолжавшего несколько сольдо Пьеро и Мальвине. Это было увлекательно. И в старших классах с Людмилой Николаевной математика давалась легко. Когда понимаешь, как устроено то или иное действие, что за чем следует, почему алгоритм выглядит именно так, тогда предмет становится приятным для изучения и потом любимым.

Тогда какая дорога привела молодого перспективного педагога к геометрическому ядру?

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

Но с геометрически моделированием и С++ ты сталкивался раньше?

Еще во время учебы в институте я старался узнать больше, чем предлагала программа: ездил на научные семинары в МГУ и Математический институт им. Стеклова, участвовал в конференции по дифференциальным уравнениям в Суздале, окончил курсы по программированию на C++.

Всегда было желание освоить что-то новое. Не сидеть же только на основных лекциях. К примеру, программирования у нас практически не было. Полгода изучения Pascal в зачаточном состоянии — это почти ничего. Но преподаватель нашего вуза Андрей Богуславский вел дополнительные курсы по С++. Конечно, я пошел на них! Как раз дома появился первый компьютер, и я с удовольствием делал на нем задания, которые выдавали на курсах.

Как состоялось твое трудоустройство в АСКОН?

Собеседование по математике я прошел успешно. Очень помогла книга «Геометрическое моделирование» Николая Николаевича Голованова, которая была у нас дома. По ней я и готовился. А тестовое задание по программированию с первого раза провалил, но мне дали еще одну попытку. В итоге я во время летнего отпуска изучал С++ и в августе еще раз пришел в АСКОН. На этот раз удачно.

Как тебе далась кардинальная смена обстановки — из школы в ИТ-компанию?

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

Помнишь, какую первую серьезную задачу тебе поручили?

Во время испытательного срока я занимался пересечением сферы и плоскости. Суть проблемы состоит в том, что сферическая поверхность в параметрической области вблизи полюсов сильно сжимается метрически, что очень затрудняет построение на ней параметрических кривых. Если попытаться приложить прямоугольник к сфере, то вдоль экватора все будет нормально, но у полюсов сферы возникнут трудности. Из-за этого стягивания в точку огромный шаг по параметру около полюса выглядит микроскопическим в физическом пространстве. Самая наглядная иллюстрация — карта мира.

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

Ты пришел в 2011 году, когда математическое подразделение работало в составе АСКОН и только на КОМПАС-3D.

И в этой системе координат математикам приходилось трудно. Были случаи, когда, отдав что-то в разработку КОМПАС-3D, мы ждали обратную связь несколько месяцев. За это время наши изменения должны были попасть в очередную сборку КОМПАС-3D, пройти через отдел тестирования, который затем вернет ошибки разработчикам КОМПАС, а оттуда они вернутся к нам. Так у меня появилась задача — настроить собственную систему автоматического регрессионного тестирования для геометрического ядра. Честно скажу, что очень горжусь этой работой, потому что система до сих пор функционирует без сбоев в том виде, как она была сделана, и отслеживает большинство ошибок. Как любил говорить Командор, персонаж российского фильма «Львиная доля», нет ничего хуже незаконченных дел. Это мое законченное дело, и этим оно мне нравится.

Как устроено тестирование геометрического ядра C3D

Тестирование ядра происходит исключительно в автоматическом режиме. Первый этап — это юнит-тесты, запускаемые в течение дня при каждой новой сборке ядра на каждой ревизии. Кроме того, три раза в день проходят тесты из небольшого набора моделей, проверяющие построение ассоциативных видов, перестроение моделей и конвертацию из различных форматов данных. Обнаруженные ошибки чаще всего исправляются днем, чтобы к вечеру сдать максимально чистую, без поломок, ревизию (изменение кода) ядра. Ночью на внутреннем сервере запускается большое регрессионное тестирование на базе из 400 000 моделей в формате ядра .c3d. И уже следующим утром всем программистам C3D Labs рассылается сообщение с итогами тестов.

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

Если большое тестирование прошло без ошибок, то ревизия, на которой оно было выполнено, считается качественной рабочей версией ядра.

При этом система тестирования относится не столько к математике, сколько к инфраструктуре разработки

Да, причем система была изначально написана не на C++, и в этом еще одна прелесть. Мне достался смешанный код — Pascal, Visual Basic, скриптовый язык Windows. Разве что популярного сегодня Python не было. Всю эту россыпь скриптовых файлов предстояло собрать, преобразовать в стройную систему, которая бы работала для нас. И это удалось сделать.

Почему я считаю своим главным достижением тестирование, а не математические разработки? В математике всегда можно найти случаи, когда твой алгоритм не работает или работает не так, как хотелось. Математические алгоритмы к нам возвращаются: пользователь найдет модель, которая ему не нравится, и тебе надо будет ее дорабатывать. А в тестировании не пришлось ничего дорабатывать. Система развивается, мы что-то добавляем, но исходный код не правим. Это законченное дело, практически идеальное.

Давай все же о математике. Какими модулями геометрического ядра ты занимался?

Начинал я с конвертеров — помогал Саше Спивакову с алгоритмом проецирования. До сих пор считаю, что это самое запутанное место в наших конвертерах. Буквально через месяц после меня пришел Володя Латышев, и мы вдвоем стали «копать» файлы конвертеров. Он так и остался на конвертерах, а меня перебросили на булеву операцию. Это очень масштабная, практически бесконечная история: пересечения, частные случаи, общие случаи, итерационные алгоритмы.

Потом я работал с листовыми телами, которыми занимается Андрей Пенкин. На тот момент для листовых тел были свои булевы операции, и возникало рассогласование между основной булевой операцией и булевой для листовых тел из-за нарушения стандартной топологии. В листовых телах могут быть грани, которые находятся в одном месте в пространстве, чего не может быть в обычных телах (они ликвидируются, «съедают» себя). Сейчас листовые тела идут через основную булеву операцию, и все, что правится в ней, правится сразу и в листовых телах. Я как раз исправлял ошибки в операции вырезания отверстий и писал обработку слипающихся граней в основной булевой операции.

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

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


Поверхность по сечениям с несколькими направляющими

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

Сейчас ты работаешь над поверхностями по сечениям, а какие перспективные для себя направления в ядре можешь выделить?

Пока я целиком погружен в поверхности. Эта тема столь же масштабная, как и скругления. Тела по сечениям отличаются тем, что каждый пользователь-конструктор, нажимая кнопку «Создать тело по сечениям», фактически просит от программы только одного: «Сделай мне красиво». А понятие «красиво» нельзя запрограммировать математически, можно лишь сделать операцию предсказуемой. Вот это и является моей целью — сделать операцию максимально предсказуемой для пользователя, чтобы он получил на экране то, что ожидал увидеть.

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

В 2012 году C3D Labs стала самостоятельной компанией и у нее появились заказчики, помимо КОМПАСа. Кто из внешних заказчиков больше всего запомнился тебе?

У меня был длительный период, когда я работал только на КОМПАС и со сторонними заказчиками не пересекался. Их присутствие я почувствовал с подключением к сервис-деску около полутора лет назад. Особые воспоминания связаны с компанией SolidEng, у которой мы побывали во время командировки в Южную Корею. Как замечательно они нас приняли! Мы увидели, как работают люди, насколько важно для них то, что мы делаем.


В офисе SolidEng в Сеуле

Общаясь с пользователями — разработчиками инженерного программного обеспечения, ты можешь предсказать, куда движется САПР и геометрические ядра?

Думаю, сейчас «старые» ядра пытаются набрать технологий, которые ранее не были им присущи. Когда нет движения вперед, они начинают впитывать то, что находится рядом, добавлять сторонние компоненты. Хороший пример — топологическая оптимизация. За последнее время практически все мировые САПРы обзавелись таким модулем, позволяющим перейти от классической модели, созданной инженером, к оптимизированной форме этой модели, созданной компьютером, удовлетворяющей требованиям пользователя по определенным параметрам (масса, прочностные характеристики, форма и т.д.).

Если выйти за пределы САПР, то какой из футурологических прогнозов ты считаешь наиболее реалистичным?

Мне на этот счет нравится сериал «Черное зеркало», каждая серия — это открытие, то, к чему мы идем. Не знаю, что курили читали авторы, но они большие молодцы. Из технологий, которые работают уже сегодня, приведу другой пример. В одной из серий последнего сезона «Секретных материалов» Малдер и Скалли сталкиваются с тотальной автоматизацией: заказы в суши-баре принимаются через приложение в смартфоне, блюда подаются на роботизированной линии, домой везет беспилотное такси. Когда Малдер отказывается оставить роботам чаевые, начинаются неприятности.

В сфере сервиса мы действительно приближаемся к роботизации, хотя не всем это понравится. Любую информационную систему можно взломать, поэтому я сдержанно отношусь к новым технологиям, хотя в целом процесс автоматизации мне нравится.

Какой эпизод «Черного зеркала» самый сильный на твой взгляд?

Искусственные пчелы-дроны. Серия оставила глубокое впечатление, насколько реально показана вселенская катастрофа. Это и предостережение, и вопрос об ответственности за действия в сети. Остальные серии были добрее, кроме самой первой.


Hated in the Nation. Netflix

В мае состоялась конференция C3Days для пользователей геометрического ядра, на которой ты работал еще и в качестве фотографа. Кадры получились довольно удачные. Тебе никогда не хотелось попробовать себя в творческой сфере?

Проблема в том, что жизни и энергии человека на все не хватает. Лет десять назад я интересовался режиссерскими курсами, но вряд ли успею за свою жизнь сделать все, к чему есть желание. Надо выбирать то, с чем я справлюсь, что смогу довести до конца и что порадует тех людей, которые много для меня сделали.


На конференции C3Days в Сколково

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

И ты не отказался играть нациста?

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

Как ты в 16 лет справился с персонажем, которого нельзя назвать человеком?

Во-первых, я играл художественного персонажа, об этом надо помнить. Во-вторых, спектакль рассказывал не только об историческом факте, но и о борьбе внутри героев, в их душах. Конрад Вольф показан неоднозначно. В пьесе присутствовала его жена как образ, преследующий его и символизирующий его добрую сторону. Борьбу двух сторон мне и надо было донести до зрителей. С этим спектаклем мы ездили на фестиваль школьных театров в Глазов. Люди выходили из зала заплаканные. Да и сами артисты — старшеклассники, игравшие охранников концлагеря, тоже с трудом сдерживали эмоции. Я думал, что такое невозможно. Сейчас, бывая в московских театрах, вижу, что никто там не реагирует эмоционально на события, происходящие на сцене. А я до сих пор помню цитаты и стихи из этого спектакля.

Какие еще роли ты сыграл?

Вторая моя главная роль случилась в пьесе «Барьер» болгарского автора Павла Вежинова. По ней был поставлен фильм с Иннокентием Смоктуновским в главной роли. Я играл героя Смоктуновского в старости, который на протяжении всей пьесы не произносит ни одного слова. Если рассматривать жизнь как набор ярких воспоминаний, то театр для меня — одно из первых таких воспоминаний

А с чего началось твое увлечение головоломками?

С покупки газеты «Поле чудес» в 1996 году. Мне было 13 лет. Понравилась обложка. На первой странице номера находилась головоломка «Открой личико, Гюльчатай», классический математический пример, в котором одинаковые цифры заменили на смайлики. С нее все и началось.

В газете часто печатались головоломки в стиле загадки Эйнштейна. Впервые там я увидел японские рисунки из клеток. В какой-то момент в газете объявили конкурс, победители которого приглашались на чемпионат России по головоломкам. Я несколько раз отправлял свои решения и в начале 2000-х годов попал на очный чемпионат.

Твои лучшие достижения в решении головоломок?

На кубке Москвы я был вторым, на одном из чемпионатов России — тоже вторым. Есть несколько третьих мест на чемпионатах России по головоломкам и по судоку. В топ-30 мирового рейтинга входит только один представитель России, я нахожусь где-то на уровне 60-70 места в мире. Еще дважды выигрывал чемпионат Московской области по «Что? Где? Когда?» в составе команд «Метаморфоза» и «Основной инстинкт».

Расскажи об участии в мировых чемпионатах

Первая поездка на международные соревнования по решению головоломок (и вообще моя первая зарубежная поездка) состоялась в Пекин, Китай. Великая Китайская стена — самое удивительное место, где я побывал. Потрясающее зрелище, когда вокруг ничего нет, а стена уходит за горизонт. Ни одна европейская страна такого впечатления не оставила. Ощущение древности и сказочности сохранилось только от Китайской стены и Тадж-Махала.

После Китая я ездил на чемпионаты мира в Болгарию, Словакию и Индию. Самое необычное место, где я был в Индии, — это храм обезьян в горах, рядом с Джайпуром. Каменные лестницы, на них сидят обезьяны и занимаются своими делами, не обращая внимания на людей. Мимо ходят монахи. Обезьян можно фотографировать, но трогать нельзя — на территории храма они священны.

Решение головоломок, как и шахматы, требует выносливости и хорошей физической формы

Поэтому каждое воскресенье на протяжении 15 лет я играю в футбол.

На какой позиции?

В основном в защите. Центральный защитник или центральный полузащитник. Мне интереснее просчитывать чужие ходы и прерывать их.

За кого болеешь?

За «Спартак». В прошлом году у меня был абонемент, и я ходил на все их матчи. Из современного состава я бы выделил Георгия Джикию. А самая запоминающаяся игра «Спартака», которую я посмотрел, был четвертьфинал Кубка УЕФА против голландского «Аякса» в 1998 году. Даже когда в 2000-е они проигрывали, мне нравилась их игра. Как говорил знаменитый тренер Владимир Федотов, «у меня веселая команда». «Спартак» всегда показывал нескучный футбол.

А в мировом футболе кто твой герой?

Бразилец Ривалдо, атакующий полузащитник. Потрясающе читал игру, настолько умный игрок на поле. Забивать гол неинтересно, а увидеть возможность и в центре поля сделать умную передачу — это высший шик. Ривалдо — кумир моего детства, и его никто не затмит, даже Лука Модрич.

Что тебе нравится в кино, театре, литературе?

Досрочный ответ ????. Мюзикл «Монте-Кристо» в Театре Оперетты. Впервые попал на него семь лет назад и с тех пор смотрел много раз. Помню все песни — музыка из мюзикла играет и в телефоне, и в машине. Еще «Мастер и Маргарита» и «Контрабас» в МХТ им. Чехова. Если говорить о кино, то культовых фильмов много. Не буду оригинален, если назову «Ежик в тумане», который так будоражит фантазию! В литературе в свое время очень нравилось творчество Говарда Лавкрафта — «Зов Ктулху», «Полярис».

Традиционный заключительный вопрос. Твое напутствие выпускникам и молодым специалистам. Почему стоит работать в C3D Labs?

Везде, где я работал, был очень хороший коллектив. И АСКОН, а потом и C3D Labs тоже не подвели. У нас замечательный коллектив добрых, интеллигентных людей, в котором приятно находится. Это очень важно в работе — чувствовать себя в компании единомышленников.