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

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

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

Используем Elasticsearch вместе со Spring Boot

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

Всем привет! Это моя первая статья на Хабре и в ней я хочу рассказать о том, как мы можем интегрировать Elasticsearch в наше Spring Boot приложение. Этот проект предназначен для ознакомления с технологиями и служит скорее шпаргалкой/пособием или же фундаментом для дальнейшего погружения в тему.

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

Знакомство с SSH

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

Как гласит википедия, «SSH — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов). Схож по функциональности с протоколами Telnet и rlogin, но, в отличие от них, шифрует весь трафик, включая и передаваемые пароли. SSH допускает выбор различных алгоритмов шифрования. SSH-клиенты и SSH-серверы доступны для большинства сетевых операционных систем». Когда в первый раз знакомишься с ним, то, скорее всего, он представляется как средство для доступа к удалённому серверу. В первую очередь, так оно и есть. Однако его возможности намного шире.

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

Инженер на минималках: установка и настройка ClickHouse

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

Базы данных — один из важнейших инструментов в арсенале аналитика. А ClickHouse — это высокопроизводительная аналитическая СУБД, которая заточена на то, чтобы переваривать огромные массивы данных. Поэтому полезно будет разобраться, как самостоятельно установить ClickHouse в Yandex Cloud или на VDS-сервере, как создать пользователей и активировать веб-интерфейс и доступ по сети. Этим и займемся в статье.

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

Чеклист, как не превратиться в пепел

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

Около года назад я очень больно столкнулся со своей тёмной стороной – я выгорел. Повезло, моё состояние было не в «пепел», но позднее, отойдя от произошедшего, я решил накидать план действий, чтобы в такое не попадать. Возможно, этот список тоже окажется кому-то полезным. Он был написан в профилактических целях (уж очень не хочется снова попасть в свой персональный адок), и не способен вас вытащить из выгорания, если вы уже в нём. Список носит рекомендательный характер. К нему нужно возвращаться периодически. Забивать не надо. Также полезно, если уже выгорел и приходишь в себя.

Плейлист такой:

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

Использование Postgres и JSONB для хранения товаров, характеристик и цен

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

Всем привет! Меня зовут Александр, в данное время я на фрилансе занимаюсь проектом по созданию очередного маркетплейса. В процессе работы мы столкнулись с далеко не новой проблемой организации хранения информации о товарах, имеющих различные характеристики и цену, зависящую от характеристик. На нашем проекте применяется принцип CQRS: запись осуществляется в Postgres, чтение происходит из OpenSearch, а данные между ними перемещаются по шине, реализованной на Kafka. Такой подход обусловил использование реляционной БД для решения несвойственной ей задачи.

Чтобы увидеть, почему эта задача не нак проста, как кажется с первого взгляда, представим, что в нашем каталоге есть футболки мужские всего с двумя атрибутами: цвет и размер. Мы хотим хранить товар с названием "Футболка Junior Developer", она представлена в синем, красном и зеленом цветах, и каждый цвет доступен в нескольких размерах. Добавляя немного сложности, представим, что цена конкретной футболки также варьируется в зависимости от цвета и размера. Как представить эту сущность в реляционной базе данных, с учетом того, что продавец футболки может в какой-то момент добавить новые атрибуты для своего товара, например, габариты упаковки для отправки (длина, ширина, высота)?

С одной стороны, можно использовать подход: Entity-Attribute-Value. Он позволяет гибко настраивать связи между сущностями, их атрибутами и значениями, сохраняя возможность динамического добавления новых атрибутов сущности. Однако у такого подхода есть свои недостатки. На них останавливаться не буду - в статье: "Замена EAV на JSONB в PostgreSQL" они приведены, также там есть сравнение по производительности и памяти EAV и JSONB.

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

Как работать с Kafka-consumer в Spring-проектах

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

Эта статья сборник небольших рекомендаций как работать с Kafka-consumer в Spring основанных на личном опыте.

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

Миграция микросервисной архитектуры на API Gateway

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

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

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

Как загружать классы в Java 8 и Java 9+?

Уровень сложности Сложный
Время на прочтение 24 мин
Количество просмотров 5.9K

Привет, Хабр! Я разработчик в Институте Системного Программирования РАН, занимаюсь разработкой статического анализатора Svace. Недавно я столкнулся с задачей самостоятельной загрузки классов в JVM, что оказалось непросто, потому что в проекте мы используем модули Java.

Модули появились в Java, начиная с версии 9. Прошло уже несколько лет, но если попытаться найти актуальную информацию о связи модулей и загрузчиков классов, её придётся собирать по крупицам. В статье я поделюсь своим опытом изучения вопроса самостоятельной (и автоматической) загрузки классов с помощью кастомного загрузчика, а также разберу примеры, описывающие большинство случаев загрузки, постараюсь их объяснить.

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

Распределённые транзакции

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

На собеседованиях на позицию middle/senior разработчика часто задают вопросы по распределенным транзакциям в микросервисной архитектуре.

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

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

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

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

Пишем простую интеграцию с GitHub используя feign и jsonschema2pojo maven plugin

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

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

Для примера мы будем использовать интеграцию с API GitHub и привычные Spring аннотации для описания нашего feign клиента.

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

Учимся бесплатно деплоить Java (и не только) приложения (Docker, CircleCI, Google Cloud)

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

Всех приветствую. В последнее время все чаще задумывался о том какую бы еще полезную статью написать. Параллельно этому постоянно видел в интернетах рекламу о "крутых" курсах в IT, обещают сделать из вас Java, Python и какого угодно разработчика за полгода/год, и ладно с ним, допустим за год они чему-то вас обучат и, возможно, где-то вы попадете на бесплатную стажировку (что еще тоже под воросом, учитывая нынешний рынок). Но когда рекламируют "крутые курсы DevOps'ов", я уже начинаю задаваться вопросом, как можно стать ДевОпсом, не имея опыта программирования, не опробовав самому весь цикл разработки на хоть каком-то языке, не опробовав различные настройки сборки приложений, не опробовав Линукс, со всеми его утилитами, докер, кубер, git и т.д. в работе, а просто "обучиться" этому в обособленности от всего и ожидать, что тебя куда-то возьмут, а если и возьмут, то к чему-то серьезному подпустят? Ответа на этот вопрос я так и не нашел у себя в голове.

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

Задеплоить
Всего голосов 9: ↑4 и ↓5 -1
Комментарии 19

Как я делал первую маркировку рекламы в своём Телеграм-канале (пошаговая инструкция)

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

У меня небольшой авторский канал на 3 000 подписчиков. Рекламу в нём я продаю как самозанятое физическое лицо (эту роль взяла на себя моя жена). Поэтому рассказ будет о маркировке текстового рекламного поста, где заказчик и исполнитель — физические лица. С помощью кабинета ОРД Вконтакте, который пока что бесплатен.

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

Разбираем TLS по байтам. Кто такой этот HTTPS?

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


Подключение к сайту бывает защищённым, а бывает нет — это надо знать всем детям. Только мало детей знают, что это значит и как работает.

Я, изучая веб-разработку, узнал об HTTP. Разобраться в нём несложно: в каждой статье о протоколе множество наглядных примеров запросов и ответов. Затем узнал о схеме HTTPS, с которой всё не так наглядно. В ней используется то ли SSL, то ли TLS, и что-то где-то шифруется, и зачем-то нужны какие-то сертификаты. Короче, всё расплывалось в тумане: где пример ответа, запроса, сертификата, как его создать, зачем он нужен и почему гайд по созданию http-сервера уже написал каждый школьник, а https-сервер — недоступная для начинающих разработчиков роскошь?

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

Во второй обсудим, как это дело реализуется в протоколе TLS и разберём формат TLS-пакетов по байтам. Статьи рассчитаны в первую очередь на изучающих веб-разработку, знакомых с HTTP и жаждущих осознать, кто такое https. Но материал актуален для любых применений TLS, будь то веб или не веб.
Читать дальше →
Всего голосов 62: ↑61 и ↓1 +60
Комментарии 21

Spring-потрошитель: жизненный цикл Spring Framework

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

Ни для кого не секрет, что Spring Framework один из самых популярных фреймворков для приложений на языке Java. Он интегрировал в себя самые полезные и актуальные технологии, такие как i18n, JPA, MVC, JMS, Cloud и т.п.

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

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

Основы полнотекстового поиска в ElasticSearch. Часть вторая

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

Это вторая статья из цикла. В первой части я рассказывал про самые базовые понятия Elasticsearch. В этом же посте разберем устройство анализа текста и немного пощупаем полнотекстовый поиск.

Несколько слов про анализ текста

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

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

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

Запускаем IDEA и CLion на Android

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

На современных Android телефонах и планшетах стоит отличное железо - многоядерные CPU с несколькими гигабайтами памяти. Этого всего вполне хватит для запуска даже таких тяжеловесных программ как IDEA и CLion. И сейчас я вам расскажу как это сделать.

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

USB HID устройства на службе пентестера. Часть 1

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

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

Представьте, вы подключаете флешку, USB-hub или любое другое USB устройство в порт, и... на нашей машине начинается выполнение произвольного кода. Подключенное устройство по факту оказалось клавиатурой, которая от имени пользователя запустила cmd.exe и стала набирать какие-то команды, в результате чего на машине стали происходить различные странные вещи.

Всему виной USB HID – Human Interface Device, устройства для взаимодействия с человеком. Примерами таких устройств являются клавиатура, мышь, игровые контроллеры и т.д. Так вот, наше подозрительное устройство, которое мы подключили смогло перехитрить операционную систему, представившись клавиатурой, хотя на самом деле оно таковой не является. Далее код, зашитый в это устройство начинает «набирать» на машине пользователя различные команды. Таким образом реализуется простейшая USB HID атака.

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

Фундаментальное руководство по пакетам в Java

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

Пакеты в Java появились с самого начала, во времена, когда язык еще назывался Oak. Их описание уже присутствует в его ранних спецификациях.

Java-пакеты реализуют так называемое пространство имен (namespace), позволяющее использовать в проекте файлы с одинаковыми именами. Такой подход существует с давних времен во многих языках.

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

И наконец, с помощью пакетов можно ограничивать доступ (из других пакетов) как целиком к классам, так и к их отдельным элементам.

Об этом и многом другом и пойдет речь в данной статье.

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

Круглосуточная трансляция CCTV IP Камеры на Youtube

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

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

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

Читать далее
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 41

Swipe sidebar — отдельный Typescript сервис и обработка touch событий на Vue

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

Приветствую, друзья технологии!

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

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

В этой увлекательной статье мы окунемся в мир свайп-сайдбаров, расскажу, как они работают, как создать свой собственный сервис для свайпов, прикрутим все это дело к Vue + Typescript. Не волнуйтесь, если вы новичок в программировании или разработке, я проведу вас через каждый шаг, чтобы вы могли освоить это волшебство свайпов!

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

Информация

В рейтинге
1 164-й
Зарегистрирован
Активность