• Общая теория и археология виртуализации x86

      Введение


      Авторский коллектив


      Автор: Антон Жбанков (AntonVirtual, cloudarchitect.cc)
      Со-авторы: Григорий Прялухин, Евгений Парфенов

      Общие понятия виртуализации


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

      Наверное, самым близким определением понятия “виртуализация” будет “абстрагирование” из объектно-ориентированного программирования. Или, если переводить на нормальный русский язык — это сокрытие реализации за абстрактным интерфейсом. Что, конечно, все сразу объяснило. Попробуем еще раз, но для тех, кто не изучал программирование.
      Виртуализация — сокрытие конкретной реализации за универсальным стандартизованным методом обращения к ресурсам / данным.

      Если попробовать применить на практике данное определение, то окажется, что оно вполне работает на совершенно неожиданных предметах. Скажем, часы. Вот были придуманы несколько тысяч лет назад солнечные часы, а в средневековье были придуманы механические. Что же там общего? Солнце и какие-то шестеренки? Бред какой-то. А потом кварцевые генераторы и все остальное.
      Суть в том, что мы имеем стандартный интерфейс — стрелочный или цифровой указатель, который в универсальной стандартной форме указывает текущее время. Но имеет ли для нас значение как конкретно реализован этот механизм внутри коробки, если время указывается с достаточной для нас точностью?
      — Позвольте, — можете сказать вы, — но я-то думал, что виртуализация про машины, процессоры там, и так далее!
      Да, она и про машины, и про процессоры, но это лишь частный случай. Давайте рассмотрим более широко, раз уж статья смело претендует на общую теорию.
      Читать дальше →
    • Реалистичная анимация персонажей в играх с помощью ИИ



        Разработчиками из Эдинбургского Университета представлен новый алгоритм для создания реалистичных движений персонажей в играх. Обученная на Motion Capture траекториях нейросеть пытается копировать движения реальных людей, но при этом адаптирует их под персонажей видеоигр.

        Одна нейросеть способна управлять сразу несколькими действиями в игре. Открывание дверей, перенос предметов, использование мебели. При этом она динамично изменяет положения ног и рук, чтобы персонаж мог реалистично держать ящики разного размера, садиться на разные по размеру стулья, а также пролезать в проходы разной высоты.
        Читать дальше →
        • +29
        • 8.9k
        • 4
      • Новый алгоритм поиска пути в Factorio

        • Translation

        На прошлой неделе мы говорили в своём блоге об изменениях, которые позволят врагам (biters) не наталкиваться друг на друга, но это было не единственное обновление, связанное с biter-ами. Совпало так, что в обновления этой недели вошло то, над чем мы работали предыдущие несколько недель — обновление системы поиска пути для врагов.

        Поиск пути


        Когда юнит хочет куда-то переместиться, ему сначала нужно понять, как туда добраться. В самом простом случае можно двигаться прямиком к цели, но на пути иногда возникают препятствия — скалы, деревья, гнёзда врагов (spawners), юниты игрока. Чтобы проложить дорогу, мы должны сообщить функции поиска пути (pathfinder) текущую и конечную позиции, а pathfinder вернёт нам (возможно, через много тактов) путь, который просто является набором промежуточных точек (waypoints), по которым должен двигаться юнит, чтобы добраться до места назначения.

        Для выполнения своей работы pathfinder использует алгоритм под названием A* (произносится «A star»). Простой пример поиска пути при помощи A* показан на видео: biter хочет найти путь в обход скал. Функция поиска пути начинает исследовать карту вокруг biter-а (исследование показано белыми точками). Сначала она пытается пойти напрямик к цели, но как только достигает скал, «разливается» в обе стороны, пытаясь найти позицию из которой снова можно будет двигаться к цели.
        Читать дальше →
      • От киберпанка до DevSecOps: 7 книг, ради которых DevSecOps-инженеру английский выучить всё-таки стоит

          Тех, кого раньше бы окрестили киберпанками, сегодня величают себя более политкорректно: DevSecOps. Помните «весь спектр радуги», из легендарного фильма «Хакеры»? 1) Зелёная (всемирная среда UNIX); 2) ярко-оранжевая (критерии защиты данных компьютера по стандартам DOD); 3) розовая рубашка (справочник IBM; прозвали так из-за дурацкой розовой рубашки на мужике с обложки); 4) книга дьявола (библия UNIX); 5) книга дракона (разработка компилятора); 6) красная книга (сети национального управления безопасности; известна как мерзкая красная книга, которой нет места на полке).


          Пересмотрев в очередной раз этот легендарный фильм, я задался вопросом: а что бы сегодня читали киберпанки прошлого, ставшие в наше время DevSecOps’ами? И получился обновлённый, более современный вариант этого радужного спектра:


          – Фиолетовая (руководство APT-хакера)
          – Чёрная (корпоративная кибер-не-безопасность)
          – Красная (справочник красноармейца)
          – Книга бизона (культивирование DevOps-культуры в сообществе разработчиков; названа так из-за зверя с обложки)
          – Жёлтая паутина (жёлтая, в смысле злободневная, подборка уязвимостей всемирной паутины)
          – Коричневая (книга багоборца)
          – Книга возмездия (библия безопасной разработки кода)


          Читать дальше →
          • +12
          • 9.2k
          • 5
        • Приятное с полезным или разработка под ASIO на C++

          • Tutorial

          Будучи потенциальным программистом и любителем электрогитар, я не мог остаться в стороне от разработки музыкального ПО. Все кто когда-либо пытался подключить электрогитару к компьютеру на ОС Windows, используя какой-либо гитарный процессор, знают, что зачастую для этих целей требуется наличие интерфейса ASIO (Возможно и другие, но ASIO наиболее популярен). Это связано с тем, что для обработки звукового ввода и вывода тратится значительное время, и, как следствие, при игре на инструменте слышно неприятную задержку, которая весьма сильно затрудняет игру. ASIO позволяет пропустить этап микширования звука при его выводе и, соответственно, значительно уменьшить задержку. Подробнее об этом здесь.
          Читать дальше →
        • Манипуляция сознанием. Почему так просто?



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

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

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

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

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

            Это не статья по психологии и не статья по философии, хотя бы потому, что в этой статье не будет приведено ни одной ссылки.
            Читать дальше →
          • Доступное объяснение алгоритма коллапса волновой функции

            • Translation
            Алгоритм коллапса волновой функции (Wavefunction Collapse Algorithm) учит компьютер импровизировать. На входе он получает архетипичные данные и создаёт процедурно генерируемые данные, похожие на исходные.


            (Источник)

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


            (Источник)

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

            Большинство реализаций и объяснений коллапса волновой функции — это полная, оптимизированная по скорости версия алгоритма. Разумеется, все они важны и необходимы, но в них сложно разобраться с нуля. В этом посте я буду объяснять всё понятным я простым языком, сосредоточившись на версии Wavefunction с ограничениями, которую я назвал Even Simpler Tiled Model. Кроме того, я выложил пример реализации ESTM на Github. Код в нём неэффективный и медленный, но очень хорошо читаемый и подробно прокомментирован. Как только вы разберётесь в технологии, лежащей в основе ESTM, то станете ближе к пониманию более сложных версий алгоритма. Если хотите понять алгоритм коллапса волновой функции, то эта статья будет хорошим началом.
            Читать дальше →
          • Unity: бесконечный процедурно генерируемый город, получаемый при помощи алгоритма WFC (коллапс волновой функции)

            • Translation
            Привет, Хабр!

            Как законодатели мод по теме Unity на российском рынке предлагаем вам почитать интересное исследование о практическом использовании алгоритма WFC (Wave Function Collapse), построенного по образу и подобию известного принципа квантовой механики и очень удобного при процедурной генерации уровней в играх. Ранее на Хабре уже публиковался подробный рассказ об этом алгоритме. Автор сегодняшней статьи Мариан Кляйнеберг рассматривает алгоритм в контексте трехмерной графики и генерации бесконечного города. Приятного чтения!

            Читать дальше →
          • Создаем музыку: когда простые решения превосходят по эффективности глубокое обучение

            • Translation
            Представляю вашему вниманию перевод статьи «Создаем музыку: когда простые решения превосходят по эффективности глубокое обучение» о том, как искусственный интеллект применяется для создания музыки. Автор не использует нейронные сети для генерации музыки, а подходит к задаче, исходя из знания теории музыки, на основе мелодии и гармонии. Другой особенностью статьи является метод сравнения музыкальных произведений на основе матриц самоподобия. Такой подход, конечно, не является исчерпывающим, но он полезен как промежуточный шаг для генерации качественной музыки методами машинного обучения.

            Читать дальше →
          • Как Microsoft отсекает шум, чтобы создавать полезный и красивый звуковой мир

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

              Беннетт сочинил, исполнил и обработал более 900 версий звука оповещения календаря Windows 10, прежде чем выбрал идеальную.

              «Это было долго, зато хорошо получилось», — вспоминал Беннетт, пожав плечами, во время недавнего визита в свою студию звукозаписи в Редмонде. В звукоизолированной комнате, освещенной свечами, расположены микшер, несколько высококачественных студийных мониторов и больших ЖК-экранов, а в центре — полнооктавная клавиатура синтезатора.

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

              image
              Читать дальше →
            • Советские мечты о будущем



                Помните очаровательного котика, которые чихал в заставке советского мультфильма? Мы помним, и нашли его — вместе с ворохом другой рисованной фантастики. В детстве она пугала и обескураживала, поскольку поднимала серьезные, взрослые темы. Настала пора пересмотреть старые мультфильмы, чтобы узнать, о каком будущем мечтали в той стране.
                Читать дальше →
              • Интуитивный RL (Reinforcement Learning): введение в Advantage-Actor-Critic (A2C)

                  Привет, Хабр! Предлагаю вашему вниманию перевод статьи Rudy Gilman и Katherine Wang Intuitive RL: Intro to Advantage-Actor-Critic (A2C).

                  Специалисты по обучению с подкреплением (RL) подготовили множество отличных учебных пособий. Большинство, однако, описывают RL в терминах математических уравнений и абстрактных диаграмм. Нам нравится думать о предмете с другой точки зрения. Сама RL вдохновлена ​​тем, как учатся животные, так почему бы не перевести лежащий в основе этого механизм RL обратно в природные явления, которые он призван имитировать? Люди учатся лучше всего через истории.


                  Это история о модели Actor Advantage Critic (A2C). Модель «Субъект-критик» — это популярная форма модели Policy Gradient, которая сама по себе является традиционным алгоритмом RL. Если вы понимаете A2C, вы понимаете глубокий RL.


                  Читать дальше →
                • Рендеринг шрифтов с помощью масок покрытия, часть 1

                  • Translation
                  image

                  Когда мы приступали к разработке нашего профилировщика производительности, то знали, что будем выполнять почти весь рендеринг UI самостоятельно. Вскоре нам пришлось решать, какой подход выбрать для рендеринга шрифтов. У нас были следующие требования:

                  1. Мы должны иметь возможность рендерить любой шрифт любого размера в реальном времени, чтобы адаптироваться к системным шрифтам и их размерам, выбранным пользователями Windows.
                  2. Рендеринг шрифтов должен быть очень быстрым, никаких торможений при рендеринге шрифтов не допускается.
                  3. В нашем UI куча плавных анимаций, поэтому текст должен иметь возможность плавно перемещаться по экрану.
                  4. Он должен быть читаемым при малых размерах шрифтов.

                  Не будучи в то время большим специалистом в этом вопросе, я поискал информацию в Интернете и нашёл множество техник, используемых для рендеринга шрифтов. Также я пообщался с техническим директором Guerrilla Games Михилем ван дер Леу. Эта компания экспериментировала со множеством способов рендеринга шрифтов и их движок рендеринга был одним из лучших в мире. Михиль вкратце изложил мне свою идею новой техники рендеринга шрифтов. Хотя нам вполне было бы достаточно уже имевшихся техник, меня эта идея заинтриговала и я приступил к её реализации, не обращая внимания на открывшийся мне чудесный мир рендеринга шрифтов.
                  Читать дальше →
                • Решение японских кроссвордов с помощью SAT солвера

                    На Хабре было несколько статей по решению японских кроссвордов, где авторы придумывали различные способы как такие кроссворды решать. В комментарии к статье Решение цветных японских кроссвордов со скоростью света я высказал мысль, что, поскольку, решение японских кроссвордов является NP-полной задачей, то и решать их надо с использованием соответствующего инструмента, а именно SAT солвером. Поскольку моя идея была встречена весьма скептически, я решил попробовать ее реализовать и сравнить результаты с другими подходами. Что из этого получилось можно узнать под катом.
                    Читать дальше →
                  • Конкурс по программированию: Торговля

                      UPDATE: Объявления для участников.
                      UPDATE 2: Промежуточные результаты и объявления.

                      Компания Hola вновь объявляет конкурс по программированию! Победителей ожидают призы:

                      1. Первое место: 3000 USD.
                      2. Второе место: 2000 USD.
                      3. Третье место: 1000 USD.
                      4. Жюри может присудить по своему усмотрению специальный приз в 400 USD.
                      5. Если Вы отправите кому-то ссылку на этот конкурс, поставив наш адрес в CC, и этот человек займёт призовое место, Вы получите половину суммы приза (разумеется, не в ущерб награде победителя). За одного победителя такую награду может получить только один человек — тот, кто отправил ссылку первым.

                      Авторы интересных решений будут приглашены на собеседования.



                      Правила


                      Условия конкурса на английском языке размещены на GitHub. Ниже — перевод на русский язык.
                      Читать дальше →
                    • Полезные методы массивов и объектов в JavaScript

                      • Translation
                      Автор статьи, перевод которой мы сегодня публикуем, говорит, что её идею подсказал ему один из выпусков подкаста Syntax FM, в котором давался обзор полезных методов объектов и массивов в JavaScript. Эти методы помогают разработчикам писать чистый и читабельный код. Их применение снижает потребность в сторонних библиотеках наподобие Lodash.

                      image
                      Читать дальше →
                      • +33
                      • 38.9k
                      • 7
                    • Ричард Хэмминг: Глава 14. Цифровые фильтры — 1

                      • Translation
                      «Цель этого курса — подготовить вас к вашему техническому будущему.»


                      imageПривет, Хабр. Помните офигенную статью «Вы и ваша работа» (+219, 2372 в закладки, 375k прочтений)?

                      Так вот у Хэмминга (да, да, самоконтролирующиеся и самокорректирующиеся коды Хэмминга) есть целая книга, написанная по мотивам его лекций. Мы ее переводи, ведь мужик дело говорит.

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

                      Мы уже перевели 16 (из 30) глав.

                      Глава 14. Цифровые фильтры — 1


                      (За перевод спасибо Максиму Лавриненко и Пахомову Андрею, которые откликнулись на мой призыв в «предыдущей главе».) Кто хочет помочь с переводом — пишите в личку или на почту magisterludi2016@yandex.ru

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

                      Большая часть того, что компьютеры обрабатывают, — это сигналы из разных источников, и мы уже обсуждали, почему они часто бывают в виде потока чисел, полученного из системы дискретизации. Линейная обработка, единственная, на которую у меня хватает времени в рамках этой книги, подразумевает наличие цифровых фильтров. Чтобы продемонстрировать, как всё происходит в реальной жизни, сначала я расскажу вам о том, как я стал работать с ними, и далее о том, чем я занимался.
                      Читать дальше →
                      • +22
                      • 7.9k
                      • 5
                    • Введение в CMake

                      imageCMake — кроcсплатформенная утилита для автоматической сборки программы из исходного кода. При этом сама CMake непосредственно сборкой не занимается, а представляет из себя front-end. В качестве back-end`a могут выступать различные версии make и Ninja. Так же CMake позволяет создавать проекты для CodeBlocks, Eclipse, KDevelop3, MS VC++ и Xcode. Стоит отметить, что большинство проектов создаются не нативных, а всё с теми же back-end`ами.
                      Читать дальше →
                    • Современный CMake: 10 советов по улучшению скриптов сборки

                      CMake — это система сборки для C/C++, которая с каждым годом становится всё популярнее. Он практически стал решением по умолчанию для новых проектов. Однако, множество примеров выполнения какой-либо задачи на CMake содержат архаичные, ненадёжные, раздутые действия. Мы выясним, как писать скрипты сборки на CMake лаконичнее.

                      Читать дальше →
                    • Стоимость операций в тактах ЦП

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

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



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