Pull to refresh
0
0
Alexander Ivanov @gagmaker

User

Send message

Теория игр, мышиная возня и спущенная шина

Reading time8 min
Views22K


Теория игр — наука на границе математики и экономики.

Сама теория игр зародилась вместе с экономической теорией примерно три столетия назад, но в науку ее превратил Джон Форбс Нэш, нет он не связан с журналом Форбс.

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

Стратегическая игра

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

Но достаточно лирики, все уже поняли, что стратегические игры и теория игр — это самое важное, что может быть в жизни, а значит пора приступить к разбору примеров.
Читать дальше →
Total votes 19: ↑15 and ↓4+11
Comments54

Простое объяснение теоремы Байеса

Reading time6 min
Views108K
Подробно теорема Байеса излагается в отдельной статье. Это замечательная работа, но в ней 15 000 слов. В этом же переводе статьи от Kalid Azad кратко объясняется самая суть теоремы.

  • Результаты исследований и испытаний – это не события. Существует метод диагностики рака, а есть само событие — наличие заболевания. Алгоритм проверяет, содержит ли письмо спам, но событие (на почту действительно пришел спам) нужно рассматривать отдельно от результата его работы.
  • В результатах испытаний бывают ошибки. Часто наши методы исследований выявляют то, чего нет (ложноположительный результат), и не выявляют то, что есть (ложноотрицательный результат).
  • С помощью испытаний мы получаем вероятности определенного исхода. Мы слишком часто рассматриваем результаты испытания сами по себе и не учитываем ошибки метода.
  • Ложноположительные результаты искажают картину. Предположим, что вы пытаетесь выявить какой-то очень редкий феномен (1 случай на 1000000). Даже если ваш метод точен, вероятнее всего, его положительный результат будет на самом деле ложноположительным.
  • Работать удобнее с натуральными числами. Лучше сказать: 100 из 10000, а не 1%. При таком подходе будет меньше ошибок, особенно при умножении. Допустим, нам нужно дальше работать с этим 1%. Рассуждения в процентах неуклюжи: «в 80% случаев из 1% получили положительный исход». Гораздо легче информация воспринимается так: «в 80 случаях из 100 наблюдали положительный исход».
  • Даже в науке любой факт — это всего лишь результат применения какого-либо метода. С философской точки зрения научный эксперимент – это всего лишь испытание с вероятной ошибкой. Есть метод, выявляющий химическое вещество или какой-нибудь феномен, и есть само событие — присутствие этого феномена. Наши методы испытаний могут дать ложный результат, а любое оборудование обладает присущей ему ошибкой.
Читать дальше →
Total votes 27: ↑26 and ↓1+25
Comments15

Интегрирование уравнений движения

Reading time9 min
Views40K
image

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

Темой этой статьи как раз и будет реализация такого интегрирования.

Интегрирование уравнений движения


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

$F = ma$


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

$a = F/ma = F/m$


Ускорение — это темп изменения скорости от времени:

$dv/dt = a = F/m$



Аналогично, скорость — это темп изменения позиции от времени:

$dx/dt = v$


Это значит, что если мы знаем текущие позицию и скорость объекта, а также приложенные к нему силы, то сможем проинтегрировать, чтобы найти его позицию и скорость в определённый момент времени.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments12

Симулятор машинок Брайтенберга

Reading time9 min
Views16K
Просто захотелось написать симулятор машинок Брайтенберга. Корни у этой вещи растут из идей построения простеньких роботов, но также она интересна с точки зрения развития сложных систем.


Итак, что же это такое?

(Осторожно, в статье чрезвычайно много картинок и анимаций!)
Читать дальше →
Total votes 41: ↑40 and ↓1+39
Comments24

Автоматное программирование – новая веха или миф? Часть 1. Введение

Reading time22 min
Views40K
Тема автоматного программирования ( AP, АП) уже много лет занимает заметное место в научно-популярных СМИ. Однако, несмотря на это, АП не стало магистральным трендом. Главная причина здесь — недостаточный опыт использования, и как следствие, отсутствие популяризаторов. Нельзя сказать, что недостаточно статей посвященных АП, но круг обсуждаемых в статьях вопросов по большому счёту сводится к описанию UML Statechart, т.е. инструменту описания автоматов, либо к вопросу «Как реализуются программные автоматы?». Это печально но факт, отсутствует обсуждение того, какие перспективы для программистов-профессионалов открываются при использовании данной технологии.

Эта статья – попытка взглянуть на программаты глазами прагматика, на примере задачи, взятой из реальной практики программирования микроконтроллеров. Однако она может заинтересовать не только embedderов, поскольку автоматный подход может эффективно использоваться для создания и драйверов и интерактивных приложений в системах основанных на обработке событий, как например Windows.

Читать дальше →
Total votes 28: ↑23 and ↓5+18
Comments80

Создаем автономный дрон на Intel Edison

Reading time8 min
Views32K

Мы продолжаем разговор о том, как самостоятельно сделать автономный летающий аппарат. В прошлый раз речь шла об элементной базе, механике и управлении, также мы оснастили свое устройство зайчатками разума на основе библиотеки OpenCV. Время двигаться дальше — нам нужно научить наш гаджет более тонким и замороченным вещам, другими словами — повысить его интеллектуальность.
Во второй статье цикла наш коллега из Intel Paul Guermonprez предлагает сменить платформу и посмотреть, чего может добиться дрон на основе компьютера Intel Edison и главное — как это сделать. Ну а в самом конце поста предложение для тех, кто загорелся идеей воплотить все сказанное на практике. Уверяем вас, при определенных условиях получить бесплатно от Intel аппаратную платформу для экспериментов вполне реально!
Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments4

Проект Dronecode: свободная платформа для беспилотных аппаратов

Reading time1 min
Views24K


Организация Linux Foundation взяла под своё крыло проект Dronecode, цель которого — создание свободной и открытой платформы для беспилотных летательных аппаратов (БПЛА).

Ключевым участником является компания 3D Robotics, которая предоставила в общественное пользование платформу APM Autopilot Suite для управления БПЛА (платформа раньше была известна как ArduPilot).

Кроме того, в Dronecode включили разработки ещё одного проекта PX4, который ведётся в техническом университете Цюриха.
Читать дальше →
Total votes 38: ↑33 and ↓5+28
Comments16

Адреса памяти: физические, виртуальные, логические, линейные, эффективные, гостевые

Reading time6 min
Views107K
Мне периодически приходится объяснять разным людям некоторые аспекты архитектуры Intel® IA-32, в том числе замысловатость системы адресации данных в памяти, которая, похоже, реализовала почти все когда-то придуманные идеи. Я решил оформить развёрнутый ответ в этой статье. Надеюсь, что он будет полезен ещё кому-нибудь.
При исполнении машинных инструкций считываются и записываются данные, которые могут находиться в нескольких местах: в регистрах самого процессора, в виде констант, закодированных в инструкции, а также в оперативной памяти. Если данные находятся в памяти, то их положение определяется некоторым числом — адресом. По ряду причин, которые, я надеюсь, станут понятными в процессе чтения этой статьи, исходный адрес, закодированный в инструкции, проходит через несколько преобразований.



На рисунке — сегментация и страничное преобразование адреса, как они выглядели 27 лет назад. Иллюстрация из Intel 80386 Programmers's Reference Manual 1986 года. Забавно, что в описании рисунка есть аж две опечатки: «80306 Addressing Machanism». В наше время адрес подвергается более сложным преобразованиям, а иллюстрации больше не делают в псевдографике.
Читать дальше →
Total votes 51: ↑49 and ↓2+47
Comments11

Конечный автомат (он же машина состояний) на чистом С

Reading time5 min
Views127K
Почти каждый микроконтроллерщик сталкивался с громадными switch-case и мучительно их отлаживал.
И много кто, начиная писать реализацию какого-либо протокола, задумывался как написать её красиво, изящно, так чтобы через месяц было понятно что ты имел в виду, чтобы она не отжирала всю память и вообще какала бабочками.
И вот тут на помощь приходят машины состояний, они же конечные автоматы (те самые которые используются в регулярных выражениях).

Собственно через регулярные выражения я к ним и пришёл.
Читать дальше →
Total votes 51: ↑48 and ↓3+45
Comments50

Лицензия для вашего open-source проекта

Reading time98 min
Views181K
В этой статье я хочу немного поговорить об авторском праве и свободных лицензиях на ПО. Текст является результатом самостоятельного выбора лицензий и их применения к своим проектам.

Статья будет полезна тем, кто хочет:

— в общих чертах понять, что такое авторское право (но лучше обратиться к юристу);
— подобрать свободную лицензию для своего проекта;
— разобраться, что нужно писать в шапке файла исходного кода.
Читать дальше →
Total votes 136: ↑132 and ↓4+128
Comments117

Пишем свой драйвер под Linux

Reading time8 min
Views67K
image

Хочу признаться сразу, что я вас отчасти обманул, ибо драйвер, если верить википедии это компьютерная программа, с помощью которой другая программа (обычно операционная система) получает доступ к аппаратному обеспечению некоторого устройства. А сегодня мы создадим некую заготовку для драйвера, т.к. на самом деле ни с каким железом мы работать не будем. Эту полезную функциональность вы сможете добавить сами, если пожелаете.

То, что мы сегодня создадим, корректнее будет назвать LKM (Linux Kernel Module или загрузочный модуль ядра). Стоит сказать, что драйвер – это одна из разновидностей LKM.

Писать модуль мы будем под ядра линейки 2.6. LKM для 2.6 отличается от 2.4. Я не буду останавливаться на различиях, ибо это не входит в рамки поста.

Мы создадим символьное устройство /dev/test, которое будет обрабатываться нашим модулем. Хочу сразу оговориться, что размещать символьное устройство не обязательно в каталоге /dev, просто это является частью «древнего магического ритуала».

Читать дальше →
Total votes 251: ↑240 and ↓11+229
Comments78

Как ухаживать за винилом: 7 советов для начинающих

Reading time4 min
Views37K
Музыка — это не только само звучание, но и атмосфера вокруг него. Например, винил: уход за проигрывателем и коллекцией пластинок для многих ценителей — это целый ритуал.

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


Читать дальше →
Total votes 30: ↑22 and ↓8+14
Comments131

Обзор плат на SoC ARM+FPGA. Часть первая. Мир Xilinx

Reading time14 min
Views64K
Часть 1. Мир Xilinx
Часть 2. Мир Intel (Altera)

В опубликованном ранее переводе обзора 98 «хакерских» плат немалый интерес аудитории вызвали платы на базе SoC, сочетающих в себе ядра ARM и FPGA, такие, как Parallella. И это неудивительно, ведь такая комбинация даёт воистину потрясающие возможности по сравнению с «просто» процессором или «просто» FPGA. На таких SoC можно строить системы, сочетающие в себе алгоритмичски сложные задачи, поддержку сетевых стеков, GUI и прочих вещей, проще поддающихся реализации на процессоре, и задачи, требующие жесткого реального времени, обработки сигналов, обработки изображений и другие задачи, для реализации которых удобны FPGA. Разумеется, для многих задач можно использовать простые FPGA (возможно, включив в них IP-ядро процессора типа NIOS II или MicroBlaze), многие задачи можно решить на процессоре достаточной мощности, используя операционные системы реального времени (типа RTEMS), но всё же, SoC являются в настоящее время очень привлекательным вариантом для решения множества задач, как в профессиональных областях, так и для хобби.


Осторожно, много картинок!
Total votes 39: ↑38 and ↓1+37
Comments33

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

Reading time3 min
Views10K

Структурные особенности фотофермента, который называется фотодекарбоксилаза жирных кислот (FAP) со светочувствительным элементом FAD

Свет вовлечён во многие биологические процессы, которые идут в живых организмах, независимо от наличия фотосинтеза. Это такие процессы как рост, развитие, метаболизм и суточные биоритмы. В большинстве случаев свет влияет на клеточную физиологию через «посредников» — фотоактивные белки, в том числе светочувствительные ионные каналы, фоторецепторы, светособирающие комплексы и светозависимые ферменты. Последние можно разделить на два типа: 1) ферменты с фотоактивацией, которым нужна только кратковременная вспышка света, чтобы перейти в активное состояние; 2) фотоферменты, которым требуется постоянный поток фотонов для поддержания каталитической функции. Фактически, последние работают на фотонах как на топливе.

Фотоферменты — редкий тип катализаторов. В природе есть только два семейства белков такого типа: ДНК-фотолиаза, которая у многих организмов ремонтирует ДНК поле повреждения ультрафиолетом, и протохлорофиллид.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments30

Нестандартный способ подружиться с STM32: не Ардуино и не Discovery

Reading time4 min
Views25K

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


И на Хабре, и на geektimes уже достаточно много статей, посвящённых микроконтроллерам серии STM32F, например: Дешевая STM32 плата + Arduino IDE, Попытка подружиться с STM32 и ответ на неё Как надо дружиться с STM32 и многие другие. В совокупности они очень хорошо освещают эту тему, но есть одно но… Во всех этих статьях рассматриваются готовые платы и один конкретный контроллер, что на этой плате. А что делать тем, кто хочет поиграться с разными контроллерами, да ещё и на макетной плате? Например, многие известные мне платы с контроллером STM32F4 (та же STM32F4-Discovery) в макетную плату не воткнуть. Но мне лично хочется что-то типа такого (внимание, все картинки кликабельны):



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

Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments25

Моделирование динамических систем (метод Лагранжа и Bond graph approach)

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


Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments7

Трассировщик ввода-вывода в ядре Linux

Reading time5 min
Views14K
Мало кто знает, что в ядре Linux есть необычные и весьма полезные инструменты для отладки и тестирования. В этой небольшой статье я хочу поделиться описанием трассировщика ввода-вывода.
Читать дальше →
Total votes 43: ↑43 and ↓0+43
Comments4

Драйвер виртуальных GPIO с контроллером прерываний на базе QEMU ivshmem для Linux

Reading time21 min
Views17K
Природа прерываний

Трудно недооценить роль GPIO, особенно в мире встраиваемых систем ARM. Помимо того, что это крайне популярный материал для всех руководств для начинающих, GPIO обеспечивают способ для управления многими периферийными устройствами, выступают в качестве источника ценных прерываний, или даже могут быть единственным доступным способом общения с миром для SOC.

Основываясь на собственном скромном опыте, могу сказать, что прерывания далеко не самая освященная тема в сообществе Linux. Из-за своих особенностей, а так же сильной привязки к аппаратной части, все обучающие материалы посвященные прерываниям лишены реального и легко воспроизводимого примера. Данный факт мешает пониманию того, что очень часто прерывания и GPIO неразделимы, особенно в области встраиваемого Linux. Многие начинают верить, что GPIO это очень простая и скучная вещь (которая кстати и стала таковой благодаря подсистеме sysfs).
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments3

Изучаем Bootmgr. Часть 1 — инструментарий и основные принципы отладки начальных этапов загрузки ОС Windows

Reading time12 min
Views49K

Введение


Возможно некоторые читатели помнят мою самую первую статью на ресурсе, посвященную загрузке Windows с VHD-образа. Возможно я бы и не вернулся к этой теме, если бы не нашлись люди, попытавшиеся повторить данную технологию на своих домашних машинах. Естественно, с реализацией этого решения возникли проблемы, касающиеся в основном тех ошибок, которые выплевывает bootmgr в тех случаях, когда ему что либо не нравится. Попытки интерпретации ошибок загрузки вроде 0xc03a0003 путем гугления к особо ценным результатам не приводят, а документация Microsoft на этот счет хранит многозначительное молчание. Возникла идея изучить процесс обработки VHD-образов, получив информацию из первых рук, то есть от самого загрузчика.


Если обратится к уже имеющейся в сети информации, то существует замечательный блог "Записки эникейщика о Windows" на страницах которого (раз, два и три) размещены, на мой взгляд, самые ценные сведения, по вопросам устройства bootmgr. Автор подробно рассмотрел процесс загрузки, включая исследования кода MBR и PBR, остановившись на структуре bootmbr, кратко описав происходящие при его работе процессы.


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

Читать дальше →
Total votes 44: ↑39 and ↓5+34
Comments10

Zephyr Project — open source ОС реального времени

Reading time1 min
Views17K
Консорциум из четырех хорошо известных компаний — Intel, NXP, Synopsys и UbiquiOS под эгидой Linux Foundation создал Zephyr Project — легкую, масштабируемую операционную систему реального времени, предназначенную для работы на устройствах с ограниченными ресурсами различных архитектур и распространяемую под лицензией Apache 2.0. Теперь у создателей различного рода встроенных решений и компонентов «Интернета вещей» есть универсальная, вендоро-независимая и гибкая программная платформа реального времени с открытым исходным кодом, главная идеология которой — максимальная экономия ресурсов.
Основные особенности Zephyr таковы:
  • Единое адресное пространство. Специфичный код приложения в сочетании с кастомным ядром создают монолитный образ, исполняемый на устройстве.
  • Большие возможности настройки. Приложение получает только те возможности, которые ему нужны и когда они ему нужны.
  • Ресурсы определяются во время компиляции. Это уменьшает размер кода и увеличивает производительность.
  • Минимальный контроль ошибок. Служит для того же самого. При этом во время тестирования есть возможность получать полную отладочную информацию.
  • Богатый набор возможностей для разработчика: многопоточность, контроль прерываний, внутрипотоковая синхронизация, средства для работы с памятью, управление питанием и многое другое.

В настоящее время уже доступны как само ядро Zephyr, так и SDK для разработки под него. Список поддерживаемых плат (который, несомненно, будет расширяться) можно найти на странице документации.
Total votes 25: ↑17 and ↓8+9
Comments20
1
23 ...

Information

Rating
Does not participate
Location
San Diego, California, США
Registered
Activity