Конференция завершена. Ждем вас на PHP Russia в следующий раз!
Инфопространство,
Москва, 17 мая 2019

Принятые доклады

Поиск по тегам:

PHP, стандарты, фреймворки, библиотеки, OpenSource

Domain Driven Design на практике

Чистая архитектура. Рассмотрим два показателя: высокая поддерживаемость и низкий уровень технического долга. Мы хотим, чтобы с приложением было удобно работать, а также оно должно позволять быстро вносить изменения в будущем.

Поговорим о применении проблемно-ориентированного проектирования на практике. Как применять шаблоны и практики DDD в PHP-приложении.

Работа с унаследованным кодом. Как постепенно переписывать всю систему по кусочкам. С чего можно начать?

Доклад принят в программу конференции

Aсинхронный PHP

* Разбираемся в блокирующих и неблокирующих операциях в PHP.
* Структура Event Loop и асинхронных примитивов, таких как Promise изнутри.
* Генераторы как способ управления потоком исполнения программы.
* Современные подходы реализации кооперативной многозадачности в PHP.
* Что нас ждет в ext-async, AMPHP 3 и PHP 8.

C/C++
,
PHP
,
Бэкенд / другое
Доклад принят в программу конференции

Distributed Domain Destruction - Adventures in building distributed systems

For the last couple of years I have been building, maintaining and fighting a
projects that make use of distributed computing, parallel processing,
message brokers, queues and workers. This is one of those "from the
trenches" talks, where I will regale you with tales about the series of
unfortunate events that may happen as your application grows in complexity.
Tales like disk space fluctuations, importance of logging, NoSql problems,
restructuring your order of execution in code for performance gains, short
sighted albeit logical architectural decisions that will cost you in the
long run.

Распределенные системы
,
Работа с облачными сервисами
Доклад принят в программу конференции

Тесты на Codeception для PHP-сервисов. Как остаться без регресса

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

В своем докладе я хочу поделиться тем, как мы подходим к процессу автоматизации тестирования:
1) Какие пишутся тесты и как устроен процесс поддержки.
2) Почему Codeception, что работает из коробки, что пришлось доделать под себя.
3) Как мы мокаем все внешнее общение с другими системами.
4) Как все это запускается a.k.a инфраструктура.

PHP
,
Автоматизация тестирования
Доклад принят в программу конференции

Когда лучше выбрать PHP вместо Go

В retailCRM активно используется как PHP, так и Go для разработки сервисов. У каждого из этих языков есть свои недостатки, которые могут быть недооценены на старте проекта, но стать большой болью при последующем его развитии.

В докладе я постараюсь поделиться нашим опытом и взвешенно рассказать о плюсах и минусах каждого из языков.



Фреймворки
,
PHP
,
Методы и техника разработки ПО
,
GO
Доклад принят в программу конференции

Школа магии PHP

"Чем вы ближе, тем меньше вы видите". (С)

Как часто вы думаете о том, что знаете о магии в PHP много? А что, если я скажу вам о том, что вы просто не смотрели внимательно? Ведь чем больше вам кажется, что вы знаете все, тем легче вас обмануть. Смотрите внимательно, потому что чем вы ближе, тем меньше вы видите.

Школа магии PHP открывает свои двери. Давайте сбежим за установленные рамки правил ООП и сделаем невозможное возможным. И кто знает, возможно, вы полюбите эту магию: магические методы, нестандартные способы доступа к свойствам, изменение контекстов, аспектно-ориентированное программирование, потоковые фильтры и многое другое.

Доклад принят в программу конференции

Производительность PHP: планируем, профилируем, оптимизируем

Мы в Badoo активно работаем над производительностью нашего PHP-кода, поскольку у нас достаточно большая система на этом языке, и вопрос производительности — это вопрос экономии денег.

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

В докладе расскажу, как мы подходим к проблеме:
* как планируем мощности;
* как измеряем производительность и профилируем код;
* приведу примеры оптимизаций;
* расскажу, что ещё можно сделать для увеличения производительности.

Доклад принят в программу конференции

Typed Properties and more: What’s coming in PHP 7.4?

PHP 7.4 is shaping up to be the most significant PHP release since PHP 7.0, featuring many long-awaited features including typed properties, return type covariance, FFI and (hopefully) short closures. Development of PHP 8.0 has also started, and the first changes are already in.

This talk will introduce the new functionality, with a focus on language and library changes in PHP 7.4 and 8.0. For a coverage of performance-related changes like opcache preloading and JIT, please see Dmitry Stogov’s talk.

PHP
Доклад принят в программу конференции

How to make Legacy Refactoring Fun Again - From Months to Days

Legacy code is present of any successful company. The longer your live and profit, the older your code is.

How to get out of this? You can rewrite (don't do that!) or refactor manual (don't do that either!). It's 2019 and there is a tool for that now - Rector.

I help companies to refactor their huge legacy code in a couple of weeks. You can also switch frameworks, from PHP 5.3 to PHP 7.4, from Laravel to Symfony... the sky is the limit :)

I will show you how you can make your legacy code shine again!

Доклад принят в программу конференции

Разработка гибридных PHP/Go-приложений с использованием RoadRunner

- Демонизация PHP-приложения с целью повышения производительности; проблемы, возникающие при демонизации (утечки памяти, утечки контекста, соединения к базам данных) и способы их решения.
- Что такое RoadRunner, логические блоки, необходимые для построения сервера приложений. Принцип работы сервера PHP-приложений.
- Гибридизируем разработку, принципы разделения ответственности между сервером и приложением: разделяем приложения на инфраструктурную/транспортную и бизнес-логику.
- Реализация HTTP-слоя, повышаем производительность в 20 раз + бенчмарки.
- Реализация Queue-слоя, упрощаем PHP-приложение, увеличиваем стабильность системы.
- Управление окружением PHP из единого источника (Consul, ETCD и т.д.).
- Интеграция внешних библиотек и API, реализация доменно-ориентированного API: Prometheus-мониторинг, JWT-авторизация на уровне сервера, GRPC-сервер.

Доклад принят в программу конференции

Устройство PHP-фреймворков

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

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

Рассмотрим соответствующие компоненты:
1. Router;
2. Http Foundation;
3. Dependency Container;
4. MVC.

Также поделюсь ссылкой на git-репозиторий с результатом работы.

PHP
,
Методы и техника разработки ПО
Доклад принят в программу конференции

Climbing the Abstract Syntax Tree

The new Abstract Syntax Tree (AST) in PHP 7 means the way our PHP code is being executed has changed. Understanding this new fundamental compilation step is key to understanding how our code is being run.

To demonstrate, James will show how a basic compiler works and how introducing an AST simplifies this process. We’ll look into how these magical time-warp techniques* can also be used in your code to introspect, analyse and modify code in a way that was never possible before.

After seeing this talk, you'll have a great insight as to the wonders of an AST, and how it can be applied to both compilers and userland code.

(*actual magic or time-warp not guaranteed)

Доклад принят в программу конференции

Practical advanced static analysis

All developers know that bugs are bad and finding them can be difficult. The good news is tools to help us find and prevent bugs are becoming more powerful...

Modern static analysis tools (e.g. IDEs like PHPStorm and tools like Psalm, Phan and PHPStan) are far more advanced than their predecessors. They can find a whole range of bugs whilst keeping the false positive rate low.

This talk introduces more advanced static analysis. It will show the kinds of bugs that the more advanced static analysis tools can find. We'll then look how they can be added to your current development work flow. We'll finally look at how we can write our code in such a way to get the most out of static analysis.

Wherever you are on your static analysis journey this talk will show you the next step.

Доклад принят в программу конференции

Переход от Rest API к GraphQL на примере трех реальных проектов - простой сайт, интернет-магазин и проект с микросервисами

Разбор трех реальных кейсов внедрения GraphQL.

• Доводы за и против перехода на GraphQL.
• Как безопасно делегировать логику группировки данных на frontend и разгрузить backend-разработчиков.
• Использование на примере проекта с микросервисной архитектурой, монолита.
• Недостатки, которые мы осознали, только столкнувшись с ними.
• Инструменты для разработки сервисов GraphQL в PhpStorm.

API
,
PHP
,
Прочие языки
,
Критерии выбора технологий для проекта
,
Взаимодействие с серверной стороной (REST, GraphQL, gRPC)
Доклад принят в программу конференции

Эволюция обработки вебхука Facebook: с нуля до 12'500 в секунду

ManyChat — это платформа, которая помогает 500'000 бизнесам по всему миру успешно общаться с сотнями миллионов людей через Facebook Messenger. При помощи ManyChat наши пользователи отправляют своим клиентам больше 7'000'000'000 (миллиардов) сообщений в месяц.

Мы выросли до таких показателей за три года существования сервиса.

Одной из главных инженерных задач, которую мы решали и продолжаем решать — обработка входящих webhook'ов от Facebook. Нагрузка на этот компонент выросла с нуля до 750'000 RPM (запросов в минуту). И продолжает расти.

Я расскажу о том, как эволюционировал этот компонент с простого контроллера в популярном фреймворке до распределенной системы. Какие подходы мы применяли на разных этапах роста и как нам удаётся справляться с такой нагрузкой с помощью скромных ресурсов. И всё это без модных Rabbit и Kafka, а на PHP.

Доклад принят в программу конференции

Модерация миллионов объявлений в день через state machine

Модерация объявлений — сложная, многозвенная система с высокими требованиями к устойчивости к ошибкам.
В докладе мы приоткроем завесу тайны работы систем автоматической модерации объявлений в крупнейшем сервисе объявлений в Европе.

За долгие годы система автоматической модерации в Авито эволюционировала от простой проверки на подаче до state machine и batch-процессинга.

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

PHP
,
PostgreSQL
,
Микросервисы, SOA
,
Архитектурные паттерны
,
Отказоустойчивость
,
Оптимизация производительности
,
Архитектура данных, потоки данных, версионирование
Доклад принят в программу конференции

NoVerify: PHP-линтер, который работает быстро

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

NoVerify является расширяемым линтером для PHP, который работает в 10-30 раз быстрее аналогов.

Из доклада вы узнаете:
- Почему NoVerify такой быстрый и почему Go - хороший выбор для создания devtools для PHP-разработчиков.
- Что может находить NoVerify из того, о чём не предупредит PHPStorm.
- Интеграция NoVerify в крупный проект, который ранее не использовал статический анализ.
- Способы расширения NoVerify, доступные в Open Source дистрибутивы проверок.
- Что ещё можно построить на базе NoVerify на примере php-consistent.

PHP
,
Стандарты кодирования
,
GO
Доклад принят в программу конференции

Грамотное ООП: организация надёжной бизнес-логики

Все мы читали про объектно-ориентированное программирование и проектирование абстрактных типов данных, но мало кто из нас использует их по назначению. И бизнес-логику проектировать и тестировать получается не у всех. Почему-то вместо красивого кода образуется переплетение вызовов, и загромождаются контроллеры.

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

Как производить отделение UI от бизнес-логики, чтобы не было протечек слоёв в MVC. Научимся создавать агрегаты для сущностей предметной области для соблюдения инварианта. Какие проверки поместить в сущность, а какие - в сервисный слой. Как производить валидацию и использовать исключения.

Доклад принят в программу конференции

Такой код понравится вашим юнит-тестам

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

- Обратная связь улучшает качество вашего кода. Поясню, почему не стоит радоваться, если ваш код покрывает тестами сосед.
- Размер теста определяет его срок службы. Расскажу, почему у большого теста короткая жизнь.
- Повторение одних и тех же проверок в нескольких тестах бесцельно тратит ваше время. Удивлю, скорее всего, многих кодом без приватных методов.
- Если в каждом методе мало строк, а общее количество строк приблизительно такое же, значит маленьких методов должно быть много. Соглашусь с этим следствием принципа KISS и посоветую надёжное место для размещения этой большой компании.
- В длинных участках кода с многоуровневой вложенностью всегда присутствуют типичные абстракции. Предложу схемы нарезки существующего кода на мелкие части.
- Есть трудные случаи. Например, финальные методы и классы, генераторы, оператор new и т.п. Попробую порассуждать о возможности 100%-го покрытия тестами.
- Поделюсь наблюдениями, что улучшает читаемость и понимание модульного теста.

PHP
,
Рефакторинг
,
Юнит-тестирование
Доклад принят в программу конференции

Самое интересное в PHP 8

Рассказ пойдет о самых интересных новых технологиях, разрабатываемых для PHP 8, но частично доступных уже и в PHP 7.4.

JIT, Preloading и FFI - новые взаимосвязанные подсистемы, в первую очередь направленные на дальнейшее увеличение производительности, но они также открывают для PHP новые области применения. Например, можно писать системно зависимые расширения прямо на PHP, подключать сторонние С-библиотеки и быстро писать прототипы...

C/C++
,
PHP
Доклад принят в программу конференции

Machine Learning - how to begin to learn the machine in PHP

Презентация - https://slides.com/arkadiuszkondas/machine-learning-in-php-2019/#/

The main goal of Machine Learning is to create intelligent systems that can improve and acquire new knowledge through input. In practice this translates into the use of one of hundreds of different algorithms available. Based on the PHP-ML library I want to present different classes of problems and how to use them. I will also show you how to build an entire pipeline by which we go through all the ML stages: preprocessing, choosing algorithms, and evaluating its effectiveness.

Доклад принят в программу конференции

PHP как инструмент разработки PhpStorm

PhpStorm создан на базе IntelliJ-платформы, и PHP-код в нем транслируется во внутренние структуры данных, написанные в основном на Java или Kotlin. Однако, некоторые части IDE содержат в себе непосредственно PHP-код.

В докладе мы рассмотрим компоненты PhpStorm, которые работают с помощью PHP-кода, рассмотрим их инфраструктуру и некоторые детали реализации; с какими трудностями мы столкнулись в ходе их разработки и эксплуатации, а также как пользователь может расширять функциональность IDE, работая с некоторыми из них.

PHP
Доклад принят в программу конференции