Продолжаем стримы на полезные смежные темы. В этот раз поговорим про способы оптимизации запуска и работы PHP-приложений.
Большой стрим про практики разделения новых и существующих проектов на модули и микросервисы. Паттерны и антипаттерны дробления.
Остальное в блоге
37:33
Завершение первого этапа Event Storming. Проведение торгов аукциона и моделирование оплаты и всех этапов сделки.
2:28:14
Разбираемся как работают и как устроены внутри тестовые фреймворки на примере PHPUnit
37:35
Первый этап Event Storming. Анализ доменной модели и первоначальное определение потоков доменных событий.
38:40
Диаграмма Event Storming и её элементы. Разделение на этапы для работы над сложными проектами. Пример моделирования службы доставки грузов.
15:12
Перевод проектов на плагин Docker Compose V2 для всех окружений. Установка на Jenkins-сервер с помощью Ansible.
Free52:41
Моделирование предметной области бизнеса в DDD. Домены и поддомены. Event Driven архитектура слабосвязанных модулей. Практика Event Storming для построения цепочек команд и событий.
1:13:04
Решение проблемы зависимости от создания объектов из конкретных классов. Инверсия создания зависимых объектов и переход на PSR-17
59:22
Повторное использование кода в разных проектах. Инверсия зависимостей для выноса кода в компонент. Выделение общих интерфейсов и переход на PSR-7.
1:03:24
Препроцессинг запроса и постпроцессинг ответа. Потенциальные проблемы изменяемых объектов и их решение через иммутабельность. Упрощение кода.
16:49
Избавление от зависимости от сервера PHP-FPM при отправке HTTP-ответа. Экономная отдача больших файлов средствами PHP через Stream.
42:41
Абстракция для серверного запроса для отхода от привязки к PHP-FPM. Переход от суперглобальных массивов к серверонезависимой структуре ServerRequest.
19:03
Проблемы кода с прямым обращением к суперглобальным массивам и глобальным переменным. Неуниверсальность и неудобство тестирования. Побочные эффекты и чистые функции.
29:04
Получение параметров HTTP-запроса и отправка ответа через SAPI при работе через PHP-FPM. Написание функции определения текущего языка.
1:12:31
Подключение компонента Serializer для сериализации и десериализации выборок и команд в формат JSON. Использование нормализатора для работы с массивами.
11:11
Обновление конфигурации Doctrine ORM и переводим консольные команды на инъекцию зависимостей в конструктор. Переписываем код на синтаксис с property promotion.
1:20:19
Использование TypeScript в ReactJS. Установка транспилятора и настройка ESLint. Добавление типизации к новому и существующему проекту.
27:52
Подключение TypeScript и добавление явной типизации в проект на CucumberJS для написания E2E-тестов.
Free30:34
Различие видов типизации в разных языках программирования. Сравнение типизации в PHP и в JavaScript.
24:08
Использование переменных окружения во фронтеде на React при разработке и при деплое с Docker. Отличие работы переменных фронтенда от бэкенда.
1:34:28
Реализация клиента аутентификации в React для получения токенов JWT с бэкенда по протоколу OAuth2 с PKCE. Подходы к автообновлению токенов и нюансы безопасности.
Free23:47
Добавление кнопки входа под фича-флагом аутентификации. Поиск компонентов для работы с OAuth2 в React. Возможные трудности при подключении сторонних библиотек.
18:57
Обновление зависимостей. Перевод бэкенда на PHP 8.1 и мини-обзор новых возможностей. Переход фронтенда на React 18.
Free2:30:43
Работа HTTP-сервера вроде Apache и Nginx с PHP по протоколам CGI и FastCGI. Переменные окружения и потоки ввода и вывода. Асинхронные PHP-серверы.
Free
Оценка составленного задания со стороны программиста. Обсуждение требований. Предложение идей по технической реализации проекта.
50:04
Перевод фронтенда на React Router 6. Оптимизация E2E тестов. Обновление компонентов до Symfony 6. Перевод проекта с аннотаций на атрибуты PHP 8.
14:36
Идеи по последующей доработке проекта. Добавление новой функциональности вширь и доработка имеющихся функций вглубь.
10:50
Устройство личного кабинета покупателя и продавца. Просмотр своих лотов, ставок и сделок. Баланс и избранные лоты.
1:14:21
Установка сервера Nginx c PHP-FPM. Структура файлов и директорий. Автозагрузка классов с Composer. Установка и настройка PHPUnit.
14:07
Организация модерации и автомодерации лотов. Обращения в арбитраж для решения споров по сделкам. Работа технической поддержки.
13:33
Проведение и этапы сделки по передаче лота. Процесс оплаты и отправки с отслеживанием. Резервирование суммы и списание комиссии.
Free41:32
Обновление зависимостей для бэкенда и фронтенда. Нюансы использования нового DBAL. Постепенная миграция от SwiftMailer к его современной замене.
17:40
Основные этапы аукциона. Создание и публикация лота. Ручное и автоматическое выставление ставок. Дизайн страницы лота и элементы управления.
Free28:13
Определение и суть компонентного HTTP-фреймворка. Место фреймворка и библиотек в потоке управления. Совместимость фреймворков и рекомендации PSR.
15:06
Анализ бизнес-требований владельца продукта и анализ потребностей посетителей. Проработка функциональности главной страницы аукциона.
7:52
Какие бывают аукционы. Классификации по типам проведения и направлению изменения цены. Правила и заинтересованные лица. Какой будет у нас.
Free34:13
Как производится запрос и какие результаты возвращает сервер. Какие запросы являются безопасными.
Free28:25
Кто такие сервер и клиент и как осуществляется запрос и возвращается ответ при HTTP-взаимодействии.
52:55
Декларативное централизованное управление доменными именами с помощью Traefik. Автополучение Let's Encrypt сертификатов. Деплой нескольких проектов в один кластер.
59:57
Запуск БД в Docker и без него. Способы организации репликации. Написание скрипта резервного копирования базы данных PostgreSQL с загрузкой в S3-совместимое хранилище.
26:09
Обновление Debian и Docker на серверах. Перевод передачи паролей в контейнеры с переменных окружения на секреты. Работа с секретами в функции env.
55:26
Завершаем аутентификацию для бэкенда. Добавление роли в JWT. Форсированное разлогинивание пользователя. Автоочистка устаревших кодов из БД.
24:46
Приём, валидация и чтение JWT-токенов для определения текущего пользователя в контроллерах. Написание посредника аутентификации.
1:10:16
Разработка страницы входа и контроллера для генерации и обновления OAuth-токенов. Добавление Query-модели для выполнения запросов данных из модуля.
Free1:02:56
Исследование работы и интеграция в PHP-проект компонента League OAuth2 Server. Написание сущностей и репозиториев. Сохранение кодов через Doctrine.
21:08
Переход на CS Fixer 3. Переход на PSR-кэш для мета-информации в Doctrine ORM. Обновление Jenkins с компиляцией Python-библиотек с Rust.
50:40
Разбор кода OAuth 2.0 Server. Упрощение кода сервера. Устранение избыточности интерфейсов. Избавление от сеттеров. Чем нам помогут интерфейсы если сеттеры нужны.
Free38:25
Способы аутентификации при работе с API. Использование токенов формата JWT в распределённых системах. Спецификация OAuth 2.0 для получения доступа в сторонние сервисы.
1:16:35
Переход от классического CodeSniffer к продвинутым стандартам кодирования с PHP CS Fixer. Внедрение практики final or abstract для классов. Интеграция в PhpStorm.
34:54
Перевод API на PHP 8. Сборка расширений из исходников вместо PECL. Добавление типов и упрощение PHPDoc-блоков за счёт перехода от Psalm-аннотаций и удаления повторов.
1:30:43
Программирование формы регистрации пользователя в React. Организация взаимодействия фронтенда с API. Работа через CORS-заголовки и через проксирование.
50:44
Доработка E2E-тестов для работы с асинхронными страницами. Вынесение общего шаблона вёрстки. Установка маршрутизатора и создание страницы для регистрации.
48:04
Ускорение сборочного конвейера в Jenkins. Отслеживание изменений кода фронтенда и бэкенда в текущей сборке. Пропуск шагов если код не затронут.
Free1:37:45
Добавление поддержки Feature Toggle для фронтенда на ReactJS и бэкенда на PHP для разработки новой функциональности в стиле CI/CD.
32:54
Решение проблемы Pull Rate Limit сервиса DockerHub. Создание собственного кеширующего прокси для загрузки официальных Docker-образов.
42:28
Интеграция запуска PHPUnit-тестов и инспекций CodeSniffer и Psalm в PhpStorm. Подключение плагинов к Psalm для упрощения кода.
59:18
Обновление версий Docker-образов Nginx, NodeJS и PostgreSQL. Переход на Composer 2 и XDebug 3. Изменения в Cucumber 7. Кэширование в Psalm 4.
1:54:39
Динамическая смена контента. Написание компонента Router для эмуляции многостраничности через использование хэшэй и History API браузера.
1:11:29
Размещение локального состояния внутри классовых и функциональных компонентов. Использование хуков для экономии кода.
53:55
Унификация привязки состояния и действий к свойствам компонента. Автоматизация мэппинга через коннектор. Подключение React-Redux. Асинхронные экшены через Thunk.
31:08
Проблема каскадного проброса состояния. Использование контекстов для передачи состояния внутренним компонентам. Выделение контейнерных компонентов.
38:15
Добавление интерактивных элементов. Организация однонаправленного потока управления Flux. Анализ паттерна Model-View-Controller.
33:37
Добавление новых действий к объекту хранилища через систему плагинов-редьюсеров. Диспетчеризация действий. Фабрики-создатели действий. Подключение Redux.
25:51
Инкапсуляция состояния в объект-хранилище. Реализация автоматического рендеринга через подписку на изменение состояния.
38:25
Добавление фабрики компонентов для упрощения разработки. Подключение Babel. Внедрение HTML-подобного синтаксиса JSX для написания компонентов.
38:07
Отход от стандартных Node-элементов к структурам для построения виртуального DOM. Перевод на декларативный JSON-формат описания UI.
Free41:57
Оптимизация производительности перерендера страниц. Концепция виртуального DOM. Синхронизация реального дерева с виртуальным.
Free47:07
Добавление динамики. Сложность изменения страницы при изменении состояния. Однонаправленный поток данных и иммутабельный перерендер страницы.
Free30:41
Переход от классического серверного рендеринга HTML-страниц на построение DOM через JavaScript. Отделение данных от представления.
Free1:15:32
Обновление пакетов в Composer и Yarn. Семантическое версионирование. Мажорные и минорные обновления. Оптимизация процесса для следования CI/CD.
1:12:00
Перевод проекта с Docker Compose на Docker Swarm для установки на кластер. Организация бесшовного деплоя. Управление размещением сервисов.
24:17
Инициализация режима Docker Swarm. Автоматическое поднятие кластера из менеджера и машин-воркеров с помощью Ansible.
Free25:25
Реализация Continuous Deployment. Алгоритм Rolling Updates для бесшовного обновления контейнеров. Использование оркестраторов для деплоя на кластер.
1:10:54
Реализация CI/CD Pipeline по автотестированию и автодеплою в GitLab CI. Хранение и кеширование Docker-образов.
1:23:06
Реализация CI/CD pipeline в сервисе GitHub Actions. Использование GitHub Packages для хранения Docker-образов. Кэширование Docker-слоёв через BuildKit.
1:24:44
Построение CI/CD Pipeline для автоматизации тестирования и деплоя в Jenkins. Сбор артефактов и уведомления по электронной почте.
Free1:03:20
Установка Jenkins через Docker. Организация сети распределённой сборки. Подготовка виртуальных машин для менеджера и агентов через Ansible.
33:32
Подготовка проекта к работе в CI/CD Pipeline. Добавление окружения для тестирования рабочих Docker-образов. Создание файла подкачки в Ansible.
Free29:46
Система тестирования и деплоя со сборочным сервером. Продумывание шагов проверки кода и сборки образов для запуска в CI/CD Pipeline.
39:03
Создание персонального приватного реестра образов Docker Registry. Создание поддомена и виртуальной машины. Подключение сторонних хранилищ.
Free28:52
Философия Continuous Integration, Continuous Delivery и Continuous Deployment. Альтернативный подход разработки программных продуктов.
1:18:32
Написание E2E-тестов для проверки работы проекта из фронтенда и API. Тестирование интерфейса ReactJS-приложения в браузере в Docker-контейнере.
41:54
Тестирование JavaScript-кода. Интеграционное и юнит-тестирование компонентов. Проверка синтаксиса и стиля кода для JavaScript и CSS.
47:12
Создание проекта с ReactJS. Подключение и сборка пакетов через NodeJS. Запуск девелоперского сервера с автообновлением UI. Деплой фронтенда через Docker.
34:32
Добавление мультиязычности к API. Перевод сообщений валидации и доменных ошибок. Автораспознавание заголовка Accept-Language.
34:58
Добавление предварительной валидации данных команд для красивого отображения ошибок в формате JSON для отображения на фронтенде.
31:54
Использование посредников middleware для выноса повторяющегося инфраструктурного кода из контроллеров. Очистка ввода и централизованная обработка доменных исключений.
51:30
Написание контроллеров регистрации и их функциональное тестирование. Добавление локальных фикстур для тестовых сценариев. Проверка отправки электронных писем.
58:26
Философия логирования процессов в Docker. Установка Monolog. Вывод логов для функциональных тестов. Подключение сервиса Sentry.IO для уведомлений об ошибках.
52:48
Реализация отправки электронных писем по протоколу SMTP. Подключение эмулятора почтовика для локальной разработки. Подключение шаблонизатора для рендеринга HTML-писем.
1:05:48
Написание и генерирование миграций для автоматизации создания и изменения структуры БД. Использование фикстур для автозаполнения таблиц демонстрационными данными.
Free1:06:45
Конфигурирование маппинга сущностей и агрегатов на таблицы в БД. Создание собственных типов. Работа со вложенными объектами и коллекциями.
48:06
Подключение базы данных в Docker и конфигурирование через переменными окружения. Обзор Doctrine ORM. Установка и регистрация в DI контейнере.
15:13
Добавление роли пользователя. Установка роли по умолчанию при регистрации и смена администратором. Команда удаления неактивного пользователя.
14:28
Написание команды двухшаговой смены email-адреса в кабинете пользователя с подтверждением по ссылке с токеном в письме.
25:36
Реализация команды установки нового пароля с проверкой текущего. Инъекция сервисов в метод. Тестирование зависимых объектов. Стабы и моки.
26:56
Реализация двухшагового восстановления пароля с подтверждением операции по электронной почте. Защита от спама и возможной перегрузки сервера.
18:47
Реализация команды регистрации через социальные сети. Именованные конструкторы объектов. Привязка соцсети к текущему профилю.
Free21:25
Добавление статуса ожидания и активности пользователя. Реализация команды подтверждения регистрации по токену из ссылки в электронном письме.
Free1:03:27
Моделирование юзкейса запроса регистрации по email. Декомпозиция объектов. Абстрактные типы данных. Проработка сущностей и сервисов через Unit-тесты.
Free30:13
Анализ Use Cases взаимодействия с модулем аутентификации. Выделение команд Command и запросов Query. Принцип CQS разделения операций.
Free28:54
Моделирование по философии Domain Driven Design. Понятие доменной модели. Исследование предметной области и выделение ограниченных контекстов.
1:11:39
Установка и настройка PHPUnit. Написание Unit-тестов. Создание инфраструктуры функциональных тестов для API. Анализ тестового покрытия.
30:56
Проверка корректности кода с PHPLint. Валидация и корректировка стиля кода с CodeSniffer. Подключение статических анализаторов.
41:37
Установка Xdebug в Docker-образы. Настройка отладки консольных скриптов. Подключение к PhpStorm для отладки веб-скриптов в PHP-FPM.
18:31
Оптимизация Docker-образов для production через использование кеширования и мультистадийный билдинг.
Free1:03:52
Подготовка структуры директорий API. Добавление образа PHP-CLI. Установка Slim Framework. Ускорение установки в Composer.
Free56:51
Автоматизация серверной инфраструктуры. Автоматическая установка Docker и Compose на виртуальную машину через Ansible. Подключение сертификатов Let's Encrypt.
Free1:04:40
Подъём девелоперской версии сайта с Docker. Построение сетевой структуры. Сборка образов для продакшена и первый деплой.
Free38:16
Чем является Docker и чем не является. Удобство использования Docker для локальной разработки и для продакшена.
Free13:35
Причины выбора микрофреймворка и его отличия от классических фреймворков. Почему мы используем Slim и React.
Free16:16
Постановка задачи по разработке будущего проекта и определение используемых подходов. Предполагаемая структура проекта.
45:19
Использование событий объекта для снижения связанности кода. Способы генерации событий и пути подписки на них сторонних слушателей.
Free40:55
Использование пользовательских заголовков для разных задач.
23:56
Улучшения компонента перед публикацией. Идеи по подключению сторонних библиотек. Обзор результата.
Free15:44
Дополнительные серверные и клиентские заголовки. Информация о сервере, сжатие контента и отказ в обслуживании.
10:06
Разработка прокси-объекта для гибкого настраиваемого кеширования результатов геолокации.
8:47
Отлов ошибок проблем с соединением. Вынесение логирования в отдельный обработчик.
Free15:15
Рефакторинг для подключения нескольких провайдеров геоданных. Усовершенствование алгоритма выбора.
Free12:10
Разделение ответственностей и делегирование. Вынос изменяемого кода во вспомогательные компоненты.
Free15:42
Постановка задачи. Проектирование компонента геолокации через тестирование и разработка абстрактных типов данных.
Free45:54
Заголовки для настройки браузера для обеспечения безопасности при работе с внешними ресурсами
51:24
Подходы к контролю исключительных ситуаций. Использование исключений и корректный ох отлов.
Free37:32
Использование Origin-заголовков для возможности из JavaScript осуществлять Ajax-запросы к API на другом домене.
Free37:34
Корректное проектирование методов для описания поведения объекта. Инкапсуляция для контроля внутреннего состояния.
Free39:52
Написание HTTP-заголовков для управления кэшированием файлов и страниц. Работа с локальным и публичным кэшем.
Free40:37
Использование конструкторов для инициализации объектов. Внедрение зависимостей.
Free40:50
Исследование методов аутентификации пользователя для сайтов и API. Аутентификация по протоколу oAuth2.
Free49:40
Подходы к хранению состояния сеанса на клиенте и на сервере. Требования философии REST к идентификации запросов.
Free22:40
Какими способами производится взаимодействие объектов в ООП. Чем ООП полезно при моделировании реального мира.
Free41:10
HTTP-заголовки для описания формата контента со стороны клиента и сервера. Загрузка файлов и скачивание по фрагментам.
Тип
Технология
Фреймворк
Язык
Метки