• Если хотите стать программистом

      Хочу опубликовать одну старую статью, которую я уже как то публиковал на одном из сайтов. Сразу скажу — авторство не мое, статья древняя, но актуальная.
      Благодаря этому уникальному упражнению, вы, совершенно не зная ни одного языка программирования, сможете почувствовать себя настоящим программистом-профессионалом!
      Поехали
    • Регулярные выражения: никакой магии

      • Перевод
      image

      Код этого поста, как и сам пост, выложен на github.

      До недавнего времени регулярные выражения казались мне какой-то магией. Я никак не мог понять, как можно определить, соответствует ли строка заданному регулярному выражению. А теперь я это понял! Ниже представлена реализация простого движка регулярных выражений менее чем в 200 строках кода.

      Часть 1: Парсинг


      Спецификация


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

      • . — соответствие любому символу
      • | — соответствие abc или cde
      • + — соответствие одному или более предыдущего паттерна
      • * — соответствие 0 или более предыдущего паттерна
      • ( и ) — для группировки

      Хотя набор опций невелик, с его помощью можно создать интересные regex-ы, например, m (t|n| ) | b позволяющий найти субтитры к Star Wars без субтитров к Star Trek, или (..)* для нахождения множества всех строк чётной длины.

      План атаки


      Мы будем анализировать регулярные выражения в три этапа:

      1. Парсинг (синтаксический анализ) регулярного выражения в синтаксическое дерево
      2. Преобразование синтаксического дерева в конечный автомат
      3. Анализ конечного автомата для нашей строки

      Для анализа регулярных выражений (подробнее об этом ниже) мы будем использовать конечный автомат под названием NFA. На высоком уровне NFA будет представлять наш regex. При получении входных данных мы будем перемещаться в NFA от состояния к состоянию. Если мы придём в точку, из которой невозможно совершить допустимого перехода, то регулярное выражение не соответствует строке.
      Читать дальше →
      • +27
      • 9,7k
      • 4
    • Экспресс-оценка сложности алгоритма (+разбор задачи c Joker 2017 и DotNext 2017 Moscow)

        Для любого практического применения log(n) можно считать константой. Просто в некоторых компаниях эта константа больше, чем у вас. © народная мудрость

        Половину жизни я учу программировать. В том числе учу разработчиков делать быструю оценку вычислительной сложности алгоритма. Зачем?!


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


        Сначала разберёмся, как делать оценку сложности, на примере короткой, но нетривиальной задачи. Потом я расскажу, как научится делать экспресс-оценку, и покажу статистику о том, как решали задачу-пример участники конференций Joker и DotNext.


        Читать дальше →
      • Как работает JS: веб-воркеры и пять сценариев их использования

        • Перевод
        • Tutorial
        Публикуем перевод седьмой части часть серии материалов об особенностях работы различных механизмов JavaScript. Наша сегодняшняя тема — веб-воркеры. В частности, речь пойдёт о различных типах веб-воркеров, о том, как организована совместная работа тех частей, из которых они состоят, а также об их возможностях и об ограничениях, с которыми можно столкнуться в разных сценариях их использования. Здесь же будет показано 5 вариантов практического применения веб-воркеров.

        image
        Читать дальше →
      • Domain Driven Design на практике

        • Tutorial
        Эванс написал хорошую книжку с хорошими идеями. Но этим идеям не хватает методологической основы. Опытным разработчикам и архитекторам на интуитивном уровне понятно, что надо быть как можно ближе к предметной области заказчика, что с заказчиком надо разговаривать. Но не понятно как оценить проект на соответствие Ubiquitous Language и реального языка заказчика? Как понять, что домен разделен на Bounded Context правильно? Как вообще опредилить используется DDD в проекте или нет?

        Последний пункт особенно актуален. На одном из своих выступлений Грег Янг попросил поднять руки тех, кто практиукует DDD. А потом попросил опустить тех, кто создает классы с набором публичных геттеров и сеттеров, располагает логику в «сервисах» и «хелперах» и называет это DDD. По залу прошел смешок:)

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

          Цель данной статьи — поделиться простейшей стратегией статистического арбитража, основанной на торговле коинтегрированными парами акций, которые были выявлены на Московской и Нью-Йоркской биржах.

          Если мы возьмём пару коинтегрированных акций, то у нас есть возможность захеджироваться и построить рыночно-нейтральную стратегию, когда убытки по одной бумаге будут компенсироваться прибылями по другой. Как это выглядит на практике?
          Читать дальше →
        • Как построить REST-like API в крупном проекте


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


            Ключевые слова для оценки полезности: API, REST, OpenAPI, Swagger, рефакторинг взаимодействия систем.

            Читать дальше →
          • Платформы для экспериментов по обучению с подкреплением и не только

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

            В этой статье приведен краткий обзор двенадцати подобных сервисов.
            Читать дальше →
          • 5 способов улучшить свой американский оффер

              Итак, вы наконец получили оффер из американской компании. Поздравляем! Но не спешите открывать шампанское! Вам еще предстоит поторговаться перед тем, как поставить подпись в контракте. И речь пойдет не о зарплате. Это же не единственное, что вам предлагается в оффере?

              Американский специалист в области карьеры Халли Кроуфорд утверждает, что не стоит бояться спросить работодателя о дополнительных бонусах, которые могут повысить вашу удовлетворенность работой. Более того, “работодатели ожидают, что вы будете торговаться», – считает Викки Салеми, автор и эксперт по карьере в Monster. Получить дополнительные бонусы в первые пару лет после подписания контракта будет куда сложнее, поэтому действовать надо сразу.

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

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

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

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


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