Pull to refresh
0
Василь Бєляєв @VXPread⁠-⁠only

C#, C++, Lua

Send message

Оптимизация кода в уме, или «Ну так же однозначно быстрее»

Reading time4 min
Views25K
Намедни работая над одной ошибкой в одном опенсорсном проекте, увидел как коллега (тоже работающий параллельно над той же проблемой) залил такой вот коммит [31a078bec7]:

   	/*
-	 * Select the list item based on the index. Negative operand means
-	 * end-based indexing (-2, ...), and -1 means out of range.
+	 * Decode end-offset index values.
   	 */
-	if (opnd < -1) {
-	    index = opnd+1 + objc;
-	} else {
-	    index = opnd;
-	}
+	index = opnd + (opnd <= TCL_INDEX_END)*(objc - 1 - TCL_INDEX_END);
   	pcAdjustment = 5;

Изменение само по себе правильное (теперь TCL_INDEX_END есть константное определение (-2)).

И грубо говоря в уме это разворачивается в следующее (все переменные int):

index = opnd + cmp(opnd, (-2))==>(0 | 1) * (objc - 1 - (-2));

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

Во первых, это изменение касается самой «главной» функции в этом проекте (TEBCresume), ибо она ответственна за исполнение байт-кода (JIT скомпилированных инструкций языка TCL). По этой причине эта функция еще и самая большая (порядка 6 тысяч строк + примитивы и макросы) и одна из самых сложных в кодовой базе проекта, с множественными `goto`, головоломными макросами для работы со «стеком» исполнения, свёртка/развертка NRE (nonrecursive evaluation) и т.д. и т.п.

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

Во вторых, по роду деятельности мне часто приходится оптимизировать сишный код, разглядывая его ассемблерное отражение, выжимая доли микро- а то и нано-секунд, и я часто вижу, что там очень всё совсем неоднозначно бывает. Как минимум иногда разворачивая такие вот «экономящие» условный jump конструкции обратно в if или даже if/else, я видел улучшение как и в результирующем ассемблерном коде, так и явно при конечном сравнении производительности результатов исполнения.

Собственно к чему я все это писал — хотелось на примере показать как оно бывает, ну и раз уж коснулись этой темы, собрать немного статистики. Посему пара опросов в конце статьи…
Развернуть в ассемблер ...

Основы оптимизации кода игр

Reading time6 min
Views19K
image

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

Оптимизация ради игроков и собственного психического здоровья


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

Основы оптимизации кода


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

Ускоряем на 70% игру на процессоре в 1 МГц

Reading time16 min
Views31K

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

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

Это история об одном из таких трюков.

Я постараюсь припомнить все важные подробности, однако в чём-то могу ошибиться. Если так случится, простите меня, это было очень давно.

Исходные данные


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

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

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

Я посмотрел. Но там нельзя было найти никакой простой оптимизации.
Читать дальше →

Как я узнал о тайных услугах Мегафона

Reading time3 min
Views128K
Добрый день всем!

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

Компьютер с кипящим охлаждением представлен на семинаре в ИПС РАН

Reading time5 min
Views16K
16 октября 2020 года на семинаре в Институте программных систем РАН (Переславль-Залесский) был показан экспериментальный компьютер, охлаждаемый кипящей жидкостью. Конечно, кипящей при невысокой температуре (40°C). По словам исследователей, это позволяет в тысячи раз улучшить отбор тепла на процессоре и создать одинаково холодные условия во всей установке.

Слева монитор управляющей системы, справа компьютер, на его процессоре заметно кипение.
Слева монитор управляющей системы,
справа компьютер, на его процессоре заметно кипение.


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

Цвет в современных фильмах

Reading time11 min
Views108K

Всем привет, меня зовут Денис. Я работаю художником по свету (Lighting Artist) в игровой индустрии. Часто читаю Хабр просто потому что интересно и вот сегодня увидел статью Дефицит цветов в современных фильмах которая меня немного ошарашила. Ведь в кино существуют целые отделы композитинга, которые занимаются цветокоррекцией изображения, чтобы конечный результат выглядел красиво, а также вызывал определённые эмоции. Поэтому меня сильно удивило, что кто-то видит в этом отрицательную сторону.

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

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

Как выбрать HDMI-кабель? — Разбор

Reading time5 min
Views152K
Вы когда-нибудь задавались вопросом что за странная ситуация с ценой на HDMI-кабели? На Яндекс.Маркете за трехметровый HDMI-кабель цена стартует с 131 рубля, а заканчивается проводом почти за полмиллиона! Понятно, что кабель за пол ляма — это какая-то единичная дичь.





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

Так всё же. Влияет ли цена кабеля на качество изображения? Какие бывают стандарты HDMI кабелей? И какой HDMI-провод выбрать для 4K телевизора и консолей нового поколения?

Сегодня вместе с вами разбираемся в HDMI кабелях.

Давайте сразу расставим точки над i. HDMI — это цифровой интерфейс High Definition Multimedia Interface.

Как 30 строк кода разорвали 27-тонный генератор

Reading time7 min
Views60K

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



Комната управления в здании национальных лабораторий Айдахо
Комната управления в здании национальных лабораторий Айдахо

В конце октября министерство юстиции США рассекретило обвинительный документ, касающихся группы хакеров, известной как Sandworm [песчаный червь]. В документе США обвинили шестерых хакеров, работающих на ГРУ, в компьютерных преступлениях, проходивших в последние пять лет по всему миру – от саботажа зимней олимпиады 2018 года в Южной Корее до запуска самой деструктивной из вредоносных программ на Украине. Среди этих обвинений упоминается беспрецедентная атака на украинскую энергосеть в 2016-м году, которая была разработана с тем, чтобы не только отключить подачу энергии, но и повредить оборудование энергосети. Когда один из исследователей кибербезопасности, Майк Ассанте, углубился в подробности этой атаки, он обнаружил, что идею взлома энергосетей придумали не русские хакеры, а правительство США – придумало, и испытало её ещё десять лет назад [никаких доказательств в обвинении традиционно не приводится; энтузиасты при помощи нейросети провели поиски людей по фотографиям, приведённым в документах, и один из них оказался очень похож на тромбониста из Барнаула / прим. перев.].
Читать дальше →
Инновации чаще взлетают в стартапах: те не скованы операционной рутиной, иерархией коммуникаций, которые так мешают развивать продукт. Но на одной разработке не въедешь на рынок: стартапам часто не хватает сети связей с инвесторами и партнёрами, длительного опыта управления проектами и умения защищать бизнес-идеи. Заполнить такие пробелы помогают акселерационные программы — онлайн-интенсив по искусственному интеллекту и анализу данных Архипелаг 20.35 в их числе.

Под катом пять ИИ- и ML-стартапов рассказывают о себе и о том, что их привело на Архипелаг 20.35. Кстати, приём заявок на участие в интенсиве ещё не окончен. Вы можете успеть поучаствовать в отборе до 27 октября 2020 года.
Читать далее

Как украсть со счета деньги, которых у вас не было?

Reading time9 min
Views15K

Прошу не судить строго - ролик записывался на эмоциях, под влиянием разбудившего меня сегодня звонка от друга, чья семья попала более чем на 1 000 000 рублей кредита (его видимо придется отдавать), и которым я, как выяснилось, несмотря на место работы, вряд ли чем-то смогу помочь - и чтобы хоть как-то успокоить свою злость, я решил хотя бы предупредить других. Немного позже выяснилось, что потерпевших от это схемы, уже закрепившейся в анекдотах и казалось бы мелькающей на демотиваторах в соцсетях, только в среде моих знакомых несколько - и это только те, кто не стыдится рассказать об этом. Схема проста: звонок -> установка трояна -> получение кредита -> вывод денег через банкомат руками самого держателя банковской карты -> пересылка на "защищенный счет". Если вы считаете, что вы, ваши родители и близкие, на 100% защищены от данной схемы, дальше можно не смотреть.

Стенограмма

Небольшое вступление.

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

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

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

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

Читать далее

Сохраняем музыку на C#

Reading time3 min
Views9.8K
image
В 2020ом мы пользуемся разными музыкальными сервисами, но как реликт ушедшей эпохи, в забытом профиле ВК, у многих хранится музыка. Функции для загрузки нет, но что если позарез нужно спасти аудиозапись?
Поскольку такого софта в открытом доступе не обнаружилось, кроме парочки веб-сервисов требующих авторизацию через ВК (что не очень то и безопасно), под катом мы рассмотрим процесс создания self-hosted утилиты на современном C# для загрузки своих аудио, не сливающей данные профиля сторонним сервисам.
Читать дальше →

Дефицит цветов в современных фильмах

Reading time4 min
Views53K

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

Read more

Жизнь замечательной картошки и современные технологии

Reading time24 min
Views20K
Поступая в аграрную академию, я не думал, что когда-нибудь стану сотрудником ИТ-компании. Подозреваю, что служба персонала ЛАНИТ тоже не ожидала, что будет собеседовать агрономов. И вот уже в штате «ЛАНИТ-Интеграции» у меня возникло желание написать в блог на Хабре и ближе познакомить коллег с сельскохозяйственной культурой, с которой мне довелось работать не один год и которая по праву называется «вторым хлебом». Хочется немного расширить представление об этом интересном растении, рассказать о современных технологиях, которые помогают получать хорошую урожайность.

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

На примере того, как цифровые технологии влияют на повышение урожайности картофеля, мы сегодня и рассмотрим положительную синергию растениеводства и ИТ.

Источник

Картофель! Что не специалист может сказать об этом растении? Овощ, происходит из Южной Америки, завезен в Россию Петром Алексеевичем из Голландии, нудно и скучно выращивается и собирается на приусадебных участках. На этом познания о картофеле у большинства заканчиваются. 

Как в 30 лет стать старым и никому не нужным на примере разработки квеста

Reading time9 min
Views57K
Всем привет. Хочу поделиться своей историей, а именно — историей немного затянувшейся разработки простенького point‑and‑click квеста.

Чего ждать при работе с API: 5 (не)обычных проблем при интеграции приложений

Reading time6 min
Views6K

Где-то на просторах мультивселенной…

Представьте на минуту, что вы капитан Сиракузии, которая в 239 году до н. э. приближается к острову Фарос, что близ города Александрии. Вслед­ст­вие узо­сти про­хо­да, вой­ти в гавань Александрии — непростая задача, в особенности, для такого корабля, как ваш. Вы слышали, что за последний год навигация около острова улучшилась, так как был завершен Фа́росский маяк, уникальное сооружение, заложенное еще при Птолемее I.

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

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

Читать далее

Заводим GNU/Linux на ARM-плате с нуля (на примере Kali и iMX.6)

Reading time5 min
Views22K
tl;dr: собираю образ Kali Linux для ARM-компьютера, в программе debootstrap, linux и u-boot.



Если вы покупали какой-нибудь не очень популярный одноплатник, то могли столкнуться с отсутствием для него образа любимого дистрибутива. Приблизительно то же самое случилось с планируемым Flipper One. Kali Linux под IMX6 просто нету (я готовлю), поэтому собирать приходится самостоятельно.
Читать дальше →

Шнурок на шею для Raspberry Pi, по которому подаётся питание

Reading time3 min
Views11K
Есть одна проблема, которую я пытаюсь решить уже несколько лет. Как быть, если хочется носить Raspberry Pi на шее, на шнурке, но при этом не хотелось бы, тоже на шее, носить громоздкий аккумулятор? Сначала я подумал, что можно прикрепить USB-кабель питания к шнурку, но чтобы это сделать, потребовалось бы слишком много возни. Тогда у меня появилась идея: «А что если USB-кабель сам будет шнурком?». Сегодня я расскажу о том, что получилось из этой идеи.


USB-кабель в роли шнурка

Устойчивое хранение данных и файловые API Linux

Reading time10 min
Views9.6K
Я, исследуя устойчивость хранения данных в облачных системах, решил проверить себя, убедиться в том, что понимаю базовые вещи. Я начал с чтения спецификации NVMe для того чтобы разобраться с тем, какие гарантии, касающиеся устойчивого хранения данных (то есть — гарантии того, что данные будут доступны после сбоя системы), дают нам NMVe-диски. Я сделал следующие основные выводы: нужно считать данные повреждёнными с того момента, как отдана команда записи данных, и до того момента, как завершится их запись на носитель информации. Однако в большинстве программ для записи данных совершенно спокойно используются системные вызовы.

В этом материале я исследую механизмы устойчивого хранения данных, предоставляемые файловыми API Linux. Кажется, что тут всё должно быть просто: программа вызывает команду write(), а после того, как работа этой команды завершится, данные будут надёжно сохранены на диске. Но write() лишь копирует данные приложения в кеш ядра, расположенный в оперативной памяти. Для того чтобы принудить систему к записи данных на диск, нужно использовать некоторые дополнительные механизмы.



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

Самые лучшие дистрибутивы Linux для десктопа в 2020 году

Reading time9 min
Views274K

Логотипы пяти лучших дистрибутивов для начинающих пользователей Linux

Linux традиционно считается операционной системой для инженеров и программистов, но уже давно прикладываются реальные усилия, чтобы сделать Linux привлекательнее для остальных людей. Это очень важно, поскольку неустранимые архитектурные проблемы безопасности Windows и закрытая экосистема Apple не позволяют рассматривать их как надёжные варианты для массового использования.

Linux представлен в разных видах. Здесь невероятные возможности настройки, поэтому дистрибутивы разрабатываются исходя из разных потребностей и интересов пользователей. Например, кто-то переходит с Windows или macOS — и есть дистрибутивы, которые в точности повторяют их интерфейс. Другие сосредоточены, например, на максимальной безопасности или эффективном использовании ресурсов.

Посмотрим на самые популярные дистрибутивы Linux в 2020 году для домашнего десктопа, что рекомендуют для начинающих пользователей, опытных специалистов и на легковесные варианты для старых машин x86. И проголосуем за самый популярный дистрибутив.
Читать дальше →

Как я решил сделать игру, вдохновившись Heroes of Might and Magic, и потерял деньги (часть 1, 2)

Reading time12 min
Views67K
Данная история будет состоять из трёх частей, т.к. я выпустил три игры:

  • Beasts Battle
  • Necromancer Returns
  • Magicians Legacy

Часть‌ ‌1


Для тех кто предпочитает смотреть, а не читать, я подготовил видео этой статьи.


В каждом выпуске будут цифры по каждой игре, какой бюджет и доход принесли игры…

Сразу скажу, я – фанат серии Heroes of Might and Magic и King's Bounty. Играл почти во все части и аддоны, за исключением седьмой части, т.к. время идет, жизнь меняется и на игры времени не осталось.

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity