PHP Russia is the only Russian confenrence focused on PHP. Main topics are PHP ecosytem (PHP itself, standards, frameworks, libraries and OpenSource) and major players experience in building complex projects using best practices and modern approaches.

Friday 17th May 2019

09:00
0
Registration in M (1 hour)

Conference registration, morning coffee

0
Registration in V (1 hour)

Conference registration, morning coffee

0
Registration in C (1 hour)

Conference registration, morning coffee

10:00
3
Practical advanced static analysis
Talk by Dave Liddament in V (50 minutes)

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.

1
Asynchronous PHP (Aсинхронный PHP)
Talk by Anton Shabovta in M (50 minutes)

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

0
Transition from the Rest API to GraphQL on three real projects: a simple website, an online store and a project with microservices (Переход от Rest API к GraphQL на примере трех реальных проектов - простой сайт, интернет-магазин и проект с микросервисами)
Talk by Anton Morev in C (50 minutes)

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

11:00
4
Typed Properties and more: What’s coming in PHP 7.4?
Talk by Nikita Popov in M (50 minutes)

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.

1
The evolution of Facebook webhook processing: from zero to 12'500 RPS (Эволюция обработки вебхука Facebook: с нуля до 12'500 в секунду)
Talk by Dmitry Kushnikov in V (50 minutes)

ManyChat — это платформа, которая помогает 500'000 бизнесам по всему миру успешно общаться с сотнями миллионов людей через Facebook Messenger. При помощи ManyChat наши пользователи отправляют своим клиентам больше 7'000'000'000 (миллиардов) сообщений в месяц. Мы выросли до таких показателей за три года существования сервиса. Одной из главных инженерных задач, которую мы решали и продолжаем решать — обработка входящих webhook'ов от Facebook. Нагрузка на этот компонент выросла с нуля до 750'000 RPM (запросов в минуту). И продолжает расти. Я расскажу о том, как эволюционировал этот компонент с простого контроллера в популярном фреймворке до распределенной системы. Какие подходы мы применяли на разных этапах роста и как нам удаётся справляться с такой нагрузкой с помощью скромных ресурсов. И всё это без модных Rabbit и Kafka, а на PHP.

0
Broadcast from track M in C (1 hour)

Broadcast from track M

12:00
4
The most interesting in PHP 8 (Самое интересное в PHP 8)
Talk by Dmitry Stogov in M (50 minutes)

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

2
Proper OOP: the organization of a reliable business logic (Грамотное ООП: организация надёжной бизнес-логики)
Talk by Dmitry Eliseev in V (50 minutes)

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

0
Broadcast from track M in C (1 hour)

Broadcast from track M

13:00
2
Machine Learning - how to begin to learn the machine in PHP
Talk by Arkadiusz Kondas in C (50 minutes)

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.

2
Moderation of millions of ads per day through the state machine (Модерация миллионов объявлений в день через state machine)
Talk by Dmitriy in V (50 minutes)

Модерация объявлений — сложная, многозвенная система с высокими требованиями к устойчивости к ошибкам. В докладе мы приоткроем завесу тайны работы систем автоматической модерации объявлений в крупнейшем сервисе объявлений в Европе. За долгие годы система автоматической модерации в Авито эволюционировала от простой проверки на подаче до state machine и batch-процессинга. Расскажем: - как реализовать легко масштабируемый, высокопроизводительный и устойчивый к ошибкам конвейер; - как организовать работу двух систем параллельно и провести переход со старой на новую без даунтайма и с минимальными потерями; - о проблемах работы демонов в PHP и их решении.

0
Lunch in M (1 hour)

Lunch time

14:00 School of PHP Magic (Школа магии PHP)
Talk by Alexander Lisachenko in M (50 minutes)

"Чем вы ближе, тем меньше вы видите". (С) Как часто вы думаете о том, что знаете о магии в PHP много? А что, если я скажу вам о том, что вы просто не смотрели внимательно? Ведь чем больше вам кажется, что вы знаете все, тем легче вас обмануть. Смотрите внимательно, потому что чем вы ближе, тем меньше вы видите. Школа магии PHP открывает свои двери. Давайте сбежим за установленные рамки правил ООП и сделаем невозможное возможным. И кто знает, возможно, вы полюбите эту магию: магические методы, нестандартные способы доступа к свойствам, изменение контекстов, аспектно-ориентированное программирование, потоковые фильтры и многое другое.

0
Lunch in V (1 hour)

Lunch time

0
Lunch in C (1 hour)

Lunch time

15:00 How to make Legacy Refactoring Fun Again - From Months to Days
Talk by Tomas Votruba in M (50 minutes)

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!

0
Tests for Codeception for PHP-services. How to stay without regression tests (Тесты на Codeception для PHP-сервисов. Как остаться без регресса)
Talk by Pavel Stashevsky in V (50 minutes)

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

0
This code will enjoy your unit tests (Такой код понравится вашим юнит-тестам)
Talk by Alexander Novikov in C (50 minutes)

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

16:00
4
PHP as a PhpStorm development tool (PHP как инструмент разработки PhpStorm)
Talk by Kirill Smelov in M (50 minutes)

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

Climbing the Abstract Syntax Tree
Talk by James Titcumb in V (50 minutes)

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)

2
When is it better to choose PHP instead Go (Когда лучше выбрать PHP вместо Go)
Talk by Ilyas Salikhov in C (50 minutes)

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

17:00
2
NoVerify: PHP Linter that Runs Fast (NoVerify: PHP-линтер, который работает быстро)
Talk by Iskander Sharipov in V (50 minutes)

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

2
PHP frameworks architecture (Устройство PHP-фреймворков)
Talk by Frol Kryuchkov in C (50 minutes)

Сейчас большинство компаний мигрируют в микросервисную архитектуру. Для перехода такие компании используют фреймворк или пишут свой базовый шаблон PHP-микросервиса. В своем докладе я расскажу о базовых принципах и компонентах, которые используются в современных PHP-фреймворках, на примере написания своего мини-фреймворка. Рассмотрим соответствующие компоненты: 1. Router; 2. Http Foundation; 3. Dependency Container; 4. MVC. Также поделюсь ссылкой на git-репозиторий с результатом работы.

2
Distributed Domain Destruction - Adventures in building distributed systems
Talk by Srdjan Vranac in M (50 minutes)

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.

18:00
2
Developing PHP/Go hybrid applications using RoadRunner (Разработка гибридных PHP/Go-приложений с использованием RoadRunner)
Talk by Anton Titiov in M (50 minutes)

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

1
PHP performance: plan, profile, optimize. (Производительность PHP: планируем, профилируем, оптимизируем)
Talk by Pavel Murzakov in V (50 minutes)

Мы в Badoo активно работаем над производительностью нашего PHP-кода, поскольку у нас достаточно большая система на этом языке, и вопрос производительности — это вопрос экономии денег. Очевидными решениями этой проблемы является увеличение мощностей или оптимизация кода. Но выбор между этими способами не всегда очевиден. Кроме того, возможны и другие варианты решений. В докладе расскажу, как мы подходим к проблеме: * как планируем мощности; * как измеряем производительность и профилируем код; * приведу примеры оптимизаций; * расскажу, что ещё можно сделать для увеличения производительности.

0
Domain Driven Design on practice (Domain Driven Design на практике)
Talk by Sergey Pantushin in C (50 minutes)

Чистая архитектура. Рассмотрим два показателя: высокая поддерживаемость и низкий уровень технического долга. Мы хотим, чтобы с приложением было удобно работать, а также оно должно позволять быстро вносить изменения в будущем. Поговорим о применении проблемно-ориентированного проектирования на практике. Как применять шаблоны и практики DDD в PHP-приложении. Работа с унаследованным кодом. Как постепенно переписывать всю систему по кусочкам. С чего можно начать?

19:00
2
Social event in M (1 hour)

Social event, discussions, beer