Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение

Как я «малину» собирал. История создания KVM на базе Raspberry Pi

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 6.8K

Рассказываю, что такое KVM Over IP, как можно создать решение своими руками и выгодно ли это сегодня. Спойлер: в 2024 году смысла заморачиваться мало. И да, я понял это только в процессе. Но давайте обо всем по порядку... 

Читать о моем фиаско
Всего голосов 8: ↑5 и ↓3 +2
Комментарии 26

Простой тестер ёмкости аккумуляторов на Arduino

Время на прочтение 5 мин
Количество просмотров 94K
В последнее время я начал замечать, что мой смартфон стал разряжаться быстрее. Поиски программного «пожирателя» энергии плодов не принесли, поэтому стал задумываться, не пришло ли время заменить АКБ. Но абсолютной уверенности в том, что причина в батарее не было. Поэтому прежде чем заказывать новый аккумулятор решил попробовать измерить реальную емкость старого. Для этого было решено собрать простой измеритель емкости АКБ, тем более что идея эта вынашивалась уже давно – уж очень много батареек и аккумуляторов окружает нас в повседневной жизни, и было бы неплохо иметь возможность время от времени тестировать их.

Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 28

Итак, вы унаследовали старую кодовую базу на C++. Что дальше?

Уровень сложности Средний
Время на прочтение 21 мин
Количество просмотров 14K

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

Теперь вы отвечаете за кодовую базу на C++. Она большая, сложная и своеобразная; достаточно слишком долго на неё посмотреть, как она начинает разваливаться разными интересными способами. Иными словами, это легаси.

Но баги всё равно как-то нужно устранять, а ещё добавлять новые фичи. То есть вам нельзя просто закрыть на неё глаза или что ещё лучше, взорвать её динамитом. Она важна для компании. По крайней мере, для тех, кто платит вам зарплату. А значит, важна для вас.

И что делать теперь?

Не волнуйтесь, у меня такое случалось очень много раз и в разных компаниях (кто-то язвительный может спросить: а разве кодовые базы на C++ бывают какими-то другими?), выход есть, он не особо сложен и поможет вам действительно устранять баги, добавлять фичи, а то и когда-нибудь переписать её.

В этой статье я расскажу о том, что оказалось полезным для меня, и о том, чего стоит всячески избегать.
Читать дальше →
Всего голосов 71: ↑70 и ↓1 +69
Комментарии 26

Разбираемся, как работает Spring Data Repository, и создаем свою библиотеку по аналогии

Время на прочтение 8 мин
Количество просмотров 11K

В статье показано, как работают библиотеки Spring (Spring Data, Spring Feign), и показано, как можно создать свою похожую библиотеку.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 4

JPA Buddy: Умный помощник — половина работы

Время на прочтение 8 мин
Количество просмотров 20K

Ну что ж, Hello World... После почти года разработки наконец-то вышла первая версия JPA Buddy! Это инструмент, который должен стать вашим верным помощником по написанию кода для проектов с JPA и всем, что с этим связано: Hibernate, Spring Data, Liquibase и другим ПО из типичного стека разработки.

Чем он вам поможет? Если кратко, JPA Buddy упростит работу с JPA и тем самым сэкономит ваше время. В этой статье мы взглянем на основные фичи JPA Buddy, немного обсудим его историю и поговорим о его преимуществах. Надеюсь, он займет достойное место среди любимых инструментов Java-разработчиков, которые пользуются JPA, Spring, Liquibase и, конечно же, самой продвинутой Java IDE — IntelliJ IDEA.

Читать далее
Всего голосов 30: ↑30 и ↓0 +30
Комментарии 21

Создаем plugin для IDEA для мониторинга транзакций в Spring

Время на прочтение 5 мин
Количество просмотров 4.1K

В статье показано, как быстро можно создать свой plugin для облегчения работы с Transactional в Spring. Писать будем на Kotlin и Java

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 0

Spring Boot + ControllerAdvice + ResponseBodyAdvice или как обернуть ответ контроллеров

Время на прочтение 10 мин
Количество просмотров 25K

Всем привет, друзья! Сегодня хочу рассказать про способ использование Controller Advice для оборачивания объекта, возвращаемого контроллерами, в новый класс на уровне DispatcherServlet.

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 6

Можно ли подружить Stream API и JPA?

Время на прочтение 5 мин
Количество просмотров 7.1K

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

Если интересно посмотреть, что может библиотека, то прошу под кат.

Читать далее
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 7

Утечка памяти: цена одной маленькой ошибки

Время на прочтение 10 мин
Количество просмотров 9.7K

Всем привет, меня зовут Алена Коваленко, я Java-разработчица одной из команд направления Warehouse Management System (WMS) компании Lamoda. Наша команда занимается автоматизацией складской системы и реализацией новых фич для улучшения работы сотрудников склада. В том числе мы занимаемся техническими импрувментами системы, такими как вынесение из монолита функциональности, связанной с идентификацией товара и приемкой возвратов, в отдельный сервис — Inbound Service.

После релиза Inbound Service на проде склад заметил долгий отклик системы. В процессе исследования проблемы мы обнаружили утечку памяти, связанную с конфигурацией приложения, в том числе внутренних очередей в ActiveMQ Artemis.

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

Читать далее
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 6

Конвертируем Spring XML в Java-based Configurations без слёз

Время на прочтение 7 мин
Количество просмотров 6K

Как-то я засиделся на работе добавляя новую функциональность в один "небольшой" и довольно старенький сервис написанный на Spring.

Редактируя очередной XML файл Spring конфигурации я подумал: а чего это в 21 веке мы всё еще не перевели наш проект на Java-based конфигурации и наши разработчики постоянно правят XML?

С этими мыслями и была закрыта крышка ноутбука в этот день...

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 5

Современная серверная разработка на языке Java: 2. Архитектура серверного приложения

Время на прочтение 22 мин
Количество просмотров 23K

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

Читать далее
Всего голосов 11: ↑4 и ↓7 -3
Комментарии 11

Выполняем задачи по расписанию с Quartz и Spring Boot

Время на прочтение 9 мин
Количество просмотров 15K

Функции приложения, которые должны выполняться с определенной периодичностью или по расписанию, не выглядят на первый взгляд чем-то сложным. Однако при реализации можно столкнуться с рядом проблем. Грамотно подобранный инструмент позволит облегчить разработку и избежать проблем при эксплуатации приложения.

В статье на примере покажу, зачем использовать планировщик задач Quartz в Spring Boot-приложениях и с какими проблемами он поможет справиться.

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Комментарии 3

Построение сложных маршрутов в Apache Camel с помощью компонента Direct

Время на прочтение 3 мин
Количество просмотров 1.9K

В данной статье я бы хотел раскрыть тему создания сложных маршрутов в Apache Camel с помощью компонента Direct.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 3

Пишем плагин для IntelliJ IDEA. Ускоряем написание тестов на DTO

Время на прочтение 19 мин
Количество просмотров 7.1K

Когда пишешь тесты на обширную модель (DTO), ловишь себя на мысли, что сосредоточен не на тестовых данных, а на том, как ловчее избавить себя от написания boilerplate-кода.

Как это сделать? Поискать готовое решение (плагин).

А если его нет? Тогда – написать плагин.

А если не умеешь? Стоит хотя бы начать :)

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 14

Spring Boot. Настройка профилирования времени выполнения

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 6.1K

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

Т.к. речь шла о сервисе, который был написан довольно давно, и в него многие месяцы не вносились изменения, повинуясь принципу “работает - не трогай”, я решил постараться сделать это, не прикасаясь к самому коду сервиса.

Читать далее
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 13

Spring Security и архитектура наследования ролей в не плоской модели

Уровень сложности Средний
Время на прочтение 18 мин
Количество просмотров 12K

Когда речь заходит об авторизации, роли вступают в игру. Если модель плоская, то все просто. Пользователь обладает определенным набором привелегий и при запросе достаточно лишь проверить, что нужное право доступа присутствует в коллекции. Но как быть, если у пользователя могут быть разные наборы ролей для разных сущностей? Например, я обладаю ролью EDITOR в посте в социальной сети, но имею только VIEWER в другом. Также могут быть определены правила наследования. Если админ выдает дает мне роль EDITOR, то я автоматически приобретаю привилегию VIEWER. При этом, если я EDITOR, роль ADMIN у меня не появляется.

Как увязать все эти детали в коде и при этом не превратить продукт в большую кучу грязи? В рамках этой статьи я расскажу вам:

1. Как реализовать наследование ролей в Java?

2. Как протестировать полученную иерархию?

3. Как применить решение в рамках Spring Security?

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 5

Ещё раз о пропертях или откуда что берётся

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 9.1K

О чём вообще речь?

Всем привет! В данной статье речь пойдёт о настраиваемых параметрах конфигурации Spring приложений. Когда я только начал изучать Spring, естественно, одним из источников знаний были готовые примеры, проекты-образцы. И меня жутко бесило, что какие-то нужные для работы приложения значения появлялись «ниоткуда». К примеру, автор какого-нибудь туториала предлагал для проверки только что созданного учебного приложения зайти на localhost по порту 8088. Откуда берётся 8088? Почему не 8089? Оказалось, что для таких настраиваемых параметров есть специальные файлы. Итак:

Какие бывают настраиваемые параметры?

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

Например, за то на каком порту будет крутиться встроенный http-сервер (если мы используем Spring Web) отвечает параметр server.port. В том самом туториале из вступления в соответствующем файле server.port был равен 8088. Выглядит это (в простейшем случае) так:

server.port=8088

Имя параметра может состоять (и, как правило, состоит) из нескольких частей. Например, все «спринговые» параметры начинаются со слова «spring». Кастомные (пользовательские) параметры, введённые разработчиком конечного приложения, могут начинаться, например со слова application или любого другого. В зависимости от используемого формата файла, части разделяются по-разному (см. следующий раздел). Простейший вариант, просто точками. Пример пользовательских параметров:

Читать далее
Всего голосов 13: ↑11 и ↓2 +9
Комментарии 9

Авторизация в Spring Boot приложении с Spring Security 3.1.0 и PostgreSQL

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 12K

Эта статья является первой, написанной мной. Буду очень рад, если она все же будет опубликована. На данный момент являюсь Junior Java разработчиком, поэтому в этой статье не будет сложной аналитики и глубокого погружения в тему, но я свой опыт изучения и реализации приложений с использованием Spring Security, возможно, кому-то это поможет справиться с теми трудностями, с которыми встретился я.

Недавно мне пришлось подключать и настраивать авторизацию через Spring Security версии 3.1.0. В процессе разработки и решения сложностей, которых было не мало, я заметил, что информации по версии 3.1.0 довольно мало, если не считать документацию.

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 5

Аудит пользователей Spring Data JPA

Время на прочтение 5 мин
Количество просмотров 5.2K

Задача: в БД необходимо фиксировать кто создал сущность, кто её обновил, и кто её удалил.

Все знают, как взять пользователя из контекста и сунуть его в сущность. Допустим, на уровне сервиса в методе извлечь информацию о нём и «засетать» его в нужные поля (придётся везде таскать этот кусок кода по сервису), а с аспектами как‑то выглядит не явно и накладывает ряд обязательств (например, развешивание аннотаций над методами всякий раз, когда мы что‑то пытаемся сделать с сущностью (новые участники команды могут не знать о такой неявной практике, а старые забыть о ней)).

Мне хотелось полностью делегировать это приложению, но погуглив, я не нашёл какого‑то явного решения. Сейчас расскажу, как мне удалось это сделать:

Читать далее
Всего голосов 12: ↑11 и ↓1 +10
Комментарии 18

Быстрый старт. SpringBoot + RabbitMQ

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 5.7K

Было уже достаточно туториалов на тему Rabbit + Spring. В данной статье чуть обновленно описание быстрого запуска очередей. Если ты только начинаешь разбираться с очередями добро пожаловать подcast.

Читать далее
Всего голосов 8: ↑6 и ↓2 +4
Комментарии 2

Информация

В рейтинге
Не участвует
Откуда
Минская обл., Беларусь
Дата рождения
Зарегистрирован
Активность