Pull to refresh
6
0
Иван GiB$ON @gibson_dev

Пользователь

Send message

Оптимизация игр на Unity: проверенный в деле план

Reading time10 min
Views38K

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

Читать далее

Java.  The composite pattern on Game Server

Reading time4 min
Views3.4K

Паттерн Компоновщик - так же известен как Дерево, Composite.

Суть паттерна

Компоновщик - это шаблон структурного проектирования, который позволяет объединять объекты в древовидные структуры, а затем работать с этими структурами, как если бы они были отдельными объектами.

Проблема

Использование шаблона Composite имеет смысл только тогда, когда базовая модель вашего приложения может быть представлена в виде дерева.

Например, представьте, что у вас есть два типа объектов: конфигурация награды и конфигурация сундука. Сундук может содержать несколько Наград, а также несколько Сундуков меньшего размера. Эти маленькие сундуки также могут содержать некоторые награды или даже сундуки меньшего размера и т. Д.

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

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

Читать далее о паттерне Компановщик

Как я получил 4 оффера в FAANG в Европе или из Воронежа в Лондон

Reading time16 min
Views45K


Очередная история успеха после череды неудач. Расскажу, чего мне стоило получить офферы от Facebook*, Google, Amazon, JP Morgan в Европе, как я готовился, сколько собесов зафейлил перед тем, как удача повернулась ко мне правильной стороной.


TL;DR. Послал сотни резюме. Прорешал около 100 задач на Leetcode. Прочел книжку по архитектуре (не той, которая про дома, а той, которая system design). Прошел 9 интервью. Получил 4 оффера. Принял 1. Жил, пока что, не очень долго, но, вполне себе, счастливо в Лондоне.
Читать дальше →

Траблшутинг в буддийском монастыре

Reading time17 min
Views5.5K

Виктор Живицкий на момент описанных здесь событий имел двадцатилетний опыт в сетевой инженерии. У него была жена, дочь и рабочая виза в Таиланде. Когда в 2015 году в центре Бангкока прогремел взрыв, он потерял и жену и дочь. Он не смог вернуться к работе, начал забывать спать, есть, и стал находить себя среди незнакомых мест, дорогу к которым кветиапин и венлафаксин исправно вычёркивали из памяти. Когда и медстраховка исчерпала себя, Виктор был в том же состоянии, в которое его погрузила весть о гибели жены и дочери: он крепко отсутствовал в себе.

Жизнь не щадит слабых и сломленных. Виктор быстро скатился до бродяжничества. Иногда он появлялся у кофейни Eiah Sae 益生 на улице Phat Sai, у таицев знаменитой тем, что однажды её посетил член королевской семьи (о чём есть фотография в огромной позолоченной рамке прямо над кассой), у китайцев же известной за лучший кофе в Бангкоке. По обеим из этих причин эту кофейню посещал Д., который во время пандемии организует фонд помощи соотечественникам и поможет множеству людей, застрявшим в Таиланде. 

В один из дней Д. заметил Виктора и подошёл к нему. 

Эта встреча заронила зерно выздоровления в больную душу Виктора и тысячу бат в его карман на дорогу в буддийский монастырь. Так началось его путешествие, о котором ваш покорный слуга узнает по нескольким траблшутинг-постам на форуме Huawei. С Виктором удастся связаться, получить от него эту историю и опубликовать здесь с его согласия, не изменив ни слова. Эта история о том, как знания после десятилетий практики стали частью самого человек, и, может быть, помогли выстоять ему в трагедии, из-за которой лучшая часть его души была вырвана безвозвратно.

Читать далее

Функциональные  опции в Go: реализация шаблона опций в Golang

Reading time4 min
Views10K

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

Читать далее

Почему графику в видеоиграх по-прежнему так сложно создавать?

Reading time28 min
Views34K

Введение


В этом посте будут рассмотрены трудности и аспекты производства, которые нужно учитывать при создании новых методик и алгоритмов рендеринга/графики, особенно в контексте прикладных исследований рендеринга реального времени. Я буду рассказывать о своём личном опыте работы над Witcher 2, Assassin’s Creed 4: Black Flag, Far Cry 4 и God of War.

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

Я слышал вопросы типа «почему эта великолепная исследовательская методика X не используется в продакшене?» и от геймеров, и от коллег из научных кругов. На то всегда бывают очень веские причины!

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

Я вспоминаю об этой теме ещё и каждый раз, когда слышу дискуссии о том, что «фотограмметрия, трассировка лучей, нейронный рендеринг, [вставить любую другую новую тему] станет универсальным решением для рендеринга и заменит всё остальное!». Спойлер: этого не случится (по крайней мере, в ближайшее время).
Читать дальше →

Протокол безопасности транспортного уровня (TLS), версия 1.2 (RFC 5246) (Часть 1)

Reading time26 min
Views18K

На настоящий момент (август 2021 года) автором данного перевода не было найдено хоть сколько-нибудь приемлемого перевода стандарта протокола TLS версии 1.2 на русский язык. Единственный найденный перевод находится сайте protocols.ru и, во-первых, доступен только в кэше поисковика, а во-вторых, при всем уважению к его переводчику, не устраивает автора по причине неудобочитаемости и трудности восприятия. И хотя на сайте efim360.ru находится качественно выполненный перевод стандарта протокола TLS версии 1.3, многие места этого перевода могут вызвать некоторые трудности для понимания, особенно у начинающего изучать криптографию читателя. Для устранения таких «белых пятен»   и было задумано осуществить перевод стандарта протокола TLS версии 1.2 на русский язык.     

Читать далее

Про многопоточность 1. Thread

Reading time13 min
Views46K

Что такое эта ваша многопоточность и как с ней жить? Попробуем разобраться что за зверь pthread, зачем нужен RunLoop, какие примитивы синхронизации доступны в iOS разработке, а так же, какие проблемы за собой влечет многопоточность.

Читать далее

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

Reading time6 min
Views41K

В прошлый раз я рассказывал про минимальный набор компонентов, который может быть включён в устройство для поддержки базовых функций USB-C. Но бывают ситуации, когда этих базовых возможностей недостаточно – например, нужно использовать несколько профилей напряжения, чтобы блок питания от одного устройства подходил к другому. Или же есть необходимость подстроить сами профили. Или просто нужна бОльшая мощность питания (в случае с USB-C доступный максимум – 15 Вт). Во всех этих ситуациях на помощь придёт стандарт Power Delivery. Он, например, используется в линейке зарядных устройств Apple – профили с бОльшим напряжением доставляют бОльшую мощность к устройству и позволяют его быстро заряжать. В нашем смарт-экране SberPortal есть узлы, которые требуют значительной мощности питания – прежде всего это высокопроизводительная система на кристалле (SoС) и акустика. Один только звук требует около 30 Вт. Поэтому при разработке устройства пришлось усложнить систему питания и реализовать Power Delivery. Об этом стандарте и пойдёт ниже речь.

Также разберёмся в его особенностях и посмотрим, как со временем изменился способ передачи данных в стандарте. А ещё я расскажу и покажу с помощью анализатора протокола, что происходит при установлении подключения в устройствах, на примере ноутбука с Power Delivery. Затем посмотрим, как мы реализовали PD в нашем смарт-экране SberPortal.

Читать далее

Приёмы ускорения кода на JS и других языках: подборка от разработчика поиска Яндекса

Reading time17 min
Views70K
Привет! Меня зовут Виктор Хомяков, в Яндексе я работаю над скоростью страниц поиска. Однажды мне в голову пришла идея обобщить свой опыт и систематизировать приёмы ускорения работы кода на JavaScript. То, что получилось в итоге, собрано в этом материале.

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


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

С++ на практике

Reading time11 min
Views47K


Все мы знаем, что С++ — мощный язык, у которого много сторонников. Но чем могут быть недовольны даже сторонники? Где сталкиваешься с неудобствами и чем они вызваны? Почему в примитивном приложении могут вылезти неожиданные сложности и чего не хватает в стандартной библиотеке? А главное, что можно сделать для улучшения ситуации?


Антон Полухин (antoshkka), состоящий в комитете по стандартизации C++ и работающий в «Яндекс.Такси», рассказал обо всём этом в докладе «C++ на практике». Сам доклад появился ещё в 2019-м, и с выходом C++20 что-то изменилось, но главные тезисы и вывод остались актуальны. Поэтому теперь, готовя новую конференцию C++ Russia 2021, мы решили сделать для Хабра пост на основе этого доклада. Под катом — и текст, и видеозапись. Далее повествование идёт от лица Антона.

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

7 фразовых глаголов с take и 30 их значений. На первый взгляд все просто, но на второй — нет

Reading time7 min
Views25K

В одном из прошлых материалов мы рассказали вам о фразовых глаголах, в которых есть слово get. Статья была принята очень хорошо, поэтому мы решили сделать еще одну. На этот раз с глаголом take.

Мы насчитали минимум 65 фразовых глаголов и их значений с take — и не исключено, что есть и еще. Но в этой статье приведем примеры наиболее распространенных, которые носители языка часто используют в быту. Естественно, с кучей примеров. Поехали.

Читать далее

Необычный дуалбут: ноутбук с «двойным дном»

Reading time15 min
Views86K

Не так давно на Habr Q&A я наткнулся на интересный вопрос — как сделать, чтобы два жестких диска не видели друг друга? Чтобы вирус, попав на одну систему, никоим образом не мог заразить другую. В ответах предлагали достаточно стандартные способы — использовать полнодисковое шифрование, отключить диск в диспетчере устройств и даже поставить переключатель на питание. Но что если взглянуть на задачу совершенно с другого угла и сделать всё средствами самого HDD? Да-да, сегодня мы снова погружаемся в пучины модификации прошивок и реверс-инжиниринга!
Узнать подробности

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

Reading time13 min
Views60K
image

Казалось бы, установить имплант — это операция проще некуда, просто взять и вкрутить винт в челюсть. Потом вы начинаете считать структуру затрат и становится понятно, что нужен рентгенолог, хирург, два ассистента — и время этих людей стоит денег, особенно хирурга, который десять лет учился и практиковался, и у него перед вами ответственность, включая возможную уголовную, за ошибки. Нужен операционный бокс, нужны стерильные халаты, дезинфекция, нужно вложиться в оборудование, нужны расходники. Причём всё это должно быть сертифицировано. В аптеке хлоргексидин стоит 11 рублей, а сертифицированный для стоматологии аналог будет стоить на пару порядков дороже. Практический пример — гель с ортофосфорной кислотой, который просто копеечный в производстве. Но когда его четыре года сертифицируют, один шприц с ним начинает стоить от 1000 рублей. Причём его ещё надо найти, потому что некоторые материалы в Россию просто не поставляют, потому что у производителя за пару лет продаж не получится отбить даже сертификацию. На российские импланты адекватные люди не соглашаются, а те, которые будут поддерживаться через 20 лет европейские, — у них эта гарантия входит в цену.

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

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

Multithreading

Reading time77 min
Views228K

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

Читать далее

Профилирование Node.js. Доклад Яндекса

Reading time18 min
Views9.1K
Полтора года назад я выступил на FrontendConf и посвятил 40 минут профилированию. Перечисленные приемы и инструменты по-прежнему актуальны — сегодня публикую видео с подробным конспектом. Доклад расскажет, что такое профилирование, научит локализовывать потенциальные утечки памяти, а также немного углубит ваше понимание инструмента DevTools.

— Всем привет. Меня зовут Артём Несмиянов, я fullstack-разработчик Яндекс.Практикума. И, как видите, сегодня я хочу рассказать о профилировании Node.js, хотя это не совсем фронтендерская тема. Но сейчас очень много приложений используют фронтбэк, где есть свой server-side rendering, где нужно это все отдавать клиенту, и фронтендеру часто приходится взаимодействовать с Node.js. Иногда происходят вещи, которые могут повлиять на ваш сервер, положить его, перегрузить и так далее. С этим надо бороться. Я хочу показать, какие методы использовали мы. Это скорее введение в профилирование Node.js.
Читать дальше →

Основы Unity + Mirror

Reading time16 min
Views60K

UPD. Актуализировал на момент 26.11.2022.

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

Читать далее

Разгоняем JS-парсер с помощью WebAssembly (часть 1: базовые возможности)

Reading time7 min
Views5K

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

Такой код на тестовом нормализованном наборе показывает время порядка 48ms на 6.3MB или около 130MB/s, что примерно в 11 раз быстрее наивного варианта со .split.

Но всегда остается вопрос: "А еще быстрее - можно?"

Чтобы приблизиться к возможностям "железа", но по-прежнему остаться в инфраструктуре JavaScript, сегодня мы научимся решать эту задачу с использованием WebAssembly и SIMD-инструкций, постаравшись по пути споткнуться обо все подводные камни.

Читать далее

Manticore Search — форк Sphinx: отчёт за 3 года

Reading time12 min
Views19K

В мае 2017 мы, команда Manticore Software, сделали форк Sphinxsearch, который назвали Manticore Search. Ниже вы найдёте краткий отчёт о проделанной работе за три с половиной года, прошедших с момента форка.

Читать далее

Возможно, вам не нужен Rust, чтобы ускорить ваш JS

Reading time32 min
Views29K

Несколько недель назад я обнаружил пост "Окисляем Source Maps с Rust и WebAssembly"
распространяющийся по Твиттеру и расказывающий о выигрыше в производительности от замены обычного JavaScript в библиотеке source-map на Rust, скомпилированный в WebAssembly.


Пост возбудил мой интерес не потому, что я большой фанат Rust или WASM, скорее потому что я всегда интересовался фичами языков и оптимизациями, которых не хватает Javascript для того чтобы достичь аналогичной производительности.


Так что я скачал библиотеку с GitHub и отправился в небольшое исследование производительности, которое я документирую здесь практически дословно.

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

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity