Pull to refresh
398
0
Evgeny Vrublevsky @VEG

C++ Developer, Reverse Engineer

Send message

Эволюционирующие клеточные автоматы

Reading time 22 min
Views 36K


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

В статье присутствуют Gif (трафик!) и контрастные картинки. У эпилептиков может случиться эпилептический припадок.
Читать дальше →
Total votes 130: ↑129 and ↓1 +128
Comments 34

Окна на чистом WinAPI. Или просто о сложном

Reading time 12 min
Views 138K
Disclaimer

Казалось бы, что WinAPI уходит в прошлое. Давно уже существует огромное количество кросс-платформенных фреймфорков, Windows не только на десктопах, да и сами Microsoft в свой магазин не жалуют приложения, которые используют этого монстра. Помимо этого статей о том, как создать окошки на WinAPI, не только здесь, но и по всему интернету, исчисляется тысячами по уровню от дошколят и выше. Весь этот процесс разобран уже даже не по атомам, а по субатомным частицам. Что может быть проще и понятнее? А тут я еще…

Но не все так просто, как кажется.
Читать дальше →
Total votes 68: ↑67 and ↓1 +66
Comments 94

Трёхмерная графика с нуля. Часть 2: растеризация

Reading time 47 min
Views 53K
image


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

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

Тогда как это удаётся играм?

Ответ заключается в использовании совершенно иного семейства алгоритмов, которое мы исследуем во второй части статьи. В отличие от трассировки лучей, которая получалась из простых геометрических моделей формирования изображений в человеческом глазе или в камере, сейчас мы будем начинать с другого конца — зададимся вопросом, что мы можем отрисовать на экране, и как отрисовать это как можно быстрее. В результате мы получим совершенно другие алгоритмы, которые создают примерно похожие результаты.
Читать дальше →
Total votes 38: ↑37 and ↓1 +36
Comments 2

Французский аэропорт встал из-за сбоя Windows 3.1, операционной системы 1992 года

Reading time 3 min
Views 57K
Аэропорт «Париж-Орли», который находится в четырнадцати километрах от Парижа, остановил свою работу из-за ошибки в Windows 3.1, на которой работает система оповещения о погодных условиях DECOR. Эта версия Windows была выпущена компанией Microsoft в 1992 году и среди нововведений имела игру «Сапёр» для тренировки точности попадания курсором по экрану.

«В Париже есть только три специалиста, которые могут разобраться с проблемами в DECOR. В следующем году один из них уходит на пенсию, и мы не представляем, кто мог бы его заменить», — рассказывает Александр Фиакр, генеральный секретарь объединения авиапрофсоюзов UNSA-IESSA.

image
Читать дальше →
Total votes 59: ↑50 and ↓9 +41
Comments 238

Пишем для UEFI BIOS в Visual Studio. Часть 2 – создаем свой первый драйвер и ускоряем отладку

Reading time 15 min
Views 19K

Введение


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

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


Те, кто заинтересовался — добро пожаловать под кат.
Читать дальше →
Total votes 16: ↑14 and ↓2 +12
Comments 7

Пишем для UEFI BIOS в Visual Studio. Часть 1 — разворачивание среды разработки, компиляция и запуск на отладку

Reading time 8 min
Views 34K

Введение


В этой статье будет описано, как быстро начать программировать для UEFI во фреймворке edk2 в среде Visual Studio, не тратя массу времени на настройку среды обычным способом, по оригинальным мануалам. Достаточно дать команду git clone ... в корневом каталоге диска, и это на самом деле все, среда будет полностью установлена и готова к работе. Требуются 64-разрядная Windows 7 и выше c Visual Studio 2008-2015. Эти два условия не обязательны, но тогда придется немного потрудиться над собиранием системы edk2-Visual Studio в единое целое, краткая памятка будет приведена.

Цель статьи — провести начинающего за руку по первому UEFI проекту, оставаясь в привычной ему среде. Для более опытных людей, надеюсь, будет интересным поработать в VS вместо привычной командной строки, или разобрать подход и перенести его в любимый Eclipse.

Начнем с простых вещей, вывода строки на консоль и русификации (довольно востребованная вещь, причем простая в реализации), потом будет работа с формами в HII (то, что называлось в обиходе страницами BIOS Setup), потом графика, потом Boot Manager, а потом видно будет (с).


Желающие — прошу пожаловать под кат.
Читать дальше →
Total votes 48: ↑48 and ↓0 +48
Comments 16

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

Reading time 9 min
Views 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.

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

Памятка пользователям ssh

Reading time 13 min
Views 1.5M
abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

Оглавление:
  • управление ключами
  • копирование файлов через ssh
  • Проброс потоков ввода/вывода
  • Монтирование удалённой FS через ssh
  • Удалённое исполнение кода
  • Алиасы и опции для подключений в .ssh/config
  • Опции по-умолчанию
  • Проброс X-сервера
  • ssh в качестве socks-proxy
  • Проброс портов — прямой и обратный
  • Реверс-сокс-прокси
  • туннелирование L2/L3 трафика
  • Проброс агента авторизации
  • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
Читать дальше →
Total votes 360: ↑352 and ↓8 +344
Comments 148

Что за болезнь: рак

Reading time 9 min
Views 85K
О раке так или иначе слышали все. Кто-то видел сообщения в социальных сетях, кто-то помогал пережить эту болезнь родным и близким, а кто-то столкнулся с ней лицом к лицу.

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

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


Автор иллюстраций Майкл Ковальски
Читать дальше →
Total votes 47: ↑45 and ↓2 +43
Comments 62

Пора завязывать использовать пробелы вместо табуляции в коде

Reading time 3 min
Views 91K

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

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

Читать дальше →
Total votes 513: ↑389.5 and ↓123.5 +266
Comments 407

Алгоритм визуализации сложных данных

Reading time 9 min
Views 25K
За три года существования Лаборатория данных выпустила около тридцати интерактивных визуализаций, в формате заказных, собственных проектов и бесплатных советов. Мы в лаборатории визуализируем финансовые и научные данные, данные городской транспортной сети, результаты забегов, эффективность маркетинговых кампаний и многое другое. Весной мы получили бронзовую медаль на престижной премии Malofiej 24 за визуализацию результатов Московского марафона.

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

Я хочу поделиться с читателями Хабра результатами своих исследований.


Читать дальше →
Total votes 82: ↑76 and ↓6 +70
Comments 3

Программирование&Музыка: понимаем и пишем VSTi синтезатор на C# WPF. Часть 1

Reading time 26 min
Views 49K

Занимаясь музыкальным творчеством, я часто делаю аранжировки и записи на компьютере — используя кучу всяких VST плагинов и инструментов. Стыдно признаться — я никогда не понимал, как "накручивают" звуки в синтезаторах. Программирование позволило мне написать свой синтезатор, "пропустить через себя" процесс создания звука.


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


Обычно плагины пишутся на C++ (кроссплатформенность, возможность эффективно реализовать алгоритмы), но я решил выбрать более подходящий для меня язык — C#; сфокусироваться на изучении самого синтезатора, алгоритмов, а не технических деталей программирования. Для создания красивого интерфейса я использовал WPF. Возможность использования архитектуры .NET дала возможность библиотека-обертка VST. NET.


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



Предстоит нелегкий путь, если вы готовы — добро пожаловать под кат.


Total votes 55: ↑54 and ↓1 +53
Comments 20

Почему свет движется со скоростью света?

Reading time 5 min
Views 84K
(Прим. пер. ― см. прим. пер. в конце поста)

Почему свет движется со скоростью света? Почему он просто не стоит на месте? Что приводит его в движение (тем более, такое быстрое)?

image

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

Люди в основном воспринимают «вселенную» как «пространство», нечто отдельное от «времени», и честно говоря, они неправы. Пространство и время — не отдельные штуковины. Вселенная сделана из «пространствовремени», прямо так, без пробела. Вы, наверное привыкли к тому, что «год» — это единица времени, а «световой год» — единица расстояния, то есть это разные вещи; но с точки зрения физика это ровным счетом одно и то же (ну, конечно, смотря каким видом физики вы занимаетесь).

В нашей будничной жизни мы исходим из того, что движение — это некое расстояние (пространство), преодоленное за некое время. Однако, если мы решили, что это одно и то же, наше определение движение внезапно становится полной ерундой. «Я прохожу километр за каждый километр, который я прохожу» — кошмар какой-то!

Читать дальше →
Total votes 217: ↑199 and ↓18 +181
Comments 303

Установка Mercurial на shared-хостинг

Reading time 4 min
Views 4.7K
За все время опыта веб-разработки приходилось сталкиваться с различными хостингами на которых работали сайты: от тех, на которых поддерживаются только текстовые форматы (а-ля narod.ru) до виртуальных машин, на которых есть root доступ.

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

Задача была выполнена, и как она была решена — пошагово описано ниже.
Читать дальше →
Total votes 14: ↑10 and ↓4 +6
Comments 15

Software renderer — 2: растеризация и интерполяция атрибутов

Reading time 18 min
Views 21K
Привет. В прошлой статье я описал математику, которая необходима для вывода трехмерной сцены на экран в виде сетки — т.е. мы остановились на моменте получения координат вершин в пространстве экрана. Следующий шаг — это «заполнение» полигонов из которых состоит объект, т.е. поиск пикселей, которые входят в изображение объекта на экране. Процесс поиска этих точек называется растеризацией. Мы так же хотим иметь возможность текстурировать и освещать объекты — для этого необходимо уметь интерполировать атрибуты, заданные в вершинах (например, текстурные координаты, нормали, цвет и другие).

Наши входные данные — это набор полигонов (мы будем рассматривать только треугольники): координаты их вершин (система координат зависит от алгоритма) и значения атрибутов в каждой из этих вершин, которые в дальнейшем будут интерполироваться вдоль поверхности треугольника. Существует несколько подводных камней, которые я рассмотрю в этой статье:
  • Правило заполнения пикселей (filling convention)
  • Точность
  • Коррекция перспективы при интерполяции аттрибутов (perspective-correct interpolation)

Я рассмотрю три подхода к растеризации:
  • «стандартный» алгоритм, использующий наклон граней
  • целый ряд алгоритмов, основанных на использовании уравнений граней полигона (traversal-алгоритмы)
  • алгоритм растеризации в однородных координатах

Так же в конце будет ссылка на проект, который является примером реализации, оттуда же будут и примеры кода.
Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Comments 1

Software renderer — 1: матчасть

Reading time 29 min
Views 83K
Программный рендеринг (software rendering) — это процесс построения изображения без помощи GPU. Этот процесс может идти в одном из двух режимов: в реальном времени (вычисление большого числа кадров в секунду — необходимо для интерактивных приложений, например, игр) и в «оффлайн» режиме (при котором время, которое может быть потрачено на вычисление одного кадра, не ограничено настолько строго — вычисления могут длиться часы или даже дни). Я буду рассматривать только режим рендеринга в реальном времени.

У этого подхода существуют как недостатки так и достоинства. Очевидным недостатком является производительность — CPU не в состоянии конкурировать с современными видеокартами в этой области. К достоинствам стоит причислить независимость от видеокарты — именно поэтому он используется как замена аппаратного рендеринга в случаях, когда видеокарта не поддерживает ту или иную возможность (так называемый software fallback). Существуют и проекты, цель которых — полностью заменить аппаратный рендеринг программным, например, WARP, входящий в состав Direct3D 11.

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

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

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

В конце статьи будет ссылка на гитхаб проекта, который можно рассматривать как пример реализации.
Читать дальше →
Total votes 95: ↑90 and ↓5 +85
Comments 51

«Digital Rain» для Windows в 314 байтах

Reading time 3 min
Views 27K
В комментариях к недавнему топику возникло обсуждение: до какого размера можно ужать Windows EXE, печатающий в консоли «Hello, World!» Ответ: 268 байт, меньшие файлы Windows просто отказывается загружать.

Раз для «Hello, World!» предел возможного ужатия уже достигнут, то мне стало интересно, до какой степени удастся ужать программу, делающую хоть что-нибудь более интересное.

Сначала похвастаюсь результатом: моя программа всего на 46 байт больше теоретического минимума!



base64
TVprZXJuZWwzMgAAUEUAAEwBAQC4AwABAPdlEIlFEMN4AA8BCwEFDL0UEEAAjXyNAFfraD
gQAAAzyesoDAAAAAAAQAAAEAAAAAIAAAAAAAACAgoCBAAAAAAAAAAAQAAAAAIAALFQ68AD
AAAAEgEAAAAAAABQABkAABAAAFAAGQADAAAAAAAAAAAAAAAoEQAAKAAAAAAAAAAAAAAA/9
Wr4vvrEQAAMAAAABAAADkBAAABAAAAi/df6wMAAAAzybFQV4sHgPwZdygPttyNHJvB4waN
HItQweAYwegei0RFOIhEMwKIpDPC/v///9WIJDNY/sSA/GR8Av/Vq+LFjUVcUFH/dWhWZI
tBMItAEP9wHP9VWOuiV3JpdGVDb25zb2xlT3V0cHV0QQBsEAAAAAAAAAAAAAACAAAAbBA=

(Если найдётся доброволец захостить эти 314 байт, добавлю сюда ссылку.)


Пояснения
Total votes 49: ↑45 and ↓4 +41
Comments 18

Детектор углекислого газа МАСТЕР KIT MT 8057

Reading time 2 min
Views 33K
Как известно, причиной многих проблем с самочувствием и синдрома хронической усталости может быть переизбыток углекислого газа (CO2) в воздухе помещения (megamozg.ru/post/4982). Практически во всех городских квартирах вентиляция не достаточна для того, чтобы поддерживать комфортный уровень CO2. Очень важно иметь дома измеритель уровня CO2 для того, чтобы хотя бы вовремя открывать форточку.

Детектор углекислого газа МАСТЕР KIT MT 8057 сейчас фактически самый дешёвый на рынке. В интернет-магазине MedGadgets от стоит 4950 рублей.



Прибор показывает уровень CO2 и температуру, его можно подключить к компьютеру для построение графиков изменения CO2 в течение длительного времени.
Читать дальше →
Total votes 16: ↑11 and ↓5 +6
Comments 28

Контроль через вину

Reading time 4 min
Views 90K


Много лет назад я был назначен ответственным за пожарную безопасность в одном офисе IT-компании. Выглядело это так: «Распишись здесь и здесь, всё, твою фамилию на щитке повесим, больше ничего не надо». Проблема была в том, что я нашёл, что же действительно означает такая роспись. И начал «строить» всех в офисе по соблюдению правил безопасности. Если вы не пробовали, сообщаю — зачастую очень сложно делать в обычных условиях. В чём проблема? В том, что большая часть людей считает эту норму условностью. Все нарушают, и мы будем.

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

Знаете, что мы в результате только что сделали внутри компании или отдела? Мы создали ситуацию, в которой виноват каждый человек отдельно, но никто в целом. И это очень важный и жестокий инструмент контроля.
Читать дальше →
Total votes 148: ↑125 and ↓23 +102
Comments 102

Простая в использовании обертка над LoadLibrary() и GetProcAddress()

Reading time 7 min
Views 21K

Преамбула


Использование динамически связываемых библиотек (DLL), как известно, предполагает один из двух способов подключения: связывание во время загрузки (load-time linking) и связывание во время выполнения (run-time linking). В последнем случае нужно использовать предоставляемый операционной системой API для загрузки нужного модуля (библиотеки) и поиска в нем адреса необходимой процедуры. Существует множество оберток, но, к сожалению, все встречавшиеся мне сильно усложнены и перегружены лишним кодом. Предлагаемое решение изначально предназначено для вызова функций, хранящихся в DLL из исполняемых модулей (EXE), отличается относительной простотой реализации, и (что гораздо более важно) простотой использования в клиентском коде.
Читать дальше →
Total votes 21: ↑15 and ↓6 +9
Comments 6

Information

Rating
Does not participate
Location
Финляндия
Date of birth
Registered
Activity