en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

Open Source: PHP

Open Source: PHP

Open in Telegram

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

Show more
421
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
Всем привет! Нужен фидбек по проекту. Это сервер приложений на 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 Видение такое: один бинарник, который скачивааешь без наличи пхп и всего и он содержит в себе композер (или устанавливает его) и умеет запускать любые пхп скрипты или репозитории или скрипты из репозиториев.