Пых
Ищу любителей статанализа для воркшопа на Podlodkа PHP Crew 28-ого февраля в 19:00 на второй Подлодке PHP я проведу воркшоп "Упарываемся по статанализу: условные типы и вложенные дженерики". Для выступления мне потребуются два добровольца, которые под моим…
Спасибо всем откликнувшимся, мне было очень приятно связаться с каждым! К сожалению, пришлось выбирать, так как по сценарию нужно 2 участника. Но что-то мне подсказывает, что это не последняя движуха такого рода. 😉
Правильное решение задачи: https://psalm.dev/r/064023dcb7.
И всех ещё раз приглашаю на Podlodkа PHP Crew, в частности на мой воркшоп "Упарываемся по статанализу: условные типы и вложенные дженерики" 28-ого в 19:00.
Правильное решение задачи: https://psalm.dev/r/064023dcb7.
И всех ещё раз приглашаю на Podlodkа PHP Crew, в частности на мой воркшоп "Упарываемся по статанализу: условные типы и вложенные дженерики" 28-ого в 19:00.
podlodka.io
Онлайн-конференция Podlodka PHP Crew, сезон #8
Недельное мероприятие от команды Podlodka: ежедневные интерактивные сессии в Zoom по актуальным вопросам PHP-индустрии, нон-стоп общение с экспертами и звёздами индустрии, закрытое профессиональное сообщество в Telegram.
👍21
Не игнорьте .idea в репозитории
(Реинкарнация старого доброго поста)
Я считаю, что на проекте не должно быть строгой фиксации на IDE. Каждый может кодить в чём хочет. Главное, чтобы в итоге код был причёсан в согласованном командой стиле. И для этого нужны не git-хуки и не расшаренные конфиги IDE, а CI с проверкой на Code Style. Тогда можно хоть с телефона в браузере левой ногой правки вносить — вмерджить неправильный код в мастер всё равно не получится.
А теперь мысленно доведём ситуацию до абсурда, чтобы выявить проблему. Представим, что каждый из 100 разработчиков проекта решил использовать свою кастомную IDE с уникальными временными файлами и предложил по одному PR в каждый из 100 микросервисов на изменение .gitignore. Поздравляю, у нас 10_000 PR!😮
Вывод: код должен быть IDE-агностик, то есть не зависеть от среды разработки!
И это элементарно достигается настройкой глобального
Добавьте всего лишь две команды в ваш чек-лист для онбоардинга:
—————————
PHP-линч #9 сегодня в 19:00.
(Реинкарнация старого доброго поста)
Я считаю, что на проекте не должно быть строгой фиксации на IDE. Каждый может кодить в чём хочет. Главное, чтобы в итоге код был причёсан в согласованном командой стиле. И для этого нужны не git-хуки и не расшаренные конфиги IDE, а CI с проверкой на Code Style. Тогда можно хоть с телефона в браузере левой ногой правки вносить — вмерджить неправильный код в мастер всё равно не получится.
А теперь мысленно доведём ситуацию до абсурда, чтобы выявить проблему. Представим, что каждый из 100 разработчиков проекта решил использовать свою кастомную IDE с уникальными временными файлами и предложил по одному PR в каждый из 100 микросервисов на изменение .gitignore. Поздравляю, у нас 10_000 PR!
Вывод: код должен быть IDE-агностик, то есть не зависеть от среды разработки!
И это элементарно достигается настройкой глобального
.gitignore на машине разработчика. Каждый прописывает себе те исключения, которые необходимы для его ОС, IDE и прочих инструментов, а затем спокойно открывает абсолютно любой проект, не боясь закоммитить лишнее.Добавьте всего лишь две команды в ваш чек-лист для онбоардинга:
git config --global core.excludesfile ~/.gitignore
echo '.idea/' >> ~/.gitignore
—————————
PHP-линч #9 сегодня в 19:00.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍80💩21✍4
Forwarded from PHP умирает?!
Конкурс от канала PHP умирает?!
До 1-ого марта скинь в личку @vudaltsov идею для озвучки сцены из фильма или сериала.
Условия:
• сцена должна быть короткой (не дольше 30 секунд),
• предлагаемый вариант озвучки должен быть связан с PHP,
• преимущество получат самые смешные варианты, которые не выставляют PHP в плохом свете (по крайней мере, явно).
Примеры:
• https://news.1rj.ru/str/isPHPdying/19,
• https://news.1rj.ru/str/isPHPdying/26,
• https://news.1rj.ru/str/isPHPdying/124,
• https://news.1rj.ru/str/isPHPdying/125.
Что присылать:
• фрагмент фильма или сериала или ссылку на него с тайм-кодом,
• текст альтернативной озвучки,
• можно несколько вариантов.
Призы:
🥇 месяц подписки object на Пых Boosted,
🥈 месяц подписки array на Пых Boosted,
🥉 месяц подписки array на Пых Boosted.
Все три ролика будут обязательно озвучены и выложены на канале после подведения итогов. С нетерпением ждём ваших идей!
До 1-ого марта скинь в личку @vudaltsov идею для озвучки сцены из фильма или сериала.
Условия:
• сцена должна быть короткой (не дольше 30 секунд),
• предлагаемый вариант озвучки должен быть связан с PHP,
• преимущество получат самые смешные варианты, которые не выставляют PHP в плохом свете (по крайней мере, явно).
Примеры:
• https://news.1rj.ru/str/isPHPdying/19,
• https://news.1rj.ru/str/isPHPdying/26,
• https://news.1rj.ru/str/isPHPdying/124,
• https://news.1rj.ru/str/isPHPdying/125.
Что присылать:
• фрагмент фильма или сериала или ссылку на него с тайм-кодом,
• текст альтернативной озвучки,
• можно несколько вариантов.
Призы:
🥇 месяц подписки object на Пых Boosted,
🥈 месяц подписки array на Пых Boosted,
🥉 месяц подписки array на Пых Boosted.
Все три ролика будут обязательно озвучены и выложены на канале после подведения итогов. С нетерпением ждём ваших идей!
🔥6👍4❤1
function phpyh(array &$value): void
{
$value = 1;
}
$value = [];
phpyh($value);
var_dump($value);
👍9
🎲 Разыгрываю билет на Podlodka PHP Crew!
Как вы уже знаете, ранее я отобрал двух участников воркшопа по статанализу на Podlodka PHP Crew, и сегодня вечером в 19:00 мы с Алесем и Андреем обмажемся типами по-полной, уж поверьте мне. Но внезапно я вспомнил, что у меня есть дополнительная проходка на конфу, и решил её разыграть!
Билет на Подлодку получит тот, кто первым правильно решит задачку: https://psalm.dev/r/ed78fa67f7. Там нужно поправить все ошибки одним изменением, не прибегая к
Исправленный сниппет присылайте в личку так же ссылкой на psalm.dev. Решение задачи разберём завтра на PHP-линче в 21:00 (проведём после Подлодки).
Как вы уже знаете, ранее я отобрал двух участников воркшопа по статанализу на Podlodka PHP Crew, и сегодня вечером в 19:00 мы с Алесем и Андреем обмажемся типами по-полной, уж поверьте мне. Но внезапно я вспомнил, что у меня есть дополнительная проходка на конфу, и решил её разыграть!
Билет на Подлодку получит тот, кто первым правильно решит задачку: https://psalm.dev/r/ed78fa67f7. Там нужно поправить все ошибки одним изменением, не прибегая к
@psalm-suppress.Исправленный сниппет присылайте в личку так же ссылкой на psalm.dev. Решение задачи разберём завтра на PHP-линче в 21:00 (проведём после Подлодки).
👍12🔥6🤮3
PHP Extended Type System v0.1.0
Пыхари, сегодня мы наконец-то увидим, как я на чём-то ставлю тег, пусть и
Встречаемся через час на уютном PHP Point!
https://youtu.be/5c0WdgAnH_k
Пыхари, сегодня мы наконец-то увидим, как я на чём-то ставлю тег, пусть и
0.1.0!Встречаемся через час на уютном PHP Point!
https://youtu.be/5c0WdgAnH_k
YouTube
PHP Extended Type System v0.1.0
Подписывайтесь на наши каналы в Telegram:
• Пых https://news.1rj.ru/str/phpyh,
• PHP Digest https://news.1rj.ru/str/phpdigest,
• PHP умирает?! https://news.1rj.ru/str/isPHPdying.
Поддержите канал на Boosty: https://boosty.to/phpyh.
• Пых https://news.1rj.ru/str/phpyh,
• PHP Digest https://news.1rj.ru/str/phpdigest,
• PHP умирает?! https://news.1rj.ru/str/isPHPdying.
Поддержите канал на Boosty: https://boosty.to/phpyh.
🔥32👍12🤩2
Пых
PHP Extended Type System v0.1.0 Пыхари, сегодня мы наконец-то увидим, как я на чём-то ставлю тег, пусть и 0.1.0! Встречаемся через час на уютном PHP Point! https://youtu.be/5c0WdgAnH_k
PHP Extended Type System 0.1.0 🚀
https://github.com/php-extended-type-system/type/releases/tag/0.1.0
https://github.com/php-extended-type-system/type-stringifier/releases/tag/0.1.0
https://github.com/php-extended-type-system/type-reflection/releases/tag/0.1.0
УРА!!! Всем спасибо!
https://github.com/php-extended-type-system/type/releases/tag/0.1.0
https://github.com/php-extended-type-system/type-stringifier/releases/tag/0.1.0
https://github.com/php-extended-type-system/type-reflection/releases/tag/0.1.0
УРА!!! Всем спасибо!
GitHub
Release 0.1.0 🚀 · typhoon-php/type
Released during live stream at PHP Point.
Спасибо Пыхарям за поддержку ❤️
Спасибо Пыхарям за поддержку ❤️
🔥29🍾9🎉5👍1
Варианты нейминга конструктора типов для 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