• Как работает JS: WebRTC и механизмы P2P-коммуникаций

    • Translation
    [Советуем почитать] Другие 19 частей цикла
    Часть 1: Обзор движка, механизмов времени выполнения, стека вызовов
    Часть 2: О внутреннем устройстве V8 и оптимизации кода
    Часть 3: Управление памятью, четыре вида утечек памяти и борьба с ними
    Часть 4: Цикл событий, асинхронность и пять способов улучшения кода с помощью async / await
    Часть 5: WebSocket и HTTP/2+SSE. Что выбрать?
    Часть 6: Особенности и сфера применения WebAssembly
    Часть 7: Веб-воркеры и пять сценариев их использования
    Часть 8: Сервис-воркеры
    Часть 9: Веб push-уведомления
    Часть 10: Отслеживание изменений в DOM с помощью MutationObserver
    Часть 11: Движки рендеринга веб-страниц и советы по оптимизации их производительности
    Часть 12: Сетевая подсистема браузеров, оптимизация её производительности и безопасности
    Часть 12: Сетевая подсистема браузеров, оптимизация её производительности и безопасности
    Часть 13: Анимация средствами CSS и JavaScript
    Часть 14: Как работает JS: абстрактные синтаксические деревья, парсинг и его оптимизация
    Часть 15: Как работает JS: классы и наследование, транспиляция в Babel и TypeScript
    Часть 16: Как работает JS: системы хранения данных
    Часть 17: Как работает JS: технология Shadow DOM и веб-компоненты
    Часть 18: Как работает JS: WebRTC и механизмы P2P-коммуникаций
    Часть 19: Как работает JS: пользовательские элементы

    Сегодня мы публикуем перевод 18 части серии материалов, посвящённых всему, что связано с JavaScript. Здесь мы поговорим о технологии WebRTC, которая направлена на организацию прямого обмена данными между браузерными приложениями в реальном времени.

    image
    Читать дальше →
    • +33
    • 25k
    • 5
  • Рендеринг HTML файлов: глава из книги «ReactPHP для начинающих» от разработчика Skyeng

    • Tutorial


    Бэкенд-разработчик мобильного приложения Skyeng Сергей Жук продолжает писать годные книги. На сей раз он выпустил учебник на русском языке для только осваивающей PHP аудитории. Я попросил Сергея поделиться полезной самодостаточной главой из его книги, ну и дать читателям Хабры скидочный код. Ниже — и то, и другое.

    Читать дальше →
  • Шпаргалка для технического собеседования


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

      Читать дальше →
    • Архитектура и алгоритмы индексации аудиозаписей ВКонтакте



        Расскажем о том, как устроен поиск похожих треков среди всех аудиозаписей ВКонтакте.

        Зачем всё это надо?


        У нас действительно много музыки. Много — это больше 400 миллионов треков, которые весят примерно 4 ПБ. Если загрузить всю музыку из ВКонтакте на 64 ГБ айфоны, и положить их друг на друга, получится башня выше Эйфелевой. Каждый день в эту стопку нужно добавлять еще 25 айфонов — или 150 тысяч новых аудиозаписей объёмом 1.5 ТБ.

        Конечно, далеко не все эти файлы уникальны. У каждого аудио есть данные об исполнителе и названии (опционально — текст и жанр), которые пользователь заполняет при загрузке песни на сайт. Премодерации нет. В результате мы получаем одинаковые песни под разными названиями, ремиксы, концертные и студийные записи одних и тех же композиций, и, конечно, совсем неверно названные треки.

        Если научиться достаточно точно находить одинаковые (или очень похожие) аудиозаписи, можно применять это с пользой, например:

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

        Читать дальше →
      • Готовимся к собеседованию по PHP: Всё об итерации и немного про псевдотип «iterable»

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

        И, разумеется, какими бы вам странными и некорректными ни казались вопросы на собеседовании, приходить нужно всё-таки подготовленным, зная тот язык, за программирование на котором вам собираются платить.

        image

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

        Две предыдущие части:


        Добро пожаловать под кат!
      • Разрабатываем видеочат между браузером и мобильным приложением


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

          После появления WebRTC, видеочаты стало делать проще. Появились различные API и сервисы, серверы и фреймворки. В данной статье мы подробно опишем еще один способ разработки видеочата между веб-браузером и нативным Android-приложением
          Читать дальше →
          • +16
          • 18.9k
          • 8
        • 33 способа ускорить ваш фронтенд в 2017 году

          • Translation

          enter image description here


          Вы уже используете прогрессивную загрузку? А как насчёт технологий Tree Shaking и разбиения кода в React и Angular? Вы настроили сжатие Brotli или Zopfli, OCSP stapling и HPACK-сжатие? А как у вас обстоят дела с оптимизацией ресурсов и клиентской части, со вложенностью CSS? Не говоря уже о IPv6, HTTP/2 и сервис-воркерах.

          Читать дальше →
        • Самые полезные приёмы работы в командной строке Linux

          • Translation
          Каждый, кто пользуется командной строкой Linux, встречался со списками полезных советов. Каждый знает, что повседневные дела вполне можно выполнять эффективнее, да только вот одно лишь это знание, не подкреплённое практикой, никому не приносит пользы.

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

          image

          Перед вами – небольшой список полезных приёмов работы с командной строкой Linux. С некоторыми из них вы, возможно, уже знакомы, но успели их позабыть. А кое-что вполне может оказаться приятной находкой даже для знатоков. Хочется надеяться, что некоторые из них будут вам полезны и превратятся из «списка» в живые команды, которыми вы будете пользоваться каждый день.
          Читать дальше →
        • jl-sql: SQL-запросы по JSON-логами в командной строке

            Вступление никому не интересно, поэтому начну сразу с примеров использования


            json-pipe-sql
            % cat log.json

            {"type": "hit", "client": {"ip": "127.1.2.3"}}
            {"type": "hit", "client": {"ip": "127.2.3.4"}}
            {"type": "hit", "client": {"ip": "127.3.4.5"}}
            {"type": "hit", "client": {"ip": "127.3.4.5"}}
            {"type": "hit", "client": {"ip": "127.1.2.3"}}
            {"type": "click", "client": {"ip": "127.1.2.3"}}
            {"type": "click", "client": {"ip": "127.2.3.4"}}

            Выполняем запрос:


            % cat log.json | jl-sql 'SELECT client.ip, COUNT(*) AS count WHERE type = "hit" GROUP BY client.ip'

            {"client":{"ip":"127.1.2.3"},"count":2}
            {"client":{"ip":"127.2.3.4"},"count":1}
            {"client":{"ip":"127.3.4.5"},"count":2}
            Читать дальше →
          • NoSQL – коротко о главном



              Сергей Туленцев (TextMaster)


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

              Кому будет полезен этот доклад? Это обзорный доклад с претензией на структурированность. Если вы что-то где-то когда-то слышали про NoSQL, то через 40 минут вы будете знать гораздо больше, вы будете легче ориентироваться в терминах и более уверенно выбирать базы данных для своего проекта.

              Поговорим также про типичные примеры применения и как не надо применять NoSQL базы данных.
              Читать дальше →
            • Как понять, что происходит на сервере



                Александр Крижановский ( krizhanovsky, NatSys Lab.)


                По Сети уже давно бегает эта картинка, по крайней мере, я ее часто видел на Фейсбуке, и появилась идея рассказать про нее:


                Читать дальше →
              • Как работает Git

                • Translation
                В этом эссе описана схема работы Git. Предполагается, что вы знакомы с Git достаточно, чтобы использовать его для контроля версий своих проектов.

                Эссе концентрируется на структуре графа, на которой основан Git, и на том, как свойства этого графа определяют поведение Git. Изучая основы, вы строите своё представление на достоверной информации, а не на гипотезах, полученных из экспериментов с API. Правильная модель позволит вам лучше понять, что сделал Git, что он делает и что он собирается сделать.

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

                После прочтения для ещё более глубокого погружения можно обратиться к обильно комментируемому исходному коду моей реализации Git на JavaScript.
                Читать дальше →
              • Что такое большие данные, часть 2

                • Translation


                В первой части этой серии статей вы узнали о данных и о том, как можно использовать компьютеры чтобы добывать смысловое значение из крупных блоков таких данных. Вы даже видели что-то похожее на большие данные у Amazon.com середины девяностых, когда компания запустила технологию для наблюдения и записи в реальном времени всего, что многотысячная аудитория клиентов одновременно делала на их сайте. Довольно впечатляюще, но назвать это большими данными можно с натяжкой, пухлые данные — больше подойдёт. Организации вроде Агентства национальной безопасности США (NSA) и Центра правительственной связи Великобритании (GCHQ) уже собирали большие данные в то время в рамках шпионских операций, записывая цифровые сообщения, хотя у них и не было простого способа расшифровать их и найти в них смысл. Библиотеки правительственных записей были переполнены наборами бессвязных данных.


                То, что сделал Amazon.com, было проще. Уровень удовлетворённости их клиентов мог быть легко определен, даже если он охватывал все десятки тысяч продуктов и миллионы потребителей. Действий, которые клиент может совершить в магазине, реальный он или виртуальный, не так уж много. Клиент может посмотреть что в доступе, запросить дополнительную информацию, сравнить продукты, положить что-то в корзину, купить или уйти. Всё это было в пределах возможностей реляционных баз данных, где отношения между всеми видами действий возможно задать заранее. И они должны быть заданы заранее, с чем у реляционных баз данных проблема — они не так легко расширяемы.


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

                Читать дальше →
                • +14
                • 29.4k
                • 7
              • После года использования NodeJS для разработки

                Предлагаю читателям «Хабрахабра» перевод понравившейся мне статьи «After a year of using NodeJS in production» за авторством Gavin Vickery. Это продолжение его статьи «Why I’m switching from Python to Node.js», которую он написал чуть больше года назад в ответ на разочарования при использовании Python и как обоснование перехода на Node.



                Год разработки с штатными инструментами командной строки, клиентские проекты и выпуск обновлений для продуктов нашей компании, в двух словах, это то, чему я научился за это время. Я бы хотел поделиться опытом, но речь пойдет не столько про Node, сколько за весь JavaScript в целом.
                Читать дальше →
              • Websocket в продакшене

                10 месяцев назад я начал делать браузерную игрушку. Выбор пал на cocos js в качестве графики и websocket в качестве общения с сервером. Технология очень понравилась и я на ней организовал всё общение игры с сервером. Использовал для этого эту статью. Но, к сожалению, тот код, который приведен в той статье, нельзя использовать в продакшене. Как выяснилось, уровень проблемы даже не критический, а блокирующий. Всё настолько плохо, что мне пришлось переписывать всё общение с сервером с вебсокетов на longpooling. В итоге я оставил вариант «если у нас браузер не сафари, то использовать websocket, иначе longpolling» и ещё немного ветвления на эту тему.

                Так что опыт использования вебсокет в продакшене накопился приличный. И вот недавно случилось событие, которое сподвигло меня написать первую статью на Хабре.
                Читать дальше →
              • Deployer — удобный и гибкий деплой приложений

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


                  Deployer хорош во многих отношениях. Код скрипта для деплоя получается коротким. Написан на старом добром Пыхчанском — то бишь, скорее всего, ставить отдельно какие-то другие инструменты на сервер вам не придётся. Если же и придётся — то PHP обычно устанавливается одной командой на любом сервере. Почему-бы и не заюзать его в своих проектах?

                  Читать дальше →
                • MySQL – это лучшая NoSQL-система

                    При рассмотрении сценариев использования NoSQL, таких как хранение пар ключ-значение, оказывается, что MySQL более предпочтительна с точки зрения производительности, легкости использования и стабильности. MySQL – это основательная система с обилием онлайн-материалов, которые охватывают все темы от основных операций и разбора ошибок до репликации и различных паттернов использования. Это дает MySQL преимущество перед более молодыми NoSQL-системами, у которых нет такого опыта.

                    За последние годы NoSQL-системы стали господствующим направлением. Многие разработчики видят в NoSQL-системах, таких как MongoDB, Cassandra, Redis или Hadoop, оптимальный вариант для построения своих приложений, считая их единой семьей продуктов, которая обесценивает старые SQL-системы.

                    Зачастую, в основе решения об использовании базы данных NoSQL лежит рекламная шумиха или ошибочное убеждение, что реляционные базы данных не могут обеспечить такую же производительность, как базы данных NoSQL. Когда доходит до выбора базы данных, инженеры часто упускают из виду эксплуатационные расходы, а также соображения стабильности и зрелости технологии. Чтобы узнать больше об ограничениях и изъянах различных NoSQL (а также SQL) систем, обратите внимание на серию статей проекта Jepsen, опубликованную на Aphyr.com.

                    В этой статье мы объясним, почему, по нашему мнению, использовать MySQL для хранения пар ключ-значение лучше, чем большинство специализированных NoSQL-систем, а также предоставим инструкции для использования MySQL.
                    Читать дальше →
                  • Работа с WAV-файлами с использованием PHP

                    Всё началось с того, что я задумался о том, как отобразить на сайте информацию о загруженном аудио-файле. Для начала решил разобраться с самым простым форматом — wav. Как оказалось, ничего сложного в этом нет и писать именно об этом, в общем-то, не было бы никакого смысла, благо, информации о том, как устроен wav-файл «изнутри» в Интернете полно.

                    И тут Остапа понесло И тут в голову пришла светлая мысль о том, что было бы прикольно не просто отображать информацию о файле, но и иметь возможность генерировать такой файл «на лету». Думаю, все видели в сети всевозможные «онлайн-пианино» и прочее, верно?

                    Итак, что мне удалось сделать за 2 вечера — под катом.
                    Читать дальше →
                  • Объясняя необъяснимое. Часть 5

                    • Translation
                    Мы продолжаем готовиться к PG Day’16 и знакомить вас с интересными возможностями PostgreSQL.

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

                    В заключительном посте я постараюсь объяснить, почему Постгрес выбирает «Операцию X», а не «Операцию Y».


                    Читать дальше →
                    • +26
                    • 15.5k
                    • 3