Как стать автором
Обновить
0
@Zara6502read⁠-⁠only

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

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

«The Legend of Zelda: Breath of the Wild» — идеальный открытый мир, но какой ценой?

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

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

Однако игроки кричат своё «не верю!» и указывают на то, что разработчики давно перестали наполнять свои открытые миры интересным контентом и привязывать его к основной истории.

Сегодня я хочу поговорить об одной из самых ценных для меня игр, «The Legend of Zelda: Breath of the Wild», которая служит для меня образцом хорошего открытого мира. Будем разбираться, как она этого добилась, и чем пришлось пожертвовать разработчикам.
Читать дальше →

Процессор на коленке ч.3. Алгоритм быстрого деления

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


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

Как делать видеоигры в 2025 году (без движка)

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

На дворе 2025 год, а я всё ещё продолжаю делать видеоигры. Если верить archive.org, я начал заниматься этим двадцать лет назад! Достаточно долгий срок для одного увлечения...

Когда я рассказываю о том, над чем работаю, люди часто спрашивают меня, как я делаю игры, и их часто удивляет (а иногда и тревожит?), когда я говорю, что не пользуюсь коммерческими игровыми движками. Существует какой-то стереотип, что если ты делаешь игры не в популярном инструменте наподобие Unity или Unreal, это значит, что ты чуть ли не вручную пишешь ассемблерный код.

Я искренне считаю, что создание игр без огромного «многофункционального» движка может быть проще и интереснее, а часто и позволяет оптимальнее тратить вычислительные ресурсы. Я не делаю игру, в которой «есть всё», поэтому мне не нужны 90% фич, предоставляемых движками. Все мои игры обладают конкретным стилем и у меня есть конкретные способы работы с моими инструментами. Часто оказывается так, что используемым по умолчанию реализациям фич в крупных движках наподобие Unity не хватает столь многого, что мне всё равно приходится писать их самостоятельно. В конечном итоге, мои проекты по большей мере оказываются моими собственными инструментами и системами, а движок становится необходим лишь для создания удобного UI и части рендеринга...

Тут можно задаться вопросом, а зачем вообще использовать движок? Что он даёт? Зачем я позволяю инструменту потенциально препятствовать моей работе, когда его владельцы внезапно принимают неэтичные и ужасные бизнес-решения? Или выпускают обновление, которое требуется для запуска моей игры на консолях, но ломает всю систему в игре, заставляя переписывать её? Зачем я ежедневно борюсь с этим для работы с движком, пока я постепенно заменяю все его стандартные системы и он постепенно становится только загрузчиком ресурсов и фреймворком UI редактора?

Читать далее

Красно-чёрное дерево: полная реализация на C#

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

Что может заставить обратить внимание на красно-чёрные деревья, и как их реализовать? Статья ответит на оба эти вопроса. Бонусом будет показано, как на основе красно-чёрного сконструировать дерево интервалов.

Читать далее

Earcut на битах

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

Earcut - базовый, почти учебный алгоритм триангуляции, но при некоторых раскладах он обгоняет более "продвинутые" решения.

Ампутировать

5 смертельных проблем первого метро, и как их решили

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

Привет, на связи Андрей Шведов, руководитель проектов ГРАН Груп.

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

Вот и я сегодня добирался до работы на метро.

Турникет на входе мгновенно считал проездной с моего смартфона. На табло высветилось точное время прибытия следующего поезда — 1 минута 40 секунд. 

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

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

В этой статье вы узнаете, как развивались технологии подземки от первых дымных туннелей до современных автоматических систем.

Читать далее

«Я слышу свой код»: как работает Java-программист, потерявший зрение

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

Константин Евтеев @beginner760собирает Java-код с помощью диктора NVDA, редактирует его в Блокноте и передает на Linux по SSH через самописные bash-скрипты. После потери зрения он не потерял интереса к жизни и желания быть полезным и выстроил собственную инженерную экосистему: оглавления по строкам .txt-файлами, навигация по main и маленьким методам, отладка на слух.

Читать далее

Как правильно замерить скорость работы кода в .NET

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

Поговорим о бенчмаркинге кода: о том, что это такое и для чего нужно. А также покажем, как на основе результатов бенчмаркинга оценить производительность кода в проекте, написанном на C#.

Читать далее

Как я написал эмулятор Nintendo Gameboy на C++ за две недели

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

Расскажу, как устроена архитектура консоли Nintendo Gameboy, как можно эмулировать её основные компоненты, какие решения я принимал в процессе разработки и какие инструменты использовал.

Читать далее

Быстрый алгоритм fulltext-поиска без токенизации

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

Меня зовут Дмитрий Ольшанский, я ведущий инженер Т-Банка. Расскажу о новом (насколько мне известно) алгоритме поиска текста по шаблону. Такая задача возникла в рамках проекта Sage — observability-платформы от Т-Банка, для которой мы строим новый бэкэнд для структурированных логов, SageDB. 

Читать далее

Wizordum — пример правильной ностальгии

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

Недавно вышла Wizordum — очередной олдскульный шутер, письмо любви к Wolfenstein 3D, Heretic, Catacomb 3D и первой DOOM. Спрайтовая графика с рейкастингом, построенные из квадратных тайлов уровни и держащие верную булаву пиксельные руки главного героя. Разве что харизматичной морды около показателя здоровья не хватает.

Подобные релизы в последние годы — не редкость. Перезапуск DOOM 2016 года, а также такие инди-хиты как Dusk, Ion Fury и Amid Evil, вышедшие в знаковом для жанра 2018, напомнили геймерам, что шутеры — это не только Call of Duty и мультиплеерные проекты. А скорость, десятки пушек за спиной и грамотный дизайн уровней не менее важны, чем кинематографическая постановка и голливудские звёзды на озвучке.

Читать далее

Сопоставление с образцом на C#: объяснение и примеры

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

За годы своего развития C# существенно эволюционировал; одна из самых мощных фич языка — это сопоставление с образцом (pattern matching).

Работая недавно над небольшим хобби-проектом, я наткнулся на такую прекрасную строку кода C#.

if (person is not null and { Age: > 18 })

{}

Выглядит изящно. Откровенно говоря, она заставила меня призадуматься.

Годами я писал проверки на null и свойства-аксессоры классическим образом:

if (person != null && person.Age > 18)

{}

Функционально? Да. Удобочитаемо? Не особо. Безопасно? Спорно, особенно когда код становится сложнее.

Я решил создать шорт YouTube об этом современном синтаксисе. Это небольшое забавное напоминание о том, что C# позволяет при помощи сопоставления с образцом комбинировать проверки на null и обращение к свойству в одно условие.

Я понятия не имел, что это короткое видео приведёт к гораздо более глубокому исследованию, и покажет мне, насколько полезно и универсально сопоставление с образцом в современном C#.

Эта фича повышает читаемость, уменьшает объём бойлерплейта и обеспечивает более выразительную обработку логики.

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

Читать далее

Префиксные суммы. Решение задачи из тренировок Яндекса по алгоритмам

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

Расскажу о том, как решал одну из наиболее интересных задач в разминке Яндекс Алгоритмы 2023 г. Интересной я называю ее потому, что: 1) решал я кратно дольше, чем предыдущие 6 задач из разминки вместе взятые; 2) именно в этой задаче я проникся мощью префиксных сумм, и применением их для двумерных массивов.

И так задача:

Кролики очень любопытны. Они любят изучать геометрию, бегая по грядкам. Наш кролик как раз такой. Сегодня он решил изучить новую фигуру — квадрат.

Кролик бегает по грядке — клеточному полю N × M клеток. В некоторых из них посеяны морковки, в некоторых нет.

Помогите кролику найти сторону квадрата наибольшей площади, заполненного морковками полностью.

Формат ввода

В первой строке даны два натуральных числа N и M ( 1 N, M 1000). Далее в N строках расположено по M чисел, разделенных пробелами (число равно 0, если в клетке нет морковки или 1, если есть).

Формат вывода

Выведите одно число — сторону наибольшего квадрата, заполненного морковками.

Читать далее

Самодельная аэромышь с мультимедийным управлением

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

Имея ограниченный бюджет и страсть к DIY‑проектам, я решил создать что‑то полезное, используя те компоненты, которые уже были у меня под рукой. Порывшись в своих запасах, я наткнулся на гироскопический датчик, ESP32-C3 и ёмкостные сенсоры, оставшиеся от предыдущих проектов — и тут меня осенило! Почему бы не собрать воздушную мышь с мультимедийными функциями? Вооружившись этими компонентами и щепоткой креативности, я поставил перед собой цель — собрать Bluetooth HID‑устройство с управлением движением, которое позволит буквально взмахами руки перемещаться по меню, наслаждаясь удобным управлением мультимедиа.

Но и это ещё не всё. Этот мини‑гаджет подходит не только для телевизоров, ПК и Android‑устройств — он также может управлять радиоуправляемыми моделями, роботизированными манипуляторами и другими умными устройствами с плавным управлением движением.

Читать далее

Компактные структуры данных

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

Введение


Несколько месяцев назад в поисках идей по ускорению кода я изучал множество научных статей по computer science. Не буду притворяться, что хорошо их понимал, но меня не пугает непонятное, и я готов признать своё невежество1. Я обнаружил статью, написанную пятнадцать лет назад2, в которой было множество новых для меня концепций. Мне никак не удавалось в них разобраться.

Что же делать дальше? Можно искать другие статьи, чтобы они заполнили мои пробелы. Это рискованное предприятие, потому что они могут запутать ещё больше, но избежать этого нельзя. Я нашёл статью с нужной структурой данных, в которой упоминался исходный код с веб-сайта. Код был написан на C++, а я работаю на Rust, но решил, что всё равно стоит на него взглянуть. Однако зайдя на сайт, я не обнаружил там ресурс, поэтому я написал владельцу веб-сайта, который оказался преподавателем computer science.

Этот преподаватель (Гонсало Наварро) очень тепло меня принял и сразу же ответил мне3 4. И только в процессе общения с ним я осознал, что видел его фамилию на множестве статей в этой области. Оказалось, я познакомился с одним из специалистов мирового уровня в области компактных структур данных (succinct data structure). Невежество может завести очень далеко.

Что же такое компактные структуры данных? Если вы изучали в последние десятилетия computer science, то могли сталкиваться с ними, но мне не доводилось встречаться с ними в процессе работы программистом, а если и доводилось, то я сразу же о них забыл. Но я считаю, что эти структуры данных обладают потрясающими свойствами.

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

Я решил, что стоит немного о них рассказать.
Читать дальше →

Джойстики из джойстиков своими руками

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

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

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

Как создать собственный шрифт

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

В этом месяце я решил узнать, как создать шрифт, который буду использовать в своём комиксе hakum. Раньше я рисовал текст в цифре на своём планшете. Результат оказывался хорошим, но иногда трудночитаемым (размер текста часто скакал на одной странице). Мне не хотелось использовать готовый шрифт, поэтому я решил создать собственный на основе своего рукописного текста. Шрифт повысит читаемость текста и сделает его однородным.

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

Читать далее

Зачем нужны струйные МФУ, когда есть лазерные? Выбираем печатное устройство

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

МФУ давно стали стандартом офисного оборудования. Хотя традиционно считается, что рациональнее всего покупать именно лазерные решения – особенно для бизнеса, – но в определенных сценариях лучше всего себя показывают именно струйные устройства. Они оказываются оптимальным решением для пользователей, которые нуждаются в качественной цветной печати при средних объемах документооборота, а также в организациях, где ключевым фактором выступает оптимизация затрат на печать.

Читать далее

Как уместить поиск по 30 тысячам слов в 64 КБ ОЗУ

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

Как уместить словарь размером 250 КБ в 64 КБ ОЗУ с возможностью выполнения быстрого поиска? Для справки: даже современные методики сжатия наподобие gzip -9 не могут сжать этот файл до размера меньше 85 КБ.

В 1970-х Дуглас Макилрой столкнулся с этой непростой задачей при реализации проверки правописания для Unix в AT&T. Из-за ограничений компьютера PDP-11 весь словарь должен был умещаться всего в 64 КБ ОЗУ. Кажется, подобную задачу решить невозможно.

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

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

Читать далее

B-Tree — сбалансированный куст поиска

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

В реляционных СУБД есть дефолтный тип индекса — B‑Tree: Tree в названии однозначно указывает на дерево, ну а В это, наверно, Binary? Или Balanced? Или Balanced Binary? Почему‑то долгое время я полагал, что это Balanced Binary, и эта версия даже «работала». На деле всё куда интереснее, предлагаю проследовать под кат, чтобы посмотреть на этот на самом деле скорее низкорослый куст и сравнить его с Red‑Black Tree на Java.

Точно куст?

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность

Специализация

Специалист
Средний