Ребята обратили внимание, что на моём курсе нет девушек. Это не специально, у меня даже не было данных по полу. Но вот стало интересно, сколько на канале разработчиц?
Anonymous Poll
5%
Я разработчица 👩💻
79%
Я разработчик 👨💻
16%
Я по приколу 👀
Курсы, деньги, две работы
Вчера с Петром записали подкаст про мои пертурбации в этом году. Рассказал, почему я ушёл с двух работ подряд, как запустил курс хардкорного PHP ну и конечно же про доходы.
https://news.1rj.ru/str/tg_5minphp/1214
Вчера с Петром записали подкаст про мои пертурбации в этом году. Рассказал, почему я ушёл с двух работ подряд, как запустил курс хардкорного PHP ну и конечно же про доходы.
https://news.1rj.ru/str/tg_5minphp/1214
Telegram
Пятиминутка PHP
Сколько можно заработать на курсе по PHP?
Валентин Удальцов (https://news.1rj.ru/str/phpyh) раскрывает свои доходы в прямом эфире!
- Проработал в Happy Inc. 4 года, почему ушел?
- В компании Вебинар.ру всего 3 месяца - что произошло?
- Бесплатные консультации голосовыми…
Валентин Удальцов (https://news.1rj.ru/str/phpyh) раскрывает свои доходы в прямом эфире!
- Проработал в Happy Inc. 4 года, почему ушел?
- В компании Вебинар.ру всего 3 месяца - что произошло?
- Бесплатные консультации голосовыми…
👍34🔥16👏2❤1
Кэш через OPcache на RnD PHP
В субботу наконец-то выступлю в Ростове-на-Дону! Два года назад митап отменили из-за вспышки ковида, поэтому смыслом поездки стало знакомство с городом, Николаем @drup8 и его замечательной семьёй. В этот раз проблема только в том, что не получится быстренько долететь на самолёте, но к поездам мне не привыкать.
Мой сказ будет хардкорным: порефлексим, попишем в приват, повызываем😈
Также в программе доклады Александра Дубовского про инструменты профилирования и Сергея Ивченко про Transactional Outbox.
Регистрация: https://php-rnd.timepad.ru/event/2663787/. Ставь🤝 , если придёшь. Для всех остальных будет трансляция.
В субботу наконец-то выступлю в Ростове-на-Дону! Два года назад митап отменили из-за вспышки ковида, поэтому смыслом поездки стало знакомство с городом, Николаем @drup8 и его замечательной семьёй. В этот раз проблема только в том, что не получится быстренько долететь на самолёте, но к поездам мне не привыкать.
Мой сказ будет хардкорным: порефлексим, попишем в приват, повызываем
opcache_* функции. Хорошо, что меня поставили первым, загружу всех в самом начале. Также в программе доклады Александра Дубовского про инструменты профилирования и Сергея Ивченко про Transactional Outbox.
Регистрация: https://php-rnd.timepad.ru/event/2663787/. Ставь
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43👍18🤝8
Service Dumper Bundle
При работе с DI в Symfony бывает полезно вывести сервис на экран, чтобы убедиться, что он правильно сконфигурирован. Да, есть очень полезные команды
Год назад я добавил в проект консольную команду, которая выводила на экран любой сервис. Для простоты она переиспользовала test.service_container из FrameworkBundle для доступа к приватным сервисам.
Недавно утилитка пригодилась мне на курсе. Когда мы проходим Symfony Dependency Injection, я всегда показываю, как выглядят сконфигурированные серисы в рантайме. Становится гораздо понятнее, как работает тот же
До сих пор я таскал команду из проекта в проект, но вчера, наконец, оформил её в виде бандла. На этот раз я скопировал и упростил оригинальные TestServiceContainerWeakRefPass и TestServiceContainerRealRefPass, чтобы не зависеть от FrameworkBundle и деталей объявления
В общем, ставьте, пробуйте, предлагайте идеи по улучшению!
https://github.com/phpyh/service-dumper-bundle
При работе с DI в Symfony бывает полезно вывести сервис на экран, чтобы убедиться, что он правильно сконфигурирован. Да, есть очень полезные команды
debug:container, debug:autowiring и lint:container, они помогают отладить контейнер, но это не то же самое, что увидеть дамп реального объекта.Год назад я добавил в проект консольную команду, которая выводила на экран любой сервис. Для простоты она переиспользовала test.service_container из FrameworkBundle для доступа к приватным сервисам.
Недавно утилитка пригодилась мне на курсе. Когда мы проходим Symfony Dependency Injection, я всегда показываю, как выглядят сконфигурированные серисы в рантайме. Становится гораздо понятнее, как работает тот же
tagged_locator или inline_service.До сих пор я таскал команду из проекта в проект, но вчера, наконец, оформил её в виде бандла. На этот раз я скопировал и упростил оригинальные TestServiceContainerWeakRefPass и TestServiceContainerRealRefPass, чтобы не зависеть от FrameworkBundle и деталей объявления
test.service_container, добавил разные варианты вывода сервисов на экран (var_dump, symfony/var-dumper, xdebug_break, кастом), а также разрешил менять алгоритм поиска сервисов по id.В общем, ставьте, пробуйте, предлагайте идеи по улучшению!
https://github.com/phpyh/service-dumper-bundle
👍47🔥21❤1
Пых
Кэш через OPcache на RnD PHP В субботу наконец-то выступлю в Ростове-на-Дону! Два года назад митап отменили из-за вспышки ковида, поэтому смыслом поездки стало знакомство с городом, Николаем @drup8 и его замечательной семьёй. В этот раз проблема только в…
Кэш через OPcache на RnD PHP #6
Трансляция: https://www.youtube.com/live/8ZzAqhgmBFg?t=204
Слайды: https://vudaltsov.github.io/cache-via-opcache/
Трансляция: https://www.youtube.com/live/8ZzAqhgmBFg?t=204
Слайды: https://vudaltsov.github.io/cache-via-opcache/
YouTube
Трансляция RND PHP #6
Митап сообщества PHP разработчиков города Ростов-на-Дону.
Начало 18 октября 15:00
Программа:
1. Хардкорный доклад «Кэш через OPcache»
К нам приедет Валентин Удальцов из Москвы, автор каналов Пых (https://news.1rj.ru/str/phpyh) и PHP Point (https://www.youtube.com/@PHPPoint)…
Начало 18 октября 15:00
Программа:
1. Хардкорный доклад «Кэш через OPcache»
К нам приедет Валентин Удальцов из Москвы, автор каналов Пых (https://news.1rj.ru/str/phpyh) и PHP Point (https://www.youtube.com/@PHPPoint)…
👍29🔥9❤1🥱1🥴1
Я сделал перегрузку методов для PHP!
К выходу PHP 8.3 я решил реализовать фичу, которая в новой версии не только не появилась, но и была окончательно выпилена (с чем я согласен).
Итак, вот мой вариант оверлоадинга/перегрузки/Ad-hoc-полиморфизма для PHP:
В перегружаемый метод пишем один-единственный вызов
Главный вопрос, конечно, скорость. Но несмотря на то, что это реализация в первом приближении и есть идеи по улучшению, уже работает достаточно шустро. Благодаря мемоизации в воркерах капитальной разницы с прямым вызовом не будет, особенно если перегруженных методов не очень много. Для PHP-FPM предусмотрен кэш с поддержкой OPcache (примерно как в докладе).
Короче, ставьте, экспериментируйте, закидывайте идеи в комментарии и в Issues в репозиторий.
https://github.com/typhoon-php/overloading
P.S. Всех с третьей восьмёркой!🎉
К выходу PHP 8.3 я решил реализовать фичу, которая в новой версии не только не появилась, но и была окончательно выпилена (с чем я согласен).
Итак, вот мой вариант оверлоадинга/перегрузки/Ad-hoc-полиморфизма для PHP:
use Typhoon\Overloading\Overload;
final readonly class WhateverHandler
{
public function handle(mixed ...$args): string
{
return Overload::call();
}
#[Overload('handle')]
public function handleInt(int $int): string
{
return __METHOD__;
}
#[Overload('handle')]
public function handleIntAndFloat(int $int = 0, float $float = M_E): string
{
return __METHOD__;
}
}
$handler = new WhateverHandler();
// WhateverHandler::handleInt
var_dump($handler->handle(300));
// WhateverHandler::handleIntAndFloat
var_dump($handler->handle(float: 1.5));
В перегружаемый метод пишем один-единственный вызов
Overload::call(). Он, кстати, специально ничего не принимает, чтобы упростить использование и избежать ошибок. Затем добавляем перегружающие методы с такой же статичностью/видимостью и помечаем их атрибутом #[Overload('перегружаемый метод')]. Вуаля! Теперь можно вызывать перегружаемый метод с аргументами различных типов, а Overload будет передавать поток управления в методы с подходящей сигнатурой.Главный вопрос, конечно, скорость. Но несмотря на то, что это реализация в первом приближении и есть идеи по улучшению, уже работает достаточно шустро. Благодаря мемоизации в воркерах капитальной разницы с прямым вызовом не будет, особенно если перегруженных методов не очень много. Для PHP-FPM предусмотрен кэш с поддержкой OPcache (примерно как в докладе).
Короче, ставьте, экспериментируйте, закидывайте идеи в комментарии и в Issues в репозиторий.
https://github.com/typhoon-php/overloading
P.S. Всех с третьей восьмёркой!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71👍31💩17❤7👎6🤯6💊5😁2🤩2
Затусим в конце года, как обычно! Обсудим PHP 8.3, заслушаем доклады, запустим опрос сообщества и наверняка похоливарим на разные темы.
Что будет:
• Евгений Прохоров прямо на наших глазах ускорит PHP,
• Кирилл Несмеянов докажет, что никто, кроме него, не знает PHP,
• шеф-повар Александр Макаров приготовит Composer под новым соусом,
• Валентин Удальцов (это я) покажу вам PHP 8.3 во всей красе.
Проведёт мероприятие Михаил Каморин, а подсказывать текст из-за кулис будет наш бессменный режиссёр и продюсер — Алиса Круглова!
Залетайте в трансляцию на PHP Point, будет весело, как мне сейчас! Всех ждём в 12 по Москве.
https://youtu.be/JyxGieyBj3k
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥26☃7❤3
Пых
Мои слайды: https://vudaltsov.github.io/php83-slides/
👍31🔥8
new MyClass()->method() без скобок!
Вдохновлённый митапом, разобрался с синтаксисом Bison и закинул свой первый Pull Request в исходники PHP. Это изменение позволит обращаться к объектам, созданным через
Поддерживаются также динамические имена классов и анонимные классы (см. тесты).
После первичного одобрения сделаю RFC. Пока накидайте лайков в PR, пожалуйста.
https://github.com/php/php-src/pull/13029
Вдохновлённый митапом, разобрался с синтаксисом Bison и закинул свой первый Pull Request в исходники PHP. Это изменение позволит обращаться к объектам, созданным через
new, не оборачивая их в скобки. Во избежание неоднозначности работать будет только при наличии скобок аргументов конструктора.
final class A
{
const CONSTANT = 'constant';
public static $staticProperty = 'staticProperty';
public static function staticMethod() {}
public $property = 'property';
public function method() {}
public function __invoke() {}
}
new A()::CONSTANT;
new A()::$staticProperty;
new A()::staticMethod();
new A()->property;
new A()->method();
new A()();
Поддерживаются также динамические имена классов и анонимные классы (см. тесты).
После первичного одобрения сделаю RFC. Пока накидайте лайков в PR, пожалуйста.
https://github.com/php/php-src/pull/13029
👍111👎66🔥33🤔12👏4❤3
Пых
new MyClass()->method() без скобок! Вдохновлённый митапом, разобрался с синтаксисом Bison и закинул свой первый Pull Request в исходники PHP. Это изменение позволит обращаться к объектам, созданным через new, не оборачивая их в скобки. Во избежание неоднозначности…
Разберу самый частый комментарий к моему PR.
Многие полагают, что конструкция
Грамматика для new выглядит следующим образом:
Мой PR никак не нарушает ничего из вышесказанного, лишь делает скобки вокруг всего new-выражения опциональными. По сути, это как вместо
Подтверждением моих слов служит также и то, что по изменённой мной грамматике Bison безошибочно генерирует LR(1) парсер, который потом успешно компилируется в PHP и проходит все тесты. LR(1) парсер является детерминированным и не допускает неоднозначностей в описании грамматики.
Многие полагают, что конструкция
new A()->method() неоднозначна. Это заблуждение. По этой логике само выражение new A() в текущем PHP тоже неоднозначно, потому что можно представить, что сначала вызывается функция A(), а потом к её результату применяется new. Но это не так.Грамматика для new выглядит следующим образом:
T_NEW class_name_reference constructor_arguments, где class_name_reference — это либо class_name, либо new_variable, либо (expr) (именно в скобках). В свою очередь new_variable организована специально для new таким образом, что в ней не может быть вызовов со скобками. Получается, что сечайс в PHP мы можем создать объект через new тремя способами: new MyClass(), new $class(), new (getMyClass())(). То есть если хочется для имени класса использовать полноценное выражение с вызовами, нужно обязательно обернуть его в дополнительные скобки. Таким образом разрешается эта неоднозначность.Мой PR никак не нарушает ничего из вышесказанного, лишь делает скобки вокруг всего new-выражения опциональными. По сути, это как вместо
(MyClass::new())->method() писать просто MyClass::new()->method(). Приоритет однозначен и не требует уточнения, код легко читается слева направо. В Java и C# испокон веков можно писать именно так. То, что для вас сейчас непривычно, для джавистов и шарпистов — база.Подтверждением моих слов служит также и то, что по изменённой мной грамматике Bison безошибочно генерирует LR(1) парсер, который потом успешно компилируется в PHP и проходит все тесты. LR(1) парсер является детерминированным и не допускает неоднозначностей в описании грамматики.
GitHub
php-src/Zend/zend_language_parser.y at 2e12e80ac446de8381feb8932acd6ab787dd7401 · php/php-src
The PHP Interpreter. Contribute to php/php-src development by creating an account on GitHub.
👍89❤14🔥9🥴6👎3
Пых
Разберу самый частый комментарий к моему PR. Многие полагают, что конструкция new A()->method() неоднозначна. Это заблуждение. По этой логике само выражение new A() в текущем PHP тоже неоднозначно, потому что можно представить, что сначала вызывается функция…
Ilija Tovilio, на текущий момент один из самых активных контрибьюторов в PHP, только что дал мне карму для публикации RFC и пожелал удачи! Буду считать это хорошим знаком! 💪
https://externals.io/message/122052#122053
https://externals.io/message/122052#122053
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥120👍43🎉11👎3🤩3😎3❤2🕊2
C Новым Годом, дорогие подписчики! 🎩
Только что вдумчиво прошёл опрос от phpcommunity.ru. Всем, кому, как и мне, было некогда в конце года, предлагаю сделать это прямо сейчас — до закрытия опроса осталось 3 дня.
Результаты будут в конце января, из них мы узнаем демографию пыхаря и его предпочтения в технологиях, а также получим список самых крутых статей, видео и докладов в 2023 году.
https://forms.gle/n9QErGz5iGYrWEzj9
Только что вдумчиво прошёл опрос от phpcommunity.ru. Всем, кому, как и мне, было некогда в конце года, предлагаю сделать это прямо сейчас — до закрытия опроса осталось 3 дня.
Результаты будут в конце января, из них мы узнаем демографию пыхаря и его предпочтения в технологиях, а также получим список самых крутых статей, видео и докладов в 2023 году.
https://forms.gle/n9QErGz5iGYrWEzj9
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37🎄12🔥5🤮3💩2🥱2
Публичный собес на Senior PHP разработчика!
Завтра в 12:00 по Москве на YouTube-канале { между скобок } я проведу собеседование с Виталием Лихачевым.
У Виталия отличное CV: он занимался и фронтом, и бэком, и devops, владеет PHP, Python и Go. Ну а я со времён первого собеседования на PHP Point придумал новые вопросы по PHP и вокруг него, так что мне самому очень интересно, что у нас получится!
Подключайтесь завтра к YouTube трансляции или в Zoom, а также подписывайтесь на Telegram-канал { между скобок }, чтобы не пропустить анонсы других крутых стримов.
Завтра в 12:00 по Москве на YouTube-канале { между скобок } я проведу собеседование с Виталием Лихачевым.
У Виталия отличное CV: он занимался и фронтом, и бэком, и devops, владеет PHP, Python и Go. Ну а я со времён первого собеседования на PHP Point придумал новые вопросы по PHP и вокруг него, так что мне самому очень интересно, что у нас получится!
Подключайтесь завтра к YouTube трансляции или в Zoom, а также подписывайтесь на Telegram-канал { между скобок }, чтобы не пропустить анонсы других крутых стримов.
👍103🔥47❤6🤩1💅1
Пых
Публичный собес на Senior PHP разработчика! Завтра в 12:00 по Москве на YouTube-канале { между скобок } я проведу собеседование с Виталием Лихачевым. У Виталия отличное CV: он занимался и фронтом, и бэком, и devops, владеет PHP, Python и Go. Ну а я со времён…
YouTube
Валентин Удальцов, Виталий Лихачев: Публичное собеседование Senior Software Engineer (PHP)
Публичное собеседование на Senior PHP. Разберемся какие сейчас актуальные вопросы по PHP обсуждают на собеседованиях - паттерны разработки, полиморфизм/вариантность в чистом PHP, SOLID, DDD, микросервисные паттерны.
Проводить собеседование будет Валентин…
Проводить собеседование будет Валентин…
🔥25👍8❤2
Нужен алгоритмист для публичного собеседования!
Канал, у нас тут в Пыхтелке назрела идея провести публичныйлиткод собес по алгоритмам на канале PHP Point. Собеседуемый — отважный Иван Лещёв из Авито. А вот интервьюер сходу не нашёлся.
Отпишитесь в комментариях, кто готов задать ему жару!
Update. Всё, интервьюер есть, ждите анонса.
Канал, у нас тут в Пыхтелке назрела идея провести публичный
Отпишитесь в комментариях, кто готов задать ему жару!
Update. Всё, интервьюер есть, ждите анонса.
Telegram
Иван Лещёв
да, я уже не пишу на PHP
👍29🔥8🤡2
В Питере — Пых!*
15 февраля на Live PHP SPb будет мощный лайн-ап:
▸ Кирилл Несмеянов продемонстрируетАнастейше все оттенки асинхронности,
▸ Дмитрий Елисеев принесёт переносное окружение для разработки и тестов,
▸ ну а я расскажу про половой полиморфизм туркестанского термита.
Ждём всех завтра в 19:00 в баре Failover (к сожалению, только тех, кто ранее прошёл регистрацию) и в трансляции.
* Автор заголовка — Дима Елисеев, завтра мы попробуем его обыграть. 😉
15 февраля на Live PHP SPb будет мощный лайн-ап:
▸ Кирилл Несмеянов продемонстрирует
▸ Дмитрий Елисеев принесёт переносное окружение для разработки и тестов,
▸ ну а я расскажу про половой полиморфизм туркестанского термита.
Ждём всех завтра в 19:00 в баре Failover (к сожалению, только тех, кто ранее прошёл регистрацию) и в трансляции.
* Автор заголовка — Дима Елисеев, завтра мы попробуем его обыграть. 😉
👍50🔥17👎3🌭2🍾2😱1
Пых
В Питере — Пых!* 15 февраля на Live PHP SPb будет мощный лайн-ап: ▸ Кирилл Несмеянов продемонстрирует Анастейше все оттенки асинхронности, ▸ Дмитрий Елисеев принесёт переносное окружение для разработки и тестов, ▸ ну а я расскажу про половой полиморфизм…
00:00 Все оттенки асинхронности (Кирилл)
55:01 Полиморфизм в современном PHP (Валентин)
2:00:29 Переносимое окружение для разработки и тестов (Дмитрий)
Мои слайды: https://vudaltsov.github.io/polymorphism/
Слайды ребят: https://news.1rj.ru/str/live_php/6671
55:01 Полиморфизм в современном PHP (Валентин)
2:00:29 Переносимое окружение для разработки и тестов (Дмитрий)
Мои слайды: https://vudaltsov.github.io/polymorphism/
Слайды ребят: https://news.1rj.ru/str/live_php/6671
🔥40👍23❤10
Пых
Нужен алгоритмист для публичного собеседования! Канал, у нас тут в Пыхтелке назрела идея провести публичный литкод собес по алгоритмам на канале PHP Point. Собеседуемый — отважный Иван Лещёв из Авито. А вот интервьюер сходу не нашёлся. Отпишитесь в комментариях…
Через 2 часа встречаемся на канале PHP Point, чтобы посмотреть схватку двух бессменных админов Пыхтелки: Сергея и Ивана. Второй собес на канале спустя 3 года!
Готовьтесь похоливарить в комментариях про ценность алгоритмических задач при тестировании бэкенд-разработчиков.
https://youtu.be/ZPGjJDIZm4Y
https://gist.github.com/vudaltsov/ed246caaef9e8ef4c46a328075d38e72
Please open Telegram to view this post
VIEW IN TELEGRAM
Youtube
- YouTube
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
👍45🤡8🔥2👏1
Тест на циклические ссылки
Как проверить, что объект не содержит циклических ссылок и автоматически высвобождается из памяти?
Оказывается, очень просто: через WeakReference. После зачистки переменной WeakReference будет пустым, если других ссылок на объект не останется. Первый тест на скриншоте из Typhoon Reflection. Он помог мне найти несколько проблем и улучшить архитектуру библиотеки.
Аналогичный тест для PHP Parser, например, не пройдёт. Парсер ссылается сам на себя через анонимные функции, записанные в приватное свойство, и не может быть автоматически утилизирован, см. мой тикет. Тривиально исправить там вроде не получится, нужно менять архитектуру, поэтому PR я пока не делал.
Имеет смысл задумываться о таких вещах, так как выключение GC ускоряет PHP, да и в целом циклические зависимости — антипаттерн.
Update: Никита пофиксил парсер.
Как проверить, что объект не содержит циклических ссылок и автоматически высвобождается из памяти?
Оказывается, очень просто: через WeakReference. После зачистки переменной WeakReference будет пустым, если других ссылок на объект не останется. Первый тест на скриншоте из Typhoon Reflection. Он помог мне найти несколько проблем и улучшить архитектуру библиотеки.
Аналогичный тест для PHP Parser, например, не пройдёт. Парсер ссылается сам на себя через анонимные функции, записанные в приватное свойство, и не может быть автоматически утилизирован, см. мой тикет. Тривиально исправить там вроде не получится, нужно менять архитектуру, поэтому PR я пока не делал.
Имеет смысл задумываться о таких вещах, так как выключение GC ускоряет PHP, да и в целом циклические зависимости — антипаттерн.
Update: Никита пофиксил парсер.
🔥45👍18🤝1