User Tools

Site Tools


Олег Бородин, примеры кода и небольших приложений

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

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

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

Большая часть примеров составляют собой законченные полноценные приложения и дистрибутивы, и просты для конфигурации и развертывания на разных unix системах. В том числе не имеющих docker/compozer.

SysRun

https://github.com/soldier791/sysrun

Небольшое полно-стековое приложение для старт-остановки виртуальных машин. В основе Golang/Gin и Angular фреймворки. Полноценный дистрибутив.

Цель: на предприятии существует крайне критичное унаследованное приложение, фиксирующее ход работ, использование материалов на станках и конвеерах. Приложение изначально разработано в 2009 году, и за все следующие годы многократно правилось на ходу, что создало в итого изрядную лапшу кода и решений. Время на редизайн приложения не выделялось, документирование решений не производилось, работа по изменением проводилась часто оперативно, “давай-давай-быстрее”. Итого в 2018 году это начало приводить к остановке цехов предприятия, операторы станков не могли начать смену.

Когда сбои стали регулярными, как временное решение в течении дня я сделал это приложение, что бы наиболее компетентные системные администраторы могли перезапустить это приложение, в составе виртуальной машины, удаленно с смартфона, даже по дороге на работу. Что резко снизило накал обстановки на предприятии, снизило время на простой линий, и позволило разработчику более спокойно отладить приложение. Хотя редизайн проблемного приложения, как мне стало известно в последнее время, так и не был произведен.

m5dc

http://wiki.unix7.org/c/m5dc

Небольшая утилита на С, проверяющаяя состоянии корпоративных SQL и web сервисов, и формирующая отчет для системных администраторов.

Цель: часто компетентность региональных системных адмистраторов оставляла желать лучшего, и для того что бы их оценки работы критичных корпоративных сервисов были адекватными, я написал эту утилиту и опубликовал на корпоративном сервере методику работы по оценке сервисов.

Эффект был очень. Через три дня необоснованные жалобы резко прекратились. В регионах занялись действительными причинами отказа сервисов. По обоснованым причинам мы стали получать телеметрию.

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

pure-cpp-server

Самый маленькие в мире pure web сервисы, на полтора листа кода, на С и С++. =) Шутка. Это просто небольшой пример минималисткого web-сервера, по reactor/thread pool шаблону. Сделаны в качестве разминки и что бы показать коллегам, что web сервисы могут очень компактными и встраиваемыми в широкий диапазон приложений.

m2store

https://github.com/soldier791/m2store

Минималистский аналог файлового сервиса S3 от Amazon. Написан на Go, имеет вменямый web front на React, для контроля данных.

Цель: для хранения BLOB-ов компании. Имеющиеся S3 и S3-like програмные продукты несколько пугали имеющихся 1С разработчиков своей сложностью и 50 страничной документацией на чужом языке, и для адаптации я за несколько дней по той же самой концепции написал файловый сервер с всего несколькими понятными методами, и frontend к нему.

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

api-recorder

https://github.com/soldier791/api-recorder

Журналирующий web сервис-посредник.

Цель: B2B компания, транспортные компании для формирования аналитики и деловых состояний присылают данные о перевозках, статус, инциденты, и еще целый ряд данных, с частотой примерно 5-10 пакетов данных в секунду 24×7. Сервисы которые обрабатывали эти данные, устарели. Был начат проект по редизайну обработки данных. Описание формата входных данных нет, данные разноформатные и с пачкой нарушений базового синтаксиса json.

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

Время остановки для переключения на сервис-перехватчик и обратно составило не более 5 секунд. Тянувшиеся много месяцев дебаты о реальных формате данных были закончены за три дня.

spring

https://github.com/soldier791/spring

До 2019 года я не писал Java утилит и тем более каких-либо сервисов или приложений. Не было желания и необходимости. Максимум правил пару строчек существующего кода. В одном из проектов ряд сотрудников сомневались, в состоянии ли я участвовать в проекте, в котором использовано много Java кода. За субботу-воскресенье, имея практически нулевой опыт в создании Java сервисов и вообще Java, разобрался и написал пример web сервиса на базе Spring + SQL, и что было важно, без использования ORM.

Итог: вопрос в моей компетентности был снят и больше не рассматривался. В дальнейшем модифицировал ряд сервисов с использованием Java, там где это было целесообразно.

object-generator

https://github.com/soldier791/object-generator

Небольшая утилита для формирования массива фейковых объектов мониторинга для проверки комплекса приложений. Сделана в начале работы над проектом.

mqtt-bot

https://github.com/soldier791/mqtt-bot

Сервис-каркас для имитации различных периферийных IoT устройств и шлюзов. Связывалась с MQTT брокером, использовался для имитации полного контура управления. То есть принимала данные и отвечала на них, в форме реального устройства. Реальные устройства были не всегда доступны из-за вопросов безопасности, и после перехвата данных, поведение устройства с некоторой долью условности имитировалось этим ботом, после модификации.

jrpc20

https://github.com/soldier791/jrpc20

Эталонный учебный шаблон JSON RPC 2 based сервиса, с валидацией запросов. Сделан в ходе дебатов по теме интеграции продукта со сторонними решениями. Один из участников исходя из своих частных интересов настаивал на gRPC-only решении, хотя среди реальных потенциальных клиентов было много, кому было затруднительно интегрировать свои инфосистемы посредством gRPC и/или Swagger, и самым совместимым было бы использовать крайне простые и эффективные решения, понятные “в максимальном количестве аудиторий”. Также я учитывал большой зоопарк уже имеющихся решений, и практику интеграции.

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

iot-man & work-m2n

Репозитарий с простой тестовой реализацией IoT контроллера, “работа выходного дня”, .

Цель: проект над которым я работал, имел крайне странную архитектуру, приводящую к в том числе к крайне низкой нагрузочной способности, не более ~50 запросов от IoT устройств в секунду. Что мало на реальных сетях устройств, и в деловом отношении выглядит как “гора породила мышь”.

Я решил написать маленький пробный IoT сервис, что бы проверить и показать реальную максимальную нагрузочную способность при ином подходе. Получилось более чем удовлетворительно, предел этого сервиса составлял ~5500 запросов на локальной 100Mbps сети, то есть на два порядка больше.

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

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

stm32-f4-freertos-opencm3

Небольшие проекты из хоббийных, для саморазвития, по созданию встраиваемых приложений на базе STM32. Использована FreeRTOS, адаптированная мной под newlib libc, и opencm STM библиотеку.

Драйвера шин и устройств написаны мной с нуля, в основном по спецификациям. В общем, это чистые готовые прототипы для создания встраиваемых многопоточных приложений, с USB, UART, I2C и SPI интерфейсами, символьным и графическим терминалом, флеш-памятью и часами реального времени.