Comments Density Analyzer — это инструмент для анализа плотности и качества комментариев в базе кода на PHP.
Подключается через Composer (
Отслеживать
Обнаруживать «некачественные» комментарии или закомментированный старый код.
Гарантировать наличие doc‑блоков у классов и методов.
Кратко о фишках:
Поддержка разных типов комментариев, включая лицензии, TODO, FIXME и doc‑блоки.
Плагинная архитектура для расширения функционала.
Отчёты в консоль и в HTML.
Установка порогов и возврат exit‑кодов при их превышении.
Возможность baseline-файла, чтобы игнорировать уже существующую техдолг и фокусироваться на новом.
Установка и пример:
Конфигурация через
🔗 Github
Библиотека пхпшника
#инструменты
Подключается через Composer (
--dev
) и помогает:Отслеживать
TODO
и FIXME
в CI/CD, чтобы они не накапливались.Обнаруживать «некачественные» комментарии или закомментированный старый код.
Гарантировать наличие doc‑блоков у классов и методов.
Кратко о фишках:
Поддержка разных типов комментариев, включая лицензии, TODO, FIXME и doc‑блоки.
Плагинная архитектура для расширения функционала.
Отчёты в консоль и в HTML.
Установка порогов и возврат exit‑кодов при их превышении.
Возможность baseline-файла, чтобы игнорировать уже существующую техдолг и фокусироваться на новом.
Установка и пример:
composer require --dev savinmikhail/comments-density
php vendor/bin/comments_density analyze
php vendor/bin/comments_density baseline
Конфигурация через
comments_density.php
с настройкой директорий, типов комментариев и порогов.🔗 Github
Библиотека пхпшника
#инструменты
👍2
ПОСЛЕДНИЙ ДЕНЬ❗
КУРСЫ ПОДОРОЖАЮТ ЗАВТРА‼️
— ML за 34к вместо 44к + Python в подарок
— Математика → второй доступ в подарок
— Ранний доступ к AI-агентам с 15 сентября
— И МОЖНО УСПЕТЬ КУПИТЬ ВСЁ ДО ПОДОРОЖАНИЯ
👉 Proglib Academy
КУРСЫ ПОДОРОЖАЮТ ЗАВТРА‼️
— ML за 34к вместо 44к + Python в подарок
— Математика → второй доступ в подарок
— Ранний доступ к AI-агентам с 15 сентября
— И МОЖНО УСПЕТЬ КУПИТЬ ВСЁ ДО ПОДОРОЖАНИЯ
👉 Proglib Academy
Forwarded from Библиотека задач по PHP | тесты, код, задания
Symfony — Использование Flash-сообщений
Где будет доступно сообщение
Где будет доступно сообщение
'Data saved successfully!'
после выполнения этого кода?Forwarded from Библиотека задач по PHP | тесты, код, задания
Где будет доступно сообщение 'Data saved successfully!' после выполнения этого кода?
Anonymous Quiz
17%
В следующем запросе HTTP
23%
В текущем запросе HTTP
3%
В базе данных
57%
В сессии пользователя
😁10
Forwarded from Книги для программистов
Это книга о том, как распилить монолит на такие мелкие кусочки, что потом их сложно не только собрать, но и найти
Автор — Сэм Ньюман, ваш микросервисный гуру, который прошёл через боль продакшена и вернулся с диаграммами. Во втором издании он делится не только как это строить, но и как это всё потом поддерживать и не сойти с ума.
Что внутри:
🔧 Как заставить сервисы разговаривать друг с другом, не вызывая слёз у девопсов
🔍 Как тестировать микросервисы, не нарушая каноны
🚢 Как деплоить всё это счастье независимо и желательно без жертв
🛡️ И, конечно, как не дать хакеру превратить ваш gRPC в трагедию
Please open Telegram to view this post
VIEW IN TELEGRAM
«Как мы снизили время отклика в 15 раз на новом портале ВДНХ через Laravel + Nuxt и масштабируемую архитектуру»
В конце мая 2025 года ВДНХ представил обновлённый сайт, объединивший все проекты выставки на одной платформе. 🎨 Новый дизайн, интерактивная 3D-карта и возможность купить билеты — всё это стало возможным благодаря масштабной модернизации, которая включала в себя новые технологии и архитектурные решения.
💡 Основные моменты:
🔹 Старый сайт: 14 отдельных сайтов с различными дизайнами и техническими решениями, что создавало путаницу для пользователей и трудности для контент-менеджеров.
🔹 Новая архитектура: Система, построенная на Laravel (бэкенд) и Nuxt.js (фронтенд), решала задачи масштабируемости и высокой производительности. Преимущества — гибридный рендеринг, быстрый отклик страниц и улучшенная SEO-оптимизация.
🔹 Производительность: Время отклика сократилось почти в 15 раз — с 900 мс до 62 мс, что значительно улучшило пользовательский опыт, особенно во время пиковых нагрузок. 🌐
🔹 Микросервисы и кэширование: Модульная архитектура с поддержкой Redis, Memcached и Nginx обеспечила высокую нагрузочную способность и быстрый доступ к данным.
🔹 Интерфейс и поддержка контента: Удобная админ-панель на Laravel Orchid позволяет легко обновлять контент и настраивать страницы. Многоязычная поддержка и адаптивное меню делают сайт доступным для широкой аудитории.
⚙️ Под капотом:
Гибридный рендеринг (SSR + клиентская подгрузка)
Многоуровневое кэширование для динамических и статичных данных
Прогрессивные веб-приложения с функцией офлайн-режима
📊 Результаты: по тестам, время загрузки страницы улучшилось на 40%, а сайт теперь способен выдерживать многократный рост трафика без потери качества.
🔗 Хабр
Библиотека пхпшника
В конце мая 2025 года ВДНХ представил обновлённый сайт, объединивший все проекты выставки на одной платформе. 🎨 Новый дизайн, интерактивная 3D-карта и возможность купить билеты — всё это стало возможным благодаря масштабной модернизации, которая включала в себя новые технологии и архитектурные решения.
💡 Основные моменты:
🔹 Старый сайт: 14 отдельных сайтов с различными дизайнами и техническими решениями, что создавало путаницу для пользователей и трудности для контент-менеджеров.
🔹 Новая архитектура: Система, построенная на Laravel (бэкенд) и Nuxt.js (фронтенд), решала задачи масштабируемости и высокой производительности. Преимущества — гибридный рендеринг, быстрый отклик страниц и улучшенная SEO-оптимизация.
🔹 Производительность: Время отклика сократилось почти в 15 раз — с 900 мс до 62 мс, что значительно улучшило пользовательский опыт, особенно во время пиковых нагрузок. 🌐
🔹 Микросервисы и кэширование: Модульная архитектура с поддержкой Redis, Memcached и Nginx обеспечила высокую нагрузочную способность и быстрый доступ к данным.
🔹 Интерфейс и поддержка контента: Удобная админ-панель на Laravel Orchid позволяет легко обновлять контент и настраивать страницы. Многоязычная поддержка и адаптивное меню делают сайт доступным для широкой аудитории.
⚙️ Под капотом:
Гибридный рендеринг (SSR + клиентская подгрузка)
Многоуровневое кэширование для динамических и статичных данных
Прогрессивные веб-приложения с функцией офлайн-режима
📊 Результаты: по тестам, время загрузки страницы улучшилось на 40%, а сайт теперь способен выдерживать многократный рост трафика без потери качества.
🔗 Хабр
Библиотека пхпшника
🥱3
🚀 How to: Использовать pluck() с замыканиями в Laravel для упрощения кода
Если вы когда-либо использовали
Пример:
Этот код заменяет громоздкое использование
Реальные примеры:
Пользователи: Формируем полные имена для выпадающего списка.
Продукты: Добавляем валюту к ценам.
Категории: Создаём слаги для категорий.
Теперь можно использовать простые преобразования в
👉 Medium
Если вы когда-либо использовали
pluck()
в Laravel и нуждались в преобразовании значений или ключей, то знаете, как громоздким может быть использование mapWithKeys()
. Теперь, с поддержкой замыканий в pluck()
, можно сделать код чище и проще.Пример:
$countries = Country::get()
->pluck(fn (Country $country) => «{$country->flag} {$country->name}», 'id');
Этот код заменяет громоздкое использование
mapWithKeys()
для простых преобразований.Реальные примеры:
Пользователи: Формируем полные имена для выпадающего списка.
Продукты: Добавляем валюту к ценам.
Категории: Создаём слаги для категорий.
Теперь можно использовать простые преобразования в
pluck()
без лишнего кода. Отлично подходит для Blade-шаблонов!👉 Medium
👍3❤1
🤓 Git Gud — игра для изучения Git
Это игра с командной строкой. В ней уровни разделены от простого к экспертному.
🔗 Ссылка
Это игра с командной строкой. В ней уровни разделены от простого к экспертному.
🔗 Ссылка
👍1
Переворачиваем календарь — а там скидки, которые уже закончились.
Но мы их вернули на последний день 🤔
До 00:00 третьего сентября (цены как до 1 сентября):
▪️ Математика для Data Science — 35.199 ₽ вместо 44.900 ₽
▪️ Алгоритмы и структуры данных — 31.669 ₽ вместо 39.900 ₽
▪️ Основы IT — 14.994 ₽ вместо 19.900 ₽
▪️ Архитектуры и шаблоны — 24.890 ₽ вместо 32.900 ₽
▪️ Python — 24.990 ₽ вместо 32.900 ₽
▪️ ML для Data Science — 34.000 ₽ вместо 44. 000 ₽
▪️ AI-агенты — 49.000 ₽ вместо 59.000 ₽
👉 Хватаем скидки из прошлого
P.S. Машину времени одолжили у дяди Миши
Но мы их вернули на последний день 🤔
До 00:00 третьего сентября (цены как до 1 сентября):
▪️ Математика для Data Science — 35.199 ₽ вместо 44.900 ₽
▪️ Алгоритмы и структуры данных — 31.669 ₽ вместо 39.900 ₽
▪️ Основы IT — 14.994 ₽ вместо 19.900 ₽
▪️ Архитектуры и шаблоны — 24.890 ₽ вместо 32.900 ₽
▪️ Python — 24.990 ₽ вместо 32.900 ₽
▪️ ML для Data Science — 34.000 ₽ вместо 44. 000 ₽
▪️ AI-агенты — 49.000 ₽ вместо 59.000 ₽
👉 Хватаем скидки из прошлого
P.S. Машину времени одолжили у дяди Миши
❤1
📂 Шпаргалка по вводу-выводу в PHP
Чтобы не гуглить каждый раз: как читать из STDIN, быстро проглатывать целый файл, дописывать в конец и копировать потоки — собрали базовые, но практичные примеры.
Чтение одной строки из STDIN:
Основано на CLI-константе STDIN.
Чтение всего STDIN:
Чтение файла целиком:
Построчное чтение файла:
Используем классический цикл с
Запись в файл (перезапись):
Запись в файл (добавление в конец):
Флаг
Reintech
Копирование файлов (быстро и потоково):
Работа с буфером (in-memory I/O):
Библиотека пхпшника
#буст
Чтобы не гуглить каждый раз: как читать из STDIN, быстро проглатывать целый файл, дописывать в конец и копировать потоки — собрали базовые, но практичные примеры.
Чтение одной строки из STDIN:
<?php
$line = trim(fgets(STDIN)); // читает строку до перевода строки
echo "Введено: $line\n";
Основано на CLI-константе STDIN.
Чтение всего STDIN:
<?php
$all = stream_get_contents(STDIN); // либо file_get_contents('php://stdin')
echo $all;
php://stdin
— стандартный поток ввода процесса PHP. Чтение файла целиком:
<?php
$data = file_get_contents('file.txt');
if ($data === false) {
fwrite(STDERR, "Не удалось прочитать файл\n");
exit(1);
}
echo $data;
file_get_contents()
— предпочтительный способ прочитать файл в строку. Построчное чтение файла:
<?php
$fh = fopen('file.txt', 'r');
if (!$fh) { die("Не удалось открыть файл\n"); }
while (($line = fgets($fh)) !== false) {
echo $line; // обработка строки
}
fclose($fh);
Используем классический цикл с
fgets()
. Запись в файл (перезапись):
<?php
$bytes = file_put_contents('out.txt', "Привет, PHP!\n", LOCK_EX);
if ($bytes === false) {
die("Ошибка записи\n");
}
file_put_contents()
перезапишет файл (или создаст, если нет). Можно добавить LOCK_EX
для блокировки. Запись в файл (добавление в конец):
<?php
$ok = file_put_contents('out.txt', "Новая строка\n", FILE_APPEND | LOCK_EX);
if ($ok === false) { die("Ошибка записи\n"); }
Флаг
FILE_APPEND
дописывает, а не перезаписывает. Reintech
Копирование файлов (быстро и потоково):
<?php
$src = fopen('src.txt', 'r');
$dst = fopen('dst.txt', 'w');
if (!$src || !$dst) { die("Ошибка открытия файлов\n"); }
$copied = stream_copy_to_stream($src, $dst); // копирует весь остаток
fclose($src);
fclose($dst);
echo "Скопировано байт: $copied\n";
stream_copy_to_stream()
копирует данные из одного потока в другой (удобно и для сетевых/памятных потоков). Работа с буфером (in-memory I/O):
<?php
$buf = fopen('php://temp', 'r+'); // авто-переключение в файл при больших объёмах
fwrite($buf, "Hello, ");
fwrite($buf, "World!");
rewind($buf);
echo stream_get_contents($buf); // -> Hello, World!
fclose($buf);
php://temp/php://memory
— удобные «псевдо-файлы» для буферизации в памяти.Библиотека пхпшника
#буст
❤6🥱1
Наш подписчик спрашивает:
Я только начинаю работать с обработкой исключений. В учебниках часто приводят примеры с try-catch, но в реальных проектах я не встречал их так часто. Насколько часто в реальных проектах используется обработка исключений? И в каких случаях она действительно необходима?
🔹 Как вы используете обработку исключений в своих проектах?
— В каких ситуациях вы предпочитаете использовать try-catch?
— Какие ошибки чаще всего приходится обрабатывать?
— Какие подходы к обработке исключений сработали для вас лучше всего?
P.S. Если хотите задать вопрос, заполните нашу гугл-форму. Это займет 5 минут.
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
😎 Сколько баллов набрали вы?
Голосуйте, какой у вас уровень разработчика:
😁 — 5-12 баллов (стажер)
👍 — 13-25 баллов (джуниор)
⚡️ — 26-40 баллов (джуниор+)
👏 — 41-60 баллов (миддл)
🔥 — 61-80 баллов (миддл+)
🎉 — 81-100 баллов (сеньор)
🤩 — 100+ баллов (тимлид)
Но вот в чем прикол — опытный разработчик набирает баллы не случайными косяками, а осознанными решениями.
👉 Научим, как быстро прокачаться от стажера до сеньора
Голосуйте, какой у вас уровень разработчика:
😁 — 5-12 баллов (стажер)
👍 — 13-25 баллов (джуниор)
⚡️ — 26-40 баллов (джуниор+)
👏 — 41-60 баллов (миддл)
🔥 — 61-80 баллов (миддл+)
🎉 — 81-100 баллов (сеньор)
🤩 — 100+ баллов (тимлид)
Но вот в чем прикол — опытный разработчик набирает баллы не случайными косяками, а осознанными решениями.
👉 Научим, как быстро прокачаться от стажера до сеньора
🤩4😁1🥱1
Плагин EM‑Assist анализирует длинные методы, предлагает, какие части кода стоит вынести в отдельную функцию — сгенерирует название, покажет фрагмент и применит рефакторинг в IDE.
• Recall 53.4 % vs 39.4 % у классических инструментов
• 94 % разработчиков довольны результатом
• Работает через пайплайн: LLM → фильтрация статическим анализом → топ‑3 варианта → рефакторинг одним кликом
Установка & использование:
1. Plugins → Marketplace → ищите "EM‑Assist" → Install → Restart IDE
2. (Опционально) Tools → Large Language Models → вставьте OpenAI API Key
3. Правый клик в методе → Show Context Actions → Extract Function experiment → выберите вариант → Apply
Отличный способ быстро очистить большие методы и улучшить структуру кода с минимальными усилиями!
Библиотека пхпшника
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🥱3
🚀 Как построить workflow в PHP без боли
В каждом бизнес-приложении есть процессы: обработка заказов, онбординг клиентов, согласование документов. Но чаще всего именно workflow превращается в ад для разработчиков: куча сервисов, сложные тесты и боязнь что-то сломать.
Что обычно делают? Пишут огромный
🧩 Почему state machine не спасает
Кажется логичным уйти в state machine: всё по шагам, есть переходы. Но на деле — YAML-конфиги на десятки состояний, логика прячется в хендлерах, а изменения становятся кошмаром. State machine управляет состоянием, а бизнесу нужна прозрачная поведенческая логика.
🌱 Ecotone Orchestrator
Ребята из Ecotone предлагают другой путь — Orchestrator на базе Routing Slip pattern.
Теперь бизнес-процесс — это просто список шагов в коде.(на фото)
📌 Что это даёт:
🔸Понятные шаги вместо монолитных методов
🔸Масштабируемость без синхронизации и БД-состояний
🔸Асинхронные шаги там, где это нужно
🔸Прозрачная обработка ошибок и ретраи
🔸Изменения в workflow без миграций и даунтайма
💡 В итоге: меньше хаоса, больше контроля и возможность адаптировать процессы под клиента или продукт.
👉 Medium
Библиотека пхпшника
В каждом бизнес-приложении есть процессы: обработка заказов, онбординг клиентов, согласование документов. Но чаще всего именно workflow превращается в ад для разработчиков: куча сервисов, сложные тесты и боязнь что-то сломать.
Что обычно делают? Пишут огромный
OrderProcessingService
, где валидатор, оплата, склад и уведомления перемешаны в одном методе. В dev это ещё как-то живёт, но в проде любая ошибка превращается в пожар 🔥🧩 Почему state machine не спасает
Кажется логичным уйти в state machine: всё по шагам, есть переходы. Но на деле — YAML-конфиги на десятки состояний, логика прячется в хендлерах, а изменения становятся кошмаром. State machine управляет состоянием, а бизнесу нужна прозрачная поведенческая логика.
🌱 Ecotone Orchestrator
Ребята из Ecotone предлагают другой путь — Orchestrator на базе Routing Slip pattern.
Теперь бизнес-процесс — это просто список шагов в коде.(на фото)
📌 Что это даёт:
🔸Понятные шаги вместо монолитных методов
🔸Масштабируемость без синхронизации и БД-состояний
🔸Асинхронные шаги там, где это нужно
🔸Прозрачная обработка ошибок и ретраи
🔸Изменения в workflow без миграций и даунтайма
💡 В итоге: меньше хаоса, больше контроля и возможность адаптировать процессы под клиента или продукт.
👉 Medium
Библиотека пхпшника
❤4🥱1
🎮 КВЕСТОВАЯ ЛИНИЯ: «Путь Data Scientist'а»
⮕ Твой стартовый набор искателя данных:
⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»
Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽
☞ Что ждет тебя в этом квесте
📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес
⮕ Твой стартовый набор искателя данных:
Python — твое легендарное оружие (урон по багам +∞)
Математика — твой базовый интеллект (влияет на понимание алгоритмов)
Машинное обучение — твое дерево навыков (открывает новые способности)
⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»
Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽
☞ Что ждет тебя в этом квесте
— Получение артефактов: портфолио проектов и сертификаты— Прокачка от новичка до Senior Data Scientist— Босс-файты с реальными задачами из индустрии— Доступ к гильдии единомышленников
📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес
Что вас больше всего раздражает в работе?
Anonymous Poll
31%
глупые вопросы от коллег и клиентов
36%
созвоны
41%
работа с документами и отчётами
12%
презентации
17%
планирование
16%
написание рабочих писем
9%
собственно сами рабочие задачи
6%
свой вариант (напишу в комментариях)