All streams
Search
Write a publication
Pull to refresh
56
0
Dmitrii Zolotov @dmitriizolotov

Flutter Developer@YandexPro, DevOps, IT Architect

Send message

Многоязычность на Kotlin-бэкэнде

Level of difficultyEasy
Reading time6 min
Views2.5K

Язык программирования Kotlin часто ассоциируется с мобильной разработкой для Android и это неудивительно, учитывая что он принят Google как официальный язык разработки, и принес множество необходимых и удобных языковых конструкций и кооперативной многозадачности, при этом сохраняя совместимость на уровне байт-кода с ранними версиями JVM. Но применимость языка существенно выше и имеющиеся библиотеки (как созданные для Java, так и разработанные специально для Kotlin) позволяют создавать обычные приложения (например, на JavaFX или с использованием платформенных графических библиотек и Kotlin Native), а также создавать код для бэкэнда c подключениям к базам данных, кэшам, очередям сообщений и т.д. При этом, если для мобильной разработки проблем с поддержкой многоязычных сообщений не возникает (благодаря механизму ресурсов, в том числе строк, которые могут быть переопределены для конкретной локали), то для бэкэнда это становится нетривиальной задачей. В этой статье мы обсудим несколько подходов для создания бэкэнда с поддержкой нескольких языков.

Читать далее

Создаем байт-код для JVM без компилятора

Level of difficultyMedium
Reading time9 min
Views5.4K

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

Читать далее

Создание и тестирование процессоров аннотаций (с кодогенерацией) для Kotlin

Level of difficultyMedium
Reading time11 min
Views4.3K

В разработке с использованием Kotlin (или Java) для создания классов по верхнеуровневому описанию часто используется маркировка аннотациями (например, для моделей таблиц баз данных, сетевых запросов или инъекции зависимостей) и подключение процессоров аннотаций, которые также могут генерировать код, доступный из основного проекта. Запуск процессоров аннотаций выполняется внутри gradle (для Java-проектов через annotationProcessor, для Kotlin - kapt) и встраивается как зависимость для целей сборки проекта. И конечно же, как и для любого другого кода, для процессора аннотаций необходимо иметь возможность разрабатывать тесты. В этой статье мы рассмотрим основы использования кодогенерации (с использованием kapt) и разработки тестов для созданных генераторов кода. Во второй части статьи речь пойдет о разработке процессоров на основе Kotlin Symbol Processing (KSP) и созданию тестов для них.

Читать далее

Observability для микросервисных приложений в Kubernetes

Level of difficultyEasy
Reading time5 min
Views4.6K

Любая распределенная система, например включающая несколько микросервисов со своими источниками данных (и особенно запущенная внутри сложной системы оркестрации, которая сама по сути является распределенным приложением), обладает множеством точек отказа и по мере ее масштабирования и развития становится все сложнее обнаружить проблемы в функционировании (например, долгий ответ одного из микросервисов), которые приводят к общей потере производительности и даже отказам при высокой нагрузке (или при других неудачных стечениях обстоятельств). И даже если обнаружить сам факт наличия проблемы еще возможно через метрики систем мониторинга, наиболее часто для этого используются замеры задержки ответа, интенсивности запросов, операционные метрики насыщенности сервиса (например, отношение одновременно обрабатываемых запросов к лимиту или замеры процессорного время и/или зарезервированной памяти), то выяснить истинную причину возникновения отклонения уже не так просто (например, это может быть неудачная настройка кэшей запросов базы данных или достижения лимита подключений из‑за того, что приложение не использует пул и т. д.). Чтобы решить эту задачу используются сочетания инструментов (мониторинг, отслеживание распределенных операций и логирование), которые объединяются в общем подходе Observability. В этой статье мы рассмотрим несколько стеков и инструментов для наблюдения за приложениями в Kubernetes.

Читать далее

Расширяем Android Lint

Level of difficultyMedium
Reading time6 min
Views2.6K

Часто при разработке собственных фреймворков (или для проверки соответствия кода требованиям организации) возникает необходимость реализовать сложные проверки корректности использования в коде приложения. Это может быть реализовано через расширение возможностей линтера, который используется в Android Studio. В этой статье мы рассмотрим общие подходы к созданию таких расширений для Android-приложений и несколько примеров для проверки названий функций и наличия аннотаций.

Читать далее

Дополняем реальность в мобильных приложениях через ARCore

Level of difficultyMedium
Reading time8 min
Views4.9K

Технологии дополненной реальности (Augmented Reality, AR) развиваются с первых экспериментов с шлемами в 1968 году и прогнозируются как один из быстрорастущих сегментов развития интерфейсов (особенно при появлении специализированных устройств, таких как Hololens, Xiaomi Smart Glasses и проекта с непонятной судьбой Google Glass). Не могли не заметить этот тренд и разработчики операционных систем для мобильных устройств, Apple выпустила свой набор инструментов ARKit, также как и Google создала набор библиотек ARCore. Особенно важно, что поддержка этих библиотек доступна на большом количестве устройств (для Android нужна версия 7.0 или новее, а это более 94% доступных устройств, при этом почти 90% из них поддерживают Depth API, необходимый для корректной работы алгоритмов размещения объектов виртуального мира в сложном окружении). В этой статье мы рассмотрим основные вопросы использования ARCore и размещения объектов виртуального мира над поверхностями реального.

Читать далее

Журнал архитектурных решений (ADL) при проектировании информационных систем

Level of difficultyEasy
Reading time4 min
Views8.9K

Для сложных информационных систем бывает крайне сложно принять компромиссные решения с учетом ограниченных ресурсов. Одним из возможных способов решения является подход Architecture Description Log, который внедрен в крупных компаниях, таких как Google, Spotify и Microsoft. В этой статье мы рассмотрим основные положения ADL и обсудим, чем это может быть полезно для создания сбалансированной архитектуры в гибкой методологии разработки.

Читать далее

KMongo и неструктурированные данные

Reading time5 min
Views1.8K

Несмотря на то, что MongoDB начало движение в сторону строгости реляционной модели, она по прежнему остается документной БД и предполагает возможность сохранения документов произвольной структуры. И при использовании MongoDB в языках с динамической типизацией (JavaScript, Python) сохранение или генерация объектов не вызывает сложностей, поскольку заранее не требуется определить структуру извлекаемого или сохраняемого объекта. Но как действовать в случае использования драйверов для MongoDB для языков со строгой типизацией?

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

Читать далее

Расширяем PostgreSQL с помощью Rust

Level of difficultyMedium
Reading time5 min
Views5.6K

Свободная система управления базами данных PostgreSQL не только предоставляет высокопроизводительный движок для выполнения запросов, но и может быть расширена с помощью расширений, которые могут добавлять новые типы данных (например, для ГИС‑расширений или астрономических координат), дополнительные типы индекса и возможности поиска (например, полнотекстовый поиск), сбор статистики, поддержку новых языков для встроенных функций и многое другое. Большой список существующих расширений может быть найден по этой ссылке. В этой статье мы рассмотрим один из возможных вариантов по созданию собственного расширения для PostgreSQL с использованием библиотеки pgx.

Читать далее

Микросервисные приложения на GoMicro

Level of difficultyEasy
Reading time5 min
Views15K

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

Читать далее

Как подготовиться ко всему?

Level of difficultyEasy
Reading time11 min
Views5.3K

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

Читать далее

Разработка и тестирование программного обеспечения для микроконтроллеров на Python

Level of difficultyEasy
Reading time5 min
Views12K

Рынок интернета вещей растет значительными темпами и разработка кода для микроконтроллеров важна для любых проектов, где подразумевается наличие какого‑либо вспомогательного оборудования или носимого устройства. Для разработки программного обеспечения под встраиваемые микроконтроллеры сейчас (кроме C/C++) можно использовать многие другие технологии (например, TinyGo, Dart/Flutter, Rust), так же как и Python в наборе библиотек MicroPython, который работает как со своей платой (pyboard), так и с другими микроконтроллерами (например платами на процессорах ESP8266 или STM32). В этой статье мы рассмотрим общие подходы к разработке и тестированию программного обеспечения для микроконтроллеров с использованием Python.

Читать далее

Kotlin-сервер без JVM — реальность?

Level of difficultyEasy
Reading time4 min
Views6.1K

Не секрет, что Kotlin может использоваться для создания всех компонентов FullStack-приложения - от мобильных приложения для Android/iOS и веб-сайтов на Kotlin JS до бэкэнда (например, с использованием Ktor, http4k и micronaut). Но все же многих останавливает от использования Kotlin для создания API тот факт, что код запускается в хоть и оптимизированной, но все же Java виртуальной машине. Есть ли решение у этой проблемы? Да, и в этой статье мы обсудим способы компиляции приложения на Kotlin для создания API в нативный код и подводные камни, которые нас ожидают на этом пути.

Читать далее

Давай дружить или как сократить процесс адаптации и быстрее наполнить работу смыслом?

Reading time4 min
Views2K

Команда похожа на живой организм и в ней есть свои внутренние механизмы регулировки и адаптации к окружающей среде. А также как любой организм она требует непрерывного обновления и соблюдения баланса между приходящими участниками команды и ростом существующих клеток, составляющих организм. И здесь, если не предусмотреть механизмы адаптации и поддержки эволюции членов команды, может возникнуть и аллергическая реакция (когда новый участник команды не принимает или не принимается командой) и даже деградация всей команды из-за отсутствия единого понимания и принятия процессов и ценностей. Поэтому такое большое внимание в работе teamlead’а уделяется созданию комфортной обстановки для роста сотрудников и для онбординга новых участников. В этой статье мы поговорим про разные механизмы интеграции новых клеток в слаженный организм, которые помогут им максимально быстро приносить пользу и чувствовать себя комфортно.

Читать далее

Выходя за рамки JUnit. Создаем сложные расширения

Reading time8 min
Views3.2K

Переход от JUnit4 к новой версии во многом изменил способ расширения функциональных возможностей тестов. Напомню, что в JUnit4 основным механизмом расширения были правила (Rule), которые могли обернуть выполнение теста в дополнительную логическую обработку (например, в реализации абстрактного класса ExternalResource встраивали два дополнительных вызова методов инициализации (который также мог возвращать объект для взаимодействия с создаваемым окружением, например обертку вокруг Android Activity) и финализации (вызывается после выполнения теста и используется для очистки ресурсов). Модель JUnit 5 существенно дополнена и в этой статье мы рассмотрим как можно создавать собственные расширения для JUnit Platform.

Читать далее

Создание дэшбордов для бизнес-метрик на Metabase

Reading time5 min
Views6.9K

Для устойчивого развития бизнеса важно иметь актуальную информацию об операционных метриках и их динамике и иметь инструменты для агрегирования необходимых сведений из существующих источников данных (баз данных, аналитических систем, систем финансового учета и обратной связи от пользователей). Наряду с коммерческими системами анализа бизнес-показателей (PowerBI, Tableau, Datalens) для аналитиков доступны несколько open sourсe решений, которые ориентированы на извлечение и преобразование данных из различных источников (Extract-Transform-Load или ETL) и визуализацию данных в виде гистограмм, диаграмм, таблиц, графиков и в других представлениях. В этой статье мы рассмотрим пример использования Open Source решения Metabase и Singer для получения данных из внешнего источника.

Читать далее

Прокачка виртуального персонажа и иные методы геймификации в Agile

Reading time7 min
Views2.6K

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

Читать далее

Где мы находимся и куда идем? Делаем процесс тестирования прозрачным с Klaros TMS

Reading time6 min
Views2.1K

Для руководителя отдела тестирования важно иметь актуальную информацию об используемых тестовых кейсах, временных затратах на их выполнение, ретроспективную статистику о количестве и успешности прохождения ручных тестов (и, в идеальной ситуации, еще и автоматически извлекать результаты выполнения автоматических тестах в CI/CD), а также иную документацию о процессе тестирования и его результатах и эта потребность была реализована в системах управления тестированием (Test Management System, далее TMS). Н на рынке представлено большое количество коммерческих решений TMS (таких как TestRail, PractiTest, Zephyr Squad for Jira, XQual, Qase, Testiny), которые иногда также покрывают задачи управления требованиями, релизами и оценкой соответствия установленным KPI. В этой статье мы рассмотрим основы использования Klaros TMS (которая может использоваться бесплатно в Community-версии) и поговорим о подходах Local TMS, которые предлагаются Jetbrains.

Читать далее

Hydrosphere — управляем ML как сервисом

Reading time7 min
Views2.3K

Подобно тому, как в мире разработки многокомпонентных систем применяются подходы для управления и мониторинга микросервисами на основе инструментов DevOps (для запуска и восстановления сервисов, передачи данных, наблюдения за распределенными операциями, выполнение замеров и получение операционных метрик), так же и для моделей машинного обучения становится важным обеспечить возможность их развертывания, обновления и наблюдения за метриками (точность модели, время выполнения прямого прохождения нейронной сети и другими). В обобщенном виде такие решения получили названия MLOps и в этой статье мы рассмотрим возможности платформы Hydrosphere 3.0.

Читать далее

Go 1.20 и арена памяти

Reading time3 min
Views19K

Одной из революционных особенностей Go в сравнении с другими компилируемыми языками стало автоматическое управление освобождением памяти от неиспользуемых объектов (сборка мусора). В то же время она может привести к потере производительности при передаче контроля процессу управления памятью, но альтернативного механизма в Go представлено не было. Начиная с Go 1.20 появляется поддержка экспериментального решения для управления памятью, которое позволяет совместить безопасное выделение динамической памяти и уменьшить влияние интегрированного в скомпилированный код управления памятью на производительность приложения. В этой статье мы рассмотрим основные аспекты использования Memory Arena в Go 1.20.

Читать далее

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Works in
Date of birth
Registered
Activity

Specialization

Fullstack Developer, DevOps
Middle
From 200,000 ₽
Flutter
Kotlin
Development of mobile applications
Kubernetes
Golang
Linux
High-loaded systems