• Асинхронный PHP и история одного велосипеда

    После выхода PHP7 появилась возможность сравнительно небольшой ценой писать долгоживущие приложения. Для программистов стали доступны такие проекты, как prooph, broadway, tactician, messenger, авторы которых берут на себя решение наиболее частых проблем. Но что если сделать небольшой шаг вперёд, углубившись в вопрос?


    Попробуем разобрать судьбу ещё одного велосипеда, который позволяет реализовать Publish/Subscribe приложение.

    Читать дальше →
  • Краткий и бодрый обзор архитектуры компиляторов

    • Translation

    Большинство компиляторов имеют следующую архитектуру:



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

    Целевая аудитория статьи — люди, чье представление о работе компиляторов крайне ограничено (максимум — то, что они занимаются компилированием). Однако я жду, что читатель разбирается в структурах и алгоритмах данных.

    Статья ни в коем случае не посвящена современным производственным компиляторам с миллионами строк кода — нет, это краткий курс «компиляторы для чайников», помогающий разобраться, что такое компилятор.
    Читать дальше →
  • Включаем поддержку TLS v1.3 в Nginx на примере Debian 9

    • Tutorial
    Всем доброго времени суток!

    Данный пост написан вследствие победы желания докопаться до сути над усталостью, сонливостью, соблазном опрокинуть очередную бутылочку пива пятничным вечером. Сразу скажу, что ничего супер сложного не раскрываю, всего лишь включение TLS v1.3 в Nginx.

    image

    Наверняка на Хабре найдутся те, кто уже 100 раз это делал, поэтому данная статья — больше для новичков или для тех, кто хочет найти готовое решение в виде мануала, не тратя много времени на поиски, как я, например. Вспомнив, что давно не писал на Хабре и поставив статье метку «tutorial», принялся за дело.
    Читать далее
  • Регулярные выражения: никакой магии

    • Translation
    image

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

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

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


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


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

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

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

    План атаки


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

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

    Для анализа регулярных выражений (подробнее об этом ниже) мы будем использовать конечный автомат под названием NFA. На высоком уровне NFA будет представлять наш regex. При получении входных данных мы будем перемещаться в NFA от состояния к состоянию. Если мы придём в точку, из которой невозможно совершить допустимого перехода, то регулярное выражение не соответствует строке.
    Читать дальше →
    • +27
    • 19.1k
    • 4
  • Парсеры, обработка текста. Просто о сложном. CFG, BNF, LL(k), LR(k), PEG и другие страшные слова

    Наверное, каждому программисту приходилось сталкиваться с задачами вида «прочитать что-то в формате А и произвести с ним некие манипуляции». Будь то json, логи nginx, cfg, sql, yaml, csv или что-то еще. Хорошо, когда можно воспользоваться библиотекой, однако, по разным причинам, это удается не всегда. Тогда и встает вопрос создания собственного парсера для заданного формата. И это, как говорят англичане, часто оказывается PITA (болью в ...). В этой статье я постараюсь облегчить эту боль. Кому интересно, добро пожаловать.
    Читать дальше →
  • Сегментация памяти (Схема памяти компьютера)

    • Translation
    Представляю, Вам, перевод статьи одного из разработчиков PHP, в том числе версии 7 и выше, сертифицированного инженера ZendFramework. В данный момент работает в SensioLabs и большую часть занимается низкоуровневыми вещами, в том числе программированием в С под Unix. Оригинал статьи здесь.

    Ошибка Сегментации: (Компьютерная верстка памяти)


    Несколько слов, о чем эта запись в блоге


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

    То, что вы будете читать здесь, краткое изложение основ дизайна компьютерной архитектуры. Я не буду заходить слишком далеко, если это не нужно, и буду использовать хорошо известные формулировки, так что, кто работает с компьютером каждый день может понять такие важные понятия о том, как работает ПК. Существует много книг о компьютерной архитектуре. Если вы хотите углубиться дальше в этой теме, я предлагаю вам достать некоторые из них и начать читать. Кроме того, откройте исходный код ядра ОС и изучите его, будь то ядро Linux, или любое другое.
    Читать дальше →
    • +16
    • 21.3k
    • 7
  • Квантовые вычисления: отжиг с выключателями и прочее веселье

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


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

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


        Читать дальше →
      • Трёхмерная графика с нуля. Часть 1: трассировка лучей

        • Translation
        image


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

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

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


        Читать дальше →
      • Типографика и современный CSS

        • Tutorial
        Типографика и CSS

        Пока некоторые CSS свойства, отвечающие за разного рода красивости (вроде filter, mix-blend-mode или transition) привлекают внимание всех и каждого, другие совсем мало освещаются в интернете. Взять хотя бы свойства, отвечающие за типографику. Они весьма полезны и эффектны, но широко не известны. Давайте же исправим несправедливость и осветим то, что обычно остается в тени.
        Читать дальше →
      • BaumankaCoin – велосипед в 3000 строк или блокчейн на пальцах

        Про Blockchain сегодня не пишет только ленивый. Существует огромное количество статей разной степени понятности и полезности. Это очередная из них. Нам захотелось создать максимально простой, но работающий блокчейн и написать кратко, но понятно для неспециалистов, как же эта собака этот блокчейн работает. Так родился проект BaumankaCoin, исходники которого можно загрузить c GitHub-а.


        Многие люди представляют себе технологию блокчейн и криптовалют как некий мега rocket science. Безусловно, чтобы понять все тонкости и нюансы – потребуется потратить много времени; но в действительности данная технология, если разобраться, оказывается гораздо более простой для понимания, чем принято считать. Реализовав свой coin мы намеревались помочь людям понять "на пальцах" устройство данных технологий.


        Читать дальше →
        • +21
        • 16.6k
        • 7
      • [Перевод] Круглее круга: оптические эффекты при проектировании интерфейсов

        • Translation
        Какой «круг»воспринимается как самый «круглый»?

        image

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

        Как создать визуально пропорциональные иконки, правильно расположить объекты разных форм и выполнить идеальное скругление углов. В посте представлено более 50 изображений.
        Читать дальше →
      • Шпаргалка по Flexbox (CSS3 Flexible Box)

        • Translation
        Мне не нова магия Flexbox, но я не часто ее использую, и поэтому после паузы в использовании мне приходится открывать вот этот пост на CSS-Tricks чтобы освежить память.

        Я решила создать краткую визуальную шпаргалку по Flexbox для тех случаев освежения памяти после паузы в будущем. Думаю, что у меня получилась шпаргалка, основанная на… шпаргалках.


        Читать дальше →
      • Что такое Entity System Framework и зачем он нужен в геймдеве?

        На Хабре уже есть очень много интересных статей про создание игры с нуля, но мало статей, описывающих что делать, чтобы своя любимая поделка не превратилась во Франкенштейна и дошла до вменяемого состояния. Автор оригинальной статьи рассказывает, как эволюционировал код игрового движка от кучи хлама в основном цикле к продуманной, расширяемой архитектуре, использующей Entity Component System. В статье много кода, который почти весь часто повторяется — но я не стал его выбрасывать, поскольку с ним будет понятнее, какие изменения вносит автор и как это отражается на всей структуре. Статья рассчитана на новичков, вроде меня, которые уже настрочили несколько «гениальных» прототипов, но теперь не знают, как разобраться в их коде.
        Читать дальше →
      • Первые 10 минут на сервере

        • Translation
        • Tutorial

        Азбука безопасности Ubuntu


        «Мои первые 5 минут на сервере» Брайана Кеннеди — отличное введение, как быстро обезопасить сервер от большинства атак. У нас есть несколько исправлений для этой инструкции, чтобы дополнить ею наше полное руководство. Также хочется подробнее объяснить некоторые вещи для более юных инженеров.

        Каждое утро я проверяю почтовые уведомления logwatch и получаю основательное удовольствие, наблюдая несколько сотен (иногда тысяч) безуспешных попыток получить доступ. (Многие довольно прозаичны — попытки авторизоваться как root с паролем 1234 снова и снова). Приведённая здесь общая методика подходит для серверов Debian/Ubuntu, которые лично мы предпочитаем всем остальным. Они обычно служат только хостами для контейнеров Docker, но принципы те же.

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

        Примечание: Эта справка создана как базовая азбука. Её следует расширить и дополнить в соответствие с вашими потребностями.
        Читать дальше →
      • DevConf-2016: ждём заявок на доклады

          Пьешь свой смузи в коворкинге? Зарылся в коде в офисе? Не проспи главное событие этого лета! Разработчики, фронтэндеры, девопсы — приглашаем принять участие в ежегодной международной конференции по веб-разработке, которая состоится 17 июня 2016 года в г.Москва.

          image
          Читать дальше →
        • Как сделать многослойную Parallax иллюстрацию на CSS & JavaScript

          • Translation
          • Tutorial
          image
          Рисунок используемый для parallax эффекта. Автор Patryk Zabielski

          Привет друзья, я покажу вам как создать простою многослойную иллюстрацию с глубиной, которая переходит к контенту. Мы будем использовать метод, в котором необходим только css и чистый JS(coffeescript) (Никаких jQuery!).

          Этот урок для начинающих, с начальным знанием JS и CSS, так что я буду объяснять большинство вещей и ссылаться на внешние источники.

          Финальное демо
          Читать дальше →
        • Подробный обзор Affinity Designer (Mac OS). Часть 2

            image

            Первая часть обзора

            В этот раз расскажу о рабочих панелях. Если в общем, то все примерно такое же как в Иллюстраторе. Есть пара непонятных моментов, есть пара очень удобных штук, которых нет у больших конкурентов. Включить все или по отдельности можно в меню «View->Studio->...»

            Читать дальше →
          • Дайджест игровой индустрии: февраль

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


              Читать дальше →
            • Angular 1.5: Компоненты


                Не так давно увидел свет релиз Angular 1.5, который привносит множество интересных нововведений. Важной особенностью

                данной версии является то, что это первый из череды релизов, который должен сгладить концептуальный разрыв между Angular1.x и Angular2.x. Для людей, у которых есть необходимость вести проекты на Angular сейчас, но в будущем планируется постепенная миграция на Angular2, это очень радостная новость.

                В данной статье я постараюсь осветить основные нововведения:

                • Компоненты!
                • Односторонние биндинги!
                • Мульти-слот трансклюды!

                Полный список изменений доступен в репозитории ангуляра. Так же нас ждет небольшой примерчик использования перечисленных фич.
                Читать дальше →