Pull to refresh
3
0.3
Send message

Как я создавал онлайн игру «нарды» (часть четвертая). Сервер

Level of difficultyEasy
Reading time6 min
Views1.1K

Всем привет!

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

Читать далее
Total votes 2: ↑2 and ↓0+6
Comments0

Как я создавал онлайн игру «нарды» (часть пятая). Сервер

Level of difficultyEasy
Reading time6 min
Views777

Всем привет!

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

Читать далее
Rating0
Comments0

Профилирование Java-приложений: от HeapDump до Grafana

Level of difficultyMedium
Reading time7 min
Views5.1K

Добрый день дорогой читатель. Сегодня я дам тебе несколько советов для поиска и анализа проблем в твоем Java приложении. Мы разберем такие вещи как: HeapDump, ThreadDump, VisualVM, Grafana, HikariPool, Prometheus и Garbage Collector.

Читать далее
Total votes 13: ↑10 and ↓3+10
Comments9

Как я создавал онлайн игру «нарды» (часть первая)

Level of difficultyMedium
Reading time6 min
Views2.1K

Всем привет!

Время от времени меня сильно тянет на разработку игр и я даже публиковал на любимом хабре пару статей (здесь и тут) о том, что из этого получается. И вот в очередной раз, когда желание пересилило все остальное я почему-то решил, что могу сделать "простую" игру "длинные нарды" за несколько дней. Если вам интересно что из этого вышло, то усаживайтесь поудобнее, сегодня я расскажу о том, как все начиналось.

Читать далее
Total votes 6: ↑5 and ↓1+5
Comments6

PostgreSQL 16. Снимки данных. Часть 4

Level of difficultyMedium
Reading time5 min
Views2.9K

Данная статья является продолжением: PostgreSQL 16. Страницы и версии строк. Часть 3.

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

Читать далее
Total votes 10: ↑10 and ↓0+12
Comments0

Туннель IPv6 через IPv4 для обхода замедления Youtube на уровне роутера

Level of difficultyEasy
Reading time3 min
Views160K

Туннели IPv6 через IPv4 помогают получить доступ к сайтам и сервисам, которые используют новый протокол IPv6, даже если у вас старый IP‑адрес версии 4 (IPv4). Чтобы его настроить, нужно зарегистрироваться на сайте провайдера, который предоставляет такую услугу (его еще называют туннельный брокер), и использует технологию 6in4. После регистрации вы получите все необходимые данные для подключения.

Одно из преимуществ данного способа заключается в том, что не потребуется настраивать что-то дополнительно на других устройствах в локальной сети, не сломается работа на AndroidTV итд.

Туннель работает только с белым IP‑адресом (некоторые провайдеры выдают его бесплатно, некоторые за определённую сумму в месяц).

Читать далее
Total votes 45: ↑44 and ↓1+54
Comments115

ElasticSearch — поиск последовательности в тексте

Level of difficultyMedium
Reading time21 min
Views4.1K

Привет! На связи Аркадий из Т-Банка, мы по прежнему делаем TQM, и в этой статье покажу, как мы решили задачу с поиском последовательностей в тексте коммуникаций. Это работает как на простых цепочках из словосочетаний по порядку, так и на сложных кейсах — со временем фразы, каналом «клиент — оператор». Мы по прежнему работаем с ElasticSearch, оставляя возможность “накрутить” на поиск по тексту такие вещи как RAG, LLM и другие модные технологии. 

Несколько ограничений для сегодняшней задачи:

- Нелинейное возрастание сложности запроса при увеличении количества фраз. Поэтому предел у нас 4.

- Шаг тайминга мы выбрали 5 секунд. После каждой фразы ставим метку времени или несколько меток, если фраза заняла больше 5 секунд. Если сделать шаг слишком мелким это позволит искать более точно, но замусорит наше поле метками времени. Кажется, это тот момент когда лучше заранее договориться о требованиях.

А теперь к самому интересному. Добро пожаловать под кат!

Читать далее
Total votes 10: ↑10 and ↓0+13
Comments1

Изучение случайности в JavaScript

Level of difficultyEasy
Reading time6 min
Views3.4K

В моем посте о создании утилиты цветовой палитры в Alpine.js случайность играла большую роль: каждый образец генерировался как композиция случайно выбранных значений Hue (0..360), Saturation (0..100) и Lightness (0..100). Когда я создавал эту демонстрацию, я наткнулся на Web Crypto API. Обычно при генерации случайных значений я использую метод Math.random(), но в документации MDN упоминается, что Crypto.getRandomValues() более безопасен. В итоге я решил попробовать Crypto (с фоллбэком на модуль Math по мере необходимости). Но это заставило меня задуматься, действительно ли "более безопасный" означает "более случайный" для моего варианта использования.

В чем разница
Total votes 7: ↑7 and ↓0+10
Comments14

Git. Скачем между ветками как древесные лягушки

Level of difficultyEasy
Reading time6 min
Views25K

Статей на тему много, но, видимо, недостаточно: время от времени слышу от коллег (последние 10 лет, в 4-х разных компаниях):

«Не могу пошарить экран с кодом, у меня другая ветка сейчас».

«Не хочу переключать ветку, придется запускать кодогенерацию, у меня сбросятся build-файлы, потом это опять пересобирать!»

«Стаскивать ветку для просмотра ПР? Это же неудобно, надо "стэшить" изменения, ветку переключать».

Читать далее
Total votes 87: ↑87 and ↓0+103
Comments71

PostgreSQL 16. Организация данных. Часть 1

Level of difficultyMedium
Reading time14 min
Views20K

PostgreSQL очень популярная СУБД. Её используют во многих проектах, как новички, так и профессионалы. Однако не все понимают, как именно работает данная система и какое у неё внутренне устройство.

Давайте разберемся вместе на основе книги «PostgreSQL 16 изнутри» и официальной документации!

Читать далее
Total votes 32: ↑31 and ↓1+35
Comments7

Перемещение указателя на смещение в Kafka

Reading time3 min
Views2.9K

В данной статье описывается задача, в которой необходимо слушать сообщения с определенного смещения(offset) в Kafka. Для решения данной задачи потребуется интерфейс ConsumerSeekAware и найти позицию с которой нужно начать слушание. Так же необходимо будет создать механизм перезапуска слушателя сообщений Kafka. В примерах кода используются Java и Spring фреймворк.

Читать далее
Total votes 7: ↑6 and ↓1+7
Comments0

Разбираемся с динамической памятью (кучей) в приложениях Java

Reading time8 min
Views6.9K
Начнём с простого вопроса. В самом ли деле каждый Java-разработчик понимает, как в Java работает память? Одна из обязанностей любого Java-разработчика — гарантировать, что в результате тонкой настройки приложения на Java из него получится выжать такую производительность, какую только возможно. Требуется время, чтобы научиться управлять памятью в Java и понять этот процесс, это касается всех, кто имеет дело с Java. В этой статье попробую объяснить, как овладеть этими умениями.
Читать дальше →
Total votes 13: ↑12 and ↓1+18
Comments6

kafka dev-cluster in docker

Level of difficultyEasy
Reading time11 min
Views6.4K

Привет! В этой статье мы развернем dev-cluster kafka последней версии (3.7 на момент написания статьи), без использования zookeeper. Также в нашей сборке будет web-ui и все для мониторинга. В представленной конфигурации настроены SASL, SSL, ACL.

В чем полезность статьи? В статье представлен готовый docker-compose.yml для использования, который будет вам полезен если вы не сильно искушены в вопросах администрирования kafka и docker-compose, но уже хотелось бы начать заниматься разработкой, используя кластер kafka. Беглый поиск в интернет не дал результата в виде готового docker-compose.yml для конкретно такой конфигурации, которая потребовалась нам, поэтому было решено выложить полученный результат.

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

Читать далее
Total votes 8: ↑7 and ↓1+8
Comments5

Неожиданные последствия запуска PostgreSQL в Docker: замедление запросов в 100 раз

Level of difficultyMedium
Reading time4 min
Views44K

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

Читать далее
Total votes 95: ↑84 and ↓11+93
Comments57

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

Level of difficultyEasy
Reading time20 min
Views16K

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

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments15

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

Level of difficultyEasy
Reading time10 min
Views24K

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

Читать далее
Total votes 20: ↑18 and ↓2+20
Comments21

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

Level of difficultyMedium
Reading time9 min
Views11K

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

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments0

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

Level of difficultyEasy
Reading time6 min
Views4K

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

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

Читать далее
Total votes 17: ↑12 and ↓5+9
Comments8

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

Level of difficultyMedium
Reading time17 min
Views13K

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

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

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

Читать далее
Total votes 13: ↑10 and ↓3+9
Comments15
1
23 ...

Information

Rating
2,128-th
Registered
Activity