421
订阅者
无数据24 小时
无数据7 天
无数据30 天
帖子存档
Всем привет! Нужен фидбек по проекту.
Это сервер приложений на PHP (ZTS), заточенный под работу в Docker и Kubernetes и двигающийся в этом направлении.
Буду очень признателен, если вы попробуете его и поделитесь фидбеком. Особенно интересны мнения о самом проекте, архитектуре, документации и сайте.
Приветствуются любые отзывы - позитивные и не очень. Фидбек от ваших AI-агентов тоже приветствуются. 😁 Писать можно в личку, email, комментарии или создавать ишью на GitHub.
Весь код написан с помощью LLM, а архитектура и технические решения - мои. Большое спасибо.
https://github.com/oxphp/oxphp
Простая задача, чтобы вкатиться в ряды контрибьюторов Testo
https://github.com/php-testo/testo/issues/341
- отписать в ишуе по ссылке, что берёте задачу
- делаете задачу
- ...
- Profit
True Async PHP
Edmond Dantes призывает всех к обсуждению особенностей реализации нашумевшего True Async RFC.
Если вы делаете фреймворки или библиотеки, которые работают (или хотелось бы) с асинхронностью; пишите на других языках с поддержкой асинхронности и параллелизма или просто хотите что-то добавить дельного, то заходите в обсуждение.
Чем быстрее закроются все вопросы, опасения и корнер кейсы, тем быстрее PHP начнет нагинать Go!
Цитата Edmond’а:
Итак господа все желающие, приглашаю вас к обсуждению. На текущем этапе считаем, что никакого RFC не было. В теме ключевой вопрос. Он видимо и будет обсуждаться ближайшее время.👩💻 https://github.com/true-async/php-true-async-rfc/discussions/8
Сегодня состоялся релиз open-source админки MoonShine v4!
Вкратце по нововведениям рассказывается (и показывается) в этом промо-ролике:
https://youtu.be/3BXkf6WYEJ8
А вечером в 19:00 (мск) будет прямой эфир, где автор (Данил Щуцкий) всё подробно расскажет! Из основного:
- новый дизайн и вёрстка
- генератор палитр для MoonShine - создавать цветовые схемы теперь просто
- TailwindCSS обновлён до версии 4
- новая архитектура
- FortyFive - AI-powered инструмент для быстрой разработки админок на базе MoonShine
- и многое другое!
11 ноября в 19:00 (мск) на CutCode!
https://www.youtube.com/live/ynKqr9zxDzk?si=1aulrPoZ_hpH-clI
Repost from Пых
🤎 Драйвер для NATS от Thesis!
Каждый, кто пишет на 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. А ещё после статьи на Reddit нам поставил звезду Ocramius. 😅
GitHub | Thesis Community | nats.ioПофиксить PHP 8.4 deprecations в RoadRunner PHP
👩💻 https://github.com/roadrunner-php/issues/issues/39
Нужно обновить пакет version-checker, чтобы он не плевался депрекейтами PHP 8.4
Делается это несложно (можно посмотреть связанные PR в той же ишуе): подключается
spiral/code-style, запускается и весь код становится красивым и без депрекейтов.
Пользователи RoadRunner и Temporal, внедряющие PHP 8.4, будут вам благодарны.Repost from msavin | Backend & PHP
Export-ignore-check
В целом все крупные библиотеки следят за размером своего дистрибутива, чтобы конечный пользователь не скачивал вместе с архивом либы ненужные файлы, вроде документации, тестов, файлов конфигурации dev зависимостей
Но у меня лично каждый раз боль глазами сравнивать структуру файлов и содержимое .gitattributes (export-ignore директива), тем более часто случается рассинхрон, в том числе и у крупных библиотек (тот же phpstorm-stubs)
В связи с этим написал либу, которая призвана проверить, что там за архив получается из вашей библиотеки (через
git archive или скачав напрямую с packagist) и найти там ненужные файлы. Она покажет вам сколько вы сэкономите кБ, вдобавок автоматически может добавить рекомендуемые изменения в ваш .gitattributes.
Я прогнал топ тысячу пакетов с packagist, 470 из них могут быть оптимизированы, так шо возможно и вам пригодитсяВернуть метод в ExpressionBuilderInterface в yiisoft/db
В пакете yiisoft/db (это независимсый от фреймворка DBAL от команды Yii нужно добавить отсутствующий метод в интерфейс. Я уже начал это делать, но другие дела скушали всё доступное время 😂
Итак:
1. https://github.com/yiisoft/db/pull/946
2. Надо в остальных пакетах сделать изменения под интерфейс + поправить по комментам.
#yii #yii3
Добавить поддержку выражений
В Symfony есть Expression Language и его поддержка в валидаторе.
Было бы круто иметь подобный валидатор для Yii3.
Нужно написать бридж к Expression Language, довольно интересная задачка!
п.с. я умел раньше писать тз 😁
👩💻 https://github.com/yiisoft/validator/issues/518
#yii #yii3 #validator
Нужен совет/рекомендации/доводы/мысли.
Ситуация следующая: в модуль добавил больше расширяемости. И все расширения производятся через объект конфигурации. Соответственно класс конфигурации растет. Там нет сложной логики, хотя в некоторых случаях он выступает как фабрика (значения по умолчанию). В основном это конечно же просто геттеры и сеттеры.
Тем не менее scrutinizer-ci . Присвоил классу значек "F" и отображает его красным. С пояснением
Total Complexity 60 , Total Lines 827 .
Как подходить в таких случаях? Действительно ли стоит следовать его рекомендациям в таких случаях?
Подумываю разбить на трейты (по логическим группам). Сначала была мысль создавать некие классы для подобных групп - своего рода отдельные конфиги и затем их передавать в основной конфиг. Но это как то, на мой взгляд, в итоге усложнит читабельность файла конфигурации.
Речь идет вот об этом классе https://github.com/Voral/vs-version-incrementor/blob/master/src/Config.php
#semver #changelog
@viktorprogger
@evgwed
@tashimotor
Выиграли билеты на стачку. Если вам не нужны эти билеты, напишите мне я передам их другим!
Repost from Олег Мифле | System Design, AI, архитектура
💥💥💥 Ещё анонос и розыгрыш проходки!
Через 2 недели (с 21 по 25 апреля) начнётся онлайн конференция Podlodka Php Crew которая будет проходить целых 5 дней. Тема сезона - High Performance. Т.е. про оптимизацию всего связанного и не связанного с php. Я там буду выступать и расскажу почему индексы не работают. Вообще тема индексов достаточно избитая, часто слышу "тормозят запросы в базу - создай индекс". Ну изи же.
🔹 А что если он не будет работать в условиях этого запроса?
🔹 Или вред от него будет выше, чем польза?
🔹 Или почему планировщик вообще игнорирует ваш, на первый взгляд, валидный индекс?
Вообще с планировщиком всегда непросто, и не всегда понятно как он выбирает путь исполнения запроса и индекс. Но есть хитрости, как заставить, например, планировщик mysql использовать индекс.
✅ Директива USE INDEX
Это, так скажем, "мягкая" рекомендация для планировщика выбрать указанный индекс. Но она может быть проигнорирована, если будет более оптимальный путь.
SELECT * FROM users USE INDEX (idx_email) WHERE email = 'example@mail.com';
✅ Директива FORCE INDEX
"Жесткая" директива, требующая от потимизатора использовать указанный индекс, даже если он считает это не оптимальным. При этом оптимизатор игнорирует оценку стоимости альтренатив
SELECT * FROM users FORCE INDEX (idx_email) WHERE email = 'example@mail.com';
Допустим есть запрос
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. Для этого нужно оставить любой комментарий к посту, победителя выберу случайным образом через неделю 🫡Неделя «High Performance» на PHP Crew от Podlodka пройдет 21-25 апреля!
Анонс от подлодки:
```
В новом сезоне:
- разберемся, как настроить RoadRunner для максимальной производительности;
- обсудим, как реализовать балансировку трафика и горизонтальное масштабирование приложений;
- посмотрим на примерах на низкоуровневую оптимизацию: от кода до AI-агентов;
- поймем, как лучше оптимизировать БД при высоконагруженном PHP-приложении.
```
https://podlodka.io/phpcrew
Если вы еще не купили билет, но хотите сходить – попробуйте сначала выиграть у Олега в канале:
– комент под постом
- ждём недельку
——
Тем временем на Стачку разыгрывается уже 3 билета! Через пару дней выберем счастливчиков.
Хотите анонсы и розыгрыши проходок на митапы в этом канале или лучше этого не делать?
Напоминаю, что идет розыгрыш бесплатной проходки на Стачку.
Нужно всего лишь написать коммент и приехать в Ульяновск.
Кстати, уже есть и второй билет, но даже первый никому не нужен 🫠
🖼 Fix MSSQL 2017 GitHub action
MSSQL не поддерживается в Ubuntu 22, только в Ubuntu 20. А Github Actions не поддерживают Ubuntu 20.
Нужно заставить работать MSSQL в CI, чтобы прогонять тесты в yiisoft/db. Больше информации в тикете
👩💻 https://github.com/yiisoft/db/issues/958
#yii #yii3 #db #mssql
🪲 Add PSR-3 logger implementation
Add lightweight PSR-3 implementation that can be easily use with Trap, compatible with fibers, etc
👩💻 https://github.com/buggregator/trap/issues/179
#buggregator #trap
Repost from Пых
Смерджили мой PR в Brick\Math с Open Source Цеха #4!
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А если вы хотите контрибьютить, но пока есть вопросы “как это делать”, то видео от Валентина Удальцова поможет вам разобраться как это делать.
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 докладов, а здесь список вообще всех докладов про разработку
Нужна помощь добить https://github.com/pronskiy/phpup
Видение такое: один бинарник, который скачивааешь без наличи пхп и всего и он содержит в себе композер (или устанавливает его) и умеет запускать любые пхп скрипты или репозитории или скрипты из репозиториев.
