Резюме: Программист, разработчик программного обеспечения
Инженер-программист R&D (АО «Уральский механический завод», 4 года)
Общий контекст и промышленная разработка:
В течение 4 лет занимался разработкой высоконагруженных приложений для систем управления лазерными станками «Авангард» на производственной базе АО «Уральский механический завод». Работал в R&D-отделе, где ключевыми требованиями были отказоустойчивость и минимальная задержка отклика систем реального времени.
C# / .NET — графика и архитектура управления:
Строил архитектуру промышленных решений, начиная с модульного ядра на Microsoft.Extensions.DependencyInjection и применения MVVM через CommunityToolkit.Mvvm, что исключало рутинный код INotifyPropertyChanged и упрощало покрытие тестами. Для сложных сценариев управления технологическим процессом внедрял CQRS (MediatR) — чтение телеметрии шло через запросы, а критические команды на резку проходили строгую валидацию через FluentValidation.
Потоки данных с датчиков связывал реактивно: высокочастотный сигнал от контроллера обрабатывался операторами Throttle и Sample из System.Reactive, чтобы интерфейс оператора не «дребезжал» от тысяч сырых обновлений в секунду. Фоновую обработку G-кода реализовал через System.Threading.Channels, разделив парсинг и выполнение команд на producer/consumer с асинхронным ожиданием.
WPF и визуализация реального времени:
В WPF реализовал интерактивное 2D/3D полотно для визуального контроля карт раскроя материалов. Оператор мог вращать и масштабировать модель до запуска станка, что исключало брак на этапе настройки. Внедрил хост OpenGL внутрь WPF-окна (HwndHost) для отрисовки траекторий движения лазерной головки в реальном времени, минуя ограничения стандартного рендеринга. Синхронизировал диспетчер WPF с рендер-циклом через кастомный композиционный таргет, добиваясь плавного движения головки без задержек в управлении.
Низкоуровневая работа и оптимизация:
Вручную управлял памятью в горячих путях — бинарные протоколы с контроллера разбирал через Span и ReadOnlySequence, избегая лишних аллокаций. Маршалинг структур в C-API станка описывал с точным указанием LayoutKind.Sequential, использовал SafeHandle для контроля освобождения ресурсов ОС. Параллельно адаптировал WPF-решения под Linux (Astra Linux) через AvaloniaUI, сохраняя XAML-вёрстку и MVVM-логику без изменений.
Unity 3D — цифровой двойник и симуляция:
Разрабатывал прототип цифрового двойника лазерного станка для прогнозирования коллизий механических узлов и симуляции физических процессов. Для визуализации поисковой выдачи строил динамические графы связи эмбеддингов, применяя кастомный рендеринг и пуллинг объектов. Сетевой обмен с .NET-бэкендом шёл по WebSockets с применением UniTask для неблокирующей загрузки сцен. Оптимизировал сцены с тысячами динамических линий через GPU Instancing и ComputeBuffers, добиваясь стабильных 60+ FPS на целевом оборудовании.
Python и бэкенд-сервисы:
Создавал инструменты для сбора данных на Scrapy и aiohttp, строил векторные базы FAISS с семантическим поиском (индексация эмбеддингов через Sentence-Transformers). Бэкенд-сервисы поднимал на FastAPI с асинхронными эндпоинтами и валидацией Pydantic.
Инфраструктура и сеть:
Проектировал REST API и обеспечивал обмен по HTTP/HTTPS/WebSockets между клиентами (WPF, Unity) и сервером, критически оптимизируя задержки для синхронизации графики и управления.
Базы данных:
Работал с PostgreSQL и SQLite, использовал EF Core и Dapper. Для векторов — FAISS (ANN), базово знаком с Qdrant и ChromaDB.
Окружение и тестирование:
Писал тесты (xUnit, NUnit, Moq, AutoFixture, BenchmarkDotNet), проводил интеграционное тестирование с контейнерами. Работал в связке Windows/Linux, Git (GitFlow), Docker, CI/CD (GitLab/GitHub Actions). Документировал через XML Docs и Mermaid, техническую переписку вёл на английском.