• Искры Большого Взрыва

    Эта статья также переведена на английский и опубликована на Medium.

    Когда в Чикаго приходит лето, побережье озера Мичиган превращается в картинку с открытки. Километры волейбольных сеток, велосипедных дорожек, бейсбольных полей и песчаных пляжей. Белоснежные облака в высоком небе. Синева озера, наряженная белыми чёрточками лодок всех видов и размеров, с разноцветными огнями, весёлой музыкой и счастливыми отдыхающими. А в августе на три дня всё побережье становится сценой для Авиашоу воды и воздуха.

    Photo by Thomas Campone

    Будто этого недостаточно, каждую неделю, со дня памяти до дня труда, Navy Pier устраивает фейерверки. В один из таких замечательных летних вечеров мы гостили на лодке нашего друга. Как раз была суббота, и под конец вечеринки он подвёл лодку прямо к лучшему месту под фейерверками. Так что, когда наступила темнота, экзотические разноцветные огненные цветы взрывались вокруг нас по всем направлениям.
    Читать дальше →
    • +12
    • 4,7k
    • 3
  • Математика апокалипсиса: теория игр и карибский ядерный кризис

    • Перевод
    image

    Теория ходов


    «Мы сыграли в гляделки, и, по-моему, противник моргнул», — сказал государственный секретарь США Дин Раск на пике кубинского ракетного кризиса в октябре 1962 года. Он имел в виду сигналы, которые подавал Советский Союз, желая разрешить самую опасную ядерную конфронтацию между двумя сверхдержавами, которую многие аналитики интерпретировали как классический пример игры в ядерного «цыплёнка» (на русском аналог этой игры называется «ястребы и голуби»).

    Игра в «цыплёнка» обычно используется для моделирования конфликтов, в которых каждый из игроков взял курс на столкновение. Игроками могут быть водители, приближающиеся друг к другу на узкой дороге, каждый из который имеет выбор — свернуть, чтобы избежать столкновения, или не сворачивать. В рассказе «Бунтарь без причины», который позже был переделан в фильм с участием Джеймса Дина, водителями были два подростка, но они ехали не друг на друга, а к обрыву. Цель игры была в том, чтобы не нажать на тормоза первым и не превратиться таким образом в «цыплёнка», и в то же время не свалиться с обрыва.

    Хотя с виду карибский ракетный кризис похож на игру в «цыплёнка», на самом деле он плохо моделируется этой игрой. Другая игра более точно описывает действия лидеров США и Советского Союза, но даже для этой игры стандартная теория игр не полностью описывает доступные им варианты выбора.

    С другой стороны, воспроизводит или предсказывает прошлое действий лидеров «теория ходов» (theory of moves), основанная на теории игр, но радикально меняющая стандартные правила игры. Что ещё более важно, эта теория проливает свет на динамику игры, основываясь на предположении, что игроки думают не только о непосредственных последствиях их действий, но и об их влиянии на игру в будущем.
    Читать дальше →
  • «Ты крутой разраб, иди и попроси больше денег» — расскажем менеджерам, как устроен мир


      Прочитал еще одну статью про «психологические типажи разработчиков». И с меня хватит. Как всегда, в этой статье предлагают узнать себя в одном из антипаттернов «плохих парней», понять, что я врежу бизнесу и начать наконец «исправляться». Я вот узнал себя в каждом типе. Я и рок-звезда, и солдат, и некомпетентный, и мечу в менеджеры… Короче, все выглядит так, что каким бы разработчиком и человеком я ни мечтал быть, бизнес увидит здесь проблему.


      Знаете что? Пусть катятся к черту.

      Читать дальше →
    • Ричард Хэмминг: Глава 22. Обучение с помощью компьютера (CAI)

      • Перевод
      «What you learn from others you can use to follow;
      What you learn for yourself you can use to lead.»
      — Ричард Хэмминг
      imageОсталось опубликовать 1 главу…

      Сomputer-aided instruction (CAI) — машинное обучение. Применение ЭВМ в учебном процессе. ЭВМ в диалоговом режиме предлагает учащемуся материал в виде текстов и графических изображений, дает задания и проверяет их выполнение, позволяет выполнять учебные эксперименты.
      Перевод Islam Rasulov

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

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

      Истории известно огромное количество людей, которые искали легкие способы обучиться чему-либо. Олдос Хаксли в своей книге «О дивный новый мир» обсуждает идею обучения во время сна, когда под подушку вам подкладывается микрофон и через него происходит воспроизведение чего-либо. Он также раскрывает и серьёзные ограничения такого процесса.
      Читать дальше →
      • +12
      • 2,5k
      • 7
    • Перевод книги Эндрю Ына «Страсть к машинному обучению» Главы 15 — 19

        предыдущие главы


        15. Одновременная оценка нескольких идей во время анализа ошибок


        У вашей команды есть несколько идей, как улучшить определитель кошек в вашем приложении:


        • Решить проблему с тем, что ваш алгоритм относит собак к кошкам
        • Решить проблему с тем, что ваш алгоритм распознает больших диких кошек (львов, пантер, т. п.) как домашних
        • Улучшить работу системы на нечетких изображениях

        Можно оценить все эти идеи одновременно. Обычно я создаю специальную таблицу и заполняю ее для примерно 100 случаев ошибочной классификации валидационной (dev) выборки. Так же я делаю краткие комментарии, которые могут помочь мне вспомнить конкретные примеры в последствие. Для иллюстрации этого процесса, давайте рассмотрим сводную таблицу, которую вы могли бы создать из небольшого набора примеров вашей валидационной (dev) выборки

        Читать дальше →
        • +14
        • 8,1k
        • 2
      • Почему Гаусс? (100 способов решить систему уравннений)

        Что вы будете делать, если вас попросят решить простенькую систему с тремя неизвестными? У каждого сформировался свой собственный и наиболее удобный лично для него подход. Существует масса способов решить систему линейных алгебраических уравнений. Но почему предпочтение отдается именно методу Гаусса?
        Читать дальше →
        • +11
        • 8,1k
        • 4
      • Еще про методы решения систем линейных алгебраических уравнений

          Рассказать подробно про все методы конечно же очень трудно, но мне эта тема кажется интересной и чрезвычайно важной, поскольку с задачей нахождения решения все сталкиваются достаточно часто. В первой статье Почему Гаусс? был описан метод Гаусса (в том числе с модификацими) и некоторые итерационные методы. Однако, учитывая критику Sinn3r, я решил описать и другие методы.
          Читать дальше →
          • +11
          • 7,1k
          • 4
        • Операционные системы с нуля; уровень 1 (старшая половина)

          • Tutorial

          Настало время следующей части. Это вторая половина перевода лабы №1. В этом выпуске мы будем писать драйверы периферии (таймер, GPIO, UART), реализуем протокол XMODEM и одну утилитку. Используя всё это мы напишем командную оболочку для нашего ядра и загрузчик, который позволит нам не тыкать microSD-карточку туда-сюда.


          Младшая половина.
          Начинать чтение стоит с нулевой лабы.

          Читать дальше →
        • Операционные системы с нуля; Уровень 0

          • Перевод
          • Tutorial

          Добрый день/вечер/ночь/утро! Есть один экспериментальный курс по операционным системам. Есть он в Стэнфордском университете. Но часть материалов доступно всем желающим. Помимо слайдов доступны полные описания практических занятий.


          Чем этот курс отличается от прочих других? Большая часть кода пишется самостоятельно и выполняется на вполне реальном современном железе. В качестве целевой платформы выбран Raspberry Pi 3 model B. Т.е. достаточно актуальная архитектура AArch64. ARMv8 Cortex-A53, четыре ядра, 64-бита и вот это всё. В качестве основного языка программирования выбран Rust. Который безопасный, быстрый, без GC и так далее. Его, Rust, предполагается изучать во время курса.


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

          Читать дальше →
        • Toп 10 ошибок в C++ проектах за 2017 год

            Picture 1


            За окном уже почти как 3 месяца стоит 2018 год, а это значит, что пришло время (пусть и немного запоздало) составить топ 10 ошибок, найденных анализатором PVS-Studio в C++ проектах за прошедший год. Итак, начнём!
            Читать дальше →
          • Wireshark для просмотра трафика в реальном времени

            • Tutorial
            Иногда мне необходимо было залезть на linux-сервера и иметь возможность просматривать текущий трафик в реальном времени. Как я делал до этого? На целевом сервере устанавливался tcpdump, выхлоп которого писался в файлик. Далее файл через scp тянулся на локальный компьютер под Windows и открывался в Wireshark.

            В определенный момент мне захотелось более удобного решения и я, найдя возможность запустить Wireshark на винде (локально) в связке с tcpdump-ом на сервере (удаленно) на просторах интернета, и немного подпилив эту реализацию, решил поделиться с Вами.
            Читать дальше →
          • Тренинг FastTrack. «Сетевые основы». «Основы беспроводной локальной сети». Часть первая. Эдди Мартин. Декабрь, 2012

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



            Мы продолжаем цикл из 27 статей на основе его лекций:

            01/02: «Понимание модели OSI» Часть 1 / Часть 2
            03: «Понимание архитектуры Cisco»
            04/05: «Основы коммутации или свитчей» Часть 1 / Часть 2
            06: «Свитчи от Cisco»
            07: «Область использования сетевых коммутаторов, ценность свитчей Cisco»
            08/09: «Основы беспроводной локальной сети» Часть 1 / Часть 2
            10: «Продукция в сфере беспроводных локальных сетей»
            11: «Ценность беспроводных локальных сетей Cisco»
            12: «Основы маршрутизации»
            13: «Строение роутеров, платформы маршрутизации от Cisco»
            14: «Ценность роутеров Cisco»
            15/16: «Основы дата-центров» Часть 1 / Часть 2
            17: «Оборудование для дата-центров»
            18: «Ценность Cisco в дата-центрах»
            19/20/21: «Основы телефонии» Часть 1 / Часть 2 / Часть 3
            22: «Программные продукты для совместной работы от Cisco»
            23: «Ценность продуктов для совместной работы от Cisco»
            24: «Основы безопасности»
            25: «Программные продукты Cisco для обеспечения безопасности»
            26: «Ценность продуктов Cisco для обеспечения безопасности»
            27: «Понимание архитектурных игр Cisco (обзор)»

            И вот восьмая из них.
            Читать дальше →
            • +19
            • 9,2k
            • 1
          • Как написать собственный игровой движок на C++

            Перевод статьи Джеффа Прешинга (Jeff Preshing) How to Write Your Own C++ Game Engine.


            Как написать собственный игровой движок на C++


            В последнее время я занят тем, что пишу игровой движок на C++. Я пользуюсь им для создания небольшой мобильной игры Hop Out. Вот ролик, записанный с моего iPhone 6. (Можете включить звук!)



            Hop Out — та игра, в которую мне хочется играть самому: ретро-аркада с мультяшной 3D-графикой. Цель игры — перекрасить каждую из платформ, как в Q*Bert.


            Hop Out всё ещё в разработке, но движок, который приводит её в действие, начинает принимать зрелые очертания, так что я решил поделиться здесь несколькими советами о разработке движка.


            С чего бы кому-то хотеть написать игровой движок? Возможных причин много:

            Читать дальше →
          • Blockchain на Go. Часть 1: Прототип

            • Перевод
            • Tutorial

            Содержание


            1. Blockchain на Go. Часть 1: Прототип
            2. Blockchain на Go. Часть 2: Proof-of-Work
            3. Blockchain на Go. Часть 3: Постоянная память и интерфейс командной строки
            4. Blockchain на Go. Часть 4: Транзакции, часть 1
            5. Blockchain на Go. Часть 5: Адреса
            6. Blockchain на Go. Часть 6: Транзакции, часть 2
            7. Blockchain на Go. Часть 7: Сеть

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


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

            Читать дальше →
            • +13
            • 19,3k
            • 5
          • Swift Generics: cтили для UIView и не только #2

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


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


              Напомню, что основным элементом представленного способа задания стилей является обобщенное замыкание:


              typealias Decoration<T> = (T) -> Void

              Использовать данное замыкание для придания свойств UIView можно следующим образом:

              Читать дальше →
            • О классификации методов преобразования Фурье на примерах их программной реализации средствами Python

              • Tutorial

              Введение


              Публикации по методу Фурье условно можно разделить на две группы. Первая группа так называемых познавательных публикаций, например, [1,2].

              Вторая группа публикаций касается применения преобразований Фурье в технике, например, при спектральном анализе [3,4].

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

              Задачи публикации


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

              Гармонический анализ и синтез


              Гармоническим анализом называют разложение функции f(t), заданной на отрезке [0, Т] в ряд Фурье или в вычислении коэффициентов Фурье по формулам.

              Гармоническим синтезом называют получение колебаний сложной формы путем суммирования их гармонических составляющих (гармоник).

              Программная реализация
              #!/usr/bin/python
              # -*- coding: utf-8 -*
              from scipy.integrate import quad # модуль для интегрирования
              import matplotlib.pyplot as plt # модуль для графиков
              import numpy as np # модуль для операций со списками и массивами
              T=np.pi; w=2*np.pi/T# период и круговая частота
              def func(t):# анализируемая функция
                       if t<np.pi:
                                p=np.cos(t)
                       else:
                                p=-np.cos(t)
                       return p
              def func_1(t,k,w):# функция для расчёта коэффициента a[k] 
                       if t<np.pi:
                                z=np.cos(t)*np.cos(w*k*t)
                       else:
                                z=-np.cos(t)*np.cos(w*k*t)
                       return z
              def func_2(t,k,w):#функция для расчёта коэффициента b[k] 
                       if t<np.pi:
                                y=np.cos(t)*np.sin(w*k*t)
                       else:
                                y=-np.cos(t)*np.sin(w*k*t)
                       return y
              a=[];b=[];c=4;g=[];m=np.arange(0,c,1);q=np.arange(0,2*np.pi,0.01)# подготовка списков для численного анализа
              a=[round(2*quad(func_1, 0, T, args=(k,w))[0]/T,3) for k in m]# интеграл для a[k], k -номер гармоники 
              b=[round(2*quad(func_2, 0, T, args=(k,w))[0]/T,3) for k in m]# интеграл для b[k], k -номер гармоники
              F1=[a[1]*np.cos(w*1*t)+b[1]*np.sin(w*1*t) for t in q]#функции для гармоник
              F2=[a[2]*np.cos(w*2*t)+b[2]*np.sin(w*2*t) for t in q]
              F3=[a[3]*np.cos(w*3*t)+b[3]*np.sin(w*3*t) for t in q]
              plt.figure()
              plt.title("Классический гармонический анализ функции \n при t<pi  f(t)=cos(t)  при t>=pi  f(t)=-cos(t)")
              plt.plot(q, F1, label='1 гармоника')
              plt.plot(q, F2 , label='2 гармоника')
              plt.plot(q, F3, label='3 гармоника')
              plt.xlabel("Время t")
              plt.ylabel("Амплитуда А")
              plt.legend(loc='best')
              plt.grid(True)
              F=np.array(a[0]/2)+np.array([0*t for t in q-1])# подготовка массива для анализа с a[0]/2
              for k in np.arange(1,c,1):
                       F=F+np.array([a[k]*np.cos(w*k*t)+b[k]*np.sin(w*k*t) for t in q])# вычисление членов ряда Фурье
              plt.figure()
              P=[func(t) for t in q]
              plt.title("Классический гармонический синтез")
              plt.plot(q, P, label='f(t)')
              plt.plot(q, F, label='F(t)')
              plt.xlabel("Время t")
              plt.ylabel("f(t),F(t)")
              plt.legend(loc='best')
              plt.grid(True)
              plt.show()
              

              Читать дальше →
              • +6
              • 13,6k
              • 1
            • Орел или решка?

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

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


                  Назвал я её MakiseGui.


                  Читать дальше →
                • Введение в lock-free программирование

                  • Перевод
                  image

                  В этом посте мы хотели бы еще раз поднять тему программирования без блокировок, сперва дав ему определение, а затем выделить из всего многообразия информации несколько ключевых положений. Мы покажем, как эти положения соотносятся между собой, с помощью блок-схем, а потом мы немного коснемся деталей. Минимальное требование к разработчику, постигающему lock-free, — умение писать правильный многопоточный код, используя мьютексы или другие высокоуровневые объекты синхронизации, например, семафоры или события.
                  Читать дальше →
                • Базовые принципы машинного обучения на примере линейной регрессии

                    Здравствуйте, коллеги! Это блог открытой русскоговорящей дата саентологической ложи. Нас уже легион, точнее 2500+ человек в слаке. За полтора года мы нагенерили 800к+ сообщений (ради этого слак выделил нам корпоративный аккаунт). Наши люди есть везде и, может, даже в вашей организации. Если вы интересуетесь машинным обучением, но по каким-то причинам не знаете про Open Data Science, то возможно вы в курсе мероприятий, которые организовывает сообщество. Самым масштабным из них является DataFest, который проходил недавно в офисе Mail.Ru Group, за два дня его посетило 1700 человек. Мы растем, наши ложи открываются в городах России, а также в Нью-Йорке, Дубае и даже во Львове, да, мы не воюем, а иногда даже и употребляем горячительные напитки вместе. И да, мы некоммерческая организация, наша цель — просвещение. Мы делаем все ради искусства. (пс: на фотографии вы можете наблюдать заседание ложи в одном из тайных храмов в Москве).

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