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

    • Перевод

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



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

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

    Статья ни в коем случае не посвящена современным производственным компиляторам с миллионами строк кода — нет, это краткий курс «компиляторы для чайников», помогающий разобраться, что такое компилятор.
    Читать дальше →
  • Учимся общаться между микросервисами на Node.js через RabbitMQ

    • Tutorial

    Это продолжение статьи «Пишем первый микросервис на Node.js с общением через RabbitMQ», которая была неплохо принята пользователями хабра.


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

    Читать дальше →
    • +13
    • 9,9k
    • 3
  • Preload, prefetch и другие теги

    • Перевод
    Есть много способов повышения веб-производительности. Один из них — предзагрузка контента, который понадобится позже. Префетчинг CSS, предварительный рендеринг полной страницы или резолвинг доменного имени. Делаем всё заранее, а потом мгновенно отображаем результат! Звучит круто.

    Ещё круче, что это очень просто реализовано. Пять тегов <link rel> дают браузеру команду на предварительные действия:

    <link rel="prefetch" href="/style.css" as="style" />
    <link rel="preload" href="/style.css" as="style" />
    
    <link rel="preconnect" href="https://example.com" />
    <link rel="dns-prefetch" href="https://example.com" />
    
    <link rel="prerender" href="https://example.com/about.html" />
    Читать дальше →
    • +33
    • 28,5k
    • 1
  • Многомировая интерпретация квантовой механики

      Наверняка большинство из вас нет-нет да и встречало в научно-популярной литературе упоминания о «многомировой интерпретации» квантовой механики (ММИ). Ее любят помянуть и в комментариях на Хабре, однако зачастую в неверном ключе или с серьезными неточностями.

      image

      Попробуем разобраться, что же к чему в ММИ.
      Читать дальше →
    • Делаем современное веб-приложение с нуля

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

      В этой статье мы попробуем набросать boilerplate простейшего веб-приложения со следующей архитектурой:


      Что мы покроем:

      • настройка dev-окружения в docker-compose.
      • создание бэкенда на Flask.
      • создание фронтенда на Express.
      • сборка JS с помощью Webpack.
      • React, Redux и server side rendering.
      • очереди задач с RQ.
      Читать дальше →
    • Как подступиться к fullstack-разработке сегодня, если ты проспал десять лет



      Привет, Хабр! Несколько месяцев назад у меня остро встал вопрос смены профиля деятельности и я обнаружил, что для претендента на вакансию web-разработчика сейчас недостаточно навыков десятилетней давности (какая неожиданность!). Пришлось срочно актуализировать свои знания. Заодно я решил составить шпаргалку с описанием большинства современных технологий, чтобы в случае чего кидать жаждущим новых знаний линк на эту статью, да и самому не забывать.
      Читать дальше →
    • Бухгалтерские машины, IBM 1403, и почему 132 колонки – это стандарт для принтеров

      • Перевод
      Задумывались ли вы о том, почему у принтеров так популярна ширина текста в 132 символа? Многие принтеры выдавали строки по 132 символа, например, прорывной Centronics 101 матричный принтер (1970), повсеместный терминал DECwriter II (1975), матричный принтер Epson MX-80 (1981), и Apple Daisy Wheel Printer (1983). Даже на ЭЛТ терминалах, например, на DEC VT100 (1978) была поддержка 132 колонок. Но откуда пошла популярность 132 колонок?

      Изучив вопрос, я пришёл к выводу о наличии двух ответов. Первый состоит в том, что в 132 колонках нет ничего особенного. Ранние принтеры были удивительно разнообразны в вопросе длины строк – среди них встречались строки длиной 50, 55, 60, 70, 73, 80, 88, 89, 92, 100, 118, 120, 128, 130, 136, 140, 144, 150 и 160 символов. Это говорит об отсутствии убедительных технических или коммерческих причин для использования именно 132 колонок. Вместо этого 132 колонки стали фактическим стандартом из-за популярности компьютера IBM 1401 и его высокоскоростного линейного принтера 1403, который печатал по 132 колонки.

      Второй, более интересный ответ, состоит в том, что различные факторы в истории обработки данных, некоторым из которых исполнилось уже сто лет, привели к стандартизации нескольких размеров распечатанного текста. Один из них стал стандартом для бумаги для линейного принтера, на которой умещалось 132 символа.
      Читать дальше →
    • Чему нас научила PDP-11?

      • Перевод

      C. G. Bell, W. D. Strecker, “Computer What Have We Learned from the PDP-11,” The 3rd Annual Symposium on Computer Architecture Conference Proceedings, pp. l-14, 1976.

      Эта статья, которую я выбрал сегодня, является ретроспективой компьютерного дизайна. Это одна из ряда статей Гордона Белла с различными соавторами, описывающей разработку, рост, и внезапную замену культовой линейки продуктов компании, миникомпьютеров PDP-11.
      Читать дальше →
    • Текстовый редактор — это вам не высшая математика, тут думать надо

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



        В основе статьи — доклад Алексея Кудрявцева с Joker 2017. Алексей уже лет 10 пишет Intellij IDEA в JetBrains. Под катом вы найдете видео и текстовую расшифровку доклада.
        Читать дальше →
      • «Скорость – это такая фича, от которой никто никогда не отказывается» — интервью с Дмитрием Жемеровым из JetBrains

          Сегодня пятница, а пятница на хабре — это отличный день для чего-то необычного. Сегодня я предлагаю вашему вниманию интервью с Дмитрием yole Жемеровым, человеком, который приложил руку и к IntelliJ IDEA, PyCharm, Kotlin и многим другим продуктам компании JetBrains.

          О чем мы поговорили:
          • как развивается IDEA, куда она движется
          • в чем разница между IntelliJ и JetBrains
          • зачем в компании два CEO
          • что происходит в Kotlin'e
          • с какими трудностями столкнулась команда Kotlin в процессе разработке языка
          • что такое Language Design Review
          • что представляет собой современный Google
          • почему закрылся Google Code
          • почему хабр важен для разработчиков IDE




          Под катом — расшифровка этого интервью.
          Приступить к прочтению
        • Замыкания в JavaScript для начинающих

          • Перевод
          • Tutorial
          Замыкания — это одна из фундаментальных концепций JavaScript, вызывающая сложности у многих новичков, знать и понимать которую должен каждый JS-программист. Хорошо разобравшись с замыканиями, вы сможете писать более качественный, эффективный и чистый код. А это, в свою очередь, будет способствовать вашему профессиональному росту.

          Материал, перевод которого мы публикуем сегодня, посвящён рассказу о внутренних механизмах замыканий и о том, как они работают в JavaScript-программах.

          Читать дальше →
        • Введение в процессы загрузки ядра и запуска системы Linux

          • Перевод
          Всем привет! Вот мы и открыли очередной, четвёртый по счёт уже, поток курса «Администратор Linux», который уверенно занимают свою нишу рядом с девопсерским курсом. Больше преподавателей, больше информации и стендов. Ну и как всегда больше интересной информации, которую подобрали преподаватели.

          Поехали.

          Задумывались ли вы когда-нибудь, что нужно для того, чтобы ваша система была готова к запуску приложений?

          Понимать процессы загрузки ядра и запуска системы Linux, важно для настройки Linux и решения проблем запуска. В этой статье представлен обзор процесса загрузки ядра с использованием GRUB2 загрузчика и запуска, выполняемого системой инициализации systemd.

          На самом деле, есть два ряда событий, необходимых для приведения компьютера с Linux в рабочее состояние: загрузка ядра (boot) и запуск системы (startup). Процесс загрузки ядра начинается при включении компьютера и заканчивается с инициализацией ядра и запуском systemd. После этого начинается процесс запуска системы, и именно он доводит компьютер Linux до рабочего состояния.

          Читать дальше →
        • Переход с jQuery на Vue.js

          • Перевод
          Автор статьи, перевод которой мы публикуем сегодня, полагает, что в мире существует ещё много программистов, которые, когда им нужно разработать простое веб-приложение, обращаются к jQuery. Обычно это случается тогда, когда некую страницу нужно оснастить простыми интерактивными возможностями, но использование для этого какого-нибудь JavaScript-фреймворка кажется явным перебором. Ведь это — килобайты ненужного кода, шаблоны, инструменты для сборки проектов, средства для упаковки модулей… При этом подключить к странице jQuery, воспользовавшись CDN-ресурсом, проще простого.



          В этом материале речь пойдёт о том, как перевести проект, созданный с использованием jQuery, на Vue.js. Этот проект будет создан на jQuery, а потом переработан с применением Vue. Автор материала хочет продемонстрировать всем желающим то, что использование Vue, даже в сравнительно небольших проектах, не обязательно означает чрезмерное увеличение размера кода таких проектов и большую дополнительную нагрузку на программиста. Это, наоборот, при практически тех же размерах вспомогательного кода, что и при использовании jQuery, позволяет повысить производительность труда и улучшить качество приложений.
          Читать дальше →
        • Пособие по Ansible

          • Перевод

          управление конфигурацией оркестра


          Это практическое пособие познакомит вас c Ansible. Вам понадобится виртуальная или реальная машина, которая будет выступать в роли узла для Ansible. Окружение для Vagrant идет в комплекте с этим пособием.


          Ansible — это программное решение для удаленного управления конфигурациями. Оно позволяет настраивать удаленные машины. Главное его отличие от других подобных систем в том, что Ansible использует существующую инфраструктуру SSH, в то время как другие (chef, puppet, и пр.) требуют установки специального PKI-окружения.


          Пособие покрывает такие темы:


          1. Установка Ansible и Vagrant
          2. Файл инвенторизации
          3. Модули shell, copy, сбор фактов, переменные
          4. Запуск на группу хостов
          5. Плейбуки
          6. Пример: поднимаем кластер, устанавливаем и настраиваем Apache и балансировщик нагрузок HAproxy
          7. Обработка ошибок, откат
          8. Шаблоны конфигурации
          9. Роли

          Ansible использует так называемый push mode: конфигурация «проталкивается» (push) с главной машины. Другие CM-системы обычно поступают наоборот – узлы «тянут» (pull) конфигурацию с главной машины.


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

          Читать дальше →
        • Vue.js tutorial: от jQuery к Vue.js

          Привет, Хабр! Представляю вашему вниманию перевод статьи Vue.js Tutorial: From jQuery to Vue.js автора Paul Redmond.


          Что касается библиотек JavaScript, то никогда не было более популярной библиотеки, чем jQuery. Она создавалась для обхода DOM элементов с использованием CSS селекторов в то время, когда совместимость браузеров была важной проблемой для разработчиков.


          Фактически jQuery настолько универсален, что я подумал что он отлично передаст то, почему я люблю писать UI с Vue, используя компонентный JavaScript. В этом руководстве мы сначала рассмотрим создание пользовательского интерфейса с jQuery, а затем перепишем его с помощью Vue.

          Читать дальше →
        • Эволюция структур данных в Яндекс.Метрике

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



            Но обработка данных — это не проблема. Проблема в том, как и в каком виде сохранять результаты обработки, чтобы с ними можно было удобно работать. В процессе разработки нам приходилось несколько раз полностью менять подход к организации хранения данных. Мы начинали с таблиц MyISAM, использовали LSM-деревья и в конце концов пришли к column-oriented базе данных. В этой статье я хочу рассказать, что нас вынуждало это делать.

            Яндекс.Метрика работает с 2008 года — более семи лет. Каждый раз изменение подхода к хранению данных было обусловлено тем, что то или иное решение работало слишком плохо — с недостаточным запасом по производительности, недостаточно надёжно и с большим количеством проблем при эксплуатации, использовало слишком много вычислительных ресурсов, или же просто не позволяло нам реализовать то, что мы хотим.
            Читать дальше →
          • Big Data от А до Я. Часть 1: Принципы работы с большими данными, парадигма MapReduce

            • Tutorial

            Привет, Хабр! Этой статьёй я открываю цикл материалов, посвящённых работе с большими данными. Зачем? Хочется сохранить накопленный опыт, свой и команды, так скажем, в энциклопедическом формате – наверняка кому-то он будет полезен.



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



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


            Читать дальше →
          • Как работает реляционная БД

            • Перевод
            • Tutorial
            Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

            На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
            Читать дальше →
          • Прокачка TinyMCE 4

            Здравствуйте, меня зовут Константин, я работаю front-end-разработчиком на информационно-развлекательном портале, основную долю контента которого составляют новости и статьи. И, конечно же, нам было крайне важно организовать удобную работу с порталом для наших редакторов. О том, каких успехов мы добились на данном поприще, и будет эта статья.
            Читать дальше →
            • +31
            • 45k
            • 5