Найти тему
Опубликовано фото
5 дней назад
5. Регистрация конфигурации Создайте файл META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports в модуле autoconfigure и добавьте туда полное имя вашего класса конфигурации: com.example.kafka.autoconfigure.KafkaAutoConfiguration 6. Использование стартера Теперь ваш стартер готов к использованию! Добавьте его как зависимость в другой проект: <dependency> <groupId>com.example</groupId> <artifactId>kafka-starter</artifactId> <version>1.0.0</version> </dependency> Настройте Kafka через application.properties: custom.kafka.bootstrap-servers=localhost:9092 И используйте KafkaTemplate в своем коде: @Service public class KafkaService { private final KafkaTemplate<String, String> kafkaTemplate; public KafkaService(KafkaTemplate<String, String> kafkaTemplate) { this.kafkaTemplate = kafkaTemplate; } public void sendMessage(String topic, String message) { kafkaTemplate.send(topic, message); } } Полезные советы 1. Используйте аннотации @Conditional: Они помогают контролировать, когда именно будет создаваться бин. Например, @ConditionalOnMissingBean гарантирует, что ваш бин будет создан только если его нет в контексте. 2. Пишите тесты: Убедитесь, что ваш стартер работает корректно. Используйте SpringBootTest для проверки конфигурации. 3. Документируйте: Опишите, как использовать ваш стартер, какие свойства доступны и как их настраивать. Создание собственного Spring Boot Starter — это отличный способ упростить работу с сложными технологиями. Вы не только улучшите свои навыки, но и сможете помочь другим разработчикам быстрее внедрять нужные решения. Код на GitHub🖥 Если у вас есть вопросы или опыт создания своих стартеров — делитесь в комментариях Немыкин.Продакшн - Java/Kotlin developer #SpringBoot #Kafka #Java #Microservices
1 неделю назад
📝 Как написать собственный Spring Boot Starter для Kafka? Привет! Сегодня хочу поделиться опытом создания собственного Spring Boot Starter для работы с Apache Kafka. Если вы когда-либо писали микросервисы или работали с Kafka, то знаете, насколько важно упростить интеграцию и конфигурацию. Именно для этого и существуют Spring Boot Starters — они позволяют абстрагировать сложные настройки и предоставить разработчикам готовое решение "из коробки". Что такое Spring Boot Starter? Spring Boot Starter — это модуль, который предоставляет предварительно настроенные зависимости и автоматическую конфигурацию для конкретной функциональности. Например: - spring-boot-starter-web для веб-приложений. - spring-boot-starter-data-jpa для работы с базами данных через JPA. Создавая собственный starter, вы можете упростить интеграцию любой библиотеки или технологии в ваш проект. Зачем писать свой starter для Kafka? Apache Kafka — мощный инструмент для обработки потоков данных, но его настройка может быть громоздкой. Создав свой starter, вы можете: 1. Упростить конфигурацию Kafka Producer/Consumer. 2. Автоматизировать регистрацию бинов (например, KafkaTemplate, ConcurrentKafkaListenerContainerFactory). 3. Предоставить удобные дефолтные настройки, которые можно переопределить через application.properties. 4. Изолировать логику работы с Kafka от основного кода приложения. Основы написания Spring Boot Starter 1. Структура проекта Ваш проект должен состоять из двух модулей: - starter: содержит только зависимости (без кода). Это модуль, который будут подключать пользователи вашего стартера. - autoconfigure: содержит логику автоматической конфигурации. Пример структуры: kafka-starter ├── kafka-starter-autoconfigure │ ├── src/main/java/com/example/kafka/autoconfigure │ └── pom.xml └── kafka-starter └── pom.xml 2. Добавление зависимостей В kafka-starter-autoconfigure/pom.xml добавьте зависимости для Kafka и Spring Boot: <dependencies> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> </dependencies> В kafka-starter/pom.xml добавьте зависимость на autoconfigure: <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>kafka-starter-autoconfigure</artifactId> <version>${project.version}</version> </dependency> </dependencies> 3. Создание класса автоматической конфигурации В модуле autoconfigure создайте класс, который будет настраивать Kafka Producer и Consumer. Например: @Configuration @ConditionalOnClass(KafkaTemplate.class) @EnableConfigurationProperties(KafkaProperties.class) public class KafkaAutoConfiguration { @Bean @ConditionalOnMissingBean public KafkaTemplate<String, String> kafkaTemplate(ProducerFactory<String, String> producerFactory) { return new KafkaTemplate<>(producerFactory); } @Bean @ConditionalOnMissingBean public ProducerFactory<String, String> producerFactory(KafkaProperties properties) { Map<String, Object> configProps = new HashMap<>(); configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, properties.getBootstrapServers()); configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return new DefaultKafkaProducerFactory<>(configProps); } } 4. Создание класса properties Определите класс для чтения настроек из application.yaml: @ConfigurationProperties(prefix = "custom.kafka") public class KafkaProperties { private String bootstrapServers; // Getters and Setters }
1 неделю назад
"Заговор разработчиков против корпораций" Техно-анархисты и технический терроризм?.. Речь о тайной, сугубо анонимной организации, следы которой начали замечать еще в 2018-ом... О целях и мотивах организации можно только догадываться: некоторые считают это кибер-луддизмом, другие — техно-анархизмом. Ясно одно: организация существует, ее члены уничтожают кодовые базы десятилетиями, и говорить об этом не принято. Попалась необычная статья, в которой автор описывает, как на практике столкнулся с подобным явлениям и описал их "почерк". Несколько критериев для определения такого анархиста (или просто неопытного разработчика😉). Методы организации включают маскировку вредоносного кода, создание ловушек и подрыв производительности: Конструирование ловушек • Создание двусмысленных конструкций; • Использование мета-программирования для скрытия логики; • Использование макросов для добавления логики в язык; • Неявная связность для создания гонок; • Нарушение гайдлайнов и ожиданий для создания путаницы. Когнитивное истощение • Использование отрицание отрицания для усложнения кода; • Использование неинтуитивных необязательных функций; • Создания непредсказуемых ошибок; • Слепой try-catch для создания ложных исключений; • Скрытый источник данных для создания проблем с тестовыми стендами; • Неидиоматичный код для усложнения поддержки. Подрыв производительности • Использование циклов для маскировки запросов к базе данных; • Использование триггеров для усиления когнитивной нагрузки; • Экспертная маскировка проблем с производительностью через обратное рекомендациям. 🚽 Так что будьте бдительны, жестче относитесь к ревью и пишите хороший, читаемый и оптимизированный код. Источник ➡️ Хабр Немыкин.Продакшн - Java/Kotlin developer #ТехноАнархизм
1 неделю назад
Порабощения ИИ не ждём? 🫠 Оказывается, что LLM не такие умные и рассудительные. Да, типовые задачи программирования, диагностирования болезней, написания диссертаций модельки выполняют хорошо, но что происходит, когда надо подумать? Взяв 3 популярные на сегодняшний день модели GPT o1, DeepSeek R1 и QwenLM попробовали решить пару логических задачек с помощью функции рассуждения. Спойлер: думать могут над тем, чему обучили Как оказалось: Почему так происходит? LLM не способны мыслить конкретными объектами, они не способным воспринимать объекты с их свойствами: размерами, объемами, массами, и уж тем более не способны понимать и выстраивать внутри отношения одних объектов с другими Для человека легко понять, что монеты зачастую бывают маленькие и легко могут поместиться в коробку, а одну коробку в другую вставить легче простого, если сказано, что одна в 3 раза больше другой - но всё это не свойственно для LLM Может какие-то секретные разработки супер интеллекта и ведутся, но жизнь рядового гражданина, где нужно ориентироваться в постоянно меняющихся условиях вряд ли в ближайшем будущем будет заменима 🫡 А что думаете вы? Подробнее про тесты и результаты 👇 Источник ➡️ Хабр Немыкин.Продакшн - Java/Kotlin developer #LLM #ИИ
2 недели назад
Да кто такой этот ваш Пильчиков? 🤨 А я в целом не слышал такую фамилию, пока не прочитал статью "У нас был свой Тесла с семафорами и рентгеном". Рекомендую для самостоятельного изучения, я же кратко резюмирую какими исследованиями занимался Николай Пильчиков 👇 Конкуренция Николе Тесла: • В 1898 году Тесла продемонстрировал лодку, управляемую дистанционно. • В том же году Пильчиков показал, как с помощью радиосигналов можно дистанционно управлять моделями маяка, семафора и лодки. Радиоуправление: • Пильчиков разработал протектор для фильтрации радиосигналов и защиты оборудования от помех. • Он увеличил дальность радиопередачи до 60 морских миль и получил признание за свои достижения. Рентгенография: • Пильчиков модифицировал трубку Пулюя для получения более мощных рентгеновских лучей. • Он доказал, что рентгеновские лучи не отклоняются электростатическими и магнитными полями. • Создал первые рентгенограммы, включая изображения жабы, рака и рыбы. Поляризация света: • Пильчиков подтвердил, что голубой свет более поляризован в точках максимальной поляризации. • Исследовал влияние времени года и погодных условий на поляризацию света. Электрохимия: • Пильчиков разработал метод фотогальванографии, основанный на электролизе. • Проецировал изображение на катод, создавая рельефные изображения на металлических пластинах. Курская магнитная аномалия: • Пильчиков предположил, что Курская магнитная аномалия связана с залежами железной руды. • Открыл два новых месторождения и получил почётную медаль Русского географического общества. Научные интересы: • Пильчиков исследовал конвекцию газов, создал уникальные приборы и разработал конструкцию стратостата. • Основал метеорологическую лабораторию в Харьковском университете. • Читал лекции, поддерживал развитие образования и выпускал журнал «Метеорологический вестник». Для нас это пара предложений, а для него жизнь и множество открытий. Возможно, с моим образованием что-то не так, но я ни разу и ни от кого не слышал про профессора Пильчикова. При этом, на мой взгляд, он заслуживает куда больше внимания любого зарубежного ученого и мы должны говорить об этом. Должны отмечать достижения отечественных ученых, дабы привлекать в исследования молодых специалистов и гордиться с своими разработками. 😯 Может всем основам положила сила пиара. Как с изобретением радио - официально изобретателем радио в мировом сообществе признан Гульельмо Маркони, в России — Александр Попов, а в США официальным изобретателем радио считается Никола Тесла. А вы знали, что первый сотовый телефон на самом деле изобрел не инженер Motorola, а ученые СССР? Это была секретная разработка, пользовались им только высокопоставленные чиновники, которым устанавливали телефон в служебные автомобили. Учитесь, развивайтесь, изучайте фундаментальные вещи, но не забывайте про отечественных инженеров. Источник ➡️ Хабр Немыкин.Продакшн - Java/Kotlin developer
2 недели назад
"Ваша регистрация на Яндекс Dev Day&Night" Яндекс Dev Day&Night — конференция о разработке сервисов, которыми каждый месяц пользуются больше 100 миллионов людей. Собрали насыщенную программу: днём доклады, пирлабы и D&D, а после заката нетворкинг, квизы, диджеи и дискуссии не под запись. Регайтесь, может встретимся 👋 По ссылке - все детали и кнопка "Зарегистрироваться". Немыкин.Продакшн - Java/Kotlin developer #Yandex
2 недели назад
🔥 Вам открыт доступ к SourceCraft Попробуем модную штуку. По заявлениям, ориентироваться в исходниках можно будет лучше, чем на GitHub🖥 + автодополнение кода SourceCraft — платформа Яндекс, с помощью которой вы можете разрабатывать исходный код, управлять версиями, тестировать, собирать, развертывать и сопровождать программные продукты. Сервис представляет собой систему управления репозиториями кода для git с отслеживанием ошибок и пайплайном CI/CD. 👨‍💻 Некоторые особенности платформы: - Навигация по коду устроена так же, как и в привычных для большинства разработчиков средах программирования (IDE). В интерфейсе можно не только настроить поиск по коду через ключевые слова и названия файлов, но и полноценно изучить структуру кода. - Для автодополнения кода в платформу встроен AI-ассистент SourceCraft Code Assistant. Сервис поддерживает более 30 языков программирования, в том числе C++, Go, Java, Kotlin, Python и другие. - Поиск в SourceCraft работает по ключевым словам и названиям файлов. Платформа доступна в виде веб-приложения. В будущем планируется добавить интеграцию с сервисами Yandex Cloud, что позволит быстро разворачивать проекты в облаке, а также выпустить версию платформы по модели on-premise — для использования на собственных серверах. Ссылка на доку и регистрацию Немыкин.Продакшн - Java/Kotlin developer #SourceCraft
2 недели назад
Прочитал статью "Взгляд на звук через спектрограмму" и накрыла ностальгия 🧑‍🎓 Когда я учился в бакалавриате, у меня была дисциплина ТАУ (теория автоматического управления), где мы подробно рассматривали АЧХ, ЛФЧХ и прочие частотные характеристики, гармоники, дискретные и оконные преобразования, в общем то, от чего закипает голова. Все это тесно связано с преобразованиями Фурье. В целом ряд Фурье фигурировал во многих дисциплинах, но на ТАУ уделяли этому особое внимание. Даже как-то по просьбе декана писал десктопное приложение на C#, в котором сигнал раскладывал на разные составляющие для получение различных форм сигнала. Только по синусам, только по косинусам, с разными коэффициентами, чтобы на примере показывать студентам младших курсов физический смысл гармоник и электромагнитных процессов. Там были и полная выпрямленная синусоида, симметричный ступенчатый сигнал, прямоугольный, зубчатый, в общем, получилось красиво. К сожалению, исходный код я утратил :( 🤯 В данной статье рассматривается спектральный анализ звука. Именно на примере работы со звуком мне удалось расширить понимание и углубиться в физический смысл преобразования Фурье, ведь это мощный математический инструмент, который позволяет анализировать любые сигналы, изображения, колебательные процессы, процессы в электротехнике. А вот что такое гармоники я вникал долго и, возможно, до конца так и не осознал. Сложно осознавать вещи, когда не находишь прямой интерпретации с физическим миром. Автор рассказывает о своём опыте работы с акустикой, начиная с проекта анимации северного сияния, реагирующей на музыку. Он объясняет, как использовать Audacity для генерации звуковых сигналов, настройки отображения спектрограммы и анализа спектра. Особое внимание уделено гармоникам, оконному преобразованию Фурье и настройкам, таким как размер окна, усиление и динамический диапазон. Также рассматриваются различия между линейным и логарифмическим масштабами, что важно для понимания восприятия звука человеком. Автор делится интересными наблюдениями, например, обнаружением высокочастотных звуков, издаваемых насекомыми, и анализирует спектрограммы различных звуков, таких как колокола, сирены, голоса людей и животных, а также птичьи песни. 👏 Мне очень понравилось объяснение про АЧХ, нигде не видел и даже не задумывался о таком: График АЧХ можно представить как участок спектрограммы, который мы вырезали в виде узкой области, повернули и смотрим на него с торца. И наоборот, спектрограмму можно представить в виде пакета отдельных АЧХ, стоящих друг за другом и показывающих динамику фонограммы во времени. Пробуйте, экспериментируйте и узнавайте новое! Источник ➡️ Хабр Немыкин.Продакшн - Java/Kotlin developer #фурье
2 недели назад
БАКАЛАВРСКАЯ ВКР 🧑‍🎓 Принял решение обнародовать свою бакалаврскую выпускную квалификационную работу на тему "Разработка автоматизированного электропривода экспериментального ленточного конвейера". Писал работу при наставничестве крутой кафедры Электроэнергетики и электротехники лучшего Белгородского государственного технологического университета им. В.Г. Шухова. 🤩 Особую благодарность выражаю своему научному руководителю, кандидату технических наук, доценту кафедры Солдатенкову Алексею Сергеевичу за поддержку и помощь в написании ВКР, а так же Лимарову Александру Игоревичу за поддержку идеи и помощь в сборке лабораторного стенда. Солдатенков А.С. один из лучших преподавателей, именно благодаря ему я заинтересовался программированием, хоть и было оно на C++. Так же выражаю благодарность всей кафедре и преподавателям, в том числе заведующему кафедры Белоусову Александру Владимировичу, ибо никто другой так искренне не любит науку и инженерное дело, как он. 🫰 И, в дополнение, говорю спасибо своему одногруппнику, Гилёву Ивану, ибо с ним на период всей учебы мы были особо близки, жаль, что разошлись как-то особо даже не попрощавшись. А так же Удовиченко Владиславу, за его поддержку, помощь и товарищество, он хороший специалист и достиг больших успехов в своей области. Все, кто дошли до конца в общем-то молодцы, но выделить хочу так же Медведева Бориса и Танчука Максима. Горжусь своей работой и считаю ее действительно хорошей, написанной с душой. Вкратце, разработал лабораторный стенд. Подобрал электропривод, выбрал преобразователь частоты, собрал конвейер и написал для управления установкой Телеграм бота на Java. Хоть и принято для низкоуровневых вещей писать на C, я оказался первопроходцем. Благо на GitHub🖥 нашел библиотеку для управления COM-портами и реализации протокола Modbus. Защитил работу 23.06.2023 года на "отлично". Диплом получил 07.07.2023, цвет настроения диплома синий. 🥲 Это было хорошее время, рад, что окончил именно эту кафедру. Хоть и на 2 курсе я понял, что мне ближе быть разработчиком. 📖 Так же, на Хабр опубликовал статью про разработку стенда и приложения. Пояснительная записка, презентация, видео стенда и объяснения к фото в комментариях 👇 Немыкин.Продакшн - Java/Kotlin developer
3 недели назад
🔥 Дебют на Хабре: от электротехники до программирования! 📖 Хочу поделиться с вами важным событием — своей первой статьей на Хабре! 🎉 Несмотря на то, что тема статьи больше про электротехнику, чем про программирование, кому-то, возможно, будет интересно. Ведь в современном мире эти две области часто пересекаются, создавая что-то действительно крутое. 📝 О чем статья? В своей бакалаврской выпускной квалификационной работе я разработал лабораторный стенд ленточного конвейера с возможностью удаленного управления, об этом и пойдет речь. ⚡️ Что внутри? - Разработка электропривода конвейера. - Реализация системы управления, которая позволяет контролировать работу конвейера через сеть. - Интеграция аппаратной части (электродвигатели, датчики) с программной (интерфейс управления). Этот проект стал для меня не только важным этапом обучения, но и шагом в мир инженерных решений, где электротехника встречается с программированием. 🔗 Ссылка на статью 💬 Буду рад услышать ваши мысли, вопросы или замечания! Если вам интересна тема электротехники и автоматизации, обязательно оставьте комментарий. Немыкин.Продакшн - Java/Kotlin developer #Хабр #Электротехника #Автоматизация
3 недели назад
🍕 Как упростить работу с DTO в Java: советы для чистого и надёжного кода Современные приложения становятся всё более распределёнными, а это значит, что мы всё чаще взаимодействуем с внешними сервисами. Для обработки данных из этих сервисов мы часто используем DTO — объекты, которые преобразуют JSON в удобный формат. Однако работа с DTO может стать головной болью, если не следовать нескольким простым принципам. 1️⃣ Сделайте DTO неизменяемыми Неизменяемость — это мощный инструмент, который упрощает отладку и делает код более предсказуемым. Если объект нельзя изменить после создания, вы автоматически избавляетесь от множества потенциальных ошибок. Пример неизменяемого DTO: public final class PizzaDto { private final String name; private final List<String> ingredients; public PizzaDto(String name, List<String> ingredients) { this.name = name; this.ingredients = List.copyOf(ingredients); // Защитная копия } public String getName() { return name; } public List<String> getIngredients() { return ingredients; // Возвращаем неизменяемый список } } Почему это важно? - Никто не сможет случайно изменить данные внутри DTO. - Упрощается отладка: если объект неизменяем, проблема может быть только в его создании. - Код становится более безопасным и понятным. 💡 Совет: Начиная с Java 16, можно использовать записи (records) для ещё более лаконичного создания неизменяемых классов: public record PizzaDto(String name, List<String> ingredients) {} 2️⃣ Избегайте null-значений Null-значения — это источник бесконечных NullPointerException. Чтобы избежать этой проблемы, инициализируйте поля пустыми значениями, если входные данные отсутствуют. Пример: public PizzaDto(String name, List<String> ingredients) { this.name = name != null ? name : ""; this.ingredients = ingredients != null ? List.copyOf(ingredients) : List.of(); } Теперь клиентский код может спокойно работать с DTO, не проверяя каждое поле на null. 3️⃣ Используйте конструкторы (Builders) Для сложных DTO ручная инициализация может занимать много строк кода. Чтобы упростить процесс, используйте шаблон Builder. Пример: PizzaDto pizza = new PizzaDtoBuilder() .setName("Реджина") .setIngredients(List.of("сыр", "томаты", "грибы")) .build(); Builder делает код более читаемым и позволяет легко добавлять новые параметры без изменения существующего кода. 💡 Совет: Используйте плагины для IDE (например, IntelliJ IDEA), чтобы автоматически генерировать Builder'ы или Lombok. 4️⃣ Настройте сериализацию с Jackson Jackson — самая популярная библиотека для работы с JSON в Java. Чтобы использовать её с неизменяемыми DTO, добавьте аннотации: public final class PizzaDto { private final String name; private final List<String> ingredients; @JsonCreator public PizzaDto( @JsonProperty("name") String name, @JsonProperty("ingredients") List<String> ingredients) { this.name = name; this.ingredients = List.copyOf(ingredients); } // Геттеры... } Если вы предпочитаете Gson или Moshi, они могут работать с неизменяемыми DTO без дополнительных аннотаций, но будьте осторожны: эти библиотеки используют рефлексию, что может привести к неожиданным результатам. 5️⃣ Почему это работает? Неизменяемые DTO имеют множество преимуществ: - Безопасность: Данные остаются неизменными, что снижает риск ошибок. - Читаемость: Код становится проще для понимания и поддержки. - Отладка: Легче находить ошибки, так как состояние объекта не меняется после создания. Как сказал Джошуа Блох в своей книге "Эффективная Java": «Неизменяемые классы проще в разработке, реализации и использовании, чем изменяемые. Они менее подвержены ошибкам и более безопасны.» 🎯 Заключение Следуя этим простым принципам, вы сможете улучшить качество своего кода: 1. Сделайте DTO неизменяемыми. 2. Избегайте null-значений. 3. Используйте Builder для удобной инициализации. 4. Настройте сериализацию с помощью Jackson. Источник ➡️ Medium Немыкин.Продакшн - Java/Kotlin developer #Java #DTO #Programming
3 недели назад