Так, фартаны. #ТоксикСреда. И новости подходящие :)
Пых: FrankenPHP переходит под крыло PHP!
Новость в блоге Саши Макарова
Не то, что это неожиданность, но давайтеобсудим похейтим.
Какую проблему в PHP решали?
Пыхе нужен свой сервер со всеми современными свистоперделками (TLS, WebSockets, Early Hints, HTTP 1, 2, 3, 4g, 5g...). По понятным причинам FPM, как и встроенный dev-сервер, тут не подходят. Первый тупо менеджит воркеры и требует HTTP сервер типа nginx/angie, а второй не имеет свистоперделок.
Взяли франкен из-за Caddy. Получили свой сервер? Вообще, нет.
По мне, получили этакий костыль, который теперь будет отжирать внимание разработчиков ядра и, возможно, средства из фонда. Я бы не назвал это своим сервером. Просто нестабильный бридж на Caddy.
Знаю, что @samdark постоянно говорит, что у него франкен работает уже год, но не в воркер-режиме (т.е. как FPM), но стабильно. Если чутка подкопаться, то выяснится, что были кейсы с сегфолтами или отвалилось 50% статики. В общем тут вопрос терминологии:
- потерял запросы на сегфолте — нормально!
- "кадди отлетает наглухо при любом фризе скрипта" — нормально!
- отвалилась статика — тоже нормально!
Самый смак в том, что ты не можешь на это повлиять. Ведь причина не в высокой нагрузке, не в настройке окружения, не в ошибке в коде приложения. Тупо нестабильный сервер.
Какие были альтернативы?
Решил бы RoadRunner проблему? Нет. Он как бы в стороне, никому не мешает, и нет технической необходимости тащить его под крыло PHP, т.к. он не прибит к пыхе гвоздями.
Забавно, что RoadRunner — language-агностик решение, но решает проблемы именно пыхи.
Да и репозиториев много, переносить долго. В случае RR лучшим решением было бы сотрудничество или спонсирование, т.к. RR существует только в интересах PHP.
Если бы Swoole стал официальной частью пыхи, было бы интереснее. Родной сишный стек. Интероп нулевой. И RFC на TrueAsync был бы максимально в тему, т.к. половина костылей внутри свули отвалилась бы.
Походу, не договорились. Переход под крыло PHP означал бы и смещение контроля в сторону PHP. А там разброд: за RFC голосуют не только спецы, а вообще кто попало. Некоторые из них даже на PHP не пишут. Я бы на месте китайцев тоже отказался🤔
Летом-осенью должно выйти решение от Angie (здесь могла быть Rapira) — такая же тесная интеграция в пыху, как франкен, но с более тонким и стабильным интеропом (не cgo). Но это часть продукта angie и под крыло PHP оно точно не ушло бы, ведь на нём скорее всего будет какая-то монетизация.
Выбирая себе сервер, между франкеном и Angie я бы выбрал Angie.
Выводы
Вот и получилось, что взяли на безрыбье. Зачем, если проблему не решили?
Набрать классов, набрать бета-тестеров, набрать спонсоров или из жалости.
Было бы неплохо, если бы Дунглас тащил франкен не в одно рыло, но я сомневаюсь, что это изменится.
Как итог: Дунглас становится лучшим инжектором костылей 21 века!
О да: Mercure, Франкен и воркараунды для файберов... да ещё и продавил это всё в массы.
Мой кумир!😐
Пых: FrankenPHP переходит под крыло PHP!
Новость в блоге Саши Макарова
Не то, что это неожиданность, но давайте
Какую проблему в PHP решали?
Пыхе нужен свой сервер со всеми современными свистоперделками (TLS, WebSockets, Early Hints, HTTP 1, 2, 3, 4g, 5g...). По понятным причинам FPM, как и встроенный dev-сервер, тут не подходят. Первый тупо менеджит воркеры и требует HTTP сервер типа nginx/angie, а второй не имеет свистоперделок.
Взяли франкен из-за Caddy. Получили свой сервер? Вообще, нет.
По мне, получили этакий костыль, который теперь будет отжирать внимание разработчиков ядра и, возможно, средства из фонда. Я бы не назвал это своим сервером. Просто нестабильный бридж на Caddy.
Знаю, что @samdark постоянно говорит, что у него франкен работает уже год, но не в воркер-режиме (т.е. как FPM), но стабильно. Если чутка подкопаться, то выяснится, что были кейсы с сегфолтами или отвалилось 50% статики. В общем тут вопрос терминологии:
- потерял запросы на сегфолте — нормально!
- "кадди отлетает наглухо при любом фризе скрипта" — нормально!
- отвалилась статика — тоже нормально!
Самый смак в том, что ты не можешь на это повлиять. Ведь причина не в высокой нагрузке, не в настройке окружения, не в ошибке в коде приложения. Тупо нестабильный сервер.
Какие были альтернативы?
Решил бы RoadRunner проблему? Нет. Он как бы в стороне, никому не мешает, и нет технической необходимости тащить его под крыло PHP, т.к. он не прибит к пыхе гвоздями.
Забавно, что RoadRunner — language-агностик решение, но решает проблемы именно пыхи.
Да и репозиториев много, переносить долго. В случае RR лучшим решением было бы сотрудничество или спонсирование, т.к. RR существует только в интересах PHP.
Если бы Swoole стал официальной частью пыхи, было бы интереснее. Родной сишный стек. Интероп нулевой. И RFC на TrueAsync был бы максимально в тему, т.к. половина костылей внутри свули отвалилась бы.
Походу, не договорились. Переход под крыло PHP означал бы и смещение контроля в сторону PHP. А там разброд: за RFC голосуют не только спецы, а вообще кто попало. Некоторые из них даже на PHP не пишут. Я бы на месте китайцев тоже отказался
Летом-осенью должно выйти решение от Angie (здесь могла быть Rapira) — такая же тесная интеграция в пыху, как франкен, но с более тонким и стабильным интеропом (не cgo). Но это часть продукта angie и под крыло PHP оно точно не ушло бы, ведь на нём скорее всего будет какая-то монетизация.
Выбирая себе сервер, между франкеном и Angie я бы выбрал Angie.
Выводы
Вот и получилось, что взяли на безрыбье. Зачем, если проблему не решили?
Набрать классов, набрать бета-тестеров, набрать спонсоров или из жалости.
Было бы неплохо, если бы Дунглас тащил франкен не в одно рыло, но я сомневаюсь, что это изменится.
Как итог: Дунглас становится лучшим инжектором костылей 21 века!
О да: Mercure, Франкен и воркараунды для файберов... да ещё и продавил это всё в массы.
Мой кумир!
Please open Telegram to view this post
VIEW IN TELEGRAM
#ТоксикСреда, чюваки.
⚠️ Внимание: в посте присутствует мат.
На прошлом #RandomBeer, кроме прочего, зашёл разговор за важность умения посылать наху й.
В одном кейсе у посылающего вырастала ЗП после каждого посылания. В другом кейсе важный скилл помогал не становиться "дежурной жопой" при разборах полётов.
Отмечу, что посылание наху й может помочь и в, казалось бы, этичном и альтруистичном опенсорсе: важно отклонять запросы на фичи и не кидаться на каждые сообщения о баге или призывы о помощи:
- Фичами, не вписывающимися в видение проекта, можно загубить идею или скатиться в комбайн типа Winamp или Nero. Может оказаться так, что эта фича нужна только одному проценту пользователей, которые даже не поддерживают проект.
- Баги могут оказаться не багами, а результатом неправильного использования.
- Забивая на приоритетные задачи можно так и не развить проект. И это не тоже самое, что "сначала пройду все побочки, а потом основной квест".
Поэтому мейнтейнерам на заметку: видишь утопающего — мысленно послал наху й и дальше спокойно делаешь приоритетные задачи. Авось сообщество поможет, или утопающий всё-же найдёт проблему на своей стороне или тупо прочитает доку. В общем оно может и само как-то разрулится.
К сожалению, я вспоминаю об этом правиле только когда у самого жопа горит.
Призываю в комментах поделиться опытом применения такого фундаментального навыка в контексте IT.
⚠️ Внимание: в посте присутствует мат.
На прошлом #RandomBeer, кроме прочего, зашёл разговор за важность умения посылать н
В одном кейсе у посылающего вырастала ЗП после каждого посылания. В другом кейсе важный скилл помогал не становиться "дежурной жопой" при разборах полётов.
"Дежурная жопа" — это человек, на которого всегда сваливают всю грязную работу, неприятные обязанности и проблемы, которые никто другой решать не хочет. Это тот, кто вечно "крайний", кому достаются все шишки и кто разгребает последствия чужих косяков, потому что кто-то же должен этим заниматься.
Отмечу, что посылание н
- Фичами, не вписывающимися в видение проекта, можно загубить идею или скатиться в комбайн типа Winamp или Nero. Может оказаться так, что эта фича нужна только одному проценту пользователей, которые даже не поддерживают проект.
- Баги могут оказаться не багами, а результатом неправильного использования.
- Забивая на приоритетные задачи можно так и не развить проект. И это не тоже самое, что "сначала пройду все побочки, а потом основной квест".
Поэтому мейнтейнерам на заметку: видишь утопающего — мысленно послал н
К сожалению, я вспоминаю об этом правиле только когда у самого жопа горит.
Призываю в комментах поделиться опытом применения такого фундаментального навыка в контексте IT.
1😁27 13🔥1🤬1
Очередная #ТоксикСреда.
Как не хотелось не трогать сам PHP, но придётся, потому что моя жепь с этого немного подгорела на #RandomBeer в предыдущую пятницу.
PHP Lazy Objects #Article
Как не хотелось не трогать сам PHP, но придётся, потому что моя жепь с этого немного подгорела на #RandomBeer в предыдущую пятницу.
PHP Lazy Objects #Article
triangular-octopus-0f6 on Notion
PHP Lazy Objects | Notion
В PHP 8.4 добавили ленивые объекты и прокси (RFC , дока).
#ТоксикСреда, фартаны. А значит пришло время опубликовать рецензию от анонимного фартана на обзор 🌶 POVILAS NEW STARTER KIT (Подправил только грамматику):
Такой пересказ много информативнее, чем от современных LLM 😹
Я сижу на реддитах, твиттерах и в разных En чатах; вижу разные видосы и доклады.
И я вам ответственно заявляю: уровень технического материала многократно выше в Ru сообществе, чем в En!
Про статьи говорить сложно: раньше жемчужины попадались и тут и там, однако сейчас всё наполнилось AI-сгенерированным шлаком и качество сильно просело везде.
Так что давайте скажем спасибо Д. Елисееву, В. Удальцову, П. Бучневу, Д. Щуцкому, Д. Кириллову, К. Несмеянову, С. Пантелееву, всей подлодке, участникам Пыхапов и PHPRussia, и другим ребятам, которые остаются с нами и делают классный контент! Ну и мне, если останется.
Бля , ну какая же это хуйня !
Похоже на линч, только он там разбирает пакет Повиласа. И все что он сделал, это: посмотрел на композер, доеба лся к версии PHP 8.2, мол в Laravel 8.3, пошёл проверить/показать и оказалось, что там тоже 8.2. Потом зашел в дашборд и закончил на этом.
Большую часть времени он нес хуйню .
Такой пересказ много информативнее, чем от современных LLM 😹
Я сижу на реддитах, твиттерах и в разных En чатах; вижу разные видосы и доклады.
И я вам ответственно заявляю: уровень технического материала многократно выше в Ru сообществе, чем в En!
Про статьи говорить сложно: раньше жемчужины попадались и тут и там, однако сейчас всё наполнилось AI-сгенерированным шлаком и качество сильно просело везде.
Так что давайте скажем спасибо Д. Елисееву, В. Удальцову, П. Бучневу, Д. Щуцкому, Д. Кириллову, К. Несмеянову, С. Пантелееву, всей подлодке, участникам Пыхапов и PHPRussia, и другим ребятам, которые остаются с нами и делают классный контент! Ну и мне, если останется.
🔥107 22 10
В нашей ламповой группе появился тред по охоте за головами (если ссылка не работает, то заходим сюда и клацаем 👨💻 HR).
Последнее время всё чаще слышу от разработчиков, что они ищут работу.
Усугубляющие факторы:
- AI угрожает заменить всех разработчиков от мидла и ниже.
- Те разработчики, что выше мидла, неизбежно скуфеют. В PHP вообще остались одни старики. А эйджизм нынче популярен.
Работу я вам не предлагаю, но площадку для нытья — почему бы и нет? #ТоксикСреда всё-таки!
Последнее время всё чаще слышу от разработчиков, что они ищут работу.
Усугубляющие факторы:
- AI угрожает заменить всех разработчиков от мидла и ниже.
- Те разработчики, что выше мидла, неизбежно скуфеют. В PHP вообще остались одни старики. А эйджизм нынче популярен.
Работу я вам не предлагаю, но площадку для нытья — почему бы и нет? #ТоксикСреда всё-таки!
Please open Telegram to view this post
VIEW IN TELEGRAM
Вчера прошёл PHPVerse.
Были пара хороших докладов (про MCP и PHP Foundation) и тонна маркетинга.
А сегодня #ТоксикСреда.
Тон задаёт Nuno Maduro, который считает, что 100% PHP разработчиков мечтают о функции
У меня нет особых сомнений, что этого хотят >95% его фанатов, но зачем это проецировать на нормальных людей?
Там даже нашёлся подписчик, который забыл, что великий ларовский
Давайте накидаем идей для PHP Foundation, чтобы
Напоминаю, что функция
Были пара хороших докладов (про MCP и PHP Foundation) и тонна маркетинга.
А сегодня #ТоксикСреда.
Тон задаёт Nuno Maduro, который считает, что 100% PHP разработчиков мечтают о функции
dd() в ядре.У меня нет особых сомнений, что этого хотят >95% его фанатов, но зачем это проецировать на нормальных людей?
Там даже нашёлся подписчик, который забыл, что великий ларовский
dd() на самом деле из Symfony.Давайте накидаем идей для PHP Foundation, чтобы
dd() никогда не попал в ядро.Напоминаю, что функция
fart() уже почти в ядре, осталось только сделать RFC.* В догонку к #ТоксикСреда
Преданный подписчик и фанат Нуно продолжает вести наблюдение.
Бранные слова заменил аналогами.
———
Вчера в перделке компетентные профессионалы вспомнили про хайповый нынче подход SOSAL. Из статьи:
А ещё вчера по работе мне довелось поближе познакомиться с RAFT.
И как-то это всё сложилось в желание написать, что название — всегда важно.
Вот представьте:
🔥 Алгоритм назывался бы не RAFT, а FART. Тогда спеку читали бы через смех, но от того она и запомнилась бы лучше. FART over cluster.
🔥 Наш канал назывался бы PHP RAFT TIME. Да я бы сам от него отписался!
🔥 А Buggregator был бы, прости хоспаде, Ray Server или каким ни будь Error Catcher. Без изюминки и характера.
Преданный подписчик и фанат Нуно продолжает вести наблюдение.
Бранные слова заменил аналогами.
Ещё этот посмотрел и поржал.
он делает код ревью, х*** [проекта] на пять строчек и говорит "как же это классно, когда все классы разложены по типам по папочкам", типа модели в одной папочке, контроллеры — в другой. Зашел в модели и видишь все модели и понимаешь как приложение устроено.
Он еще своими экшенами подз*** [надоел].
Короче, это — не синьорное ревью, это — говноревью, где чел просто смотрит на код и сверяет его с тем, как в доке L*** [фреймворка для новичков]. Да это б*** [вообще] не ревью!
———
Вчера в перделке компетентные профессионалы вспомнили про хайповый нынче подход SOSAL. Из статьи:
Для меня название – это не самое важное в подходе, более важным критерием оценки является эффективность и возможность оптимизации процессов в команде. Были также предложены различные варианты названия, такие как LASSO и LASOS.
А ещё вчера по работе мне довелось поближе познакомиться с RAFT.
И как-то это всё сложилось в желание написать, что название — всегда важно.
Вот представьте:
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - phpstreamserver/phpstreamserver: PHPStreamServer is a high-performance PHP application server and process manager written…
PHPStreamServer is a high-performance PHP application server and process manager written in PHP. - phpstreamserver/phpstreamserver
#ТоксикСреда
Помните такой журнальчик "В мире PHP"? В выпуске №2 я в шутку писал следующее:
Я думал, что он просто умрёт тихой смертью, особенно на фоне втаскивания FrankenPHP в кор... но нет! Пару дней назад вышел PHPStreamServer 0.7.0, а сегодня он уже собирает овер дохера лайков на Reddit.
Автор пишет:
Ну, что тут сказать... удачи и земля пухом! Впереди чувака ждёт самое интересное, т.к. сейчас в бандле IO операции пока что блокирующие.
Как раз сегодня смотрел на Symfony HTTP Kernel и прифигел с этого лютого говнокода.
Я, значит, что-то там пытаюсь улучшить в бенчах TechEmpower: смотрю на говно в официальных бандлах и костыли в неофициальных, и везде то лишняя конвертация в PSR-7, то просто лишний код, то какая-то херня с рефлексией, то ещё какие-то навороты в цикле запросов.
И всё это из-за того, что весь HTTP Foundation написан через жопу. Вызовы
Если и любить фрейморк только за доку, то есть и более достойные альтернативы.
Не знаю, как у вас, но у меня с каждым заходом в код симфы или RFC от симфонистов укрепляется мнение, что FrankenPHP активно зафорсился разработчиками Symfony только для того, чтобы их говнокод смог нормально работать в современном мире. И чтобы никто не сказал, что франкен на самом деле – говно, они специально не рефакторят код фреймворка, замедляя этим другие рантаймы.
Возможно, это не умышлено и симфонисты просто попали в замкнутый круг костылей:
- "сейчас сделаем костыль, а потом сделаем нормально";
- это "потом" не наступает;
- предыдущий костыль подпирают другим костылём и всё начинается сначала.
Но как-то не складно.
Помните такой журнальчик "В мире PHP"? В выпуске №2 я в шутку писал следующее:
RoadRunner скоро будет не нужен, т.к. будет переписан с этого медленного Golang на PHP. Наконец то! Встречаем PHPStreamServer. Здесь пока только HTTP плагин, но, надеюсь, всё будет.
Я думал, что он просто умрёт тихой смертью, особенно на фоне втаскивания FrankenPHP в кор... но нет! Пару дней назад вышел PHPStreamServer 0.7.0, а сегодня он уже собирает овер дохера лайков на Reddit.
Автор пишет:
Для меня сейчас это попытка создать полностью (на 100%) асинхронное приложение на Symfony... Вероятно, можно было бы интегрировать и Laravel, но я так не думаю.
Ну, что тут сказать... удачи и земля пухом! Впереди чувака ждёт самое интересное, т.к. сейчас в бандле IO операции пока что блокирующие.
Как раз сегодня смотрел на Symfony HTTP Kernel и прифигел с этого лютого говнокода.
Я, значит, что-то там пытаюсь улучшить в бенчах TechEmpower: смотрю на говно в официальных бандлах и костыли в неофициальных, и везде то лишняя конвертация в PSR-7, то просто лишний код, то какая-то херня с рефлексией, то ещё какие-то навороты в цикле запросов.
И всё это из-за того, что весь HTTP Foundation написан через жопу. Вызовы
echo захардкожены в приватных методах, всё негибко и максимально всрато.Главное в симфони пакетах не смотреть код! Если читать доку исключительно, то симфа отличная.
Кирилл Несмеянов
Если и любить фрейморк только за доку, то есть и более достойные альтернативы.
Не знаю, как у вас, но у меня с каждым заходом в код симфы или RFC от симфонистов укрепляется мнение, что FrankenPHP активно зафорсился разработчиками Symfony только для того, чтобы их говнокод смог нормально работать в современном мире. И чтобы никто не сказал, что франкен на самом деле – говно, они специально не рефакторят код фреймворка, замедляя этим другие рантаймы.
Возможно, это не умышлено и симфонисты просто попали в замкнутый круг костылей:
- "сейчас сделаем костыль, а потом сделаем нормально";
- это "потом" не наступает;
- предыдущий костыль подпирают другим костылём и всё начинается сначала.
Но как-то не складно.
1 27🔥7
#ТоксикСреда, фартаны.
Всех нас уже изряднозаебдостали отовсюду вылезающие конструкторы MCP-серверов на PHP.
Предлагаю быстро пройтись по каждому MCP SDK, который приходит на ум.
1. symfony/mcp-bundle — бридж на symfony/mcp-sdk (бывший php-llm/mcp-sdk).
Здесь тулзы описываются дедовскими методами: типа JSON-schema через PHP-массивы. Кто-то скажет "низкоуровнево", я скажу "всрато". Не ведитесь на бренд, там всё из говна и палок.
Кстати, если вы всё ещё верите в Symfony и хотите как-то исправить этот AI Platform, то записывайтесь на хакатон, а то они уже совсем отчаялись.
2. logiscape/mcp-sdk-php — использовался на практике в CTX. HTTP Transport нормальный (портирован с Python SDK), но роутер — говно: RegisterHandler руками, угадываешь параметры, никаких мидлварей. Пришлось много переписывать. Архитектура не хорошая и не плохая (никакая). Такое бывает, когда бездумно переписываешь с Python.
3. pronskiy/mcp — от Романа Пронского.
По доке выглядит удобно и минималистично, но не для сложных задач.
Рома хайпнул, разработка заморожена. Сделано поверх
4. laravel/mcp — кажется, Laravel подсмотрели решение у Ромы, но что-то пошло не так и у них получилась хуйня неюзабельная.
Схемы создаются через громоздкий билдер, где необходимо руками описывать каждое поле. LLM возвращает массив, и дальше сам разбирайся: никаких DTO, никакой валидации.
Подходит только для Hello World проектов. Можно сразу скипать.
5. php-mcp/server — MCP из Нигерии.
Выглядит прилично: схемы генерируются из аргументов методов с атрибутами, есть invocable классы. Но дьявол в деталях: DTO превращает в "type object", собственный JSON-schema валидатор строже стандарта, handler фильтрует аргументы и теряет данные.
Чтобы это заработало нормально, пришлось экстендить половину internal классов. Интеграция на пороховой бочке 👇
6. spiral/mcp-server — обвязка над
Решены ключевые проблемы базовой и других библиотек из подборки: вместо громоздких функций с десятками аргументов или всратых массивов используются DTO с атрибутами. По ним обнаруживаются тулзы и из них же генерируется JSON-схема через spiral/json-schema-generator. Входящие данные маппятся через Valinor с валидацией.
Подключается одним bootloader'ом, легко настраивается и интегрируется с любым сервисом.
Общая проблема многих библиотек в том, что ими сами же авторы и не пользуются: делают на волне хайпа простейший MVP, а потом рассказывают, что можно решить любые задачи.
Берёшь такую херню для интеграции с Task manager, где надо создавать задачи с подзадачами (~10 полей с вложенными DTO и валидацией), понимаешь что нужно что-то другое. Это не тот кейс из доки типа "тут пара аргументов
В общем, спасибо всем пацанам, которые тащат нормальные пакеты, и тем, кто им помогает ❤️
Всех нас уже изрядно
Предлагаю быстро пройтись по каждому MCP SDK, который приходит на ум.
1. symfony/mcp-bundle — бридж на symfony/mcp-sdk (бывший php-llm/mcp-sdk).
Здесь тулзы описываются дедовскими методами: типа JSON-schema через PHP-массивы. Кто-то скажет "низкоуровнево", я скажу "всрато". Не ведитесь на бренд, там всё из говна и палок.
Кстати, если вы всё ещё верите в Symfony и хотите как-то исправить этот AI Platform, то записывайтесь на хакатон, а то они уже совсем отчаялись.
2. logiscape/mcp-sdk-php — использовался на практике в CTX. HTTP Transport нормальный (портирован с Python SDK), но роутер — говно: RegisterHandler руками, угадываешь параметры, никаких мидлварей. Пришлось много переписывать. Архитектура не хорошая и не плохая (никакая). Такое бывает, когда бездумно переписываешь с Python.
3. pronskiy/mcp — от Романа Пронского.
По доке выглядит удобно и минималистично, но не для сложных задач.
Рома хайпнул, разработка заморожена. Сделано поверх
logiscape/mcp-sdk-php 👆4. laravel/mcp — кажется, Laravel подсмотрели решение у Ромы, но что-то пошло не так и у них получилась хуйня неюзабельная.
Схемы создаются через громоздкий билдер, где необходимо руками описывать каждое поле. LLM возвращает массив, и дальше сам разбирайся: никаких DTO, никакой валидации.
Подходит только для Hello World проектов. Можно сразу скипать.
5. php-mcp/server — MCP из Нигерии.
Выглядит прилично: схемы генерируются из аргументов методов с атрибутами, есть invocable классы. Но дьявол в деталях: DTO превращает в "type object", собственный JSON-schema валидатор строже стандарта, handler фильтрует аргументы и теряет данные.
Чтобы это заработало нормально, пришлось экстендить половину internal классов. Интеграция на пороховой бочке 👇
6. spiral/mcp-server — обвязка над
php-mcp/server от инженера Spiral Scout 😎, сделанная с умом .Решены ключевые проблемы базовой и других библиотек из подборки: вместо громоздких функций с десятками аргументов или всратых массивов используются DTO с атрибутами. По ним обнаруживаются тулзы и из них же генерируется JSON-схема через spiral/json-schema-generator. Входящие данные маппятся через Valinor с валидацией.
Подключается одним bootloader'ом, легко настраивается и интегрируется с любым сервисом.
Общая проблема многих библиотек в том, что ими сами же авторы и не пользуются: делают на волне хайпа простейший MVP, а потом рассказывают, что можно решить любые задачи.
Берёшь такую херню для интеграции с Task manager, где надо создавать задачи с подзадачами (~10 полей с вложенными DTO и валидацией), понимаешь что нужно что-то другое. Это не тот кейс из доки типа "тут пара аргументов
$a и $b, оба строки, а JSON-схему ебани массивом". И вот уже сам сидишь и переписываешь пол пакета.В общем, спасибо всем пацанам, которые тащат нормальные пакеты, и тем, кто им помогает ❤️
🔥35 13😁6
PHP Fart Time
Без лишних слов, анонс: сегодня вечером опробуем Yii3 App 1.0.0. https://www.youtube.com/watch?v=ksjGwhvVcN8
Было время переспать с мыслями по Yii3 App.
Хвалебных слов не будет, ибо #ТоксикСреда. Но ребята и так знают, что они молодцы🫡
Мой технический разбор из двух частей в дополнение к стриму:
🖼️ Массивы уже не айс. Всё-таки времена PHP 7.4 позади.
Обратите внимание на то, что параметры (params) очень хорошо ложатся на DTOшки. DTOшки тоже хорошо сериализуются и десериализуются, кладутся куда угодно, версионируются по semver.
Бонусы очевидны: типизация, автокомплит, не надо знать "путь" до нужного конфига во всеобщем
🖼️ Про кашу параметров и структуру: мы вынесли тезис, что в куче параметров чёрт ногу сломит. Хрен найдёшь то, что ищешь.
Однако, я знаю как этого избежать. Всё дело в структуре проекта!
Предлагаемая структура "как в Laravel" проклята. Группировка по типу классов, мол "тут контроллеры, тут хендлеры, тут ещё что-то", — тупиковый путь.
Вот если бы сразу сгруппировать по фичам или модулям, то что получится? Можно раскидать и перегруппировать не только контроллеры/сервисы/etc , но и параметры с конфигами DI.
Ребята, поработайте над структурой!
🖼️ Нельзя получить Request из контейнера: надо сначала получить RequestProvider, затем дёрнуть на нём метод get.
Оно понятно, почему так:
- Мало кто знает, но PSR контейнер по спеке должен быть идемпотентным: на один и тот же id возвращать всегда один и тот же результат. Там не предусмотрены non-singleton биндинги.
- А раз в контейнере всё синглтон, то реквест туда не положишь из-за его динамической натуры: в long running реквест будет каждый раз другой, также он может измениться в PSR мидлварях.
Но не понятно, почему платить за это должны разработчики. Как по мне, плата высокая.
Решить, кстати, эту проблему можно кучей разных доступных способов. Решайте! :)
🖼️ Чтобы уметь работать в неумираемом режиме, Yii опирается на два столпа: дедовские ресеттеры и иммутабельность. Ресеттеры полагаются на события PSR EventDispatcher.
Я доку не читал (а кто её вообще читает?), но надеюсь, что диспетчер событий не навязывается для использования в юзер-ленде.
И если ресеттеры — удел фреймворков, которые не смогли в архитектуру, и для исключительных случаев, то иммутабельность — очень хорошо. Я бы рекомендовал использовать больше иммутабельности и одноразовых объектов, чтобы стейты юзеров не текли, и им не приходилось писать ресеттеры, которые они всё равно писать не будут.
То, что мы видели на стриме мне не понравилось: стейт контроллера протекает. Да, я бы сам не писал такой код, но мы же говорим про фреймворк общего назначения уровня "домохозяйка+". Ну и напомню: если висит ружьё, то оно обязательно выстрелит.
Хвалебных слов не будет, ибо #ТоксикСреда. Но ребята и так знают, что они молодцы
Мой технический разбор из двух частей в дополнение к стриму:
Обратите внимание на то, что параметры (params) очень хорошо ложатся на DTOшки. DTOшки тоже хорошо сериализуются и десериализуются, кладутся куда угодно, версионируются по semver.
Бонусы очевидны: типизация, автокомплит, не надо знать "путь" до нужного конфига во всеобщем
$params. В DTO также можно добавлять атрибуты для настройки мерж-планов или даже авторезолвинга альясов.# Было
/**
* @var array $params
*/
Foo::class => static function() use ($params): Foo {
return new Foo($params['foo/bar']['option']);
}
# Стало
Foo::class => static function(FooConfig $config): Foo {
return new Foo($config->option);
}
Однако, я знаю как этого избежать. Всё дело в структуре проекта!
Предлагаемая структура "как в Laravel" проклята. Группировка по типу классов, мол "тут контроллеры, тут хендлеры, тут ещё что-то", — тупиковый путь.
Вот если бы сразу сгруппировать по фичам или модулям, то что получится? Можно раскидать и перегруппировать не только контроллеры/сервисы/etc , но и параметры с конфигами DI.
Ребята, поработайте над структурой!
Оно понятно, почему так:
- Мало кто знает, но PSR контейнер по спеке должен быть идемпотентным: на один и тот же id возвращать всегда один и тот же результат. Там не предусмотрены non-singleton биндинги.
- А раз в контейнере всё синглтон, то реквест туда не положишь из-за его динамической натуры: в long running реквест будет каждый раз другой, также он может измениться в PSR мидлварях.
Но не понятно, почему платить за это должны разработчики. Как по мне, плата высокая.
Решить, кстати, эту проблему можно кучей разных доступных способов. Решайте! :)
Я доку не читал (а кто её вообще читает?), но надеюсь, что диспетчер событий не навязывается для использования в юзер-ленде.
И если ресеттеры — удел фреймворков, которые не смогли в архитектуру, и для исключительных случаев, то иммутабельность — очень хорошо. Я бы рекомендовал использовать больше иммутабельности и одноразовых объектов, чтобы стейты юзеров не текли, и им не приходилось писать ресеттеры, которые они всё равно писать не будут.
То, что мы видели на стриме мне не понравилось: стейт контроллера протекает. Да, я бы сам не писал такой код, но мы же говорим про фреймворк общего назначения уровня "домохозяйка+". Ну и напомню: если висит ружьё, то оно обязательно выстрелит.
Please open Telegram to view this post
VIEW IN TELEGRAM