PHP Fart Time
Давайте представим, что наши приложения — мясорубки: на входе запрос мясо, на выходе ответ фарш. А серверы — приводы этих мясорубок.
Продолжение.
Добавил пару серверов: Pasir и Apache; а также лучшее из комментариев
Добавил пару серверов: Pasir и Apache; а также лучшее из комментариев
1😁37🔥9 5🤮3
#ТоксикСреда
Одна из величайших проблем PHP
Кто голосует за PHP RFC?
Кто решает, каким PHP станет?
А зайдите и посмотрите на RFC по дженерикам и тред обсуждения.
Голосовали ПРОТИВ:
Из PHP Core и Foundation:
- Derick Rethans — Xdebug, release manager.
- Tim Düsterhus — core C-слой.
- Matteo Beccati — core/security.
- Gina Banyard (girgias) — core, автор конкурирующего подхода «Compile-time generics» через монтоморфизацию.
Не Core:
- Rowan Tommins (imsop) — активный участник internals.
- Ben Ramsey — release manager 8.1, автор
- Aleksander Machniak (alec) — Roundcube.
Топят за то, что дженерики должны быть нестираемыми и делать проверки в рантайме. Хотят отложить до PHP 9.
Не высказали позицию: Sara Golemon (pollita), Jakub Zelenka (bukka), Kalle Sommer Nielsen (kalle).
Не из Core, но позицию тоже не объяснили:
- Sebastian Bergmann (sebastian) — автор PHPUnit, дед.
- Volker Dusch (edorian) — свита Себастиана.
- Shivam Mathur (shivam) — setup-php (CI-инфраструктура PHP в GitHub Actions), на PHP не пишет.
- duncan3dc — Craig Duncan, мейнтейнер thephpleague/climate.
- jordikroon — Jordi Kroon, нидерландский backend/DevOps-разработчик. Право голоса — по коммитам в инфраструктуру php.net.
- kguest — Ken Guest, «PEAR guy»: мейнтейнер PEAR-пакетов (Services_OpenStreetMap, Net_IMAP), контрибьютор build-инструмента Phing.
Высказались ЗА:
- Ondřej Mirtes — создатель PHPStan.
- Matthew Brown — создатель Psalm.
- Daniil Gentili — мейнтейнер Psalm.
- Brent Roose — DevRel PhpStorm (JetBrains), Tempest.
- Nicolas Grekas — core Symfony.
- Frederik Bosch (MoneyPHP), Benjamin Außenhofer, Arvids Godjuks — работяги из сообщества.
Из них проголосовал только Nicolas Grekas.
—
Это подтверждает тезис, что
Соглашусь с Брентом из его статьи A generic tragedy, что похрен на то, что дженерики сейчас не приняли.
Меня беспокоит то, что у языка нет дизайнера, нет единого видения.
Почему-то за важные фичи голосуют какие-то деды без всякой аргументации, писатели документации и девопсы.
Да, к настоящим core-разрабам надо прислушиваться, как к технарям-экспертам, но дизайн языка это больше про DX. Чуваки из Core не пишут на PHP.
Вот реально, на списках фичей следующей версии PHP можно ставки делать. Нет дорожной карты. Каждый год хер его знает, что там будет через год.
Как бы Рома Пронский не упрекал меня в душности, я всё равно останусь при своём мнении: текущая система принятия RFC - говно.
PHPF стоило бы заняться именно этим, а не инклюзивностью. Например, найти экспертов в дизайне ЯП (только нормальных экспертов!), составить несколько планов развития и предложить их сообществу, раз без голосования нельзя.
—
Нужен ли нам доброжелательный диктатор на дизайне языка или идти по пути голосований — сложный вопрос. Но я на 100% уверен, что неэкспертов надо убирать из голосований.
Одна из величайших проблем PHP
Кто голосует за PHP RFC?
Кто решает, каким PHP станет?
А зайдите и посмотрите на RFC по дженерикам и тред обсуждения.
Голосовали ПРОТИВ:
Из PHP Core и Foundation:
- Derick Rethans — Xdebug, release manager.
- Tim Düsterhus — core C-слой.
- Matteo Beccati — core/security.
- Gina Banyard (girgias) — core, автор конкурирующего подхода «Compile-time generics» через монтоморфизацию.
Не Core:
- Rowan Tommins (imsop) — активный участник internals.
- Ben Ramsey — release manager 8.1, автор
ramsey/uuid, дед.- Aleksander Machniak (alec) — Roundcube.
Топят за то, что дженерики должны быть нестираемыми и делать проверки в рантайме. Хотят отложить до PHP 9.
Не высказали позицию: Sara Golemon (pollita), Jakub Zelenka (bukka), Kalle Sommer Nielsen (kalle).
Не из Core, но позицию тоже не объяснили:
- Sebastian Bergmann (sebastian) — автор PHPUnit, дед.
- Volker Dusch (edorian) — свита Себастиана.
- Shivam Mathur (shivam) — setup-php (CI-инфраструктура PHP в GitHub Actions), на PHP не пишет.
- duncan3dc — Craig Duncan, мейнтейнер thephpleague/climate.
- jordikroon — Jordi Kroon, нидерландский backend/DevOps-разработчик. Право голоса — по коммитам в инфраструктуру php.net.
- kguest — Ken Guest, «PEAR guy»: мейнтейнер PEAR-пакетов (Services_OpenStreetMap, Net_IMAP), контрибьютор build-инструмента Phing.
Высказались ЗА:
- Ondřej Mirtes — создатель PHPStan.
- Matthew Brown — создатель Psalm.
- Daniil Gentili — мейнтейнер Psalm.
- Brent Roose — DevRel PhpStorm (JetBrains), Tempest.
- Nicolas Grekas — core Symfony.
- Frederik Bosch (MoneyPHP), Benjamin Außenhofer, Arvids Godjuks — работяги из сообщества.
Из них проголосовал только Nicolas Grekas.
—
Это подтверждает тезис, что
Люди, которые будут пользоваться этой функцией каждый день, не голосуют. Голосуют те, кто никогда не напишет Collection<User>
Соглашусь с Брентом из его статьи A generic tragedy, что похрен на то, что дженерики сейчас не приняли.
Меня беспокоит то, что у языка нет дизайнера, нет единого видения.
Почему-то за важные фичи голосуют какие-то деды без всякой аргументации, писатели документации и девопсы.
Да, к настоящим core-разрабам надо прислушиваться, как к технарям-экспертам, но дизайн языка это больше про DX. Чуваки из Core не пишут на PHP.
Вот реально, на списках фичей следующей версии PHP можно ставки делать. Нет дорожной карты. Каждый год хер его знает, что там будет через год.
Как бы Рома Пронский не упрекал меня в душности, я всё равно останусь при своём мнении: текущая система принятия RFC - говно.
PHPF стоило бы заняться именно этим, а не инклюзивностью. Например, найти экспертов в дизайне ЯП (только нормальных экспертов!), составить несколько планов развития и предложить их сообществу, раз без голосования нельзя.
—
Нужен ли нам доброжелательный диктатор на дизайне языка или идти по пути голосований — сложный вопрос. Но я на 100% уверен, что неэкспертов надо убирать из голосований.
1🔥39🤔6 5 5🤬2
Мэтью Браун (автор псалма) сообщает, что перевибрировал Psalm на Rust. Получился Pzoom.
Типа х10 быстрее но хз как писать на него плагины.
Вот песочница.
Позже выяснилось, что ещё один пользователь вибрировал Psalm на Rust. Получился Mir.
Вот песочница.
Куда катится этот мир?
Типа х10 быстрее но хз как писать на него плагины.
Вот песочница.
Позже выяснилось, что ещё один пользователь вибрировал Psalm на Rust. Получился Mir.
Вот песочница.
Куда катится этот мир?
mattbrown.dev
From Psalm to Pzoom
Over a decade ago I started work on Psalm, a static analysis tool for PHP written in PHP. Over the intervening years Psalm added a best-in-class type…
PHP Fart Time
Вероятно, нет вайба.
Мольбы услышаны!
VibePHP
В VibePHP нет парсера. Ваш код никогда не компилируется, он только понимается.
Запросы вместе с кодом передаются в аишку, и возвращается хер знает что.
Код можно писать как угодно: с дженериками, асинком, эмоджами, всратым ТЗ из переписки с заказчиком. AI предполагает, что должен вернуть ваш код, и навибрирывает ответ.
* Для работы нужен токен OpenAI.
VibePHP
В VibePHP нет парсера. Ваш код никогда не компилируется, он только понимается.
Запросы вместе с кодом передаются в аишку, и возвращается хер знает что.
Код можно писать как угодно: с дженериками, асинком, эмоджами, всратым ТЗ из переписки с заказчиком. AI предполагает, что должен вернуть ваш код, и навибрирывает ответ.
| Время выполнения | Задержка | $ / запрос |
|------------------|----------|------------|
| nginx + PHP-FPM | ~1 мс | ~$0.00000x |
| ФранкенПХП | ~1 мс | ~$0.00000x |
| VibePHP | ~7 с | ~$0.0063 |
* Для работы нужен токен OpenAI.
😁35💩5 4🔥3💊2
Сделал группировку тестов в Testo.
Как оказалось с фичёй наследования, которую пользователи просили в PHPUnit, но так и не получили.
Как оказалось с фичёй наследования, которую пользователи просили в PHPUnit, но так и не получили.
php-testo.github.io
Группировка тестов: атрибут #[Group]
Новый атрибут #[Group] в Testo: помечайте тесты строковыми метками, наследуйте группы от родительских классов и запускайте нужные категории флагом --group.
100 21🔥14 7
GitHub
GitHub - roxblnfk/action-vibe-index: GitHub Action to measure the ratio of human-written vs AI-generated code
GitHub Action to measure the ratio of human-written vs AI-generated code - roxblnfk/action-vibe-index
Продолжаем тему вайба.
Для кого-то нет вайба в пайп-операторе. Кто-то люто вайбкодит. А тут ещё и VibePHP появился.
Да что это за вайб такой? Как его пощупать? Как понять, где вайба больше и хорошо ли это вообще?
Теперь вайб можно померить!
На выходных я навибрировал Github Action, замеряющий Индекс Вайба в репозитории.
Весь отчёт умещается в компактный бейдж с оценкой от 0 до 10: чем больше число, тем более весомый вклад AI и авто-ботов относительно человеческого.
То есть просто считается доля коммитов (из последних 250) и строчек кода за (со)авторством ботов относительно всей репы.
Естественно, оценка может расходиться с реальностью:
- соавторство агентов удаляется из коммитов — меньше вайб.
- статистическая инерция.
- индекс не отображает качество вайба.
Как трактовать индекс — решать вам.
Например, сам пакет Vibe Index имеет индекс
Не дотянул до ровных 8.0 баллов просто из-за того, что первые коммиты были нагенерены через Haiku, который не ставит соавторство.
Это не критическая инфраструктура и даже не зависимость в
Давайте посмотрим, где вайба больше.
- PHP:
Серверы:
- FrankenPHP:
- Folk:
- RoadRunner —
Тестирование:
- Testo:
- PHPUnit:
- Pest:
Пока писал этот пост, Vibe Index стал ещё и пакетом
Для кого-то нет вайба в пайп-операторе. Кто-то люто вайбкодит. А тут ещё и VibePHP появился.
Да что это за вайб такой? Как его пощупать? Как понять, где вайба больше и хорошо ли это вообще?
Теперь вайб можно померить!
На выходных я навибрировал Github Action, замеряющий Индекс Вайба в репозитории.
Весь отчёт умещается в компактный бейдж с оценкой от 0 до 10: чем больше число, тем более весомый вклад AI и авто-ботов относительно человеческого.
То есть просто считается доля коммитов (из последних 250) и строчек кода за (со)авторством ботов относительно всей репы.
0.0 — всё делается вручную.4.0 — сбалансированный подход.8.0 — код вибрируется, но с участием человека.10 — здесь людей уже нет.Естественно, оценка может расходиться с реальностью:
- соавторство агентов удаляется из коммитов — меньше вайб.
- статистическая инерция.
- индекс не отображает качество вайба.
Как трактовать индекс — решать вам.
Например, сам пакет Vibe Index имеет индекс
7.5. Он навибрирован на 100% агентами в редакторе ZED с моим пассивным ревью через чат.Не дотянул до ровных 8.0 баллов просто из-за того, что первые коммиты были нагенерены через Haiku, который не ставит соавторство.
Это не критическая инфраструктура и даже не зависимость в
node_modules, поэтому требования к качеству кода минимальные. А значит высокий индекс вайба здесь только на пользу: скорость фиксов или появления новых фичей скорее всего не будет проблемой.Давайте посмотрим, где вайба больше.
- PHP:
0.0 — подозрительно.Серверы:
- FrankenPHP:
2.7- Folk:
5.2 — думал, будет больше.- RoadRunner —
1.5 dependabot на go-bump.Тестирование:
- Testo:
1.2 — занижено, т.к. часто удалял соавторство при сквоше.- PHPUnit:
5.0 — куча коммитов от авто-ботов.- Pest:
0.1 — да кого вы пытаетесь обмануть?Пока писал этот пост, Vibe Index стал ещё и пакетом
npm. Можно прочекать индекс вайба любого репозитория, например, вот так: npx @roxblnfk/vibe-index spiral/framework😁20🔥10🤯1💩1
Качаем и тестируем облегчённый билд PHPStorm.
- Оптимизирован запуск и порядок индексации.
- Куча микрооптимизаций.
- Меньше кнопочек.
- Из коробки меньше лишних плагинов.
- На базе EAP.
В общем, работает быстрее.
С фидбеком, как и всегда, можно идти👩💻 сюда.
- Оптимизирован запуск и порядок индексации.
- Куча микрооптимизаций.
- Меньше кнопочек.
- Из коробки меньше лишних плагинов.
- На базе EAP.
В общем, работает быстрее.
С фидбеком, как и всегда, можно идти
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Новости перспективных асинков.
⛸️ TrueNativePHP
Только что TrueAsync успешно собрался на Андроид со всем своим багажом, корутинами, CURL, таймерами. Если кто-то хотел создать аналог ReactNative — самое время!
Автор NativePHP уже брызжет слюной: с бозоном не договорился, может тут чего выйдет :)
⛸️ WebSocket
Не прошло и 20 лет, а у PHP есть поддержка WebSocket, и даже на HTTP2. Но только под TrueAsync.
Документация уже готовится к вечеру. Следите за обновлениями.
⛸️ По-человечеки
В нашей группе (в канале Rapira)уважаемый собутыльник автор самого душевного и вайбового проекта Folk, Энди, рассказывает про новые фичи:
- Очереди по-человечески с портом на все фреймворки.
- Стриминг для больших запросов и ответов: чтение чанками, мультипарты, стриминг ответов.
Призываю активно участвовать в тестировании, ребята запрашивают фидбек.
Только что TrueAsync успешно собрался на Андроид со всем своим багажом, корутинами, CURL, таймерами. Если кто-то хотел создать аналог ReactNative — самое время!
Пришлось сделать небольшой патч в PHP-ядре ради такой штуки. Но учитывая, что проект и так весь в патчах по сути считаем, что это официальный PHP + Андроид проект! То есть ядро!
Автор NativePHP уже брызжет слюной: с бозоном не договорился, может тут чего выйдет :)
Не прошло и 20 лет, а у PHP есть поддержка WebSocket, и даже на HTTP2. Но только под TrueAsync.
Если честно, протокол устарел, да и SSE отлично работает. Нужно добавить что-то современнее.
Документация уже готовится к вечеру. Следите за обновлениями.
В нашей группе (в канале Rapira)
- Очереди по-человечески с портом на все фреймворки.
- Стриминг для больших запросов и ответов: чтение чанками, мультипарты, стриминг ответов.
Призываю активно участвовать в тестировании, ребята запрашивают фидбек.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17 4😁3
Пацанский стиль
В продолжение поста из канала Пых.
———
Вот есть Йода-стиль
Он для додиков, чтобы случайно присваивание в
———
А
Читается также, как "PVP или зассал!".
А ещё это классика из PHP 4:
Смотрите, как компактно и понятно выглядит лапша валидации (узкая телега может испортить восприятие. Лучше смотреть на гитхабе или в редакторе):
В продолжение поста из канала Пых.
———
Вот есть Йода-стиль
if (<scalar> === <var>), который в симфе издревле был за стандарт (хз как сейчас).Он для додиков, чтобы случайно присваивание в
if не записали.if (false = $x) упадёт в рантайме, в отличии от if ($x = false), и тем самым предупредит, что автор забыл ещё одно равно (а лучше два).———
А
<cond> and/or <act> — немного другое. Это пацанский стиль, из нулевых.Читается также, как "PVP или зассал!".
А ещё это классика из PHP 4:
mysql_connect($host, $user, $pass) or die("could not connect");Смотрите, как компактно и понятно выглядит лапша валидации (узкая телега может испортить восприятие. Лучше смотреть на гитхабе или в редакторе):
$warmup >= 0 or throw new \InvalidArgumentException('Warmup must be greater than or equal to 0.');
\count($callables) >= 1 or throw new \InvalidArgumentException('At least one callable must be provided.');
$calls > 0 or throw new \InvalidArgumentException('Calls must be greater than 0.');
$iterations > 0 or throw new \InvalidArgumentException('Iterations must be greater than 0.');💊16🔥14😁14 4🤔2💩1
Forwarded from Пыхник’26 — PHP на природе
Программа Пыхника’26
У нас сразу три отличные новости!
🔥 Мы расширили программу: вместо запланированных восьми секций на Пыхнике’26 будет одиннадцать. Все доклады из шорт-листа оказались слишком крутыми, и мы решили никого не вычёркивать. Цена билета та же.
🥳 Онлайн-доклады пройдут в прямом эфире с 7 по 9 сентября. Пыхник’26 теперь не однодневное мероприятие, а целая PHP-неделя, которая завершится большой офлайн-встречей 11 сентября в Art Village.
🤩 Первый онлайн-доклад Дмитрия Dantes будет открытым! Посмотреть его смогут все желающие.
7 сентября📹
• Компилируемый PHP: перспективы и возможности — Дмитрий Dantes
8 сентября📹
• AI-first архитектура для приложений на PHP — Дмитрий Кириллов
• Возвращаем gRPC в PHP — Вадим Занфир
9 сентября📹
• Testo: тестирование со вкусом хинкали — Алексей Гагарин
11 сентября🏠
• Request-Reply без ожидания и блокировок — Валентин Удальцов
• От скучной генерации к инженерии с ИИ — Данил Щуцкий
• Ломаем PHP-системы, чтобы они не падали — Маргарита Моногарова
• PHP в бинарнике на примере YiiPress — Александр Макаров
• Архитектура PHP-приложений с внешними интеграциями — Олег Мифле
• AI-трансформация PHP-команды: путь, процессы и ошибки — Денис Кукуреко
• Флипчарт-сессия «Архитектурный экстремизм»
Программа готова — дальше дело за вами: https://planeta.ru/campaigns/pyhnik26
Билет теперь можно оплатить от компании — присылайте на conf@phpyh.ru тип, количество, реквизиты.
У нас сразу три отличные новости!
7 сентября
• Компилируемый PHP: перспективы и возможности — Дмитрий Dantes
8 сентября
• AI-first архитектура для приложений на PHP — Дмитрий Кириллов
• Возвращаем gRPC в PHP — Вадим Занфир
9 сентября
• Testo: тестирование со вкусом хинкали — Алексей Гагарин
11 сентября
• Request-Reply без ожидания и блокировок — Валентин Удальцов
• От скучной генерации к инженерии с ИИ — Данил Щуцкий
• Ломаем PHP-системы, чтобы они не падали — Маргарита Моногарова
• PHP в бинарнике на примере YiiPress — Александр Макаров
• Архитектура PHP-приложений с внешними интеграциями — Олег Мифле
• AI-трансформация PHP-команды: путь, процессы и ошибки — Денис Кукуреко
• Флипчарт-сессия «Архитектурный экстремизм»
Программа готова — дальше дело за вами: https://planeta.ru/campaigns/pyhnik26
Билет теперь можно оплатить от компании — присылайте на conf@phpyh.ru тип, количество, реквизиты.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥11 4 1
#ТоксикСреда
На днях я запостил в блоге Testo отчёт о том, как я сравнивал тестовые фреймворки в проекте stitcher.io.
В той работе тесты на PHPUnit работали слишком медленно и я полез разбираться. Одна из причин замедления — атрибут
Статья ушла в релиз и её даже кто-то прочитал. А потом в PHPUnit появилась вот эта ишуя.
"У меня в голове не укладывается, что человек, впервые обнаруживший эту ошибку, упомянул о ней только в своем блоге, а не создал тикет",
Пишет Себастиан.
Я даже и не подумал, что это баг. Скорее мысли были "а нафига так сделано?".
В общем, сегодня хейтим меня, ибо я, получается, поступил как мудак.
Из хорошего для деда: он прочитал отличную статью.
На днях я запостил в блоге Testo отчёт о том, как я сравнивал тестовые фреймворки в проекте stitcher.io.
В той работе тесты на PHPUnit работали слишком медленно и я полез разбираться. Одна из причин замедления — атрибут
#[Before] на методе setUp() приводил к тому, что setUp() вызывался дважды (по конвенции именования и по атрибуту).Статья ушла в релиз и её даже кто-то прочитал. А потом в PHPUnit появилась вот эта ишуя.
"У меня в голове не укладывается, что человек, впервые обнаруживший эту ошибку, упомянул о ней только в своем блоге, а не создал тикет",
Пишет Себастиан.
Я даже и не подумал, что это баг. Скорее мысли были "а нафига так сделано?".
В общем, сегодня хейтим меня, ибо я, получается, поступил как мудак.
Из хорошего для деда: он прочитал отличную статью.
php-testo.github.io
Что быстрее
Бенчмарк трёх раннеров на одной кодовой базе: Tempest Testing, PHPUnit и Testo. Раннеры разошлись на пару секунд, а неудачная настройка тестов превращала 20 секунд в 5 минут.
😁41🔥9💊7 2
Jetbrains
The State of PHP 2026
The State of PHP 2026.
Давайте тоже заполним этот опросник от JB и напомним миру, что есть такие замечательные опенсорсы, как Spiral, Yii3, Testo, Buggregator, RoadRunner и Rapira.