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

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

Учиться у нас: https://proglib.io/w/bca892d6

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

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
⚡️ Знакомьтесь с экспертом Proglib Academy: AI-архитектор Антон Будняк

Антон — мастер превращения сырых AI-идей в отказоустойчивые системы. Он знает, как запустить MVP за неделю и масштабировать его так, чтобы архитектура не рассыпалась под нагрузкой в сотни тысяч юзеров.

За что его ценит IT-комьюнити:

🟣 Опыт в финтехе и крупном бизнесе
Руководил разработкой ML-моделей в финтехе с экономическим эффектом более 100 млн ₽


🟣 Запуск продуктов на 6.000+ пользователей
Антон строит сервисы, которыми пользуются тысячи людей в реальном проде.


🟣 Ускоряет разработку
Оптимизировал ML-пайплайны и кратно сократил время от начала разработки до релиза


📚 Где Антон черпает знания (рекомендации эксперта):

- X* — главный источник новостей. Рекомендую блог Бориса Черни (создателя Claude Code) — там база про использование ИИ в разработке.
- Нетворкинг в ТГ: чаты LLM под капотом и AI-чат — здесь можно найти ответ почти на любой технический вопрос.
- Новости AI: каналы Сиолошная и Denis Sexy IT.

На курсе Agentops Антон учит строить «неубиваемый» бэкенд: работать с очередями, таймаутами и балансировкой нагрузки, чтобы ваши агенты работали стабильно 24/7.

🎁 Майские СКИДКИ в Proglib Academy!

До конца мая на все курсы академии (включая AgentOps и разработку ИИ-агентов) действует скидка -40%. Это лучший момент, чтобы войти в AI-разработку под присмотром практиков.

Узнать больше о программе и обучении у Антона:
👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса

Продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Пойду подпишусь на каналы из списка Антона

🏃‍♀️ Proglib Academy

* - запрещен в рф
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱7😁2🌚21
🐧 База Linux, которую стыдно гуглить

Для эффективной работы с серверами нужно уверенно владеть терминалом. Забирайте шпаргалку.

Что тут у нас по классике:

Файлы и навигация: ls, cd, mkdir, rm, mv, cp. База, без которой ты даже логи не найдешь.

Поиск и чтение: find, grep, cat. Твои лучшие друзья при дебаге гигабайтных логов в поисках одной упавшей транзакции.

Управление процессами: ps, kill, top. Экстренный набор хирурга, когда какой-то процесс потёк по памяти и положил всю ноду.

Права и сеть: chmod, ping, ifconfig.


А как у вас отношения с консолью?
❤️ — Живу в терминале
🔥 — Знаю базу

🔹 Курс «Основы IT для непрограммистов»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🏃‍♀️ Азбука айтишника

#ликбез
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍4🌚1
👀 Практический курс «Разработка AI-агентов для автоматизации задач, работы и собственных проектов» со скидкой 40% до конца мая!

Мы поговорили с десятками разработчиков, учли главные боли индустрии и запускаем полностью обновленный курс «ИИ-агенты 5.0». 🎉

Что вы узнаете?

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

Спикеры — практики с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, Raft и Газпромбанк др.

Длительность: 6–12 недель в зависимости от тарифа.

👉 Занимайте место на главном агентском интенсиве по лучшей цене
🥱3
🔍 Профилирование MongoDB-запросов в Laravel

Медленный роут часто связан не с самим PHP. Обычно виноваты неоптимальные запросы, отсутствующий индекс или дорогая агрегация. Без видимости на уровне драйвера ловить такое — гадание на кофейной гуще.

В гайде собирают лёгкий монитор для связки Laravel + MongoDB из трех частей:

— middleware замеряет общую длительность HTTP-запроса;
— класс, реализующий CommandSubscriber из MongoDB PHP driver, ловит события commandStarted / commandSucceeded / commandFailed и считает длительность каждой команды;
— метрики собираются в QueryMonitorService и в конце реквеста сбрасываются в коллекцию performance_logs.

Ключевое → подписка регистрируется один раз в boot() провайдера:
use function MongoDB\Driver\Monitoring\addSubscriber;

public function boot(): void
{
addSubscriber(new MongoCommandSubscriber());
}


Дальше драйвер сам отдаёт операцию (find, aggregate, insert), коллекцию и тайминг, без правок прикладного кода. Запросы дольше порога помечаются is_slow.

Чтобы коллекция логов не разрасталась до неприличия, навешивают TTL-индекс на created_at с expireAfterSeconds: 604800 (неделя). Mongo сам подметает старьё.

🔗 Подробнее

Библиотека пхпшника

#how_to
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥1
Расскажите о паттерне Memento

Memento — это поведенческий паттерн, который позволяет сохранять и восстанавливать прежнее состояние объекта, не нарушая инкапсуляцию.

Простыми словами: Ctrl+Z в любом редакторе — где-то хранится снимок предыдущего состояния, к которому можно откатиться.

▪️ Когда использовать

Нужна функция отмены/отката (undo)
Нужно сохранять контрольные точки состояния
Прямой доступ к полям объекта нарушил бы инкапсуляцию

▪️ Memento vs Command

— Command: хранит действие и умеет его отменить
— Memento: хранит полный снимок состояния

▪️ Минус

Может потреблять много памяти, если состояние объекта большое и снимки создаются часто.
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🔥1
💥 vibe coding — это не продуктивность, а технический долг с красивым названием

Я сам использую несколько ИИ-агентов, расчехлять каменный топор не предлагаю.

Но смотрю, во что превращается «просто опиши интент, а код появится». PR на 600 строк, который разраб не может объяснить на ревью. Тесты, которые проверяют, что мок вернул то, что в него замокали. «Починили» баг, а прилетело ещё два, потому что никто не читал, что там нагенерилось.

Сгенерить за минуту и разгребать месяц — это не 10x к производительности. AI это джун с бесконечной скоростью и нулевым контекстом бизнеса. Джуну ревьюишь каждую строку, а с ИИ часто выключают голову, потому что «модель же умная».

Vibe coding — это новый уровень абстракции или мы растим поколение, которое не умеет даже дебажить?
💬 Го в комменты

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
💯6👍2🔥1🥱1
🦾🧠🏋️ Качаем мозги к лету!

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

⚡️ Распродажа @proglib_academy: забирайте самые актуальные образовательные треки по сниженным ценам!

➡️ Разработка AI-агентов от 49 000 ₽ (вместо 69 000 ₽).

➡️ Курс AgentOps129 000 ₽ (вместо 149 000 ₽).

➡️ Математика для разработки AI-моделей23 990 ₽ (вместо 31 990 ₽).

➡️ ML для старта в Data Science 28 990 ₽ (вместо 38 990 ₽).

Почему мы?

⭐️Учим для продакшена. Наши программы заточены под реальные задачи бизнеса: как не слить бюджет на токены, как заставить LLM работать стабильно в бэкенде и как выстроить отказоустойчивую архитектуру.
⭐️Спикеры — суровые практики. Вы будете перенимать опыт у действующих AI-архитекторов, тимлидов и ML-инженеров из топовых IT-компаний.
⭐️Комплексный подход. Мы даем как мощный математический фундамент для понимания моделей «под капотом», так и передовые инструменты оркестрации агентов.
⭐️Много практики и фидбека. Вебинары, десятки практических заданий и живое общение с экспертами в чате Telegram на протяжении всего обучения.

Оставляйте заявку и бронируйте место со СКИДКОЙ 40%
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Серверная реактивность: Livewire и три его собрата

Идея одна: рендерить HTML на сервере и гнать обновления клиенту, убрав фронтенд-фреймворк из уравнения. Реализаций четыре, и разница между ними архитектурная:

🔹 Фреймворк Phoenix LiveView (Elixir)

Держит состояние в BEAM-процессе на WebSocket, вычисляя диффы на уровне выражений в шаблоне.

🔹 Инструмент Rails Hotwire

Работает без состояния, перегоняя готовые куски HTML через обычный HTTP, что грубо, но покрывает 80% задач.

🔹 Пакет Laravel Livewire

Выступает ближайшим клоном LiveView на PHP, где состояние сериализуется в JSON и путешествует туда-обратно при каждом запросе (хотя с Laravel Reverb доступен WebSocket).

🔹 Экспериментальные проекты Go Live и HLive

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

Выбор тут не про «что быстрее», а про экосистему и команду. Для Laravel-стека Livewire — единственный вариант, не требующий смены языка.

🔗 Читать оригинал

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
⚡️ Последний шанс забрать курсы со СКИДКОЙ 40%! Прокачайте свой мозг правильно

До конца акции вы можете воспользоваться специальными ценами на самые востребованные IT-направления. Круто и выгодно прокачать свои скиллы, чтобы получить оффер, уехать на Бали и больше не быть онлайн 😎

➡️ Разработка AI-агентов от 49 000 ₽ (вместо 69 000 ₽)
Курс про контролируемую разработку ИИ-агентов: качество, стоимость, наблюдаемость и тестирование. С первого занятия — только практическая работа.

➡️ Курс AgentOps 129 000 ₽ (вместо 149 000 ₽)
Профессиональный трек для разработчиков и LLM инженеров о том, как правильно внедрять AI-логику в бэкенд и сохранять железную стабильность сервиса.

➡️ Математика для Data Science от 29 990 ₽ (вместо 39 990 ₽)
Вы научитесь решать сложные математические задачи, которые дают на собеседованиях на позицию дата-сайентиста в бигтехе. Отличная база для мощного старта в DS.

➡️ Курс Специалист по ИИ 89 000 ₽ (вместо 113 900 ₽)
Комплексная программа для получения профессии в сфере ИИ с нуля. За 8 месяцев вы соберете сильное портфолио из 5 реальных проектов и дипломной работы.

➡️ Архитектуры и шаблоны проектирования27 990 ₽ (вместо 37 900 ₽)
Интенсив для разработчиков, который поможет освоить основные паттерны проектирования и прокачать навыки архитектора программного обеспечения.

🌸 Выбирайте направление, оставляйте заявку на сайте распродажи, и наш менеджер подробно вас проконсультирует
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱2
🐳 Работа с Docker Compose

Поменяли конфиг одного сервиса и не хотите перезапускать весь стек из 10 контейнеров? docker compose up -d --no-deps service-name пересоздаст только указанный сервис.

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

— Перезапуск одного сервиса вместо всего стека экономит минуты на тяжёлых проектах.
— --no-deps не трогает зависимости, так что БД и Redis останутся на месте.
— -d запускает в фоне, терминал свободен для другой работы.

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

— Пересоздать один сервис: docker compose up -d --no-deps api
— Пересобрать и запустить: docker compose up -d --no-deps --build api
— Посмотреть логи только одного: docker compose logs -f api
— Рестарт без пересоздания: docker compose restart api
— Масштабировать: docker compose up -d --scale worker=3

💡 restart не подхватывает изменения в docker-compose.yml или Dockerfile, для этого нужен up -d. Если обновили env-переменные или порты — только up -d применит изменения.

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥1
⚡️ Продолжаем знакомить вас с экспертами курса AgentOps!

Сергей Нотевский расскажет, как выстроить FinOps для AI-продуктов: оптимизировать затраты на разработку и продакшен, внедрить model routing, semantic cache и систему алертов для контроля расходов
Эмиль Сатаев разберет Context Engineering: управление контекстом, защиту от prompt injection, работу с длинными контекстами и построение безопасного пайплайна входа для AI-систем
Михаил Бондаревский покажет, как подготовить инфраструктуру для AI-агентов: Docker, sandboxing, streaming, docker-compose и воспроизводимое окружение для разработки и продакшена
Мурат Хажгериев расскажет про Enterprise Integrations & MCP: когда MCP действительно нужен, как подключать внешние сервисы и реализовывать интеграции с OAuth2 delegation
Герман Сабиров разберет Governance & Compliance для AI-систем: data flow, audit logs, требования 152-ФЗ, локализацию данных и построение compliance-подхода на уровне архитектуры

Курс для backend-разработчиков, тимлидов и LLM инженеров о том, как внедрять AI-логику в бэкенд IT-продуктов и сохранять стабильность сервиса.

👉 Изучить обновленную программу AgentOps и занять место.
1
🧠 Распознавание лиц на чистом PHP

Если задача пилить аттенданс или авторизацию по лицу прямо внутри Laravel-монолита, тащить Python-микросервис избыточно. Расширение php-dlib подгружает модели Dlib и отдаёт 128-мерные эмбеддинги без посредников.

Пайплайн на четыре шага

— ставим расширение из релизов mailmug/php-dlib и прописываем путь в php.ini;
— качаем три .dat-модели (детектор CNN, 5-point landmarks, ResNet recognition);
— на этапе enroll прогоняем фото через детектор → ландмарки → дескриптор, сериализуем в faces.db;
— на recognize считаем евклидово расстояние, порог 0.6 отсекает чужих.

Ядро энролла:
$faces = $fd->detect($img);
$landmarks = $fld->detect($img, $faces[0]);
$descriptor = $fr->computeDescriptor($img, $landmarks);
$database[$name] = $descriptor;


Ландмарки тут не для красоты: без выравнивания по глазам дескриптор плывёт, и матчинг ловит ложные срабатывания на похожих лицах.

📂 Скачать исходники

Библиотека пхпшника
🔥7👍21🌚1
🔍 Laravel Request Lifecycle: что происходит до того, как сработает твой контроллер

Контроллер — это не начало запроса, а середина. К моменту, когда выполняется его тело, фреймворк уже прошёл половину пути. Этот путь объясняет, почему register() ≠ boot(), почему route binding — не магия контроллера, и почему синглтоны убивают вас в Octane.

1️⃣ Точка входа

Веб-сервер ничего не знает про роуты и Eloquent. Его задача — отдать запрос в public/index.php. Дальше:
— грузится автолоадер Composer;
— из bootstrap/app.php достаётся инстанс приложения (он же — service container);
— Request::capture() оборачивает $_GET/$_POST/$_SERVER в Illuminate\Http\Request (наследник Symfony Request);
— $app->handleRequest(...) резолвит HTTP Kernel, гоняет запрос, шлёт ответ и терминирует.

2️⃣ HTTP Kernel — координатор, а не бизнес-логика

Включает method override (_method для PUT/PATCH/DELETE), отправляет запрос в роутер, ловит исключения и превращает их в HTTP-ответ через хендлер, диспатчит RequestHandled.

3️⃣ Бутстрап (по порядку)

env → config → exceptions → facades → register providers → boot providers.

Порядок критичен:
→ register() — только биндинги в контейнер, ничего не резолвить
→ boot() — настройка уже зарегистрированных сервисов (гейты, события, view composers)

Правило: биндишь в register, настраиваешь в boot. Иначе словишь зависимость от ещё не зарегистрированного сервиса.

4️⃣ Middleware

Запрос идёт внутрь, ответ — наружу через тот же стек.
— код до $next($request) → на входе
— код после → на выходе (можно менять готовый ответ)

Сначала глобальный стек (CORS, TrustProxies, trim, maintenance), потом роутер. Кто первым увидел запрос, последним увидит ответ.

5️⃣ Роутинг

Роутер матчит route (метод, домен, URI, констрейнты), привязывает route resolver к запросу (поэтому потом работает $request->route()), диспатчит Routing и RouteMatched.

6️⃣ Route middleware + биндинг

Отдельный pipeline под middleware роута (web, api, auth...). Здесь же SubstituteBindings подменяет {post:slug} на модель Post до вызова контроллера. Route model binding живёт в pipeline, а не внутри экшена.

7️⃣ Экшен

Контроллер резолвится из контейнера через make(), а не new — отсюда DI в конструкторе. FormRequest резолвится, авторизуется и валидируется до входа в метод. К началу тела экшена за тебя уже сделана куча работы.

8️⃣ Ответ

Что бы ты ни вернул — строку, массив, модель, Responsable, view — Laravel нормализует в Symfony Response (массив → JSON и т.д.). Дальше ответ идёт назад: route → global middleware. Контроллер вернул одно, а браузер получил другое? Смотри middleware после $next.

9️⃣ send() и terminate()

$response->send() и клиент получил ответ. Но lifecycle не закончен: terminate() запускает terminable middleware и termination callbacks *после* отправки. Удобно для метрик и лёгкого клинапа.

Нюанс: на terminate() middleware резолвится из контейнера заново. Нужен тот же инстанс, что в handle(), так что регай синглтоном. А тяжёлую работу в очередь, не в post-response.

🔟 Octane / queue workers

Классический PHP — свежий процесс на каждый запрос. Длинноживущие воркеры держат приложение в памяти между запросами. Синглтон с request-данными → утечка состояния в соседний запрос. Для request/job-scoped сервисов — scoped(): резолвится раз за lifecycle и сбрасывается на новом.

Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93🔥3
🤖 AI в разработке: время новых процессов

Сейчас уже поздно спорить о том, нужен ли AI в разработке: он прочно вошёл в процессы — и в стартапах, и в бигтехе.

Эксперты Podlodka AI Crew собрали сезон «AI-First Development», чтобы обсудить уже не отдельные инструменты, а новую инженерную модель, в которой AI становится частью команды.

С 15 по 19 июня участники конференции:

📄 Разберутся, как делать AI-разработку более предсказуемой с помощью Open Spec Development

⚡️ Изучат model routing и prompt caching


🏗 Узнают, как автоматизировать инженерные процессы с помощью AI

🤖 Обсудят навыки и оркестрацию AI-агентов

📊 Посмотрят, как AI влияет на качество и скорость разработки.


Формат конференции — необычный и удобный: пять дней живых Zoom-сессий по утрам и вечерам, закрытое комьюнити в Telegram и обсуждения со спикерами.

Если хотите разобраться, как реально встроить AI в процессы разработки и использовать его не только для генерации кода — присоединяйтесь, тем более, что сейчас действует приятная early-bird цена на участие.

🎟 Посмотреть программу и купить билеты:
https://podlodka.io/aicrew

По нашему промокоду phpproglib получите скидку🎁
1
😎 Знакомьтесь с экспертом Proglib.academy: Senior Software Engineer и Team Lead в Yandex Cloud Роман Барлос

Роман — консультант нашего курса «Разработка ИИ-агентов». Он работает на стыке cloud-native архитектуры и AI, активно внедряя современные ИИ-подходы в реальные процессы разработки.

За что его ценит IT-комьюнити?


🟣 Team Lead и AI-евангелист в команде UX Yandex Cloud
14-лет в разработке. Занимается AI-адопшеном в команде Yandex Cloud, проводит мастер-классы и продвигает лучшие практики для повышения эффективности разработчиков.


🟣 Техлид Sourcecraft Code Assistant
С сильным практическим бэкграундом принимал участие как технический лид в создании мощного AI-расширения для VS Code.


🟣 Создатель полезного Open Source
Разрабатывает утилиты, которые позволяют быстро начать эксперименты с инференсом и агентами в локальном окружении: например, набор скриптов vllm-setup для быстрого запуска окружения и mini-proxy — минималистичный прокси для OpenAI API провайдеров.


🟣 Автор интерактивных ML-визуализаций
Объясняет сложные концепции наглядно. Создал серию залипательных обучающих материалов, где можно вживую пощупать работу сетей Хопфилда, машин Больцмана и VC-размерности.


Роман регулярно делится инженерными наработками, инсайтами и экспертизой в своем авторском Telegram-канале

На курсе Роман выступает консультантом программы: он помогает формировать содержание уроков с опорой на актуальные инженерные практики и жесткие требования индустрии.

Узнать больше о программе и разработке автономных систем:
👉 Курс «Разработка ИИ-агентов»

Так, продолжаем знакомить вас с командой?
👍 — Да, ждем новых лиц
🔥 — Жду полезные материалы от Романа
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚21🥱1
✔️ PHP-тест: список, который иногда становится объектом

Мобилка падает на парсинге ответа. Только у части пользователей. У остальных — всё ок.

📦 Задание

Эндпоинт /api/products/available отдаёт товары в наличии. Бэкенд не трогали месяц. Внезапно прилетает баг от мобильной команды: «приложение крашится при разборе items, иногда это массив, иногда какой-то объект с числовыми ключами». На стейджинге не воспроизводится — там тестовые данные, все товары в наличии.

// src/Api/ProductController.php
class ProductController
{
public function __construct(
private readonly ProductRepository $repository,
) {}

public function available(): JsonResponse
{
$products = $this->repository->findAll();

$available = array_filter(
$products,
fn (Product $p): bool => $p->getStock() > 0,
);

return new JsonResponse([
'items' => $available,
'count' => count($available),
]);
}
}


🔹 Задачи

— Объяснить, почему форма ответа items зависит от данных: то массив, то объект
— Объяснить, при каком наборе товаров json_encode отдаёт {"0":…, "2":…} вместо […]
— Исправить так, чтобы items гарантированно сериализовался как JSON-массив

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

💬 Решения пишите в комменты под спойлер — сравним подходы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱7🔥51👍1👾1