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

PHP *

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

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

Пошаговое создание бандла для Symfony 4

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

Около года назад наша компания взяла курс на разделение огромного монолита на Magento 1 на микросервисы. Как основу выбрали только вышедшую в релиз Symfony 4. За это время я разработал несколько проектов на этом фреймворке, но особо интересной мне показалась разработка бандлов, переиспользуемых компонентов для Symfony. Под катом пошаговое руководство по разработке HealthCheck бандла для получения статуса/здоровья микросервиса под Syfmony 4.1, в котором я постарался затронуть наиболее интересные и сложные (для меня когда-то) моменты.

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

Учим wordpress (и не только) отрисовывать быстро Youtube плееры

Время на прочтение4 мин
Количество просмотров6.5K
youtube-speedload

Я вспомнил сайт одного старого приятеля-программиста, у которого в ленте сайта один хип-хоп, лет 6 назад он плевался на скорость загрузки страниц: «да-да-да, надо переделать, да ничего сложного там нет...» а вот зашел сейчас — все по-старому :-) Не смотря на простые технические решения, допускаю, что не только у меня есть такой приятель. Поэтому эта маленькая техническая заметка.

Чтобы понимать, о какой проблеме мы говорим:
image

400kb скрипта base.js?

Остальное даже не смотрю.
После оптимизации даже без сжатия выигрышь будет в десяки раз и составит:
Читать дальше →

Управляем браузером с помощью PHP и Selenium

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

Интро


Всем привет! Сегодня я расскажу вам о том, как с помощью PHP можно работать с Selenium.

Чаще всего это бывает необходимо, когда перед вами стоит задача написать автотесты для web интерфейса или свой парсер/краулер.

С Википедии
«Selenium — это инструмент для автоматизации действий веб-браузера.
В большинстве случаев используется для тестирования Web-приложений, но этим не
ограничивается. В частности, реализация Selenium WebDriver для браузера phantomjs
часто используется как веб-граббер.»


Мы рассмотрим следующие нюансы:

  • Использование Behat/Mink для соединения с Selenium
  • Запуск Selenium в docker, и удаленный доступ по VNC
  • Расширим функционал Behat с помощью Extension Feature
Читать дальше →

Докеризируем Socket.io, redis и php

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

Для передачи данных сервером на php клиенту можно использовать следующий алгоритм:


  1. Сервер php публикует данные в канал redis.
  2. Сервер node подписывается на события в соответствующем канале redis и при
    наступлении события поступления данных публикует эти данные уже в
    socket.io
  3. Клиент подписывается на сообщения socket.io и обрабатывает их при поступлении

Исходный код проекта можно найти на github

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

Matthias Noback Об Идеальной Архитектуре — Слои, Порты и Адаптеры(Часть 2 — Слои)

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

В 2017 году Matthias Noback (автор A year with Symfony) опубликовал цикл из трех статей, в котором описал свои взгляды на идеальную архитектру корпоративных приложений, сформировавшуюся за долгие годы практики.Первая часть является вводной и не представляет особого интереса(можно ознакомитсья в оригинале). Переводом второй является данная статья. Перевод третьей будет доступен в скором времени.


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

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

Как я определял провайдера по IP

Время на прочтение4 мин
Количество просмотров21K
Постановка задачи достаточно тривиальна: нужно по IP адресу пользователя определить провайдера. Эти данные далее должны использоваться в своей системе аналитики, а также должна быть возможность сверить их с данными, например Google или Ripe.
Читать дальше →

Symfony + RabbitMQ Быстрый старт для молодых

Время на прочтение9 мин
Количество просмотров62K
Всем доброго времени суток, друзья.

Сегодня захотелось поговорить о том, как можно работать с RabbitMQ в Symfony и совсем чуть-чуть о некоторых подводных комнях. В конце я напишу парочку интересных моментов о кролике (рус. перевод «rabbit») для тех, кто совсем в танке.

Я не буду рассказывать про сам RabbitMQ, поэтому если вы пока и этого не знаете, почитайте следующие переводы:

Статья 1
Статья 2
Статья 3
Статья 4
Статья 5

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

+ Все достаточно подробно описано, когда я читал это в свое время, достаточно было интерпретировать код мысленно, чтобы понять как что и зачем.

Если вы уже знаете, что такое консумер и почему в нем нужно делать $em->clear() + gc_collect_cycles, а после закрывать соединение с базой данных, то, скорее всего, вы ничего нового для себя не узнаете. Статья скорее для тех, кто не хочет разбираться с AMQP протоколом, но которым нужно прямо сейчас применять очереди и выбор почему-то бездумно пал на RabbitMQ, а не тот же легковесный beanstalkd.

Если же у вас микросервисная архитектура и вы ждете, что я расскажу вам как сварить коммуникацию между компонентами через AMQP, как красиво делать RPC, то я сам чего-то подобного очень давно жду на Хабре…
Читать дальше →

Пишем GraphQL API сервер на Yii2 с клиентом на Polymer + Apollo. Часть 2. Клиент

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

Часть 1. Сервер
Часть 2. Клиент
Часть 3. Мутации
Часть 4. Валидация. Выводы


Для реализации UI рассмотрим пример написания веб-клиента для нашего GraphQL-сервера. И коли уж мы решили не следовать старым добрым традициям, то и в UI этого делать, конечно же, не будем и напишем его на кастомных веб-компонентах с использованием замечательной библиотеки Polymer.


Почему для подключения к GraphQL-серверу была выбрана библиотека Apollo сказать сложно, так как аналогов для работы с GraphQL я не встречал. Изначально библиотека, как и вся ее документация заточена под React, а вся информация об интеграции с Polymer ограничивается лишь ссылкой на компонент в разделе Integrations. Таким образом, если вы работаете с React, вам и карты в руки. Все примеры, твики и хуки именно для него.

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

Оптимизация шаблонов представления в Codeigniter Framework при помощи AST трансформаций

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

В последнее время, я работал с порталом, посещаемостью около 100 тысяч человек в месяц написанном на Codeigniter. Все бы ничего, но любая страница этого портала отдавалась сервером не меньше 3 секунд. При этом, железо уже не было куда расширять а об архитектуре приложения говорить не будем. Мне нужно было найти решение которое помогло бы сократить время ответа приложения с наименьшими изменениями кода.

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

Symfony: Webpack Encore — плагин для управления ресурсами

Время на прочтение6 мин
Количество просмотров20K
Позавчера обнаружил новость о том, что команда Symfony выпустила плагин Webpack Encore для интеграции замечательного инструмента Webpack в ваше приложение. Если вы не знакомы с Webpack, то я настоятельно рекомендую ознакомиться с ним, так как он возможно решит множество вопросов связанных с управлением ресурсами в вашем проекте. В любом случае даже если вы не собираетесь его использовать, знать о том что он существует будет крайне полезным. Очень хорошо этот инструмент описан тут.
Читать дальше →

Как начать работать с блокчейном Emer

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

Введение


Блокчейн-платформа Эмер существует уже три года, и на её основе работает ряд распределённых сервисов. Наибольший интерес она вызывает в среде бизнес-применений (b2b), а также IT-профессионалов, в основном – связистов и безопасников.

Она изначально проектировалась как стабильная платформа для промышленных применений, то есть исходя из соображений «здравого консерватизма». В ядро системы были введены механизмы, стабилизирующие работу сети и повышающие её эффективность. Также по соображениям безопасности был введён запрет на исполнение произвольного программного кода, загружаемого из вне, а оставлен классический скрипт Сатоши, неполный по Тьюрингу. Тем не менее, текущий ограниченный функционал без снижения безопасности позволяет создавать и эксплуатировать блокчейн-сервисы, примеры которых приведены ниже.

Основная идея платформы Emer: Много сервисов на одном блокчейне. Иными словами – установите единственный блокчейн, и получите пакет сервисов, а также возможность легко добавлять свои сервисы. Ряд компаний, таких как Deloitte и I-teco оценили возможности платформы, и уже используют её для решения своих задач. Данная статья расскажет Вам, как получить доступ к блокчейну Emer и использовать как существующие сервисы, так и внедрять свои.
Читать дальше →

Тонкости отладки или Как (не)убить полдня с debug'ом

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

Вчера потратил полдня в попытках разобраться с причиной появления исключения в PHP-коде, а с утра в голову пришла мысль, что причиной был я сам. Вернее, использование мной отладчика в IDE PhpStorm для трассировки хода выполнения кода.


image


Условия возникновения ситуации — под катом.

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

Как быстро настроить автопостинг для Facebook и Twitter

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


Здравствуйте, дорогие читатели!

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

В этой статье я хочу продемонстрировать вам простой способ постинга информации (например, статей или страниц сайта) в социальные сети с минимальным количеством усилий. Представьте себе, что вы добавляете контент на сайт, или же пользователи вашего сайта публикуют объявления (подобно тому, как это было выполнено нашей командой в работе над сайтом carvoy.com), и информация о добавлении нового контента появляется на ваших страницах в социальных сетях. Этот способ эффективен тем, что доносит информацию непосредственно целевой аудитории.
Читать дальше →

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

О том, как мы начинали разрабатывать собственную систему управления проектами и что из этого получилось

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

… На дворе стояла середина жаркого лета 2013-го. В компанию Х устроился молодой и слегка зеленый сисадмин, с базовым пониманием об администрировании и еще более базовыми знаниями php и сопричастными mysql, html, css, js.


Компания та была пропитана модными веяниями и на понятие «ИСУП» (Информационная Система Управления Проектами), разве что не молились, полагая что с введением оной, польются молочные реки и по нажатию 1 кнопки любой заказ будет выполнен четко, качественно и полностью автоматически.


Но, в связи с некоторыми особенностями работы компании Х, «стандартные» системы из коробки, к с частью или к сожалению, не подходили и именно с этого момента началась эта история…


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

Политика обратной совместимости при разработке фреймворка на примере Magento 2. Часть 1

Время на прочтение7 мин
Количество просмотров10K
image
*Поломанный кран в офисе Magento и быстрое решение воплощенное в жизнь одним из инженеров — типичный Backward Compatible фикс.
Читать дальше →

Добавление поддержки СУБД Firebird в фреймворк Laravel

Время на прочтение24 мин
Количество просмотров6.6K
Во время написания примера (позже будет ссылка) веб-приложения на PHP с использованием СУБД Firebird возник вопрос выбора фреймворка для разработки с использованием архитектурной модели MVC. Выбор фреймворков под PHP очень большой, но наиболее удобным, простым и легко расширяемым показался Laravel. Однако этот фреймворк не поддерживал из коробки СУБД Firebird. Laravel использует для работы с базой данных драйвера PDO. Поскольку для Firebird существует драйвер PDO, то это натолкнуло меня на мысль, что можно с некоторыми усилиями заставить работать Laravel c Firebird.

Laravel — бесплатный веб-фреймворк с открытым кодом, предназначенный для разработки с использованием архитектурной модели MVC (англ. Model View Controller — модель-представление-контроллер). Laravel – это удобный и легко расширяемый фреймворк для построения ваших веб-приложений. Из коробки фреймворк Laravel поддерживает 4 СУБД: MySQL, Postgres, SQLite и MS SQL Server. В этой статье я расскажу как добавить ещё одну СУБД Firebird.
Читать дальше →

Как создать тему для Magento 2 с нуля

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


Здравствуйте, уважаемые хабрапользователи! В этой публикации хочу описать процесс создания темы для Magento 2 с нуля. Magento 2 имеет достаточно большое количество нововведений и улучшений по сравнению с первой версией. По большей части они относятся к клиентской части.

Вот некоторые из них:

  1. Полная поддержка HTML5 и CSS3;
  2. Встроенный препроцессор LESS;
  3. Асинхронная загрузка модулей с помощью RequireJS (без ручного добавления скриптов в cекцию head);
  4. jQuery/jQuery UI вместо библиотеки Prototype;
  5. Magento UI библиотека (набор компонентов для простого и гибкого рендеринга пользовательского интерфейса).

Самое интересное – под катом!
Читать дальше →

Stripe: сервис вашей мечты для автоматизации денежных переводов

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

Имевшие дело с сервисом электронных платежей Stripe знают, что он отлично заточен под разработчиков. Его документация написана людьми для людей; есть хороший тестовый режим — полная копия реального, и для перехода на live-режим нужно только заменить ключи, не трогая API и не получая никаких сюрпризов; админка тестового режима — тоже полная копия боевого. В общем, Stripe — это хорошо, и я хочу посвятить эту статью базовым вопросам интеграции сервиса в e-Commerce-проект, объяснив процессы на конкретных и абстрактных примерах. Надеюсь, что мой опыт поможет всем, кто хочет попробовать Stripe на своём проекте.

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

SuggestBundle или выпадающие ajax списки в Symfony

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

Практически во всех проектах возникает необходимость отобразить выпадающий список в форме, данный в котором грузились бы с помощью ajax. В связи с этим еще 2 года назад я написал SuggestBundle для симфони, который содержит дополнительный тип формы, который может использоваться вместо стандартных типов entity и document. Ключевая особенность бандла в том, что выпадающий список подгружается с помощью ajax (при помощи библиотеки select2). На днях я наконец собрался с силами, чтобы написать документацию по бандлу и решил поделиться разработкой с сообществом.


Кроме того бандл можно использовать и для построения выпадающих список, которые никак не связаны с Doctrine ORM и Doctrine ODM.


Под катом инструкция по установке, настройке и использованию бандла.


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