Как стать автором
Обновить
71.05

PHP *

Скриптовый язык общего назначения

Сначала показывать
Период
Уровень сложности

Redis — что быстрее, UNIX-сокет или TCP? Что стабильнее? + pconnect

Время на прочтение3 мин
Количество просмотров30K
image

Мы в PushAll обрабатываем несколько тысяч запросов в секунду для получения статистики доставки и открытия уведомлений и для передачи контента оповещений. Обычная БД вроде MySQL не справляется с таким потоком запросов и не может так быстро отвечать.

Стараясь все больше операций перенести на быстрые NoSQL хранилища вроде Redis, мы хотим знать как эффективнее его использовать и не будет ли у нас проблем с большим количеством соединений.
Также для работы мы используем форки PHP и нам было интересно, а как поведет себя Redis, если мы будем делать несколько тысяч соединений в одновременно в нескольких потоках. Мы решили поделиться с сообществом нашими тестами.
Читать дальше →

Первый хаккатон, от идеи до реализации

Время на прочтение6 мин
Количество просмотров5.2K
2 ноября 2015 года у нас в компании прошел первый хакатон. Он проходил два дня в рамках только нашего отдела. В 17:00 второго дня всем необходимо было продемонстрировать результаты своей работы. Темы можно было предлагать любые. В нем приняли участие четыре команды. Наша команда была под номером — 3. О нашем опыте я и расскажу. Кому интересно добро пожаловать под кат.
Читать дальше →

Используем миграции Yii2 для работы с несколькими базами данных

Время на прочтение3 мин
Количество просмотров22K
Миграции являются удобным инструментом для изменения структуры базы данных и поддержания ее в актуальном состоянии.

Yii2 поддерживает миграции из коробки. Использование миграций подробно описано в документации. Управление миграциями осуществляется из командной строки.

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

К сожалению, готового решения не нашел, поэтому заглянем в код фреймворка и посмотрим, как работают миграции.
Читать дальше →

Спойлер: Вставка SVG иконок одним единственным способом

Время на прочтение3 мин
Количество просмотров17K
imageВ статье будет обсуждаться проблема вставки SVG иконок в веб — страницу.

Что мы имеем, и как мы используем это. Глобально есть три способа:

  • Вставка исходного кода SVG иконки прямо в DOM страницы.
  • С помощью HTML тега IMG
  • С помощью CSS background-image

Мы не будем говорить о варианте вставки иконок в виде шрифтов, ибо у этого подхода есть масса недостатков (некоторые из них чисто субъективны), о которых можно узнать с помощью поиска в Гугл, и вариант с IFRAME и OBJECT тегами тоже опустим по той же причине.
Просветляться

Дайджест интересных материалов из мира Drupal #18

Время на прочтение4 мин
Количество просмотров6.4K
Привет!

Мы собираем полезные статьи и свежие новости из мира Drupal и делимся с вами раз в месяц. В этом выпуске провожаем зиму (и Drupal 6).

По-русски


  1. «Приятно наблюдать, как статьи по Друпал 8 постепенно наполняют русскоязычный сегмент сети...» — пишет автор открывающей статьи рубрики «По-русски». Действительно приятно! Друпал 8: Routing, links, permissions, tabs или "Hello YML" — создаём простой модуль со всеми необходимыми правами и ссылками в меню.
  2. Небольшой обзор Migrate для семёрки от этого же автора.
  3. Похоже, что на Drupal.ru пригласили писать Дэдпула. По крайней мере с чувством юмора у нашего нового Drupal-героя всё впорядке. Уже можно насладиться двумя шедеврами: Drupal 8, Cache & Rock N' Roll и Drupal 8. Entity, мы с тобой одной крови. Автор, некогда объяснять, свяжись с нами срочно!
  4. Ещё на Drupal.ru: анонс модуля render_boost для ускорения семёрки.
  5. Там же на Drupal.ru можно найти информацию по Backdrop CMS, форку семёрки для тех, кому пока велик Drupal 8.
  6. Возвращемся к классике. Новое в блоге xandeadx.ru: полезный сниппет для поддержки алиасов нод в актуальном состоякии.
  7. Там же подробно и со скриншотами, как настроить табы (локальные задачи) во Views. То же самое для восьмёрки.
  8. Интеграция custom entity с Panelizer — продолжение серии статей про сущности в блоге nightdevel.ru.
  9. Модуль Commerce Robokassa обновлен до 7.x-2.0-rc1.
  10. Тема настройки локального окружения никогда не выйдет из моды. На сей раз читайте про настройку xdebug для сложных случаев. Хештеги: #windows #virtualbox #sshtunnel #docker #phpstorm.
Читать дальше →

DI, PHPUnit и setUp

Время на прочтение2 мин
Количество просмотров11K
Инверсия зависимостей (Dependency Injection) — весьма приятная вещь, во многом облегчающая жизнь разработчику. Но она же и является причиной появления таких вот конструкторов:

public function __construct(
    \Psr\Log\LoggerInterface $logger,
    \Zend_Db_Adapter_Pdo_Abstract $dba,
    ISomeService $service,
    ...
) {
    $this->_logger = $logger;
    $this->_dba = $dba;
    $this->_service = $service;
    ...
}

Использование setUp() в unit-тестах может существенно облегчить жизнь, если нужно несколько раз создать один и тот же набор mock'ов для тестирования различных особенностей реализации разрабатываемого класса.
Читать дальше →

Инициализируемые контроллеры в Symfony и работа с аннотациями

Время на прочтение5 мин
Количество просмотров7.5K
Давным давно передо мной встала задача реализовать механизм инициализации контроллеров в Symfony, т.е. выполнение неких дефолтных действий перед каждым вызовом экшна контроллера. Первое, что пришло на ум, — это добавить EventListener для события kernel.controller, в котором будет вызываться метод контроллера initialize, если он есть. Данным способом я пользуюсь уже на протяжении нескольких лет.

Буквально на днях я задумался: а что если необходимо перед экшном выполнить разные методы для разных контроллеров, несколько методов подряд, а некоторые из них даже несколько раз и с разными параметрами? В данной статье я хочу рассказать, как я решил эту проблему с помощью аннотаций. Думаю, эта статья будет полезна в том числе и тем, кто никогда не работал с аннотациями.
Читать дальше →

Разворачиваем Drupal 8 с помощью Otto

Время на прочтение5 мин
Количество просмотров6.1K
Этот пост получился в результате моего ознакомления с Otto, одним из последних продуктов Hashicorp, о котором уже была обзорная статья на хабре.

Мой пост носит более практический характер. Я решил поднять на otto стандартный проект, чтобы сразу не наткнуться на тонкости настройки, а чтобы было интересно, выбрал Drupal 8, вышедший недавно.

image
Читать дальше →

Заставляем сервис php-fpm 5.6, запущенный через systemd, читать глобальные переменные окружения

Время на прочтение6 мин
Количество просмотров14K
Это короткий how-to для реализации конфигурации php-сервиса, зависимого от окружения, в котором он запущен. Я буду рад, если кто-то подскажет более изящное решение или поправит в мелочах.

Основная идея


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

Проблема

В этой статье слишком много раз повторяется «переменные окружения».
Из коробки php-fpm игнорирует глобальные переменные окружения (getenv function), в то время как php cli их может получать.
Читать дальше →

Пример модуля для Magento 2

Время на прочтение6 мин
Количество просмотров22K


Данная статья устарела. Вот новая.



На неделе пощупал пример создания модуля для Magento 2. В ходе прощупывания пытался сформировать рабочее окружение по аналогии с выработавшимся у нас на данный момент окружением для разработки модулей под Magento 1.

  • размещение кода модуля в репозитории Github'а;
  • подключение модуля к Magento-приложению при помощи Composer'а;
  • автоматизация процесса развертывания девелоперской/тестовой версии Magento;

Под катом ссылка на github-проект с примером модуля под Magento 2 с (полу)автоматическим развертыванием среды для его разработки.
Читать дальше →

Дайджест интересных материалов из мира Drupal #10

Время на прочтение7 мин
Количество просмотров9.5K
Всем привет!

Безумно рады представить вам десятый, юбилейный, выпуск Drupal-дайджеста! За последний месяц было обработано порядка 100 различных статей, ссылок и видео, — все это, чтобы сэкономить нам всем время на поиск информации об этой замечательной системе. Очень надеемся, что вам понравится.

Читать дальше →

Немного о юнит-тестировании и внешних API в PHP

Время на прочтение6 мин
Количество просмотров15K
Юнит-тестирование — одна из неотъемлемых частей процесса разработки, и оно становится сложнее и противоречивее, если основная задача Вашего кода — отправлять запросы ко внешним API и обрабатывать ответы. Немало копий сломано о тему, каким должно быть тестирование кода, завязанного на внешних источниках, и где проходит грань между тестированием собственного кода и чужих API.

На этом этапе разработчикам приходится решить, какие запросы отправлять на удалённый сервер, а какие симулировать локально. Существует немало решений как для отправки запросов, так и для их симуляции. В своём посте я расскажу, как сделать и то, и другое на базе HTTP клиента Guzzle.


Упростить себе жизнь

Асинхронный PHP — миф? Реальность! Видео с DevConf 2014

Время на прочтение1 мин
Количество просмотров13K


Доклад посвящен асинхронному программированию в PHP, где будут рассмотрены все доступные для разработчика возможности: от самых примитивных до самых высокотехнологичных, о которых вы еще, возможно, не знаете.
Читать дальше →

Ближайшие события

Дайджест интересных материалов из мира Drupal #9

Время на прочтение6 мин
Количество просмотров6.6K
Всем привет!
За месяц у нас накопилось много интересных ссылок для вас. Встречайте девятый выпуск!


По-русски


Весна в русском Drupal-сообществе прошла плодотворно. Ловите десять ссылок на отличные статьи на русском:

  1. В блоге angarsky.ru вышла большая техническая статья «Создание ноды через кастомную форму с использованием модального окна CTools». И хотя этот материал далеко не для новичков, мы с честью открываем им дайджест! Всё очень подробно и грамотно рассказано и показано на реальном коде.
  2. Немного хардкора от того же автора: «Получить программно список обновлений для БД». Эта заметка демонстрирует преимущества открытого фреймфорка Drupal — при желании вы можете сделать всё, что угодно.
  3. Ещё одна практическая статья «Как добавить форму редактирования поля сущности к своей форме» вышла в блоге drupaler.by. Кстати, у Ctools и для полей есть удобные хелперы, чтобы не разбираться с подводными камнями Field API в одиночестве.
  4. Куда ж без андеда и его неповторимого краткого стиля изложения. Модуль Language Domains будем иметь ввиду.
  5. Хотите сделать свой rapidshare c таймером перед скачиванием? Павел Катаев поделился своим модулем Delay Download для этой цели, правда пока что модуль не доступен с drupal.org.
  6. И ещё код: «Как программно редактировать профиль пользователя».
  7. Пётр Лозовицкий рассказал, как переводил сайт с MySQL на PostgreSQL.
  8. Новенькое на сайтах сообщества. На drupal.ru читайте про настройку сервера на основе конфига nginx-джедая Perusio.
  9. На dru.io вышла заметка про любимые Drush-команды Василия Устинова.
  10. Ребята из DrupalSPB.org провели очередной митап (презентации смотрите на страницах докладов) и Global Training Day, за что им большое уважение!

Читать дальше →

Удобная отладка с PHPixie Debug

Время на прочтение5 мин
Количество просмотров9.5K
image
PHPixie Debug был создан чтобы улучшить отладку при разработке в любой среде. Конечно если вы уже используете веб фреймворк то скорее всего проблем с отладкой нет, но вот когда вы пишете какую-то библиотеку, решаете задачку или даже работаете с Wordpress, то удобной отладки сильно недостает. Даже для такого базового функционала как превратить все ошибки в исключения приходится регистрировать свой хендлер. В таких случаях PHPixie Debug в всего лишь две строки кода создаст удобную среду для разработки.
Читать дальше →

Cовременный подход к HTTP с PHPixie и PSR-7

Время на прочтение3 мин
Количество просмотров8.9K
image
Стандартный PHP API для работы с HTTP запросами давно устарел. Программисты научились не использовать глобальные переменные, но стандартные суперглобалы как $_GET, $_SERVER все еще напоминают нам о далеком прошлом. Конечно фреймворки инкапсулируют эту информацию в свои Request\Response классы, но таких реализаций очень много и пока еще не было единственного стандарта. Стандарт PSR-7 от PHP-FIG как раз должен привести репрезентацию HTTP протокола к единственному знаменателю что позволит писать Middleware который будет работать сразу на многих фреймворках. Он пока еще не принят, но досрочное голосование показало практически единоголосную поддержку нового стандарта. PHPixie готовясь к релизу версии 3.0 уже приняла и имплементировала PSR-7, а также предоставляет обертки для упрощенной работы с интерфейсом. Если вы хотите создать свой микрофреймворк то взяв PHPixie HTTP за основу, сможете добиться результатов уже за один вечер.
Читать дальше →

Post Hawk. Перезагрузка

Время на прочтение2 мин
Количество просмотров7.1K


Здравствуй, %habrauser%!

С момента первой публикации прошло уже полгода. За это время в сервисе произошло много изменений. Новый сайт. Доработанная документация. Улучшенное апи.
Подробнее

Дайджест интересных материалов из мира Drupal #6

Время на прочтение6 мин
Количество просмотров8.8K
Всем привет!

Самое интересное и полезное из мира Drupal за прошедшие 3 недели.


Читать дальше →

Оптимизация для начинающих, или о пользе профилирования

Время на прочтение5 мин
Количество просмотров18K
Попалась мне задача написать на PHP оптимальный алгоритм вставки нового значения в упорядоченный массив. Причем аргументировано доказать, что именно этот алгоритм лучший. Для этого предлагалось написать три варианта и выбрать из них лучший. Конечно же я знаю, что лучший метод поиска — бинарный, но раз сказали доказать, что он лучший, так и быть, напишу еще два. С таким настроем и уверенностью в будущем результате я и принялся кодить.

Что из этого получилось приглашаю начинающих программистов почитать, а опытных обсудить.
Читать дальше →

Система доступа к документам для MODX

Время на прочтение18 мин
Количество просмотров8.5K
Всем хорошего дня.

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

Итак, рассмотрим наши требования к документу (по крайне мере, у меня были такие):
  1. У документа должны быть заголовок и содержание;
  2. У документа должен быть тип (для более простого поиска документов одного типа);
  3. У владельца документа всегда есть доступ к его редактированию и просмотру;
  4. У владельца сайта и его юристов есть произвольный доступ к любому из документов;
  5. Владелец сайта и те, кому он это разрешил, должны иметь возможность выдавать нужным им пользователям права на просмотр и редактирование произвольного документа;
  6. Произвольный зарегистрированный пользователь может получить право на только просмотр либо также и редактирование произвольного документа на время либо сразу навсегда.

Читать дальше →