Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
10.6K subscribers
1.71K photos
29 videos
27 files
4.5K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: clc.to/M561SQ

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🎬 Как ИИ ускоряет разработку и где ломаются архитектуры

Мы провели открытый вебинар, где разобрали реальные боли проектирования автономных систем. Ольга Лукьянова на практическом кейсе показала, как использовать ИИ-ассистентов для реальных задач. Вы просили запись встречи — она уже в открытом доступе!

Что внутри:

— Как с помощью ИИ быстрее разбираться в незнакомом коде и готовить пулл-реквесты;
— Критерии выбора между одним агентом и мультиагентной системой;
— Разбор популярных архитектурных ошибок и ограничений современных ИИ;
— Практические рекомендации по проектированию и внедрению облачных агентов.

👉 Посмотреть полную запись можно тут:
VK
YouTube

🚀 Хотите пойти дальше открытого вебинара? Если вы готовы перейти от простых промптов к проектированию надежных, отказоустойчивых ИИ-систем, которые не сливают бюджет компании на API, приходите на курс AgentOps. Поток уже стартовал, но двери еще приоткрыты!

👉 Успеть на курс AgentOps
1
✔️ PHP-тест: комментарий, который рассыпался на «кракозябры»

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

📦 Задание

Сервис отзывов. Комментарий — VARCHAR(255) (255 символов в utf8mb4). Валидатор ограничивает длину, сервис делает короткое превью для карточки. Полгода всё работало, пока аудитория была русскоязычной с короткими текстами. После запуска в новых регионах посыпались жалобы: эмодзи и иероглифы в превью превращаются в ?, а форма то ругается на короткий текст, то молча режет данные при сохранении.
// src/Comment/CommentValidator.php
class CommentValidator
{
private const MAX_LENGTH = 255;

public function validate(string $text): void
{
if (strlen($text) > self::MAX_LENGTH) {
throw new ValidationException('Слишком длинный комментарий');
}
}
}

// src/Comment/CommentPreview.php
class CommentPreview
{
public function make(string $text): string
{
if (strlen($text) <= 100) {
return $text;
}

return substr($text, 0, 100) . '…';
}
}


🔹 Задачи

— Объяснить, почему эмодзи/иероглифы в превью бьются в «кракозябры»
— Объяснить, почему один и тот же текст то проходит валидацию, то нет, и как это расходится с лимитом колонки в БД
— Исправить и валидатор, и превью

Ставьте → 🔥 если нравится формат. Если нет → 🌚

💬 Решения пишите в комменты под спойлер — сравним подходы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72👍1
🙈 Shared-nothing был киллер-фичей PHP. А мы его выкидываем, чтобы косплеить Node.js.

Двадцать лет «PHP в проде» означало одно: процесс на запрос, чистая таблица символов, в конце всё уничтожается. Никаких утечек, никакого состояния, любой стажёр не уронит прод глобалом.

Теперь модно иначе. FrankenPHP worker mode, RoadRunner, Swoole — держим приложение в памяти, экономим на бутстрапе, гоним 15k rps вместо 4k. Красиво в бенчмарках. А в реальности worker mode просто включает обратно все баги, от которых shared-nothing нас защищал. Статики, синглтоны, живые коннекты, $_SESSION, забытый static $cache в вендоре — теперь это не безобидный код, а мина между запросами разных юзеров.

Мы поменяли модель, где невозможно накосячить с состоянием, на модель, где косячить с состоянием — норма, просто «будьте аккуратнее».

💬 Где для вас граница? Воркеры — это зрелая эволюция или мы дружно ломаем главное преимущество языка ради цифры, которую видит только wrk?
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12👍5👏1🤔1
🔧 Работа с kubectl

Под рестартится каждые 5 минут, а kubectl logs показывает только текущий инстанс? Добавьте --previous, и вы увидите логи предыдущего упавшего контейнера — именно там обычно лежит причина крэша.

🔹 Зачем это нужно

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

🔹 Как использовать

— Логи предыдущего контейнера: kubectl logs pod-name --previous
— Конкретный контейнер в мультиконтейнерном поде: kubectl logs pod-name -c sidecar --previous
— Последние 50 строк: kubectl logs pod-name --previous --tail=50
— Следить за логами в реальном времени: kubectl logs -f pod-name
— Логи всех подов деплоймента сразу: kubectl logs deploy/my-app --all-containers
👍2🔥1👏1
🔥 Открытое занятие по AgentOps — курс стартовал!

Сегодня в 19:00 по МСК пройдет первое занятие нового потока, на которое может прийти каждый. Оцените пользу нашего подхода на ретрансляции урока в VK!

👨‍💻 Спикер: Андрей Носов

Тема: Архитектура управления: state machine для AI-агентов

Будем разбираться, как использовать State machine в качестве главного оружия против стохастики (непредсказуемости) LLM.

Что в программе:

● State machine: инварианты и терминальные состояния;
● Паттерны маршрутизации: Supervisor, ReAct, Plan-and-Solve;
● Детекция циклов и настройка аварийных выходов;
● Абстракция от модели: как сделать каркас, который переживет смену LLM/провайдера;
● Адаптация графов под ограничения локальных моделей;
● Версионирование графов и миграции стейта.

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

👉 Подписывайтесь на нашу группу ВКонтакте, чтобы не пропустить старт трансляции!
🔥 Открытое занятие по AgentOps — курс стартовал!

Сегодня в 19:00 по МСК пройдет первое занятие нового потока, на которое может прийти каждый. Оцените пользу нашего подхода на ретрансляции урока в VK!

👨‍💻 Спикер: Андрей Носов

Тема: Архитектура управления: state machine для AI-агентов

Будем разбираться, как использовать State machine в качестве главного оружия против стохастики (непредсказуемости) LLM.

Что в программе:

● State machine: инварианты и терминальные состояния;
● Паттерны маршрутизации: Supervisor, ReAct, Plan-and-Solve;
● Детекция циклов и настройка аварийных выходов;
● Абстракция от модели: как сделать каркас, который переживет смену LLM/провайдера;
● Адаптация графов под ограничения локальных моделей;
● Версионирование графов и миграции стейта.

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

👉 Подписывайтесь на нашу группу ВКонтакте, чтобы не пропустить старт трансляции!
⚙️ В чем разница между балансировщиками нагрузки, обратными прокси и API-шлюзами?

1️⃣ Балансировщик нагрузки

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

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

Это увеличивает пропускную способность, снижает задержки и оптимизирует использование ресурсов.

2️⃣ Обратные прокси

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

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

Дополнительно, они могут кэшировать контент для уменьшения нагрузки на сервер, сжимать данные для ускорения передачи и управлять SSL/TLS-шифрованием, разгружая веб-серверы.

3️⃣ API-шлюзы

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

Они упрощают взаимодействие клиентов с разными сервисами, добавляют защиту, применяют правила, переводят между веб-протоколами и агрегируют данные.

Идеально подходят для работы с микросервисной архитектурой.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥32
🖥 Laravel → NestJS: карта соответствий для тех, кто и так всё знает

Вы годами живёте в Service Container, пишете Form Requests на автомате и знаете, где у Laravel «магия». Вопрос не в том, умеете ли вы, — а в том, как быстро вы смапите привычные концепции на чужой стек, когда прилетит проект на NestJS.

Deva Jayantha сделал именно это: не туториал «с нуля», а таблицу перевода Laravel → NestJS по девяти осям:

— Service Container vs явная регистрация провайдеров в модулях;
— Form Request vs связка DTO + class-validator + Pipe;
— Middleware vs Guards/Pipes/Interceptors (и почему middleware в Nest только про логирование и CORS);
— Eloquent (Active Record) vs TypeORM (Data Mapper);
— Exception handler vs Exception Filters.

Главный сдвиг парадигмы: «convention over configuration» против «explicit over implicit». Всё, что Laravel делает за вас неявно, Nest требует объявить руками и это не хуже, это другая философия с другими trade-offs для больших модульных кодовых баз.

Ничего революционного там не найти, но за 15 минут можно получить готовую ментальную модель, которая сэкономит день онбординга на TypeScript-проекте. Полезно и как аргументация в спорах «а почему у нас Laravel».

🔗 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔42👍1🔥1
⌨️ Топ-вакансий по PHP за неделю

Middle Fullstack Developer (PHP/Laravel + React) — от 2000 до 2700 $ — удалёнка

Fullstack-разработчик (PHP, JS) — удалёнка/гибрид (Казань) — Danaflex

Senior Backend разработчик (PHP) — удалёнка — MPSTATS

➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
🏗 Fat controller, fat model, fat service — выбери, где тебе будет больно

Бизнес-логику нужно куда-то положить. Вечный спор не про «как правильно», а про то, какую боль ты выбираешь осознанно.

🔹 В контроллере.

Быстро на старте, через полгода контроллер на 400 строк, логику нельзя переиспользовать из консольной команды, тесты требуют поднимать HTTP-слой. Боль: дублирование и непереиспользуемость.

🔹 В модели (Active Record).

Логика рядом с данными, удобно. Но модель начинает знать про отправку писем, платёжные шлюзы и очереди. God-object, который тащит за собой полприложения в каждый тест. Боль: связность.

🔹 В сервисах / Action-классах.

Логика отделена от транспорта и от хранилища, тестируется на чистых данных. Цена — больше файлов и дисциплина, чтобы сервис не превратился в свалку из 30 методов. Боль: дисциплина.

Практичная середина, которая выживает дольше всего: тонкий контроллер (валидация + вызов), модель хранит данные и простые инварианты, Action/сервис держит сценарий. Один use-case — один класс с одним публичным методом. Растёт линейно, читается за минуту, тестируется без фреймворка.

💬 Какие проекты на каком варианте пишете?

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2👏1
🔥 ИИ-выходные: Собери своего AI-агента за 2 дня

Хватит просто читать про ИИ, пора собирать автономные системы руками! 1–2 августа пройдет хардкорный онлайн-интенсив для junior-middle разработчиков.

Формат: теория ➡️ сразу практика. Вы будете управлять AI-инструментами.

🛠️ Как всё пройдет:

День 1 (Суббота): разбираем анатомию агента, подключаем инструменты (shell, GitHub, Postgres) и дебажим трейсы.
День 2 (Воскресенье): собираем собственного агента под вашу задачу, настраиваем Eval + Guardrails (чтобы бот не галлюцинировал) и проводим демо.


Для кого: Вы пишете на Python, работаете с Git и терминалом. (С нуля не подойдет, темп очень быстрый!)

Артефакт на выходе: Рабочий репозиторий с вашим агентом, который не стыдно показать команде.
👨‍💻 Спикер: Алексей Жиряков (Сбер, GenAI).

Места ограничены!

👉 Изучить программу и занять место
1
🤨 Как заставить AI-агента не ломать архитектуру, а нормально писать код?

Мы привыкли общаться с ИИ промптами, но для автономных систем это путь к бесконечным циклам и сливу бюджета. Чтобы убрать хаос, инженеры переходят на Spec-Driven Development (SDD).

Вот как этот подход меняет работу агента на практике:

🔹Контракт вместо текста. Сначала пишется строгая спецификация (JSON-схема/OpenAPI) и автотесты. Агент зажат в рамки интерфейсов, за которые физически не может выйти.
🔹Контроль на шагах. Внутри петли Think-Act-Observe агент сверяет действия со спецификацией.
🔹Саморефлексия. Если ИИ нарушил типы или «додумал» лишнее, тест падает. Агент получает ошибку в контекст и сам правит код, не выходя за рамки ТЗ.

Это лишь база того, как укротить ИИ-разработку. Если вы хотите глубоко внедрить эту методологию, научиться проектировать архитектурные контракты и собирать отказоустойчивые системы — оставляйте заявку на наш новый курс по Spec-Driven Development. Стартуем совсем скоро🙂
Media is too big
VIEW IN TELEGRAM
🔥 Не называйте любого продвинутого чат-бота «ИИ-агентом»!

Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru, наглядно разбирает уровни абстракции ИИ-продуктов и убирает путаницу в понятиях.

Что внутри видео:

- Почему ассистент и агент принципиально разные сущности;
- Как ассистент может быть просто «обёрткой» над LLM, а может скрывать под капотом сложнейшую мультиагентную систему;
- Как понимать архитектуру глубже, чтобы проектировать сильные решения.

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

🔗 Забрать бесплатный демо-урок
1
✔️ PHP-тест: один запрос кладёт воркеры

CPU одного ядра — в полку на несколько секунд. PHP-FPM воркеры заканчиваются, сайт встаёт. И всё из-за одного поля формы 👇

📦 Задание

Форма регистрации компании. Поле «теги деятельности» — строка вида php, backend, api. Сделали «надёжную» валидацию регуляркой. Работало месяцами. Потом сайт начал периодически зависать на 5–10 секунд, мониторинг показывает 100% CPU на одном ядре, а APM — что время уходит внутри preg_match. Воспроизводится только на определённых вводах от пользователей.
// src/Validation/TagsValidator.php
class TagsValidator
{
private const PATTERN = '/^([a-zA-Z0-9]+\s*,?\s*)+$/';

public function validate(string $tags): bool
{
return (bool) preg_match(self::PATTERN, $tags);
}
}


🔹 Задачи

— Объяснить механизм катастрофического бэктрекинга на этом паттерне
— Привести пример строки, которая «вешает» движок регулярных выражений
— Переписать проверку

Ставьте → 🔥 если нравится формат. Если нет → 🌚

💬 Решения пишите в комменты под спойлер — сравним подходы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍2👏1🌚1
🐳 Работа с Docker CLI

Собрали образ и он весит 2 ГБ, а вы не понимаете, откуда столько? docker history покажет размер каждого слоя — сразу видно, какая инструкция в Dockerfile раздула образ.

🔹 Зачем это нужно

— Каждая инструкция в Dockerfile создаёт слой, и docker history показывает размер каждого.
— Сразу видно, если COPY затянул 800 МБ зависимостей.
— Помогает оптимизировать порядок слоёв для лучшего кэширования.

🔹 Как использовать

— Посмотреть слои: docker history my-image
— Без обрезки команд: docker history --no-trunc my-image
— Только размеры в human-readable: docker history --format "{{.Size}}\t{{.CreatedBy}}" my-image
— Сравнить два образа: запустите history для обоих и сравните слои.

💡 Если видите большой слой от COPY . . — значит, в контекст сборки попали модули, .git или логи. Проверьте dockerignore, это обычно экономит сотни мегабайт.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1👏1