• Асинхронные запросы к MySQL

      В mysqlnd появилась возможность выполнять запросы к MySQL асинхронно, то есть продолжить работу скрипта не дожидаясь выполнения запроса и формирования результата. Преимущество такого подхода очевидно, ведь можно выполнить массу полезной работы во время ожидания запроса, но для начала я приведу немного другой пример:

      Допустим у Вас есть 3 запроса (q1, q2, q3), каждый запрос выполняется за определенное время (t1, t2, t3), например так:

      SELECT 1 AS val, SLEEP(1) AS sleep
      SELECT 2 AS val, SLEEP(2) AS sleep
      SELECT 3 AS val, SLEEP(3) AS sleep
      


      В случае синхронного выполнения запросов, Вы сможете получить результаты их выполнения через t1 + t2 + t3 (ex: 6 секунд), а в случае асинхронного выполнения запросов уже за max(t1, t2, t3) (ex: 3 секунды)

      Примеры работы с асинхронными запросами, а также другие примеры работы с mysqlnd можно найти на github

      Под катом reverse engineering, segfault и больше подробностей работы с асинхронными запросами
    • Git и публикация сайта

      • Перевод
      При попытке отредактировать этот старый пост слетело всё форматирование. Может быть я его когда-нибудь исправлю.

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

      Основные преимущества:
      • Делая push из удалённой копии мы автоматически обновляем live-копию сайта
      • Правки файлов на сервере не будут разрушать историю коммитов
      • Простота, не нужны особые правила выполнения коммитов
      • Можно применить к уже запущенному сайту, без повторного деплоя или перемещения файлов
      посмотреть, что там такое
    • Полезные ссылки для PHP разработчика с MageConf 2012

        MageConf 201216.09.2012 в Киеве в три потока прошла конференция MageConf 2012. Два потока были посвящены системе Magento, третий – PHP. Посетив все 6 докладов на потоке PHP, хотел бы кратко изложить основную информацию, донесенную спикерами. В итоге пост получился набором полезных ссылок по разработке на PHP.

        Докладчики особое внимание уделяли утилитам и софту, которыми они активно пользуются в Magento. Один из спикеров ранее был разработчиком портала i.ua.
        Читать дальше →
      • Отдаем файлы эффективно с помощью PHP

          Если Вам потребовалось отдавать файлы не напрямую веб сервером, а с помощью PHP (например для сбора статистики скачиваний), прошу под кат.
          Три способа отправить пользователю файл и не повесить сервер
        • Графовая база данных Neo4j в PHP

          В последнее время я все чаще слышу о NoSQL и о графовых базах данных в частности. Но воспользовавшись хабропоиском с удивлением обнаружил, что статей на эту тему не так и много, а по запросу «Neo4j», так вообще 4 результата, где косвенно упоминается это название в тексте статей.

          Что такое Neo4j?


          image
          Neo4j — это высокопроизводительная, NoSQL база данных основанная на принципе графов. В ней нет такого понятия как таблицы со строго заданными полями, она оперирует гибкой структурой в виде нод и связей между ними.

          Как я докатился до этого?


          Уже более года я не использовал в своих проектах SQL, с того времени, как попробовал документо-ориентированную СУБД "MongoDB". После MySQL моей радости не было предела, как все просто и удобно можно делать в MongoDB. За год, в нашей студии создания сайтов, переписали тройку CMS, использующих основные фишки Mongo c её документами, и с десяток сайтов работающих на их основе. Всё было хорошо, и я уже начал забывать, что такое писать запросы в полсотни строк на каждое действие с БД и все бы ничего пока на мою голову не свалился проект с кучей отношений, которые ну никак не укладывались в документы. Возвращаться к SQL очень не хотелось, и пару дней я потратил чисто на поиск NoSQL решения, позволяющего делать гибкие связи — на графовые СУБД. И по ряду причин мой выбор остановился на Neo4j, одна из главных причин — это то, что мой движок был написан на PHP, а для неё был написан хороший драйвер "Neo4jPHP", который охватывает почти 100% REST-интерфейса, предоставляющегося сервером Noe4j.
          Читать дальше →
        • Красной таблетки не существует

            О чем это


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

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

            На самом деле, после пары десятков проектов я пришел к выводу, что все это — не более чем заблуждения, и чудеса происходят только в книгах авторов, которые делают на своих бестселлерах миллионы. Или в головах консультантов, которые делают деньги, продавая вам фуфло в виде Agile, KPI и прочих умных слов.

            Я не сделаю, возможно, в этом посте никаких открытий. Но сэкономлю вам пару лет, если вы решитесь поверить моему опыту.

            Читать дальше →
          • О сортировке контента на основе оценок пользователей: Часть 3

              В прошлой статье я вывел формулу, которая прогнозирует рейтинг на основе оценок статьи и средней оценки по сайту. Думал в этой статье, я покажу качество ее прогноза, улучшу прогноз за счет дисперсии. Однако, появилась еще одна проблема.
              image
              Читать дальше →
              • +30
              • 13,3k
              • 4
            • jQuery plugin для форм с динамической структурой

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

                1. Контактная форма, в которой есть поле «телефон». Пользователь может добавить еще несколько дополнительных полей для телефонов, если возникнет желание.

                2. Счет на оплату. Есть фиксированный набор полей, таких как «имя плательщика» и «номер счета». Кроме того, есть таблица с позициями. Каждая позиция состоит следующих полей: «наименование», «количество», «цена». Пользователь может добавлять произвольное количество дополнительных позиций.

                Давайте рассмотрим работу с jqDynaForm на примере такого счета. Вот пример такой формы:



                Читать дальше →
              • Автоматическая проверка кода для PHP

                Разрешите представить Вам перевод статьи Johannes Schmitt Automated Code Reviews for PHP. Лично мне она помогла несколько иначе взглянуть на процесс разработки и тестирования своих приложений. А оригинальный подход автора к тестированию, как минимум, заслуживает внимания.
                Если вам тоже интересно, добро пожаловать под кат.
                Читать дальше →
              • HybridAuth — интеграция сайта с социальными сетями

                • Tutorial

                Введение


                На своем сайте на php для авторизации пользователей я в последнее время пользовался сервисом Loginza. Все было очень круто и удобно, но в голове начала зарождаться идея отказа от этого замечательного сервиса и вот почему:

                1. Авторизация пользователей в случае закрытия Loginza или отказа от нее — в этом случае мы потеряем пользователей, в привязанных профилях которых не указан email;
                2. Дополнительная информация, например, ВКонтакте умеет отдавать фото пользователя в нескольких видах, в том числе квадратный аватар. С Логинзой получить эти данные не представляется возможным, сервис сам решает какие данные запрашивать и какие отдавать;
                3. С момента продажи Яндексу Логинза начала умирать: на запросы пользователей никто не отвечает, сервис не развивается, а находится в том виде, в котором был 1-2 года назад.

                Встал вопрос замены и использовать альтернативные сервисы желания уже не возникало — никто не представлял возможности «общаться» с соц. сетью напрямую, а расширенные поля профиля обычно включались в платные услуги. Хотелось автономного решения с возможностью гибкой настройки запрашиваемых полей и в итоге я остановился на php библиотеке HybridAuth.
                Подробнее о HybridAuth
              • Управляем чайником из браузера или как я интернет-розетку делал


                В этой статье я хочу рассказать о моем опыте создании управляемой розетки. Не GSM(это всем надоело, да и слишком просто — читай sms да дергай пинами), а управляемой через браузер, с помощью кнопочек на HTML-страничке.

                Итак, какой же путь должен проделать сигнал, чтоб включить чайник?
                Нажатие кнопки на странице -> переход по ссылке и отработка web-сервера -> выполнение CGI скрипта -> передача команды по UART контроллеру -> появление напряжение на пине -> срабатывание реле, которое включает чайник.

                Рассмотрим все по порядку.
                Читать дальше →
              • Небольшой тест скорости QCoreApplication

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

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

                Давайте посмотрим на простую функцию:
                QCoreApplication app(argc, argv);
                QTimer::singleShot(3000, &app, SLOT(quit()));
                return app.exec();
                

                Это Qt-приложение, не имеющее графического интерфейса. Оно работает 3 секунды и затем завершается.
                Читать дальше →
              • Использование библиотек QSerialDevice и Qwt для организации коммуникации с контроллером и отображения данных



                  В продолжение своей статьи «Простой электронный самописец» хочу поделится опытом создания терминала для сообщения с разработанным мной девайсом на основе библиотек QSerialDevice и Qwt, ну и естественно Qt. QSerialDevice работает с любым COM-портом (реальным или виртуальным) определенным операционной системой, поэтому не имеет значения каким способом контроллер подключен к ПК: непосредственно через адаптер UART->RS-232(MAX-232), через адаптеры UART->USB(FT-232, CP2101) или UART->Bluetooth(BTM-222), также можно, например, подключить Arduino-совместимое устройство (адаптер UART->USB уже напаян на плату). Qwt же — мощное средство отображения данных. Их общий плюс — кроссплатформенность, это же Qt, достаточно скомпилировать коды под нужной платформой — и все работает! Так что, кому интересно, прошу под кат!
                  Читать дальше →
                • Памятка пользователям ssh

                    abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

                    Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

                    Оглавление:
                    • управление ключами
                    • копирование файлов через ssh
                    • Проброс потоков ввода/вывода
                    • Монтирование удалённой FS через ssh
                    • Удалённое исполнение кода
                    • Алиасы и опции для подключений в .ssh/config
                    • Опции по-умолчанию
                    • Проброс X-сервера
                    • ssh в качестве socks-proxy
                    • Проброс портов — прямой и обратный
                    • Реверс-сокс-прокси
                    • туннелирование L2/L3 трафика
                    • Проброс агента авторизации
                    • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
                    Читать дальше →
                  • Быстрые зомби

                    • Перевод
                    Это перевод нового сообщения из блога Valve Linux.

                    Один из факторов приятной игры — это скорость её работы. В этом посте я расскажу о том, что мы узнали о производительности графики наших игр, работающих в Linux.
                    Любой разрабочик скажет, что производительность — очень запутанная вещь. Поэтому, для простоты повествования, мы сосредоточимся на следующей топовой конфигурации:
                    Под катом история о том, как Left 4 Dead 2 стал работать на Linux быстрее, чем на Windows 7
                  • Написание программ на PHP с использованием fork()

                      Параллельные программы на PHP


                      Раньше заголовок темы был «Написание многопоточных программ на PHP». В PHP есть ровно один «нормальный» способ писать приложения, которые используют несколько ядер/процессоров — это fork(). О прикладном использовании системного вызова fork() в языке PHP и расширения pcntl я и расскажу. В качестве примера мы напишем достаточно быструю параллельную реализацию grep (со скоростью работы, аналогичной find . -type f -print0 | xargs -0 -P $NUM_PROCS grep $EXPR).
                      Читать дальше →
                    • PHP process manager

                      image

                      Всем привет!

                      На Хабре было много статей, о том как писать демоны на PHP и другие fork-нутые вещи. Хочу поделится с вами своими наработками на схожую, но все-таки несколько другую тему — управление несколькими PHP процессами.
                      Читать дальше →