Podlodka Crew 29 сентября запускает новую конференцию — Podlodka AI Crew 🥳
Если вы ищете практические знания без воды — это оно. Подлодка собрала экспертов, которые покажут, что реально работает в коде, пайплайнах и командных процессах.
В программе:
📊«AI, ML, DS, нейросети: без хайпа в терминах» — разберём границы применимости подходов, чтобы отличать пользу от шума (Алексей Шаграев, ex-Google, ex-Yandex).
👥 Круглый стол «AI-культура в команде» — инструменты и практики, сопротивление/принятие, влияние на эффективность и безопасность (Макс Сальников / Microsoft, Владимир Иванов / Supplied, Михаил Левченко / Яндекс Вертикали, Павел Герасимов / Wrike).
💻 Мастер-класс «Project-aware ассистенты: RAG + MCP» — живая документация, контекст кода для LLM и интерфейс запросов в мессенджере; как это ускоряет онбординг и разработку (Григорий Сухоруков, Яндекс).
⚡«Эффективный промптинг» — техники, которые убирают типовые страхи и реально ускоряют разработку (Евгений Сатуров, Surf).
Почему это важно: AI уже часть рабочего стека — от IDE до CI/CD. Здесь — практики с измеримым эффектом: меньше рутины, быстрее процессы.
Кому будет полезно: разработчикам, архитекторам и техлидам, платформенным/DevOps-инженерам - всем, кто внедряет AI-процессы и ждёт измеримого результата.
🗓 29 сентября - 3 октября
🔗 Подробности и регистрация: https://podlodka.io/aicrew
А промокод
Если вы ищете практические знания без воды — это оно. Подлодка собрала экспертов, которые покажут, что реально работает в коде, пайплайнах и командных процессах.
В программе:
📊«AI, ML, DS, нейросети: без хайпа в терминах» — разберём границы применимости подходов, чтобы отличать пользу от шума (Алексей Шаграев, ex-Google, ex-Yandex).
👥 Круглый стол «AI-культура в команде» — инструменты и практики, сопротивление/принятие, влияние на эффективность и безопасность (Макс Сальников / Microsoft, Владимир Иванов / Supplied, Михаил Левченко / Яндекс Вертикали, Павел Герасимов / Wrike).
💻 Мастер-класс «Project-aware ассистенты: RAG + MCP» — живая документация, контекст кода для LLM и интерфейс запросов в мессенджере; как это ускоряет онбординг и разработку (Григорий Сухоруков, Яндекс).
⚡«Эффективный промптинг» — техники, которые убирают типовые страхи и реально ускоряют разработку (Евгений Сатуров, Surf).
Почему это важно: AI уже часть рабочего стека — от IDE до CI/CD. Здесь — практики с измеримым эффектом: меньше рутины, быстрее процессы.
Кому будет полезно: разработчикам, архитекторам и техлидам, платформенным/DevOps-инженерам - всем, кто внедряет AI-процессы и ждёт измеримого результата.
🗓 29 сентября - 3 октября
🔗 Подробности и регистрация: https://podlodka.io/aicrew
А промокод
phpyh_ai дает скидку 500р! 🎁❤13👍13💩12🔥6
PHP 8.5 не сбавляет темп! — выступаю послезавтра на Стачке
В рамках Стачки в пятницу будет PHP-трек PHPDays, на котором я по традиции расскажу про грядущий минорный релиз. Пробежимся по основным фичам и приготовимся к обновлениюпет-проектов в ноябре.
Также в программе будет ещё 8 пыхарских докладов, в том числе от Кирилла Несмеянова, Ольги Глеклер, Александра Луценко и Альберта Степанцева.
https://spb25.nastachku.ru/lp/proekt-1/speeches/php-8-5-ne-sbavlyaet-temp
Кстати, у меня есть одна проходка. Кто первым в личку напишет отзыв про Пых.конф’25 для канала с фоточкой — с радостью репостну и отдам билет.
После конфы сразу погрузился в код Thesis и Typhoon — куча идей и планов, скоро будут результаты, новости, стримы.
В рамках Стачки в пятницу будет PHP-трек PHPDays, на котором я по традиции расскажу про грядущий минорный релиз. Пробежимся по основным фичам и приготовимся к обновлению
Также в программе будет ещё 8 пыхарских докладов, в том числе от Кирилла Несмеянова, Ольги Глеклер, Александра Луценко и Альберта Степанцева.
https://spb25.nastachku.ru/lp/proekt-1/speeches/php-8-5-ne-sbavlyaet-temp
Кстати, у меня есть одна проходка. Кто первым в личку напишет отзыв про Пых.конф’25 для канала с фоточкой — с радостью репостну и отдам билет.
После конфы сразу погрузился в код Thesis и Typhoon — куча идей и планов, скоро будут результаты, новости, стримы.
👍23🔥11❤9
Пых
PHP 8.5 не сбавляет темп! — выступаю послезавтра на Стачке В рамках Стачки в пятницу будет PHP-трек PHPDays, на котором я по традиции расскажу про грядущий минорный релиз. Пробежимся по основным фичам и приготовимся к обновлению пет-проектов в ноябре. Также…
Кто хочет в эти дни купить слоника Пых в Санкт-Петербурге — заполните форму, чтобы я понимал, сколько взять с собой.
https://forms.gle/TmVwGNSwmwktJ5Bd8
https://forms.gle/TmVwGNSwmwktJ5Bd8
❤19👍7👎2🥰1😢1
Завтра будет PHP-трек!
А сегодня послушал очень вдохновляющий доклад Семихатова про то, как математика в теории много раз предвосхищала открытия на практике.
А сегодня послушал очень вдохновляющий доклад Семихатова про то, как математика в теории много раз предвосхищала открытия на практике.
🔥51❤15👍13🦄3
Пых
PHP 8.5 не сбавляет темп! — выступаю послезавтра на Стачке В рамках Стачки в пятницу будет PHP-трек PHPDays, на котором я по традиции расскажу про грядущий минорный релиз. Пробежимся по основным фичам и приготовимся к обновлению пет-проектов в ноябре. Также…
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥57👍25
🗄️ Спаси свой репозиторий от save()
Возвращаюсь к своим образовательным идеям — сегодня закинул в Хобота платную лекцию про репозиторий. Периодически вижу неправильный нейминг и холивары про то, где вызывать
В этой лекции мы разберёмся, что такое репозиторий, почему в нём не должно быть методов
А ещё:
• поговорим про паттерны реализации логики и паттерны доступа к данным по Фаулеру,
• сравним Active Record и Data Mapper,
• обсудим, почему метод
• соберём руками Doctrine безо всяких фреймворков,
• увидим, где суффикс
• поручим одну и ту же задачу Junie и Claude и узнаем, кто лучше.
Залетай в Хобота и смотри.
Возвращаюсь к своим образовательным идеям — сегодня закинул в Хобота платную лекцию про репозиторий. Периодически вижу неправильный нейминг и холивары про то, где вызывать
flush().В этой лекции мы разберёмся, что такое репозиторий, почему в нём не должно быть методов
save() и update() и где же на самом деле нужно вызывать $entityManager->flush().А ещё:
• поговорим про паттерны реализации логики и паттерны доступа к данным по Фаулеру,
• сравним Active Record и Data Mapper,
• обсудим, почему метод
find() удобнее get(),• соберём руками Doctrine безо всяких фреймворков,
• увидим, где суффикс
Interface мешает делать красиво,• поручим одну и ту же задачу Junie и Claude и узнаем, кто лучше.
Залетай в Хобота и смотри.
🔥41👍22❤7👎6🗿2
This media is not supported in your browser
VIEW IN TELEGRAM
The State of PHP 2025 — изучаем результаты опроса JetBrains
Несколько цифр:
• РФ на 3 месте по кол-ву участников опроса,
• 58% опрошенных не собираются уходить с PHP,
• 89% респондентов на PHP 8.x,
• 42% всё ещё не используют инструменты качества кода,
• 32% не пишут тесты.
YouTube | VK Видео
Несколько цифр:
• РФ на 3 месте по кол-ву участников опроса,
• 58% опрошенных не собираются уходить с PHP,
• 89% респондентов на PHP 8.x,
• 42% всё ещё не используют инструменты качества кода,
• 32% не пишут тесты.
YouTube | VK Видео
👍37🔥12❤7
Оценка зрелости инженерных процессов
Алексей Обыскалов вместе с коллегами проводит исследование IT-команд. Оно должно выявить закономерности, которые помогут принимать более эффективные решения.
Ребята уже нашли несколько интересных корреляций:
• между скоростью пайплайнов и качеством code review,
• между алертингом и стабильностью релизов,
• между ролями в команде и удовлетворённостью релизным процессом.
Каждая новая анкета повышает качество данных, отделяя закономерности от шума.
Пройти анкету можно за 10 минут, кроме того, её же можно использовать как мини-чек-лист для оценки зрелости инженерной культуры в своей компании.
https://forms.gle/NszR7VDuXL9sBbVAA
Алексей Обыскалов вместе с коллегами проводит исследование IT-команд. Оно должно выявить закономерности, которые помогут принимать более эффективные решения.
Ребята уже нашли несколько интересных корреляций:
• между скоростью пайплайнов и качеством code review,
• между алертингом и стабильностью релизов,
• между ролями в команде и удовлетворённостью релизным процессом.
Каждая новая анкета повышает качество данных, отделяя закономерности от шума.
Пройти анкету можно за 10 минут, кроме того, её же можно использовать как мини-чек-лист для оценки зрелости инженерной культуры в своей компании.
https://forms.gle/NszR7VDuXL9sBbVAA
Telegram
CTO: Порядок из хаоса
Превращаю IT-хаос в систему:
Легаси? Реанимируем.
Команды? Синхронизируем.
Бизнес? Освободим от операционки.
Ваш СТО-наставник с практикой.
Легаси? Реанимируем.
Команды? Синхронизируем.
Бизнес? Освободим от операционки.
Ваш СТО-наставник с практикой.
👍9❤4
Пых
Thesis Amqp 1.0.0 Многие заметили, что в проекте Thesis уже несколько месяцев подряд происходит какая-то движуха. Если вкратце, мы с Вадимом решили под этим именем выпустить набор современных асинхронных компонентов для PHP, а в будущем, вероятно, и свой…
Каждый, кто пишет на Golang, наверняка слышал про NATS. Это платформа для обмена сообщениями, состоящая из двух основных частей: Core NATS (publish-subscribe с at-most-once гарантией и request-reply) и JetStream (персистентные стримы а-ля Kafka).
Мы написали новый неблокирующий драйвер для NATS под PHP, который поддерживает все основные возможности платформы:
• publish-subscribe,
• request-reply,
• jetstream,
• key-value хранилище,
• объектное хранилище,
• атомарные счётчики на основе CRDT,
• пакетная публикация,
• планировка сообщений.
composer require thesis/nats
$nats = new Nats\Client(Nats\Config::default());
$nats->subscribe('foo.*', static function (Nats\Delivery $delivery): void {
dump("Received message: {$delivery->message->payload}");
});
$nats->publish('foo.bar', new Nats\Message('Hello World!'));
Текущий релиз — 0.2.0, но некоторые уже используют драйвер в продакшне! К мажору шлифанём по мелочи и добавим поддержку NATS Service.
GitHub | Thesis Community | nats.io
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - thesis-php/nats: Non-blocking (fiber based) client for Nats.
Non-blocking (fiber based) client for Nats. Contribute to thesis-php/nats development by creating an account on GitHub.
🔥64👍22❤11👏2
Пых
Кто хочет в эти дни купить слоника Пых в Санкт-Петербурге — заполните форму, чтобы я понимал, сколько взять с собой. https://forms.gle/TmVwGNSwmwktJ5Bd8
Теперь коллекционного слоника Пых, произведённого в рамках краудфандинговой кампании, может купить каждый!
https://www.ozon.ru/product/plyushevyy-slonik-pyh-2985086261/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥39🥴28👍12🖕6❤4🤮3
Пых
Окей, ребята, я вас услышал: цена получилась слишком высокой. Для понимания: это не я решил разбогатеть — это комиссия Озона такая большая (больше трети с каждой продажи).
И сейчас до меня дошло, что те услуги, за которые Озон берёт такой процент, мне вобщем-то не нужны — я могу продавать вам из рук в руки.
Дайте мне несколько дней, я попробую автоматизировать продажи слоников с доставкой через Хобота. Кто заказал — можете отменить.
И сейчас до меня дошло, что те услуги, за которые Озон берёт такой процент, мне вобщем-то не нужны — я могу продавать вам из рук в руки.
Дайте мне несколько дней, я попробую автоматизировать продажи слоников с доставкой через Хобота. Кто заказал — можете отменить.
❤36👍26🔥13🤮4
Наполнение списка при деструктуризации
Иногда из функции надо вернуть кортеж (иммутабельную группу значений), а в DTO смысла нет, потому что это разовая ситуация и непубличное апи.
В этом случае я всегда использую запечатанный list shape, потому что его очень удобно разбирать в переменные при помощи синтаксиса деструктуризации массива:
Сейчас мне потребовалось в цикле раскидать возвращаемые методом значения по двум спискам. Приятно удивился, что при деструктуризации можно использовать не только
Упрощённый пример:
PHPStan | Psalm
Иногда из функции надо вернуть кортеж (иммутабельную группу значений), а в DTO смысла нет, потому что это разовая ситуация и непубличное апи.
В этом случае я всегда использую запечатанный list shape, потому что его очень удобно разбирать в переменные при помощи синтаксиса деструктуризации массива:
[$a, $b] = $tuple.Сейчас мне потребовалось в цикле раскидать возвращаемые методом значения по двум спискам. Приятно удивился, что при деструктуризации можно использовать не только
[$array['key']] = , но и [$array[]] =.Упрощённый пример:
interface Thing
{
/**
* @return list{int, string}
*/
public function resolve(): array;
}
/**
* @param iterable<Thing> $things
*/
function app(iterable $things): void
{
$ints = [];
$strings = [];
foreach ($things as $thing) {
[$ints[], $strings[]] = $thing->resolve();
}
var_dump($ints, $strings);
}
PHPStan | Psalm
🔥65👍37😱16👎5👀4❤2
Нюансы вариадических функций
Копаясь в статанализе в рамках проекта Typhoon, мы про каждую мелочь стараемся думать во всей полноте, чтобы не упустить даже очень редко используемые возможности PHP. Так мы периодически узнаём что-то новое.
Например, есть тип
1. Параметры, передаваемые по ссылке, очевидно, могут иметь значение по умолчанию.
2. Вариадические, очевидно, не могут иметь значения по умолчанию.
3. Могут ли вариадики передаваться по ссылке? Вот тут лично для меня уже неочевидно, потому что я вообще редко что-то передаю по ссылке.
Разбираемся. Вариадические функции добавил Никита Попов в далёком 2013 году (до этого все использовали
Пробуем:
Получается, в параметрах типа
Кстати, обратите внимание: слово "опциональный" не является точным определением для
Копаясь в статанализе в рамках проекта Typhoon, мы про каждую мелочь стараемся думать во всей полноте, чтобы не упустить даже очень редко используемые возможности PHP. Так мы периодически узнаём что-то новое.
Например, есть тип
callable(<params>): <return type>. У параметров есть следующие модификаторы: = (со значением по умолчанию), ... (вариадический), & (передаётся по ссылке). Вопрос: как их можно сочетать?1. Параметры, передаваемые по ссылке, очевидно, могут иметь значение по умолчанию.
2. Вариадические, очевидно, не могут иметь значения по умолчанию.
3. Могут ли вариадики передаваться по ссылке? Вот тут лично для меня уже неочевидно, потому что я вообще редко что-то передаю по ссылке.
Разбираемся. Вариадические функции добавил Никита Попов в далёком 2013 году (до этого все использовали
func_get_args()), и вот что написано в RFC:By-reference capture
The new syntax additionally adds support for capturing variadic arguments by-reference, something that was previously not possible in userland code. Only internal functions could make use of this viaZEND_ACC_PASS_REST_BY_REF.
This would allow implementing functions likesscanf()ormysqli_stmt::bind_param()in userland.
A by-reference capture of variadic arguments is indicated by a&before the ellipsis....
Пробуем:
function increment(int &...$ints): void
{
foreach ($ints as &$int) {
++$int;
}
}
$a = 0;
$b = 100;
increment($a, $b);
var_dump($a, $b); // 1, 101
Получается, в параметрах типа
callable возможны только два сочетания: &... и &=.Кстати, обратите внимание: слово "опциональный" не является точным определением для
= параметра. Опциональные параметры — это те, которые можно не передавать, к ним относятся не только параметры со значением по умолчанию, но и вариадические. Поэтому = однозначно определяется именно как параметр со значением по умолчанию (у нас в коде bool $hasDefault, а не $isOptional). Этот нюанс хорошо прослеживается в нативной рефлексии:
$reflection = new ReflectionParameter('increment', 'ints');
var_dump(
$reflection->isOptional(), // true
$reflection->isDefaultValueAvailable(), // false
);
👍31🔥13😨10❤5
Typhoon учится выводить дженерики
Всю неделю контрибьютил в алгебру типов Typhoon (пока в приватном репо), в частности научился программно решать системы линейных уравнений над типами.
На скриншоте вы видите, как алгебра выводит результат вызова полиморфной функции а-ля
Аналогичный код в PHPStan (выводит верно, но с нерелевантными ошибками) и Scala.
Дальше больше...
Примечание: PHPDoc просто для понимания описываемой сигнатуры, он никак не парсится алгеброй.
Всю неделю контрибьютил в алгебру типов Typhoon (пока в приватном репо), в частности научился программно решать системы линейных уравнений над типами.
На скриншоте вы видите, как алгебра выводит результат вызова полиморфной функции а-ля
array_combine. Причём делает это с анонимной сигнатурой буквально "на весу".Аналогичный код в PHPStan (выводит верно, но с нерелевантными ошибками) и Scala.
Дальше больше...
Примечание: PHPDoc просто для понимания описываемой сигнатуры, он никак не парсится алгеброй.
🔥30👍15🥴8⚡4❤🔥2🤯2😱2❤1
Два простых правила
Вот сколько лет я ни пишу код, без конца убеждаюсь в двух вещах:
1. Если стоит выбор между мутабельностью и иммутабельностью — без раздумий выбирай иммутабельность.
2. Если стоит выбор между наследованием и композицией — без раздумий выбирай композицию.
Каждый раз, когда я выбираю мутабельность, я получаю хрупкую программу с непредсказуемыми сайд-эффектами.
Каждый раз, когда я выбираю наследование, я получаю запутанный код, который трудно переиспользовать (хотя обещали, что будет наоборот) и невозможно читать, не прыгая по нескольки классам с полузащищённым API.
Интересно, что и мутабельность, и наследование осложняют типизацию и привносят костыли:
Я не Егор Бугаенко и не утверждаю, что мутабельность и наследование прям вот совсем не нужны. Но если есть выбор (90% случаев на моей open source практике) — советую воздерживаться.
Вот сколько лет я ни пишу код, без конца убеждаюсь в двух вещах:
1. Если стоит выбор между мутабельностью и иммутабельностью — без раздумий выбирай иммутабельность.
2. Если стоит выбор между наследованием и композицией — без раздумий выбирай композицию.
Каждый раз, когда я выбираю мутабельность, я получаю хрупкую программу с непредсказуемыми сайд-эффектами.
Каждый раз, когда я выбираю наследование, я получаю запутанный код, который трудно переиспользовать (хотя обещали, что будет наоборот) и невозможно читать, не прыгая по нескольки классам с полузащищённым API.
Интересно, что и мутабельность, и наследование осложняют типизацию и привносят костыли:
@self-out, @this-out, @require-extends.Я не Егор Бугаенко и не утверждаю, что мутабельность и наследование прям вот совсем не нужны. Но если есть выбор (90% случаев на моей open source практике) — советую воздерживаться.
💯92👍42🔥11🤔7❤4🫡3
9 полезных плагинов
В блоге JetBrains вышел обзор плагинов Димы Дерепко:
• .gitattributes support
• Git Codeowners
• Cron / Crontab Support
• Sitemap Support
• TempestPHP (поддержка фреймворка автора канала PHP Annotated)
•🪲 Buggregator
• PHP Dump (показывает опкоды и AST)
• FileSystem Info (выводит информацию по папкам и файлам: кол-во файлов, размер, LOC)
• Git Churn (анализирует частоту изменений файлов в Git)
https://blog.jetbrains.com/phpstorm/2025/11/phpstorm-plugins-you-might-not-know/
P.S. Мне Дима тоже периодически предлагает сделать что-то полезное для моих проектов. И у меня уже есть идея!
В блоге JetBrains вышел обзор плагинов Димы Дерепко:
• .gitattributes support
• Git Codeowners
• Cron / Crontab Support
• Sitemap Support
• TempestPHP (поддержка фреймворка автора канала PHP Annotated)
•
• PHP Dump (показывает опкоды и AST)
• FileSystem Info (выводит информацию по папкам и файлам: кол-во файлов, размер, LOC)
• Git Churn (анализирует частоту изменений файлов в Git)
https://blog.jetbrains.com/phpstorm/2025/11/phpstorm-plugins-you-might-not-know/
P.S. Мне Дима тоже периодически предлагает сделать что-то полезное для моих проектов. И у меня уже есть идея!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40🔥18❤9😴5