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

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

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

VSСode. Как настроить окружение для разработки в Docker на удаленном сервере через SSH

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

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

Читать далее
Всего голосов 11: ↑10 и ↓1+12
Комментарии23

Полезен ли сегодня быстрый обратный квадратный корень из Quake III?

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

В 2005 году id Software опубликовала под лицензией GPL-2 исходный код своей игры 1999 года Quake III Arena. В файле code/game/q_math.c есть функция для вычисления обратного квадратного корня числа, которая на первый взгляд выглядит очень любопытным алгоритмом:

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // зловещий хакинг чисел с плавающей запятой на уровне битов
    i  = 0x5f3759df - ( i >> 1 );               // какого чёрта?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // первая итерация
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // вторая итерация, можно удалить

    return y;
}

Об этом алгоритме написано множество статей, и ему посвящена хорошая страница Википедии, где он назван fast inverse square root (быстрым обратным квадратным корнем). На самом деле, этот алгоритм упоминался на различных форумах ещё до публикации исходного кода Q3. Ryszard из Beyond3D провёл в 2004-2005 годах исследование и в конечном итоге выяснил, что первоначальным автором алгоритма был Грег Уолш из Ardent Computer, который создал его десятью годами ранее.
Читать дальше →
Всего голосов 148: ↑146 и ↓2+191
Комментарии52

Толстые слои легаси: как запускаются современные процессоры Intel

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

Центральные процессоры (CPU) не могут ничего сделать, пока им не скажут, что делать. Возникает очевидная проблема — как вообще заставить CPU что-то делать? Во многих CPU эта задача решается при помощи вектора сброса — жёстко прописанного в CPU адреса, из которого нужно начинать считывать команды при подаче питания. Адрес, на который указывает вектор сброса, обычно представляет собой какую-нибудь ROM или флэш-память, которую CPU может считать, даже если никакое другое оборудование ещё не сконфигурировано. Это позволяет производителю системы создавать код, который будет исполнен сразу же после включения питания, сконфигурирует всё остальное оборудование и постепенно переведёт систему в состояние, при котором она сможет выполнять пользовательский код.

Конкретная реализация вектора сброса в системах x86 со временем менялась, но, по сути, это всегда были 16 байтов ниже верхушки адресного пространства, то есть 0xffff0 на 20-битном 8086, 0xfffff0 на 24-битном 80286 и 0xfffffff0 на 32-битном 80386. По стандарту в системах x86 ОЗУ начинается с адреса 0, поэтому верхушку адресного пространства можно использовать для размещения вектора сброса с минимальной вероятностью конфликта с ОЗУ.
Читать дальше →
Всего голосов 49: ↑48 и ↓1+65
Комментарии56

Как выжать 1,5 терафлопса производительности для 32-битных чисел с плавающей точкой на одном процессоре M1

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

Если вы занимаетесь обучением крупных современных нейросетей, эта статья будет вам не совсем в тему, ведь у A100 скорость в сто раз выше (156 терафлопсов).


Так что же интересного в этих полутора терафлопсах?


  • работа на одном ядре MacBook Air 2020 года с питанием от батареи;
  • выполнение с задержкой ~0,5 наносекунды на инструкцию.

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

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

Stack Trace в C++ или велосипедирование, уровень «Быдлокод»

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

DISCLAMER


Статья является шуточной, но с долей правды (программирование, же). Данная статья также содержит код, который может смертельно навредить вашему зрению. Читайте на ваш риск.

Вступление


Здравствуйте. Думаю многие сталкивались с неинформативностью большинства критических ошибок, вылетающих в программе. Давайте перечислим, какие ситуации могут приводить к аварийному завершению работы программы:
Читать дальше →
Всего голосов 18: ↑12 и ↓6+6
Комментарии19

Алгебра int о которой не говорят

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

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

Толчком Мотивацией к написанию статьи послужил кейс, продемонстрировавший свойство целого типа, которое легко упустить из виду, но на практике приводящее к неожиданному поведению. Это ни разу не новое открытие в computer science, и под капотом все довольно просто, но сохраним интригу. Подойдем к этому свойству через реальную задачу, затем посмотрим на целочисленную арифметику с точки зрения теории групп и разложим все по полочкам. Если вы используете язык программирования с ограниченными целыми числами, то статья может оказаться полезной.

Читать далее
Всего голосов 35: ↑34 и ↓1+46
Комментарии42

Процедурная генерация 3D-мешей для интро на 64 КБ

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

В предыдущей статье [перевод на Хабре] мы рассказали, как генерируются текстуры в демо H – Immersion. На этот раз мы изучим ещё один важный инструмент для создания демо нужного размера — процедурную геометрию.

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

Текстуры для 64k intro: как это делается сегодня

Время на прочтение8 мин
Количество просмотров9.3K
Эта статья является второй частью нашей серии о создании H – Immersion. Первую часть можно прочитать здесь: Погружение в Immersion.

При создании анимации всего лишь в 64 КБ сложно использовать готовые изображения. Мы не можем хранить их традиционным способом, потому что это недостаточно эффективно, даже если применять сжатие, например JPEG. Альтернативное решение заключается в процедурной генерации, то есть в написании кода, описывающего создание изображений во время выполнения программы. Нашей реализацией такого решения стал генератор текстур — фундаментальная часть нашего тулчейна. В этом посте мы расскажем, как разрабатывали и использовали его в H – Immersion.


Прожекторы субмарины освещают детали морского дна.
Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии3

Как устроено индексирование баз данных

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

Индексирование баз данных — это техника, повышающая скорость и эффективность запросов к базе данных. Она создаёт отдельную структуру данных, сопоставляющую значения в одном или нескольких столбцах таблицы с соответствующими местоположениями на физическом накопителе, что позволяет базе данных быстро находить строки по конкретному запросу без необходимости сканирования всей таблицы. Применяются разные типы индексов, однако они занимают пространство и должны обновляться при изменении данных. Важно тщательно продумывать стратегию индексирования базы данных и регулярно её оптимизировать.
Читать дальше →
Всего голосов 53: ↑51 и ↓2+64
Комментарии9

Что наука знает о красоте: 13 научных исследований для создания привлекательного персонажа

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


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

  • красивые женщины нравятся не только взрослым мужчинам, но и младенцам;
  • для красоты лица важна симметрия;
  • оранжевые мужчины более привлекательны;
  • важен не размер женских бедер, а угол в пояснице;
  • у Лары Крофт фигура нормальной англичанки.

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

Я веду ламповый Telegram-канал GameDEVils и блог на Substack . Заглядывайте в гости, я делюсь там материалами про геймдизайн, разработку и историю игр ^__^

Красота биологически важна для человека


И если бы меня попросили назвать только одно «почему», которое чаще всего называют ученые, то после чтения пары десятков исследований, я бы сказала: «красивое» — скорее всего здоровое.
Читать дальше →
Всего голосов 68: ↑63 и ↓5+79
Комментарии67

Linux-порт Far Manager: новости весны 2023

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

Обычно я пишу статьи об развитии проекта far2l — порта знаменитого Far Manager под Linux, MacOS и BSD (а теперь ещё и Haiku) раз в год. Но иногда случается так, что объем новостей на статью набирается быстрее. Недавно произошло сразу несколько важных событий, поэтому дожидаться конца года не буду, а опубликую самое интересное сразу.

Нас взяли в Debian!

Это, пожалуй, главная новость. К сожалению, в Bookworm мы попасть не успели, так что ждите нас в следующем выпуске, или в Ubuntu 23.10. Да, можно будет делать sudo apt install far2l, без всяких сложностей с ppa или самостоятельной сборкой!

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

Стоимость операций в тактах ЦП

Время на прочтение17 мин
Количество просмотров75K
Всем доброго! Вот мы и добрались до тематики С++ на наших курсах и по нашей старой доброй традиции делимся тем, что мы нашли достаточно интересным при подготовке программы и то, что будем затрагивать во время обучения.

Инфографика:



Когда нам нужно оптимизировать код, мы должны отпрофилировать его и упростить. Однако, иногда имеет смысл просто узнать приблизительную стоимость некоторых популярных операций, чтобы не делать с самого начала неэффективных вещей (и, надеюсь, не профилировать программу позже).
Читать дальше →
Всего голосов 100: ↑97 и ↓3+94
Комментарии16

Добавляем деструкторы в C

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

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

read(&publication);
Всего голосов 17: ↑16 и ↓1+20
Комментарии18

Программная реализация шифровальной машины «Энигма» на языке Си

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

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

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

Самый научный гайд по сну

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

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

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

Например, мне категорически не хотелось расставаться со смартфоном перед сном. Спустя долгие часы изучения этого вопроса я обнаружил, что этого не нужно делать! И ребята, сидящие на диете, можете выдохнуть, метаболизм во сне не отключается. Ниже мы подробно и без воды разберём всё, что касается сна.

Читать далее
Всего голосов 103: ↑97 и ↓6+121
Комментарии134

Главное — это идея: 10 отличных проектов промышленного дизайна 2022 года

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров14K
Как доработать игровой контроллер для людей с инвалидностью? Как сделать отвертку так, чтобы у нее появилось «плечо» для увеличения усилия? Как продумать пуговицы так, чтобы ими могли пользоваться даже слепые, при этом еще и различая цвета одежды? Это и многое другое в дайджесте независимых дизайн-проектов, которые я собирал целый год.

image

Я пишу про промышленный дизайн более 7 лет. По просьбе компании Timeweb я собрал 8 наиболее интересных, на мой взгляд, идей 2022 года и (поскольку я слоупок и пишу об этом только сейчас) добавил пару отличных проектов из января. Открывайте, будет интересно!
Читать дальше →
Всего голосов 37: ↑32 и ↓5+39
Комментарии82

Пишем расширение Chrome, которое ворует вообще всё

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

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

Мы добьёмся двух целей:

  • Исследуем грани возможного для расширений Chrome
  • Продемонстрируем, что вы подвержены опасности, если не будете аккуратны с тем, что устанавливаете.

Примечание: на самом деле реализация этого расширения — злодейство. Вам не следует использовать в злонамеренных целях полномочия расширений, красть пользовательские данные и создавать зловредные браузерные расширения. Любые реализации, производные расширения или применение этих техник без разрешения Национальной баскетбольной ассоциации не рекомендуются.
Читать дальше →
Всего голосов 33: ↑31 и ↓2+37
Комментарии12

90 лет со дня рождения Игоря Васильевича Поттосина

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


История компьютерных технологий помнит многих героев, но некоторые из них остаются в тени более громких и известных имен. Один из таких людей — Игорь Васильевич Поттосин, советский и российский ученый, внесший огромный вклад в развитие вычислительной математики и математического программирования. Сегодня ему исполнилось бы 90 лет.
Читать дальше →
Всего голосов 32: ↑30 и ↓2+38
Комментарии8

Инфантильность как стратегия: когда она мешает жить, а когда помогает

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

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

Читать далее
Всего голосов 61: ↑46 и ↓15+44
Комментарии147

Редактор ландшафта ZSlice

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


Давно хочется рассказать о проекте ZSlice.

Редактор разрабатывается уже около 5 лет, пережил два прототипа и полное переписывание…
И всё ещё находится в стадии активной разработки.

Вероятно, я бы не созрел написать эту статью ещё несколько лет, пока редактор не будет на 100% вылизан и функционален. Но как верно заметили мои коллеги — этого не будет никогда. Поэтому идеалист внутри был слегка придушен, результатом чего стало написание этой статьи.
Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии8

Информация

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