Pull to refresh
83
0
Зенкович Андрей @anz

C++ developer

Send message

Как удерживать пользователей в мобильных играх

Level of difficultyEasy
Reading time16 min
Views1.9K

Игры успешно конкурируют за внимание пользователей с соцсетями, новостями и кино. Борьба жесткая — лучшие проекты зарабатывают больше, чем фильмы-блокбастеры. Еще в 2018 году интернет взорвала новость о том, что GTA V заработала более $6 млрд. Для сравнения: фильм «Аватар», самый кассовый за всю историю кино, собрал $2,8 млрд. Сегодня рост игровой индустрии сместился в мобильный гейминг, а смартфоны в период с 2021 по 2026 год станут самой быстрорастущей категорией устройств.

Среди мобильных игр конкуренция не менее жесткая: в одном только Google Play доступно около 370 тысяч проектов. И даже очень талантливо сделанные игры могут легко остаться без внимания, если не увлекут пользователя с первых минут. Этот показатель — удержание игроков — оказывает значительное воздействие на рентабельность инвестиций в разработку и напрямую влияет на успех проекта. Но как удержать пользователей в мобильной игре? И можно ли здесь переборщить? Чтобы получить ответы на эти вопросы, мы расспросили наших партнеров, разработчиков из компании PRISMA.

Читать далее
Total votes 23: ↑20 and ↓3+21
Comments10

Как построить мост между JavaScript и C++ через WASM, или гайд для самых маленьких

Level of difficultyEasy
Reading time11 min
Views5.7K

Всем привет. Сегодня я хочу рассказать об использовании WASM с C++ и разберу, как взаимодействовать с этим всем делом через JavaScript.

Материал предназначен для новичков в данной теме.

Читать далее
Total votes 15: ↑14 and ↓1+16
Comments8

Компилятор за выходные: наконец-то ассемблер

Level of difficultyMedium
Reading time8 min
Views8.2K

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

Ну а когда оно заработает, предлагаю решить задачу: как сэмулировать побитовые операции and-not-xor-or при помощи четырёх арифметических.

Читать далее
Total votes 22: ↑22 and ↓0+27
Comments10

И целых 20 ядер мало

Level of difficultyEasy
Reading time27 min
Views19K

Если вы посмотрите на общую раздутость современного софта, загружаемые 100 гигабайтные игры, ежегодную Nvidia X090 дающую +20% год от года, и 20-ядерные процессоры, то со стороны может показаться, что оптимизация производительности неважно чего, будь то игры или другой софт, казалось бы, утратила свою актуальность. В эпоху безнаказанной производительности аппаратной части можно расплескивать хоть половину этой мощи, и пользователь этого даже не заметит. Это все может и верно, если вы не делаете игру. Почему же тогда на этих двадцати ядрах, фризит и тормозит (хорошо что не вылетает часто) игра выпущенная два года назад?

Почему тормозит я вам не скажу: возможно разработчики, которые делали её (на не самом новом движке, надо сказать) просто делали игру и не задумывались о рядовых игроках, которые сидят на пятилетнем железе, хотя даже пятилетнее железо уделывает приставки текущего поколения. Возможно это другая причина - когда твоя рабочая машина с 64 гибайтами оперативки и 4080 на борту тянет редактор, то беспокоиться об игроках можно начинать после патча первого дня.

При том, что все эти 30 — 60 — 120 — 200 фпс в играх, это чисто маркетинговый показатель, это время с которой движок может создавать фреймы для видеокарты, но движок это не только картинка, есть физика — а она как работала на 30 фпсах 10 лет назад, так и работает. Или звуковая подсистема, так она вообще своей отдельной жизнью живет в своих приоритетных тредах, мы просто кидаем туда меседжи с настройками и номером фрейма, чтобы засинхронизировать это с картинкой. Это сложно, но решаемо, но звук не привязан к картинке.

Налево пойдешь проца не хватит...
Total votes 58: ↑58 and ↓0+76
Comments53

Жёсткое руководство

Level of difficultyEasy
Reading time6 min
Views28K

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

Читать далее
Total votes 63: ↑52 and ↓11+58
Comments100

Краткое сравнение популярных функций измерения времени

Level of difficultyEasy
Reading time11 min
Views5.8K

Какую реальную точность можно ожидать от функции возвращающей время, а сколько времени она выполняется сама? Попытка замерить и сравнить несколько десятков функций, доступных программисту на C++.

Вот что получилось
Total votes 27: ↑27 and ↓0+31
Comments13

Структура объекта в JavaScript движках

Reading time23 min
Views9K

С точки зрения разработчика, объекты в JavaScript довольно гибкие и понятные. Мы можем добавлять, удалять и изменять свойства объекта по своему усмотрению. Однако мало кто задумывается о том, как объекты хранятся в памяти и обрабатываются JS-движками. Могут ли действия разработчика, прямо или косвенно, оказать влияние на производительность и потребление памяти? Попробуем разобраться во всем этом в этой статье.

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

Как создать приложение для чата в реальном времени с помощью React, Node, Socket.io и HarperDB

Reading time27 min
Views6.6K

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

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

Вычисляем баллистические траектории в играх

Reading time7 min
Views31K

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

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

Уравнения движения


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

Существует четыре основных уравнения движения. В статье мы воспользуемся только одним.
Total votes 26: ↑24 and ↓2+25
Comments18

Стандарт C++20: обзор новых возможностей C++. Часть 5 «Корутины»

Reading time9 min
Views18K


25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор основных нововведений Стандарта, рассказывается, как их применять уже сейчас и чем они могут быть полезны.

При подготовке вебинара стояла цель сделать обзор всех ключевых возможностей C++20. Поэтому вебинар получился насыщенным. Он растянулся на почти 2,5 часа. Для вашего удобства мы разбили текст на шесть частей:

  1. Модули и краткая история C++.
  2. Операция «космический корабль».
  3. Концепты.
  4. Ranges.
  5. Корутины.
  6. Другие фичи ядра и стандартной библиотеки. Заключение.

Это пятая часть, кратко рассказывающая о корутинах, или сопрограммах, в современном C++.

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



Но существуют решения, позволяющие усидеть на двух стульях.

Мотивация


Очень часто при программировании возникает задача вернуть из функции не один объект, а целый набор. Есть несколько вариантов решения:
Читать дальше →
Total votes 16: ↑15 and ↓1+21
Comments14

Как загружается процессор Intel x86

Level of difficultyMedium
Reading time9 min
Views21K
image

Когда мы включаем компьютер, он успевает совершить несколько этапов работы ещё до того, как загрузится операционная система. В этом посте будет рассмотрено, как загружается типичный процессор с архитектурой x86. Это очень сложный и многоступенчатый процесс. Здесь его структура будет представлена только в самом общем виде. От загрузочной прошивки зависит, каким именно путём процессор придёт к тому состоянию, в котором сможет загрузить операционную систему. Мы проследим этот процесс на примере опенсорсной загрузочной прошивки coreboot.
Читать дальше →
Total votes 30: ↑28 and ↓2+40
Comments21

Что делает ChatGPT… и почему это работает?

Level of difficultyMedium
Reading time75 min
Views155K

То, что ChatGPT может автоматически генерировать что-то, что хотя бы на первый взгляд похоже на написанный человеком текст, удивительно и неожиданно. Но как он это делает? И почему это работает? Цель этой статьи - дать приблизительное описание того, что происходит внутри ChatGPT, а затем исследовать, почему он может так хорошо справляться с созданием более-менее осмысленного текста. С самого начала я должен сказать, что собираюсь сосредоточиться на общей картине происходящего, и хотя я упомяну некоторые инженерные детали, но не буду глубоко в них вникать. (Примеры в статье применимы как к другим современным "большим языковым моделям" (LLM), так и к ChatGPT).

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

Полное понимание асинхронности в браузере

Reading time24 min
Views110K
Про асинхронность JavaScript написано много статей, документации и книг. Но вся информация сильно распределена по интернету, поэтому сложно быстро и полностью разобраться, что к чему, и составить цельную картину в голове. Не хватает одного исчерпывающего гайда. Именно эту потребность я и хочу закрыть своей статьёй.

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

Создание HTTP-запросов на C++

Reading time7 min
Views33K

В этой статье я покажу вам, как создавать HTTP-запросы к REST-серверу с помощью библиотеки C++ Request, написанной Ху Нгуеном. При её написании мистер Нгуен во многом ориентировался на принципы проектирования из Python Requests, поэтому для тех, кто использовал или знаком с Python Requests, C++ Requests окажется вполне понятна.
Читать дальше →
Total votes 22: ↑19 and ↓3+30
Comments7

Использование потоков WebAssembly из C, C++ и Rust

Reading time12 min
Views9.5K


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

В этой статье вы узнаете, как использовать потоки WebAssembly для переноса многопоточных приложений, написанных на языках C, C++ и Rust, в веб-среду.
Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments20

Как писать читаемый код

Reading time11 min
Views22K

Бывает, что посмотрев на старый код, мы говорим: «Его проще переписать, чем поменять». Печально, если речь идет о нашем собственном коде, с такой любовь написанном несколько лет назад. Head of Developer Relations в Evrone Григорий Петров в своем докладе на TechLead Conf 2020 разобрал проблемы, которые приводят к такой ситуации, и рассказал, как бороться с Software complexity problem.

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

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

Как египетский фараон Аменхотеп основал христианство, и почему оно стало идеальным мемом

Reading time14 min
Views56K

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

Я вырос в абсолютно нерелигиозной семье. Среди моих знакомых и друзей тоже почти не было религиозных людей. Поэтому с самого детства меня мучал один вопрос: почему существуют религии? Заметьте, вопрос состоял не в том, почему люди верят в Бога, хотя это тоже было мне не совсем понятно, а именно почему существуют религии с их нелепыми ритуалами и ограничениями. Раньше я считал их дремучими пережитками прошлых времен, простой картиной мира для глупых людей и удобным способом для властей управлять людьми. Но потом узнавая все больше и больше, я начал сомневаться. Факт, который в дребезги разбивал любые мои аргументы о том, что религия - это плохо: у всех когда-либо существовавших цивилизаций и обществ на нашей планете была своя религия. Это значило, что без религии цивилизация не может существовать. Но я все еще не мог понять почему. И вдруг совсем недавно я нашел простой и логичный ответ на этот вопрос в совершенно неожиданном месте.

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

Читать далее
Total votes 153: ↑97 and ↓56+72
Comments749

Vulkan. Руководство разработчика. Рисуем треугольник

Reading time9 min
Views17K


Я переводчик в компании CG Tribe в Ижевске, и я продолжаю выкладывать перевод руководства к Vulkan API. Ссылка на источник — vulkan-tutorial.com.

Эта публикация посвящена переводу раздела Drawing a triangle, а именно подразделу Setup, главам Base code и Instance.

Содержание
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments2

Производительность TypeScript

Reading time15 min
Views17K

Есть лёгкие способы конфигурирования TypeScript для ускорения компиляции и редактирования. И чем раньше их внедрить, тем лучше. Также есть ещё некоторые популярные подходы к изучению причин медленной компиляции и редактирования, некоторые исправления и распространенные способы помочь TypeScript-команде в расследовании проблем.
Читать дальше →
Total votes 37: ↑37 and ↓0+37
Comments4

Как мы заставили код, портированный с C#, работать с моделью памяти C++

Reading time19 min
Views7.8K
Привет, Хабр. В прошлой статье я рассказывал о том, как мы создали фреймворк для перевода кода C# на (неуправляемый) C++, чтобы выпускать свои библиотеки, изначально разработанные для платформы .Net, и под C++ тоже. В этой статье я расскажу о том, как нам удалось согласовать модели памяти этих двух языков, добившись работы портированного кода в необычном для него окружении.

Я расскажу о том, какие умные указатели мы используем, и почему нам пришлось разработать для них собственные реализации. Я также расскажу о процессе подготовки кода C# к портированию с точки зрения управления временем жизни объектов, о некоторых проблемах, с которыми мы столкнулись, и о специфических способах диагностики, которыми нам приходится пользоваться при работе.
Читать дальше →
Total votes 18: ↑17 and ↓1+21
Comments25

Information

Rating
Does not participate
Location
Омск, Омская обл., Россия
Date of birth
Registered
Activity