Java *
Объектно-ориентированный язык программирования
Приглашаем на Cinimex Spring IT Talk в Самаре (офлайн/онлайн)
Привет, Хабр!
После майских праздников мы отправимся в Самару и проведем митап Spring IT Talk!
Встретимся с ИТ-комьюнити и в уютной атмосфере обсудим зоопарк технологий для DevOps-инженера, погрузимся в Kafka Streams и завершим IT-вечер темой преодоления стопперов в профессиональном развитии.
Pet-проект на Rust нуждается в конструктивной критике
Примерно 8 месяцев назад я написал на Rust pet-проект, который пытается быть подобием Hibernate в экосистеме Java. Я даже опубликовал его в качестве Open Source, но получил негативный отзыв и удалил его с GitHub.
Сейчас я решил вернуться к этому проекту, но подойти к нему с другой стороны. Я бы хотел услышать идеи по проекту от опытных разработчиков на Rust. Что в моем проекте сделано не в идиоматическом стиле Rust и т.д. и т.п. В общем, хочется получить чек-лист того, что в проекте не так и как это исправить.
Настройка конвейерной сборки Java-проектов в GitLab
Автоматическая доставка проектных артефактов в тестовые и продуктивные среды является безусловной необходимостью современных процессов промышленной разработки ПО.
Мы пройдем полный процесс создания пайплайна для сборки и деплоя при помощи GitLab и сопутствующего ПО. Все операции мы проделаем на одном компьютере, хотя ничто не должно вам помешать сразу или в дальнейшем масштабировать полученное решение на один или несколько серверов. Для экспериментов лучше иметь достаточно современный компьютер с количеством оперативной памяти не менее 16 гигабайт, производительным процессором и хорошим интернет-каналом.
Предполагается, что у вас уже установлены Docker и ssh-сервер и вы немного умеете со всем этим обращаться.
Истории
DDD простыми словами
Часто в больших компания всё поделено на большие системы. А если система «Legacy», т.е. устаревшая, то часто внутри неё собрано очень много разнородного функционала. По сути такие системы представляют из себя монолитных монстров.
Бывает, что компании решают использовать микросервисный подход, но в результате получают таких же монолитных монстров, но только работающих в Кубере.
Границы систем размыты, нет чёткого понимания, что должно входить в систему, а что нет.
Команды сильно специализированы на конкретную систему и не могут участвовать в доработке никакой другой системы.
По сути, речь идёт о том, что системы становится слишком большими и для их доработки требуется длительный процесс погружения.
Можно ли исправить ситуацию коренным образом?
Нагрузи меня, Gatling
Привет. Это статья-туториал про выбор технологии и реализацию проекта нагрузочных тестов для API REST микросервисов. Про себя и специфику продукта, над которым работаю, я подробно описывал тут, когда рассказывал о интеграционных тестах. Здесь этому уделять внимание не буду. Если решитесь продолжать, то Вас ждет длинное чтиво. Результатом потраченного времени и внимания будет понимание того, зачем нужно нагрузочное тестирование, с чего начать, куда двигаться дальше и шаблонный проект нагрузочных тестов, который Вы сможете адаптировать под себя. Все используемые мной технологии в этой статье несут печать Java экосистемы. Это тоже может повлиять на то, решитесь ли Вы продолжать. Поехали ...
Искусство ETL. Пишем собственный движок SQL на Spark [часть 6]
В предыдущих сериях (FAQ • 1 • 2 • 3 • 4 • 5 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.
В данной части поговорим о том, как добавить в выражения SQL поддержку функций. Например,
SELECT
MAX(score1, score2, score3, score4, score5) AS max_score,
MIN(score1, score2, score3, score4, score5) AS min_score,
MEDIAN(score1, score2, score3, score4, score5) AS median_score,
score1 + score2 + score3 + score4 + score5 AS score_sum
FROM raw_scores INTO final_scores
WHERE ABS(score1 + score2 + score3 + score4 + score5) > $score_margin;
— тут у нас функции MAX
, MIN
и MEDIAN
принимают любое количество аргументов типа Double
и возвращают Double
, а ABS
только один такой аргумент.
Вообще, кроме общей математики, в любом уважающем себя диалекте SQL как минимум должны быть функции для манипуляций с датой/временем, работы со строками и массивами. Их мы тоже обязательно добавим. В classpath, чтобы движок мог их оттуда подгружать. До кучи, ещё и операторы типа >=
или LIKE
, которые у нас уже были реализованы, но хардкодом, сделаем такими же подключаемыми.
Уровень сложности данной серии статей в целом высокий. Базовые понятия в тексте совсем не объясняются, да и продвинутые далеко не все. Однако, эта часть несколько проще для ознакомления, чем предыдущие. Но всё равно, понимать её будет легче, если вы уже пробежались по остальным хотя бы по диагонали.
Ручное подтверждение сообщения в Kafka
В этой статье описывается реализация задачи ручного подтверждения(acknowledgment) обработки сообщения в Kafka через ручную отправку смещения(commit offset) сообщения. Логика реализована с использованием Java, Spring и Kafka.
21 ошибка в 21-й версии Apache NetBeans
Apache NetBeans — одна из первых IDE для Java, поддержка которой не прекращается на протяжении почти 30 лет. Совсем недавно вышла 21-я версия. Мы решили проверить исходный код такого долгожителя и выбрали наиболее интересные ошибки, которые разберём в этой статье.
Metatron — Open Source библиотека для генерации отчетов на языке Rust
Год назад возникла идея переписать весь Java-бекенд на Rust, который я уже несколько лет разрабатываю и поддерживаю. Я нашёл все аналоги библиотек и фреймворков из мира Java в экосистеме Rust:
Java для домохозяек: инструкция по обработке сообщений внутри Telegram бота
Представляю вашему вниманию своё видение данного процесса, т.к. ничего подобного пока не находил. Для примера будет показана обработка сообщений и нажатий на различные кнопки в боте Avandy News (бот основан на программе Avandy News Analysis, которая включена в Реестр российского ПО).
Стек: Java 17, Spring Boot 3.15, Postgresql 16.1
Настройка сервиса аутентификации OpenAM и шлюза авторизации OpenIG для защиты приложений
Если в организации множество приложений и сервисов, то нет необходимости разрабатывать аутентификацию и авторизацию для каждого сервиса отдельно. Оптимальным подходом является использование централизованного сервиса аутентификации совместно со шлюзом авторизации, который и определяет политики доступа к приложениям.
В этой статье мы настроим централизованную аутентификацию через сервис аутентификации на Open Access Manager (OpenAM) и настроим доступ к приложению через шлюз авторизации Open Identity Gateway (OpenIG), который будет использовать сессию аутентификации OpenAM. В качестве защищаемого приложения будем использовать приложение, разработанное с использованием Spring Boot и Spring Security.
Безопасный Continuous Deployment БД по принципам DB-First
В статье рассматривается Continuous Deployment для БД с бесшовными релизами за счёт обратно-совместимых обновлений и автоматизации проверок совместимости с помощью подхода DB-First.
Ближайшие события
Java в облаках
Будущее наступает. Нам уже очень сложно вообразить, как люди жили без постоянного доступа в интернет, как встречались, не имея телефонов, как ходили в фотосалоны, а потом хранили редкие фото всю жизнь, да даже как каждый день ходить на работу в офис - многие уже забыли. Думаю, очень скоро в прошлое отойдет и разворачивание приложений на физических серверах. Все уйдут в облака.
Еще раз о перформансе стримов в Java
Перевод статьи, где автор замеряет перформанс Stream API в Java на около-реалистичных (и не очень) задачах. Как и автору, мне нередко на глаза попадаются заявления что мол вся эта функциональщина в джаве - баловство и скорее вредный сахар. И что старовер с джавы 1.6 напишет на циклах заведомо более быстрый код, чем хипстер на стримах. Также в статье наглядно демонстрируется, в каких именно условиях параллельные стримы могут начать приносить пользу.
Старт разработки с применением GraphQL / DGS Framework
Привет! Мы – Екатерина и Виктория, middle-разработчик и старший разработчик в БФТ-Холдинге. В статье кратко расскажем об основах DGS фреймворка, его преимуществах, проблемах, с которыми мы столкнулись при работе с ним, а также покажем создание простого сервиса с поддержкой WebFlux.
Shenandoah GC в JDK
Привет, Хабр!
Shenandoah GC — это сборщик мусора для OpenJDK, целью которого является минимизация времени пауз, возникающих в результате сборки мусора, путем выполнения процессов эвакуации памяти параллельно с работающими Java‑потоками. Фичей Shenandoah является то, что время пауз GC не зависит от размера кучи, что означает одинаково короткие времена пауз как для кучи размером в 200 МБ, так и для 200 ГБ. Это достигается за счет использования дополнительного указателя косвенности для каждого Java‑объекта, что позволяет потокам GC компактизировать кучу, пока Java‑потоки продолжают выполняться.
Разработка Shenandoah началась с экспериментального проекта, целью которого было предоставление альтернативы другим сборщикам мусора, которые приоритизируют пропускную способность или размер памяти над отзывчивостью. Уже к 12-й версии JDK Shenandoah был готов к использованию, хотя и оставался помеченным как экспериментальная функция. Это состояние сохранялось, чтобы соответствовать статусу других сборщиков мусора, таких как Epsilon GC и ZGC.
Основное событие в истории Shenandoah — включение его в состав продуктовых функций начиная с 15-й версии JDK. Т.е для его использования больше не требовалось разблокировать экспериментальные опции VM. Такое изменение было в основном косметическим и касалось классификации настроек Shenandoah. Тем не менее, это был значительный шаг вперед, подтверждающий зрелость этого сборщика мусора.
ChatGPT Глубокая интеграция
Первое, что приходит в голову, когда речь заходит о ChatGPT и играх, это работа с текстом: диалоги, квесты, сюжет. Но это банально, скучно и не интересно. Мне же хочется, чтобы ИИ мог управлять буквально каждым аспектом геймплея. Сейчас я нахожусь на начальном этапе, и тем не менее мне удалось найти способ, которым можно реализовать все задуманное. Фундаментальной вещью в каждой игре является движение объектов, с этого я и решил начать.
«Михалыч, где заказ?» или как мы автоматизировали процесс заказа лома и отслеживали его по RFID
Для того, чтобы повысить качество производства и продолжать расти, бизнесу приходиться автоматизировать ручные операции. Но борьба с легаси-процессами только на первый взгляд кажется простой и лёгкой. Найти то, что плохо работает и придумать, как это решить, не так то просто. А отучить сотрудников делать так, как они привыкли — ещё сложнее.
Привет, Habr! На связи Александр Тамразов и Дмитрий Кривенко, разработчики из Аxenix.
Зонтичный мониторинг на коленке
Эта статья о том, что можно написать свое приложение для решения проблемы зонтичного мониторинга на spring-boot. Под зонтичным мониторингом я понимаю информационную систему, которая работает с событиями от систем мониторинга и рассчитывает статусы сервисно-ресурсной модели.
Вклад авторов
olegchir 4056.4tagir_valeev 2369.0phillennium 1481.423derevo 1271.0ARG89 1078.2igor_suhorukov 915.2dbelob 895.0doom369 826.0alizar 756.0dididididi 709.0