ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

Open Source: PHP

Open Source: PHP

前往频道在 Telegram

Помощь Open Source продуктам на PHP

显示更多
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, будут вам благодарны.

Export-ignore-check В целом все крупные библиотеки следят за размером своего дистрибутива, чтобы конечный пользователь не ска
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 Выиграли билеты на стачку. Если вам не нужны эти билеты, напишите мне я передам их другим!

💥💥💥 Ещё анонос и розыгрыш проходки! Через 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 Видение такое: один бинарник, который скачивааешь без наличи пхп и всего и он содержит в себе композер (или устанавливает его) и умеет запускать любые пхп скрипты или репозитории или скрипты из репозиториев.