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

Программист С++

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

Принципы SOLID, о которых должен знать каждый разработчик

Время на прочтение11 мин
Количество просмотров318K
Объектно-ориентированное программирование принесло в разработку ПО новые подходы к проектированию приложений. В частности, ООП позволило программистам комбинировать сущности, объединённые некоей общей целью или функционалом, в отдельных классах, рассчитанных на решение самостоятельных задач и независимых от других частей приложения. Однако само по себе применение ООП не означает, что разработчик застрахован от возможности создания непонятного, запутанного кода, который тяжело поддерживать. Роберт Мартин, для того, чтобы помочь всем желающим разрабатывать качественные ООП-приложения, разработал пять принципов объектно-ориентированного программирования и проектирования, говоря о которых, с подачи Майкла Фэзерса, используют акроним SOLID.



Материал, перевод которого мы сегодня публикуем, посвящён основам SOLID и предназначен для начинающих разработчиков.
Читать дальше →
Всего голосов 42: ↑33 и ↓9+24
Комментарии33

Мой любимый файл в кодовой базе Chromium

Время на прочтение6 мин
Количество просмотров86K
Код Хромиума весьма обширен, там каждому найдётся что-то по вкусу. А я вот решил рассказать о своём любимом файле в нём (а у вас есть такой?). Этот файл отражает всё: боль, разочарование, надежду, упорство, силу воли, ответственность за чужие провалы и самопожертвование. Я иногда читаю его и плачу и проникаюсь пониманием, какая же огромная часть айсберга скрыта под водой. Это, в общем, даже не файл с кодом. Это файл с конфигом, описывающим баги видеокарт, которые Хромиуму приходится обходить для нормального отображения своих страниц на разных платформах. Вот он: https://cs.chromium.org/chromium/src/gpu/config/gpu_driver_bug_list.json

О чём вообще идёт речь? Давайте вспомним, как работает браузер: вы набираете какой-то адрес в адресной строке, браузер загружает контент и отображает его. Чуть детальнее об этом рассказывает хорошая статья «What happens when you type google.com into your browser and press enter?» (и сразу несколько её переводов на Хабре). В ней одним из последних пунктов упоминается, мол, «а теперь, когда всё готово, отрисовываем картинку на экране». Ага, вот так берём и отрисовываем, конечно.
Читать дальше →
Всего голосов 186: ↑185 и ↓1+184
Комментарии179

Работа со строками на этапе компиляции в современном C++

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


Если вы программируете на C++, то наверняка задавались вопросом почему нельзя сравнить два строковых литерала или выполнить их конкатенацию:


auto str = "hello" + "world"; // ошибка компиляции

if ("hello" < "world") { // компилируется, но работает не так, как ожидалось
    // ...
}

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

Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии47

Как создать игровой ИИ: гайд для начинающих

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


Наткнулся на интересный материал об искусственном интеллекте в играх. С объяснением базовых вещей про ИИ на простых примерах, а еще внутри много полезных инструментов и методов для его удобной разработки и проектирования. Как, где и когда их использовать — тоже есть.

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

UPD. Извиняюсь, но собственный перевод этой статьи на Хабре уже делал PatientZero. Прочитать его вариант можно здесь, но почему-то статья прошла мимо меня (поиском пользовался, но что-то пошло не так). А так как пишу в блог, посвященный геймдеву, решил оставить свой вариант перевода для подписчиков (некоторые моменты у меня оформлены по-другому, некоторые — намеренно пропущены по совету разработчиков).
Читать дальше →
Всего голосов 60: ↑60 и ↓0+60
Комментарии19

12 факторов, которые мешают работать программистам

Время на прочтение7 мин
Количество просмотров28K
Никто не станет требовать от разработчика, чтобы он писал код без доступа к компьютеру, но многие компании считают, что он каким-то образом должен работать без возможности полностью задействовать свои мыслительные возможности. А это примерно настолько же нереально.



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

Если же кто-то сомневается, стоит ли тратить на это деньги и силы, достаточно вспомнить, сколько программистам платят. Даже прирост производительности в 10% — это немало в денежном эквиваленте!
Читать дальше →
Всего голосов 34: ↑27 и ↓7+20
Комментарии27

Как работает Android, часть 1

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


В этой серии статей я расскажу о внутреннем устройстве Android  —  о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.

Читать дальше →
Всего голосов 92: ↑91 и ↓1+90
Комментарии51

Доступно о кватернионах и их преимуществах

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

От переводчика: ровно 175 лет и 3 дня назад были изобретены кватернионы. В честь этой круглой даты я решил подобрать материал, объясняющий эту концепцию понятным языком.

Концепция кватернионов была придумана ирландским математиком сэром Уильямом Роуэном Гамильтоном в понедельник 16 октября 1843 года в Дублине, Ирландия. Гамильтон со своей женой шёл в Ирландскую королевскую академию, и переходя через Королевский канал по мосту Брум Бридж, он сделал потрясающее открытие, которое сразу же нацарапал на камне моста.

$i^2=j^2=k^2=ijk=-1$




Памятная табличка на мосту Брум Бридж через Королевский канал в честь открытия фундаментальной формулы умножения кватернионов.

В этой статье я постараюсь объяснить концепцию кватернионов простым для понимания образом. Я объясню, как можно визуализировать кватернион, а также расскажу о разных операциях, которые можно выполнять с кватернионами. Кроме того, я сравню использование матриц, углов Эйлера и кватернионов, а затем попытаюсь объяснить, когда стоит использовать кватернионы вместо углов Эйлера или матриц, а когда этого делать не нужно.
Читать дальше →
Всего голосов 83: ↑83 и ↓0+83
Комментарии54

Научно-технические мифы, часть 1. Почему летают самолеты?

Время на прочтение13 мин
Количество просмотров154K
В современном мире многие люди интересуются наукой и техникой и пытаются хотя бы в общих чертах понять, как работают вещи, которые их окружают. Благодаря этому стремлению к просвещению существует научно-просветительская литература и сайты, подобные Гиктаймсу. А поскольку читать и воспринимать ряды формул большинству людей затруднительно, то излагаемые в подобных изданиях теории неизбежно подвергаются значительному упрощению в попытке донести до читателя «суть» идеи с помощью простого и понятного объяснения которое легко воспринять и запомнить. К сожалению, некоторые из подобных «простых объяснений» являются в корне неверными, но при этом оказываются настолько «очевидными», что не подвергаясь особому сомнению начинают кочевать из одного издания в другое и нередко становятся доминирующей точкой зрения, несмотря на свою ошибочность.

В качестве одного из примеров попробуйте ответить на простой вопрос: «откуда возникает подъемная сила в крыле самолета»?



Если в Вашем объяснении фигурируют «разная длина верхней и нижней поверхности крыла», «разная скорость потока воздуха на верхней и нижней кромках крыла» и «закон Бернулли», то я вынужден Вам сообщить, что Вы скорее всего стали жертвой популярнейшего мифа, который преподают порою даже в школьной программе.
То есть это как это миф? Ведь там же все внятно и с доказательствами объясняется!
Всего голосов 130: ↑118 и ↓12+106
Комментарии176

Как написать на ассемблере программу с перекрываемыми инструкциями (ещё одна техника обфускации байт-кода)

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

Представляем вашему вниманию технику создания ассемблерных программ с перекрываемыми инструкциями, – для защиты скомпилированного байт-кода от дизассемблирования. Эта техника способна противостоять как статическому, так и динамическому анализу байт-кода. Идея состоит в том, чтобы подобрать такой поток байтов, при дизассимблировании которого начиная с двух разных смещений – получались две разные цепочки инструкций, то есть два разных пути выполнения программы. Мы для этого берём многобайтовые ассемблерные инструкции, и прячем защищаемый код в изменяемых частях байт-кода этих инструкций. С целью обмануть дизассемблер, пустив его по ложному следу (по маскирующей цепочке инструкций), и уберечь от его взора скрытую цепочку инструкций.


Читать дальше →
Всего голосов 57: ↑56 и ↓1+55
Комментарии25

Разработка игр под NES на C. Глава 24. Приложение 2 — работа с банками памяти

Время на прочтение5 мин
Количество просмотров5.9K
Завершающая часть цикла. В этой главе рассмотрим работу с маппером MMC3 на примерах
<<< предыдущая

image
Источник

Раньше мы не использовали переключение банков памяти, но теперь настало время освоить маппер MMC3. Без маппера можно использовать 32 килобайта PRG ROM для кода и 8 килобайт CHR ROM для графики. Маппер позволяет обойти этот барьер.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии2

Разработка игр под NES на C. Главы 22-23. Приложение 1 — мапперы и цифровой звук

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

Здесь будет информация, не вошедшая в основной цикл, но слишком ценная, чтобы ее игнорировать.


<<< предыдущая следующая >>>


image
Источник


Из нашего обсуждения почти полностью выпала тема мапперов — сопроцессоров в картридже. Если надо сделать игру размером больше 0x8000 байт, то стандартных возможностей консоли для этого не хватит. Маппер позволяет переключать банки памяти в игре, и cc65 умеет с этим работать. Самый популярный маппер — MMC3. Кроме переключения банков памяти, он имеет счетчик строк.

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

Разработка игр под NES на C. Главы 17-21. Своя игра

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

В этой части соберем все вместе и сделаем простую скроллерную стрелялку на космическую тему: корабль летит и лазерами отстреливает врагов


<<< предыдущая следующая >>>


image
Источник


Планирование

Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии1

Разработка игр под NES на C. Главы 14-16. Работа со звуком

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

В этой части базовая информация о работе со звуком. Звуковая подсистема NES весьма низкоуровневая, ее описание весьма запутано и использует специфическую терминологию, так что описание местами может быть не очень внятное.
<<< предыдущая следующая >>>
image
Источник


Начало работы со звуком


Обзор инструментов, которые представляет нам платформа NES. Впрочем, дальше мы уйдем на более высокий уровень и будем использовать библиотеку Famitracker.


Проще всего пощупать звуковые возможности консоли можно с помощью демки Sound Test, разработанной SnoBrow. Она совместима не со всеми эмуляторами, но FCEUX поддерживается.


Кнопка Селект переключает звуковые каналы, Старт включает их. Доступны 4 канала:
1 — меандр 1
2 — меандр 2
3 — треугольный сигнал
4 — шум

Всего голосов 19: ↑19 и ↓0+19
Комментарии4

Разработка игр под NES на C. Главы 11-13. Пишем и отлаживаем простой платформер

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

В этой части появляется первая играбельная демка в стиле Марио. Для этого надо разобраться с прокруткой и способами отладки.


<<< предыдущая следующая >>>


image


Источник


Прокрутка


Регистр $2005 управляет прокруткой фона. Первая запись туда выставляет положение горизонтальной прокрутки, а вторая — вертикальной. Если неизвестно, какая прокрутка была выставлена, можно сбросить на горизонтальную чтением из регистра $2002.

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

Разработка игр под NES на C. Главы 7-10. Работа с джойстиком. Коллизии спрайтов

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

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


<<< предыдущая следующая >>>


image
Источник


Пользовательский ввод


Работа с джойстиками довольно простая. Нажатия кнопок первого джойстика читаются по адресу $4016, а второго — $4017. Достаточно считывать один раз за кадр, сразу после обновления PPU и установки прокрутки.

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

Разработка игр под NES на C. Главы 4-6. Рисуем персонажа

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

В этой части рассмотрим работу с графикой: фон и спрайты персонажей.
<<< предыдущая следующая >>>

image
Источник


Что такое V-blank?


PPU — графический процессор — может или отправлять сигнал в телевизор, или получать информацию от процессора, но не одновременно. Так что единственное время для пересылки это V-blank, период кадрового гасящего импульса.


90% времени PPU отправляет пиксели в видеовыход, строка за строкой слева направо и сверху вниз. Внизу экрана делается пауза, и все повторяется снова. Это происходит 60 раз в секунду. Пауза после отрисовки кадра и есть V-blank. Это весьма короткий промежуток времени. В него реально вложить обновление 2-4 столбцов фоновых тайлов и обновление спрайтов. Обновление фона особенно критично для игр с прокруткой.

Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Комментарии2

Разработка игр под NES на C. Главы 1-3. От введения до Hello World

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

Впервые я задумался о том, как разрабатывают игры под приставки где-то через 20 минут после того, как в самый первый раз увидел Turbo Pascal. На глаза иногда попадался Subor с клавиатурой, и появилась мысль: "Наверное можно набрать какую-то программу, а потом в нее поиграть". Но интерес быстро затух, потому что абсолютно никакой информации по этой теме тогда не было доступно. Следующий раз эта же идея всплыла, когда увидел вполне играбельные эмуляторы старых консолей. Тогда стало ясно, что вбивать листинг в саму консоль и необязательно. Где-то очень потом появился Хабр с благожелательной аудиторией для таких вещей. В какой-то момент даже начал собирать разрозненную инфу чтобы написать мануал самому, и вот сегодня наткнулся на готовый учебник, который явно надо перевести.


Разработка под старые консоли документирована вдоль и поперек, но именно по NES 99% информации относятся к разработке на Ассемблере. Меня почему-то зарубило, что надо освоить именно работу с С.


следующая >>>
image

Читать дальше →
Всего голосов 52: ↑52 и ↓0+52
Комментарии6

Зачем писать свой игровой движок?

Время на прочтение20 мин
Количество просмотров28K
В декабре прошлого года, на конференции Games Gathering 2017, мы сделали доклад, в котором рассказали о том, надо ли компаниям, работающим в игровой индустрии, писать собственные движки.


Читать дальше →
Всего голосов 59: ↑56 и ↓3+53
Комментарии51

Руководство по ассемблеру x86 для начинающих

Время на прочтение16 мин
Количество просмотров146K
В наше время редко возникает необходимость писать на чистом ассемблере, но я определённо рекомендую это всем, кто интересуется программированием. Вы увидите вещи под иным углом, а навыки пригодятся при отладке кода на других языках.

В этой статье мы напишем с нуля калькулятор обратной польской записи (RPN) на чистом ассемблере x86. Когда закончим, то сможем использовать его так:

$ ./calc "32+6*" # "(3+2)*6" в инфиксной нотации
30

Весь код для статьи здесь. Он обильно закомментирован и может служить учебным материалом для тех, кто уже знает ассемблер.

Начнём с написания базовой программы Hello world! для проверки настроек среды. Затем перейдём к системным вызовам, стеку вызовов, стековым кадрам и соглашению о вызовах x86. Потом для практики напишем некоторые базовые функции на ассемблере x86 — и начнём писать калькулятор RPN.
Читать дальше →
Всего голосов 51: ↑48 и ↓3+45
Комментарии26

Как создавался World of Warcraft: взгляд изнутри на 20 лет разработки

Время на прочтение47 мин
Количество просмотров89K
Уже в течение 14 лет World of Warcraft остаётся не только активным, но и актуальным. Он не стал основателем жанра MMORPG, но продолжает эволюционировать вместе с ним. World of Warcraft был продан миллионами копий, заработал миллиарды долларов и выиграл сотни наград. После выпуска седьмого расширения — Battle for Azeroth, WoW по-прежнему может похвастаться растущей базой поклонников.


Нам позируют некоторые из бывших лидеров фракций World of Warcraft. [Все изображения из статьи принадлежат Blizzard Entertainment.]

С самого начала World of Warcraft задумывался как ответ другим играм; игроки в успешные MMO задавались вопросом — может ли игровой процесс может быть лучше? После выхода таких игр, как Ultima Online и Everquest, команда разработчиков из Blizzard Entertainment перенесла игроков в Азерот (Azeroth), впервые появившийся в Warcraft 3. Игроки могли исследовать обширный мир, заполненный героями, злодеями, богами и монстрами в игровом процессе, который был гораздо более дружелюбным к пользователю, чем в играх-конкуренртах. Я сам играл в эти старые MMOs; я помню анархию и убийство игроков (вы не забыли Corp Por) в Ultima Online и собирание игроками толп мобов, беготню без брони до своего трупа и жёсткий гринд в Everquest. По сравнению с этим World of Warcraft был похож на глоток свежего воздуха.

Разработка игр сложна. Игры постоянно терпят крах — иногда потому, что плохи, иногда они просто не находят подходящую аудиторию. Выпустить успешную игру трудно, а поддерживать её успешность больше десяти лет требует сочетания ремесла, любви и удачи. Это видно по тому, что куча сломанных конкурентов World of Warcraft осталась на заре MMORPG. В течение последних 14 лет World of Warcraft расцветал благодаря тому, что разработчики учитывали ощущения игроков и учились больше общаться с сообществом.
Читать дальше →
Всего голосов 53: ↑49 и ↓4+45
Комментарии75

Информация

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