КД
Ким Д.
Мужчина
Россия, Смоленск, UTC+3
Ставка
3,500 Р/час
НДС не облагается
Специалист доступен с 8 декабря 2023 г.
Добавьте подходящих специалистов в список и оформите заявку для предварительного бронирования времени специалистов. После оформления заявки ваш персональный менеджер организует прохождение всех необходимых проверок с вами и каждым кандидатом из заявки. Специалист привлекается к проекту только после окончательного подтверждения его выхода с вашей стороны.
Подробнее
О специалисте
Специализация
C++ разработчик
Грейд
Навыки
Отрасли
Проекты
(7 лет 5 месяцев)
Do Games Limited
Роль
SENIOR C++ DEVELOPER
Обязанности
Описание проекта:
Развитие и поддержка игрового движка и его экосистемы.
Мои обязанности на проекте:
• Реализовал новый игровой магазин
• Расширил GUI-фреймворк новыми контролами
• Реализовал множество A/B-тестов и функций, направленных на улучшение монетизации, удержание клиентов, повышение конверсии
• Оптимизировал существующие функции: улучшил FPS, время жизни батареи, время запуска, скачивание контента уровней, время открытия галереи игр
• Портировал новый функционал на другие платформы - Android, Xbox
• Решил проблему разнородных кодировок файлов с исходным кодом- разработал специальный инструмент, автоматически детектирующий кодировку файла и перекодирующий файлы в UTF8 в пакетном режиме (400+ файлов в каждой ветке)
• Портировал систему сборки под Android с устаревших скриптов Android ndk-build на cmake. Это ускорило сборку за счет инкрементальной сборки, которая в ndk-build изначально поломана
• Реализовал на Python вспомогательные инструменты: упаковка ресурсов проекта, валидация, некоторые тесты
• Реализовал диагностическую консоль с ошибками и предупреждениями для левел-дизайнеров
• Реализовал на TypeScript расширение VSCode для поддержки редактирования скриптов: минимальная валидация, автозавершение кода, навигация по коду, всплывающие превью ресурсов
• Упростил локализацию за счет добавления специального режима, позволяющего легко переключаться между базовой версией и локализованными версиями с отображением отличий. Реализовал необходимые новые функции для описания локализации в минимальном виде (отличия от базовой версии), что повысило продуктивность работы левел-дизайнеров.
• Исправил множество ошибок (порядок рендеринга графических объектов, отсутствующие/невидимые контролы, отсутствие звука, блоки в прохождении)
• Провел большой объем рефакторинга существующего кода. На низком уровне: обновление легаси кода под новые функции С++ и библиотеки, переписывание кода на C++/ООП/RAII, улучшение логики загрузки ресурсов, логики локализации. На уровне архитектуры: улучшение распределения и управления таймерами, развязывание зависимостей, проектирование API плагинов, уменьшение дублирования кода между проектами.
• Помощь левел-дизайнерам в решении технических проблем
• Консультирование других разработчиков и технической поддержки
• Коммуникации с менеджерами, сбор требований, документирование недостающих/упущенных требований, предоставление обратной связи менеджерам по статусу проектов, оценка сроков.
Технологии: C++, OpenGL, DirectX, Vulkan, Metal, FFMpeg, BASS audio. Интеграция с платформами: Java/Kotlin, ObjectiveC/Swift, C#. Бакенд: JS/TS/Node.js/Firebase
Стек специалиста на проекте
C++, C#, Bash, FFmpeg, OpenGL, DirectX, Sass
Отрасль проекта
GameDev
Период работы
Март 2021 - Июнь 2023
(2 года 4 месяца)
Initial Force AS
Роль
SENIOR C++/C# DEVELOPER
Обязанности
Описание проекта:
Развитие и поддержка системы анализа движений для подготовки спортсменов.
Мои обязанности на проекте:
Спроектировал и реализовал слой абстрагирования от оборудования разных производителей: четко определил границы и интерфейсы между аппаратно-зависимым и независимым кодом, реализовал нормализацию аппаратно-зависимых данных в аппаратно-независимые универсальные форматы. Итог – упростилась интеграция новых устройств в проект, большая часть кода проекта очищена от аппаратно-зависимого кода.
• Повысил отказоустойчивость продукта к сбоям и ошибкам устройств. Некоторые устройства во время получения данных перестают работать, другие из-за ошибок в их SDK повреждают память и могут привести к аварийному завершению всего процесса. Реализовал опцию работы с устройствами из отдельных процессов (одно устройство – один процесс), за которыми следит сторожевой таймер в главном процессе и автоматически перезапускает в случае необходимости. Перезапуск незаметен для пользователя. Итог – повысилась живучесть и стабильность главного процесса, работа пользователей стала более комфортной.
• Улучшил архитектуру – спроектировал и реализовал конвейер обработки данных, от получения данных от устройств до представления результатов в GUI. Конвейер собран из последовательности фильтров, обрабатывающих/преобразующих данные. Определил четкие интерфейсы фильтров, документировал весь конвейер. Итог – заметно повысилась сопровождаемость кода. Реализовывать многие новые функции стало возможно за счет вставки новых фильтров в конвейер или замены одних фильтров другими. Удалось убрать часть дублирования в коде – например, обработка леворуких спортсменов свелась к реализации одного фильтра, отображающего данные из леворукого формата в стандартный. Другие фильтры работают со стандартным форматом. До улучшения архитектуры обработка леворуких спортсменов требовала множество special-case конструкций, разбросанных по всему проекту.
• Повысил стабильность продукта. Исправил много ошибок, связанных с многопоточностью и асинхронностью.
• Упростил и переписал часть кода с continuation passing стиля на использование async/await. Также переписал часть кода, построенного вокруг модели конечных автоматов, на более простые и линейные конструкции с использованием async/await.
• Реализовал функционал, упрощающий для пользователя конфигурирование и калибровку новых устройств. Функционал представляет собой GUI-мастер, который подсказывает пользователю ряд шагов (подключить устройство, встать на устройство, сойти с устройства), необходимых для начальной калибровки и конфигурирования устройства.
• Ускорил выполнение тестов, реализовав test runner для параллельного выполнения тестов на многих процессах. Поддерживаемое юнит тест фреймворком параллельное выполнение на потоках не подходило из-за однопоточной природы большей части кода. Итог – время выполнения тестов снизилось минимум в три раза.
• Реализовал тест, автоматически последовательно открывающий в программе несколько тысяч файлов предыдущих форматов. Смысл теста – тестирование обратной совместимости с предыдущими форматами файлов программы. Длительность теста – несколько часов, из-за чего запуск запланирован в ночные часы. Итог – сильная экономия времени на ручном тестировании, улучшилось выявление ошибок обратной совместимости со старыми файлами.
• Работа над улучшением UX/UI под руководством UX/UI-дизайнера: настройка и реализация стилей, тем, визуальных эффектов, анимаций, масштабирования, адаптивной разметки, всплывающих подсказок, размеров, схем выравнивания.
• Обновлял установщик при изменении зависимостей
• Участвовал в ручном тестировании по тест-плану
• Участвовал в ревью кода
• Участвовал в планировании, оценке сроков
Технологии: C++, C#, SQLite, WPF, Reactive Extensions, DynamicData, LiquidState, FFMpeg, DirectX
Стек специалиста на проекте
WPF, C++, C#, ReactiveX, FFmpeg, DirectX, SQLite
Отрасль проекта
LifeStyle
Период работы
Август 2018 - Декабрь 2020
(2 года 5 месяцев)
Friendly Arm
Роль
EMBEDDED ИНЖЕНЕР
Обязанности
Описание проекта:
Разработка прототипа аппаратного менеджера паролей. Производитель решений и одноплатных компьютеров на базе ARM SoC заказал для своего центра прикладных решений прототип аппаратного менеджера паролей на базе одной из своих плат
Мои обязанности на проекте:
Спроектировал плату расширения на Atmega32u4 для подключения к ПК в режиме USB device в качестве композитной USB-клавиатуры и мыши
• Подготовил специализированную сборку Android с нужной конфигурацией GPIO портов ARM SoC
• Реализовал взаимодействие ARM SoC с платой расширения
• Реализовал Android-приложение для работы на устройстве. В числе прочего предусмотрено получение ввода от реальных клавиатуры и мыши, подключенных к устройству, и прозрачное перенаправление этого ввода на ПК сквозь устройство
• Далее поддерживал проект, работал по запросам заказчика
Технологии: ARM SoC, Android, C++, Java
Стек специалиста на проекте
Java, C++, Android
Отрасль проекта
Hardware
Период работы
Май 2017 - Июль 2018
(1 год 3 месяца)
Формат работы
Формат работы
Удаленно
Командировки
Не готов
Релокация
Не готов
Готов работать на зарубежных проектах
Нет
Образование
Высшее
Учебное заведение
Московский Энергетический Институт
Специальность
Автоматизированные системы обработки информации и управления
Завершение учебы
2011 г.