• Введение в процедурную анимацию: инверсная кинематика

    • Перевод

    Часть 4. Введение в градиентный спуск


    Эта часть представляет собой теоретическое введение в инверсную кинематику и содержит программное решение, основанное на градиентном спуске (gradient descent). Эта статья не будет всеобъемлющим руководством по этой теме, это всего лишь общее введение. В следующей части мы покажем настоящую реализацию этого алгоритма на C# в Unity.

    Серия состоит из следующих частей (части 1-3 представлены в предыдущем посте):

    Читать дальше →
    • +54
    • 23,5k
    • 5
  • Введение в процедурную анимацию

    • Перевод
    image

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

    GIF

    Серия будет состоять из следующих частей:

    Читать дальше →
    • +44
    • 35,7k
    • 3
  • От зависимых типов к гомотопической теории типов на Scala + Shapeless + ProvingGround

    Всем привет. Хочу поделиться своим опытом использования библиотеки ProvingGround, написанной на Скале с использованием Shapeless. У библиотеки имеется документация, правда, не очень обширная. Автор библиотеки — Сиддхартха Гаджил из Indian Institute of Science. Библиотека экспериментальная. Сам Сиддхартха говорит, что это пока не библиотека, а «work in progress». Глобальная цель библиотеки — брать статью живого математика, парсить текст, переводить естественный язык с формулами в формальные доказательства, которые мог бы чекать компилятор. Понятно, что до этого еще очень далеко. Пока что в библиотеке можно работать с зависимыми типами и основами гомотопической теории типов (HoTT), (полу-) автоматически доказывать теоремы.
    Читать дальше →
  • От моноидов к алгебрам де Моргана. Строим абстракции на Haskell

    Что общего у нормального распределения, конечных автоматов, хеш-таблиц, произвольных предикатов, строк, выпуклых оболочек, афинных преобразований, файлов конфигураций и стилей CSS? А что объединяет целые числа, типы в Haskell, произвольные графы, альтернативные функторы, матрицы, регулярные выражения и статистические выборки? Наконец, можно ли как-то связать между собой булеву алгебру, электрические цепи, прямоугольные таблицы, теплоизоляцию труб или зданий и изображения на плоскости? На эти вопросы есть два важных ответа: 1) со всеми этими объектами работают программисты, 2) эти объекты имеют сходную алгебраическую структуру: первые являются моноидами, вторые — полукольцами, третьи — алгебрами де Моргана.

    Читать дальше →
  • Введение в парадокс исчезновения информации в чёрной дыре

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

    image
    Рис. 1

    Две конфликтующих теории


    Считается, что математика квантовой теории, иногда называемой «квантовой механикой», управляет всеми физическими процессами в природе. Её можно использовать не для предсказания конкретных событий, а только для получения вероятности того, что что-либо произойдёт. Но вероятности имеют смысл только, если вы сложите все вероятности всех различных возможных исходов и получите сумму равной единице. Квантовая теория, в которой это не так, смысла не имеет. Одно из следствий этого – в квантовой теории информация никогда по-настоящему не теряется и не копируется; в принципе всегда можно определить, с чего начинала система (её начальное состояние), обладая полной информацией о том, чем она закончила (конечное состояние). На рис. 1 изображено столкновение двух частиц и разбегание с места столкновения нескольких частиц, несущих, в зашифрованном виде, информацию о природе и свойствах двух изначальных частиц.
    Читать дальше →
  • Есть две функции

      Привет

      Есть две булевы функции n аргументов, одна — константная, другая — сбалансированная. На какую сам сядешь, на какую фронтендера посадишь? Вот только функции неизвестны, а вызвать их разрешается лишь один раз.

      Если не знаешь, как решить подобную задачу, добро пожаловать под кат. Там я расскажу про квантовые алгоритмы и покажу как их эмулировать на самом народном языке — на Python.
      Hello darkness, my old friend
    • Можно ли доверять компьютерам?

      • Перевод
      image
      Это простое выражение на языке математического ПО Maple проверяет формулу, подсчитывающую количество целочисленных треугольников с заданным периметром.

      Шалош Б. Эхад, соавтор нескольких работ, опубликованных в уважаемых математических журналах, известен своими лаконичными доказательствами теорем и тождеств, ранее требовавших многих страниц математических рассуждений. В прошлом году, когда его попросили подтвердить формулу для количества целочисленных треугольников с заданным периметром, Эхад провёл 37 вычислений менее, чем за секунду, и выдал ответ: правильно.

      Шалош Б. Эхад – это компьютер. Точнее, это любой из используемых математиком Дороном Зейлбергером компьютеров – от Dell в его офисе в Нью-Джерси, до австрийского суперкомпьютера, чьё время он иногда арендует. Название, означающее на иврите «три Б один», отсылает к AT&T 3B1, первой версии Эхада.

      «Душа – это софт», говорит Зейлбергер, пишущий свой код при помощи популярного математического инструмента для программирования Maple.
      Читать дальше →
    • Теория категорий на JavaScript. Часть 1. Категория множеств

      • Tutorial


      Абстракция – это одна из основных техник в ИТ. Любой язык программирования или моделирования, любая парадигма программирования (процедурная, функциональная, ООП, …) дают ответ на вопрос, как и от чего нужно абстрагироваться. Причём, адепты каждого подхода предлагают какой-то свой вариант абстракции.

      Если вы хотите увидеть истинную, универсальную абстракцию, то вступайте в нашу… изучайте теорию категорий. В статье на примере категории множеств с картинками и JavaScript-кодом объясняются самые базовые понятия теории категорий: пределы, универсальное свойство. Рассматривается вычислительный аспект теории категорий.

      Также немного говорится про классы, примеси и смеси в JavaScript.

      Примеры из статьи можно посмотреть тут.
      Читать дальше →
    • «Мир есть совокупность фактов, а не вещей»: Витгенштейн и операционно-ориентированное программирование

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

      Здесь и далее я буду рассматривать общекнижный пример с сотрудниками предприятия, писать будем на чем-то СИ-подобном. Наследовать класс Сотрудник (Employee) от класса Человек (Person) – прекрасная идея, особенно если хранить данные исключительно в памяти: SQL имеет некоторые проблемы с наследованием таблиц, но речь не об этом — ООП со своим иерархизмом, агрегациями, композициями и наследованиями предлагает идеальный способ организации данных. Проблемы с методами.

      За каждым методом бизнес-логики стоит факт мира, который этот метод (чаще не в одиночку) моделирует. Факты программирования – это операции: дальше будем называть их так. Делая метод членом класса, ООП требует от нас привязать операцию к объекту, что невозможно, потому что операция – это взаимодействие объектов (двух и более), кроме случая унарной операции, чистой рефлексии. Метод ВыдатьЗарплату (PaySalary) может быть отнесен к классам Сотрудник (Employee), Касса (Cash), БанковскийСчет (Account) – все они равнозначны в праве владения им. Дилемма о расположении методов сопутствует всему процессу разработки: неловкое ее разрешение может оказаться критичным и даже фатальным.

      В книгах по программированию честные авторы стыдливо признают, что «объекты – это как бы не совсем объекты», а ООП – всего лишь способ организации кода, а не механизм моделирования. Но все дело том, что «мир есть совокупность фактов, а не вещей» – отсюда принципиальная неспособность построить адекватную модель, применяя ООП в том виде, как этого требуют писатели учебников. Важно понять: в коде возможно моделировать мир, но атомами модели должны стать факты, а не объекты.
      Читать дальше →
    • Позволит ли формальная верификация кода микроядра создавать сверхнадежные ОС


        В 2015 году американская компания Rockwell Collins совместно с Boeing и 3D-Robotics провела испытания устойчивых ко взлому квадрокоптера Iris и беспилотного вертолёта Little Bird со «сверхнадежной» операционной системой.

        Разработка защищённых от взлома дронов ведётся по заказу Агентства перспективных оборонных проектов (DARPA) Министерства обороны США, которое заинтересовано в защите перспективных беспилотных и опционально пилотируемых летательных аппаратах от возможных уязвимостей.

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

        Разработанная Rockwell Collins операционная система на базе микроядра seL4 устойчива ко всем трём типам взлома.
        Читать дальше →
      • Трактат об энтропии

        Приветствую тебя, читатель Гиктаймс!

        Многие слышали о такой загадочной штуке, как энтропия. Обычно её называют мерой хаоса, мерой неопределённости и ещё прибавляют, что она непременно растёт. Я с огромной болью переношу употребление имени Энтропии всуе и решил, наконец, написать ликбез по этому вопросу.
        Читать дальше →
      • Моделирование динамических систем (метод Лагранжа и Bond graph approach)

        • Tutorial
        Всем доброго дня. В данной статье хочу показать один из графических методов построения математических моделей для динамических систем, который называется Bond graph («bond» — связи, «graph» — граф). В русской литературе, описания данного метода, я нашел только в Учебном пособии Томского политехнического университета, А.В. Воронин «МОДЕЛИРОВАНИЕ МЕХАТРОННЫХ СИСТЕМ» 2008 г. Также показать классический метод через уравнение Лагранжа 2 рода.


        Читать дальше →
        • +22
        • 14,8k
        • 7
      • Входим в форму: от гиперболической геометрии до кубических комплексов и обратно

        • Перевод

        Доказательство отмечает конец эпохи в изучении трёхмерных форм.


        Тридцать лет назад математик Уильям Тёрстон [William Thurston] рассказал о своём видении: систематизации всех возможных конечных трёхмерных форм.

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


        Уильям Тёрстон в Беркли в 1991 году.

        «У многих людей после многих лет обучения складывается впечатление, что математика – это строгий и формальный предмет, занимающийся сложными и непонятными правилами,- писал он в 2009-м. – Хорошая математика являет собой полную противоположность этому. Математика – это искусство человеческого понимания… Математика поёт, когда мы чувствуем её всем мозгом».

        В основании видения Тёрстона находился брачный союз между двумя, на первый взгляд, несопоставимыми подходами к изучению трёхмерных фигур: геометрией, знакомым царством углов, длин, областей и объёмов, и топологией, изучающей свойства формы, не зависящие от точных геометрических измерений – свойства, не меняющиеся, если форму растянуть или перекрутить, как "хэндгам".
        Читать дальше →
      • Оракул от арифметики

        • Перевод

        В свои 28 лет Петер Шольце раскрывает глубинные связи между теорией чисел и геометрией




        В 2010 году по сообществу людей, изучающих теорию чисел, прошёл поразительный слух – и дошёл до Джареда Вайнштейна [Jared Weinstein]. Якобы какой-то аспирант из Боннского университета в Германии опубликовал работу, в которой 288-страничное доказательство теоремы из теории чисел ужато всего до 37 страниц. 22-летний студент Петер Шольце нашёл способ обойти одну из самых сложных частей доказательства, сопоставив теорию чисел и геометрию.

        «Просто невероятно, что такой молодой человек смог сделать нечто настолько революционное,- говорит Вайнштейн, 34-летний специалист по теории чисел из Бостонского университета. – Это несомненный повод для уважения».

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

        С того момента Шольце, которому сейчас 28, дорос до высокого положения уже в более широком математическом сообществе. Его называют "одним из самых влиятельных математиков мира", и "редким талантом, появляющимся раз в несколько десятилетий". О нём говорят, как о фаворите среди претендентов на Филдсовскую премию, одну из высочайших наград для математика.

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

        • Перевод
        • Tutorial

        Перевод поста Стивена Вольфрама "What Is Spacetime, Really?".
        Выражаю огромную благодарность Кириллу Гузенко KirillGuzenko за помощь в переводе и подготовке публикации.


        Примечание: данный пост Стивена Вольфрама неразрывно связан с теорией клеточных автоматов и других смежных понятий, а также с его книгой A New Kind of Science (Новый вид науки), на которую из этой статьи идёт большое количество ссылок. Пост хорошо иллюстрирует применение программирования в научной сфере, в частности, Стивен показывает (код приводится в книге) множество примеров программирования на языке Wolfram Language в области физики, математики, теории вычислимости, дискретных систем и др.

        Содержание


        Простая теория всего?
        Структура данных Вселенной
        Пространство как граф
        Может быть, нет ничего, кроме пространства
        Что есть время?
        Формирование сети
        Вывод СТО
        Вывод ОТО (Общей теории относительности)
        Частицы, квантовая механика и прочее
        В поисках вселенной
        Ок, покажите мне Вселенную
        Заниматься физикой или нет — вот в чем вопрос
        Что требуется?
        Но пришло ли время?
        Сто лет назад Альберт Эйнштейн опубликовал общую теорию относительности — блестящую, элегантную теорию, которая пережила целый век и открыла единственный успешный путь к описанию пространства-времени (пространственно-временного континуума).

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

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

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

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

        Во-первых, такой подход казался не слишком перспективным — хотя бы потому, что модели, которые я изучал (клеточные автоматы), казалось, работали так, что это полностью противоречило всему тому, что я знал из физики. Но где-то в 88-м году — в то время, когда вышла первая версия Mathematica, я начал понимать, что если бы я изменил свои представления о пространстве и времени, возможно, это к чему то бы меня привело.
        Подробнее о пространственно-временном континууме...
      • Мультиплеер в быстрых играх (части I, II)



        1. Части I, II (синглплеер с авторитарным сервером)
        2. Часть III (Появление врага)
        3. Часть IV (Хэдшот!)


        Предлагаю вашему вниманию перевод статьи Fast-Paced Multiplayer (Part I): Introduction.

        Разработка игры — само по себе непростое занятие. Но мультиплеерные игры создают совершенно новые проблемы, требующие разрешения. Забавно, что у наших проблем всего две причины: человеческая натура и законы физики. Законы физики привнесут проблемы из области теории относительности, а человеческая натура не даст нам доверять сообщениям с клиента.
        Читать дальше →
      • Правила работы с Tasks API. Часть 2

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

          Проблема


          Пусть у нас есть некий код:
          static Task<TResult> ComputeAsync<TResult>(Func<TResult> highCpuFunc)
          {
              var tcs = new TaskCompletionSource<TResult>();
          
              try
              {
                  TResult result = highCpuFunc();
                  tcs.SetResult(result);
          
                  // some evil code
              }
              catch (Exception exc)
              {
                  tcs.SetException(exc);
              }
          
              return tcs.Task;
          }
          


          И пример использования:
          try
          {
              Task.WaitAll(ComputeAsync(() =>
              {
                  // do work
              }));
          }
          catch (AggregateException)
          {
              
          }
          Console.WriteLine("Everything is gonna be ok");
          


          Есть ли проблемы у кода выше вместе с примером? Если да, то какие? Вроде бы AggregateException ловим. Everything is gonna be ok?
          Если возникли смутные сомнения, тогда прошу под кат
        • Произведения и копроизведения

          • Перевод
          Это пятая статья из цикла «Теория категорий для программистов». Предыдущие статьи уже публиковались на Хабре в переводе Monnoroch:
          0. Теория категорий для программистов: предисловие
          1. Категория: суть композиции
          2. Типы и функции
          3. Категории, большие и малые
          4. Категории Клейсли

          На КДПВ поросенок Петр заводит по одному трактору в каждый объект категории.

          Следуй по стрелкам


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

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

          Этот процесс можно сравнить с поиском в сети. Запрос пользователя — это наш шаблон. Если запрос не очень специфичен, то в ответ поисковая система выдаст множество подходящих документов, только часть из которых релевантны. Чтобы исключить нерелевантные ответы, пользователь уточняет запрос, что увеличивает точность поиска. В конце концов поисковая система проранжирует совпадения и, если повезет, искомый результат будет в самом начале списка.
          Читать дальше →
        • Решение типичных проблем при сборке XCode проекта, сгенерированного Unity3D

            В данной статье описаны некоторое типичные проблемы, возникающие при сборке/запуске на устройстве/выкладке в App Store проекта XCode для iOS, сгенерированного через Unity3D, а также их причины и решения. По личному опыту данные проблемы возникают довольно часто и не только у меня. В большей части статья может помочь тем, кто не очень знаком с нативной разработкой на iOS.

            На момент написания статьи использовались Unity3d версии 5.1.2f и XCode 7.0.1. При использовании Unity3D версий 5.2 и выше, проблемы, перечисленные далее в статье также будут повторяться. Некоторые из проблем связаны с нововведениями в iOS 9.0. Внимание под катом много графики.
            Подробности
            • +11
            • 12,1k
            • 3
          • GNU Emacs. Статья, которую я так и не нашел…

            Доброго времени суток, Читатель!

            В данной статье хочу подробно рассказать про настройку текстового редактора GNU Emacs.

            Операционная система GNU Emacs — программируемый текстовый редактор для программистов, написанный на программируемом языке программирования.

            Для расширения Emacs используется диалект языка LispEmacs Lisp.
            Читать дальше →