Forwarded from Roman Pronskiy
Нужна помощь добить https://github.com/pronskiy/phpup
Видение такое: один бинарник, который скачивааешь без наличи пхп и всего и он содержит в себе композер (или устанавливает его) и умеет запускать любые пхп скрипты или репозитории или скрипты из репозиториев.
Видение такое: один бинарник, который скачивааешь без наличи пхп и всего и он содержит в себе композер (или устанавливает его) и умеет запускать любые пхп скрипты или репозитории или скрипты из репозиториев.
GitHub
GitHub - pronskiy/phpup: The PHP toolchain: run Composer, PHPStan, Rector, or any PHP script without having PHP installed.
The PHP toolchain: run Composer, PHPStan, Rector, or any PHP script without having PHP installed. - pronskiy/phpup
🔥8🤣2
18-19 апреля пройдет большая конференция Стачка
На стачке я расскажу про MetaStorm плагин, а Алексей Нечаев @mrboneskhv продолжит удивлять нас работой PHP с ML в докладе “Создание производительных ML-приложений на базе PHP”.
Если вам интересно углубиться, то уже сейчас можете зарешать парочку тикетов из https://github.com/RubixML/ML
——
Алексей готов сделать розыгрыш своего +1 промокода.
Я думал что бы такого придумать с розыгрышем, но ничего интересного не придумал, кроме следующей идеи:
1. В розыгрыше участвуют все, кто напишет комментарий в ответ на это сообщение
2. Кто сделает тикет из любых проектов в https://github.com/RubixML, тому добавляется вес +1
3. 11 или 12 апреля делаем розыгрыш среди всех участников, которые отписались под постом
Как будет работать “+1 вес”:
К примеру, у Димы количество баллов 1, значит я занимаю позицию N1.
Алексей сделал 2 тикета и у него количество баллов 1+2=3, значит он занимает позиции N2, N3, N4.
Такой вот нехитрый способ занять несколько мест, чтобы увеличить свои шансы, но шансы других всё еще актуальны.
Пожалуйста, не участвуйте в розыгрыше, если вы точно не поедете на конференцию.
Кстати, вот список всех PHP докладов, а здесь список вообще всех докладов про разработку
На стачке я расскажу про MetaStorm плагин, а Алексей Нечаев @mrboneskhv продолжит удивлять нас работой PHP с ML в докладе “Создание производительных ML-приложений на базе PHP”.
Если вам интересно углубиться, то уже сейчас можете зарешать парочку тикетов из https://github.com/RubixML/ML
——
Алексей готов сделать розыгрыш своего +1 промокода.
Я думал что бы такого придумать с розыгрышем, но ничего интересного не придумал, кроме следующей идеи:
1. В розыгрыше участвуют все, кто напишет комментарий в ответ на это сообщение
2. Кто сделает тикет из любых проектов в https://github.com/RubixML, тому добавляется вес +1
3. 11 или 12 апреля делаем розыгрыш среди всех участников, которые отписались под постом
Как будет работать “+1 вес”:
К примеру, у Димы количество баллов 1, значит я занимаю позицию N1.
Алексей сделал 2 тикета и у него количество баллов 1+2=3, значит он занимает позиции N2, N3, N4.
Такой вот нехитрый способ занять несколько мест, чтобы увеличить свои шансы, но шансы других всё еще актуальны.
Пожалуйста, не участвуйте в розыгрыше, если вы точно не поедете на конференцию.
Кстати, вот список всех PHP докладов, а здесь список вообще всех докладов про разработку
ul25.nastachku.ru
«Стачка» Международная IT-конференция
Официальный сайт ежегодной IT-конференции «Стачка»: Digital-коммуникации, Программирование, IT-стартапы, Электронная коммерция…
🔥4👍3
А если вы хотите контрибьютить, но пока есть вопросы “как это делать”, то видео от Валентина Удальцова поможет вам разобраться как это делать.
Forwarded from Пых (Валентин Удальцов)
Смерджили мой PR в Brick\Math с Open Source Цеха #4!
https://github.com/brick/math/pull/90
Суть изменения тривиальна: сузить возвращаемый тип
Сначала на стриме я попробовал по-честному расставить типы по всей внутрянке, но упёрся в то, что в местах конкатенации
BenMorel согласился с моими доводами и зарелизил улучшение в 0.13.1.
Процесс контрибьютинга от форка до PR:
https://youtu.be/viWYmUUsD5I?t=3900s
https://vkvideo.ru/video-228746873_456239037?t=1h7m20s
https://github.com/brick/math/pull/90
Суть изменения тривиальна: сузить возвращаемый тип
BigInteger::__toString()
и BigDecimal::__toString()
до numeric-string
, чтобы после приведения к строке значения можно было передавать в numeric-string
и non-empty-string
параметры (мне это потребовалось в недрах Typhoon).Сначала на стриме я попробовал по-честному расставить типы по всей внутрянке, но упёрся в то, что в местах конкатенации
numeric-string
не выводится и его нужно форсить (прописывать @var
или assert
). В итоге предложил автору лёгкий путь: зафорсить тип только в самом методе __toString()
и больше ничего не менять.BenMorel согласился с моими доводами и зарелизил улучшение в 0.13.1.
Процесс контрибьютинга от форка до PR:
https://youtu.be/viWYmUUsD5I?t=3900s
https://vkvideo.ru/video-228746873_456239037?t=1h7m20s
GitHub
Force numeric-string return type in BigDecimal::__toString() and BigInteger::__toString() by vudaltsov · Pull Request #90 · brick/math
Closes #89.
@return numeric-string cannot be added to BigRational, because '10/20' is not a numeric string. So I added numeric-string to BigDecimal and BigInteger classes only. This...
@return numeric-string cannot be added to BigRational, because '10/20' is not a numeric string. So I added numeric-string to BigDecimal and BigInteger classes only. This...
👍1
Add lightweight PSR-3 implementation that can be easily use with Trap, compatible with fibers, etc
#buggregator #trap
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Add lightweight PSR-3 implementation · Issue #179 · buggregator/trap
Description Add a standalone PSR-3 implementation that works with Trap and is compatible with both fiber-based asynchronous code and synchronous execution. Requirements Implementation must be self-...
MSSQL не поддерживается в Ubuntu 22, только в Ubuntu 20. А Github Actions не поддерживают Ubuntu 20.
Нужно заставить работать MSSQL в CI, чтобы прогонять тесты в yiisoft/db. Больше информации в тикете
#yii #yii3 #db #mssql
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Fix MSSQL 2017 GitHub action · Issue #958 · yiisoft/db
MSSQL 2017 docker images don't run correctly in Ubuntu 22+ (See #957) GitHub drop support of Ubuntu 20 runners. So we can't run tests with MSSQL 2017 (e.g. https://github.com/yiisoft/db/act...
😁2👍1👎1
Dmitrii
18-19 апреля пройдет большая конференция Стачка На стачке я расскажу про MetaStorm плагин, а Алексей Нечаев @mrboneskhv продолжит удивлять нас работой PHP с ML в докладе “Создание производительных ML-приложений на базе PHP”. Если вам интересно углубиться…
Напоминаю, что идет розыгрыш бесплатной проходки на Стачку.
Нужно всего лишь написать коммент и приехать в Ульяновск.
Кстати, уже есть и второй билет, но даже первый никому не нужен🫠
Нужно всего лишь написать коммент и приехать в Ульяновск.
Кстати, уже есть и второй билет, но даже первый никому не нужен
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8👍1
Неделя «High Performance» на PHP Crew от Podlodka пройдет 21-25 апреля!
Анонс от подлодки:
```
В новом сезоне:
- разберемся, как настроить RoadRunner для максимальной производительности;
- обсудим, как реализовать балансировку трафика и горизонтальное масштабирование приложений;
- посмотрим на примерах на низкоуровневую оптимизацию: от кода до AI-агентов;
- поймем, как лучше оптимизировать БД при высоконагруженном PHP-приложении.
```
https://podlodka.io/phpcrew
Если вы еще не купили билет, но хотите сходить – попробуйте сначала выиграть у Олега в канале:
– комент под постом
- ждём недельку
——
Тем временем на Стачку разыгрывается уже 3 билета! Через пару дней выберем счастливчиков.
Хотите анонсы и розыгрыши проходок на митапы в этом канале или лучше этого не делать?
Анонс от подлодки:
```
В новом сезоне:
- разберемся, как настроить RoadRunner для максимальной производительности;
- обсудим, как реализовать балансировку трафика и горизонтальное масштабирование приложений;
- посмотрим на примерах на низкоуровневую оптимизацию: от кода до AI-агентов;
- поймем, как лучше оптимизировать БД при высоконагруженном PHP-приложении.
```
https://podlodka.io/phpcrew
Если вы еще не купили билет, но хотите сходить – попробуйте сначала выиграть у Олега в канале:
– комент под постом
- ждём недельку
——
Тем временем на Стачку разыгрывается уже 3 билета! Через пару дней выберем счастливчиков.
Хотите анонсы и розыгрыши проходок на митапы в этом канале или лучше этого не делать?
podlodka.io
Онлайн-конференция Podlodka PHP Crew, сезон #7
Недельное мероприятие от команды Podlodka: ежедневные интерактивные сессии в Zoom по актуальным вопросам PHP-индустрии, нон-стоп общение с экспертами и звёздами индустрии, закрытое профессиональное сообщество в Telegram.
👍2👎1
Forwarded from Позовите Олега | Архитектура и разработка
podlodka.io
Онлайн-конференция Podlodka PHP Crew, сезон #7
Недельное мероприятие от команды Podlodka: ежедневные интерактивные сессии в Zoom по актуальным вопросам PHP-индустрии, нон-стоп общение с экспертами и звёздами индустрии, закрытое профессиональное сообщество в Telegram.
Через 2 недели (с 21 по 25 апреля) начнётся онлайн конференция Podlodka Php Crew которая будет проходить целых 5 дней. Тема сезона - High Performance. Т.е. про оптимизацию всего связанного и не связанного с php. Я там буду выступать и расскажу почему индексы не работают. Вообще тема индексов достаточно избитая, часто слышу "тормозят запросы в базу - создай индекс". Ну изи же.
🔹 А что если он не будет работать в условиях этого запроса?
🔹 Или вред от него будет выше, чем польза?
🔹 Или почему планировщик вообще игнорирует ваш, на первый взгляд, валидный индекс?
Вообще с планировщиком всегда непросто, и не всегда понятно как он выбирает путь исполнения запроса и индекс. Но есть хитрости, как заставить, например, планировщик mysql использовать индекс.
✅ Директива USE INDEX
Это, так скажем, "мягкая" рекомендация для планировщика выбрать указанный индекс. Но она может быть проигнорирована, если будет более оптимальный путь.
SELECT * FROM users USE INDEX (idx_email) WHERE email = '[email protected]';
✅ Директива FORCE INDEX
"Жесткая" директива, требующая от потимизатора использовать указанный индекс, даже если он считает это не оптимальным. При этом оптимизатор игнорирует оценку стоимости альтренатив
SELECT * FROM users FORCE INDEX (idx_email) WHERE email = '[email protected]';
Допустим есть запрос
SELECT * FROM orders WHERE customer_id = 42 AND status = 'done';
записей с customer_id=42, допустим, 1000 с разными значениями в status, а со status = done и разными customer_id - 50000.
И есть 2 индекса - на customer_id, и на status. Тут планировщик выберет customer_id, это более селективно.
Но вот мы взяли и зафорсили индекс по status, нам показалось так лучше (
SELECT * FROM orders FORCE INDEX (idx_status) WHERE customer_id = 42 AND status = 'done';
в итоге получим, что сначала запрос отберёт 50000 записей со status = done, а потом из них возмёт 100 записей с customet_id 42. Вот такая оптимизация.
В PostgreSQL такогих деректив нет. Но есть другие "приёмы" как можно скорректировать работу планировщика.
Вообще, на мой взгляд, к такому нужно относится с большой осторожностью. Если без костылей не получается завести индекс, вероятно что-то мы делаем не так.
В своём докладе я расскажу и об этом, и о том почему индексы игнорируются или работают не эфективно. У меня есть проходка на мероприятие и ,если мой доклад интересен, то есть шанс послушать его в живую, а так же все остальные с Podlodka Php Crew. Для этого нужно оставить любой комментарий к посту, победителя выберу случайным образом через неделю 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1👨💻1
@viktorprogger
@evgwed
@tashimotor
Выиграли билеты на стачку. Если вам не нужны эти билеты, напишите мне я передам их другим!
@evgwed
@tashimotor
Выиграли билеты на стачку. Если вам не нужны эти билеты, напишите мне я передам их другим!
❤1🎉1
Forwarded from Alexander Vorobyev
Нужен совет/рекомендации/доводы/мысли.
Ситуация следующая: в модуль добавил больше расширяемости. И все расширения производятся через объект конфигурации. Соответственно класс конфигурации растет. Там нет сложной логики, хотя в некоторых случаях он выступает как фабрика (значения по умолчанию). В основном это конечно же просто геттеры и сеттеры.
Тем не менее scrutinizer-ci . Присвоил классу значек "F" и отображает его красным. С пояснением
Total Complexity 60 , Total Lines 827 .
Как подходить в таких случаях? Действительно ли стоит следовать его рекомендациям в таких случаях?
Подумываю разбить на трейты (по логическим группам). Сначала была мысль создавать некие классы для подобных групп - своего рода отдельные конфиги и затем их передавать в основной конфиг. Но это как то, на мой взгляд, в итоге усложнит читабельность файла конфигурации.
Речь идет вот об этом классе https://github.com/Voral/vs-version-incrementor/blob/master/src/Config.php
#semver #changelog
Ситуация следующая: в модуль добавил больше расширяемости. И все расширения производятся через объект конфигурации. Соответственно класс конфигурации растет. Там нет сложной логики, хотя в некоторых случаях он выступает как фабрика (значения по умолчанию). В основном это конечно же просто геттеры и сеттеры.
Тем не менее scrutinizer-ci . Присвоил классу значек "F" и отображает его красным. С пояснением
Total Complexity 60 , Total Lines 827 .
Как подходить в таких случаях? Действительно ли стоит следовать его рекомендациям в таких случаях?
Подумываю разбить на трейты (по логическим группам). Сначала была мысль создавать некие классы для подобных групп - своего рода отдельные конфиги и затем их передавать в основной конфиг. Но это как то, на мой взгляд, в итоге усложнит читабельность файла конфигурации.
Речь идет вот об этом классе https://github.com/Voral/vs-version-incrementor/blob/master/src/Config.php
#semver #changelog
GitHub
vs-version-incrementor/src/Config.php at master · Voral/vs-version-incrementor
A tool for semantic versioning and changelog generation in Composer projects based on Git commits. - Voral/vs-version-incrementor
Добавить поддержку выражений
В Symfony есть Expression Language и его поддержка в валидаторе.
Было бы круто иметь подобный валидатор для Yii3.
Нужно написать бридж к Expression Language, довольно интересная задачка!
п.с. я умел раньше писать тз 😁
👩💻 https://github.com/yiisoft/validator/issues/518
#yii #yii3 #validator
В Symfony есть Expression Language и его поддержка в валидаторе.
Было бы круто иметь подобный валидатор для Yii3.
Нужно написать бридж к Expression Language, довольно интересная задачка!
п.с. я умел раньше писать тз 😁
#yii #yii3 #validator
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Add support for expressions · Issue #518 · yiisoft/validator
A suggestion from @xepozz. prop1 prop2 prop3 Expression(this.prop1 > this.prop2 || this.prop1 in Constants::VALUES) prop1
👍6🔥4👎1
Forwarded from Alexander Makarov
Вернуть метод в ExpressionBuilderInterface в yiisoft/db
В пакете yiisoft/db (это независимсый от фреймворка DBAL от команды Yii нужно добавить отсутствующий метод в интерфейс. Я уже начал это делать, но другие дела скушали всё доступное время 😂
Итак:
1. https://github.com/yiisoft/db/pull/946
2. Надо в остальных пакетах сделать изменения под интерфейс + поправить по комментам.
#yii #yii3
В пакете yiisoft/db (это независимсый от фреймворка DBAL от команды Yii нужно добавить отсутствующий метод в интерфейс. Я уже начал это делать, но другие дела скушали всё доступное время 😂
Итак:
1. https://github.com/yiisoft/db/pull/946
2. Надо в остальных пакетах сделать изменения под интерфейс + поправить по комментам.
#yii #yii3
GitHub
GitHub - yiisoft/db: Yii Database Library
Yii Database Library. Contribute to yiisoft/db development by creating an account on GitHub.
👍6👎1🔥1
Forwarded from msavin
Export-ignore-check
В целом все крупные библиотеки следят за размером своего дистрибутива, чтобы конечный пользователь не скачивал вместе с архивом либы ненужные файлы, вроде документации, тестов, файлов конфигурации dev зависимостей
Но у меня лично каждый раз боль глазами сравнивать структуру файлов и содержимое .gitattributes (export-ignore директива), тем более часто случается рассинхрон, в том числе и у крупных библиотек (тот же phpstorm-stubs)
В связи с этим написал либу, которая призвана проверить, что там за архив получается из вашей библиотеки (через
Я прогнал топ тысячу пакетов с packagist, 470 из них могут быть оптимизированы, так шо возможно и вам пригодится
В целом все крупные библиотеки следят за размером своего дистрибутива, чтобы конечный пользователь не скачивал вместе с архивом либы ненужные файлы, вроде документации, тестов, файлов конфигурации dev зависимостей
Но у меня лично каждый раз боль глазами сравнивать структуру файлов и содержимое .gitattributes (export-ignore директива), тем более часто случается рассинхрон, в том числе и у крупных библиотек (тот же phpstorm-stubs)
В связи с этим написал либу, которая призвана проверить, что там за архив получается из вашей библиотеки (через
git archive
или скачав напрямую с packagist) и найти там ненужные файлы. Она покажет вам сколько вы сэкономите кБ, вдобавок автоматически может добавить рекомендуемые изменения в ваш .gitattributes.Я прогнал топ тысячу пакетов с packagist, 470 из них могут быть оптимизированы, так шо возможно и вам пригодится
👍13🔥7
Пофиксить PHP 8.4 deprecations в RoadRunner PHP
👩💻 https://github.com/roadrunner-php/issues/issues/39
Нужно обновить пакет version-checker, чтобы он не плевался депрекейтами PHP 8.4
Делается это несложно (можно посмотреть связанные PR в той же ишуе): подключается
Пользователи RoadRunner и Temporal, внедряющие PHP 8.4, будут вам благодарны.
Нужно обновить пакет version-checker, чтобы он не плевался депрекейтами PHP 8.4
Делается это несложно (можно посмотреть связанные PR в той же ишуе): подключается
spiral/code-style
, запускается и весь код становится красивым и без депрекейтов.Пользователи RoadRunner и Temporal, внедряющие PHP 8.4, будут вам благодарны.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
[🧹 CHORE]: resolve PHP 8.4 deprecations · Issue #39 · roadrunner-php/issues
No duplicates 🥲. I have searched for a similar issue. What should be improved or cleaned up? Fix nullable type deprecations like this: > Temporal\Worker\Transport\RoadRunnerVersionChecker::postU...
👍5🔥1
Ишуя для тех, кто не хочет кодить
🪲 Добавить Buggregator в список Awesome PHP
https://github.com/buggregator/trap/issues/191
https://github.com/buggregator/trap/issues/191
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Add Trap as a debug tool in PHP Awesome list · Issue #191 · buggregator/trap
Add Trap and Buggregator there: https://github.com/ziadoz/awesome-php#debugging-and-profiling
👍6❤1
Изменено. Тут была бредовая идея, но теперь вот это:
Несколько проблем PHP CS Fixer и их решения:
- CS Fixer пока нестабилен с новым PHP 8.4 синтаксисом. Поэтому при запуске он падает с предупреждением, мол "запускаешь на свой страх и риск, выстави PHP_CS_FIXER_IGNORE_ENV=1 и будешь сам виноват". Если код пишется без новых фичей PHP 8.4, то ставим ENV и радуемся жизни.
- CS Fixer, как зависимость, тянет много "мусорных" пакетов, которые могут повлиять на другие зависимости проекта.
В этом случае можно заюзать composer-bin-plugin и установить CS Fixer в отдельную папочку, которую можно даже смело заигнорить не только в гите, но и в IDE.
- Хотел предложить добавить им сборку бинарей, но отказался от идеи, т.к. вредя будет больше, чем пользы. Ведь CS Fixer'у важно зависеть именно от PHP проекта.
Несколько проблем PHP CS Fixer и их решения:
- CS Fixer пока нестабилен с новым PHP 8.4 синтаксисом. Поэтому при запуске он падает с предупреждением, мол "запускаешь на свой страх и риск, выстави PHP_CS_FIXER_IGNORE_ENV=1 и будешь сам виноват". Если код пишется без новых фичей PHP 8.4, то ставим ENV и радуемся жизни.
- CS Fixer, как зависимость, тянет много "мусорных" пакетов, которые могут повлиять на другие зависимости проекта.
В этом случае можно заюзать composer-bin-plugin и установить CS Fixer в отдельную папочку, которую можно даже смело заигнорить не только в гите, но и в IDE.
- Хотел предложить добавить им сборку бинарей, но отказался от идеи, т.к. вредя будет больше, чем пользы. Ведь CS Fixer'у важно зависеть именно от PHP проекта.
#yii3
🖼 Добавить дженерик для метода
В пакете Yii DB (абстракция над СУБД) есть метод
Необходимо типизировать метод таким образом, чтобы Psalm мог вывести тип результата.
⭐️ Тикет на GitHub
ConnectionInterface::transaction()
В пакете Yii DB (абстракция над СУБД) есть метод
ConnectionInterface::transaction()
, который выполняет анонимную функцию в рамках транзакции и возвращает её результат.Необходимо типизировать метод таким образом, чтобы Psalm мог вывести тип результата.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Во время сегодняшнего стрима обнаружилось, что под свеженький RoadRunner 2025 не все PHP-пакеты обновлены. Нужно в
Вот эти пакеты:
roadrunner-php/centrifugo
roadrunner-php/tcp
roadrunner-php/services
Быстро вошёл — быстро вышел, приключение на несколько минут. Зато неоценимый вклад!😏
composer.json
для зависимости spiral/roadrunner
добавить версию ^2025.1
Вот эти пакеты:
roadrunner-php/centrifugo
roadrunner-php/tcp
roadrunner-php/services
Быстро вошёл — быстро вышел, приключение на несколько минут. Зато неоценимый вклад!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Forwarded from Пых (Валентин Удальцов)
В PHP-CS-Fixer смержили мой фиксер new_expression_parentheses!
Позавчера состоялся релиз v3.76.0 Kids Playground, туда наконец-то попал фиксер
Вот как включить это правило в
Мейнтейнер Dariusz Rumiński предлагает добавить
____________
1. Слоники Пых выехали ко мне из Иркутска. Транспортная компания обещала доставить в Москву в течение 9 дней. Жду!
2. Мы вчера с программным комитетом Пых.конф’25 зафиналили на встрече мощнейшую программу. Скоро вывесим на сайт.
Позавчера состоялся релиз v3.76.0 Kids Playground, туда наконец-то попал фиксер
new_expression_parentheses
, который мы делали в Open Source цеху (#1, #4). Он убирает скобки вокруг new
выражений в соответствии с моим RFC в PHP 8.4.Вот как включить это правило в
.php-cs-fixer.dist.php
после обновления:
return new Config()
// разрешаем PHP-CS-Fixer работать на 8.4,
// это вместо переменной среды PHP_CS_FIXER_IGNORE_ENV
->setUnsupportedPhpVersionAllowed(true)
// включаем параллельную обработку файлов
->setParallelConfig(ParallelConfigFactory::detect())
// по умолчанию finder ищет только *.php
// и игнорит директории vendor и .* (.git, .idea, ...)
->setFinder(Finder::create()->in(__DIR__))
->setRules([
'@PhpCsFixer' => true,
'new_expression_parentheses' => [
// убираем ненужные скобки
'use_parentheses' => false,
],
]);
Мейнтейнер Dariusz Rumiński предлагает добавить
new_expression_parentheses
в сет @PHP84Migration
. Накидайте там лайков, пожалуйста. @open_source_php, кажется, у нас есть задачка для подписчиков. 😊____________
1. Слоники Пых выехали ко мне из Иркутска. Транспортная компания обещала доставить в Москву в течение 9 дней. Жду!
2. Мы вчера с программным комитетом Пых.конф’25 зафиналили на встрече мощнейшую программу. Скоро вывесим на сайт.
👍16🔥5
Forwarded from Позовите Олега | Архитектура и разработка
В продолжение темы про #observability решил рассказать, как отправлять данные профайлов, собранные через excimer. Надо сказать, что это не самый популярный модуль для сбора профайлов — и, как по мне, совершенно зря. Потому что это расширение максимально тесно интегрируется в PHP и даёт минимум нагрузки на процессор
Минусы? Конечно — отсутствие визуализации из коробки. Но визуализаторов полно: Pyroscope от Grafana, например. Или Speedscope. Проблема в другом — как туда всё это отправить, ведь excimer не умеет ни в OpenTelemetry, ни в какой-нибудь другой удобный формат. Что делать?
А ничего — написать враппер и адаптеры самому
Получился, как по мне, весьма удобный. Я сразу добавил интеграцию с клиентами по OpenTelemetry, данные идут в бинарном формате через protobuf. Есть поддержка:
Вот пример использования
use Excimetry\Profiler\ExcimerProfiler;
use Excimetry\Exporter\CollapsedExporter;
use Excimetry\Backend\PyroscopeBackend;
// Create a profiler
$profiler = new ExcimerProfiler();
// Start profiling
$profiler->start();
// Your code to profile here
// ...
// Stop profiling
$profiler->stop();
// Get the profile
$log = $profiler->getLog();
// Send to Pyroscope
$exporter = new CollapsedExporter();
$backend = new PyroscopeBackend(
'https://localhost:4040', // Pyroscope server URL
'my-application', // Application name
['env' => 'production'] // Labels
);
// Send the profile to Pyroscope
$backend->send($log);
// You can also set the backend to send asynchronously
$backend->setAsync(true);
$backend->send($log); // Returns immediately, sends in background
// Add custom labels
$backend->addLabel('version', '1.0.0');
$backend->addLabel('region', 'us-west');
Честно, не знаю, насколько далеко это всё зайдёт — но идея мне реально нравится 💡 Возможно, excimer станет чуточку популярнее благодаря excimetry.
Буду рад звёздочкам на GitHub
⸻
Давайте оставаться на связи
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - excimetry/excimetry: Excimetry is a PHP profiling library that provides a bridge between the ext-excimer extension and…
Excimetry is a PHP profiling library that provides a bridge between the ext-excimer extension and various profiling tools and platforms. - GitHub - excimetry/excimetry: Excimetry is a PHP profilin...
👍7❤1