• Создаём простую нейросеть

    • Translation
    • Tutorial


    Перевод Making a Simple Neural Network

    Что мы будем делать? Мы попробуем создать простую и совсем маленькую нейронную сеть, которую мы объясним и научим что-нибудь различать. При этом не будем вдаваться в историю и математические дебри (такую информацию найти очень легко) — вместо этого постараемся объяснить задачу (не факт, что удастся) вам и самим себе рисунками и кодом.
    Начнем.
  • Изучаем процессы в Linux


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

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

      • Translation


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

      Это пример задачи поиска "ближайшего соседа", которую широко изучают в информатике. Дан набор сведений и новая точка, и требуется найти, к какой точке из уже существующих она окажется ближайшей? Такой вопрос возникает во множестве повседневных ситуаций в таких областях, как исследование генома, поиск картинок и рекомендации на Spotify.

      Но, в отличие от примера с кафе, вопросы о ближайшем соседе часто оказываются очень сложными. За последние несколько десятилетий величайшие умы среди специалистов по информатике брались за поиски наилучших способов решения подобной задачи. В частности, они пытались справиться с усложнениями, появляющимися из-за того, что в различных наборах данных могут быть очень разные определения «близости» точек друг к другу.
      Читать дальше →
    • Ричард Хэмминг: Глава 22. Обучение с помощью компьютера (CAI)

      • Translation
      «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.4k
      • 7
    • RabbitMQ против Kafka: два разных подхода к обмену сообщениями

        В прошлых двух статьях мы рассказывали об IIoT — индустриальном интернете вещей — строили архитектуру, чтобы принимать данные от сенсоров, паяли сами сенсоры. Краеугольным камнем архитектур IIoT да и вообще любых архитектур работающих с BigData является потоковая обработка данных. В ее основе лежит концепция передачи сообщений и очередей. Стандартом работы с рассылкой сообщений сейчас стала Apache Kafka. Однако, для того, чтобы разобраться в ее преимуществах (и понять ее недостатки) было бы хорошо разобраться в основах работы систем очередей в целом, механизмах их работы, шаблонах использования и основной функциональности.



        Мы нашли отличную серию статей, которая сравнивает функциональность Apache Kafka и другого (незаслуженно игнорируемого) гиганта среди систем очередей — RabbitMQ. Эту серию статей мы перевели, снабдили своими комментариями и дополнили. Хотя серия и написана в декабре 2017 года, мир систем обмена сообщениями (и особенно Apache Kafka) меняется так быстро, что уже к лету 2018-го года некоторые вещи изменились.

        Читать дальше →
      • Математические модели хаоса

        • Tutorial

        Введение


        На Habr уже обсуждалась теория хаоса в статьях [1,2,3]. В этих статьях рассмотрены следующие аспекты теории хаоса: обобщённая схема генератора Чуа; моделирование динамики системы Лоренца; программируемые логическими интегральными схемами аттракторы Лоренца, Ресслера, Рикитаке и Нозе-Гувера.

        Однако, техники теории хаоса используются и для моделирования биологических систем, которые, бесспорно, являются одними из наиболее хаотических систем из всех, что можно себе представить. Системы динамических равенств использовались для моделирования всего — от роста популяций и эпидемий, до аритмических сердцебиений [4].

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

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

        Статья написана с целью обучения, но позволит, даже не имеющему опыта программирования читателю, используя приведенные программы, самостоятельно решить большинство новых учебных задач по теме моделирования явлений хаоса.
        Читать дальше →
      • Крупнейший дамп в истории: 2,7 млрд аккаунтов, из них 773 млн уникальных



          Известный специалист по безопасности Трой Хант уже несколько лет поддерживает сайт Have I Been Pwned (HIBP) с миллионами записей об украденных аккаунтов. Каждый может проверить там свой email на предмет утечки. Трой Хант следит за хакерскими форумами, покупает базы данных, которые выставляют на продажу, иногда эти базы присылают ему бесплатно. Но он никогда не видел, чтобы на продажу выставляли такую огромную базу, как нынешняя Коллекция № 1 (Collection #1).

          Гигантский архив содержит 2 692 818 238 записей с адресами электронной почты и паролями.
          Читать дальше →
        • Изменение схемы таблиц PostgreSQL без долгих блокировок. Лекция Яндекса

            Если одновременно выполняется много операций по изменению схемы БД, сервис не может корректно работать на запись. Разработчик Владимир Колясинский объяснил, какие операции в PostgreSQL требуют длительных блокировок и как команда Яндекс.Коннекта обеспечивает почти стопроцентную доступность сервиса на запись во время выполнения подобных операций. Кроме того, вы узнаете о библиотеке для Django, которая призвана автоматизировать часть описанных процессов.


            У нас большие нагрузки, тысячи RPS, и простой в несколько минут, не говоря о большем времени, недопустим. Нужно, чтобы миграции происходили незаметно для пользователя. А с такими нагрузками уже не получится встать в четыре часа ночи, что-то накатить, когда нет нагрузки, и снова лечь спать — потому что нагрузка идет круглые сутки.

            Читать дальше →
          • Архитектурные решения для мобильной игры. Часть 1: Model

              Эпиграф:
              — Как я тебе оценю, если неизвестно что делать?
              — Ну там будут экранчики и кнопочки.
              — Дима, ты сейчас всю мою жизнь описал в трёх словах!
              (с) Реальный диалог на митинге в игровой компании




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

              В нашей суровой реальности каждый, кто хоть раз архитектурил крупный проект хотя бы в своих мыслях, имеет свои представления о том, как надо делать, и часто готов отстаивать свои идеи до последней капли крови. У окружающих это вызывает улыбку, а менеджмент часто смотрит на всё на это как на огромный чёрный ящик, который никому углом не упёрся. Но что если я скажу вам, что правильные решения помогут сократить создание нового функционала в 2-3 раза, поиск ошибок в старом в 5-10 раз, и позволят делать многие новые и важные вещи, которые раньше были вообще недоступны? Достаточно лишь впустить архитектуру в сердце своё!
              Архитектурные решения для мобильной игры. Часть 2: Command и их очереди
              Архитектурные решения для мобильной игры. Часть 3: View на реактивной тяге
              Читать дальше →
            • Архитектурные решения для мобильной игры. Часть 2: Command и их очереди



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

                Архитектурные решения для мобильной игры. Часть 1: Model
                Архитектурные решения для мобильной игры. Часть 3: View на реактивной тяге
                Читать дальше →
                • +11
                • 5.1k
                • 5
              • Способы применения и искажения меткости в играх. Наглядные графики для сравнения

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

                  • сравнивая с одним псевдослучайным числом (которое тоже можно получать по разному [1]);
                  • сравнивая с наибольшим или наименьшим из двух псевдослучайных чисел;
                  • сравнивая среднее из двух и более случайных чисел (среднее тоже можно считать по разному).


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

                  Точно также по разному можно рассчитывать наносимый урон, особенно на основе дайсов (кубиков).

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

                  В статье будут представлены наглядные графики изменения реальных вероятностей в разных подходах, что позволит быстрее в них сориентироваться и принять лучшее решение.
                  Читать дальше →
                • Заблуждения игроков при оценке рисков. Контроль генератора случайных чисел в разработке

                    Человеческий мозг по своей природе очень плохо умеет оценивать вероятность срабатывания случайных событий, на основании выданной числовой оценки. И довольно хорошо на основании качественных оценок. А все потому, что человек мысленно делает конвертацию числовых вероятностей в качественные оценки, и делает это очень субъективно:

                    • 80% попадания выстрела в игре — ну это почти гарантированное попадание;
                    • 80% того, что ваш товарищ хоть когда-нибудь отдаст долг — не-не-не, так не пойдёт, это слишком большой риск;
                    • 5% получения критического урона он NPC врага — маловероятно, риск можно игнорировать;
                    • 1% риск падения сосульки, если пройти под крышей с капающими метровыми сосульками — ещё чего, лучше обойти с другой стороны тротуара;
                    • 51% вероятность выигрыша в мини-игре в большой РПГ — можно рассчитывать на то, что после 20 ставок я чуть-чуть выиграю или, как минимум, останусь при своих… через 20 ставок… как такое могло случиться, что я проиграл половину всего своего золота? Тут явно сломан генератор случайных чисел!


                    В статье будут рассмотрены следующие вопросы:

                    • ошибочные допущения в оценке вероятностей;
                    • конкретные примеры заблуждений игроков и фактические вероятности «редких» событий;
                    • генератор случайных чисел (вообще-то псевдослучайных);
                    • ранние простые генераторы псевдослучайных чисел на примере Final Fantasy I;
                    • подходы к реализации случайных событий с воспроизводимостью и без;
                    • примеры удачно внедренных разных подходов и манипуляции в Fire Emblem.
                    Читать дальше →
                  • Генерация Close call в играх: «На волосок от поражения» или «Чуть-чуть не победил»

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

                      Источник: 1877 Harpers Weekly November 24-MA barely saves GOP [1]

                      Многие игры специально создают (или провоцируют) такие ситуации, чтобы встряхнуть своих игроков. Конечно, об использовании таких методик в пресс релизах не говорят. А особенно талантливые разработчики умело прячут эти свои «грязные хаки» даже от опытных игроков.
                      Далее я перечислю известные мне примеры таких хаков, чтобы разработчики смогли взять из них самое хорошее, а игроки научились распознавать самое плохое и коварное.
                      Читать дальше →
                    • In-memory базы данных: применение, масштабирование и важные дополнения

                        Мы продолжаем экспериментировать с форматами проведения митапов. Недавно на боксерском ринге мы сталкивали централизованную шину данных и Service Mesh. В этот раз решили попробовать нечто более миролюбивое — StandUp, то бишь открытый микрофон. Темой выбрали in-memory базы данных.



                        В каких случаях стоит переходить на in-memory? Как и зачем масштабировать? И на что стоит обратить внимание? Ответы в выступлениях спикеров, которые мы осветим в этом посте.
                        Читать дальше →
                        • +14
                        • 5.2k
                        • 5
                      • Обучение с подкреплением на языке Python

                        • Translation
                        Привет, коллеги!



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

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

                        Приятного чтения!
                        Читать дальше →
                        • +13
                        • 16.1k
                        • 2
                      • Машинное обучение на Python-е с интерактивными Jupyter демонстрациями

                          image


                          Здравствуйте, Читатели!


                          Недавно я запустил репозиторий Homemade Machine Learning, который содержит примеры популярных алгоритмов и подходов машинного обучения, таких как линейная регрессия, логистическая регрессия, метод K-средних и нейронная сеть (многослойный перцептрон). Каждый алгоритм содержит интерактивные демо-странички, запускаемые в Jupyter NBViewer-e или Binder-e. Таким образом у каждого желающего есть возможность изменить тренировочные данные, параметры обучения и сразу же увидеть результат обучения, визуализации и прогнозирования модели у себя в браузере без установки Jupyter-а локально.

                          Читать дальше →
                          • +18
                          • 24.3k
                          • 5
                        • Почему мы говорим ОК?

                            Hey, guys! Feeling OK? Давайте обсудим самое широко признанное слово на планете. Ведь мы используем его в общении каждый день, и не только друг с другом, но и с технологиями. У всех же есть Alexa? Ну Google точно есть!

                            Кроме небольшой экскурсии в историю возникновения слова, в данной статье вас ждут уникальные сленговые синонимы «OK» и несколько разговорных выражений по теме. So, jump in!
                            Читать дальше →
                          • Как решить проблему ограничения в 64К методов в Unity3D

                            • Translation
                            Можете ли вы представить игру для Android, сделанную в Unity, которая использует больше 64K методов Java? Не удалось это и архитекторам байт-кода Dalvik. Возможно, у них получилось (я не читал спецификации), и винить следует другие элементы тулчейна. Как бы то ни было, если ваша игра превышает ограничение в 64K методов на файл DEX, вам придётся ковыряться в своих нативных плагинах и/или процессе сборки. Этот пост является попыткой показать различные способы решения проблемы.
                            Читать дальше →
                            • +20
                            • 16.4k
                            • 2
                          • 6 концепций функционального программирования. Польза и примеры использования

                            Доброго времени суток! Меня зовут Иван Смолин, я разработчик мобильных приложений на платформе iOS. Сегодня предлагаю вам окунуться в мир функционального программирования. Статья носит по большей части теоретический характер, нежели практический. В ней я постараюсь дать определения основным понятиям функционального программирования и покажу примеры реализации на C, Objective-C, Swift, Haskell.

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

                            Существует 6 основных концепций:

                            • концепция первого класса и функций высшего порядка
                            • концепция чистых функций
                            • концепция неизменяемого состояния
                            • концепция опциональности и сопоставления с образом
                            • концепция ленивости и бесконечных структур данных
                            • концепция лямбда-исчислений

                            Читать дальше →
                          • Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

                              Вот уже около трех лет я использую в работе принципы Spec By Example, Domain Driven Design и CQRS. За это время накопился опыт практического применения этих практик на платформе .NET. В статье я хочу поделиться нашим опытом и выводами, которые могут быть полезными командам, желающим использовать эти подходы в разработке.

                              Факты, цифры, код