• Индексы в PostgreSQL — 10


      В прошлых статьях мы рассмотрели механизм индексирования PostgreSQL и интерфейс методов доступа, а также хеш-индексы, B-деревья, GiST, SP-GiST, GIN, RUM и BRIN. Нам осталось посмотреть на индексы Блума.

      Bloom


      Общая идея


      Классический фильтр Блума — структура данных, позволяющая быстро проверить принадлежность элемента множеству. Фильтр очень компактен, но допускает ложные срабатывания: он имеет право ошибиться и счесть элемент принадлежащим множеству (false positive), но не имеет права сказать, что элемента нет в множестве, если на самом деле он там присутствует (false negative).

      Фильтр представляет собой битовый массив (называемый также сигнатурой) длиной m бит, изначально заполненный нулями. Выбираются k различных хеш-функций, которые отображают любой элемент множества в k битов сигнатуры. Чтобы добавить элемент в множество, нужно установить в сигнатуре каждый из этих битов в единицу. Следовательно, если все соответствующие элементу биты установлены в единицу — элемент может присутствовать в множестве; если хотя бы один бит равен нулю — элемент точно отсутствует.

      В случае индекса СУБД мы фактически имеем N отдельных фильтров, построенных для каждой индексной строки. Как правило, в индекс включаются несколько полей; значения этих полей и составляют множество элементов для каждой из строк.

      Благодаря выбору размера сигнатуры m, можно находить компромисс между объемом индекса и вероятностью ложного срабатывания. Область применения Блум-индекса — большие, достаточно «широкие» таблицы, запросы к которым могут использовать фильтрацию по любым из полей. Этот метод доступа, как и BRIN, можно рассматривать как ускоритель последовательного сканирования: все найденные индексом совпадения необходимо перепроверять по таблице, но есть шанс вовсе не рассматривать значительную часть строк.
      Читать дальше →
    • Редактор сценариев Age of Empires 2 можно превратить в машину Тьюринга

      • Перевод
      image

      Ничто не может сравниться с вечером, потраченным на логику высказываний, машины Тьюринга
      и редактор сценариев AOE2…

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

      1. Считывать и записывать символы
      2. Менять позицию в моём «пространстве памяти»
      3. Иметь «ленту» или «память»
      4. Иметь пул используемых символов

      Кроме того, мне нужно иметь возможность записывать какие-нибудь правила. Здесь также будет очень полезен доступ к логике высказываний. С этого я и начал свои исследования (то есть с поисков в Гугле), и через полчаса получил все нужные мне ответы.
      Читать дальше →
      • +34
      • 10,1k
      • 8
    • OWASP Automated Threat: автоматизированные угрозы веб-приложений

        image

         
        В методологии OWASP Automated Threat Handbook представлена информация защите веб-приложений от автоматизированных угроз. Эти угрозы связаны с использованием автоматизированных средств, отказа от обслуживания, нарушения логики работы приложения, "брошенные корзины", незавершенные транзакции и т.д.

        Читать дальше →
      • Тестирование микросервисов: разумный подход

        • Перевод


        Движущая сила микросервисов


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

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

        Однако, когда дело доходит до тестирования (или, чего похуже, разработки) микросервисов, выясняется, что большинство компаний по-прежнему испытывает привязанность к допотопному способу тестирования всех компонентов вместе. Создание сложной инфраструктуры считается обязательным условием для проведения сквозного (end-to-end) тестирования, при котором набор тестов для каждого сервиса обязательно должен быть выполнен — делается это для того, чтобы убедиться, что в сервисах не появилось регрессий или несовместимых изменений.
        Читать дальше →
        • +34
        • 7,5k
        • 9
      • Рассуждения на тему виртуальной реальности

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


          Читать дальше →
        • «Когда я стал Android-разработчиком, ещё негде было искать примеры»: интервью с Давидом Гонсалесом



            Android-разработчики могут знать Давида Гонсалеса в связи с несколькими разными вещами. Например, он участвует в open source-проекте Android Architecture Blueprints, где разные архитектурные подходы демонстрируются на конкретных примерах (недавно проект преодолел рубеж в 25 000 GitHub-звёзд). А также выступает с докладами, занимается бельгийской Kotlin User Group, ранее активно писал блог-посты — в общем, помогает сообществу многими способами, и звание Google Developer Expert неудивительно.

            Так что в интервью мы тоже расспросили Давида сразу о нескольких темах: начали с Android Architecture Blueprints, перешли к Kotlin, а закончили аутентификацией в Android, которой посвящён его новый доклад.
            Читать дальше →
            • +32
            • 4,7k
            • 2
          • Ммм, длинные выходные!
            Самое время просмотреть заказы на Фрилансим.
            Мне повезёт!
            Реклама
          • Почему Ramda?

            Пост содержит перевод статьи «Why Ramda?», которую подготовил один из контрибьютеров Скот Сайет. Статья была опубликована 10 Июня 2014 года на сайте и рассказывает о том почему стоит обратить своё внимание на библиотеку Ramda и функциональное программирование в целом.


            Примечание переводчика

            В связи с тем, что статья была написана в 2014 году, некоторые примеры устарели и не работали с последней версией библиотеки. Поэтому они были адаптированы под последнюю версию Ramda@0.25.0.

            Почему Ramda?


            Когда-то давно buzzdecafe представил миру Ramda, в тот же момент сообщество поделилось на два лагеря.

            Читать дальше →
            • +32
            • 3,5k
            • 8
          • Webpack 4, import() и CommonJS

            • Перевод

            В JavaScript много забавного. У одного из самых популярных в мире языков программирования до сих пор нет стабильного синтаксиса разбиения кода на части. То есть в стандарте синтаксис ESM с «import» наперевес уже есть, но в браузерах и ноде он спрятан за флагами, а в вебпаке его поддержка появилась совсем недавно во 2-й версии. Добавим к этому миграцию ноды и вебпака с CommonJS «require» на ESM «import» и полмиллиона пакетов NPM, подавляющая часть которых использует CommonJS. Немного разобраться с зоопарком поможет вышедшая на прошлой неделе статья от автора Webpack, адаптированнй перевод которой ждет вас под катом.
            Читать дальше →
            • +31
            • 5,6k
            • 1
          • Avito Quiz: Golang

              Привет! Сегодня продолжаем серию мини-квизов в нашем блоге. Этот выпуск (предыдущий здесь) будет посвящен языку Go — будем считать, что это разминка в преддверие GopherCon Russia 2018 (кстати, у нас на этой конференции будет стенд, и мы планируем несколько интересных активностей).


              Под катом — семь вопросов и пара пасхалок. Ответы на вопросы выложим апдейтом к посту в понедельник, 26.02. Если будете решать — кладите ответы под спойлер, чтобы не портить другим фана.


              Enjoy!


              Читать дальше →
            • Краткая история Rust: от хобби до самого популярного ЯП по данным StackOverflow

                Rust — это язык системного программирования, создатели которого уделили внимание трем вещам: параллелизму, скорости и безопасности. И хотя Rust считается молодым языком программирования — его первая стабильная версия вышла в 2015 году — он разрабатывается уже более десяти лет.

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

                Читать дальше →
              Самое читаемое