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

C++, C#, F#, CLR, CoreCLR, H/W, CI/CD

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

Подборка бесплатных утилит компьютерной криминалистики (форензики)

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

В этой статье представлены бесплатные инструменты для проведения расследования инцидентов информационной безопасности.
Читать дальше →
Всего голосов 49: ↑48 и ↓1+47
Комментарии18

«Магическая константа» 0x5f3759df

Время на прочтение9 мин
Количество просмотров120K
В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для быстрого вычисления обратного квадратного корня.

Вот полная реализация этого алгоритма:

float FastInvSqrt(float x) {
  float xhalf = 0.5f * x;
  int i = *(int*)&x;  // представим биты float в виде целого числа
  i = 0x5f3759df - (i >> 1);  // какого черта здесь происходит ?
  x = *(float*)&i;
  x = x*(1.5f-(xhalf*x*x));
  return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

image

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что корни уходят намного дальше – к Ardent Computer, где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степеней от -1 до 1.

Да, понадобится немного математики, но школьного курса будет более, чем достаточно.
Читать дальше →
Всего голосов 212: ↑210 и ↓2+208
Комментарии188

Описание алгоритмов сортировки и сравнение их производительности

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

Вступление


На эту тему написано уже немало статей. Однако я еще не видел статьи, в которой сравниваются все основные сортировки на большом числе тестов разного типа и размера. Кроме того, далеко не везде выложены реализации и описание набора тестов. Это приводит к тому, что могут возникнуть сомнения в правильности исследования. Однако цель моей работы состоит не только в том, чтобы определить, какие сортировки работают быстрее всего (в целом это и так известно). В первую очередь мне было интересно исследовать алгоритмы, оптимизировать их, чтобы они работали как можно быстрее. Работая над этим, мне удалось придумать эффективную формулу для сортировки Шелла.

Во многом статья посвящена тому, как написать все алгоритмы и протестировать их. Если говорить о самом программировании, то иногда могут возникнуть совершенно неожиданные трудности (во многом благодаря оптимизатору C++). Однако не менее трудно решить, какие именно тесты и в каких количествах нужно сделать. Коды всех алгоритмов, которые выложены в данной статье, написаны мной. Доступны и результаты запусков на всех тестах. Единственное, что я не могу показать — это сами тесты, поскольку они весят почти 140 ГБ. При малейшем подозрении я проверял и код, соответствующий тесту, и сам тест. Надеюсь, что статья Вам понравится.
Читать дальше →
Всего голосов 80: ↑76 и ↓4+72
Комментарии55

Отзыв сертификатов не работает

Время на прочтение11 мин
Количество просмотров58K
Прямо сейчас у нас есть небольшая проблема, но на мой взгляд, со временем ситуация может только ухудшиться. Всё больше и больше сайтов получают сертификаты — необходимые документы для внедрения HTTPS — но у нас нет механизма для защиты от злоупотреблений.

Сертификаты


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


Процент сайтов из первого миллиона самых популярных сайтов по статистике Alexa, где стоит редирект на версию HTTPS
Читать дальше →
Всего голосов 103: ↑103 и ↓0+103
Комментарии123

Делаем любой объект потокобезопасным

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

В этих 3-ех статьях я детально расскажу об атомарных операциях, барьерах памяти и о быстром обмене данными между потоками, а так же о «sequence-points» на примере «execute-around-idiom», а заодно постараемся вместе сделать что-нибудь полезное — умный указатель, который делает любой объект потоко-безопасным для любых операций с его членами переменными или функциями. А затем покажем как используя его достичь производительности высоко-оптимизированных lock-free алгоритмов на 8 — 64 ядрах.
Читать дальше →
Всего голосов 57: ↑57 и ↓0+57
Комментарии28

Что намазать на зубы, чтобы они не выпали

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


Хорошо зафиксированный пациент в анестезии не нуждается

По многочисленным просьбам трудящихся сегодня мы будем заниматься очень важными вопросами:


  • Как правильно мазать зубы пальцем?
  • Хорошо ли растворяются пломбы в кислоте?
  • Почему больно, когда сверлят зубы дрелью без анестезии?
  • Зачем мазать зубы зеленкой?
  • Лечение кариеса на дому
  • Глубокое микрофторирование эмали

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

Читать дальше →
Всего голосов 209: ↑206 и ↓3+203
Комментарии693

UAC Bypass или история о трех эскалациях

Время на прочтение14 мин
Количество просмотров34K
На работе я исследую безопасность ОС или программ. Ниже я расскажу об одном из таких исследований, результатом которого стал полнофункциональный эксплоит типа UAC bypass (да-да, с source-code и гифками).


Ах, да, в Майкрософт сообщили, они сделали вид, что им не интересно.
Алярм! Под катом около 4 мегабайт трафика – картинок и гифок.
Поднять права
Всего голосов 60: ↑58 и ↓2+56
Комментарии15

«Летающие мошки» и «стеклистые червяки» в глазах, или откуда берутся «битые пиксели» в стекловидном теле

Время на прочтение10 мин
Количество просмотров560K
Поднимите голову и посмотрите на что-нибудь равномерно окрашенное, на какой-то светлый фон (на снег, на небо без солнца). Если перед глазами вдруг начали медленно проплывать вот такие примерно штуки:

image

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

Но давайте для понимания полной ситуации поговорим о том, что это за явление вообще и откуда оно берётся.
Читать дальше →
Всего голосов 87: ↑86 и ↓1+85
Комментарии212

Исключения в Windows x64. Как это работает. Часть 2

Время на прочтение14 мин
Количество просмотров11K
Опираясь на материал, описанный в первой части данной статьи, мы продолжим обсуждение темы обработки исключений в Windows x64. И в этой части мы подробно рассмотрим те области PE образа, которые задействуются в процессе обработки исключений. Описываемый материал требует знания базовых понятий, таких, как пролог, эпилог, кадр функции и понимания базовых процессов, таких, как действия пролога и эпилога, передача параметров функции и возврат результата функции. Если читатель не знаком с вышеперечисленным, то перед прочтением рекомендуется ознакомиться с материалом из первой части данной статьи.
Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии0

Справочник по антеннам для радаров

Время на прочтение15 мин
Количество просмотров107K
Статья на перевод предложена alessandro893. Материал взят с обширного справочного сайта, описывающего, в частности, принципы работы и устройство радаров.

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

image
Слева – изотропная антенна, справа – направленная

Дипольная антенна





over9000 картинок
Всего голосов 63: ↑60 и ↓3+57
Комментарии23

Домашнее задание от МТИ: пишем нейросеть для манёвров в дорожном трафике

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


DeepTraffic — интересная интерактивная игра, поучаствовать в которой может любой желающий, а студенты Массачусетского технологического института (МТИ), которые изучают курс глубинного обучения в беспилотных автомобилях, обязаны показать хороший результат в этой игре, чтобы им засчитали выполненное задание.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии32

Мы добрались до побочных эффектов лазерной коррекции зрения — и ещё до диагностики

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


Начнём с диагностики, потом перейдём к жести, а потом я покажу много фотографий оборудования.

В 90-х роговицу исследовали ультразвуковым «карандашиком». Вместо полноценной карты роговицы было 10-15 замеров на глаз, по которым хирург составлял мысленное представление о том, что там у пациента. В 92-м году распространились топографы, основанные на системе Пласидо. Идея в том, что если сделать проекцию световых колец на роговицу, то на идеальной они будут круглыми, а любое искажение даст искажение от окружности. То есть получалась такая мишень в глазу в идеальном случае, и яйцо при астигматизме. Так и смотрели — светили лучом через диск Пласидо. Сейчас такие диски у многих хирургов в кармане на всякий случай.

Метод был, конечно, очень примерный. Потом пришла автоматика: эти же диски стали в 32-36 колец вместо 8 или 10, и аппарат их фотографировал, а затем распознавал и рассчитывал искажения, и выдавал «карту глубин» глаза.
Читать дальше →
Всего голосов 77: ↑77 и ↓0+77
Комментарии144

История одного бага: выравнивание данных на x86

Время на прочтение14 мин
Количество просмотров16K
Однажды мне пришлось вычислять сумму векторов целых чисел.

Звучит необычно. Кому понадобится делать это в реальной жизни? Обычно такие вычисления встречаются только в задачках из начальной школы или бенчмарках компилятора. Но сейчас это случилось на самом деле.

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

  • её можно эффективно выполнить с помощью процессорной инструкции ADC (к сожалению, эта функция недоступна в C);
  • её можно выполнить на словах любого размера (можете добавить по желанию восьмибайтные значения, только результат следует уменьшить до двух байт и добавить все биты переполнения);
  • она нечувствительна к порядку следования байтов (удивительно, но это так).
Читать дальше →
Всего голосов 38: ↑35 и ↓3+32
Комментарии13

Lock-free структуры данных. Iterable list

Время на прочтение7 мин
Количество просмотров14K
Lock-free list является основой многих интересных структур данных, — простейшего hash map, где lock-free list используется как список коллизий, split-ordered list, построенный целиком на списке с оригинальным алгоритмом расщепления bucket'а, многоуровневого skip list, являющегося по сути иерархическим списком списков. В предыдущей статье мы убедились, что можно придать такую внутреннюю структуру конкурентному контейнеру, чтобы он поддерживал thread-safe итераторы в динамичном мире lock-free контейнеров. Как мы выяснили, основным условием для того, чтобы lock-free контейнер стал итерабельным, является стабильность внутренней структуры: ноды не должны физически удаляться (delete). В этом случае итератор суть просто (быть может, составной) указатель на ноду с возможностью перехода к следующей (оператор инкремента).

Можно ли такой подход распространить на lock-free list?.. Посмотрим…
Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии0

Lock-free структуры данных. Эволюция стека

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

В предыдущих своих заметках я описал основу, на которой строятся lock-free структуры данных, и базовые алгоритмы управления временем жизни элементов lock-free структур данных. Это была прелюдия к описанию собственно lock-free контейнеров. Но далее я столкнулся с проблемой: как построить дальнейший рассказ? Просто описывать известные мне алгоритмы? Это довольно скучно: много [псевдо-]кода, обилие деталей, важных, конечно, но весьма специфических. В конце концов, это есть в опубликованных работах, на которые я даю ссылки, и в гораздо более подробном и строгом изложении. Мне же хотелось рассказать интересно об интересных вещах, показать пути развития подходов к конструированию конкурентных контейнеров.
Хорошо, — подумал я, — тогда метод изложения должен быть такой: берем какой-то тип контейнера — очередь, map, hash map, — и делаем обзор известных на сегодняшний день оригинальных алгоритмов для этого типа контейнера. С чего начать? И тут я вспомнил о самой простой структуре данных — о стеке.
Читать дальше →
Всего голосов 73: ↑73 и ↓0+73
Комментарии14

Лямбды и анонимные классы: кто больше жрёт

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

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

Читать дальше →
Всего голосов 74: ↑69 и ↓5+64
Комментарии35

Сравнение библиотек логирования

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


В сети огромное количество площадок формата Q&A где задаются вопросы из разряда:

  • Предложите С++ логер? (C++ logging framework suggestions)
  • Какой наиболее эффективный потоко-безопасный С++ логер? (What is the most efficient thread-safe C++ logger)
  • Библиотека логирования для игр (Logging library for c games)
  • Асинхронный потоко-безопасный С++ логер? (Asynchronous thread-safe logging in C++)

Люди делятся своим опытом и знаниями, но формат таких площадок позволяет лишь показать личные предпочтения отвечающего. К примеру, одним из самых производительных логеров чаще всего называют Pantheios, который даже по тестам производителя тратит больше 100 секунд на запись 1M строк лога, на современном железе это около 30 секунд, быстро ли это?

В этой статье я сравню наиболее известные и заслуженные логеры последних лет и несколько относительно молодых логеров по более чем 25 критериям.
Читать дальше →
Всего голосов 59: ↑59 и ↓0+59
Комментарии42

Современная операционная система: что надо знать разработчику

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

Александр Крижановский (NatSys Lab.)


Александр Крижановский

Нас сегодня будет интересовать операционная система – ее внутренности, что там происходит… Хочется поделиться идеями, над которыми мы сейчас работаем, и отсюда небольшое вступление – я расскажу о том, из чего состоит современный Linux, как его можно потюнить?

По моему мнению, современная ОС – это плохая штука.




Дело в том, что на картинке изображены графики сайта Netmap (это штуковина, которая позволяет вам очень быстро захватывать и отправлять пакеты сетевого адаптера), т.е. эта картинка показывает, что на одном ядре с разной тактовой частотой до 3 ГГц Netmap позволяет 10 Гбит – 14 млн. пакетов в сек. отрабатывать уже на 500 МГц. Синенькая линия – это pktgen – самое быстрое, что, вообще, есть в ядре Linux’а. Это такая штуковина – генератор трафика, который берет один пакет и отправляет его в адаптер много раз, т.е. никаких копирований, никакого создания новых пакетов, т.е., вообще, ничего – только отправка одного и того же пакета в адаптер. И вот оно настолько сильно проседает по сравнению с Netmap (то, что делается в user-space показано розовой линией), и оно вообще где-то там внизу находится. Соответственно, люди, которые работают с очень быстрыми сетевыми приложениями, переезжают на Netmap, Pdpdk, PF_RING – таких технологий море сейчас.
Читать дальше →
Всего голосов 102: ↑94 и ↓8+86
Комментарии51

Занимательная математика командной строки

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

Если вы пользователь Linux, Free/Open BSD или другой свободной ОС, есть вероятность, что интерфейс командной строки вам не чужд. В таком случае можно использовать командную оболочку для простых арифметических действий. Для этого не нужно устанавливать дополнительных программ, все уже есть в базовом наборе операционной системы. Они позволяют качественно заменить привычный калькулятор на столике счетовода.


к awk-гадалке ходи
Всего голосов 51: ↑49 и ↓2+47
Комментарии40

Дистрибуция неопубликованных в Store приложений Windows 10

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

Раньше, для того, чтобы установить Windows Store приложение, требовалось чтобы или приложение было опубликовано в магазине, или чтобы устройство было разлочено лицензией разработчика. Теперь, с выходом Windows 10, вполне можно распространять приложение и минуя магазин. Кроме того, установка на устройство неопубликованных в Store приложений может производиться не с целью распространения, а с целью тестирования.

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

О том как можно устанавливать приложения Windows Store на устройства различного типа читайте дальше.
Читать дальше →
Всего голосов 41: ↑40 и ↓1+39
Комментарии4

Информация

В рейтинге
Не участвует
Откуда
München, Bayern, Германия
Зарегистрирован
Активность

Специализация

System Administration, Software Architect
Lead
C#
Docker
Linux
Git
.NET
C++
Multiple thread
C++ Boost
Windows API
System Programming