Pull to refresh
51
0
Андрей Кравчук@prefrontalCortex

Software Engineer

Send message

Поломанная дверь Гордона Фримена

Level of difficultyEasy
Reading time5 min
Reach and readers23K

Недавнее обсуждение опасности дверей в геймдеве напомнило мне о баге, вызванном дверью из игры, о которой вы, возможно слышали — Half Life 2. Усаживайтесь поудобнее, мы начинаем.

Когда-то я работал в Valve над проектами виртуальной реальности. Это было в 2013 году, примерно когда появился Oculus DK1. Мы с Джо Людвигом решили, что лучше всего можно понять, как будет работать VR в контексте реальной игры, портировав в неё реальную игру.

Мы выбрали Team Fortress 2 (причина этого — отдельная история, которой я не хочу здесь касаться). В TF2 использовался движок Source 1, и так получилось, что двумя другими играми Valve, тоже построенными на этом движке, были Half Life 2 и Portal 1. Поэтому побочным эффектом стало то, что они тоже будут работать в VR.

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

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

Читать далее

Во имя богов Рандома. Настраиваем вероятность исходов в играх

Reading time8 min
Reach and readers6.3K

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

Читать далее

Геймдев на Lisp. Часть 2: подземелья и интерфейсы

Level of difficultyMedium
Reading time66 min
Reach and readers2.2K

В первой части мы познакомились с архитектурным паттерном Entity-Component-System, часто используемым в разработке игр, и металингвистической парадигмой программирования, заключающейся в построении и использовании собственных языков, наиболее полно и точно описывающих предметную область создаваемой программы. На сей раз мы используем эти приёмы для создания небольшой, но полноценной игры на Common Lisp в жанре dungeon crawler (рус. надмозг. "подземное ползание") с пользовательским интерфейсом и рассмотрим на её примере системный дизайн реального игрового приложения с использованием ECS.

TL;DR: готовую к запуску демонстрацию (бинарники под все распространённые ОС) и её исходный код можно найти на github.

Читать далее

Насколько быстр Javascript? Симулируем 20 миллионов частиц

Level of difficultyEasy
Reading time23 min
Reach and readers18K

Я бросил себе вызов: симулировать 1000000 (миллион) частиц на чистом Javascript на телефоне, используя только CPU и добившись 60 FPS.

Поехали.

Задача не особо сложна, если выполнять всю работу на GPU, но правило гласит, что нужно пользоваться только CPU, при этом работая на JS, так что никакого WASM.

Читать далее

Баланс стоимости предметов в RPG с помощью линейной алгебры

Level of difficultyMedium
Reading time4 min
Reach and readers8.5K

Я обожаю RPG, меня привлекают их богатый сюжет, стратегическая глубина и захватывающие миры. Также меня восхищают data-driven подходы к разработке. Они не только улучшают логическую структуру игровых механик, но и гарантируют, что каждый элемент игры сбалансирован и вносит значимый вклад в опыт игрока. Баланс - один из самых сложных аспектов разработки игр, поскольку он требует тщательного внимания к взаимодействию игровых механик. Сегодня я расскажу о том, как использовать линейную алгебру для баланса стоимости предметов в игре.

Читать далее

Мои эксперименты с искусственной жизнью

Level of difficultyEasy
Reading time8 min
Reach and readers7.6K

Сегодня я расскажу про свои эксперименты с симуляцией эволюции.

В мире, разделенном на квадратные клетки живут боты. Боты могут заниматься фотосинтезом, смотреть в 8 направлениях вокруг себя, перемещаться, атаковать друг друга и размножаться делением.

За то, что бот будет делать в текущий ход, отвечает геном. При размножении есть шанс 1/4, что новый бот мутирует. При мутации его геном немного изменяется. Если мутация была положительной - бот может оставить больше потомства, таким образом полезные мутации будут приживаться, а вредные - отсеиваться.

Читать далее

ТЗ высокой четкости

Reading time6 min
Reach and readers59K
Я аналитик, который пишет непонятные ТЗ. Т.е. я пытаюсь писать очень понятные ТЗ. В целом, я слушаю клиентов, потом я слушаю разработчиков, потом голоса в своей голове. Зачем я говорю с ними? В общем, получается то, что получается. Ну вы поняли.



Написать идеальное ТЗ проще простого:

1. Договорился о минимальном этапе (на 2-4 недели).
2. Описал юзер-стори по шагам.
3. Составил список экранов будущей системы.
4. Прописал названия методов API и форматы данных.
5. Запросил тестовый контент и составил таблицы с тестовыми данными.
6. Сформулировал из всего этого цели и задачи.
7. Согласовал план работ и выставил задачи в таск-менеджер.

Но не тут-то было! Давайте я расскажу, как все происходит в реальной жизни, а также поделюсь своими лайфхаками, как я с этим справляюсь.
Читать дальше →

Древняя и новая история цистерцианских цифр

Reading time5 min
Reach and readers9.6K

Арабские цифры являются одной из наиболее долгоживущих и универсальных знаковых систем, распространённых во всём современном мире. Они до сих пор сосуществуют с римскими, конкуренцию у которых окончательно выиграли в Европе к XIV веку, поскольку римские цифры исключительно неудобны для арифметики и алгебры. Принципиально арифметика на римских цифрах возможна, она даже была однажды рассмотрена в статье из журнала «Наука и жизнь» за 1970 год. Именно в XIII-XIV веках римские цифры перестали удовлетворять потребностям бурно растущей европейской цивилизации (в римских цифрах даже отсутствовал феномен «0»). Им на смену пришли заимствованные индо-арабские цифры. Также как раз в период XIII-XIV века в Европе пытались изобрести систему цифр, которая либо устраняла бы недостатки римской, либо сочетала достоинства арабской и римской. Один из наиболее причудливых опытов такого рода — это цистерцианские цифры, о которых будет рассказано под катом   

Читать далее

Иногда лучше делать, а не планировать

Level of difficultyEasy
Reading time7 min
Reach and readers50K

Пожилой рабочий на строительстве «Эмпайр-стейт-билдинг» в 1930 г., источник. Вся стройка от подготовки стройплощадки до торжественного запуска лифтов заняла 410 дней

В последнее время часто приходится слышать про новую модель управления — избыток административных кадров, не имеющих отношения к основному производству. К сожалению, это особенно ярко проявляется в IT-индустрии, где количество менеджеров среднего звена сильно превышает стандартные показатели. Например, в компании Google доля менеджеров уже достигла 15% от общей численности персонала, то есть по одному менеджеру на пять-шесть работников. Это заметно превышает средний показатель в сфере услуг 1 к 15.

Избыток менеджеров в компании ведёт к негативным последствиям:

  • засилье KPI с последующей деградацией продукта, которое по менеджерской логике должно увеличивать DAU;
  • деградация корпоративной культуры из-за офисных интриг и карьеризма;
  • снижение продуктивности разработчиков из-за бесконечных совещаний, созвонов, отчётности и использования ПО для «повышения эффективности» (таск-трекеры, тайм-трекеры, календари и проч.);
  • цифровое истощение и выгорание сотрудников.

Это стандартные издержки от переизбытка менеджеров. Иногда даже единственный менеджер приносит больше вреда, чем пользы.
Читать дальше →

Зачем? И весь ужас удара бритвой по Оккаму

Level of difficultyEasy
Reading time11 min
Reach and readers29K

Самое страшное слово для инноватора или очень уж упёртого студента, который проходит практику у вас в компании: «Зачем?»

Знаете почему? Потому что в 80% случаев ответа вам на этот вопрос не дадут. Давайте разберёмся, причём здесь Оккам и что ему от нас нужно.

Давай, приступай

Дзэн в искусстве программирования

Level of difficultyEasy
Reading time7 min
Reach and readers2.2K

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

Читать далее

Хороший ретрай, плохой ретрай, или История одного падения

Level of difficultyMedium
Reading time17 min
Reach and readers83K

Порой простое и очевидное решение может потянуть за собой хвост проблем в будущем. Например, добавление ретраев.

Меня зовут Денис Исаев, и я работаю в Яндекс Go. Сегодня я поделюсь опытом решения проблем с отказоустойчивостью из-за ретраев. Основано на реальных инцидентах в системе из 800 микросервисов.

Этот пост — продолжение вымышленных историй о разработчике Васе, который несколько лет назад разбирался с идемпотентностью в распределённых системах. Теперь перед ним новые задачи — получится ли справиться с ними в этот раз? Давайте узнаем.

Читать далее

В {n} раз быстрее Си

Level of difficultyHard
Reading time13 min
Reach and readers41K

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

Эта статья публиковалась на главной странице HackerNews, и к её обсуждению вы можете присоединиться здесь.
Читать дальше →

YAML из Ада

Reading time9 min
Reach and readers102K

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

Данный пост является нытьём и он более субъективен, чем мои обычные статьи.
Читать дальше →

Cloudflare положил наш сайт после того, как мы отказались выплатить 120 000 $ в течение 24 часов

Reading time9 min
Reach and readers102K
Я работаю системным оператором в довольно крупном онлайн-казино (мне представляется, что материал статьи может быть полезен читателям вне зависимости от их позиции касательно этичности казино в целом – упоминаю об этом просто для контекста). У нас около четырех миллионов активных пользователей в месяц. С Cloudflare мы охотно сотрудничаем с 2018 года по тарифу «Бизнес», который стоит 250 $ в месяц и предоставляет неплохие возможности, включая безлимитный трафик.

Нужно признать, 250 $ — невеликие деньги за те объемы трафика, которые мы прогоняли через Cloudflare. В основном мы используем Cloudflare для CDN (кэшируем весь свой статический контент) и для защиты от DDOS-атак – с этими задачами сервис хорошо справляется. Работать с ним просто, и обычно ни о чем не приходится особенно задумываться.

Я читал несколько статей на Hacker News, где рассказывалось, как в какой-то момент Cloudflare связывается с компаниями и начинает агрессивно навязывать корпоративный тариф на персональных условиях. Но я не ожидал, что всё будет настолько плохо.
Читать дальше →

Что нужно знать, чтобы успешно пройти System Design Interview

Reading time16 min
Reach and readers69K

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

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

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

Читать далее

Сложнейшая проблема компьютерных наук: центрирование

Level of difficultyMedium
Reading time7 min
Reach and readers44K

Заявляю: «Мы, как цивилизация, разучились использовать центрирование». Ну то есть мы, конечно, знаем, как это делать — очень просто:

display: flex;
justify-content: center; /* Горизонтальное центрирование */
align-items: center; /* Вертикальное центрирование */

Не спрашивайте, почему вам нужно запомнить четыре слова вместо просто горизонтальное/вертикальное; всё равно лучше, чем было до этого.

Ещё можно использовать сетку:

display: grid;
justify-items: center; /* Горизонтальное центрирование */
align-items: center; /* Вертикальное центрирование */

Также не спрашивайте, почему выражение justify-content стало justify-items.
Читать дальше →

Я скучаю по механикам из старых игр

Reading time13 min
Reach and readers79K

За время существования индустрии разработки игр формул разных механик, способных развлечь нас, придумали не одну сотню. Что-то умерло засветившись в паре игр, что-то ушло со временем, какие-то существуют до сих пор. Есть и такие, которые не просто выжили, но стали мейнстримом, хотя только портят нервы игрокам. Игровой дизайн большинства старых игр, от второго фолыча до первого FarCry и пятью активными перками, пусть и не был вершиной искусства - затягивал не хуже современных песочниц с миллионом активностей. Редкую игру захочется пройти второй раз, а как вспомню, что на прохождение можно потратить под сотню и больше часов - думаю, а оно мне действительно было надо? Можно же было заняться чем-то более интересным. Я знаю, чем закончился второй фолыч, знаю это уже четвертый раз, но каждый раз игра удивляет меня чем-то новым. А вот нового "Аватара" бросил на половине, слишком много всего и все недоделанное, и прозрачные стены... просто бич игры. И тут вопрос, чего-то не хватает в этой раздутой, перекачанной сотней механик игре? Только задумайтесь - в аватаре больше сотни основных механик, которые влияют на окружение. Может в играх что-то потерялось? Хотя "потерялось" - звучит странно - за столько лет индустрия только создала просто море всего нового. Статья ориентирована на "побурчать", так что не ждите каких-то великих секретов и тонкостей мастерства.

Раньше и флешки квадратнее были...

Экзокосмонавтика и точки Лагранжа или держитесь подальше от суперземель

Reading time9 min
Reach and readers22K

Романтическая научная фантастика XX века, а тем более космооперы, по-видимому, почти не учитывали фактор существенного отличия гравитации у разных планет, на которые приходится эпизодически высаживаться или колонизировать их. Как я уже писал в некоторых публикациях, в особенности, «Суперземля как иллюзия» и «Гикеаны, потомки нептунов», мы в настоящее время настолько одержимы идеей, что среди экзопланет найдётся множество жизнепригодных или даже обитаемых, что на месте мининептуна всегда готовы увидеть суперземлю. Впрочем, такое заблуждение характерно не только для нашего времени. Ещё в начале XX века Венера считалась «юной сестрой» Земли (так как предполагалось, что, чем ближе планета к Солнцу, тем позже она сформировалась), что там может царить тропическая эра, подобная мезозою, шуметь экзотические леса, а обширные океаны из-за сильной минерализации могут быть наполнены «зельтерской водой». Климат Венеры и её парниковый эффект – тема для отдельной публикации, и пока ограничусь ссылкой на это исследование 2019 года, в котором выдвигается гипотеза, что бесконтрольный парниковый эффект на Венере существует лишь чуть более 700 миллионов лет, а до этого там могли существовать вполне комфортные для жизни условия. А в этой статье попробуем обсудить феномен гравитационных колодцев и их опасность при сближении с суперземлями. Отдельно поблагодарю уважаемого @ilmarinen за его интереснейшие публикации о гравитационных манёврах в ныне закрытом корпоративном блоге «Маклауд», под впечатлением от которых я взялся писать эту статью.     

Читать далее

Лучшие практики для надёжной работы с RabbitMQ

Level of difficultyEasy
Reading time13 min
Reach and readers56K

Привет, Хабр! Я Женя, архитектор интеграционной платформы в Точке, отвечаю за асинхронный обмен сообщениями между внутренними сервисами, за ESB и за брокеры сообщений.

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

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

Следуй за белым кроликом
1
23 ...

Information

Rating
6,625-th
Location
Подгорица, Подгорица, Черногория
Works in
Date of birth
Registered
Activity

Specialization

Десктоп разработчик, Фулстек разработчик
Старший
From 5,000 €
Lisp
Clojure
Unix
Linux
Docker