К сожалению, в большинстве случаев, я не могу привести примеры приложений и компонентов, созданных мной в процессе работы на проектами, в соотвествии с положениями соглашений.
Ниже небольшие примеры кода, сделанные мной в частном порядке, по своей инициативе и/или на которые не распостранются указанные соглашения.
Это не весь код, сложность большинства проектов над которыми я работал превышает сложность этих примеров минимум на порядок. Тем не менее код и его описание позволит понять качество с которым я работаю.
Большая часть примеров составляют собой законченные полноценные приложения и дистрибутивы, и просты для конфигурации и развертывания на разных unix системах. В том числе не имеющих docker/compozer.
https://github.com/kindsoldier/sysrun
Небольшое полно-стековое приложение для старт-остановки виртуальных машин. В основе Golang/Gin и Angular фреймворки. Полноценный дистрибутив.
Цель: на предприятии существует крайне критичное унаследованное приложение, фиксирующее ход работ, использование материалов на станках и конвеерах. Приложение изначально разработано в 2009 году, и за все следующие годы многократно правилось на ходу, что создало в итого изрядную лапшу кода и решений. Время на редизайн приложения не выделялось, документирование решений не производилось, работа по изменением проводилась часто оперативно, “давай-давай-быстрее”. Итого в 2018 году это начало приводить к остановке цехов предприятия, операторы станков не могли начать смену.
Когда сбои стали регулярными, как временное решение в течении дня я сделал это приложение, что бы наиболее компетентные системные администраторы могли перезапустить это приложение, в составе виртуальной машины, удаленно с смартфона, даже по дороге на работу. Что резко снизило накал обстановки на предприятии, снизило время на простой линий, и позволило разработчику более спокойно отладить приложение. Хотя редизайн проблемного приложения, как мне стало известно в последнее время, так и не был произведен.
Небольшая утилита на С, проверяющаяя состоянии корпоративных SQL и web сервисов, и формирующая отчет для системных администраторов.
Цель: часто компетентность региональных системных адмистраторов оставляла желать лучшего, и для того что бы их оценки работы критичных корпоративных сервисов были адекватными, я написал эту утилиту и опубликовал на корпоративном сервере методику работы по оценке сервисов.
Эффект был очень. Через три дня необоснованные жалобы резко прекратились. В регионах занялись действительными причинами отказа сервисов. По обоснованым причинам мы стали получать телеметрию.
Выбрал написать на С, поскольку на тот момент для создать портативную это было быстрее всего, у меня был комплект для кроскомпиляции exe файла для Windows, и подходящие куски старого кода.
Самый маленькие в мире pure web сервисы, на полтора листа кода, на С и С++. Шутка.
Это просто небольшой пример минималисткого web-сервера, по reactor/thread pool шаблону.
Сделаны в качестве разминки и что бы показать коллегам, что web сервисы могут очень компактными и встраиваемыми в широкий диапазон приложений.
https://github.com/kindsoldier/m2store
Минималистский аналог файлового сервиса S3 от Amazon. Написан на Go, имеет вменямый web front на React, для контроля данных.
Цель: для хранения BLOB-ов компании. Имеющиеся S3 и S3-like програмные продукты несколько пугали имеющихся 1С разработчиков своей сложностью и 50 страничной документацией на чужом языке, и для адаптации я за несколько дней по той же самой концепции написал файловый сервер с всего несколькими понятными методами, и frontend к нему.
Прежде всего, мы в дальнейшем исключили хранение BLOB-ов в SQL базах данных, что ранее втихомолку было использовано как масштабное решение и в итоге привело к ряду вялотекущих проблем в работе предприятия.
https://github.com/kindsoldier/api-recorder
Журналирующий web сервис-посредник.
Цель: B2B компания, транспортные компании для формирования аналитики и деловых состояний присылают данные о перевозках, статус, инциденты, и еще целый ряд данных, с частотой примерно 5-10 пакетов данных в секунду 24×7. Сервисы которые обрабатывали эти данные, устарели. Был начат проект по редизайну обработки данных. Описание формата входных данных нет, данные разноформатные и с пачкой нарушений базового синтаксиса json.
За короткий срок написал этот сервис-перехватчик, проверил и запустил на своей рабочей виртуальной машине, и попросил системных администраторов направить копию входных потоков на него. После двух суток работы работы полученный массив в пару миллионов записей я использовал для анализа реальных форматов входных данных и создания новых сервисов агрегации и обработки данных.
Время остановки для переключения на сервис-перехватчик и обратно составило не более 5 секунд. Тянувшиеся много месяцев дебаты о реальных формате данных были закончены за три дня.
https://github.com/kindsoldier/spring
До 2019 года я не писал Java утилит и тем более каких-либо сервисов или приложений. Не было желания и необходимости. Максимум правил пару строчек существующего кода. В одном из проектов ряд сотрудников сомневались, в состоянии ли я участвовать в проекте, в котором использовано много Java кода. За субботу-воскресенье, имея практически нулевой опыт в создании Java сервисов и вообще Java, разобрался и написал пример web сервиса на базе Spring + SQL, и что было важно, без использования ORM.
Итог: вопрос в моей компетентности был снят и больше не рассматривался. В дальнейшем модифицировал ряд сервисов с использованием Java, там где это было целесообразно.
https://github.com/kindsoldier/object-generator
Небольшая утилита для формирования массива фейковых объектов мониторинга для проверки комплекса приложений. Сделана в начале работы над проектом.
https://github.com/kindsoldier/mqtt-bot
Сервис-каркас для имитации различных периферийных IoT устройств и шлюзов. Связывалась с MQTT брокером, использовался для имитации полного контура управления. То есть принимала данные и отвечала на них, в форме реального устройства. Реальные устройства были не всегда доступны из-за вопросов безопасности, и после перехвата данных, поведение устройства с некоторой долью условности имитировалось этим ботом, после модификации.
https://github.com/kindsoldier/jrpc20
Эталонный учебный шаблон JSON RPC 2 based сервиса, с валидацией запросов. Сделан в ходе дебатов по теме интеграции продукта со сторонними решениями. Один из участников исходя из своих частных интересов настаивал на gRPC-only решении, хотя среди реальных потенциальных клиентов было много, кому было затруднительно интегрировать свои инфосистемы посредством gRPC и/или Swagger, и самым совместимым было бы использовать крайне простые и эффективные решения, понятные “в максимальном количестве аудиторий”. Также я учитывал большой зоопарк уже имеющихся решений, и практику интеграции.
В работу так и не был принят, поскольку у проекта и его продукта и без этого было много родовых архитектурных проблем, и до реальных вопросов интеграции дело так и не дошло.
Репозитарий с простой тестовой реализацией IoT контроллера, “работа выходного дня”, .
Цель: проект над которым я работал, имел крайне странную архитектуру, приводящую к в том числе к крайне низкой нагрузочной способности, не более ~50 запросов от IoT устройств в секунду. Что мало на реальных сетях устройств, и в деловом отношении выглядит как “гора породила мышь”.
Я решил написать маленький пробный IoT сервис, что бы проверить и показать реальную максимальную нагрузочную способность при ином подходе. Получилось более чем удовлетворительно, предел этого сервиса составлял ~5500 запросов на локальной 100Mbps сети, то есть на два порядка больше.
Прототип IoT менеджера, с простой архитектурой, с возможностью строить сложные топологии, использовать встраивать различные протоколы коммуникации, и прочим.
Работа над кодом была остановлена в связи с невозможностью реального применения, поскольку по сумме причин я покинул проект.
Небольшие проекты из хоббийных, для саморазвития, по созданию встраиваемых приложений на базе STM32. Использована FreeRTOS, адаптированная мной под newlib libc, и opencm STM библиотеку.
Драйвера шин и устройств написаны мной с нуля, в основном по спецификациям. В общем, это чистые готовые прототипы для создания встраиваемых многопоточных приложений, с USB, UART, I2C и SPI интерфейсами, символьным и графическим терминалом, флеш-памятью и часами реального времени.