⌨️ Топ-вакансий по PHP за неделю
Backend разработчик (Middle/Senior) — от 180 000 до 290 000 ₽, Удалёнка (Москва)
PHP разработчик — 150 000 — 300 000₽, Офис (Казань)
PHP-разработчик — от 270 000 ₽, Офис (Новосибирск)
Senior PHP Developer (Symfony) — Удалёнка (Санкт-Петербург)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Backend разработчик (Middle/Senior) — от 180 000 до 290 000 ₽, Удалёнка (Москва)
PHP разработчик — 150 000 — 300 000₽, Офис (Казань)
PHP-разработчик — от 270 000 ₽, Офис (Новосибирск)
Senior PHP Developer (Symfony) — Удалёнка (Санкт-Петербург)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
🌚1
💻 ВАЖНО: макбук ещё не забрали!
Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).
Что нужно для участия?
— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (можно за два дня ).
— Пишешь куратору #розыгрыш. Всё — ты в игре!
Что за курсы?
▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.
▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.
▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.
👉 Влетай, не думай!
Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).
Что нужно для участия?
— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (
— Пишешь куратору #розыгрыш. Всё — ты в игре!
Что за курсы?
▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.
▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.
▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.
👉 Влетай, не думай!
🌚2
«Как я добавил систему рекомендаций контента в легаси-проект на PHP 7.2»
Проект на легаси PHP, обновить времени нет, а бизнес требует «сделайте поиск как у ChatGPT». Знакомо?
Так вот — автор статьи столкнулся именно с этим. Нужно было внедрить векторный поиск и рекомендательную систему, но проект жил на старом PHP 7.2, где современных клиентов под Qdrant просто нет.
💡 Решение? Написать свой клиент под старую версию.
И теперь даже на PHP 7.2 можно:
— реализовать умный поиск по смыслу, а не по словам;
— строить рекомендации для товаров и статей;
— искать дубликаты и похожий контент;
— автоматически категоризировать тексты;
— сделать полноценный RAG-модуль поддержки.
📚 В основе — простая идея:
текст → вектор → поиск ближайших векторов в Qdrant.
Никакой магии, просто математика.
👉 Автор выложил готовую библиотеку и минимальный пример работы — прямо в статье.
🤖 А вы когда-нибудь внедряли AI-фичи в легаси-проекты? Расскажите в комментариях
Проект на легаси PHP, обновить времени нет, а бизнес требует «сделайте поиск как у ChatGPT». Знакомо?
Так вот — автор статьи столкнулся именно с этим. Нужно было внедрить векторный поиск и рекомендательную систему, но проект жил на старом PHP 7.2, где современных клиентов под Qdrant просто нет.
💡 Решение? Написать свой клиент под старую версию.
И теперь даже на PHP 7.2 можно:
— реализовать умный поиск по смыслу, а не по словам;
— строить рекомендации для товаров и статей;
— искать дубликаты и похожий контент;
— автоматически категоризировать тексты;
— сделать полноценный RAG-модуль поддержки.
📚 В основе — простая идея:
текст → вектор → поиск ближайших векторов в Qdrant.
Никакой магии, просто математика.
👉 Автор выложил готовую библиотеку и минимальный пример работы — прямо в статье.
🤖 А вы когда-нибудь внедряли AI-фичи в легаси-проекты? Расскажите в комментариях
👍5👏1😁1
Forwarded from Библиотека задач по PHP | тесты, код, задания
💻 Хочешь MacBook Pro? Просто начни учиться!
Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!
Всё просто:
— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня );
— напиши куратору в чате курса хэштег #розыгрыш.
📚 Выбирай свой курс:
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
👉 Участвовать в розыгрыше
Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!
Всё просто:
— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (
— напиши куратору в чате курса хэштег #розыгрыш.
📚 Выбирай свой курс:
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
👉 Участвовать в розыгрыше
🌚1
🧩 Расширенные паттерны для Symfony HttpClient: потоковая передача, ретраи и отказоустойчивость
Если вы хоть раз писали
Для простых случаев этого хватает.
Но реальность другая:
– 100 API-эндпоинтов нужно получить за секунды, а не минуты
– JSON на 500 МБ не должен взорвать память
– API периодически “флапает”, а приложение должно выжить
– токен OAuth2 живёт 60 минут — и должен обновляться сам
💡 И тут выясняется, что
⚡️ 1. Конкурентные запросы через stream()
Обычный
10 запросов × 300 мс = 3 сек.
С
👉 10 запросов за ~300 мс вместо 3 секунд.
🧠 2. Потоковый парсинг JSON (новинка Symfony 7.3)
🧱 3. Надёжность: Retry + Circuit Breaker
А если API “упало” — кастомный
🔐 4. Автоматический OAuth2
Больше никаких ручных проверок
🧪 5. Тестирование без сети
Тесты становятся детерминированными и быстрыми.
🔗 Ссылка на статью
🐸 Библиотека пхпшника
Если вы хоть раз писали
$client->request('GET', ...) и $response->toArray(), значит, уже пользовались symfony/http-client.Для простых случаев этого хватает.
Но реальность другая:
– 100 API-эндпоинтов нужно получить за секунды, а не минуты
– JSON на 500 МБ не должен взорвать память
– API периодически “флапает”, а приложение должно выжить
– токен OAuth2 живёт 60 минут — и должен обновляться сам
💡 И тут выясняется, что
HttpClient — не просто обёртка над curl, а мощный инструмент для сложных систем.⚡️ 1. Конкурентные запросы через stream()
Обычный
foreach делает запросы последовательно:10 запросов × 300 мс = 3 сек.
С
stream() всё иначе — запросы идут параллельно, и общее время ≈ самому медленному из них.foreach ($productIds as $id) {
$responses[$id] = $client->request('GET', "products/$id");
}
foreach ($client->stream($responses) as $r => $chunk) {
if ($chunk->isLast()) $prices[] = $r->toArray()['price'];
}👉 10 запросов за ~300 мс вместо 3 секунд.
🧠 2. Потоковый парсинг JSON (новинка Symfony 7.3)
symfony/json-streamer позволяет читать огромные JSON-файлы без загрузки их целиком в память.composer require symfony/json-streamer
foreach ($streamReader->read($response, Type::list(Type::object(ProductDto::class))) as $product) {
// обработка 2 млн объектов без OutOfMemory
}🧱 3. Надёжность: Retry + Circuit Breaker
RetryableHttpClient сам повторит запросы при 503/504.А если API “упало” — кастомный
CircuitBreakerClient отключает обращения на 60 секунд, чтобы не “молотить мёртвый сервис”.🔐 4. Автоматический OAuth2
AccessTokenHttpClient берёт токен из кэша и обновляет его по необходимости.Больше никаких ручных проверок
if ($token->isExpired()).🧪 5. Тестирование без сети
MockHttpClient с генератором позволяет точно проверить последовательность и данные запросов.Тесты становятся детерминированными и быстрыми.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2
symfony/polyfill-intl-idn
Что это
Это полифил от Symfony Polyfill, который добавляет поддержку функций
На Packagist: пакет устанавливается как
Зачем нужен
🔸 Если ваша система работает без расширения ext-intl (или с урезанной его поддержкой), библиотека гарантирует, что вы всё равно сможете использовать функции преобразования международных доменов (IDN).
🔸 Обеспечивает кросс-версийную совместимость — особенно полезно, если код должен работать в разных окружениях, где могут быть разные версии PHP и разные расширения.
Основная функциональность
Обеспечивает функцию
Обеспечивает функцию
Установка
Можно просто добавить в проект через Composer:
Когда особенно полезна
🔹 В проектах, которые должны поддерживать работу на серверах с минимальными расширениями PHP.
🔹Когда нужно надёжно работать с доменами, содержащими не-ASCII символы (например, русские домены, домены на арабском, китайском и др.).
🔹 В библиотеках или пакетах, которые распространяются и должны работать на максимально широком диапазоне окружений.
👉 Github
Библиотека пхпшника
#инструменты
Что это
Это полифил от Symfony Polyfill, который добавляет поддержку функций
idn_to_ascii и idn_to_utf8 для версий PHP, где расширение ext‑intl может быть не установлено или не включено. На Packagist: пакет устанавливается как
symfony/polyfill-intl-idn. packagist.orgЗачем нужен
🔸 Если ваша система работает без расширения ext-intl (или с урезанной его поддержкой), библиотека гарантирует, что вы всё равно сможете использовать функции преобразования международных доменов (IDN).
🔸 Обеспечивает кросс-версийную совместимость — особенно полезно, если код должен работать в разных окружениях, где могут быть разные версии PHP и разные расширения.
Основная функциональность
Обеспечивает функцию
idn_to_ascii() — перевод домена в ASCII-представление (например, для международных доменов с нелатинскими символами). Обеспечивает функцию
idn_to_utf8() — обратный перевод из ASCII формы в UTF-8.Установка
Можно просто добавить в проект через Composer:
composer require symfony/polyfill-intl-idnКогда особенно полезна
🔹 В проектах, которые должны поддерживать работу на серверах с минимальными расширениями PHP.
🔹Когда нужно надёжно работать с доменами, содержащими не-ASCII символы (например, русские домены, домены на арабском, китайском и др.).
🔹 В библиотеках или пакетах, которые распространяются и должны работать на максимально широком диапазоне окружений.
👉 Github
Библиотека пхпшника
#инструменты
👍1
🛒 Black Friday от Proglib.academy!
Только до 30 ноября — скидка 40% на ВСЕ курсы.
Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.
🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.
👉 Учиться со скидкой
Только до 30 ноября — скидка 40% на ВСЕ курсы.
Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.
🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.
👉 Учиться со скидкой
🎲 How to: Генерировать случайные Enum-значения с Faker в PHP 8.1+
PHP 8.1 принес нативные Enum, а Faker — идеальный инструмент для генерации тестовых данных. Вместе они позволяют быстро и безопасно создавать реалистичные значения для сидов и фабрик.
В статье показано, как:
— определить Enum,
— установить и настроить Faker,
— сгенерировать случайные Enum-значения,
— использовать всё это в Laravel Factory.
Типобезопасно, просто и без хардкода. 🚀
🔗 Ссылка на статью
Библиотека пхпшника
PHP 8.1 принес нативные Enum, а Faker — идеальный инструмент для генерации тестовых данных. Вместе они позволяют быстро и безопасно создавать реалистичные значения для сидов и фабрик.
В статье показано, как:
— определить Enum,
— установить и настроить Faker,
— сгенерировать случайные Enum-значения,
— использовать всё это в Laravel Factory.
Типобезопасно, просто и без хардкода. 🚀
🔗 Ссылка на статью
Библиотека пхпшника
🚀 PHP-лайфхак: Оптимизируйте автозагрузку с Composer
Если вы хотите, чтобы ваш PHP-код загружался быстрее, особенно на продакшене, стоит обратить внимание на оптимизацию автозагрузки. Ниже — что это значит и как настроить.
🔍 Что такое оптимизация автозагрузки в Composer
По умолчанию Composer формирует автозагрузчик так, чтобы было удобно в разработке — он может на лету проверять файловую систему, искать файлы классов и т.д. Но это добавляет накладные расходы при каждом запросе.
Чтобы ускорить автозагрузку, Composer предлагает несколько уровней оптимизации:
Уровень 1 — Class map generation: вместо PSR-4/PSR-0 правил генерируется готовая карта классов (classmap), что позволяет автозагрузчику сразу «знать», где находится файл.
Уровень 2/A — Authoritative class maps: означает, что если класс не найден в classmap — дальнейшем поиску по файловой системе не доверяют. Это ещё быстрее, но требует, чтобы все классы были заранее включены в карту.
Уровень 2/B — APCu cache fallback: использует APCu-кеш для кеширования “класс найден / не найден”, ускоряя автозагрузку без полного отключения файловой системы.
⚙️ Как правильно настроить
Вот шаги, которые можно выполнить в вашем проекте:
1. В
Это включает optimisation level 1.
2. При установке/обновлении запустите Composer с флагом
Если вы на продакшене — лучше исключить пакеты для разработки (
3. Для ещё большей оптимизации (если вы уверены, что структура проекта окончательная и классов добавляться не будет “по-ходу”):
Это включает уровень 2/A.
4. Если доступен APCu, можно рассмотреть вариант 2/B:
Но тут нужно, чтобы APCu был установлен и настроен.
🧠 Когда это применять и на что обратить внимание
✅ На продакшене — оптимизация автозагрузки почти всегда повышение производительности, особенно в больших проектах.
⚠️ В разработке — будьте осторожны: если вы часто добавляете/удаляете/переименовываете классы, оптимизированный classmap может “не видеть” новые файлы до повторного
📂 Убедитесь, что все классы соответствуют PSR-4/PSR-0 и названы корректно — иначе могут быть проблемы при уровне 2 оптимизации.
🐸 Библиотека пхпшника
Если вы хотите, чтобы ваш PHP-код загружался быстрее, особенно на продакшене, стоит обратить внимание на оптимизацию автозагрузки. Ниже — что это значит и как настроить.
🔍 Что такое оптимизация автозагрузки в Composer
По умолчанию Composer формирует автозагрузчик так, чтобы было удобно в разработке — он может на лету проверять файловую систему, искать файлы классов и т.д. Но это добавляет накладные расходы при каждом запросе.
Чтобы ускорить автозагрузку, Composer предлагает несколько уровней оптимизации:
Уровень 1 — Class map generation: вместо PSR-4/PSR-0 правил генерируется готовая карта классов (classmap), что позволяет автозагрузчику сразу «знать», где находится файл.
Уровень 2/A — Authoritative class maps: означает, что если класс не найден в classmap — дальнейшем поиску по файловой системе не доверяют. Это ещё быстрее, но требует, чтобы все классы были заранее включены в карту.
Уровень 2/B — APCu cache fallback: использует APCu-кеш для кеширования “класс найден / не найден”, ускоряя автозагрузку без полного отключения файловой системы.
⚙️ Как правильно настроить
Вот шаги, которые можно выполнить в вашем проекте:
1. В
composer.json добавьте в раздел "config":"config": {
"optimize-autoloader": true
}Это включает optimisation level 1.
2. При установке/обновлении запустите Composer с флагом
-o / --optimize-autoloader (или -o):composer install --no-dev -o
Если вы на продакшене — лучше исключить пакеты для разработки (
--no-dev). 3. Для ещё большей оптимизации (если вы уверены, что структура проекта окончательная и классов добавляться не будет “по-ходу”):
composer dump-autoload --classmap-authoritative --no-dev
Это включает уровень 2/A.
4. Если доступен APCu, можно рассмотреть вариант 2/B:
composer install --optimize-autoloader --apcu-autoloader
Но тут нужно, чтобы APCu был установлен и настроен.
🧠 Когда это применять и на что обратить внимание
✅ На продакшене — оптимизация автозагрузки почти всегда повышение производительности, особенно в больших проектах.
⚠️ В разработке — будьте осторожны: если вы часто добавляете/удаляете/переименовываете классы, оптимизированный classmap может “не видеть” новые файлы до повторного
dump-autoload. 📂 Убедитесь, что все классы соответствуют PSR-4/PSR-0 и названы корректно — иначе могут быть проблемы при уровне 2 оптимизации.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍7🙏1
Когда ответственность встречается с делегированием — рождается главный миф разработки.
— Баги находятся на этапе разработки
— Быстрый feedback loop
— Рефакторинг без страха
— Разработчик = ответственность за качество
— Быстрее пишу код без тестов
— QA всё равно найдёт баги
— "Я же не тестировщик"
— Баги уходят в прод, но это не моя вина
Голосуем реакциями:
👍 — Пишу unit-тесты перед коммитом
❤️ — Тесты есть, но не всегда
🤔 — QA справится, они для этого есть
🔥 — Продакшн и есть тестовая среда
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21🔥20👍9🤔8🌚3
💬Еще с Laravel 8 появился
Вам больше не нужно писать пользовательские команды
Библиотека пхпшника
#vardump
Prunable. С его помощью вы можете удалять старые модели по расписанию.Вам больше не нужно писать пользовательские команды
Библиотека пхпшника
#vardump
🔥4
📘 Хочешь в Data Science, но есть пробелы в знаниях математики?
Мы сделали экспресс-курс «Математика для Data Science», который за 2 месяца даст тебе фундамент, без которого ни одна ML-модель не взлетит 🚀
Что тебя ждёт:
🔹 живые вебинары с экспертами (НИУ ВШЭ, SberAI, Wildberries&Russ);
🔹 практика в Python, квизы и проверка заданий экспертами;
🔹 матрицы, регрессии, вероятности и статистика: всё на примерах из реальных задач;
🔹 старт — 4 декабря.
🔥 Не упусти халяву: сейчас 40% до 30 ноября
👉 Записаться на курс
Мы сделали экспресс-курс «Математика для Data Science», который за 2 месяца даст тебе фундамент, без которого ни одна ML-модель не взлетит 🚀
Что тебя ждёт:
🔹 живые вебинары с экспертами (НИУ ВШЭ, SberAI, Wildberries&Russ);
🔹 практика в Python, квизы и проверка заданий экспертами;
🔹 матрицы, регрессии, вероятности и статистика: всё на примерах из реальных задач;
🔹 старт — 4 декабря.
🔥 Не упусти халяву: сейчас 40% до 30 ноября
👉 Записаться на курс
Forwarded from Библиотека программиста | программирование, кодинг, разработка
$ cat inventory.csv | column -t -s,
— простая команда на случай, когда надо быстро и в удобном формате прочитать CSV-файл в терминале
Флаг
-s указывает на использование запятых в качестве разделителей, а -t форматирует выходные данные в чистую таблицу.Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍4
Forwarded from Книги для программистов
PHP, MySQL и немного JavaScript — звучит как начало старого доброго веба? А теперь добавь туда React, Node.js, Flexbox и Ajax, и у тебя получится не просто сайт, а полноценное веб-приложение, которое работает и на десктопе, и на мобилке.
Эта книга — как руководство для фуллстэка-новичка. Автор пошагово ведёт от простого HTML-каркаса до живого динамического сайта, где всё связано с базой, красиво оформлено и не падает при первом запросе.
💡 Ты научишься:
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4❤1👍1
💻 Подборка новостей по PHP за неделю:
🔹 PHP 8.5.0 RC4 — вышел финальный релиз-кандидат PHP 8.5 перед стабильным релизом. Команда призывает разработчиков тестировать и помогать находить последние проблемы.
🔹 Xdebug Update (октябрь 2025) — опубликован свежий отчёт о развитии Xdebug за два месяца: улучшения, эксперименты и планы по дальнейшей оптимизации инструмента.
🔹 Laravel 12.37 — добавлен background queue driver для фоновой обработки заданий, метод
🔹 Полезные плагины для PhpStorm — JetBrains напомнили о малоизвестных, но мощных расширениях, которые добавляют языки, инструменты и улучшения рабочего процесса.
🔹 Symfony 7.3.6 — очередное maintenance-обновление с исправлениями и улучшениями стабильности.
🔹 Symfony 3–9 ноября 2025 — продолжается шлифовка Symfony 7.4 и 8.0, опубликованы новые детали выступлений на SymfonyCon Amsterdam 2025.
Библиотека пхпшника
#свежак
🔹 PHP 8.5.0 RC4 — вышел финальный релиз-кандидат PHP 8.5 перед стабильным релизом. Команда призывает разработчиков тестировать и помогать находить последние проблемы.
🔹 Xdebug Update (октябрь 2025) — опубликован свежий отчёт о развитии Xdebug за два месяца: улучшения, эксперименты и планы по дальнейшей оптимизации инструмента.
🔹 Laravel 12.37 — добавлен background queue driver для фоновой обработки заданий, метод
insert() в фабриках, новый строковый метод ucwords() и другие улучшения производительности и удобства.🔹 Полезные плагины для PhpStorm — JetBrains напомнили о малоизвестных, но мощных расширениях, которые добавляют языки, инструменты и улучшения рабочего процесса.
🔹 Symfony 7.3.6 — очередное maintenance-обновление с исправлениями и улучшениями стабильности.
🔹 Symfony 3–9 ноября 2025 — продолжается шлифовка Symfony 7.4 и 8.0, опубликованы новые детали выступлений на SymfonyCon Amsterdam 2025.
Библиотека пхпшника
#свежак
⬆️ Метод «json»
Если вы используете Laravel 10 и выше, есть элегантный способ чтения JSON-файлов с помощью
Библиотека пхпшника
#vardump
Если вы используете Laravel 10 и выше, есть элегантный способ чтения JSON-файлов с помощью
File::json(). Вы также можете передать флаги, которые вы обычно передаете в json_decode(), на случай, если вы хотите выбросить исключение 🚀Библиотека пхпшника
#vardump