Сегодня в 17 часов по Москве будет очередной митапчик. Про code review. С довольно известными людьми в мире PHP. Вообще, все эти онлайн-митапы эпохи ковида пока мне не очень доставляют. Чего-то в них не хватает. Но этот попробую послушать.
https://www.youtube.com/watch?v=JP7lppzWaLg
https://www.youtube.com/watch?v=JP7lppzWaLg
YouTube
Как готовить код-ревью: обсуждаем плохие и хорошие практики с подкастом SDCast
Слушайте аудиоверсию на других платформах https://sdcast.ksdaemon.ru/
3:30 - Кто пришел говорить и что болит у аутсорса, продуктовой разработки и опенсорса
7:35 - Для чего нам код-ревью и почему это не про баги (Сергей)
11:57 - Идеальный процесс код-ревью…
3:30 - Кто пришел говорить и что болит у аутсорса, продуктовой разработки и опенсорса
7:35 - Для чего нам код-ревью и почему это не про баги (Сергей)
11:57 - Идеальный процесс код-ревью…
После большого перерыва наконец начал опять писать статейки. Одну написал, еще где-то две готовятся. Эта статья просто мысли про ООП. Программисты ООП языков знают SOLID, киты ООП и прочие GRASPы, но код почти всегда получается процедурным. Процедурное мышление привычнее. Для ООП надо напрягаться, думая какие данные кому реально принадлежат. Иногда это непросто.
Статья на английском - https://adelf.tech/2020/oop-thinking
Перевод на Хабре - https://habr.com/ru/post/511744/
Статья на английском - https://adelf.tech/2020/oop-thinking
Перевод на Хабре - https://habr.com/ru/post/511744/
adelf.tech
Are you sure you write OOP code? | adelf.tech
We, PHP developers, proudly tell everybody that we know OOP and write pure OOP-code, but, honestly, more than 95% of Laravel applications code I usually see is procedural!
Если не в курсе, то недавно появилось сообщество laravel-программисток Larabelles. Один человек в твиттере решил раздать одну годовалую лицензию на PhpStorm случайной девушке, кто ответит на его твит. Я ему в привате: "подари и лицензию на Laravel Idea!" Он :"Классно! Я тут каждый месяц устраиваю нечто подобное." Я дал ему лицензий и благословил на их раздачу.
Через пару дней твит: https://twitter.com/JustSteveKing/status/1296751057499049984
Following on from supporting the amazing women in the #php community. I would like to next show my support to the #LGBTQ community by offering a years license for @laravel_idea for use in PHPStorm 🎉
Please drop a 🏳️🌈 or 🦄 in the comments ❤️
Неожиданный поворот. "Эй, представители ЛГБТ, пишущие на Laravel в PhpStorm! Пишите сюда! Ой чего подарю!" )) Даже не знаю как относиться к этому ) С трепетом жду какое сообщество будет следующим.
Через пару дней твит: https://twitter.com/JustSteveKing/status/1296751057499049984
Following on from supporting the amazing women in the #php community. I would like to next show my support to the #LGBTQ community by offering a years license for @laravel_idea for use in PHPStorm 🎉
Please drop a 🏳️🌈 or 🦄 in the comments ❤️
Неожиданный поворот. "Эй, представители ЛГБТ, пишущие на Laravel в PhpStorm! Пишите сюда! Ой чего подарю!" )) Даже не знаю как относиться к этому ) С трепетом жду какое сообщество будет следующим.
Twitter
Steve McDougall
Following on from supporting the amazing women in the #php community. I would like to next show my support to the #LGBTQ community by offering a years license for @laravel_idea for use in PHPStorm 🎉 Please drop a 🏳️🌈 or 🦄 in the comments ❤️ Winner chosen…
Совершенно случайно у меня оказались 9 билетов на Laracon Online. Он будет уже в среду, поэтому решил быстро их разыграть среди ответов на этот твит - https://twitter.com/laravel_idea/status/1297956995077672962 Подписываться необязательно )
Twitter
Laravel Idea
Suddenly, I realized that I have nine tickets to @LaraconOnline, which starts on Wed! We don't have much time, so they will be randomly gifted to this tweet repliers. Winners will be chosen tomorrow, August, 25 at 20:00 CET (14:00 EST).
29 сентября в 21:00 по Москве буду выступать на Laravel Worldwide Meetup - https://meetup.laravel.com/. Расскажу немного про то, как PhpStorm работает изнутри, что происходит во время индексации и на реальных примерах плагинов (.env files support, Laravel Idea, PEST) покажу как они могут встраиваться почти везде.
Посмотреть можно будет бесплатно и без регистрации тут - https://www.youtube.com/watch?v=h44R_ru8D3o Время, правда, для СНГ не очень удачное, но для этого и запись предусмотрена.
Посмотреть можно будет бесплатно и без регистрации тут - https://www.youtube.com/watch?v=h44R_ru8D3o Время, правда, для СНГ не очень удачное, но для этого и запись предусмотрена.
Это пиарили по всем чатикам, но если вы не видели, то сегодня в 19 по Москве будет стрим, где двое будут рефакторить код, видимо как-то соревнуясь друг с другом. Я посмотрю, вдруг интересно будет.
Ссылка: https://youtu.be/ucO7229o8Ew
Ссылка: https://youtu.be/ucO7229o8Ew
YouTube
Рефакторим c Александром Макаровым, Валентином Удальцовым, Валентином Назаровым, Леонидом Корсаковым
Стрим, на котором ребята из Yii, Skyeng, каналов Пых и PHPKazan посмотрят на код популярного гитхаб-проекта, найдут, что там порефакторить (и порефакторят).
00:22 - Интро от ведущих - Александра Макарова (Yii) и Валентина Назарова (Skyeng)
04:32 - В эфир…
00:22 - Интро от ведущих - Александра Макарова (Yii) и Валентина Назарова (Skyeng)
04:32 - В эфир…
https://habr.com/ru/company/vk/blog/527420/
ВКонтакте снова выкладывает KPHP, но в отличие от первого релиза, действительно впечатляет. Работа была проделана огромная. Даже плагин для шторма сделали: https://unserialize.github.io/kphpstorm/
Все эти красивые выводы типов... было много споров между сторонниками и противниками этих статических нововведений: типизированные свойства и т.д. А теперь реальный профит от типизации - оно хорошо укладывается в типы C++ и производительность сильно выше. Разумеется, это не на всех кейсах, но всё-таки. Я уверен, в будущем и в движке php произойдут такие изменения, поэтому типизируемся потихоньку.
ВКонтакте снова выкладывает KPHP, но в отличие от первого релиза, действительно впечатляет. Работа была проделана огромная. Даже плагин для шторма сделали: https://unserialize.github.io/kphpstorm/
Все эти красивые выводы типов... было много споров между сторонниками и противниками этих статических нововведений: типизированные свойства и т.д. А теперь реальный профит от типизации - оно хорошо укладывается в типы C++ и производительность сильно выше. Разумеется, это не на всех кейсах, но всё-таки. Я уверен, в будущем и в движке php произойдут такие изменения, поэтому типизируемся потихоньку.
Хабр
ВКонтакте снова выкладывает KPHP
Привет! Сейчас будет дежавю. Мы снова выложили на GitHub наш PHP-компилятор — KPHP. Он проделал большой путь, и чтобы рассказать о нём, сначала телепортируемся...
Кстати, если кто-то решил сразу начать использовать KPHP на своих проектах - зря. Нужно изначально писать код, учитывая его особенности. Я уверен, что фреймворки аля Laravel/Symfony просто не скомпилируются, поэтому никаких фреймворков - только хардкор.
Провожу сейчас небольшой эксперимент. Скидку на кибер-понедельник(ссылка если вдруг кому интересно - https://laravel-idea.com/promo/cyber-monday-2020, но не подумайте, что рекламирую). Всегда было интересно насколько выгодно делать такие акции и выгодно ли вообще. Где-то внутри есть уверенность, что если покупают со скидкой, то и без скидки купят, соответственно, лишь теряю деньги с этих скидок.
С другой стороны, программные продукты - не пылесосы. От того, что я продам двум людям вместо одного, у меня расходов не прибавится, а денег это принесёт больше. Этот день в итоге побьёт рекорд по дневным продажам(я уже вижу статистику), но как это отразится на декабрьских продажах?
P.S. Как же я задолбался заниматься этой ерундой, вместо того, чтобы просто разрабатывать софт... Но без этого никак нельзя. Кстати, я начал на плагине зарабатывать чуток больше, чем зарплата на последнем месте работы. Это большой прогресс и давняя мечта потихоньку реализуется.
P.P.S. По нескольким просьбам сделал обсуждения. Если вдруг кто хочет высказываться - милости просим.
С другой стороны, программные продукты - не пылесосы. От того, что я продам двум людям вместо одного, у меня расходов не прибавится, а денег это принесёт больше. Этот день в итоге побьёт рекорд по дневным продажам(я уже вижу статистику), но как это отразится на декабрьских продажах?
P.S. Как же я задолбался заниматься этой ерундой, вместо того, чтобы просто разрабатывать софт... Но без этого никак нельзя. Кстати, я начал на плагине зарабатывать чуток больше, чем зарплата на последнем месте работы. Это большой прогресс и давняя мечта потихоньку реализуется.
P.P.S. По нескольким просьбам сделал обсуждения. Если вдруг кто хочет высказываться - милости просим.
Завтра, 23 декабря в 19:00, будет стрим-холивар про вредность и полезность трейтов. Моя позиция понятна по картинке. Валентин Удальцов будет её защищать. Я напросился в команду поддержки :) Ссылка - https://www.youtube.com/watch?v=DEk56xbMITo
Большую часть декабря мало что хотелось делать. Горло побаливало, много спал и почти не работал. Сдал анализ на антитела - это был ковид. Хорошо когда твоей лени есть оправдание :)
После поста про скидку просили некий отчёт с цифрами. Совмещу это с итогами года. Разумеется, главное событие для меня - полный отказ от "работы на дядю". До сих пор не верится, но уже полгода я живу за счёт продаж своего продукта и, видимо, это продлится еще долго(см. графики). Работать меньше не стал(декабрь не считается). Засидеться допоздна, делая какую-то фичу - всё еще норма. Надо бы с этим завязывать. В 2021 хочу начать опять писать статейки, видюшки еще делать и другую всякую публичную активность. Мечты-мечты.
После поста про скидку просили некий отчёт с цифрами. Совмещу это с итогами года. Разумеется, главное событие для меня - полный отказ от "работы на дядю". До сих пор не верится, но уже полгода я живу за счёт продаж своего продукта и, видимо, это продлится еще долго(см. графики). Работать меньше не стал(декабрь не считается). Засидеться допоздна, делая какую-то фичу - всё еще норма. Надо бы с этим завязывать. В 2021 хочу начать опять писать статейки, видюшки еще делать и другую всякую публичную активность. Мечты-мечты.
Это график "уникальных загрузок" плагина. Здесь не считаются те загрузки, когда пользователи просто обновляют плагин на новую версию. Нетрудно заметить регулярный прогресс этого показателя и какой-то странный скачок в декабре, как раз тогда, когда я ничего не делал и даже твиттер плагина(https://twitter.com/laravel_idea) почти не вёл. Это связано с выходом шторма 2020.3 или сарафанное радио наконец заработало... не знаю.
Ну и самое интересное - продажи! Несмотря на кибер-понедельник в последний день ноября c рекордными дневными продажами, декабрьский доход чуток превысил ноябрьский. Прогресс виден и перспективы на 2021 прекрасные. Для понимания нарисовал примерный уровень моей зарплаты на последней работе (фулл-тайм фрилансе на американскую контору) - зелёная линия.
Почему график скачиваний такой ровный, а продаж нет - загадка. Аналитики у меня никакой нет, и это обидно.
Почему график скачиваний такой ровный, а продаж нет - загадка. Аналитики у меня никакой нет, и это обидно.
Ну и, напоследок в этом году, пару интересных ссылок.
Рома Пронский и SkyEng проводят опрос среди PHP-разработчиков. Анонимный, но если хочется выиграть пхпшного слона, то можно оставить свой email - https://skyeng-school.typeform.com/to/iNfIjQbr
Список чатиков, каналов и ютуб-контента про PHP - https://habr.com/ru/company/skyeng/blog/534758/
По обоим ссылкам есть упоминание этого канала, так что я обязан был это запостить )
Рома Пронский и SkyEng проводят опрос среди PHP-разработчиков. Анонимный, но если хочется выиграть пхпшного слона, то можно оставить свой email - https://skyeng-school.typeform.com/to/iNfIjQbr
Список чатиков, каналов и ютуб-контента про PHP - https://habr.com/ru/company/skyeng/blog/534758/
По обоим ссылкам есть упоминание этого канала, так что я обязан был это запостить )
Typeform
Подводим итоги PHP-года и разыгрываем слона
10 вопросов и пара минут - все, что потребуется
Медуза выпустила большую статью о том, как внутри устроена их система контента. Статья прям суровая техническая и её весьма интересно читать. Мне понравилось что они еще в самом начале использовали подход, о котором я часто думал. С традиционной базой данных(постгрес) работает только внутренняя система, в которой пишут редакторы и одновременно все нужные данные идут в редис. А сам сайт работает исключительно только с редисом. Когда все данные которые нужны приложению легко описать и структурировать их вполне можно хранить в редисах, получив и перформанс и упрощение системы.
https://meduza.io/feature/2021/02/10/kak-ustroeno-upravlenie-kontentom-v-meduze
https://meduza.io/feature/2021/02/10/kak-ustroeno-upravlenie-kontentom-v-meduze
О пользе тестов
Делал сегодня огромный рефакторинг. Перелопатил под сотню файлов и тысячи строк. Очень сильно упростил внутреннюю структуру авто-дополнений Laravel Idea. Всё стало проще и красивее и быстрее и появилась возможность реализовывать кастомные авто-дополнения, в общем одни плюсы, но суть не в этом.
Я запустил после всего этого тесты и один из них упал. Я быстро нашёл мелкий баг (там банально не ту переменную заюзал). Если бы этого теста не было - оно ушло бы в релиз и его заметили бы пользователи. То, что работало раньше и перестало после рефакторинга, называется регрессионным багом. Основная польза тестов именно в этом! Они позволяют находить баги регрессии на очень ранней стадии, позволяя смело делать даже крупные рефакторинги.
Понимаю, что повторяю то, что вы уже раз 10 читали где-то, но сегодня прям типичный случай со мной произошёл.
Делал сегодня огромный рефакторинг. Перелопатил под сотню файлов и тысячи строк. Очень сильно упростил внутреннюю структуру авто-дополнений Laravel Idea. Всё стало проще и красивее и быстрее и появилась возможность реализовывать кастомные авто-дополнения, в общем одни плюсы, но суть не в этом.
Я запустил после всего этого тесты и один из них упал. Я быстро нашёл мелкий баг (там банально не ту переменную заюзал). Если бы этого теста не было - оно ушло бы в релиз и его заметили бы пользователи. То, что работало раньше и перестало после рефакторинга, называется регрессионным багом. Основная польза тестов именно в этом! Они позволяют находить баги регрессии на очень ранней стадии, позволяя смело делать даже крупные рефакторинги.
Понимаю, что повторяю то, что вы уже раз 10 читали где-то, но сегодня прям типичный случай со мной произошёл.
Дмитрий Елисеев хорошую статью написал. В своём стиле, степенно и обстоятельно, разбирает ту проблему, о которой я кратко написал в своей статье "Вы уверены, что пишете объектно-ориентированный код?". Мне иногда не хватает этой обстоятельности. Всё пытаюсь писать коротко, боюсь написать много буков.
Ссылка: https://elisdn.ru/blog/142/structs-or-objects
Ссылка: https://elisdn.ru/blog/142/structs-or-objects
Часто приходится рыться в исходниках ларавелевских пакетов. И находки иногда очень радуют. laravel/legacy-factories. Им надо определять новая или старая фабрика находится в конкретном файле. Новая - это с классом, a старые были просто с вызовами функций, без классов. Решение меня прямо поразило :) Очень много возможностей для ложно-отрицательных, да и ложно-положительных ответов. Так, что будьте крайне аккуратны если используете данный пакет вместе с новыми фабриками. Никаких своих BaseFactory. Аккуратненько, как по минному полю.
Оправданием является то, что этот код в продакшене то не вызывается, так что падать будет только на машинах разработчиков и на CI. Да и трудно решить эту задачу без какого-нибудь nikic/php-parser...
Оправданием является то, что этот код в продакшене то не вызывается, так что падать будет только на машинах разработчиков и на CI. Да и трудно решить эту задачу без какого-нибудь nikic/php-parser...
Пётр Мязин, автор пятиминутки PHP, добрался до книги Бугаенко "Элегантные объекты" (https://t.me/tg_5minphp/827). Как у любого разумного человека, у него возникло много возражений. Там предлагается много радикальных вещей, и мало кто согласится свой продакшен код серьезного проекта подвергать таким изменениям.
Смысл в том, что к книге надо относиться не как к руководству к действиям, а как к сборнику вопросов к вашему коду. Могу подсказать прямой аналог - объектная гимнастика. Оригинал статьи, перевод на хабре. Там тоже очень интересные и радикальные практики (достаточно даже одного "не больше двух полей на класс"), но не надо бежать и начинать их применять в своём коде. Надо просто задуматься "как изменился бы мой код, если бы пришлось разрабатывать с такими ограничениями?". Среди возникших в голове изменений могут найтись те, которые сделают ваш код намного более объектным, более связным, менее связанным и т.д. И вот эти изменения вполне можно и внедрять.
Полностью же писать код используя эти практики можно лишь на тренировочном проекте, развивая свои ООП-навыки. На следующей неделе на оффлайн митапе в Казани буду делать доклад и в самом начале буду говорить о том же самом. Об этом еще напишу.
Смысл в том, что к книге надо относиться не как к руководству к действиям, а как к сборнику вопросов к вашему коду. Могу подсказать прямой аналог - объектная гимнастика. Оригинал статьи, перевод на хабре. Там тоже очень интересные и радикальные практики (достаточно даже одного "не больше двух полей на класс"), но не надо бежать и начинать их применять в своём коде. Надо просто задуматься "как изменился бы мой код, если бы пришлось разрабатывать с такими ограничениями?". Среди возникших в голове изменений могут найтись те, которые сделают ваш код намного более объектным, более связным, менее связанным и т.д. И вот эти изменения вполне можно и внедрять.
Полностью же писать код используя эти практики можно лишь на тренировочном проекте, развивая свои ООП-навыки. На следующей неделе на оффлайн митапе в Казани буду делать доклад и в самом начале буду говорить о том же самом. Об этом еще напишу.
Telegram
Пятиминутка PHP
Прочитал книгу «Элегантные объекты» Егора Бугаенко: http://amp.gs/6WRa
Автор описывает свой взгляд на «правильное ООП», даёт практические рекомендации и показывает наглядные примеры, итоговая цель которых — хорошо поддерживаемый код! Я полностью разделяю…
Автор описывает свой взгляд на «правильное ООП», даёт практические рекомендации и показывает наглядные примеры, итоговая цель которых — хорошо поддерживаемый код! Я полностью разделяю…
Послезавтра, 15 мая(суббота), в казанском Штабе пройдёт оффлайн PHP-митап. Там будут 4 нормальных технических доклада и я, переливающий из пустого в порожнее про ООП. Изначально хотел рассказать чем плохи трейты, но причины их плохости лежат так глубоко, что пришлось нехило так копнуть. Прикрепляю тут один слайд, чтобы вы поняли насколько глубоко пришлось копать.
Ссылка на митап - https://phpcommunity.ru/kazan-php-2. Регистрация бесплатна, но обязательна. Трансляция на ютубе тоже будет. Здесь.
Ссылка на митап - https://phpcommunity.ru/kazan-php-2. Регистрация бесплатна, но обязательна. Трансляция на ютубе тоже будет. Здесь.