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

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

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

Создаем свою простую (C++) библиотеку с документацией, CMake и блекджеком

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

В мире программирования создание собственных библиотек — это не просто возможность пополнения своего портфолио или способ структурировать код, а настоящий акт творческого самовыражения (и иногда велосипедостроения). Каждый разработчик иногда использовал в нескольких своих проектах однообразный код, который приходилось каждый раз перемещать. Да и хотя бы как упаковать свои идеи и знания в удобный и доступный формат, которым можно будет поделиться с сообществом.

Если вы ловили себя на мысли: ‭«А почему мне бы не создать свою полноценную библиотеку?‭», то я рекомендую прочитать вам мою статью.

Эту статью вы можете использовать как шпаргалку для создания проектов, и не только библиотек.

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

Читать далее
Всего голосов 44: ↑43 и ↓1+53
Комментарии59

.kkrieger — маленькое чудо большой демосцены

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

Демосцена полна необычными проектами. Однако лишь единицы из них становятся широко известны. Но, пожалуй, самой популярной технодемкой стала .kkrieger — игра в жанре шутера от первого лица с качественной (для 2004 года, когда она была выпущена) графикой, занимающая всего 96 килобайт!

На этом необычные факты не заканчиваются — начиная с сегодняшнего дня вы можете скачать архив с .kkrieger по ссылке, которая транслируется со спутника-сервера RUVDS прямо из космоса! ?‍? Получить её можно на специальном лендинге.
А теперь подробнее про саму игру
Всего голосов 43: ↑42 и ↓1+56
Комментарии34

Flappy Bird на Си для Android весом APK всего 92 Килобайта

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

Это невозможно! И вы будете правы, только ошибка в том, что это — реальность.
Или как сказал один человек «Это компьютерная наука. Ограничений нет. Я могу делать все, что захочу. Это всего лишь биты информации.»

Читать далее
Всего голосов 47: ↑45 и ↓2+55
Комментарии28

Как недостаток сна влияет на здоровье

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

Многие не запариваются насчёт сна, я пренебрегал сном, особенно по молодости, ничего же страшного, если посижу до 2-3 ночи, отосплюсь утром или на выходных. Ведь тут интересный сериал, игра, книга. Кто себя узнал?)

Но всё это имеет последствия организма. Проблемы копятся, просто если молодой, особо не обращаешь внимания на это и организм пока вывозит.

Читать далее
Всего голосов 14: ↑12 и ↓2+14
Комментарии9

Поделить нельзя — умножить или алгоритм быстрого деления по методу Ньютона-Рафсона

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


Все мы в школе проходили деление «столбиком» — простой алгоритм, который несложно реализовать, вот только не очень быстрый. В прошлый раз мы рассматривали, как компилятор оптимизирует деление в случаях, когда делитель известен во время компиляции, но применение его напрямую, чтоб оптимизировать деление для делителей, определямых в run-time, невозможно: вычисление констант сдвига и умножения само по себе требует деления.

В этот раз хочется поговорить о другом методе, сводящем деление к умножениям и битовым сдвигам, основанном на методе поиска корней функции.
Смотреть код, формулы и анимации
Всего голосов 45: ↑44 и ↓1+64
Комментарии37

Современным самолётом невозможно управлять

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

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

Читать далее
Всего голосов 214: ↑197 и ↓17+232
Комментарии110

Про каршеринг и отключение машины в лесу

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

Окирпичился каршеринговый авто. Как уйти и не оставить машину открытой?

Про каршеринг и отключение машины в лесу

Развернутый комментарий к этой истории и её комментариям.

Читать далее
Всего голосов 74: ↑60 и ↓14+64
Комментарии134

12 вместо 100+, или Как быстро и удобно создать базовый интерфейс для ОС [статья-воркшоп]

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров9.5K
Все мы знаем, что токен — это всего лишь ключ и значение. И нет ничего проще, чем их создавать. Придумываешь ключ, который полностью описывает кейс, назначаешь значение из базовой палитры — готово. Такой способ декларативен, но когда используешь токены каждый день, появляется ряд неудобств: сложно запомнить, сложно найти в списке, больно вбивать в редактор…

Вот, например, список токенов из дизайн-системы Atlassian. Смогли бы вы запомнить и скомбинировать «всего-то» сотню-другую названий?



Но если сформировать небольшую библиотеку токенов, то их комбинирование позволит создать почти полный набор визуалов. И в этой статье-воркшопе мы убедимся, что, например, всего лишь из 12 коротких токенов можно собрать интерфейс для целой операционной системы.
Читать дальше →
Всего голосов 36: ↑35 и ↓1+37
Комментарии6

Рефакторинг игрового движка: от сырых указателей к умным

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

Привет! Когда-то давно я уже писал статью про сырые и умные указатели, попытки использовать GC вместо них. Тогда я решил оставаться в С++ с сырыми указателями, а GC отвел место в скриптах. Но за долгое время я все больше и больше понимал что сырые указатели слишком опасны, тем более что мой движок позволяет писать игровой код на С++. Количество багов лишь подкрепляло уверенность что пора уходить от ручного управления памятью. Однако идеи про GC никак не оставляли в покое...

В статье я расскажу как переводил движок с сырых указателей на умные, разберу самые популярные концепции умных указателей, их особенности и подводные камни, и какой подход выбрал сам. Где в итоге здесь оказался GC и почему он не убивает производительность. А так же свои попытки напрячь ИИ для массового рефакторинга кода.

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

Реализуем эффективный тупль с помощью C++26

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

Свет видел много любительских реализаций std::tuple, и реализация своих велосипедов — наверное, это действительно действенный способ обучения: вряд-ли можно сказать, что ты что-то по-настоящему понимаешь, если не можешь объяснить, как это что-то устроено.

Многие пытливые умы на протяжении десятилетий задавались вопросом: как же реализован std::tuple, как мне реализовать свой тупль (кортеж)? [1]

И немало было дано ответов на такие вопросы и написано статей ([2]). Однако я берусь утверждать, что все они имеют один фатальный недостаток! Конкретнее, они все рассматривают в основном лишь один (и при этом неэффективный) способ реализации: с помощью множественного наследования или рекурсивного инстанцирования, имеющий в свой очередь множество своих недостатков, главный из которых — неэффективное использование памяти.

В то время как современный C++ позволяет реализовать тупль гораздо проще (без обилия шаблоноты) и эффективнее.

Войти в мир эффективных реализаций туплей
Всего голосов 33: ↑30 и ↓3+37
Комментарии69

How to Make Your Own C++ Game Engine

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

So you want to learn more about game engines and write one yourself? That's awesome! To help you on your journey, here are some recommendations of C++ libraries and dependencies that will help you hit the ground running.

Read more
Всего голосов 2: ↑1 и ↓10
Комментарии0

Analysis of UE5 Rendering Technology: Nanite

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

After Epic released the UE5 technology demo at the beginning of 2021, the discussion about UE5 has never stopped. Related technical discussions mainly centered on two new features: global illumination technology Lumen and extremely high model detail technology Nanite. There have been some articles [1 ][2] analyzing Nanite technology in more detail. This article mainly starts from the RenderDoc analysis and source code of UE5, combined with some existing technical data, aims to provide an intuitive and overview understanding of Nanite, and clarify its algorithm principles and design ideas, without involving too many source code level Implementation details.

 

https://blog.en.uwa4d.com/2022/02
Рейтинг0
Комментарии0

Почему MMAP не лучший выход

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

Доступ к файлам через отображение-в-память (mmap) — это способность некоторых операционных систем отобразить содержимое какого-либо файла в адресное пространство программы. Сама программа получает доступ к содержимому файла через указатели, как если бы сам файл был бы целиком загружен в оперативную память. Операционная система прозрачно загружает части файла в оперативную память, и автоматически выгружает их, когда памяти не хватает.


MMAP захватила умы программистов СУБД на многие десятилетия, как альтернатива буферу данных. И вот здесь следует отметить, что в mmap имеются серьёзные проблемы с корректностью и скоростью работы с данными в современных СУБД. В реальности, некоторые известные СУБД сперва использовали mmap для работы с "больше-чем-вмещается-в-память" базами данных, но вскоре обнаружили эти скрытые ограничения, которые принудили их к самостоятельному управлению файловым вводом/выводом, после заметных трат на инженерные исследования. В этом смысле mmap и СУБД подобны сочетанию кофе и острой пищи: неудачное сочетание, которое не очевидно, пока сам не попробуешь.


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

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

Повышаем производительность кода: сначала думаем о данных

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


Занимаясь программированием рендеринга графики, мы живём в мире, в котором обязательны низкоуровневые оптимизации, чтобы добиться GPU-фреймов длиной 30 мс. Для этого мы используем различные методики и разработанные с нуля новые проходы рендеринга с повышенной производительностью (атрибуты геометрии, текстурный кеш, экспорт и так далее), GPR-сжатие, скрывание задержки (latency hiding), ROP…

В сфере повышения производительности CPU в своё время применялись разные трюки, и примечательно то, что сегодня они используются для современных видеокарт ради ускорения вычислений ALU (Низкоуровневая оптимизация для AMD GCN, Быстрый обратный квадратный корень в Quake).


Быстрый обратный квадратный корень в Quake

Но в последнее время, особенно в свете перехода на 64 бита, я заметил рост количества неоптимизированного кода, словно в индустрии стремительно теряются все накопленные ранее знания. Да, старые трюки вроде быстрого обратного квадратного корня на современных процессорах контрпродуктивны. Но программисты не должны забывать о низкоуровневых оптимизациях и надеяться, что компиляторы решат все их проблемы. Не решат.

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

В статье мы рассмотрим кеширование, векторное программирование, чтение и понимание ассемблерного кода, а также написание кода, удобного для компилятора.
Читать дальше →
Всего голосов 141: ↑133 и ↓8+125
Комментарии103

Создание процессора с нуля для чайников

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

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

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

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

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

Чиним замедление YouTube на уровне роутера

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

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

Что случилось?

Хорошо описано произошедшее здесь, на Хабре. Если совсем кратко, своими словами - во время установки SSL соединения в открытом виде домен передается к которому мы подключаемся(так называемое SNI). И если это googlevideo.com то начинают твориться "интересные вещи". Можно проверить это локально коммандами из статьи.

$ curl https://speedtest.selectel.ru/100MB -o/dev/null

Читать далее
Всего голосов 360: ↑357 и ↓3+412
Комментарии1049

Как работает графика в видеоиграх?

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров18K
Видеоигры в 21 веке обладают впечатляющей графикой, способной перенести игрока в невероятно детализированные города, захватывающие дух места сражений, волшебные миры и захватывающую дух природу.Как же ваш компьютер берет миллиарды единиц и нулей и превращает их в реалистичную 3D-графику? Что ж, давайте разбираться.


Читать дальше →
Всего голосов 33: ↑29 и ↓4+34
Комментарии10

Неудачник, который создал IBM PC

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

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

Билл Лоу начал этот амбициозный проект, но не станет тем человеком, который его закончит. Эта роль достанется его преемнику — скромному, обутому в ковбойские сапоги руководителю среднего звена, не пользующемуся популярностью и впахивающему в корпоративном захолустье IBM в Бока-Ратоне, штат Флорида. Ему предстояло продвигать проект Лоу, который никто в компании не хотел принимать. Всего 12 месяцев спустя, 15 августа 1981 года, в продажу поступит компьютер, который изменит мир: IBM PC.

Читать далее
Всего голосов 75: ↑73 и ↓2+91
Комментарии25

Опасность устарела: несколько важных нюансов в новых стандартах C++

Время на прочтение16 мин
Количество просмотров16K
Undefined behavior (UB) — боль, знакомая каждому разработчику со стажем; эдакий «код Шредингера», когда не знаешь, правильно тот работает или нет. К счастью, стандарты языка С++20/23/26 привнесли относительно неопределенного поведения кое-что новое. И довольно важное, если вы — архитектор ПО, а «плюсы» — ключевой стек вашей компании (подробнее о том, как и почему мы в «Лаборатории Касперского» много используем С++, читайте здесь).

В этой статье я со своих позиций Senior Software Architect и Security Champion в микроядерной операционной системе KasperskyOS рассмотрю кейсы-ловушки, в которые можно попасть практически в любом из стандартов, и покажу, что меняется в С++20/23/26, — уменьшается ли количество кейсов с неопределенным поведением, и становится ли С++ безопаснее.


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

У меня нет конструктора, но я должен инициализироваться

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

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

Главная ошибка была в том, что ты в это вообще ввязался — в этом никаких сомнений.

Ещё когда я впервые взялся проходить курс по C++ несколько лет назад, меня учили, что, если я не предоставлю собственного конструктора, то компилятор сам подберёт ему замену — своего рода конструкторы, действующие по умолчанию. Я решил подробнее в этом разобраться, особенно меня волновали случаи, которые выглядят примерно так:

Читать далее
Всего голосов 15: ↑13 и ↓2+21
Комментарии16
1
23 ...

Информация

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