• Статистика распределения доменов по AS, IP, NS, MX и прочим параметрам

      Давным-давно перестал работать 1stat.ru — откровенно говоря, для нас это была трагедия (сейчас вроде он как-то работает).

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


      Подробности
    • Делаем вебсокеты на PHP с нуля

      Некоторое время назад я выбирал библиотеку для работы с вебсокетами. На просторах интернета я натыкался на статьи по интеграции node.js с yii, а почти все статьи о вебсокетах на хабре ограничивались инструкциями к тому, как использовать phpdaemon.

      Я изучал библиотеки phpdaemon и ratchet, они достаточно монструозны (причём используя ratchet для отправки сообщения конкретному пользователю рекомендовано дополнительно использовать wamp). Мне не совсем было понятно для чего использовать таких монстров, которые требуют установку других монстров. Почитав исходники этих, а также других библиотек, я разобрался как всё устроено и мне захотелось написать простой вебсокет-сервер на php самостоятельно. Это помогло мне закрепить изученный материал и наткнуться на некоторые подводные камни, о которых я не имел представления.

      Так я решил написать необходимый для меня функционал с нуля.

      Получившийся код и ссылка на демонстрационный чат в конце статьи.
      Читать дальше →
    • Какой бывает HTML5-стриминг (и почему mp4-стриминга не существует)

        image

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

        В этой статье мы расскажем, какой бывает HTML5-стриминг, какие варианты хорошие, и почему, чёрт побери, нельзя говорить «mp4-стриминг».
        Читать дальше →
      • Приглашаю на тусовку виртуальной реальности «Новогодний VR-Today», 10 декабря

          Всем привет! В начале этой неделе предлагаю подумать о выходных! Именно в ближайшую субботу приглашаю вас на неформальную встречу участников российского рынка виртуальной реальности, где можно будет совместить приятные посиделки в баре с получением полезных знаний и бизнес-контактов. Это второй такой московский meet-up, посвящённый разработке, запуску, позиционированию и монетизации продуктов в сфере виртуальной реальности. Он пройдет 10 декабря 2016 года (практически новогодний) с 16:00 в баре «BarDisco90», расположенном около московской станции метро «Тверская». Основной целью мероприятия является популяризация технологий дополненной и виртуальной реальности в России и налаживание неформальных связей в в среде тех, кто этими технологиями занимается. А также просто попить вместе чая и чего покрепче, послушать интересные доклады, пообщаться. Вход на VR-Today бесплатный.

          Подробнее про программу ивента и адрес места проведения под катом.


          Читать дальше →
        • Разбираемся с SOLID: Инверсия зависимостей

            Давайте глянем на определение принципа инверсии зависимостей из википедии:


            Принцип инверсии зависимостей (англ. dependency inversion principle, DIP) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах. Входит в пятёрку принципов SOLID.

            Формулировка:

            A. Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
            B. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

            Большинство разработчиков, с которыми мне доводилось общаться, понимают только вторую часть определения. Мол "ну а что тут такого, надо завязывать классы не на конкретную реализацию а на интерфейс". И вроде бы верно, но только кому должен принадлежать интерфейс? Да и почему вообще этот принцип так важен? Давайте разбираться.

            Читать дальше →
          • Пишем плагин для October CMS

            На Хабре уже была публикация о выходе бета-версии OctoberCMS, на этом все закончилось. Русскоязычных материалов по этой CMS мало, поэтому я решил внести свой вклад.

            Сегодня мы с вами напишем плагин каталога для сайта.

            Подробнее о том, что эта CMS из себя представляет можно прочитать на официальном сайте. Скажу лишь, что CMS основана на фреймворке Laravel, поэтому у нас есть инструменты для командной строки artisan, Eloquent ORM, миграции, что значительно упрощает разработку.
            Читать дальше →
          • Приглашаем на Symfony Moscow Meetup 2 июня

              image

              2 июня в московском офисе Mail.Ru Group пройдёт восьмая встреча сообщества Symfony Moscow Meetup — встреча разработчиков на PHP/Symfony2. Участники обсудят разработку веб-приложений и смежные технологии, обменяются опытом, последними техническими новостями и пообщаются в неформальной обстановке. На встрече будет представлено 4 доклада. Подробности читайте под катом.
              Читать дальше →
            • Неизменяемые объекты в PHP

              • Перевод
              В этой короткой статье мы рассмотрим, что собой представляют неизменяемые объекты и почему нам следует их использовать. Неизменяемыми называются объекты, чьё состояние остаётся постоянным с момента их создания. Обычно такие объекты очень просты. Наверняка вы уже знакомы с типами enum или примитивами наподобие DateTimeImmutable. Ниже мы увидим, что если делать простые объекты неизменяемыми, то это поможет избежать определённых ошибок и сэкономить немало времени.
              Читать дальше →
            • P2P в браузере


                Автор: Александр Трищенко


                Я расскажу о своем хобби — организации видеотрансляций в браузере по технологии WebRTC (Web Real-Time Communication — веб-коммуникация в режиме реального времени). Этот проект с открытым исходным кодом Google активно развивает с 2012 г., а первый стабильный релиз появился в 2013 г. Сейчас WebRTC уже хорошо поддерживается самыми распространенными современными браузерами, за исключением Safari.

                Технология WebRTC позволяет устроить видеоконференцию между двумя или несколькими пользователями по принципу P2P. Таким образом, данные между пользователями передаются напрямую, а не через сервер. Впрочем, сервер нам все равно понадобится, но об этом скажу далее. Прежде всего, WebRTC рассчитана на работу в браузере, но есть и библиотеки для разных платформ, которые тоже позволяют использовать WebRTC-соединение.

                Если мы используем WebRTC, мы решаем следующие проблемы:

                • Снижаем расходы на содержание серверов. Серверы нужны только для инициализации соединения и чтобы пользователи обменялись сетевой информацией друг о друге. Также они используются для рассылки каких-то событий, например, оповещений о подключении и отключении пользователей (чтобы информация на каждом клиенте была актуальной).
                • Увеличиваем скорость передачи данных и уменьшаем задержки при передачи видео и звука — ведь сервер для этого не нужен.
                • Усиливаем приватность данных: нет третьей стороны, через которую шел бы поток данных (конечно, за исключением шлюзов, через которые проходят данные до выхода в сеть).

                Читать дальше →
              • Высокопроизводительный long polling чат

                Предыстория


                image Есть сайт на Laravel с посещаемостью real-time в 700-1000 человек. Ранее сайт использовал чат стороннего разработчика. Он использовал WebSockets.

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