16 декабря 2017 г в Киеве прошла конференция по разработке на Magento - Mageconf 2017
Я посетил эту конференцию в рамках работы в компании "220 Вольт".
От нашей компании на конференцию поехали 3 человека. Иван Кулик - директор интернет магазина, Федор Зубков - project manager, Антон Шелыганов - PHP/Magento разработчик.
Вылетели из Санкт-Петербурга в пятницу 15 декабря, в 14:45. Летели компанией БелАвиа, с пересадкой в Минске, поскольку рейсов из России на Украину нет. Перелет получился немного утомительным, зато много кормили.
В данном посте решается задача обнаружения мата в комментариях. Впринципе можно сделать с помощью stop words. Эти списки есть в открытом доступе. Но, как правило, списки неполные. И уж точно не учитывают все возможные словоформы
В итоге многие матерные слова все равно идут мимо фильтра. На помощь приходят анализаторы. Всего мне попалось 2 анализатора, которые работают неплохо(смотрел варианты на php).
Создание GRUD и связанной логики в Magento 2 может быть непростой задачей.
Достаточно прочитать это руководство, чтобы понять это.
Постепенно привыкаешь и все это уже выглядит не так сложно. Но, если ты только начал работать с magento, то создание grid в админке magento напоминает ритуал воскрешения сатаны. Если же понадобится сделать еще один модуль с grid, то весь процесс придется повторить.
В нашем проекте DIY price мы используем Magento 2 в качестве ecommerce движка. Сначала пытались делать проект полностью на magento но в итоге пришли к headless режиму. Frontend написан на VueJS, отделен от magento и взаимодействует с ней по Rest API. Такой подход приносит определенные сложности - многое нужно продумывать самому, нехватает некоторых методов api и т.д. В то же время упрощает работу frontend разработчиков, дает больше гибкости. Настраивать тему magento под свои нужды иногда может быть непростирой задачей. В конечном итоге headless архитектура оправдывает себя.
В качестве поискового движка планировали использовать Elastic Search. Причем в нашем случае мы можем даже обращаться к нему напрямую, тем самым разгружая magento. К тому же мы используем Magento Enterprice и его поддержка заявлена из коробки. Правда начинали мы разработку на Comunity Edition и искали возможности интеграции уже в этот момент.
Всем привет! Сегодня расскажу про подсветку кода в markdown файлах. То, что описано в этой статье, Я использую непосредственно на этом сайте. Для отображения этой самой статьи!
Вероятно, проще всего сделать блог на wordpress. Но я же все-таки - программист!. Поэтому я предпочел сделать его на Symfony. Оба подхода имеют свои преимущества и недостатки. Так, например, мне удобнее писать статьи не в админке, а в IDE. И хранить все тексты не в базе данных, а в файлах под git.
В этой статье речь пойдет про автоматическое тестирование в CMS Magento 2. Использовалась Magento 2.2
Общеизвесно, что magento достаточно сложная система сама по себе. Она требовательна к ресурсам. Разрабатывать под нее сложно и долго. В целом, у меня сложилось очень неоднозначное впечатление от ее использования.
Если мы делаем крупный проект на Magento с большим количеством самописных модулей, то, наверняка, в какой-то момент захочется писать автотесты.
В предыдущей статье мы насторили окружение для тестов. В этой статье попробуем писать сами тесты.
У нас есть модуль. Пусть это будет личный кабинет. Но в отличии от стандартного модуля magento, это будет rest api. К нему можно будет подключить свой frontend.
Тесты будут лежать в папке Tests Здесь будут Unit тесты, Интеграционные тесты, вспомагательный код и фикстуры.
Всем привет. Не так давно делал тестовое задание для одной компании. Вакансия Senior PHP Developer, на удаленку. Нужно было сделать web сервис на Laravel, который будет загружать ресурсы по http.
Всем привет! Недавно сделал демонстрационный проект, который содержит основные наработки по Elastic Search. Реализовал примеры функционала, который был сделан в рамках последних проектов.
В демонстрационном проекте есть примеры обычного и нечеткого поиска, фильтрации, агрегации, поиска с синонимами, динамического обновления настроек индекса, подсветки поисковых запросов, поиска с учетом руской морфологии, поиска с учетом стоп-слов и поисковых подсказкок. Также есть примеры поиска по документам(PDF, DOC, XLS и т.д.) с помощью ingest плагина.
Всем привет! В этой статье рассмотрим генерацию кода для Yii2 из командной строки. С Yii я работаю достаточно давно, еще с первой версии. Одной из интересных особенностей фреймворка является встроенный кодогенератор Gii. С его помощью можно быстро сгенерировать модели данных, контроллеры и даже целые CRUD блоки на основании таблицы базы данных.
Это достаточно полезно для быстрого прототипирования или для создания основы приложения. Конечно, обычно код потом меняется под нужды конкретной задачи.
Gii предоставляет графический интерфейс для создания кода. Им достаточно просто и удобно пользоваться. Также по нему есть довольно подробная документация.
В то же время, Gii поддерживает генерацию кода из консоли. Это почти не описано в документации, однако может быть полезно при частом использовании.
Всем привет! Сегодня я в Москве на конференции PHP Russia 2019. Представляю вашему вниманию краткий конспект докалада "Асинхронный PHP". Автор доклада - Антона Шабовта из компании Onliner.
Основной смысл асихронности - не блокировать основной поток выполнения. Соответственно, асинхронная опарация - это такая вот неблокирующая операция.
Всем привет! В пятницу 18 мая в Москве в павильоне ИнфоПространство прошла конференция PHP Russia 2019.
PHP Russia 2019 - Профессиональная конференция для PHP-разработчиков. В отличии от того же DevConf конференция полностью посвящена PHP. Организатор конференции - ООО «Конференции Олега Бунина».
Стоимость билетов зависит от того, насколько заранее их покупать. Мне билеты обошлись в 15000, покупал за свой счет.
Всем привет! Сегодня расскажу про получение курсов валют. Сама по себе задача не сложная и ничего необычного здесь нет. Самый простой способ получить актуальный курс валюты - использовать какой-нибудь сторонний сервис для этого. Например, Fixer.io. Обращаемся к нему по Api, получаем данные ничего необычного. Обычно в подобных сервисах есть бесплатный пакет, который позволяет использовать сервис в небольшом проекте. В данном случае это 1000 запросов в месяц.
Всем привет! Сегодня речь пойдет о Yii2, а конкретно о Detail View Widget. Этот widget позволяет выводить информацию на странице. В общем-то все, кто работал с Yii наверняка о нем знают. Чаще всего виджет используется в разных админках и т.д.
Всем привет! Сегодня поговорим об отладке и тестировании поиска на базе Elastic Search. Конкретно, о тестировании релевантности. Из коробки Elastic работает неплохо. Но, вероятно, может понадобится донастроить релевантность поиска. Например, установить вес различных полей в поиске. Также могут быть другие факторы, влияющие на релевантность. Подробнее про настройку и о том как все устроено можно почитать тут: https://codedzen.ru/elasticsearch-urok-6-4-relevantnost/
При этом важно понимать, что изменения настроек влияют на весь поиск. К примеру, нам не нравится результаты поиска по запросу "Fiat 500", но при этом устраивают результаты по запросам "Renault Logan", "Nissan Micra" и т.д. Если мы поменяем настройки и подгоним результаты под запрос "Fiat 500", то не факт, что все остальное будет работать нормально.
Всем привет! 24 октября 2019 в Санкт-Петербурге состоялась седьмая встреча сообщества Symfoniacs - митап, изначально посвященный PHP фреймворку Symfony. Последнее время Symfoniacs позиционируется, как соощество профессиональных PHP разработчиков не ограниченное рамками одного фреймворка.
Всем привет. Сегоня хотел бы поделиться опытом реализации истории изменения сущностей для symfony/doctrine. Основная идея в том, чтобы логгировать какой пользователь и когда создал, изменил или удалил сущность. И если поменял, то какие поля, какие значения были и какие стали после изменения.
Всем привет! 18 декабря 2019 в Санкт-Петербурге состоялась восьмая встреча сообщества SymCode. Организаторы Symfoniacs провели ребрединг, и теперь сообщество называется SymCode. Также у митапа появился новый логотип.
Всем привет! Сегодня хотел бы поделиться планом изучения Magento. Недавно возникла задача подготовить нескольких PHP-разработчиков для работы с этой системой.
В результате составил примерный план обучения. Программа расчитана примерно на 2-3 месяца. При необходимости, часть действий можно пропустить или сократить.
Всем привет! Сегодня хотел бы поделиться опытом создания сервиса для генерации заглушек изображений(Placeholder).
Placeholder изображения могут использоваться при разработке макета. Когда реальной картинки нет, но при этом нужно что-то поставить на ее место. Вот пример такого шаблона.
Всем привет! Сегодня хотел бы поделиться опытом создания простейшего сервиса денежных транзакций. Сразу скажу, что сервис не предназначен для использования в production. Похожий сервис я реализовывал в качестве тестового задания. Само задание выглядело так:
Всем привет! Некоторое время назад проходил собеседование в один проект. Собеседование проходило в несколько этапов и одним из них был livecoding.
Задание было не очень сложным - создать форму регистрации, работающую через ajax. Пользователь указывает email, username и пароль. Имя пользователя и email должны быть уникальными. Необходимо предусмотреть валидацию сложности пароля. В качестве стартовой точки дается пустой контроллер.
Всем привет! Сегодня хотел бы поделиться опытом настройки и использования Github Actions. Интерес и желание попробовать этот инструмент у меня появилось довольно давно. В коммерческих проектах давно уже используется CI/CD, docker контейнеры и т.д. А для своих проектов все как-то руки не доходили настроить.
Всем привет! Сегодня хотел бы рассказать о настройке анализа покрытия кода тестами для PHP(Symfony) проекта. И последующую интеграцию с Github Actions.
Анализ покрытия тестами нужен в первую очередь для определения того, насколько качественно написаны тесты и насколько они реально тестируют код. Подробнее об анализе покрытия кода.
Изначально настраивал для этого блога. Но затем, для большей наглядности, также настроил для одного из открытых проектов - placeholder-service.
Всем привет! Сегодня хотел бы рассказать о настройке анализа кода PHP(Symfony) проекта c помощью Psalm. А также генерацию html отчета и последующую интеграцию с Github Actions.
Psalm - инструмент для статического анализа и поиска ошибок в PHP проектах. Пример работы можно посмотреть на на официальном сайте.
Изначально настраивал для этого блога. Но затем, для большей наглядности, также настроил для одного из открытых проектов - placeholder-service.
Всем привет! Сегодня хотел бы рассказать о настройке PHP-CS-Fixer для PHP проекта. PHP-CS-Fixer используется для автоматического форматирования кода в соответствии с определенными правилами, к примеру, стандартами PSR.
С помощью PHP-CS-Fixer можно повысить качество кода. Соблюдение стандартов кодирования делает код проекта более читаемым и упрощает разработку. Кроме того, использование автоматического форматирования должно помочь упростить процесс code review.
Всем привет! Сегодня хотел бы рассказать о поездке на PHP Russia 2021. Конференция прошла 28 июня в Москве в павильоне Рэдиссон Славянская.
Это вторая по счету конференция по PHP в России. Изначально была запланирована на 2020 год, несколько раз переносилась из-за Covid-19 и связанных с ним ограничений. В итоге, немного неожиданно была перенесена на 28 июня. До последнего были вопросы, состоится ли конференция. К счастью все удалось!
Всем привет! Сегодня хотел бы рассказать о создании простого сервиса для управления feature-флагами. Feature-флаги позволяют мгновенно включать и выключать определенный функционал в приложении. Для этого не требуется заново выкладывать или откатывать его. Достаточно включить или выключить определенный флаг. В то же время, в ключевых местах в коде добавляются проверки флагов.
К примеру, нужно добавить на сайт форму обратной связи. И в то же время нужно иметь возможность быстро откатить изменения.
Для этого можно создать feature-флаг contact-form
и проверять его при выводе формы и обработчика.
Всем привет. Сегодня хотел бы поделиться способом организации фикстур в Symfony приложении с помощью Codeception Doctrine2 модуля.
Фикстуры используются для генерации тестовых данных. Чаще всего, для тестовые данные бывают нужны для интеграционных тестов. В Symfony фикстуры реализованы в рамках DoctrineFixturesBundle.
Всем привет! Сегодня хотел бы рассказать о своем опыте оптимизации анализа покрытия теставми для PHP проекта.
Проект основан на Symfony компонентах и частично покрыт unit и интеграционными тестами. В какой-то момент захотелось узнать точное покрытие, и в дальнейшем мониторить состояние.
Всем привет! Сегодня хотел бы рассказать про инструмент для отслеживания транзитивных зависимостей composer - ComposerRequireChecker.
Всем привет! Сегодня хотел бы поделиться примером настройки инструмента статического анализа для PHP - PHPStan.
Сам инструмент, вероятно, в представлении не нуждается. Я использовал его в одном из своих проектов, и остался доволен. PHPStan помогает поддерживать код в хорошем состоянии, и особенно хорошо помогает находить ошибки типизации. Иногда бывает немного занудным, но в конечном итоге, все это к лучшему.