Как стать автором
Обновить
5
0
Иван @iushakov

Программист

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

Введение в алгоритм A*

Время на прочтение10 мин
Количество просмотров191K
При разработке игр нам часто нужно находить пути из одной точки в другую. Мы не просто стремимся найти кратчайшее расстояние, нам также нужно учесть и длительность движения. Передвигайте звёздочку (начальную точку) и крестик (конечную точку), чтобы увидеть кратчайший путь. [Прим. пер.: в статьях этого автора всегда много интерактивных вставок, рекомендую сходить в оригинал статьи.]


Для поиска этого пути можно использовать алгоритм поиска по графу, который применим, если карта представляет собой граф. A* часто используется в качестве алгоритма поиска по графу. Поиск в ширину — это простейший из алгоритмов поиска по графу, поэтому давайте начнём с него и постепенно перейдём к A*.

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

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

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

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

Читать далее

Прогнозируем движение беспилотного автомобиля (или как я вышел в тройку лидеров на Yandex Cup 2024)

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

Хабр, привет! Меня зовут Николай Назаров, я работаю аналитиком данных в X5 Tech. Недавно завершился чемпионат по программированию Yandex Cup ML Challenge 2024, в котором я занял второе место в задаче “Self-driving cars: предсказание движения беспилотного автомобиля”. В статье расскажу про задачу и подходы, которые использовал для решения.

Читать далее

Game++. Dancing with allocators

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

C и C++ не имеют встроенной сборки мусора, поэтому разработчик сам решает, как и когда выделять и освобождать память. Мы, конечно, можем покивать в сторону STL, сокрытия аллокаций в контейнерах, но от этого они никуда не денутся. Просто если раньше приходилось думать про выделенный кусок памяти, понимать, как он скажется на времени фрейма, помнить, что его надо удалить (а может, не надо и стоит оставить на следующий фрейм), то теперь всё заворачивается в сахарные контейнеры и разработку в стиле STL-blin-vse-sterpit. STL-то может и стерпит, и даже как-то будет ворочаться, однако не стоит полагаться исключительно на системный аллокатор, бездумно вызывая new или malloc для каждого запроса памяти. Вы ведь понимаете, что std::vector посреди цикла или горячей функции — это плохая идея?

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

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

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

Ребята из HFT, Database, Automotive и Embedded-систем наверняка могут рассказать немало интересных историй про оптимизацию new/delete. Давайте я расскажу немного про разные аллокаторы в играх?

Аллокатор аллокатору аллокации аллоцировал

Файл .DS_Store: Подарок для исследователя и головная боль для владельца сайта

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

.DS_Store (Desktop Services Store) — это скрытый файл, создаваемый операционной системой macOS для хранения метаданных о папке. Он используется Finder для записи таких параметров, как расположение значков, порядок сортировки, выбранный вид (иконки, список и т.д.), фон папки и другие настройки интерфейса.

Читать далее

Путеводитель C++ программиста по неопределённому поведению

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

Путеводитель C\+\+\ программиста по неопределённому поведению


Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.

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

Cговор менеджеров среднего звена одной зелёной и одной красной компании позволяет выводить миллионы со счетов россиян

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

Это история про русского предпринимателя Анатолия, который попал в Нью-Йоркский СИЗО. В жизни бывает всякое. Главное – не забывать родину. А уж родина... Пока Анатолий боролся с ФБР и мерил шагами камеру, наши ребята не растерялись и вывели все деньги с его счетов. А ещё месяц в тюрьме – и домой можно не возвращаться, ведь и дома уже не будет!

Читать далее

Editor Scripting в Unreal Engine: создание утилит для генерации Actor и Data Asset

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

Привет, Хабр! В этой статье я поделюсь своим опытом создания утилит в Unreal Engine, которые автоматизируют процесс генерации Actor Blueprint и Data Asset. Эти утилиты значительно упрощают работу дизайнерам уровней, помогая сократить время на рутинные задачи и минимизировать ошибки, а также могут быть полезны в широком спектре задач, связанных с разработкой.

Мы рассмотрим, как использовать Editor Utility Widgets на практике, чтобы упростить работу в редакторе. Основная часть будет выполнена в Blueprint, но для решения отдельных задач нам также понадобятся функции на C++. Помимо этого, я расскажу о важных аспектах работы с Asset Registry, фабриками ассетов и Subobject Data Subsystem.

Читать далее

Забудьте про зарплаты в 500 тысяч: сколько будут получать разработчики в 2025 году

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

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

Читать далее

Жизнь в Норвегии: 6 лет спустя

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

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

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

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

Читать далее

Game++. String interning

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

«String interning», иногда это называют «пулом строк» — это оптимизация (https://en.wikipedia.org/wiki/String_interning), при которой хранится только одна копия строки, независимо от того, сколько раз программа ссылается на нее. Среди других оптимизаций по работе со строками (SWAR, SIMD-cтроки, immutable strings, StrHash, Rope string, и немного других), часть которых была описана тут, она считается одной из самых полезных оптимизаций в игровых движках, есть правда небольшие недостатки у этого подхода, но экономия памяти и скорость работы при правильной подготовке ресурсов и работе с лихвой их перекрывают.

Вы 100% когда-нибудь писали одну и ту же строку несколько раз в одной программе. Например:pcstr color = "black"; А позже в коде пришлось написать: strcmp(color, "black");Как видите, строковый литерал "black" встречается несколько раз. Означает ли это, что программа содержит две копии строки "black"? Более того, означает ли это, что в оперативную память загружаются две копии этой строки? На оба вопроса ответ — зависит от компилятора и вендора. Благодаря некоторым оптимизациям в сlang (Sony) и GCC, каждая строка-литерал хранится в программе только в одном экземпляре, и, следовательно, только одна копия загружается в оперативную память, поэтому иногда cтановятся возможными разные фокусы.

Просто не копируй это...

Разбор рендеринга в Unity, часть первая: Built-in rendering

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

Наверное, все игровые разработчики знают, как происходит рендеринг. Ну там вертексы, треугольники, растеризация, буфер экрана... Но детали процесса для многих внезапно являются сюрпризом. Например, сколько раз рендерится объект в Unity (да и в других движках) в обычном случае? Один?... Если разработчик отключит все что можно, то да. Но как правило - минимум 2. А может быть и 8 раз. Как так? Добро пожаловать в удивительный мир рендеринга...

Читать далее

Моделируем поверхность Земли в пару строчек

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

Вы когда-нибудь играли в Outer Wilds? Планеты там невероятно красивы. Это собственно стало основной мотивацией создать свою простую модель планеты, используя реальные географические данные о высотах и немножко магии Wolfram Language

Читать далее

Как спроектировать игровую математическую модель, забалансить её и не сдуреть. Разбор на практических кейсах

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

Мы идём от общего к частному. Задаём системе вопросы на самом общем уровне и постепенно углубляемся в детализацию. Если на какой-то вопрос мы не смогли ответить, значит, скорее всего, мы пропустили какой-то более общий вопрос, от которого зависит рассматривая ступень детализации, в этом случае не стесняемся вернуться на один или несколько уровней абстракции назад.

Читать далее

Регуляция сахара в крови

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

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

Читать далее

Эволюция рабочего места одного программиста

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

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

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

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

Читать далее

​Как создать собственное расширение компилятора C++

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


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

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

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

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

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

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

Читать далее

Почему число «1/137» встречается в природе повсюду

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

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

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

Если бы только начальные условия нашей Вселенной были другими, то космическая история разворачивалась бы одинаково в общих чертах, но детали отличались бы между той гипотетической Вселенной и нашей собственной. Что касается фундаментальных констант, то одни изменения были бы глубокими, а другие — едва заметными. В нашей Вселенной константы имеют явно выраженные значения, и именно эта комбинация даёт тот космос, в котором мы живём. Одна из этих фундаментальных констант известна как постоянная тонкой структуры, и её приблизительное значение (1/137) фигурирует в расчётах, имеющих значение для целого ряда явлений, как на субатомном, так и на космическом уровнях.

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

Читать далее

Судный день: топ-10 ошибок в C и C++ проектах за 2024 год

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

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

Читать далее

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность