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

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

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

Код в одну строку или проверка Nethermind с помощью PVS-Studio C# для Linux

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

Рисунок 1

Данная статья приурочена к старту бета-теста PVS-Studio C# для Linux, а также плагина для Rider. По такому прекрасному поводу с помощью данных инструментов была проведена проверка исходного кода продукта Nethermind и в данной статье мы посмотрим на интересные, а иногда и забавные ошибки.
Читать дальше →
Всего голосов 7: ↑6 и ↓1+10
Комментарии1

Аспирантка решила топологическую задачу полувековой давности

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

У Лизы Пиччирилло ушло меньше недели на поиски ответа на старый вопрос о странном узле, открытом более пятидесяти лет назад легендарным математиком Джоном Конвеем.




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

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

Вопрос состоял в следующем: является ли узел Конвея – сложное переплетение верёвки, открытое более пятидесяти лет назад легендарным математиком Джоном Хортоном Конвеем – срезом узла более высокой размерности. «Срезанность» – один из первых естественных вопросов, которые специалисты по теории узлов задают об узлах из пространств высоких разрешений, и математики смогли ответить на него для многих тысяч узлов, имеющих не более 12 пересечений – всех, кроме одного. Узел Конвея, имеющий 11 пересечений, дразнил математиков много десятилетий.
Всего голосов 81: ↑75 и ↓6+90
Комментарии59

Реверс-инжиниринг рендеринга «Ведьмака 3»: Млечный путь, порталы и цветокоррекция

Время на прочтение34 мин
Количество просмотров5.4K
[Предыдущие части анализа: первая и вторая, третья и четвёртая.]

Часть 1: Млечный путь


В предыдущем посте я рассказывал, как в «Ведьмаке 3» реализованы падающие звёзды. Этого эффекта нет в «Крови и вине». В посте я опишу эффект, который есть только в этом DLC: Млечный путь.

Вот видео, в котором показан Млечный путь.


И несколько скриншотов: (1) до вызова отрисовки купола неба, (2) только с цветом Млечного пути, (3) после вызова:

Скриншоты



Готовый кадр только с одним Млечным путём (без цвета неба и звёзд) выглядит так:


Эффект Млечного пути, ставший одним из самых сильных отличий от версии игры 2015 года, вкратце упомянут в разделе «Глупые трюки с небом». Давайте разберёмся, как он реализован!

План изложения будет привычным: сначала мы вкратце объясним всё, относящееся к геометрии, а затем расскажем про пиксельный шейдер.
Всего голосов 10: ↑10 и ↓0+10
Комментарии3

Объясните мне, как вы для себя разобрались в моделях типизаций — они же все размыты

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


Когда я был начинающим, я мог писать простые приложения на C# и C++. Долго игрался с консольными прогами, пощупал десктопные, и в какой-то момент захотел сделать сайт. Меня ждал большой сюрприз — чтобы делать сайты, одного сишарпа мало. Надо ещё знать жс, хтмл, цсс и прочую фронтовую хрень. Я потратил около недели на эти вещи, и понял — не мое. Я мог написать какой то код на джаваскрипт, но он не содержал типов, и я никак не мог взять в толк — как к этому вообще подходить. Это какое-то игрушечное программирование. Ну и забросил к чертям.


Уже потом, работе на третьей, меня перевели в отдел, где делали веб. Я подумывал уволиться, но мне объяснили — там тайпскрипт, тайпскрипт — это такой сишарп для браузера.


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

Читать дальше →
Всего голосов 120: ↑106 и ↓14+115
Комментарии441

systemd десять лет спустя. Историческая и техническая ретроспектива

Время на прочтение18 мин
Количество просмотров50K
Десять лет назад был анонсирован systemd, который устроил революцию в управлении системой дистрибутивов Linux, тем самым разделив пользователей Linux на несколько лагерей. Качество и природа дебатов не сильно улучшилась со времён пламенных войн 2012-2014 годов, и systemd всё ещё остаётся не до конца понятым и изученным инструментом и с технической, и с общественной стороны, несмотря на пристальное внимание к нему сообщества.

Это пост не совсем о том, как пользоваться systemd. Тут, скорее, будет говориться об истории его возникновения, о его компонентах в целом, и о том, как понять систему, которая начиналось как просто PID 1 и стала тем, что я бы назвал middleware современного дистрибутива Linux.

А может, это просто набор крайне вольных переводов различных материалов с блогов, каналов и статей на Arch wiki. Вам решать.

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

Но прежде чем начать речь о systemd, хочу рассказать об init.
Читать дальше →
Всего голосов 76: ↑74 и ↓2+93
Комментарии438

Спецификаторы, квалификаторы и шаблоны

Время на прочтение15 мин
Количество просмотров26K
template<class T>
static inline thread_local constexpr const volatile T x = {};

Такое количество ключевых слов введет в ступор любого неподготовленного разработчика. Но на C++ Russia 2019 Piter Михаил Матросов (mmatrosov) разложил по полочкам квалификаторы и спецификаторы при объявлении переменных и функций.

Мы подготовили для вас текстовую версию доклада, чтобы вы могли в любой момент вернуться и изучить шпаргалки Михаила.
Всего голосов 22: ↑20 и ↓2+27
Комментарии9

Выжимаем все соки: PGO Оптимизация ядра Linux

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

Сложность вычислительных задач и систем растёт с каждым днём. Для бизнеса ускорение кода даже на пару процентов даёт улучшение производительности, заметное снижение издержек и уменьшение задержки(latency). В первую очередь это касается мобильных и встраиваемых систем, высоконагруженных серверов, научных вычислений и 3D-графики. Так был разработан относительно перспективный и молодой метод оптимизации — Profile-Guided Optimization, далее просто PGO-оптимизация. Данный метод эффективно используют такие известные компании, как Google, Mozilla Foundation, Intel, Oracle, IBM и другие. Практически ни один современный веб-браузер не обходится без PGO-оптимизации.

Не так давно компанией Google был предложен набор патчей, включающий PGO-оптимизацию в ядре Linux. Мною был протестирован этот набор патчей в работе и доработан. Мне хотелось бы рассказать об этом методе оптимизации ядра Linux, о том, с какими трудностями можно столкнуться, и как их решить.

Если вас заинтересовала эта тема, вам интересно развитие технологий и тренды крупных компаний, то добро пожаловать под кат.
Читать дальше →
Всего голосов 49: ↑43 и ↓6+56
Комментарии29

Построение цифровой модели удачной стратегии торговли ценными бумагами. Описание. Доказательство

Время на прочтение5 мин
Количество просмотров5.1K
Как вы догадались по заголовку, мое хобби — алготрейдинг. Решил поделится результатами, чтобы продемонстрировать Вам как многокритериальный анализ и подбор коэффициентов (продажи, покупки) индивидуально для каждого инструмента (акции) может отражаться на результате. Для того, чтобы поразить Ваше воображение, продемонстрирую пример с 500% годовых (на самом деле нет). Анализ на исторических данных я буду проводить с помощью торгового терминала «Альфа-директ», но представленный здесь опыт особо не ограничивает Вас в выборе инструмента.


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

Опубликован исходный код Command & Conquer: смотрим, что внутри

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

Компания Electronic Arts открыла исходный код первой Command & Conquer, а также Command & Conqueror: Red Alert. Скачать его можно с GitHub.

Всё содержимое имеет лицензию GPL v3; кроме того, в исходном коде сохранены все комментарии. Отсутствует только changelog использовавшейся при разработке системы контроля версий. Похоже, всё просто недавно выложили на Git.

Я решил изучить, что же происходит внутри этого игрового движка. Не буду описывать каждую строку кода, но, по крайней мере, будет интересно взглянуть на то, какой была разработка на C++ в начале 1990-х.

Изучать мы будем только исходный код «Command & Conquer: Red Alert», потому что он похож на форк первой игры. В репозитории он находится в папке REDALERT.

Статистика


  1. 290 файлов заголовков C++
  2. 296 файлов реализации на C++
  3. 14 файлов ассемблера, содержащих инструкции ассемблера x86
  4. 222090 строк кода на C++

Количество строк кода я получил, подсчитав непустые строки, после чего вычел из них те строки, которые очевидно были комментариями.

Почти все файлы имеют имена в верхнем регистре.

Кроме того, есть файл «RedAlert.vcxproj», поэтому можно предположить, что проект можно собрать в более новых версиях Visual Studio, но этого я не проверял.
Читать дальше →
Всего голосов 82: ↑82 и ↓0+82
Комментарии13

Реверс-инжиниринг микропроцессора Intel 8086

Время на прочтение6 мин
Количество просмотров26K
В июне 1978 года был представлен один из самых влиятельных чипов в полупроводниковой индустрии – Intel 8086. Он положил начало архитектуре х86, которая до сих пор доминирует сегодня в настольных и серверных вычислениях. Давайте заглянем вглубь чипа и разберём внутреннее строение и архитектурные особенности этого микропроцессора.

image

На фото ниже изображён кристалл процессора Intel 8086. На фото виден металлический слой чипа, скрывающий кремний под ним. По краям матрицы расположены тонкие провода, обеспечивающие соединение между площадками на чипе и внешними контактами. Силовые и заземляющие площадки имеют по два соединительных провода для поддержания более высокого тока. Микросхема была очень сложной для своего времени и содержала 29 тысяч транзисторов. Обратите внимание на маркировку кристалла в самом низу – на ней указан логотип Intel, модель процессора и год изготовления микросхемы.

image
Кристалл процессора Intel 8086

image

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

image

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

Про “самую” “реалистичную” “интерпретацию” квантовой механики

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

Мое внимание привлекла статья: Самая реалистичная интерпретация квантовой механики.


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


Давайте приступим к анализу содержимого.


Анализ


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

Начало крайне интригующе. Сразу хочется разобраться с этой лазейкой и понять суть. Однако дальнейший рассказ забывает про эту лазейку.

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

Код игры Command & Conquer: баги из 90-х. Том первый

Время на прочтение13 мин
Количество просмотров12K
image1.png

Американская компания Electronic Arts Inc (EA) выложила в открытый доступ исходный код игр Command & Conquer: Tiberian Dawn и Command & Conquer: Red Alert. Этот код должен помочь игровым сообществам разрабатывать моды и карты, создавать пользовательские юниты и настраивать логику игрового процесса. У всех нас появилась уникальная возможность окунуться в историю разработки, которая очень сильно отличается от современной. Тогда не было сайта StackOverflow, удобных редакторов кода и мощных компиляторов. А ещё тогда не было статических анализаторов, и первое, с чем столкнётся сообщество, — это сотни ошибок в коде. Но с этим-то и поможет команда PVS-Studio, указав на места этих ошибок.
Читать дальше →
Всего голосов 18: ↑16 и ↓2+21
Комментарии27

Разбираемся в моделях кода архитектуры x64

Время на прочтение19 мин
Количество просмотров10K
«Какой моделью кода мне воспользоваться?» — часто возникающий, но нечасто разбираемый вопрос при написании кода для архитектуры х64. Тем не менее, это довольно интересная проблема, и для понимания генерируемого компиляторами машинного кода х64 полезно иметь представление о моделях кода. Кроме того, для тех, кто беспокоится о производительности вплоть до мельчайших команд, выбор модели кода влияет и на оптимизацию.

Информация по этой теме в сети, или где бы то ни было еще, встречается редко. Самым важным из доступных ресурсов является официальный х64 ABI, скачать его можно по ссылке (далее по тексту он будет упоминаться как «ABI»). Часть информации также можно найти на man-страницах gcc. Задача данной статьи — предоставить доступные рекомендации по теме, обсудить связанные с ней вопросы, а так же хорошими примерами через используемый в работе код продемонстрировать некоторые концепты.

Важное замечание: эта статья не является обучающим материалом для начинающих. Перед ознакомлением рекомендуется уверенное владение C и ассемблером, а так же базовое знакомство с архитектурой х64.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+23
Комментарии2

Вероятно, хватит рекомендовать «Чистый код»

Время на прочтение13 мин
Количество просмотров188K
Возможно, мы никогда не сможем прийти к эмпирическому определению «хорошего кода» или «чистого кода». Это означает, что мнение одного человека о мнении другого человека о «чистом коде» обязательно очень субъективно. Я не могу рассматривать книгу Роберта Мартина «Чистый код» 2008 года с чужой точки зрения, только со своей.

Тем не менее, для меня главная проблема этой книги заключается в том, что многие примеры кода в ней просто ужасны.
Читать дальше →
Всего голосов 128: ↑118 и ↓10+137
Комментарии427

Зависимость от новостей: как слезть с крючка отслеживания событий. Личный опыт специалиста по цифровой психологии

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

Ежечасный беспорядочный скроллинг ленты в соцсетях, беглые взгляды на ТОП-5 новостей и последующее неизбежное залипание на них, а также бесчисленные переходы по подпискам с горячими новостями – все это часть опасной повседневности миллионов людей.

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

Автор этих строк также был заложником дофаминовой петли, созданной непрерывным потоком новостей и стремительными переходами от ссылки к ссылке. Все это происходило по десять-пятнадцать раз в сутки, нередко сопровождаясь пустыми дискуссиями в комментах. Как удалось преодолеть такую зависимость – в этой статье.
Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии26

Как я написал интро 4K на Rust — и оно победило

Время на прочтение7 мин
Количество просмотров12K
Недавно я написал своё первое интро 4K на Rust и представил его на Nova 2020, где оно заняло первое место в конкурсе New School Intro Competition. Написать интро 4K довольно сложно. Это требует знания многих различных областей. Здесь я сосредоточусь на методах, как максимально сократить код Rust.


Можете просмотреть демо-версию на Youtube, скачать исполняемый файл на Pouet или получить исходный код с Github.
Всего голосов 41: ↑41 и ↓0+41
Комментарии27

Насколько современные Линуксы отличаются друг от друга

Время на прочтение9 мин
Количество просмотров40K
Более 15 лет я работаю в компании Fast Reports и по роду своей деятельности мне часто приходится иметь дело с Linux, ведя поддержку одного из продуктов. С Linux я знаком несколько дольше — впервые установил Slackware в 1997 году. Соответственно, обладая некоторым опытом, хочу поделиться с вами мнением, чем, на мой взгляд, современные дистрибутивы Linux отличаются друг от друга. Всё описанное в статье является субъективным мнением и не претендует на абсолютную истину.
Читать дальше →
Всего голосов 29: ↑19 и ↓10+15
Комментарии74

Код игры Command & Conquer: баги из 90-х. Том второй

Время на прочтение13 мин
Количество просмотров11K
image1.png

Американская компания Electronic Arts Inc (EA) выложила в открытый доступ исходный код игр Command & Conquer: Tiberian Dawn и Command & Conquer: Red Alert. В исходном коде было обнаружено несколько десятков ошибок с помощью анализатора PVS-Studio, поэтому встречайте продолжение описания найденных дефектов.
Читать дальше →
Всего голосов 19: ↑17 и ↓2+22
Комментарии5

Сон и продолжительность жизни. Пандемия недосыпа

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

О времена, о нравы.


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


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


«Вот бы вообще не спать, я бы столько всего успевал сделать!» — наверное, так мечтал почти каждый.


Есть и те, кто относятся ко сну с пренебрежением: «Лягу сегодня попозже, часа в 3 ночи». Неважно, остались ли незаконченные дела у человека или он решил досмотреть сериал — так повторяется изо дня в день. А вставать, как всегда, по будильнику в 7:00. Кто-то даже гордится тем, как мало он спит. Подумаешь недосып?


Есть ли тут повод для гордости? Скорее наоборот.


Сегодня команда Lifext расскажет:



image

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

D как улучшенный C

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

Уолтер Брайт — «великодушный пожизненный диктатор» языка программирования D и основатель Digital Mars. За его плечами не один десяток лет опыта в разработке компиляторов и интерпретаторов для нескольких языков, в числе которых Zortech C++ — первый нативный компилятор C++. Он также создатель игры Empire, послужившей основным источником вдохновения для Sid Meier’s Civilization.


Цикл статей о Better C

Язык D был с самого начала спроектирован так, чтобы легко и напрямую обращаться к C и, в меньшей степени, C++. Благодаря этому в нём доступны бесчисленные C-библиотеки, стандартная библиотека C и конечно же системные API, которые как правило построены на API языка C.


Но C — это не только библиотеки. На C написаны многие большие и неоценимо полезные программы, такие как операционная система Linux и значительная часть программ для неё. И хотя программы на D могут обращаться к библиотекам на C, обратное неверно. Программы на C не могут обращаться к коду на D. Невозможно (или по крайней мере очень сложно) скомпилировать несколько файлов на D и слинковать их в программу на C. Проблема в том, что скомпилированные файлы на D могут обращаться к чему-то, что существует только в рантайме D, а добавлять его в линковку обычно оказывается непрактично (рантайм довольно объёмный).


Также код на языке D не может существовать в программе, если D не контролирует функцию main(), потому что именно так происходит запуск рантайма D. Поэтому библиотеки на D оказываются недоступны для программ на C, а программы-химеры (смесь C и D) становятся непрактичными. Нельзя взять и «просто попробовать» язык D, добавляя модули на D в существующие модули программы на C.


Так было до тех пор, пока не появился Better C.

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

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность