This media is not supported in your browser
VIEW IN TELEGRAM
🔥 Хочешь строить свои AI-модели, а не просто запускать чужие?
Proglib.academy открывает курс «Математика для разработки AI-моделей» — программу, которая превращает понимание ML из «черного ящика» в осознанную инженерную работу.
📌 Почему без математики в AI никуда:
→ Чтобы пройти собеседование. Это первый фильтр: линал, матстат, оптимизация — спрашивают везде.
→ Чтобы понимать процесс изнутри. Инженер AI должен понимать, почему и как работает модель, а не просто жать fit().
🎓 Что будет на курсе:
→ 3 практических задания на Python + финальный проект с разбором от специалистов;
→ программа обновлена в ноябре 2025;
→ за 2 месяца пройдёшь весь фундамент, нужный для работы с моделями;
→ преподаватели — гуру математики, методисты и исследователи из ВШЭ и индустрии.
🎁 Бонусы ноября:
— 40% скидка;
— получаешь курс «Школьная математика» в подарок;
— короткий тест и узнать свой уровень.
🔗 Подробнее о курсе
Proglib.academy открывает курс «Математика для разработки AI-моделей» — программу, которая превращает понимание ML из «черного ящика» в осознанную инженерную работу.
📌 Почему без математики в AI никуда:
→ Чтобы пройти собеседование. Это первый фильтр: линал, матстат, оптимизация — спрашивают везде.
→ Чтобы понимать процесс изнутри. Инженер AI должен понимать, почему и как работает модель, а не просто жать fit().
🎓 Что будет на курсе:
→ 3 практических задания на Python + финальный проект с разбором от специалистов;
→ программа обновлена в ноябре 2025;
→ за 2 месяца пройдёшь весь фундамент, нужный для работы с моделями;
→ преподаватели — гуру математики, методисты и исследователи из ВШЭ и индустрии.
🎁 Бонусы ноября:
— 40% скидка;
— получаешь курс «Школьная математика» в подарок;
— короткий тест и узнать свой уровень.
🔗 Подробнее о курсе
💻 Подборка новостей по PHP за неделю:
🔹 Laravel 12.39 — добавлена директива Blade
🔹 Symfony 7.4 — опубликована подборка новых возможностей грядущего релиза. Благодаря строгому соблюдению обратной совместимости обновление до 7.4 не потребует изменений в коде.
🔹 CodeRabbit — компания привлекла $60 млн (Series B) и отпраздновала выпуском шуточного короткометражного видео с участием Аарона Фрэнсиса.
🔹 Symfony 17–23 ноября — выпущены RC-версии Symfony 7.4 и 8.0 (релиз ожидается на следующей неделе). Начата работа над Symfony 8.1, намеченной на май 2026. Также опубликованы новые детали конференции SymfonyCon 2025.
Библиотека пхпшника
#свежак
🔹 Laravel 12.39 — добавлена директива Blade
@hasStack, упрощающая проверку наличия стека; флаг для фильтрации middleware в route:list; обновления типов и исправления.🔹 Symfony 7.4 — опубликована подборка новых возможностей грядущего релиза. Благодаря строгому соблюдению обратной совместимости обновление до 7.4 не потребует изменений в коде.
🔹 CodeRabbit — компания привлекла $60 млн (Series B) и отпраздновала выпуском шуточного короткометражного видео с участием Аарона Фрэнсиса.
🔹 Symfony 17–23 ноября — выпущены RC-версии Symfony 7.4 и 8.0 (релиз ожидается на следующей неделе). Начата работа над Symfony 8.1, намеченной на май 2026. Также опубликованы новые детали конференции SymfonyCon 2025.
Библиотека пхпшника
#свежак
💡 Совет по Laravel: Отправка после ответа
Иногда определенные задачи, такие как отправка электронных писем, не обязательно должны ставиться в очередь и обрабатываться рабочим процессом. В таких случаях можно воспользоваться методом
Библиотека пхпшника
#vardump
Иногда определенные задачи, такие как отправка электронных писем, не обязательно должны ставиться в очередь и обрабатываться рабочим процессом. В таких случаях можно воспользоваться методом
dispatchAfterResponse(). Как и следует из названия, этот метод отправляет задание сразу после того, как сервер отвечает пользователю. Быстрый ответ для клиента без нагрузки на рабочий процесс незначительными задачами 🚀 Библиотека пхпшника
#vardump
🔥1
🔥 Мокирование статических методов и встроенных функций в PHP — без боли и рефакторинга
Тестировать код, который опирается на статические методы или встроенные функции — задача неприятная. Обычно это заканчивается лишними абстракциями, «обёртками» и переписыванием половины приложения.
Чтобы избежать этого и писать чистые тесты без хирургии в прод-коде, появился MintyPHP Mocking — небольшая, аккуратная библиотека, которая позволяет мокировать и статические методы, и встроенные функции PHP.
🧩 Что умеет библиотека
✨ Мок статических методов
Вы указываете ожидаемый вызов и результат — и дальше обращаетесь к классу как обычно.
✨ Мок встроенных функций
В том числе
✨ Никаких обвязок и костылей
Ни интерфейсов, ни врапперов, ни перегретого DI — мок просто перехватывает вызовы.
⚙️ Как это работает под капотом
🟣 Для статических методов:
Библиотека вставляет свой автолоадер раньше настоящего класса и подменяет его stub-версией. Все вызовы проходят через ваши ожидания.
🟣 Для встроенных функций:
В нужном namespace на лету создаётся функция с таким же именем. PHP всегда сначала проверяет текущий namespace и только потом глобальный — этим и пользуемся.
📌 Важные нюансы
🟢 Ожидания работают в порядке FIFO
🟢 Аргументы сверяются через
🔴 Лишний вызов → «No expectations left»
🔴 Не все ожидания израсходованы → тест падает
🟡 Namespace имеет значение
🟡 Вызовы через
🧪 Зачем это нужно?
• Тестировать код без переписывания архитектуры
• Быстро изолировать поведение зависимостей
• Проверять корректность взаимодействий, а не реализаций
• Экономить время и не городить лишние уровни абстракции
🔗 Статья с примерами
Библиотека пхпшника
Тестировать код, который опирается на статические методы или встроенные функции — задача неприятная. Обычно это заканчивается лишними абстракциями, «обёртками» и переписыванием половины приложения.
Чтобы избежать этого и писать чистые тесты без хирургии в прод-коде, появился MintyPHP Mocking — небольшая, аккуратная библиотека, которая позволяет мокировать и статические методы, и встроенные функции PHP.
🧩 Что умеет библиотека
✨ Мок статических методов
Вы указываете ожидаемый вызов и результат — и дальше обращаетесь к классу как обычно.
✨ Мок встроенных функций
В том числе
microtime(), file_get_contents(), random_int() — любые, если они вызываются в вашем namespace без слэша.✨ Никаких обвязок и костылей
Ни интерфейсов, ни врапперов, ни перегретого DI — мок просто перехватывает вызовы.
⚙️ Как это работает под капотом
🟣 Для статических методов:
Библиотека вставляет свой автолоадер раньше настоящего класса и подменяет его stub-версией. Все вызовы проходят через ваши ожидания.
🟣 Для встроенных функций:
В нужном namespace на лету создаётся функция с таким же именем. PHP всегда сначала проверяет текущий namespace и только потом глобальный — этим и пользуемся.
📌 Важные нюансы
🟢 Ожидания работают в порядке FIFO
🟢 Аргументы сверяются через
assertEquals🔴 Лишний вызов → «No expectations left»
🔴 Не все ожидания израсходованы → тест падает
🟡 Namespace имеет значение
🟡 Вызовы через
\microtime() не перехватываются🧪 Зачем это нужно?
• Тестировать код без переписывания архитектуры
• Быстро изолировать поведение зависимостей
• Проверять корректность взаимодействий, а не реализаций
• Экономить время и не городить лишние уровни абстракции
🔗 Статья с примерами
Библиотека пхпшника
👍6❤1
📘 4 декабря стартует набор на курс «Математика для разработки AI-моделей»
Если вы работаете с моделями или хотите перейти в DS/ML, декабрь — идеальный момент закрыть фундаментальные пробелы.
На курсе вы разберёте ключевые разделы, которые лежат в основе современных AI-моделей: линейная алгебра, анализ, оптимизация, математический анализ, вероятности, статистика. Всё через практику в Python.
В программе живые занятия с экспертами AI-индустрии (SberAI, ВШЭ, WB&Russ), разбор реальных задач, квизы и финальный проект.
🌐 Формат: онлайн + доступ к записям
🎁 Бонусы: курс «Школьная математика» в подарок, бесплатный тест по математике
После лекций будет разбор ваших решений и возможность задать вопросы преподавателям.
👉 Записаться на курс
Если вы работаете с моделями или хотите перейти в DS/ML, декабрь — идеальный момент закрыть фундаментальные пробелы.
На курсе вы разберёте ключевые разделы, которые лежат в основе современных AI-моделей: линейная алгебра, анализ, оптимизация, математический анализ, вероятности, статистика. Всё через практику в Python.
В программе живые занятия с экспертами AI-индустрии (SberAI, ВШЭ, WB&Russ), разбор реальных задач, квизы и финальный проект.
🌐 Формат: онлайн + доступ к записям
🎁 Бонусы: курс «Школьная математика» в подарок, бесплатный тест по математике
После лекций будет разбор ваших решений и возможность задать вопросы преподавателям.
👉 Записаться на курс
Forwarded from Библиотека задач по PHP | тесты, код, задания
Отработает ли данный код?
Anonymous Quiz
40%
код успешно отработает
60%
Fatal error: Default value for property of type DateTimeInterface may not be null.
Saloon vs Guzzle vs Laravel HTTP Client vs SDK-решения
🧩 Saloon
«Фреймворк» для построения API-интеграций и SDK внутри PHP / Laravel-приложений.
➕ Сильные стороны:
✨ Структура: выделенные классы Connector и Request позволяют логично организовать код.
🚀 Богатый набор функций: кеширование, пагинация, повторы запросов, тест-фикстуры.
📚 Отлично подходит, если интеграций много и они развиваются — нужен читаемый, расширяемый слой.
➖ Ограничения:
⚙️ Дополнительный уровень абстракции: может быть избыточен для простых случаев.
🧠 Требует привыкания к концепциям Connector/Request.
📦 Новая зависимость — нужно следить за обновлениями и совместимостью.
🧱 Guzzle
Классическая библиотека-HTTP-клиент PHP.
➕ Сильные стороны:
🔧 Очень гибкая: прямой контроль над HTTP-запросами, поддержка асинхронности.
🧮 Минимум обёрток: чистый доступ к HTTP-уровню.
➖ Ограничения:
🧩 Не столь читаема при большом количестве интеграций — код становится «сырой».
🧪 Нет встроенной структуры для интеграций и тестирования сверху — требует дисциплины.
🎯 Laravel HTTP Client (Facade)
Обёртка над Guzzle от Laravel, ориентированная на удобство.
➕ Сильные стороны:
✅ Очень прост в использовании: читаемый код, удобные методы.
🧪 Отличные инструменты для тестов: легко подменять вызовы и «подслушивать» HTTP-запросы.
🛠️ Быстрая точка входа для API-запросов.
➖ Ограничения:
🔎 Меньше встроенной архитектуры для масштабных интеграций.
📉 При расширении проекта могут понадобиться дополнительные решения.
📦 SDK стороннего сервиса
Готовое решение-обёртка над API, предоставляемое сервисом.
➕ Сильные стороны:
⚡ Высокая скорость реализации: всё почти готово.
👍 Возможно хорошая поддержка и обновления.
➖ Ограничения:
🧨 Зависимость от качества SDK: риск, если поддержка слабая.
🧩 Немного пространства для кастомизации — архитектура может требовать другого подхода.
🤔 Может быть «чёрным ящиком», который сложнее отлаживать.
📌 Итого: какой вариант выбрать?
🟢 Интеграция простая — один-два запроса, без сложной логики: выбирайте Laravel HTTP Client или Guzzle.
🟢 Интеграции растут, логика становится сложной, нужны тесты, кеширование, пагинация — тогда Saloon даст структуру и безопасность.
🟢 Сервис предоставляет качественный SDK — разумно им воспользоваться, но оборачивайте его за интерфейсом, чтобы не оказаться заложником.
🔴 И никогда не стоит делать всё через raw cURL без обёртки: код быстро превращается в хаос, тестирование становится трудоёмким.
Библиотека пхпшника
#элементарный_выбор
🧩 Saloon
«Фреймворк» для построения API-интеграций и SDK внутри PHP / Laravel-приложений.
➕ Сильные стороны:
✨ Структура: выделенные классы Connector и Request позволяют логично организовать код.
🚀 Богатый набор функций: кеширование, пагинация, повторы запросов, тест-фикстуры.
📚 Отлично подходит, если интеграций много и они развиваются — нужен читаемый, расширяемый слой.
➖ Ограничения:
⚙️ Дополнительный уровень абстракции: может быть избыточен для простых случаев.
🧠 Требует привыкания к концепциям Connector/Request.
📦 Новая зависимость — нужно следить за обновлениями и совместимостью.
🧱 Guzzle
Классическая библиотека-HTTP-клиент PHP.
➕ Сильные стороны:
🔧 Очень гибкая: прямой контроль над HTTP-запросами, поддержка асинхронности.
🧮 Минимум обёрток: чистый доступ к HTTP-уровню.
➖ Ограничения:
🧩 Не столь читаема при большом количестве интеграций — код становится «сырой».
🧪 Нет встроенной структуры для интеграций и тестирования сверху — требует дисциплины.
🎯 Laravel HTTP Client (Facade)
Обёртка над Guzzle от Laravel, ориентированная на удобство.
➕ Сильные стороны:
✅ Очень прост в использовании: читаемый код, удобные методы.
🧪 Отличные инструменты для тестов: легко подменять вызовы и «подслушивать» HTTP-запросы.
🛠️ Быстрая точка входа для API-запросов.
➖ Ограничения:
🔎 Меньше встроенной архитектуры для масштабных интеграций.
📉 При расширении проекта могут понадобиться дополнительные решения.
📦 SDK стороннего сервиса
Готовое решение-обёртка над API, предоставляемое сервисом.
➕ Сильные стороны:
⚡ Высокая скорость реализации: всё почти готово.
👍 Возможно хорошая поддержка и обновления.
➖ Ограничения:
🧨 Зависимость от качества SDK: риск, если поддержка слабая.
🧩 Немного пространства для кастомизации — архитектура может требовать другого подхода.
🤔 Может быть «чёрным ящиком», который сложнее отлаживать.
📌 Итого: какой вариант выбрать?
🟢 Интеграция простая — один-два запроса, без сложной логики: выбирайте Laravel HTTP Client или Guzzle.
🟢 Интеграции растут, логика становится сложной, нужны тесты, кеширование, пагинация — тогда Saloon даст структуру и безопасность.
🟢 Сервис предоставляет качественный SDK — разумно им воспользоваться, но оборачивайте его за интерфейсом, чтобы не оказаться заложником.
🔴 И никогда не стоит делать всё через raw cURL без обёртки: код быстро превращается в хаос, тестирование становится трудоёмким.
Библиотека пхпшника
#элементарный_выбор
👍3😁1
🚀 Сегодня разбираем библиотеку Claude‑PHP‑SDK — универсальный PHP SDK для работы с API Anthropic (модель Claude) с полной реализацией функционала официального Python-SDK.
🧱 Что это такое
Поддерживает полный 1-к-1 функционал официальной Python-библиотеки: работа с «Messages», «Files», «Batches», «Models».
Код соответствует стандартам PSR-12 + использует PSR-11 (внедрение зависимостей) — значит, хорошо ложится в современные PHP-фреймворки.
Фреймворк-независим: можно использовать в Laravel, Symfony, Slim и других.
✅ Что умеет
Поддержка моделей: Claude Sonnet 4.5, Haiku 4.5, Opus 4.1.
Расширенные функции: vision (анализ изображений), стриминг, batch-обработка, embeddings, tool-use (инструменты) и «extended thinking».
Асинхронная готовность с поддержкой Amphp.
Большое количество примеров: более 80 файлов, >11 000 строк покрывают документацию Claude-API.
⚠️ На что обратить внимание
🔸 Установка:
🔸 Взаимодействие с бета-функциями: есть раздел, как работать с бетами (например,
🔸 Необходимо настроить корректно: ключ API, таймауты, повторные попытки — всё описано в README.
🔸 Библиотека выглядит стабильной, но как и с любым SDK для LLM/AI-API — важно тестировать на продакшене с учётом лимитов, ошибок сети и стоимости токенов.
🔗 Github
🐸 Библиотека пхпшника
#инструменты
🧱 Что это такое
Поддерживает полный 1-к-1 функционал официальной Python-библиотеки: работа с «Messages», «Files», «Batches», «Models».
Код соответствует стандартам PSR-12 + использует PSR-11 (внедрение зависимостей) — значит, хорошо ложится в современные PHP-фреймворки.
Фреймворк-независим: можно использовать в Laravel, Symfony, Slim и других.
✅ Что умеет
Поддержка моделей: Claude Sonnet 4.5, Haiku 4.5, Opus 4.1.
Расширенные функции: vision (анализ изображений), стриминг, batch-обработка, embeddings, tool-use (инструменты) и «extended thinking».
Асинхронная готовность с поддержкой Amphp.
Большое количество примеров: более 80 файлов, >11 000 строк покрывают документацию Claude-API.
⚠️ На что обратить внимание
🔸 Установка:
composer require claude-php/claude-php-sdk.🔸 Взаимодействие с бета-функциями: есть раздел, как работать с бетами (например,
output_format, beta() namespace) — важно при использовании новых возможностей.🔸 Необходимо настроить корректно: ключ API, таймауты, повторные попытки — всё описано в README.
🔸 Библиотека выглядит стабильной, но как и с любым SDK для LLM/AI-API — важно тестировать на продакшене с учётом лимитов, ошибок сети и стоимости токенов.
#инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
How to: настроить PHP max_execution_time для предотвращения таймаутов
Если PHP-скрипт работает дольше установленного лимита, сервер прерывает выполнение и выдаёт ошибку. За этот таймер отвечает параметр max_execution_time — по умолчанию 30 секунд.
Лимит стоит увеличивать, если вы:
— импортируете большие данные
— обрабатываете изображения или видео
— запускаете тяжёлые cron-задачи
— делаете резервные копии
Самый простой способ изменить значение — через ServerAvatar:
Откройте Dashboard сервера
Перейдите в нужное приложение
Откройте PHP Settings
Измените max_execution_time и сохраните настройки
Изменения применяются сразу — без SSH и ручной правки
👉 Полная инструкция
Библиотека пхпшника
Если PHP-скрипт работает дольше установленного лимита, сервер прерывает выполнение и выдаёт ошибку. За этот таймер отвечает параметр max_execution_time — по умолчанию 30 секунд.
Лимит стоит увеличивать, если вы:
— импортируете большие данные
— обрабатываете изображения или видео
— запускаете тяжёлые cron-задачи
— делаете резервные копии
Самый простой способ изменить значение — через ServerAvatar:
Откройте Dashboard сервера
Перейдите в нужное приложение
Откройте PHP Settings
Измените max_execution_time и сохраните настройки
Изменения применяются сразу — без SSH и ручной правки
php.ini.👉 Полная инструкция
Библиотека пхпшника
😁9❤1
⌨️ Топ-вакансий по PHP за неделю
Senior PHP Developer — до 5 500 €, Удалёнка (Москва)
Backend-разработчик (PHP) — от 200 000 ₽, Удаленка (Москва)
Full-stack PHP Laravel developer / Web-программист — от 200 000 ₽, Удалёнка (Москва)
PHP разработчик Middle / Senior — Удалёнка (Москва)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Senior PHP Developer — до 5 500 €, Удалёнка (Москва)
Backend-разработчик (PHP) — от 200 000 ₽, Удаленка (Москва)
Full-stack PHP Laravel developer / Web-программист — от 200 000 ₽, Удалёнка (Москва)
PHP разработчик Middle / Senior — Удалёнка (Москва)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
PHP и нейросети? Почему бы и нет!
Мир меняется. Сегодня бэкендер, который может внедрить рекомендательную систему или простой ML-сервис, — на вес золота. Не ограничивайте себя CRUD-задачами.
Завтра запускаем курс
«Математика для разработки AI-моделей».
Всего за 28 200 ₽ вы получите ключи к пониманию того, как работает AI.
Сделайте апгрейд карьеры:
👉 Записаться
Бонус: Пройди тест и удивись
Мир меняется. Сегодня бэкендер, который может внедрить рекомендательную систему или простой ML-сервис, — на вес золота. Не ограничивайте себя CRUD-задачами.
Завтра запускаем курс
«Математика для разработки AI-моделей».
Всего за 28 200 ₽ вы получите ключи к пониманию того, как работает AI.
Сделайте апгрейд карьеры:
👉 Записаться
Бонус: Пройди тест и удивись
🥱6❤1
Сбор и отправка APM-трейсов из разных сервисов
В больших продуктах архитектура редко бывает однородной. У Sports.ru за 25+ лет под капотом оказались десятки Go-микросервисов рядом с крупными Perl- и PHP-монолитами. Всё это нужно мониторить, искать узкие места, собирать метрики — и делать это стабильно.
Официальных APM-агентов хватает не для всех языков, а существующие для PHP/Perl оказались слишком ограниченными. Поэтому команда решила построить собственный APM-прокси — единый сервис для сбора, буферизации и отправки трейсов.
Разбираем, зачем он понадобился и как устроен.
🧩 Проблема: разные агенты → разные ограничения
Elastic APM даёт мощный трейсинг, но:
Go-агент умеет батчить события в фоне — очередь, буфер, воркеры.
PHP-агент живёт только в рамках запроса. Один запрос = одна отправка → тысячи мелких HTTP-пакетов → нагрузка на APM-сервер.
Perl-агента нет вообще — монолит остаётся слепым.
В PHP и Perl невозможно получить внутренние метрики агента: переполнение очередей, потерянные события, время отправки.
Поддерживать кастомные агенты под каждый язык стало дорого и непрозрачно. Требовался единый, прогнозируемый механизм.
🚀 Решение: APM-прокси как универсальная точка сбора
Команда спроектировала отдельный сервис apm-sender на Go:
принимает NDJSON-пейлоады от любых клиентов (монолиты/микросервисы);
валидирует и складывает их в канал;
отвечает клиенту сразу — без ожидания обработки;
в фоне батчит и отправляет данные в APM-сервер.
Это дало главное: клиентские сервисы больше не занимаются отправкой, очередями и оптимизацией трафика — логика вынесена в один компонент.
⚙️ Что внутри: каналы, воркеры и Circuit Breaker
1) Два уровня воркеров
Первый канал всегда доступен для записи — нагрузка клиентов не блокируется.
Второй канал — накопитель, откуда воркеры отправляют данные в APM.
2) Circuit Breaker
Когда APM-сервер начинает тормозить или отвечает ошибками:
отправка автоматически блокируется на несколько секунд;
сообщения копятся в буфере;
сервер «прощупывается» периодически;
когда он оклемался — отправка возобновляется.
Так прокси не штурмует APM-сервер лишними запросами и не теряет трейсы.
📊 Метрики и контроль
APM-прокси собирает то, чего не умели агенты Perl/PHP:
🔸 размер буфера;
🔸 время блокировок;
🔸 объём входящего/исходящего трафика;
🔸 статистику ошибок APM-сервера;
🔸 нагрузку в разрезе клиентов.
Это позволило:
найти клиентов, отправлявших гигантские payload’ы с лишними спанами;
оптимально настроить воркеры и размеры буферов;
корректно сконфигурировать сам APM-сервер.
🏁 Результат
После переключения монолитов и сервисов на APM-прокси:
отправка трейсов стала стабильной и управляемой;
нагрузка на APM-сервер снизилась и стала прогнозируемой;
исчезла необходимость поддерживать разрозненные агенты;
появилось единое место для анализа, расширения и оптимизации трейсинга;
команда получила прозрачность потоков и быстро нашла проблемы, которые раньше были невидимы.
🔗 Хабр
Библиотека пхпшника
В больших продуктах архитектура редко бывает однородной. У Sports.ru за 25+ лет под капотом оказались десятки Go-микросервисов рядом с крупными Perl- и PHP-монолитами. Всё это нужно мониторить, искать узкие места, собирать метрики — и делать это стабильно.
Официальных APM-агентов хватает не для всех языков, а существующие для PHP/Perl оказались слишком ограниченными. Поэтому команда решила построить собственный APM-прокси — единый сервис для сбора, буферизации и отправки трейсов.
Разбираем, зачем он понадобился и как устроен.
🧩 Проблема: разные агенты → разные ограничения
Elastic APM даёт мощный трейсинг, но:
Go-агент умеет батчить события в фоне — очередь, буфер, воркеры.
PHP-агент живёт только в рамках запроса. Один запрос = одна отправка → тысячи мелких HTTP-пакетов → нагрузка на APM-сервер.
Perl-агента нет вообще — монолит остаётся слепым.
В PHP и Perl невозможно получить внутренние метрики агента: переполнение очередей, потерянные события, время отправки.
Поддерживать кастомные агенты под каждый язык стало дорого и непрозрачно. Требовался единый, прогнозируемый механизм.
🚀 Решение: APM-прокси как универсальная точка сбора
Команда спроектировала отдельный сервис apm-sender на Go:
принимает NDJSON-пейлоады от любых клиентов (монолиты/микросервисы);
валидирует и складывает их в канал;
отвечает клиенту сразу — без ожидания обработки;
в фоне батчит и отправляет данные в APM-сервер.
Это дало главное: клиентские сервисы больше не занимаются отправкой, очередями и оптимизацией трафика — логика вынесена в один компонент.
⚙️ Что внутри: каналы, воркеры и Circuit Breaker
1) Два уровня воркеров
Первый канал всегда доступен для записи — нагрузка клиентов не блокируется.
Второй канал — накопитель, откуда воркеры отправляют данные в APM.
2) Circuit Breaker
Когда APM-сервер начинает тормозить или отвечает ошибками:
отправка автоматически блокируется на несколько секунд;
сообщения копятся в буфере;
сервер «прощупывается» периодически;
когда он оклемался — отправка возобновляется.
Так прокси не штурмует APM-сервер лишними запросами и не теряет трейсы.
📊 Метрики и контроль
APM-прокси собирает то, чего не умели агенты Perl/PHP:
🔸 размер буфера;
🔸 время блокировок;
🔸 объём входящего/исходящего трафика;
🔸 статистику ошибок APM-сервера;
🔸 нагрузку в разрезе клиентов.
Это позволило:
найти клиентов, отправлявших гигантские payload’ы с лишними спанами;
оптимально настроить воркеры и размеры буферов;
корректно сконфигурировать сам APM-сервер.
🏁 Результат
После переключения монолитов и сервисов на APM-прокси:
отправка трейсов стала стабильной и управляемой;
нагрузка на APM-сервер снизилась и стала прогнозируемой;
исчезла необходимость поддерживать разрозненные агенты;
появилось единое место для анализа, расширения и оптимизации трейсинга;
команда получила прозрачность потоков и быстро нашла проблемы, которые раньше были невидимы.
🔗 Хабр
Библиотека пхпшника
❤1
🧠 Лайфхак: кешируйте config и routes в Laravel для максимальной скорости
⚙️ Что даёт кеширование
🔄 При кешировании конфигурации — все файлы из
🚀 При кешировании маршрутов — все определения роутов компилируются в один файл. При запросе Laravel сразу загружает этот кеш, вместо повторного парсинга маршрутов.
Это значительно снижает накладные расходы на загрузку конфигураций и роутов, ускоряя старт приложения и уменьшая время обработки запросов.
🧰 Как включить кеш
Если вы внесли изменения в конфиги или роуты — перед новым запуском надо очистить и пересоздать кеш:
И потом снова:
✅ Когда это разумно использовать
- ✅ В production или staging-средах, когда структура проекта стабильна, конфиги и маршруты уже настроены.
- ✅ В проектах с большим количеством конфигураций и маршрутов — там выигрыш по скорости особенно заметен.
⚠️ На что нужно обратить внимание
- ❗ Если вы используете closure-роуты (анонимные функции) — кеш маршрутов не будет работать корректно. Для кеша маршрутов нужно, чтобы все роуты были описаны через контроллеры.
- ❗ После изменений в конфигурациях или .env — не забудьте пересоздать кеш: иначе Laravel может продолжить использовать старые значения.
- ⚙️ В рабочем (dev) окружении: кеш может мешать быстрому тестированию изменений, поэтому часто кеш отключают на время разработки.
🔄 Как включить кеширование в процесс деплоя / CI/CD
- Добавьте команды
- После деплоя — проверьте, что кеш актуален, особенно если были изменения конфигов или роутов
Библиотека пхпшника
⚙️ Что даёт кеширование
🔄 При кешировании конфигурации — все файлы из
config/ (и .env) объединяются в один — Laravel не читает и не парсит множество отдельных файлов при каждом запросе. 🚀 При кешировании маршрутов — все определения роутов компилируются в один файл. При запросе Laravel сразу загружает этот кеш, вместо повторного парсинга маршрутов.
Это значительно снижает накладные расходы на загрузку конфигураций и роутов, ускоряя старт приложения и уменьшая время обработки запросов.
🧰 Как включить кеш
php artisan config:cache #кеширует конфигурацию
php artisan route:cache #кеширует маршруты
Если вы внесли изменения в конфиги или роуты — перед новым запуском надо очистить и пересоздать кеш:
php artisan config:clear
php artisan route:clear
И потом снова:
php artisan config:cache
php artisan route:cache
✅ Когда это разумно использовать
- ✅ В production или staging-средах, когда структура проекта стабильна, конфиги и маршруты уже настроены.
- ✅ В проектах с большим количеством конфигураций и маршрутов — там выигрыш по скорости особенно заметен.
⚠️ На что нужно обратить внимание
- ❗ Если вы используете closure-роуты (анонимные функции) — кеш маршрутов не будет работать корректно. Для кеша маршрутов нужно, чтобы все роуты были описаны через контроллеры.
- ❗ После изменений в конфигурациях или .env — не забудьте пересоздать кеш: иначе Laravel может продолжить использовать старые значения.
- ⚙️ В рабочем (dev) окружении: кеш может мешать быстрому тестированию изменений, поэтому часто кеш отключают на время разработки.
🔄 Как включить кеширование в процесс деплоя / CI/CD
- Добавьте команды
config:cache и route:cache в скрипт деплоя — при выкладке на production они будут выполняться автоматически.- После деплоя — проверьте, что кеш актуален, особенно если были изменения конфигов или роутов
Библиотека пхпшника
❤5👍3
🤖 ChatGPT выключен, а работа идёт как обычно
В мире разработки всё чаще говорят про AI, который помогает писать код быстрее и качественнее. Однако, встречаются примеры, когда выключение Copilot не приводит к заметным потерям в работе.
Возможно, скиллы и понимание задач дают больше, чем автодополнение от AI.
💬 Как думаете не отвлекают ли эти ИИ? Или всё-таки с ними куда лучше?
🔸 AI-агенты для DS-специалистов
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib
🐸 Библиотека пхпшника
В мире разработки всё чаще говорят про AI, который помогает писать код быстрее и качественнее. Однако, встречаются примеры, когда выключение Copilot не приводит к заметным потерям в работе.
Возможно, скиллы и понимание задач дают больше, чем автодополнение от AI.
🔸 AI-агенты для DS-специалистов
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
💬Знаете ли вы, что вы можете использовать
Библиотека пхпшника
#vardump
scan в Laravel для разбора строки, введенной в коллекцию, в соответствии с форматом, поддерживаемым встроенной функцией PHP sscanf? 🚀Библиотека пхпшника
#vardump
PHP жив, а твоя карьера?
Шутка. PHP будет жить вечно. Но расширять кругозор полезно всегда. Математика и ML — это то, что отличает инженера от кодера.
Залетай на наш курс с живыми вебинарами. Мы объясняем сложные вещи просто.
Что будет:
— Матрицы и векторы (это как массивы, только с суперсилой);
— Линейная регрессия (научимся предсказывать данные);
— SVD-разложение (сделаем свою рекомендалку).
Практика на Python, но математика везде одинаковая.
Успевай до 9 декабря:
👉 https://clc.to/LojFzw
Шутка. PHP будет жить вечно. Но расширять кругозор полезно всегда. Математика и ML — это то, что отличает инженера от кодера.
Залетай на наш курс с живыми вебинарами. Мы объясняем сложные вещи просто.
Что будет:
— Матрицы и векторы (это как массивы, только с суперсилой);
— Линейная регрессия (научимся предсказывать данные);
— SVD-разложение (сделаем свою рекомендалку).
Практика на Python, но математика везде одинаковая.
Успевай до 9 декабря:
👉 https://clc.to/LojFzw
🥱5👍1
💬 Ежемесячная ветка PHP-разработчиков — декабрьское обновление
Продолжаем традицию — открываем новую декабрьскую ветку 👇
Что можно приносить сюда сейчас:
🧩 свежие фрагменты кода, которые вызывают вопросы или гордость
🔍 кейсы из продакшена: узкие места, memory leaks, странности с очередями
🛠️ pet-projects, библиотеки, пакеты: покажите, что сделали за месяц
🧠 вопросы по DDD, микросервисам, тестированию, CI/CD
⚙️ опыт миграции на PHP 8.3/8.4, проблемы совместимости, нюансы производительности
Вы можете прийти с сырым прототипом или сложной продакшен-архитектурой — здесь всегда найдётся человек, который подскажет, куда копать.
Пусть эта ветка остаётся местом для профессионального диалога, где ценят практику, инженерное мышление и точные решения ❤️
👇 Делитесь вашими обновлениями, задачами и победами за последний месяц!
Библиотека пхпшника
Продолжаем традицию — открываем новую декабрьскую ветку 👇
Что можно приносить сюда сейчас:
🧩 свежие фрагменты кода, которые вызывают вопросы или гордость
🔍 кейсы из продакшена: узкие места, memory leaks, странности с очередями
🛠️ pet-projects, библиотеки, пакеты: покажите, что сделали за месяц
🧠 вопросы по DDD, микросервисам, тестированию, CI/CD
⚙️ опыт миграции на PHP 8.3/8.4, проблемы совместимости, нюансы производительности
Вы можете прийти с сырым прототипом или сложной продакшен-архитектурой — здесь всегда найдётся человек, который подскажет, куда копать.
Пусть эта ветка остаётся местом для профессионального диалога, где ценят практику, инженерное мышление и точные решения ❤️
👇 Делитесь вашими обновлениями, задачами и победами за последний месяц!
Библиотека пхпшника