Search
Write a publication
Pull to refresh
6
0
Олег Серых @seryh

Fullstack Web Developer

Send message

Аннотации в Java и их обработка

Reading time15 min
Views54K

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

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

Читать далее

Spring AOP: как работает проксирование

Reading time6 min
Views59K

Четкое разделение бизнес логики с другими сквозными задачами является обязательным условием для создания чистого и читабельного кода. И говоря о сквозных задачах я имею ввиду управление транзакциями, безопасность и прочие важные задачи, которые хоть и не относятся к бизнес логике напрямую - но оказывают существенное влияние на работу приложения в целом. В случае "жесткого связывания" основной логики и подобных задач - мы можем получить кучу проблем в случае ошибки последних. АОП, собственно, и нацелено на решение подобных задач.

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

Spring имеет свою собственную структуру АОП, которая концептуально проста для понимания и является отличным решением большинства проблем в корпоративных Java-приложениях. В этой статье мы собираемся рассмотреть магию Spring АОП - со всеми его достоинствами и недостатками. Если у вас вообще нет никакого понимания за данную тему - рекомендую почитать данный материал.

Читать далее

Обзор возможностей библиотеки Apache Curator для Apache Zookeeper

Reading time12 min
Views17K

По долгу работы мне приходится сталкиваться с проектированием и разработкой распределенных приложений. Такие приложения часто используют различные средства межпроцессного взаимодействия для организации взаимодействия компонентов. Особые сложности возникают в процессе реализации алгоритмов, обрабатывающих связанные данные распределенно. Для поддержки таких задач используются специализированные системы распределенной координации. Самым популярным и широко используемым продуктом является Apache Zookeeper.

Читать дальше →

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

Reading time10 min
Views31K

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

Читать далее

Вышла Java 16

Reading time6 min
Views37K

Вышла 16-я версия платформы Java SE. В этот релиз попало около двух с половиной тысяч закрытых задач и 17 JEP'ов. Изменения API можно посмотреть здесь. Release notes здесь.


Уже сейчас доступны для скачивания дистрибутивы Oracle JDK и OpenJDK.


Читать дальше →

Кастомная (де) сериализация даты и времени в Spring

Reading time4 min
Views8.8K

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

1)      При получении запроса привести дату к серверному времени и сохранить в базу данных в таком виде

2)      В ответ возвращать дату и время с указанием серверного часового пояса

Чтобы избавиться от лишних вызовов методов для преобразования даты, Spring предоставляет удобный механизм для написания кастомной сериализации и десериализации.

Читать далее

Что не так с Лиспом?

Reading time8 min
Views18K

Я попытаюсь проанализировать некоторые часто повторяющиеся критические замечания в адрес Lisp, чтобы пролить свет на этот вопрос и на то, почему его так часто задают.

Позвольте мне начать с пары слов для тех кто не в курсе. Lisp - это семейство языков, включая Common Lisp, Emacs Lisp и несколько диалектов, которые...

Так что же не так с лиспом?

Разбор протокола World of Tanks

Reading time3 min
Views16K

Автор не несет ответственности за материал предоставленный в данной статье, все что вы прочитали или увидели - мне приснилось. Инструменты написанные в процессе анализа протокола никогда не будут выпущены в публичный доступ.

Инструменты которые нам понадобятся1. x64 dbg2. Cutter (Radare2)3. C++4. WireShark

Начало (Протокол)Начинать анализ я начал с определения протокола который использует игра для коммуникации (TCP / UDP).

Открываем procmon (делаем попытку авторизации в клиенте игры).

Читать далее

Установка discourse в Ubuntu 16.04

Reading time3 min
Views2K
В статье рассматриваются установка discourse в среде разработки, затем в среде эксплуатации, запуск sidekiq и начальная настройка (кроме настройки электронной почты, необходимой для активации аккаутнов по е-мэйл и рассылки уведомлений, а также https).
Читать дальше →

Kafka как хранилище данных: реальный пример от Twitter

Reading time6 min
Views13K
Привет, Хабр!

Нас давно занимала тема использования Apache Kafka в качестве хранилища данных, рассмотренная с теоретической точки зрения, например, здесь. Тем интереснее предложить вашему вниманию перевод материала из блога Twitter (оригинал — декабрь 2020), в котором описан нетрадиционный вариант использования Kafka в качестве базы данных для обработки и воспроизведения событий. Надеемся, статья будет интересна и натолкнет вас на свежие мысли и решения при работе с Kafka.
Читать дальше →

7 вещей, которые нужно проработать, прежде чем запускать OpenShift в продакшн

Reading time11 min
Views4.5K
Взрывной рост использования контейнеров на предприятиях впечатляет. Контейнеры идеально совпали с ожиданиями и потребностями тех, кто хочет снизить затраты, расширить свои технические возможности и продвинуться вперед по пути agile и devops. Контейнерная революция открывает новые возможности и для тех, кто подзадержался с обновлением ИТ-систем. Контейнеры и Kubernetes – это абсолютно и принципиально новый способ управления приложениями и ИТ-инфраструктурой.



В отличие от предыдущего и столь же революционного перехода от «голого железа» к виртуальным машинам, контейнеры кардинально сокращают избыточность программного стека и меняют саму природу управления операционными системами на предприятии.
Читать дальше: 7 вещей, которые нужно проработать, прежде чем запускать OpenShift в продакшн

Как мы случайно сожгли $72 000 за два часа в Google Cloud Platform и чуть не обанкротились

Reading time10 min
Views101K


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

В марте 2020 года, когда COVID поразил весь мир, наш стартап Milkie Way тоже сильно пострадал и почти закрылся. Мы сожгли 72 000 долларов во время изучения и внутреннего тестирования Cloud Run с Firebase в течение нескольких часов.
Читать дальше →

Wireguard для Kubernetes и удобные GUI

Reading time4 min
Views25K

Can I just once again state my love for [WireGuard] and hope it gets merged soon? Maybe the code isn't perfect, but I've skimmed it, and compared to the horrors that are OpenVPN and IPSec, it's a work of art.

Linus Torvalds, on the Linux Kernel Mailing List

Уверен, что многие уже слышали про Wireguard. Некоторые даже щупали вживую. Мне он вполне понравился в продакшене как по производительности, так и по простоте настройки. Да, там нет миллиона загадочных конфигураций на все случаи жизни как у OpenVPN и XFRM+StrongSwan в IPSEC VPN. Он прост и лаконичен как в коде, так и в конфигах. Жирным и неповоротливым он станет еще нескоро. Короче, такой позитивный вариант сценария «сжечь легаси и написать все как надо».

Я решил не писать очередной гайд «как я поставил Wireguard», а поделиться некоторыми полезными утилитами. Некоторые с очень удачным, на мой вкус GUI, что уместно для сервисов со множеством пользователей. Разберем использование этого VPN для связи между нодами в разных кластерах Kubernetes, несколько web-GUI для генерации и пару полезных ресурсов.

Шифруем по-русски, или отечественные криптоалгоритмы

Reading time7 min
Views43K

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

Читать далее

Быстрое разворачивание Minecraft-сервера

Reading time6 min
Views30K

Играя в Minecraft в одиночку, всегда настаёт тот момент, когда хочется добавить к себе друзей в свой мир. Построить с ними вместе различные строения, отправиться в путешествие, вместе убить дракона или открыть новые миры. И тогда встаёт логичный вопрос: как создать свой сервер? До сего момента для игрищ использовал только сервера linux. А тут решил попробовать готовый сервер из Маркетплейса на Windows без графического интерфейса (чистый PowerShell). Мне кажется были собраны все грабли, которые только можно, но из битвы с Windows Server я вышел победителем.
Читать дальше →

PostgreSQL Antipatterns: работаем с отрезками в «кровавом энтерпрайзе»

Reading time6 min
Views12K
В различных бизнес-приложениях регулярно возникает необходимость решить какую-либо задачу с отрезками/интервалами. Самое сложное в них — понять, что это именно одна из таких задач.


Как правило, они отчаянно маскируются, и даже у нас в СБИС их найти можно в абсолютно разных сферах управления предприятием: контроле рабочего времени, оценке загрузки линий АТС или даже в бухгалтерском учете.
«Отличие enterprise [решения] от всего остального — он всегда идёт от запросов бизнеса и решает какую-то бизнес-задачу.» [src]
Вот и давайте посмотрим, какие именно прикладные задачи и как можно решить с помощью PostgreSQL и сократить время анализа данных с нескольких секунд на бизнес-логике до десятков миллисекунд, умея эффективно применять следующие алгоритмы непосредственно внутри SQL-запроса:

  • поиск отрезков, пересекающих точку/интервал
  • слияние отрезков по максимальному перекрытию
  • подсчет количества отрезков в каждой точке
Читать дальше →

Что .jar сторонний нам готовил…

Reading time9 min
Views16K

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

Читать дальше →

Знакомство с Debezium — CDC для Apache Kafka

Reading time18 min
Views132K


В своей работе я часто сталкиваюсь с новыми техническими решениями/программными продуктами, информации о которых в русскоязычном интернете довольно мало. Этой статьей постараюсь восполнить один такой пробел примером из своей недавней практики, когда потребовалось настроить отправку CDC-событий из двух популярных СУБД (PostgreSQL и MongoDB) в кластер Kafka при помощи Debezium. Надеюсь, эта обзорная статья, появившаяся по итогам проделанной работы, окажется полезной и другим.

Что за Debezium и вообще CDC?


Debezium — представитель категории программного обеспечения CDC (Capture Data Change), а если точнее — это набор коннекторов для различных СУБД, совместимых с фреймворком Apache Kafka Connect.
Читать дальше →

Ведение журнала в Spring Boot

Reading time8 min
Views43K

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

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

Читать далее

Как Греф с программистами боролся

Reading time6 min
Views235K

Наверное многие помнят скандальное заявление Грефа о том, что Сбербанку программисты не нужны: "У нас огромное количество программистов, с которыми мы боремся". Давайте проанализируем откуда такие заявления взялись и чем все это закончилось.


Читать дальше →

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity