• Ко дню рождения Юрия Кнорозова: изучаем основы письменности Майя

    • Translation

    Письменность майя была единственной полноценной системой письменности в Америке, но благодаря стараниям отважных испанских конкистадоров к XVII веку она была полностью забыта. Тем не менее, тысячи этих символов сохранились на резных камнях, фресках и керамике, и в XX веке обычный советский аспирант выдвинул идею, которая позволила их расшифровать. И данная статья покажет, как устроена эта система.
    Читать дальше →
  • Самый мягкий и пушистый путь в Machine Learning и Deep Neural Networks

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

      Не все так страшно! Собрать нейронную сеть из базовых моделей может любой, кто сколько-то знаком с программированием. И даже не обязательно учить Python, всё можно сделать на родном JavaScript. Как легко начать и зачем машинное обучение фронтендерам, рассказал Алексей Охрименко (obenjiro) на FrontendConf, а мы переложили в текст — чтобы названия архитектур и полезные ссылки были под рукой.

      Spoiler. Alert!


      Этот рассказ:

      • Не для тех, кто «уже» работает с Machine Learning. Что-то интересное будет, но маловероятно, что под катом вас ждут открытия.
      • Не о Transfer Learning. Не будем говорить о том, как написать нейронную сеть на Python, а потом работать с ней из JavaScript. Никаких читов — будем писать глубокие нейронные сети именно на JS.
      • Не о всех деталях. Вообще все концепции в одну статью не поместятся, но необходимое, конечно, разберем.
      Читать дальше →
      • +42
      • 18.9k
      • 4
    • Зачем современную веб-разработку так усложнили? Часть 1

      • Translation
      • Tutorial
      Современная фронтенд-разработка оставляет полярные впечатления: одни её любят, другие презирают.

      Я большая поклонница современной веб-разработки, хотя она мне напоминает некую «магию», со своими плюсами и минусами:

      • Когда вы поймёте, как использовать волшебные инструменты (babel! бандлеры! вотчеры! и так далее!), ваш рабочий процесс становится быстрым, мощным и восхитительным
      • Если вы не понимаете волшебные инструменты, всё ужасно запутанно
      • …и попытки освоить магию слишком часто неудачны, если вам кто-нибудь не поможет продраться через джунгли жаргона, преувеличений и устаревшей информации в интернете
      Читать дальше →
    • Топ-65 вопросов по SQL с собеседований, к которым вы должны подготовиться в 2019 году. Часть I

      • Translation


      Перевод статьи подготовлен для студентов курса «MS SQL Server разработчик»




      Реляционные базы данных являются одними из наиболее часто используемых баз данных по сей день, и поэтому навыки работы с SQL для большинства должностей являются обязательными. В этой статье с вопросами по SQL с собеседований я познакомлю вас с наиболее часто задаваемыми вопросами по SQL (Structured Query Language — язык структурированных запросов). Эта статья является идеальным руководством для изучения всех концепций, связанных с SQL, Oracle, MS SQL Server и базой данных MySQL.

      Читать дальше →
    • ConfigureAwait, кто виноват и что делать?

        В своей практике я часто встречаю, в различном окружении, код вроде того, что приведен ниже:


        [1] var x = FooWithResultAsync(/*...*/).Result;
        
        //или
        [2] FooAsync(/*...*/).Wait();
        
        //или
        [3] FooAsync(/*...*/).GetAwaiter().GetResult();
        
        //или
        [4] FooAsync(/*...*/)
            .ConfigureAwait(false)
            .GetAwaiter()
            .GetResult();
        
        //или
        [5] await FooAsync(/*...*/).ConfigureAwait(false)
        
        //или просто
        [6] await FooAsync(/*...*/)

        Из общения с авторами таких строк, стало ясно, что все они делятся на три группы:


        • Первая группа, это те, кому ничего не известно о возможных проблемах с вызовом Result/Wait/GetResult. Примеры (1-3) и, иногда, (6), типичны для программистов из этой группы;
        • Ко второй группе относятся программисты, которым известно о возможных проблемах, но они не знают причин их возникновения. Разработчики из этой группы, с одной стороны, стараются избегать строк вроде (1-3 и 6), но, с другой, злоупотребляют кодом вроде (4-5);
        • Третья группа, по моему опыту самая малочисленная, это те программисты, которые знают о том, как код (1-6) работает, и, поэтому, могут сделать осознанный выбор.

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


        Читать дальше →
      • Избегаем тригонометрии

        • Translation

        Вступление


        Мне кажется, что нам надо использовать меньше тригонометрии в компьютерной графике. Хорошее понимание проекций, отражений и векторных операций (как в истинном значении скалярного (dot) и векторного (cross) произведений векторов) обычно приходит с растущим чувством беспокойства при использовании тригонометрии. Точнее, я считаю, что тригонометрия хороша для ввода данных в алгоритм (для понятия углов это интуитивно понятный способ измерения ориентации), я чувствую, что что-то не так, когда вижу тригонометрию, находящуюся в глубинах какого-нибудь алгоритма 3D-рендеринга. На самом деле, я думаю, что где-то умирает котенок, когда туда закрадывается тригонометрия. И я не так беспокоюсь о скорости или точности, но с концептуальной элегантностью я считаю… Сейчас объясню.
        Читать дальше →
      • Курс лекций «Основы цифровой обработки сигналов»

          Всем привет!

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

          Большая часть обучающего материала для наглядного и интерактивного представления реализована с использованием Jupyter Notebook. Предполагается, что читатель имеет базовые знания из области высшей математики, а также немного владеет языком программирования Python.


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

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

          Кстати, функциональные программисты правы. Чистые функции — это хорошо. Но есть одна проблема…


          Автор материала, перевод которого мы представляем вашему вниманию, хочет рассказать о том, как бороться с побочными эффектами в чистых функциях.
          Читать дальше →
        • .NET-обёртки нативных библиотек на C++/CLI

          Предисловие переводчика


          Данная статья представляет собой перевод главы 10 из книги Макруса Хиге (Marcus Heege) «Expert C++/CLI: .NET for Visual C++ Programmers». В этой главе разобрано создание классов-обёрток для нативных классов C++, начиная от тривиальных случаев и до поддержки иерархий и вирутальных методов нативных классов.

          Идея этого перевода появилась после статьи «Unmanaged C++ library в .NET. Полная интеграция». Перевод занял больше времени, чем ожидалось, но, возможно, подход, показанный здесь, также будет полезен сообществу.
          Читать дальше →
          • +16
          • 11k
          • 2
        • Модификация общения: единый язык будущего для всего человечества


            В феврале 1905 года норвежский исследователь Руаль Амундсен взорвал ледяное иглу эскимосов с помощью динамита. Сделал он это в отместку за неподобающее поведение аборигенов: не имея понятия о частной собственности, эскимосы позаимствовали съестные припасы из трюмов корабля этнографической экспедиции.


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


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

            Читать дальше →
          • Доступно о криптографии на эллиптических кривых

            • Translation
            image


            Тем, кто знаком с криптографией с открытым ключом, наверно известны аббревиатуры ECC, ECDH и ECDSA. Первая — это сокращение от Elliptic Curve Cryptography (криптография на эллиптических кривых), остальные — это названия основанных на ней алгоритмов.

            Сегодня криптосистемы на эллиптических кривых используются в TLS, PGP и SSH, важнейших технологиях, на которых базируются современный веб и мир ИТ. Я уже не говорю о Bitcoin и других криптовалютах.

            До того, как ECC стала популярной, почти все алгоритмы с открытым ключом основывались на RSA, DSA и DH, альтернативных криптосистемах на основе модулярной арифметики. RSA и компания по-прежнему популярны, и часто используются вместе с ECC. Однако несмотря на то, что магия, лежащая в фундаменте RSA и подобных ей алгоритмов легко объяснима и понятна многим, а грубые реализации пишутся довольно просто, основы ECC всё ещё являются для большинства людей загадкой.

            В этой серии статей я познакомлю вас с основами мира криптографии на эллиптических кривых. Моя цель — не создание полного и подробного руководства по ECC (в Интернете полно информации по этой теме), а простой обзор ECC и объяснение того, почему её считают безопасной. Я не буду тратить время на долгие математические доказательства или скучные подробности реализации. Также я представлю полезные примеры с визуальными интерактивными инструментами и скриптами.
            Читать дальше →
          • Копируем человеческий мозг: операция «Свертка»

            • Translation

            Чему уже научились сверточные искусственные нейронные сети (ИНС) и как они устроены?


            1. Предисловие


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


            2. Прорыв


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


            Приведу простой и очень наглядный пример:

            Читать дальше →
          • Математика на пальцах: методы наименьших квадратов

            • Tutorial

            Введение




            Я математик-программист. Самый большой скачок в своей карьере я совершил, когда научился говорить:«Я ничего не понимаю!» Сейчас мне не стыдно сказать светилу науки, что мне читает лекцию, что я не понимаю, о чём оно, светило, мне говорит. И это очень сложно. Да, признаться в своём неведении сложно и стыдно. Кому понравится признаваться в том, что он не знает азов чего-то-там. В силу своей профессии я должен присутствовать на большом количестве презентаций и лекций, где, признаюсь, в подавляющем большинстве случаев мне хочется спать, потому что я ничего не понимаю. А не понимаю я потому, что огромная проблема текущей ситуации в науке кроется в математике. Она предполагает, что все слушатели знакомы с абсолютно всеми областями математики (что абсурдно). Признаться в том, что вы не знаете, что такое производная (о том, что это — чуть позже) — стыдно.

            Но я научился говорить, что я не знаю, что такое умножение. Да, я не знаю, что такое подалгебра над алгеброй Ли. Да, я не знаю, зачем нужны в жизни квадратные уравнения. К слову, если вы уверены, что вы знаете, то нам есть над чем поговорить! Математика — это серия фокусов. Математики стараются запутать и запугать публику; там, где нет замешательства, нет репутации, нет авторитета. Да, это престижно говорить как можно более абстрактным языком, что есть по себе полная чушь.
            Математика для программистов!
          • Яндекс в новом эксперименте ЦЕРНа: как найти тёмную материю всего за 13 лет

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

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

              И вот учёные в ЦЕРНе начинают новый эксперимент — SHiP (Search for Hidden Particles). Если такие частицы обнаружат, то Стандартную модель можно расширить. Это будет означать, что наше представление о структуре и эволюции Вселенной может поменяться. А учёные вполне могут претендовать на Нобелевскую премию. Проводить астрофизические исследования для SHiP будет космический телескоп Astro-H. Яндекс для этого эксперимента не только предоставит ЦЕРНу свои технологии машинного обучения: студенты и исследователи Школы анализа данных Яндекса будут работать совместно с его учёными.

              Сотрудничество Яндекса и ЦЕРНа началось в 2011 году, когда мы предоставили ему свои сервера. В 2012 году мы разработали для организации поисковый сервис, который использовался в рамках одного из четырех основных экспериментов ЦЕРНа на Большом адронном коллайдере — Large Hadron Collider beauty experiment (LHCb). В 2013 году ученые-физики получили возможность использовать нашу собственную технологию машинного обучения — Матрикснет. Тогда же Яндекс стал ассоциированным членом европейского Центра ядерных исследований в рамках проекта CERN openlab.



              Два года назад в Яндексе выступал Андрей Голутвин, научный консультант директора ЦЕРНа. Это было ровно за день до того, как было официально объявлено об обнаружении бозона Хиггса. А на прошлой неделе Андрей на специальном семинаре рассказал о новом эксперименте SHiP, в котором уже на этапе планирования предполагается использование технологий и знаний Яндекса. Лекция состоит из пяти частей:

              • зачем нужен эксперимент SHiP,
              • проблемы Стандартной модели,
              • как устроен детектор и что он должен измерить,
              • как создаётся международная коллаборация для создания и проведения большого эксперимента,
              • основные этапы эксперимента,
              • что коллаборация SHiP ожидает от Яндекса.

              Подробная расшифровка — под катом.
              Читать дальше →
            • Электродвигатели: какие они бывают



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

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

                Каждый электродвигатель обладает некоторыми отличительными свойствами, которые обуславливают его область применения, в которой он наиболее выгоден. Синхронные, асинхронные, постоянного тока, коллекторные, бесколлекторные, вентильно-индукторные, шаговые… Почему бы, как в случае с двигателями внутреннего сгорания, не изобрести пару типов, довести их до совершенства и ставить их и только их во все применения? Давайте пройдемся по всем типам электродвигателей, а в конце обсудим, зачем же их столько и какой двигатель «самый лучший».
                Читать дальше →
              • Как уменьшить количество измерений и извлечь из этого пользу

                  Сначала я хотел честно и подробно написать о методах снижения размерности данных — PCA, ICA, NMF, вывалить кучу формул и сказать, какую же важную роль играет SVD во всем этом зоопарке. Потом понял, что получится текст, похожий на вырезки из опусов от Mathgen, поэтому количество формул свел к минимуму, но самое любимое — код и картинки — оставил в полном объеме.
                  Читать дальше →
                • Простейшие клеточные автоматы и их практическое применение

                    Этот мир просто охренеть какой сложный, каждый день поражаюсь.

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

                    И знаете, что удивительно? Этот подход замечательно работает. Ну, почти всегда. По крайней мере, ничего лучше мы до сих пор не придумали.

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

                    image

                    Да, я о клеточных автоматах, а именно — об их подмножестве, простейших клеточных автоматах (Elementary cellular automaton). В этой статье я поведаю, что это такое, какие они бывают, какими свойствами обладают, а также отвечу на главный, на мой взгляд, и совершенно правильный вопрос, который часто несправедливо игнорируется в подобных статьях. Звучит он так: А это всё вообще зачем?

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

                    Я искренне надеюсь, что после прочтения статьи вы сами захотите поиграться с ними, и на этот случай у меня припасен собранный из JS и палок генератор.
                    Хватит воды, давай к сути
                  • Заметки о SQL и реляционной алгебре



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

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

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

                      Содержание



                      Читать дальше →
                      • +32
                      • 50.6k
                      • 8
                    • «Иная» логика и обратимые вычисления

                      камень-ножницы-бумага (на ауребеш) В конце прошлого года Google Translate к выходу нового эпизода «Звёздных войн» добавил поддержку «Галактического языка» Ауребеш. Правда оказалось, что при выборе этого языка просто происходит перевод на английский. Если использовать Chrome или Firefox, то появляется шрифт, в котором вместо латиницы подставлены символы ауребеш, ну а в IE без особых хитростей выводится английский текст.

                      Начал вспоминать другие примеры создания «языков чужаков». Например, язык Клингонов из «Звёздного пути» тоже основан на латинице, но при этом достаточно проработан, имеет свой синтаксис и словарь. Языки народов Средиземья из «Властелина колец» – вообще отдельная история.

                      А ещё существуют такие языки, как Линкос, специально разработанный Гансом Фройденталем для межпланетного общения и основанный на предположении, что математика является универсальным языком общения для любых разумных существ.
                      Читать дальше →
                    • Теория звука. Что нужно знать о звуке, чтобы с ним работать. Опыт Яндекс.Музыки

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

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



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

                        Поводом для этого поста можете считать то, что мы добавили в приложения Яндекс.Музыки возможность слушать треки в высоком качестве (320kbps). А можете не считать. Итак.
                        Читать дальше →