Библиотека пхпшника | 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
🧵 PHP Fibers вместо ада сериализации

В Manychat жили на curl_multi_exec для псевдоконкурентных запросов. Работало, пока AI-фичи не размножились. Каждый внешний вызов означал: сериализуй состояние бизнес-логики, отдай в очередь, дождись, десериализуй, восстанови контекст. Ревью кода превращались в квест — логика рвалась на куски вокруг async-границ.

Добил их апгрейд Ubuntu: OpenSSL 3.0 со своими мьютексами на обходе хранилища сертификатов выкатил +10% к CPU на ровном месте. Виноваты синхронные вызовы Meta API, т.к. каждый payload открывал новый TCP.

Решение — затащить Fibers поверх существующего event loop на Guzzle. Файбер приостанавливается на внешнем HTTP, воркер берёт следующий payload, при готовности ответа возобновляет нужный файбер с того же места:
$fiber = new Fiber(function() {
echo "Suspending\n";
$last = Fiber::suspend(16);
echo "Resuming with {$last}\n";
});

$last = $fiber->start(); // 16
$fiber->resume(42); // 42


🚀 Что получили

Переиспользование одного HTTP/2 соединения на воркер (прощай, рукопожатия);
Асинхронный sleep вместо блокировки всего процесса при ретраях;
Линейный код без знания разработчиком про файбер под капотом.

💣 Расплата → радиус поражения. Раньше фатал клал воркер с одним payload. Теперь в полёте висят пятеро файберов, и OOM убивает всех. Catchable-ошибки переписали так, чтобы валить только свой файбер.

Если бы начинали с нуля, взяли бы Revolt или AMPHP. Но кастомный луп уже был, Fibers легли сверху.

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

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2🔥1
🎥 До открытого урока — несколько дней. Подготовили небольшую подборку материалов от нашего спикера Дмитрия Юдина.

Дмитрий руководит AI/ML-направлением в Сloud․ru и развивает Evolution AI Factory — среду для работы с GenAI: от инфраструктуры обучения LLM до внедрения интеллектуальных агентов.

С чего начать:

📺 AI-инструменты для разработчиков — как код, автотесты и ассистенты меняют рутину инженера.
📺 AI-эволюция бизнеса в эпоху генеративных моделей — агентные системы в реальных продуктах.
📺 Разработка мертва? — дискуссия о будущем профессии и роли AI в ней.
📖 Применение LLM в бизнесе — статья Дмитрия о практике внедрения и роли облака.

Одна из ключевых тем Дмитрия — практическое применение агентных систем и их ограничения.

Именно об этом бесплатный урок 18 июня в 19:00: «Мультиагентные системы: почему большинство архитектур переусложнены» 🔥

🎁 Для участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».

👉 Успей занять место на открытом уроке
🔍 Работа с awk

Логи сервера в plain text, нужно быстро подсчитать количество запросов по HTTP-статусам? awk — ваш Swiss Army Knife для обработки текстовых данных прямо в терминале.

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

— Мгновенная агрегация данных из логов без загрузки в БД или Python.
— Работает с любым текстовым форматом.
— Есть на каждом сервере.

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

— Подсчёт по статусам (nginx access.log): awk '{print $9}' access.log | sort | uniq -c | sort -rn
— Среднее время ответа: awk '{sum+=$NF; n++} END {print sum/n}' access.log
— Только 5xx ошибки: awk '$9 ~ /^5/' access.log
— Топ-10 IP по количеству запросов: awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
— Вывести конкретные поля: awk -F',' '{print $1, $3}' data.csv
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥1
⚔️ final по умолчанию

Это дисциплина или недоверие к коллегам, зашитое в код?

final + readonly + strict_types + PHPStan lvl 9 + arch()->preset()->strict(), который роняет CI за один пропущенный final.

Аргументы за: composition over inheritance, никаких fragile base class, инварианты под защитой.

Цена: мок в тесте — упёрся в final. Подправить вендорский класс — форк пакета. readonly DTO — пока не понадобился with().

Граница не в «строго/нестрого», а в дефолте: final по умолчанию с осознанными исключениями, или открыто, а final только на классах с инвариантами?

Где у вас проходит эта линия? 👇

— final/readonly на всё
— дайте просто писать код

Пишите мнение в комментах🍿
😁2🤔2👍1
Сохраняйте шпаргалку по Kubernetes
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1🔥1
Какой фасад используется для работы с кешем?
Anonymous Quiz
7%
Store
87%
Cache
2%
Remember
4%
Vault
😁13🥱101👍1
Уже сегодня в 19:00 (МСК) стартует открытый урок!

Тема:

«Мультиагентные системы: почему большинство архитектур переусложнены»


🔥 За 90 минут разберёмся, когда действительно стоит строить мультиагентную систему, а когда она только добавляет сложность, расходы и новые точки отказа.

Поговорим о критериях выбора архитектуры, типичных ошибках и ограничениях современных ИИ-агентов, которые важно учитывать ещё до внедрения в продукт.

🎙️ Спикер — Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru.

🎁 Для всех участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».

👉 Успей присоединиться к уроку
⌨️ Топ-вакансий по PHP за неделю

Middle/Senior PHP-разработчик (Laravel + высоконагруженные системы) — от 200 000 до 350 000 ₽ — офис (Москва)

Team Lead PHP/Go — 3 000 —‍ 4 000 € — удалёнка

Senior PHP Developer — от 4 000 € — удалёнка

➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1🔥1
🤖 Используешь AI для написания кода? В Яндексе покажут, как применять AI для реальных задач разработки.

23 июня в 19:00 совместно с Яндексом проведём открытый урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».

Спикер — Ольга Лукьянова, руководитель команды поиска и навигации по коду в SourceCraft. Более 18 лет развивала инструменты для разработчиков в JetBrains и руководила разработкой IDE в Huawei.

Что получишь на уроке:

— поймёшь, как использовать AI-ассистентов и облачных агентов в работе;
— научишься быстрее разбираться в новых проектах и кодовой базе;
— узнаешь, какие задачи стоит отдавать AI и как получать качественный результат;
— увидишь полный workflow работы с AI: от постановки задачи до код-ревью.

На уроке — живой разбор реального проекта с кодом. Ольга покажет промпты из рабочих сценариев и ответит на ваши вопросы в Q&A.

⚠️ Количество мест ограничено

🗓️ Когда: 23 июня, 19:00 (МСК)

👉 Занять место на открытом уроке
🐘 Работа с PostgreSQL

Таблица разрослась до десятков гигабайт, но данных в ней на пару гигов после массовых DELETE? VACUUM FULL перепишет таблицу и вернёт место на диск. Но есть нюансы.

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

— PostgreSQL при DELETE не освобождает место на диске, а помечает строки как мёртвые.
— Обычный VACUUM чистит мёртвые строки для переиспользования, но файл не уменьшает.
— VACUUM FULL физически переписывает таблицу, реально освобождает место.

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


— Проверить «раздутие»: SELECT pg_size_pretty(pg_total_relation_size('my_table'));
— Мёртвые строки: SELECT n_dead_tup, n_live_tup FROM pg_stat_user_tables WHERE relname = 'my_table';
— Обычный VACUUM: VACUUM VERBOSE my_table; (не блокирует таблицу)
— Полная перезапись: VACUUM FULL my_table; (⚠️ блокирует таблицу полностью!)
— Обновить статистику: ANALYZE my_table;

💡 VACUUM FULL берёт эксклюзивный лок — таблица полностью недоступна. На проде используйте pg_repack, он делает то же самое, но без блокировки. Ставится как расширение: CREATE EXTENSION pg_repack;

🐸 Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2😁1