Варианты нейминга конструктора типов для php-extended-type-system/type. Отличается только имя конструктора, всё остальное одинаковое.
💩54🔥6👍4
👨🔬 Новая лекция от Пыха. LRU мемоизация
Что такое мемоизация, как её абстрагировать и отрефакторить по TDD на LRU-алгоритм. 40 минут.
https://boosty.to/phpyh/posts/c4ba0a19-cfa2-41ec-903b-ede36fd5d28a
Что такое мемоизация, как её абстрагировать и отрефакторить по TDD на LRU-алгоритм. 40 минут.
https://boosty.to/phpyh/posts/c4ba0a19-cfa2-41ec-903b-ede36fd5d28a
🔥21👍8🤯2
Эффективность кэширования
Недавно на консультации разработчик показывал HTTP-кэширование главной страницы. Мне сразу бросилось в глаза, что для проверки If-Modified-Since в базу делается целая пачка далеко не лёгких запросов с join-ами, которые выясняют, как давно изменялись сущности, участвующие в рендеринге. Я предложил проверить, действительно ли это быстрее, чем просто отдать страницу.
Пару лет назад в докладе Павла Паршикова я познакомился с формулой целесобразности кэширования:
Получается, что кэширование имеет смысл тогда, когда взаимодействие с ним обходится дёшево, а вероятность хита близка к 1.
Как правило, наибольшее внимание уделяют
Недавно на консультации разработчик показывал HTTP-кэширование главной страницы. Мне сразу бросилось в глаза, что для проверки If-Modified-Since в базу делается целая пачка далеко не лёгких запросов с join-ами, которые выясняют, как давно изменялись сущности, участвующие в рендеринге. Я предложил проверить, действительно ли это быстрее, чем просто отдать страницу.
Пару лет назад в докладе Павла Паршикова я познакомился с формулой целесобразности кэширования:
rp + (r + c + w)(1 - p) < c
c — стоимость выполнения кэшируемой операции,
0 < p < 1 — вероятность попадания в кэш (hit),
r — стоимость чтения и валидации кэша,
w — стоимость записи в кэш.
После упрощения:
r + w(1 - p)
———————————— < c
p
Получается, что кэширование имеет смысл тогда, когда взаимодействие с ним обходится дёшево, а вероятность хита близка к 1.
Как правило, наибольшее внимание уделяют
p
, подразумевая, что сам кэш достаточно быстрый. Но r
не стоит недооценивать. В описанной в начале поста ситуации именно стоимость валидации оказалась слишком высокой, из-за чего кэширование потеряло смысл.👍73🔥17🤔8❤3
Initial Pelican — Initial
Субботний оффтоп, важный для меня и, надеюсь, приятный для вас.
Мы с группой Initial Pelican (я в ней играю на барабанах) наконец-то выпустили свой первый альбом «Initial». Его можно послушать на всех стриминговых площадках, кроме Apple Music (если кто-то там работает, попинайте коллег, плиз 😆). Также мы дропнули на YouTube уже второй ролик со студии. Переходите по ссылке, надевайте наушники и смакуйте! Буду ждать ваши впечатления в комментариях.
🎧 Spotify
🎧 Яндекс.Музыка
🎧 YouTube
🎧 VK Музыка
🎧 Мультиссылка на все сервисы
👍 Telegram
Субботний оффтоп, важный для меня и, надеюсь, приятный для вас.
Мы с группой Initial Pelican (я в ней играю на барабанах) наконец-то выпустили свой первый альбом «Initial». Его можно послушать на всех стриминговых площадках, кроме Apple Music (если кто-то там работает, попинайте коллег, плиз 😆). Также мы дропнули на YouTube уже второй ролик со студии. Переходите по ссылке, надевайте наушники и смакуйте! Буду ждать ваши впечатления в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Initial Pelican — Hearth (Studio Video)
Initial Pelican — Initial. Released February 25th, 2023
Order album: https://rumedia.io/l/6LUsK/
Guitars & Vocals: Sergey Ivanov
Bass: Ivan Loktaev
Drums: Valentin Udaltsov
Mixing & Mastering: Denis Ivanov
Order album: https://rumedia.io/l/6LUsK/
Guitars & Vocals: Sergey Ivanov
Bass: Ivan Loktaev
Drums: Valentin Udaltsov
Mixing & Mastering: Denis Ivanov
👍39🍾21❤6👎6🔥5
Наводим порядок в composer.json
Если вы, как и я, испытываете наслаждение от автоматизированного порядка, могу порекомендовать пакет ergebnis/composer-normalize. Он упорядочивает ключи
Интеграция в проект предельно проста:
Ну и закрепляем наши усилия, добавив в CI-пайплайн
https://github.com/ergebnis/composer-normalize
Если вы, как и я, испытываете наслаждение от автоматизированного порядка, могу порекомендовать пакет ergebnis/composer-normalize. Он упорядочивает ключи
composer.json
в соответсвии со схемой, после чего структура файла становится логичной и узнаваемой. Под капотом, кстати, используется ergebnis/json-normalizer — он решает задачу нормализации JSON в общем случае и может быть полезен сам по себе.Интеграция в проект предельно проста:
composer req --dev ergebnis/composer-normalize
composer normalize
git commit -am 'Навёл порядок в composer.json!'
Ну и закрепляем наши усилия, добавив в CI-пайплайн
composer normalize --dry-run
.https://github.com/ergebnis/composer-normalize
GitHub
GitHub - ergebnis/composer-normalize: 🎵 Provides a composer plugin for normalizing composer.json.
🎵 Provides a composer plugin for normalizing composer.json. - ergebnis/composer-normalize
👍46🔥12❤5
Нужно ли отбивать пробелами оператор конкатенации?
Несколько лет подряд у меня был ответ "нет", потому что в PHP-CS-Fixer concat_space по умолчанию выставлен в
Но на новой работе коллеги ставят пробелы. Почитал новый PER Coding Style: "All binary arithmetic, comparison, assignment, bitwise, logical, string, and type operators MUST be preceded and followed by at least one space". Документация подтверждает, что конкатенация относится к строковым операторам. Получается, что если следовать рекомендации, то пробелы надо ставить...
Несколько лет подряд у меня был ответ "нет", потому что в PHP-CS-Fixer concat_space по умолчанию выставлен в
none
и я привык так писать ещё со времён контрибьютинга в Symfony.Но на новой работе коллеги ставят пробелы. Почитал новый PER Coding Style: "All binary arithmetic, comparison, assignment, bitwise, logical, string, and type operators MUST be preceded and followed by at least one space". Документация подтверждает, что конкатенация относится к строковым операторам. Получается, что если следовать рекомендации, то пробелы надо ставить...
👍54🔥3😱1
❤2
Пых
Обещанный опрос по итогам 2022 в русскоязычном PHP-сообществе! При желании в конце можно оставить почту — волей рандома подарим кому-нибудь PHP-слона и классный мерч. Итоги опроса, в том числе подборки лучших статей, докладов и библиотек, появятся в начале…
Итоги 2022 в PHP-коммьюнити
Каюсь! Я совсем забыл выложить результаты опроса PHP-сообщества. Большое спасибо всем, кто принял участиеи проголосовал за мой контент! ❤️
https://phpcommunity.ru/2022-php
Каюсь! Я совсем забыл выложить результаты опроса PHP-сообщества. Большое спасибо всем, кто принял участие
https://phpcommunity.ru/2022-php
phpcommunity.ru
2022 год в русскоговорящем PHP-сообществе
Итоги третьего ежегодного опроса.
👍19❤8🔥7
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
PHP-линч #11 • Pest • mops1k/request-object-resolver-bundle
0:00 Приветствие и болтовня про микрофон
4:31 Новости по проектам
5:10 Вышел альбом моей группы Initial Pelican https://www.tg-me.com/InitialPelican/4
5:54 Pest
41:35 mops1k/request-object-resolver-bundle
1:00:09 Helper-ы
1:03:25 Про Webinar.ru, смену работы и удалёнку…
4:31 Новости по проектам
5:10 Вышел альбом моей группы Initial Pelican https://www.tg-me.com/InitialPelican/4
5:54 Pest
41:35 mops1k/request-object-resolver-bundle
1:00:09 Helper-ы
1:03:25 Про Webinar.ru, смену работы и удалёнку…
🔥19👍3
Annotated Monthly c Ромой
Если вы, как и я, соскучились по Роме, то можете посмотреть стримы PHP Annotated с его участием.
https://youtu.be/v5VtCWgDebw
https://youtu.be/Dx4knBnuJaw
Если вы, как и я, соскучились по Роме, то можете посмотреть стримы PHP Annotated с его участием.
https://youtu.be/v5VtCWgDebw
https://youtu.be/Dx4knBnuJaw
YouTube
Laravel 10, PHPUnit 10, Readonly Properties, Hakana, and more: PHP Annotated Monthly, February
PHP Annotated Monthly is a show where Roman and Brent look at the PHP news and give their own takes and opinions on it.
#php #monthly #programming #web
Links:
- PHP Annotated Monthly's blog post: https://blog.jetbrains.com/phpstorm/2023/02/php-annotated…
#php #monthly #programming #web
Links:
- PHP Annotated Monthly's blog post: https://blog.jetbrains.com/phpstorm/2023/02/php-annotated…
❤24👍10🎉2👎1
Что выведет код?
Anonymous Quiz
12%
Uncaught Error: Undefined constant "STDIN"
15%
Uncaught TypeError: fclose(): Argument #1 ($stream) must be of type resource, string given
24%
Uncaught Error: Standard input stream cannot be closed
22%
true
26%
false
🤡51👍12💩10💅7🦄5👾5🎃4🗿4🔥2🌭2💊2
Маппинг входящих данных на аргументы action-ов
Наконец-то в Symfony это сделали! Теперь всякие RequestMappingBundle будут не нужны.
Предлагаю отлинчевать на следующей неделе.😉
https://symfony.com/blog/new-in-symfony-6-3-mapping-request-data-to-typed-objects
Наконец-то в Symfony это сделали! Теперь всякие RequestMappingBundle будут не нужны.
Предлагаю отлинчевать на следующей неделе.
use Symfony\Component\HttpKernel\Attribute\MapQueryString;
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
final class Action
{
public function __invoke(
#[MapQueryString] MyQueryDataClass $query,
#[MapRequestPayload] MyPayloadDataClass $payload,
): Response {
// ...
}
}
https://symfony.com/blog/new-in-symfony-6-3-mapping-request-data-to-typed-objects
Please open Telegram to view this post
VIEW IN TELEGRAM
Symfony
New in Symfony 6.3: Mapping Request Data to Typed Objects (Symfony Blog)
Symfony 6.3 introduces two new PHP attributes to map the incoming request data into typed objects like DTOs and validates them automatically.
🔥61👍16❤3