• Быстрый пул для php+websocket без прослойки nodejs на основе lua+nginx

    nginx + lua

    Кратко: nginx не умеет пулить websockets, а php работает per request. Нужна прослойка которая будет держать открытыми вебсокеты и при поступлении данных соединяться с php (через тот же fastcgi) и отправлять обратно ответ.

    update: Здесь не идётся про решения на php, так как по сравнению даже с nodejs, они гораздо медленнее.

    Тема, как оказалось, не нова, исходники тянуться аж из 2014, но, тем не менее, информации о трюке, про который здесь пойдёт речь, крайне мало. Можете погуглить "websockets php". Усугубляется тема ещё тем, что найденные примеры реализации (два, точнее) не работают, включая тот, что в документации :)
    Читать дальше →
  • Заставляем совместно работать open_basedir + realpath_cache

      Заметив некоторое замедление работы PHP на постоянных проверках lstat всех путей открываемых файлов и директорий, решил поднастроить производительность, увеличив realpath_cache_size. Был немного удивлён, когда получил из
      var_dump(realpath_cache_size(),realpath_cache_get());
      

      int(0); array(0) {}


      Ещё больше удивило, что этот баг до сих пор не решён в последних версиях PHP 5.6, а в документации про него ни слова (один комментарий пользователя месяц назад).

      Некоторым гуглением было найдено решение: расширение, совмещающее в себе open_basedir и работающее через кеш путей php. Turbo_realpath.

      В Pecl его нет, поэтому скачиваем архив с офсайта (для версий 5.4+, ниже смотрите на офсайте).
      Читать дальше →
    • Простейший SMTP сервер для разработок

        Для ленивых и не желающих возиться, сдувать пыль с бубна по настройке exim4/postfix/sendmail предлагается простейший сборщик почты написанный на Python[1].

        Его работа заключается в сборе всей почты, посылаемой этому фейковому smtp серверу и складывании её в указанную папку /tmp/mails в виде файлов писем nobody@mail.local.1 с порядковым номером.

        Читать дальше →
      • Используем Cmake для автоматической генерации makefile в проектах

        • Tutorial
          Вступление большое, так как подробно объясняет зачем нужен cmake. Можете сразу под кат, если уже знаете.

        Вступление


          Компилирование проекта руками — пустая трата времени. Это фактически аксиома и об этом знают те, кто программирует. Но чтобы всё скомпилировалось автоматически необходимо задать правила, так ведь? Часто и по-старинке используют makefile для *nix или какой-нибудь nmake для windows.
          Я хоть и не первый год программирую, и руками составлял простые автосборщики проектов на основе makefile, но стоит немного подзабыть и приходится заново изучать как же составить эту хитрую схему. В основном приходится делать проекты расчитанные на какую-то одну систему, будь то linux или windows, и часто между собой не кросскомпилируемые. Для переносимости makefile используется automake и autogen, но их синтаксис ещё более запутан. Не скажу, что выбор идеальный, но для себя я решил перейти на cmake, благо он портирован под всё доступное. Мне он показался более человекопонятным. Попробую объяснить основы. Вы пишите словами правила, а из них генерируется makefile, который вы уже запускаете стандартным способом.

        Ликбез

          Зачем он нужен? Чтобы при переносе на другую машину, с другими путями вы двумя командами собрали проект ничего не исправляя в файле makefile. Но есть же configure? Это альтернатива. И configure не кросплатформенный, для его генерации нужен autoconf/autogen, для которых идёт ещё свой набор правил. Только преимущества? Компиляция автосгенерированным makefile получается немного медленнее старого способа. Например, в KDE-4 является официальным инструментом выпуска.
        Приступим
      • Конфигурационные файлы. Библиотека libconfig

        Введение


        Как-то находясь в поиске как мне прикрутить конфигурационные ini файлы или json к моему сервачку перебирал варианты, но почему-то они были неудобны или слишком простые, или велосипеды. И хоть я люблю xml конфигурирование, но порою это чрезмерно огромные файлы и неудобно для небольшого количества настроек писать много текста. Раз задал другу вопрос по этой теме, он то мне и подкинул библиотеку. Напоминает она json в смеси с yaml.



        Библиотека имеет два интерфейса: функциональный и объектный. Они очень похожи, так как объектный использует внутри функциональную реализацию, но имеют некоторые различия, рассмотренные в данном посте.

        Читать дальше →
      • Мой вариант .htaccess

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

          Вашему вниманию мой вгляд на правила обработки URL с объяснениями и коментариями «почему так?».

          Сперва логика


          Объясню сперва логику:
          1) все страницы имеют .html окончания.
          2) все языки для страниц имеют вид pagename.en.html или pagename.html для языка по умолчанию. Никто, конечно, не запрещает иметь ссылки, где язык идёт вначале как /en/
          3) «входной» скрипт только один в docroot.
          4) Разрешены запросы на другие скрипты только в docroot
          5) Соглашение по определению окончаний в url:
          # site.com/
          # site.com/index -> site.com/
          # site.com -> site.com/
          # site.com/file/ -> site.com/file.html
          # site.com/file -> site.com/file.html
          # site.com/dir/file ->site.com/dir/file.html
          # site.com/dir/file/ -> site.com/dir/file.html
          Но это можно менять.

          Читать дальше →
        • Как разрабатывались первые процессоры Intel

            Спустя примерно год после запуска электронного монетоприемного механизма в производство бывший глава компании Mars Inc., Форест Марс-старший (Forest Mars, Sr.) обратился к г-ну Хайману за разъяснениями принципов действия и возможностей устройства. Он, в частности, попросил г-на Хаймана организовать встречу с главой Intel д-ром Робертом Нойсом (Robert Noyce), и спустя неделю такая встреча действительно состоялась. Пространное повествование д-ра Нойса о постоянно расширяющейся деятельности Intel «на переднем крае высоких технологий» привело к тому, что г-н Марс, привыкший иметь дело с продукцией, способной обеспечить стабильно устойчивую прибыль в долгосрочной перспективе, потерял всякий интерес к приобретению фирмы, занимавшейся разработкой никому тогда еще не ведомых кремниевых устройств. Как отмечает г-н Хайман, «если бы кремниевые технологии не развивались столь стремительными темпами, Intel вполне могла бы стать подразделением компании Mars, Inc»


            Я думаю, интересно будет вам почитать именно про самое начало разработок.

            Читать на сайте Intel'а.
          • Шаблонная библиотека cxxtools

              Начиная рабочий проект под Linux, я застрял в поисках С++ библиотеки, которая бы 1) была free, 2) умела работать с сокетами и можно быстро было поднять свой сервер, 3) нужна была оббёртка над потоками для плюсов. Сперва я наткнулся на Qt, но через некоторое время Qt стал слишком тяжелым для поставленной цели. В итоге поиски подтолкнули к cxxtools.

              Кратко
              Кратко о том, что умеет делать библиотечка:
              • умеет работать с TCP сокетами и поднимать на их основе слушающий сервер;
              • умеет парсить http запросы и отдавать ответы;
              • умеет работать с SSL;
              • реализован быстрый механизм сигналов (как раз похожий на Qt);
              • имеется похожий на boost-овский, но более удобный шаблон Function / Method; необходим для callback-функционала
              • умеет работать с потоками (threads): attached и detached threads;
              • удобный шаблон пула (pool);
              • гораздо удобнее smart pointer (ну имхо конечно), чем тот же std::smart_ptr и auto_ptr. Позволяет использовать разные политики управления классом и подсчёта ссылок, что удобно и необходимо для многопотоковых реализаций
              • удобный механизм логирования
              • ini-парсер
              Читать дальше →
            • модификация PHP: своё расширение

                Это вводная статья, что начнёт цикл посвящённый модификации php. Основные цели этого занятия: а) доделать мне свой проект; б) будет подталкивать меня хоть что-то делать, и в) может и вам пригодится.

                И так, что необходимо мне в модуле и зачем он нужен
                а) множественное наследование или реализация что-то типа mixins. Да, я знаю, что есть такое уже написанное похожее, но я это хочу разобрать и показать что, как и зачем происходит.
                а-2) разъяснить для чего какие структуры используются.
                б) добавить разные удобные функции, которыми часто пользуюсь, но которые на чистом php не достаточно быстро работают.
                в) попытаться модифицировать синтаксис php (а в друг получится)
                г) попытаться написать что-нибудь на c++ для php.
                д) Д
                е) может что-то реализовать то, что кто-то хотел, но не знал как

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

                упд2. я хочу описать внутренние алгоритмы так, чтобы было понятно. а что получится, то получится

                упд3. так как карму сбили, то написать теперь ничего не выйдет.

                пока что можно накидать вопросов или предложений.

                ниже будет оглавление статей.