Как стать автором
Обновить
9
0

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

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

Реальный Windows. Пишем realtime под окошками

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

В этом тексте я делюсь трюками, с помощью которых удалось заставить Windows стать чем-то похожим на операционную систему реального времени.

Читать далее
Всего голосов 81: ↑80 и ↓1+79
Комментарии142

Работа сети в пошаговой игре

Время на прочтение7 мин
Количество просмотров7.7K
Три года назад я приступил к разработке Swords & Ravens — многопользовательской онлайн-адаптации в open source моей любимой стратегической игры A Game of Thrones: The Board Game (Second Edition), разработанной Кристианом Питерсеном и изданной Fantasy Flight Games. На февраль 2022 года на платформе ежедневно собирается примерно 500 игроков и с момента её выпуска было сыграно больше 2000 партий. Хотя я перестал активно разрабатывать S&R, благодаря сообществу open source на платформе всё равно появляются новые функции.


Напряжённая партия в A Game of Thrones: The Board Game на Swords & Ravens

В процессе разработки S&R я многому научился и мне бы хотелось поделиться своими знаниями с людьми, которых может заинтересовать создание похожего проекта. О его работе можно сказать многое, но в этой статье я сосредоточусь на том, как проектировалась сетевая часть игры. Сначала я опишу задачу формально. Затем объясню, как она решается в S&R, а также опишу другие возможные решения, придуманные или найденные мной. Я подробно расскажу о достоинствах и недостатках каждого способа, а в конце скажу, какой из них считаю лучшим.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии14

Российский микропроцессор Эльбрус 8С

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

В начале 2020-го года в сети появляется новость о том, что РЖД собирается купить 15 тысяч компьютеров на базе процессоров Эльбрус, потратив на это около 1 млрд руб. Никого не смущает, что тендер заявлен на пятое февраля 20-го года, а конечная дата поставки 25 мая того же года, - кто работал с МЦСТ, тот поймет почему срок нереальный, партии процессоров там "копеечные" и ждать надо долго пока наберут заказов.

Читать далее
Всего голосов 168: ↑162 и ↓6+156
Комментарии377

QOI: как сжимать изображения в 20 раз быстрее STBI и без потерь

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

У представленного месяц назад формата сжатия изображений QOI уже есть реализации на различных языках, плагины для GIMP, Xn View MP и Paint.NET, а также dll для отображения эскизов в Проводнике Windows. Можно скачать изображение и сразу посмотреть на него здесь. Подробности о qoi от автора формата читайте под катом.

Читать далее
Всего голосов 29: ↑21 и ↓8+13
Комментарии11

Быстрая обработка CSV с помощью ОКМД (SIMD)

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

Недавно автор узнал об инструменте csvquote, который кодирует проблемные символы CSV так, чтобы утилиты unix правильно их обрабатывали. Он меняет кодировку в конце конвейера, восстанавливая исходный ввод. Оригинальная реализация работает с кавычками CSV простым, примитивным методом. Но на современном «железе» есть подход лучше, проще и в 3 раза быстрее.

CSV часто используется как формат наборов данных. Подробностями делимся к старту флагманского курса по Data Science, который начнётся уже завтра.

Читать далее
Всего голосов 8: ↑6 и ↓2+4
Комментарии8

Базовые концепции аллокаторов

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

Находясь в поисках какой-то агрегированной информации о стандартных приёмах, используемых при проектировании кастомных аллокаторов, я обнаружил, что существует достаточное количество статей о том, как аллокаторы работают в C++, каких-то базовых вариантах или наоборот очень специфических версиях, но ничего достаточно общего. Попался только замечательный доклад замечательного Андрея Александреску про неправильную архитектуру std::allocator и собственно базовые концепции построения своего нового самого крутого в мире аллокатора. Эта статья является довольно вольным переводом второй части его выступления с моими небольшими дополнениями. Конечно же, категорически рекомендую посмотреть оригинальный доклад, но, если вы любитель текстовых версий, прошу под кат.

Выделить знания...
Всего голосов 40: ↑40 и ↓0+40
Комментарии5

Алгоритм генерации тайловых карт Model Synthesis

Время на прочтение7 мин
Количество просмотров4.1K
image

Я много писал об алгоритме коллапса волновой функции (Wave Function Collapse). Этот алгоритм, разработанный Максимом Гуминым в 2016 году, генерирует тайловые карты и пиксельные текстуры на основании удовлетворения ограничениям с дополнительной рандомизацией [перевод на Хабре]. Но знали ли вы, что большинство основных идей для него взято из статьи, написанной больше десятка лет назад? Сегодня мы рассмотрим диссертацию 2007 года на степень PhD Пола Меррела Model Synthesis и некоторые из разработанных им расширений алгоритма, в частности, Modifying in Blocks.

Model Synthesis


Идея Model Synthesis очень похожа на WFC, по которому я написал целый туториал. Но в этой статье мы опишем идею с нуля.

Model Synthesis начинает с передачи примера тайловой карты, которая используется алгоритмом для того, чтобы учиться, какие тайлы могут располагаться друг рядом с другом при построении модели. Затем для выходного результата инициализируется пустая сетка ячеек. Каждая ячейка имеет список «потенциальных» тайлов, которые могут её заполнить.

Изначально допустим любой тайл. Основной цикл выбирает ячейку и выбирает для неё заданный тайл, помечая все остальные как недопустимые. Затем он распространяет последствия этого выбора при помощи алгоритма AC4, то есть помечает тайл как недопустимый для текущей ячейки, если все его валидные смежные ячейки уже недопустимы. После распространения цикл сбрасывается и мы выбираем другую ячейку, для которой нужно выбрать тайл.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии3

Просто о сложном — move в языке C++

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

Здравствуйте уважаемые читатели. Данная публикация адресована начинающим разработчикам С++ которые только становятся на путь высокой производительности и "отстрелянных конечностей". Опытные разработчики найдут здесь скорее повторение тех вещей, которые сами мучительно осваивали в те далекие времена, когда в языке С++ появилась возможность удобного перемещения объектов.

Многие из вас уже слышали и надеюсь использовали функцию move() в своих проектах. Если нет, то пришло время с ней познакомиться.

Вопрос: Опять этот move, сколько уже можно? Есть же множество опубликованного материала по этой теме?

Ответ: Да, есть много статей. В свое время учился по ним, в том числе и тут, на Хабре [1, 2]. Но мне все равно было не понятно, значит, учитывая статистику, непонятно также и некоторому количеству читателей.

Как обычно начинаются туториалы по move? Рассмотрим lvalue объект, ему соответствует rvalue объект, между ними есть оператор присваивания (=). Тут появляются ссылки, да не просто, а ссылки на lvalue, на rvalue и пошло-поехало. Мозг перегружается, статья пролистывается до конца. Поэтому попробую рассказать о move c другой стороны - в стиле "от практики к теории" - так, как хотел бы чтобы мне рассказали.

Читать далее
Всего голосов 18: ↑15 и ↓3+12
Комментарии69

Оптимизируем физику Shadow Fight Arena — мобильного файтинга с синхронным PvP

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


Ведущий технический художник Banzai.Games Роман Терский рассказывает о технических решениях, позволивших улучшить и оптимизировать физику мобильного многопользовательского файтинга Shadow Fight Arena. Главным нововведением игры является синхронный PvP, появления которого ждали 400 миллионов игроков по всему миру в течение 9 лет. И для команды было важно не только сохранить реалистичность анимаций, но и согласовать движения двух персонажей на двух разных устройствах.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии4

История платформы Highload.Fun для соревнований в оптимизации кода

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

Привет Хабр! Сегодня я хочу рассказать о платформе, где люди соревнуются в том, кто больше сможет сэкономить тактов CPU для решения задач. Её история началась весной 2021 года, после очередного HighLoad Cup'а от Mail.ru. Мне очень нравится этот конкурс, но, к сожалению, он проходит довольно редко (2017, 2018, 2021 года) и наблюдается тренд ухода от оптимизации на уровне операционной системы и железа к массовости, чтобы в лидерах были решения не только на C/C++, но и на более медленных языках программирования. В 2017 году нужно было сделать HTTP сервер, реализующий простую бизнес логику, лидеры писали свои решения с использованием низкоуровневых вызовов функций ядра и только вызов функции epoll_wait со временем ожидания -1, вместо 0, не позволило мне подняться в TOP-6 с 9 места. Если интересны технические детали, то можно почитать эту статью. В 2021 году нужно было обращаться к серверу, в котором были искусственные ограничения и нужно было разобраться в них, а не выжать из железа всё возможное. После конкурса был созвон, на котором участники давали обратную связь, по итогам которого стало понятно, что есть небольшое количество людей, которым интересна именно низкоуровневая оптимизация, а не только улучшение алгоритмов на уровне Big O. Так и родилась идея этой платформы. Под катом история и устройство платформы, а также набитые шишки.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии7

Проблемы скорости сборки, или что делать, если время сборки игрового билда увеличивается в 10 раз

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

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

DevOps — это и есть набор методов, благодаря которым можно сократить время разработки и ускорить выпуск обновлений. А CI/CD, или непрерывная интеграция и доставка — это не сколько технология, сколько целая культура, позволяющая чаще и надежнее производить небольшие изменения в игре с частыми коммитами, доставлять модули проекта в разные отделы и автоматизировать их тестирование. Все это представляет собой целый пласт работ — эдакий невидимый игрокам фронт.

Изначально, до старта работ над War Robots Remastered, у нас уже был выстроенный пайплайн CI/CD для всех проектов, и оригинальная War Robots не была исключением. Сам проект тогда в среднем собирался 40-100 минут. Но чем дальше продвигалась работа над ремастером, чем больше накапливалось проблем со скоростью сборок. Спустя полгода проект стал собираться от 3-х часов и больше с периодическими зависаниями, которые могли доходить до 7-10 часов. Это становилось совсем неприемлемым: QA в динамике не могли проверять билды, разработчикам тоже приходилось тратить время на ожидание, чтобы посмотреть результат или начать профилировать. Пришлось серьезно подумать над тем, как все это чинить и возвращать время сборок к исходному значению.

Читать далее
Всего голосов 22: ↑21 и ↓1+20
Комментарии6

Декомпозируем игровую графику: технологии под капотом современных игр

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

С момента релиза War Robots прошло уже более 7 лет. В 2014 году мобильный игровой рынок был гораздо скромнее, чем сейчас, а девайсов, которые могли без проблем тянуть трехмерную игровую графику, — и того меньше. Несмотря на то, что уже случилась шейдерная «революция», и на замену графического конвейера с фиксированным функционалом (fixed-function pipeline) пришли вершинные и фрагментные шейдеры, возможностей для создания качественной картинки уровня настольного компьютера было явно недостаточно.

На старте разработки оригинальной игры фактически единственным среди графических API на мобильных платформах (Android, iOS) был OpenGL ES 2.0. Результат его эволюционного развития, OpenGL ES 3.0, был только-только утвержден, и на рынке даже не было устройств, которые бы его поддерживали. Таким образом, графика в Walking War Robots была основана на технологиях и возможностях, предоставляемых именно OpenGL ES 2.0. 

У War Robots тех времен был вполне себе типичный графический стек, поддерживающий один направленный источник света и способный рассчитать от него затенение с учетом весьма простой системы материалов. Со временем графика в игре улучшалась и совершенствовалась, но довольно быстро ее развитие стало упираться ограничения OpenGL ES 2.0. Наступил момент, когда потенциал эволюционного развития был достигнут, и без комплексного революционного подхода рывок в графике уже не представлялся возможным. В тот момент мы и приняли решение, что игре нужен ремастер.

Читать далее
Всего голосов 26: ↑25 и ↓1+24
Комментарии14

Развеиваем мифы об управлении памятью в JVM

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

В серии статей я хочу опровергнуть заблуждения, связанные с управлением памятью, и глубже рассмотреть её устройство в некоторых современных языках программирования — Java, Kotlin, Scala, Groovy и Clojure. Надеюсь, эта статья поможет вам разобраться, что происходит под капотом этих языков. Сначала мы рассмотрим управление памятью в виртуальной машине Java (JVM), которая используется в Java, Kotlin, Scala, Clojure, Groovy и других языках. В первой статье я рассказал и разнице между стеком и кучей, что полезно для понимания этой статьи.
Читать дальше →
Всего голосов 30: ↑26 и ↓4+22
Комментарии11

Какой предел у предсказателя ветвлений? Проверили на x86 и M1

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

Некоторое время назад я смотрел на высоконагруженную часть кода и обратил внимание на это:

if (debug) {
    log("...");
}

И тут я задумался. Это — часть цикла, от которого требуется высокая производительность, но этот фрагмент выглядит как пустая трата времени, ведь мы никогда не устанавливаем флаг отладки. Нормально ли иметь в коде условные операторы, которые никогда не выполняются? Уверен, это влияет на производительность программы…
Читать дальше →
Всего голосов 153: ↑151 и ↓2+149
Комментарии91

Что делать с антинаучными теориями в интернете? Деплатформинг и гуманная цензура

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


К сожалению, сознанием легко манипулировать. Люди предсказуемо боятся неизвестного, соглашаются с мнением большинства, верят часто повторяемой лжи, считают себя лучше среднего и думают, что окружающий мир действительно такой, каким выглядит (наивный реализм). На данный момент у сапиенсов классифицировано более 175 когнитивных искажений. Что характерно, люди замечают проявление когнитивных искажений у других, но не у себя (это эффект слепого пятна, он чаще встречается у людей с высоким IQ).
Читать дальше →
Всего голосов 50: ↑32 и ↓18+14
Комментарии458

Как разработать микросхему. Собственный процессор (почти)

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

Как же разработать свою микросхему. Задался я этим вопросом, когда я захотел создать собственный процессор. Пошёл я гуглить и ничего годного не нашёл. Ответы в основном два։ "Ты не сделаешь свой процессор, потому что слишком сложно" и "Забей и собери компьютер из комплектующих".

Очевидно что это меня не устаивает, поэтому я решил изучить вопрос серьезнее. Оказалось можно сделать свой процессор описав его с помощью Verilog и FPGA. Купил плату в Китае, 3 года спокойным темпами написал свой процессор, оттестировал, скомпилировал и залил на FPGA. Но мне этого не достаточно.

Читать далее
Всего голосов 89: ↑85 и ↓4+81
Комментарии28

Разработка firmware на С++ словно игра в бисер. Как перестать динамически выделять память и начать жить

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

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

Читать далее
Всего голосов 52: ↑50 и ↓2+48
Комментарии87

Почему мы отказались от стандартных теней Unity для мобильных шутеров и вместо этого написали свои

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

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

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

Читать далее
Всего голосов 32: ↑31 и ↓1+30
Комментарии11

Обзор инструкций ARM NEON для тех, кто знаком с MMX/SSE/AVX

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

Мир изменился. Я чувствую это в воде, чувствую это в земле, ощущаю в воздухе.

«Властелин колец», Джон Рональд Руэл Толкин

Читать далее
Всего голосов 75: ↑74 и ↓1+73
Комментарии36

Отменим ли мы Web?

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

Этот пост написан Ханной Вулфман-Джонс, но включает ответ эксперта по гражданским правам Надин Строссен, экс-президента ACLU

Рождение движения

Ричард Столлман и идеи свободного программного обеспечения, которые он разработал, зародились в те времена, когда компьютеры еще не стали неотъемлемой частью жизни обычных людей, то есть в 70-е годы. За много десятилетий до того, как наши сотовые телефоны отслеживали каждое наше движение, до того, как умные дома принесли массовое наблюдение в наши жилые комнаты, идея компьютеров как серьезных инструментов угнетения казалась явно абсурдной.

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

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

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

Читать далее
Всего голосов 150: ↑140 и ↓10+130
Комментарии95

Информация

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