Проблема: при обработке больших объемов данных важно не только их собрать, но и правильно структурировать для дальнейшего анализа. Обычные SQL-запросы могут стать громоздкими и сложными, особенно когда речь идет о масштабируемости и производительности.
Решение: в книге «Analytics Engineering with SQL and dbt: Building Meaningful Data Models at Scale» авторы описывают, как использовать dbt (data build tool) для построения и трансформации данных. dbt позволяет создавать чистые, поддерживаемые и легко масштабируемые модели данных, используя простые SQL-запросы, что значительно ускоряет процессы аналитики.
Пример кода:
-- Пример модели dbt для расчета среднего чека по категориям товаров
WITH base AS (
SELECT
category_id,
SUM(order_amount) AS total_sales,
COUNT(DISTINCT order_id) AS total_orders
FROM raw.orders
GROUP BY category_id
)
SELECT
category_id,
total_sales / total_orders AS avg_order_value
FROM base
Преимущества:
— Dbt позволяет быстро разрабатывать и тестировать модели данных, сокращая время от идеи до реализации.
— Подходы, описанные в книге, позволяют строить модели, которые легко масштабируются по мере роста данных.
— Акцент на совместной работе между аналитиками и инженерами способствует более эффективному решению задач.
Еще больше полезных книг — в нашем канале @progbook
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁1
📏 Единый стиль форматирования кода: как улучшить использование скобок и фигурных скобок в PHP
В статье предлагается новый подход к оформлению синтаксиса в PHP, который основывается на логике языка, а не на исторических привычках из других языков программирования, таких как C или Java. Цель — создать стиль, который будет унифицированным, систематичным, последовательным и лёгким для запоминания.
🔑 Что предложено?
Унификация: одна и та же правило применяется ко всем соответствующим конструкциям — будь то функции, управляющие структуры или вложенные выражения.
Системность: каждое правило следует прямо из синтаксической структуры, а не из лексической категории (ключевое слово, идентификатор и т. д.).
Последовательность: одинаковое обращение с конструкциями без произвольных исключений.
Лёгкость запоминания: устранение контекстных различий и эстетических отличий, не имеющих функционального значения.
📚 Как это работает?
Нет пробела перед открывающимися скобками: Например,
Открывающие фигурные скобки всегда на той же строке, что и управляющая структура: Например,
Закрывающие фигурные скобки на новой строке, выровненные с началом блока.
🚫 Почему стоит отказаться от исторических конвенций?
Ранее использованные в таких стандартах, как PSR-2 и PSR-12, подходы взяли за основу стиль, присущий языкам, подобным C, что ведет к путанице и необходимости запоминать исключения. Например, скобки в функциях и управляющих конструкциях должны располагаться по-разному, хотя структура этих конструкций схожа. Эти отличия не улучшали читаемость кода, а наоборот, только увеличивали когнитивную нагрузку.
🔥 Преимущества нового подхода:
Упрощённое восприятие кода.
Совместимость с инструментами автоматического форматирования, такими как PHP-CS-Fixer или линтеры.
Чистый и вертикально структурированный код, который легче воспринимать.
📈 Специальные случаи: if/elseif/else и try/catch/finally
Предлагается установить правило, что все блоки (например,
💡 Советы для новых конструкций:
Стрелочные функции (fn): не ставить пробел между
Тернарные выражения (? :): использовать скобки для сложных вложенных выражений и ставить пробелы вокруг
👉 Читать статью
В статье предлагается новый подход к оформлению синтаксиса в PHP, который основывается на логике языка, а не на исторических привычках из других языков программирования, таких как C или Java. Цель — создать стиль, который будет унифицированным, систематичным, последовательным и лёгким для запоминания.
🔑 Что предложено?
Унификация: одна и та же правило применяется ко всем соответствующим конструкциям — будь то функции, управляющие структуры или вложенные выражения.
Системность: каждое правило следует прямо из синтаксической структуры, а не из лексической категории (ключевое слово, идентификатор и т. д.).
Последовательность: одинаковое обращение с конструкциями без произвольных исключений.
Лёгкость запоминания: устранение контекстных различий и эстетических отличий, не имеющих функционального значения.
📚 Как это работает?
Нет пробела перед открывающимися скобками: Например,
if($x)
и while($y)
— это всегда одно правило, независимо от того, является ли конструкция управляющей или функцией.Открывающие фигурные скобки всегда на той же строке, что и управляющая структура: Например,
function foo() {
или if($x) {
.Закрывающие фигурные скобки на новой строке, выровненные с началом блока.
🚫 Почему стоит отказаться от исторических конвенций?
Ранее использованные в таких стандартах, как PSR-2 и PSR-12, подходы взяли за основу стиль, присущий языкам, подобным C, что ведет к путанице и необходимости запоминать исключения. Например, скобки в функциях и управляющих конструкциях должны располагаться по-разному, хотя структура этих конструкций схожа. Эти отличия не улучшали читаемость кода, а наоборот, только увеличивали когнитивную нагрузку.
🔥 Преимущества нового подхода:
Упрощённое восприятие кода.
Совместимость с инструментами автоматического форматирования, такими как PHP-CS-Fixer или линтеры.
Чистый и вертикально структурированный код, который легче воспринимать.
📈 Специальные случаи: if/elseif/else и try/catch/finally
Предлагается установить правило, что все блоки (например,
if
, elseif
, else
, try
, catch
, finally
) должны начинаться с новой строки после закрывающей фигурной скобки предыдущего блока. Это улучшает структуру и читабельность кода, делая его более понятным и логичным.💡 Советы для новых конструкций:
Стрелочные функции (fn): не ставить пробел между
fn
и открывающей скобкой.Тернарные выражения (? :): использовать скобки для сложных вложенных выражений и ставить пробелы вокруг
?
и :
.👉 Читать статью
🥱4🌚2
🕵️ Команда дня: Поиск всех вызовов функции
Зачем это нужно?
Если вы работаете с большими проектами и хотите быстро найти все места, где используется определённая функция, команда
Простой пример: у вас есть функция
Пример использования:
Результат:
Если функция
Разные варианты:
Поиск по всем PHP-файлам:
Если вы хотите искать только по PHP-файлам, можно уточнить расширение:
Игнорирование регистра:
Если не важно, как написана функция (например,
Показать только имена файлов:
Если вам нужно только увидеть, где эта функция вызывается (без строк с кодом):
Почему это полезно?
🔹 Быстро находите все места использования функции. Например, перед изменениями или удалением функции важно удостовериться, что вы не затронете другие части кода.
🔹 Удобно для рефакторинга. Когда вы хотите заменить одну функцию на другую, эта команда покажет, где необходимо провести изменения.
🔹 Не требует IDE. Для поиска не нужно открывать IDE, достаточно консоли и нескольких команд.
🧠 Дополнительно: Сложные запросы
Если необходимо искать более сложные структуры или несколько функций сразу, вы можете использовать регулярные выражения с
Библиотека пхпшника #буст
grep -R «functionName(» ./src
grep
— это утилита командной строки для поиска по тексту в файлах. Ключ-R
позволяет искать рекурсивно по всем файлам в директории, а«functionName(»
— это строка, которую мы ищем (в данном случае — вызовы функции).
Зачем это нужно?
Если вы работаете с большими проектами и хотите быстро найти все места, где используется определённая функция, команда
grep
может быть настоящим спасением.Простой пример: у вас есть функция
sendEmail
, и вам нужно узнать, где она вызывается в коде — эта команда делает всё быстро и эффективно, без лишних кликов в IDE.Пример использования:
grep -R «sendEmail(» ./src
Результат:
Если функция
sendEmail
вызывается в нескольких местах, результат будет выглядеть так:./src/Controllers/NotificationController.php:42: sendEmail($user->email, $subject, $body);./src/Services/EmailService.php:56: sendEmail($user->email, $subject, $body);
Разные варианты:
Поиск по всем PHP-файлам:
Если вы хотите искать только по PHP-файлам, можно уточнить расширение:
grep -R --include=»*.php» «sendEmail(» ./src
Игнорирование регистра:
Если не важно, как написана функция (например,
sendemail
или sendEmail
), добавьте флаг -i
:grep -Ri «sendemail(» ./src
Показать только имена файлов:
Если вам нужно только увидеть, где эта функция вызывается (без строк с кодом):
grep -Rl «sendEmail(» ./src
Почему это полезно?
🔹 Быстро находите все места использования функции. Например, перед изменениями или удалением функции важно удостовериться, что вы не затронете другие части кода.
🔹 Удобно для рефакторинга. Когда вы хотите заменить одну функцию на другую, эта команда покажет, где необходимо провести изменения.
🔹 Не требует IDE. Для поиска не нужно открывать IDE, достаточно консоли и нескольких команд.
🧠 Дополнительно: Сложные запросы
Если необходимо искать более сложные структуры или несколько функций сразу, вы можете использовать регулярные выражения с
grep
. Например, для поиска всех вызовов функций, начинающихся с get
:grep -R -E «get[A-Za-z0-9_]*\(» ./src
Библиотека пхпшника #буст
😁7👍3🔥3
🔥 Последняя неделя перед стартом курса по AI-агентам
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
😁2
🛠️ Система очередей и Job'ов Laravel: От создания таблицы до развертывания в продакшене
Очереди в Laravel — незаменимый инструмент для обработки ресурсоёмких задач в фоне: отправка писем, обработка видео, нотификации и многое другое. В этой статье мы пошагово разберём весь процесс работы с job'ами — от создания нужных таблиц до запуска очередей в продакшене через Supervisor. Вы узнаете, как отслеживать и повторно запускать проваленные задания, автоматически чистить старые, настраивать задержки и количество попыток, а также использовать батчи для групповых операций. Если вы хотите уверенно управлять фоновыми задачами в Laravel — этот гайд станет вашей настольной инструкцией.
👉 Читать статью
Библиотека пхпшника
Очереди в Laravel — незаменимый инструмент для обработки ресурсоёмких задач в фоне: отправка писем, обработка видео, нотификации и многое другое. В этой статье мы пошагово разберём весь процесс работы с job'ами — от создания нужных таблиц до запуска очередей в продакшене через Supervisor. Вы узнаете, как отслеживать и повторно запускать проваленные задания, автоматически чистить старые, настраивать задержки и количество попыток, а также использовать батчи для групповых операций. Если вы хотите уверенно управлять фоновыми задачами в Laravel — этот гайд станет вашей настольной инструкцией.
👉 Читать статью
Библиотека пхпшника
👍2❤1
💬 Вопрос от подписчика: как сохранить PHP-код чистым и поддерживаемым?
👇 Делитесь своим опытом — что реально помогает вам не утонуть в хаосе?
🚀 Используете ли вы стандарты, линтеры, слои, DDD, maybe Laravel-пакеты или IDE-фишки?
Обсудим в комментариях!
Библиотека пхпшника #междусобойчик
«Чем больше растёт мой PHP-проект, тем сложнее за ним следить. Маленькие фиксы превращаются в грязные заплатки, а кодовая база становится всё менее управляемой.
Как вы поддерживаете чистоту и читаемость кода в долгосрочной перспективе? Есть ли какие-то советы по структуре, неймингу или полезные инструменты для поддерживаемости?»
👇 Делитесь своим опытом — что реально помогает вам не утонуть в хаосе?
🚀 Используете ли вы стандарты, линтеры, слои, DDD, maybe Laravel-пакеты или IDE-фишки?
Обсудим в комментариях!
Библиотека пхпшника #междусобойчик
👍2🤔2❤1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Прописаны все виды команд JOIN, а также их визуал.
Крайне полезная штука — сохраняем.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🥱4❤1👾1
События vs сообщения. Понимаете ли вы разницу и почему это важно?
🧠 «Будем отправлять события в Rabbit!» — фраза, с которой всё начинается… и всё рушится 😅
Слишком часто в проектах путают события, сообщения и транспорт. В итоге появляются боли, магия и код, в котором невозможно разобраться. А потом слышим:
А дело-то не в Messenger'е, а в архитектурных решениях.
🔥 В статье, на которую обязательно стоит потратить время:
🔸 разбор, что такое событие в приложении (и почему это не сообщение);
🔸 почему Symfony EventDispatcher нельзя тащить в домен;
🔸 как выглядит простой, но правильный
🔸 когда события превращаются в сообщения — и почему транспорт (Rabbit/Kafka/etc) должен подбираться последним, а не первым;
🔸 и почему «всё в одном классе» — верный путь в дебаг ад.
📌 Отдельная тема - как событие из домена превращается в сообщение и уходит в Rabbit через Symfony Messenger.
Да, Messenger — это не центр вселенной, а всего лишь инструмент доставки. И это важно понимать.
👉 Хабр
💬 А ты как реализуешь события в своих проектах? Используешь ли отдельный dispatcher для домена?
🧠 «Будем отправлять события в Rabbit!» — фраза, с которой всё начинается… и всё рушится 😅
Слишком часто в проектах путают события, сообщения и транспорт. В итоге появляются боли, магия и код, в котором невозможно разобраться. А потом слышим:
Symfony Messenger? Фу, я на нём проект писал — не взлетел!
А дело-то не в Messenger'е, а в архитектурных решениях.
🔥 В статье, на которую обязательно стоит потратить время:
🔸 разбор, что такое событие в приложении (и почему это не сообщение);
🔸 почему Symfony EventDispatcher нельзя тащить в домен;
🔸 как выглядит простой, но правильный
DomainEventPublisher
;🔸 когда события превращаются в сообщения — и почему транспорт (Rabbit/Kafka/etc) должен подбираться последним, а не первым;
🔸 и почему «всё в одном классе» — верный путь в дебаг ад.
📌 Отдельная тема - как событие из домена превращается в сообщение и уходит в Rabbit через Symfony Messenger.
Да, Messenger — это не центр вселенной, а всего лишь инструмент доставки. И это важно понимать.
👉 Хабр
💬 А ты как реализуешь события в своих проектах? Используешь ли отдельный dispatcher для домена?
🔥3👍2
🔥 Сегодня стартует курс по AI-агентам!
Онбординг уже сегодня, но ещё можно вписаться — ПОСЛЕДНИЙ ШАНС это сделать.
Мы больше года собирали мультиагентные системы: экспериментировали, переделывали и в итоге — оформили всё в 5 плотных вебинаров.
😤 «А можно ли вообще научиться чему-то за 5 вебинаров?!»
Если вы хотите просто послушать — нет
Если хотите разбираться и делать — да
➡️ На курсе:
— мы не читаем слайдики, а работаем в коде в реальном времени
— можно задавать вопросы прямо на вебинаре
— после каждого вебинара есть домашка и поддержка в чате
И главное — вы получаете системное понимание, а не набор хаотичных туториалов.
⚡️Если вы думаете, что успеете потом — не успеете.
Старт сегодня:
— а те, кто вписался сейчас, будут вас опережать — в проектах, на грейде и в зарплате
Знакомьтесь, эксперт нашего курса:
Никита Зелинский — Chief Data Scientist МТС, Head of ML Platforms, руководитель центра компетенций по Data Science.
❗Стартуем сегодня — забронируй свое место
Онбординг уже сегодня, но ещё можно вписаться — ПОСЛЕДНИЙ ШАНС это сделать.
Мы больше года собирали мультиагентные системы: экспериментировали, переделывали и в итоге — оформили всё в 5 плотных вебинаров.
😤 «А можно ли вообще научиться чему-то за 5 вебинаров?!»
Если вы хотите просто послушать — нет
Если хотите разбираться и делать — да
➡️ На курсе:
— мы не читаем слайдики, а работаем в коде в реальном времени
— можно задавать вопросы прямо на вебинаре
— после каждого вебинара есть домашка и поддержка в чате
И главное — вы получаете системное понимание, а не набор хаотичных туториалов.
⚡️Если вы думаете, что успеете потом — не успеете.
Старт сегодня:
— а те, кто вписался сейчас, будут вас опережать — в проектах, на грейде и в зарплате
Знакомьтесь, эксперт нашего курса:
Никита Зелинский — Chief Data Scientist МТС, Head of ML Platforms, руководитель центра компетенций по Data Science.
❗Стартуем сегодня — забронируй свое место
🐞 Холивар: var_dump vs. xdebug vs. логирование
Каждый разработчик сталкивался с вопросом: как лучше всего дебажить код? Вариантов несколько — но какой подход реально работает?
🔍 var_dump — Когда хочется быстрого ответа
Самый быстрый способ отследить значения переменных. Просто пихаем
Плюсы:
Простой, быстрый и не требует дополнительных настроек.
Отлично работает для небольших участков кода.
Минусы:
Запутает вывод, если переменных много.
Не даёт достаточной информации для глубокого анализа, не всегда удобен для сложных структур.
🧩 xdebug — Когда хочется всего и сразу
Плагин для отладки с множеством функций: стэк-трейсы, брейкпоинты, профилирование, и даже код-coverage.
Плюсы:
Полноценная отладка с возможностью пошагового выполнения.
Логирование запросов и удобный просмотр значений переменных.
Минусы:
Может замедлять выполнение кода (особенно на production).
Требует конфигурации и настройки среды.
📝 Логирование — Когда нужно запомнить всё
Для серьёзных проектов — это must-have. Логи помогут отслеживать ошибки, операции и диагностировать проблемы в проде.
Плюсы:
Логи могут быть структурированы, что удобно для поиска и анализа.
В реальном времени можно отслеживать важные события.
Минусы:
Может быть сложнее настроить по сравнению с
Для полноценного логирования нужно грамотно настроить уровни логирования и фильтрацию.
💬 Какой метод предпочитаете вы?
Пишите в комментариях, как вы дебажите свой код: через
Библиотека пхпшника #междусобойчик
Каждый разработчик сталкивался с вопросом: как лучше всего дебажить код? Вариантов несколько — но какой подход реально работает?
🔍 var_dump — Когда хочется быстрого ответа
Самый быстрый способ отследить значения переменных. Просто пихаем
var_dump()
в код, и вот вам вся информация.Плюсы:
Простой, быстрый и не требует дополнительных настроек.
Отлично работает для небольших участков кода.
Минусы:
Запутает вывод, если переменных много.
Не даёт достаточной информации для глубокого анализа, не всегда удобен для сложных структур.
🧩 xdebug — Когда хочется всего и сразу
Плагин для отладки с множеством функций: стэк-трейсы, брейкпоинты, профилирование, и даже код-coverage.
Плюсы:
Полноценная отладка с возможностью пошагового выполнения.
Логирование запросов и удобный просмотр значений переменных.
Минусы:
Может замедлять выполнение кода (особенно на production).
Требует конфигурации и настройки среды.
📝 Логирование — Когда нужно запомнить всё
Для серьёзных проектов — это must-have. Логи помогут отслеживать ошибки, операции и диагностировать проблемы в проде.
Плюсы:
Логи могут быть структурированы, что удобно для поиска и анализа.
В реальном времени можно отслеживать важные события.
Минусы:
Может быть сложнее настроить по сравнению с
var_dump()
.Для полноценного логирования нужно грамотно настроить уровни логирования и фильтрацию.
💬 Какой метод предпочитаете вы?
Пишите в комментариях, как вы дебажите свой код: через
var_dump()
, полную отладку с xdebug, или используете логирование? Или может, у вас есть свой секретный способ?Библиотека пхпшника #междусобойчик
php-datatypes
Эта библиотека представляет гибкий, но строгий способ работы с примитивными типами данных, такими как целые числа, плавающие и строки, в PHP. Она делает акцент на безопасности типов и точности, поддерживая операции для подписанных и беззнаковых целых чисел (Int8, UInt8 и т.д.) и различных форматов с плавающей точкой (Float32, Float64 и т.д.).
Для чего это нужно:
🟢Безопасность типов: Явно определяя типы данных, например UInt8, вы устраняете риск проникновения недопустимых значений в ваше приложение. Например, использование целых чисел без знака гарантирует, что значение останется в допустимых диапазонах, обеспечивая защиту от неожиданного ввода данных.
🟢Точность: Работа с точными значениями, особенно с числами с плавающей точкой, может быть сложной в PHP из-за того, как он управляет плавающими числами нативно.
🟢Защита диапазонов: Указывая точные диапазоны, вы можете предотвратить такие проблемы, как переполнение или недополнение, которые часто остаются незамеченными в языках с динамической типизацией.
🟢Удобство чтения и обслуживания: Явные типы данных улучшают читаемость кода. Когда разработчик читает ваш код, он сразу же понимает, какой тип значения ожидается и какие ограничения на него накладываются. Это повышает удобство сопровождения в долгосрочной перспективе.
🔗 Github
Эта библиотека представляет гибкий, но строгий способ работы с примитивными типами данных, такими как целые числа, плавающие и строки, в PHP. Она делает акцент на безопасности типов и точности, поддерживая операции для подписанных и беззнаковых целых чисел (Int8, UInt8 и т.д.) и различных форматов с плавающей точкой (Float32, Float64 и т.д.).
Для чего это нужно:
🟢Безопасность типов: Явно определяя типы данных, например UInt8, вы устраняете риск проникновения недопустимых значений в ваше приложение. Например, использование целых чисел без знака гарантирует, что значение останется в допустимых диапазонах, обеспечивая защиту от неожиданного ввода данных.
🟢Точность: Работа с точными значениями, особенно с числами с плавающей точкой, может быть сложной в PHP из-за того, как он управляет плавающими числами нативно.
🟢Защита диапазонов: Указывая точные диапазоны, вы можете предотвратить такие проблемы, как переполнение или недополнение, которые часто остаются незамеченными в языках с динамической типизацией.
🟢Удобство чтения и обслуживания: Явные типы данных улучшают читаемость кода. Когда разработчик читает ваш код, он сразу же понимает, какой тип значения ожидается и какие ограничения на него накладываются. Это повышает удобство сопровождения в долгосрочной перспективе.
🔗 Github
👍3❤1
Forwarded from Библиотека задач по PHP | тесты, код, задания
Какая функция ищет последнее вхождение символа в строку?
Anonymous Quiz
22%
strpos()
11%
strtr()
59%
strrpos()
8%
substr()
⌨️ Топ-вакансий по PHP за неделю
Team Lead PHP — от 3000 до 3100 $ удалёнка (Москва)
Senior PHP Developer — от 250 000 до 400 000 ₽, Гибрид (Москва)
PHP разработчик — от 1500 до 2000 $, Удалёнка (Москва)
PHP разработчик (Symfony) — от 160 000 ₽, Удалёнка
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Team Lead PHP — от 3000 до 3100 $ удалёнка (Москва)
Senior PHP Developer — от 250 000 до 400 000 ₽, Гибрид (Москва)
PHP разработчик — от 1500 до 2000 $, Удалёнка (Москва)
PHP разработчик (Symfony) — от 160 000 ₽, Удалёнка
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Как создать собственный метод хелпера строк Laravel с помощью макроса
Строковый хелпер Laravel предлагает множество полезных методов, которые вы можете использовать в своем приложении. Но мы также можем создать собственный метод с помощью макроса.
👉 Читать статью
Библиотека пхпшника #буст
Строковый хелпер Laravel предлагает множество полезных методов, которые вы можете использовать в своем приложении. Но мы также можем создать собственный метод с помощью макроса.
👉 Читать статью
Библиотека пхпшника #буст
👍1👏1😁1
Хотите стать тимлидом на PHP? Задумывались, как сделать следующий шаг в своей карьере и перейти к менеджерской роли?
16 июля в 20:00 МСК OTUS проведет открытый вебинар «Что нужно знать, чтобы стать тимлидом на PHP». Мы подробно разберем, какие soft и hard skills нужны для этой роли, какую литературу стоит изучить, какие типичные вопросы задают на собеседованиях для тимлидов, и какие ожидания предъявляют компании.
Этот вебинар поможет не только тем, кто уже является тимлидом, но и разработчикам, стремящимся к карьерному росту. Узнайте, как подготовиться к качественно новому шагу в вашем профессиональном пути и получите практические рекомендации для карьерного роста.
Открытый урок пройдет в преддверии старта курса «PHP Developer. Professional». Все участники вебинара получат скидку на обучение.
Регистрация открыта: https://clc.to/06LNGw
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
16 июля в 20:00 МСК OTUS проведет открытый вебинар «Что нужно знать, чтобы стать тимлидом на PHP». Мы подробно разберем, какие soft и hard skills нужны для этой роли, какую литературу стоит изучить, какие типичные вопросы задают на собеседованиях для тимлидов, и какие ожидания предъявляют компании.
Этот вебинар поможет не только тем, кто уже является тимлидом, но и разработчикам, стремящимся к карьерному росту. Узнайте, как подготовиться к качественно новому шагу в вашем профессиональном пути и получите практические рекомендации для карьерного роста.
Открытый урок пройдет в преддверии старта курса «PHP Developer. Professional». Все участники вебинара получат скидку на обучение.
Регистрация открыта: https://clc.to/06LNGw
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🖥️ Fluent CLI в PHP: Создаём консольные команды с __call и никаких танцев с бубном
Часто возитесь с
📦 PhpFluentConsole — небольшая, но удобная библиотека для работы с командной строкой в PHP. Не конкурирует с Symfony Console, а дополняет её, упрощая типичные задачи:
🔧 Что умеет:
— Упрощает построение CLI-команд через fluent-интерфейс
— Поддерживает разные кодировки (CP866, CP1251, UTF-8) — особенно актуально в Windows
— Позволяет обрабатывать вывод, искать ошибки и шаблоны через регулярки
— Упрощает получение стандартного вывода и кодов возврата
— Позволяет наследоваться и описывать свои команды как методы
🧪 Примеры из статьи:
— Получение IP-адреса через
— Извлечение контейнеров с ЭЦП через
— Упрощённое построение обёрток для системных утилит с собственной логикой
📚 В статье пошагово разобраны возможности библиотеки, примеры вывода, ошибки, тонкости работы с кодировками и даже идея по созданию собственных CLI-решений на её основе.
🛠️ Отличная основа для утилит, интеграций и инструментов — особенно если нужно взаимодействовать с внешними командами, обрабатывать их вывод и не хочется писать велосипед.
🔜 В следующей статье автор обещает рассказать про CryptoProBuilder — уже ждём 👀
👉 Хабр
Библиотека пхпшника
Часто возитесь с
cmd
, powershell
, csptest
, ipconfig
, кириллицей и странным выводом?📦 PhpFluentConsole — небольшая, но удобная библиотека для работы с командной строкой в PHP. Не конкурирует с Symfony Console, а дополняет её, упрощая типичные задачи:
🔧 Что умеет:
— Упрощает построение CLI-команд через fluent-интерфейс
— Поддерживает разные кодировки (CP866, CP1251, UTF-8) — особенно актуально в Windows
— Позволяет обрабатывать вывод, искать ошибки и шаблоны через регулярки
— Упрощает получение стандартного вывода и кодов возврата
— Позволяет наследоваться и описывать свои команды как методы
🧪 Примеры из статьи:
— Получение IP-адреса через
ipconfig
с корректной кириллицей— Извлечение контейнеров с ЭЦП через
csptest
— Упрощённое построение обёрток для системных утилит с собственной логикой
📚 В статье пошагово разобраны возможности библиотеки, примеры вывода, ошибки, тонкости работы с кодировками и даже идея по созданию собственных CLI-решений на её основе.
🛠️ Отличная основа для утилит, интеграций и инструментов — особенно если нужно взаимодействовать с внешними командами, обрабатывать их вывод и не хочется писать велосипед.
🔜 В следующей статье автор обещает рассказать про CryptoProBuilder — уже ждём 👀
👉 Хабр
Библиотека пхпшника