Search
Write a publication
Pull to refresh
0
@Zara6502read⁠-⁠only

User

Send message

Прямое подключение крохотного OLED-дисплея по HDMI

Reading time11 min
Views27K

Есть у меня склонность к реализации глупых и бессмысленных проектов. Перед вами один из них, который появился в результате беседы, закончившейся словами: «Слушай, а ведь технически возможно…», — не вопрос, давай сделаем.
Читать дальше →

Стоит ли покупать NVIDIA RTX 5070, 5080, 5090: игры, где новые видеокарты реально решают

Level of difficultyEasy
Reading time8 min
Views22K

Покупка видеокарты стоимостью как подержанная машина — решение откровенно непростое. 300 тысяч рублей за RTX 5090, 150 за RTX 5080 и даже 100 за RTX 5070 Ti — суммы, которые любого заставляют задуматься о целесообразности трат. Особенно когда нет гарантии, что любимая игра раскроет потенциал этих монстров и даст мало-мальски ощутимый прирост кадров в секунду. Тесты показывают неприятную правду: далеко не везде RTX 5000 стоят своих денег.

Читать далее

Алгоритм Диница: как найти максимальный поток в сети (для начинающих)

Level of difficultyEasy
Reading time6 min
Views2.9K

Привет, будущие инженеры и программисты! Сегодня мы погрузимся в мир алгоритмов и разберём одну очень крутую штуку — алгоритм Диница. Звучит сложно? Не переживайте, мы разберём его по полочкам, как конструктор LEGO, и вы поймёте, как он помогает решать реальные задачи.

Представьте, что у вас есть город, и по его дорогам едут машины. У каждой дороги есть своя пропускная способность — сколько машин может проехать по ней за час. Ваша задача — понять, сколько всего машин может проехать из одной точки города (например, от завода) в другую (например, до торгового центра) за час, используя все дороги. Это и есть задача о максимальном потоке!

Читать далее

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

Level of difficultyEasy
Reading time10 min
Views18K
image

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

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

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

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

Level of difficultyMedium
Reading time33 min
Views6.7K


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

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

Reading time9 min
Views21K

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

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

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

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

Читать далее

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

Level of difficultyMedium
Reading time19 min
Views5.7K

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

Читать далее

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

Level of difficultyEasy
Reading time8 min
Views14K

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

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

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

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

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

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

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

Читать далее

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

Level of difficultyEasy
Reading time8 min
Views9.7K

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

Читать далее

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

Reading time5 min
Views9.4K

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

Читать далее

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

Level of difficultyEasy
Reading time8 min
Views8.1K

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

Читать далее

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

Level of difficultyHard
Reading time10 min
Views4.1K

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

Читать далее

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

Level of difficultyEasy
Reading time8 min
Views5K

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

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

Читать далее

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

Level of difficultyEasy
Reading time4 min
Views6.9K

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

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

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

{}

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

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

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

{}

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

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

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

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

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

Читать далее

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

Level of difficultyEasy
Reading time5 min
Views4.7K

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

И так задача:

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

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

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

Формат ввода

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

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

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

Читать далее

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

Level of difficultyMedium
Reading time8 min
Views2.9K

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

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

Читать далее

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

Level of difficultyMedium
Reading time10 min
Views14K

Введение


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

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

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

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

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

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

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

Level of difficultyEasy
Reading time22 min
Views10K

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

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

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

Level of difficultyEasy
Reading time7 min
Views40K

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

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

Читать далее

Information

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

Specialization

Specialist
Middle