Pull to refresh
0
0
Oleh Kurpiak @OlehKurpiak

Java Developer

Send message

Как происходит генерация мира Minecraft

Reading time21 min
Views58K
image

Задумывались ли вы когда-нибудь, сколько на нашей планете песчинок? По грубым оценкам, более 7 квинтиллионов! Это 7 с 18 нулями. И всё-таки это даже меньше половины количества уникальных миров в Minecraft. Как же Minecraft и другим похожим играм удаётся создавать такие сложные, красивые, однако полностью процедурные миры? В этой статье я расскажу, как игра генерирует свои миры, от самой высокой горы до самой глубокой пещеры.

Часть 1: процедурная генерация


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

Однако первой игрой с процедурно сгенерированным миром является «Elite», первая версия которой вышла для компьютера BBC Micro в 1984 году. Это прапрадед относительно новой «Elite: Dangerous», выпущенной в 2014 году.


Автоматическая генерация новых миров может казаться привлекательным способом ленивого создания бесконечного контента для игры. Однако на самом деле всё наоборот! Чтобы научить машину тому, как выглядит хороший уровень… нужно быть очень хорошим программистом и дизайнером уровней.

Контент должен быть достаточно разнообразным, чтобы выглядеть свежим, но не настолько разнообразным, чтобы казаться атипичным. И необходимо создавать миры, на которые не просто интересно смотреть, но которые обеспечивают справедливую с точки зрения игрока сложность.
Читать дальше →
Total votes 67: ↑67 and ↓0+67
Comments17

Чек-лист по работе с издателями для инди-разработчика

Reading time4 min
Views5.7K

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

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

Мультиплеер в Unreal Engine: Подключение и Хостинг

Reading time11 min
Views20K

Привет Хабр!

В этой статье я хочу раскрыть механику создания онлайн сессии и подключения к ней. Все выполнено в с использованием Online Subsystem для возможного расширения вашей игры в контексте Steam, Origin, Play Station Store и т.д

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

Целостность данных в микросервисной архитектуре — как её обеспечить без распределенных транзакций и жёсткой связности

Reading time9 min
Views63K

Всем привет. Как вы, возможно, знаете, раньше я все больше писал и рассказывал про хранилища, Vertica, хранилища больших данных и прочие аналитические вещи. Сейчас в область моей ответственности упали и все остальные базы, не только аналитические, но и OLTP (PostgreSQL), и NOSQL (MongoDB, Redis, Tarantool).


Эта ситуация позволила мне взглянуть на организацию, имеющую несколько баз данных, как на организацию, имеющую одну распределенную гетерогенную (разнородную) базу. Единую распределенную гетерогенную базу, состоящую из кучи PostgreSQL, Redis-ов и Монг… И, возможно, из одной-двух баз Vertica.


Работа этой единой распределенной базы порождает кучу интересных задач. Прежде всего, с точки зрения бизнеса важно, чтобы с данными, движущимися по такой базе, все было нормально. Я специально не использую здесь термин целостность, consistency, т.к. термин это сложный, и в разных нюансах рассмотрения СУБД (ACID и CAP теорема) он имеет разный смысл.


Ситуация с распределенной базой обостряется, если компания пытается перейти на микросервисную архитектуру. Под катом я рассказываю, как обеспечить целостность данных в микросервисной архитектуре без распределенных транзакций и жесткой связности. (А в самом конце объясняю, почему выбрал для статьи такую иллюстрацию).


Total votes 77: ↑76 and ↓1+75
Comments73

Оркестрируемая сага или как построить бизнес-транзакции в сервисах с паттерном database per service

Reading time16 min
Views33K

Привет! Меня зовут Константин Евтеев, я работаю в Авито руководителем юнита DBA. Наша команда развивает системы хранения данных Авито, помогает в выборе или выдаче баз данных и сопутствующей инфраструктуры, поддерживает Service Level Objective для серверов баз данных, а еще мы отвечаем за эффективность использования ресурсов и мониторинг, консультируем по проектированию, а возможно и разрабатываем микросервисы, сильно завязанные на системы хранения, или сервисы для развития платформы в контексте хранилищ.


Я хочу рассказать, как мы решили один из вызовов микросервисной архитектуры — проведение бизнес-транзакций в инфраструктуре сервисов, построенных с помощью паттерна Database per service. С докладом на эту тему я выступал на конференции Highload++ Siberia 2018.


image
Узнать про саги
Total votes 44: ↑44 and ↓0+44
Comments19

Доводим распределённые действия до конца с использованием простейшего паттерна Saga

Reading time11 min
Views22K

Привет! Меня зовут Иван, я занимаюсь бэкенд-разработкой в Ozon: пишу микросервисы на Go для личного кабинета продавца. В прошлом году мы запустили новый процесс регистрации продавцов, в котором задействовано сразу несколько микросервисов. В нём стало больше шагов, при этом каждый из них выполняется в разных микросервисах. Поэтому мы задались вопросом: «А что будет, если один из шагов упадёт?».


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


image

Читать дальше →
Total votes 47: ↑44 and ↓3+53
Comments25

Инструкция по применению OpenSearch: первые шаги по установке и настройке

Reading time6 min
Views30K


OpenSearch является продуктом реакции на недавнее изменение условий лицензирования Elasticsearch и прекращения работы в качестве open-source платформы. AWS, Logz.io и ряд других компаний-партнеров в течение нескольких месяцев работали над созданием не просто функциональной замены Elasticsearch, а самостоятельным и перспективным проектом.


После разделения Elasticsearch и Kibana 7.10.2, версия RC1 (1.0.00 OpenSearch и OpenSearch, выпущенных 7 июня 2021 г. RC1 не считается полностью готовой к эксплуатации, но она функциональна и включает в себя все прежние Open Distro плагины (наряду с несколькими новыми), Docker-образы, команды Linux tars, оповещения и возможность визуализации диаграмм Ганта (что изначально не входило в ELK стек).


Инструкции по установке и настройке OpenSearch на протяжении какого-то времени останутся без изменений. Поэтому данный порядок действий поможет с легкостью приступить к установке и настройке.

Читать дальше →
Total votes 2: ↑2 and ↓0+2
Comments4

Попытка создать java Framework для телеграм ботов

Reading time8 min
Views5.1K

У меня иногда появлялось желаение делать ботов для телеграм, так мой основной язык Java - выбор не велик и он меня не устраивает. Каждый раз нужно было придумывать какие-то схемы обработки приходящих апдейтов и мучаться с этим всем. Либо был другой выбор - всякие непонятные Abilities / Replies, по которым нет информации нигде, а еще они используют внутри свою странную БД.

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

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments2

Музыка для игр: где брать треки инди-разработчикам

Reading time3 min
Views15K

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

Сегодня мы расскажем о трех ресурсах, где можно найти royalty free треки для своих игровых экспериментов — IndieGameMusic, Unminus Music и cchound.

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

Самодельный миниатюрный лазерный гравер на Arduino Uno

Reading time4 min
Views36K

Полагаю, что проект, о котором я хочу рассказать, будет интересен всем, кто занимается электроникой. А именно, речь идёт о миниатюрном лазерном гравере, с помощью которого можно наносить изображения на картон, на дерево, на виниловые наклейки и на прочие подобные материалы. Идею проекта я почерпнул из этого руководства, сделав кое-что по-своему.
Как сделать гравер?
Total votes 41: ↑38 and ↓3+42
Comments21

Это норма — 5: различные способы создания карт нормалей

Reading time6 min
Views11K
image


Существует множество способов создания и применения карт нормалей. Давайте рассмотрим известные мне способы их изготовления.

Не существует единственного правильного решения для каждой ситуации, я лично пользуюсь несколькими техниками, в зависимости от проекта, количества времени, требуемой производительности и т.д., и чаще всего они взаимозаменяемы. Я попытаюсь объяснить достоинства и недостатки каждого способа, но во многих случаях они будут очень схожими.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments0

Экзамен 1z0-819 Oracle Certified Professional: Java 11 Developer — заметки о сдаче

Reading time5 min
Views25K


В начале октября Oracle упростил получение сертификации по Java — вместо двух экзаменов теперь нужно сдать один, при том что цена за экзамен не изменилась. Кому интересен уровень задач и больше подробностей про экзамен прошу под кат — опишу почему решил сдать, как готовился, какие вопросы были и собственно какие выводы сделал.
Читать дальше →
Total votes 3: ↑2 and ↓1+3
Comments3

Стажёр Вася и его истории об идемпотентности API

Reading time11 min
Views235K

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


Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс.Такси. Сегодня я поделюсь с читателями Хабра описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте. Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API. Так будет нагляднее и полезнее. Поехали.


image

Читать дальше →
Total votes 219: ↑216 and ↓3+213
Comments163

Unreal Engine 4 Mobile. Сборка Android проекта + DLC

Reading time10 min
Views24K

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

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

Контроль версий в базах данных — Сравнение Liquibase и Flyway

Reading time6 min
Views13K

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

Тем не менее, в связи с ростом популярности аджайл методологии в последние годы и востребованностью непрерывной интеграции и развертывания, мы больше не можем ограничивать применение CI/CD только к коду приложения, оставив SQL позади.

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

Ниже будут рассмотрены сходства и различия ныне хорошо известных продуктов Flyway и Liquibase.

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

Использование Decision Table в JBoss Drools

Reading time12 min
Views7.8K

Правила. Мы знаем это слово с самого детства. Сначала родители учат нас, как нужно правильно поступать, потом мы приходим в школу, где учителя диктуют свои порядки. В университете мы вновь сталкиваемся с правилами, которые для нас устанавливают преподаватели и деканат. По мере взросления мы начинаем следовать законам, которые разработаны государством. Что общего у всех этих правил? То, что они выверены годами, десятилетиями, а некоторые даже и поколениями. Представьте, какой была бы наша жизнь, если бы правила менялись часто: каждую неделю или каждый день!

Читать далее
Total votes 5: ↑4 and ↓1+7
Comments2

RC-лодка на ESP8266 NodeMCU

Reading time9 min
Views18K


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


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


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


Осторожно! Под катом много картинок!
Total votes 66: ↑63 and ↓3+86
Comments50

Создание оптимизированных образов Docker для приложения Spring Boot

Reading time11 min
Views22K

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

В этой статье рассматриваются различные способы контейнеризации приложения Spring Boot:

- создание образа Docker с помощью файла Docker,

- создание образа OCI из исходного кода с помощью Cloud-Native Buildpack,

- оптимизация изображения во время выполнения путем разделения частей JAR на разные уровни с помощью многоуровневых инструментов.

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

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

Reading time8 min
Views37K

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

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

Читать далее
Total votes 7: ↑4 and ↓3+5
Comments2

Знакомимся с Event Sourcing. Часть 2

Reading time5 min
Views6.5K
Перевод статьи подготовлен в преддверии старта курса «Java Developer. Professional».
Читать первую часть.





Особенности реализации Event Sourcing


С технической точки зрения для Event Sourcing требуется только реализация записи событий в журнал и чтения из журнала.

В простейшем случае в качестве хранилища событий может использоваться файл, в котором в каждой строке записывается отдельное событие, или несколько файлов, когда каждое событие сохраняется в отдельный файл. Но как правило, в больших системах, требовательных к параллелизму и масштабируемости, используются более надежные способы хранения.
Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments0
1
23 ...

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity