• Быстрый пул для 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
          Но это можно менять.

          Читать дальше →
        • Шаблонная библиотека 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-парсер
            Читать дальше →
          • VImperator



              screenshot #1
              screenshop #2

              Введение


              Vimperator это бесплатный плагин для Firefox, который превращает его в нечто Vim-о подобное. У него стают похожими комбинации клавиш, но вы можете назвать это модальным веб-браузером, так как комбинации клавиш различны, в зависимости от режима в котором вы работаете.
              Читать дальше →