• PHP под С-шным дебаггером: копаемся внутри Zend Engine

      Как-то пришлось мне столкнуться с проблемой: веб-краулер на PHP работает себе нормально, работает, а потом вдруг (через 3-6 часов работы) перестает что-либо делать и начинает кушать 100% CPU. Как искать такую проблему? Как узнать, где он зацикливается? А что если подключиться к PHP сишным дебаггером и узнать оттуда все, что необходимо? Подробности под катом.
      Читать дальше →
    • Пути более эффективного использования PostgreSQL

      Прочитав статью Базы данных в онлайн играх и особенно комменты к ней, я в очередной расстроился от мысли, что многие разработчики меняют БД в своём проекте, пытаясь этой сменой решить свои проблемы, не исчерпав, однако, всех возможностей, предоставляемой заменяемой БД. Я принимаю участие в работе над проектом, БД которого характеризуется:
      • Количеством транзакций порядка 5'000 — 10'000 в секунду
      • Объемом примерно в 100ГБ (который бодро растёт)
      • Примерно равным количеством операций на чтение/запись
      • Преимущественно мелкими транзакциями

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

      Я опишу некоторые проблемы, с которыми мы сталкиваемся, и применённые решения. Если кто-то сочтёт это полезным — ради Бога. Если кто-то поправит — я буду только рад обнаружить уязвимость в используемых подходах и увеличить эффективность работы БД. Описанное может быть применено без вмешательства в логику приложения, исключительно путём модификации схемы БД.
      Читать дальше →
    • Тюнинг SQLite для PHP


      В данной статье оценивается применение SQLite для PHP-проектов, рассматриваются особенности многопоточной работы и способы ускорения работы. «На десерт» — небольшое сравнение с другими СУБД (MySQL, PosgreSQL, MS SQL, MongoDB).
      Читать дальше →
    • Изучаем Tarantool + Lua

      • Tutorial
      logo
      Хочу поделиться опытом изучения Tarantool. Про все преимущества и особенности самого Тарантула я писать не буду, на эту тему было много статей (например, эта, эта и эта). Этот пост рассказывает о том, как начать работать с тарантулом и про некоторые особенности и вкусности которые можно получить из коробки.
      Далее
    • Определение веса значимости пользователей по отношению друг к другу на основании их действий (Tarantool+Lua)

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



        В своей прошлой статье я описал базовые понятия и средства для начала работы с тарантулом. В этой статье попробую уделить больше внимания использованию хранимых процедур в Тарантуле на примере одной игровой задачи.

        Читать дальше →
        • +33
        • 8,9k
        • 3
      • Ansible

        • Tutorial
        Ansible — yet another система управления конфигурациями. Отличительная особенность — простота, при большой гибкости. И это не просто слова — дальше я покажу на примерах несколько простейших операций и познакомлю вас с некоторыми “бест практис”.

        Итак, у нас есть группы хостов:
        WebServersG1 webserver1-g1, webserver2-g1
        WebServersG2 webserver1-g2, webserver2-g2
        WebServersProxy webserver-proxy1, webserver-proxy2
        DataBase db1, db2
        DataBaseSlave dbs1, dbs2
        SomeServers someserver1, someserver2

        Мы хотим подготовить все хосты к адекватной работе — установить необходимый набор софта (htop, zsh, vim, iftop, sudo, mc, tmux, wget), скопировать свои ключи и конфиги и поставить и сконфигурировать софт специфичный для этого сервера.
        Ansible подразумевает минимум два файла для начала работы — инвентарный файл, в который мы пишем список хостов и делим их по группам — inventory и файл задачplaybook.
        Они нужны для того, чтобы когда мы все сделаем запустить все красиво:

        ansible-playbook -i инвентарный_файл playbook.yml
        

        Давайте создадим инвентарный файл по имени “infrastructure” на основе наших хостов:
        Читать дальше →
      • Настольная игра, обучающая детей программированию

          Для начала, хочу поздравить всех хабровчан с днем программиста!
          О чем же писать в этот день, как не об игре, которая позволит воспитать из вашего ребенка юного Стива Джобса или Аду Лавлейс.

          Robot Turtles — это игра от программиста из Google Дэна Шапиро.
          Она предназначена для детей от трех до восьми лет, и в неё очень легко научиться играть. Ваши детки даже не будут подозревать, что в течение игры они будут строить настоящие алгоритмы и изучать основы программирования.

          image
          Читать дальше →
        • Структуры данных, PHP. Часть вторая

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

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

          UPD: Добавил сравнение производительности
          Читать дальше →
        • Расширяем Symfony 2 Forms

          Прелюдия


          Формы, возможно, один из самых сложных компонентов Symfony2. Но за всей его сложностью скрывается поразительно гибкая архитектура, предоставляющая широкие возможности для расширения. Мы, как разработчики, можем добавлять (и изменять) типы полей форм (Form Type), использовать слушатели (Event Listeners), преобразователи данных (Data Transformers) и расширения типов (Type Extensions). О последних сегодня и поговорим.
          Читать дальше →
          • +10
          • 17,7k
          • 1
        • Удобный веб сервер на Virtualbox

          nginx
          Когда делаешь простые сайты на WordPress, то с вебсервером все просто, поставил себе Xampp и спокойно работаешь.

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

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

          Что именно хочется:
          • Поддержку нормальных url типа sitename.ru
          • Не редактировать /etc/hosts
          • Не редактировать конфиги nginx
          • Работать в локальной папке
          • Удобное администрирование конфигурации сервера
          • Изолированое окружение
          • Поставить и забыть


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

          Поэтому я поднял дебиан на виртуальной машине (virtualbox) и настроил nginx+phpfpm за пару часов, но это не очередное хау ту по связке nginx+phpfpm, мы делаем готовое решение по типу xampp.
          Хочу себе такой