adelf on programming
1.55K subscribers
46 photos
1 video
63 links
Download Telegram
Сегодня в 17 часов по Москве будет очередной митапчик. Про code review. С довольно известными людьми в мире PHP. Вообще, все эти онлайн-митапы эпохи ковида пока мне не очень доставляют. Чего-то в них не хватает. Но этот попробую послушать.

https://www.youtube.com/watch?v=JP7lppzWaLg
После большого перерыва наконец начал опять писать статейки. Одну написал, еще где-то две готовятся. Эта статья просто мысли про ООП. Программисты ООП языков знают SOLID, киты ООП и прочие GRASPы, но код почти всегда получается процедурным. Процедурное мышление привычнее. Для ООП надо напрягаться, думая какие данные кому реально принадлежат. Иногда это непросто.

Статья на английском - https://adelf.tech/2020/oop-thinking
Перевод на Хабре - https://habr.com/ru/post/511744/
Если не в курсе, то недавно появилось сообщество 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! Пишите сюда! Ой чего подарю!" )) Даже не знаю как относиться к этому ) С трепетом жду какое сообщество будет следующим.
Совершенно случайно у меня оказались 9 билетов на Laracon Online. Он будет уже в среду, поэтому решил быстро их разыграть среди ответов на этот твит - https://twitter.com/laravel_idea/status/1297956995077672962 Подписываться необязательно )
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://habr.com/ru/company/vk/blog/527420/

ВКонтакте снова выкладывает KPHP, но в отличие от первого релиза, действительно впечатляет. Работа была проделана огромная. Даже плагин для шторма сделали: https://unserialize.github.io/kphpstorm/

Все эти красивые выводы типов... было много споров между сторонниками и противниками этих статических нововведений: типизированные свойства и т.д. А теперь реальный профит от типизации - оно хорошо укладывается в типы C++ и производительность сильно выше. Разумеется, это не на всех кейсах, но всё-таки. Я уверен, в будущем и в движке php произойдут такие изменения, поэтому типизируемся потихоньку.
Кстати, если кто-то решил сразу начать использовать KPHP на своих проектах - зря. Нужно изначально писать код, учитывая его особенности. Я уверен, что фреймворки аля Laravel/Symfony просто не скомпилируются, поэтому никаких фреймворков - только хардкор.
Провожу сейчас небольшой эксперимент. Скидку на кибер-понедельник(ссылка если вдруг кому интересно - https://laravel-idea.com/promo/cyber-monday-2020, но не подумайте, что рекламирую). Всегда было интересно насколько выгодно делать такие акции и выгодно ли вообще. Где-то внутри есть уверенность, что если покупают со скидкой, то и без скидки купят, соответственно, лишь теряю деньги с этих скидок.

С другой стороны, программные продукты - не пылесосы. От того, что я продам двум людям вместо одного, у меня расходов не прибавится, а денег это принесёт больше. Этот день в итоге побьёт рекорд по дневным продажам(я уже вижу статистику), но как это отразится на декабрьских продажах?

P.S. Как же я задолбался заниматься этой ерундой, вместо того, чтобы просто разрабатывать софт... Но без этого никак нельзя. Кстати, я начал на плагине зарабатывать чуток больше, чем зарплата на последнем месте работы. Это большой прогресс и давняя мечта потихоньку реализуется.

P.P.S. По нескольким просьбам сделал обсуждения. Если вдруг кто хочет высказываться - милости просим.
Завтра, 23 декабря в 19:00, будет стрим-холивар про вредность и полезность трейтов. Моя позиция понятна по картинке. Валентин Удальцов будет её защищать. Я напросился в команду поддержки :) Ссылка - https://www.youtube.com/watch?v=DEk56xbMITo
Большую часть декабря мало что хотелось делать. Горло побаливало, много спал и почти не работал. Сдал анализ на антитела - это был ковид. Хорошо когда твоей лени есть оправдание :)

После поста про скидку просили некий отчёт с цифрами. Совмещу это с итогами года. Разумеется, главное событие для меня - полный отказ от "работы на дядю". До сих пор не верится, но уже полгода я живу за счёт продаж своего продукта и, видимо, это продлится еще долго(см. графики). Работать меньше не стал(декабрь не считается). Засидеться допоздна, делая какую-то фичу - всё еще норма. Надо бы с этим завязывать. В 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/

По обоим ссылкам есть упоминание этого канала, так что я обязан был это запостить )
Медуза выпустила большую статью о том, как внутри устроена их система контента. Статья прям суровая техническая и её весьма интересно читать. Мне понравилось что они еще в самом начале использовали подход, о котором я часто думал. С традиционной базой данных(постгрес) работает только внутренняя система, в которой пишут редакторы и одновременно все нужные данные идут в редис. А сам сайт работает исключительно только с редисом. Когда все данные которые нужны приложению легко описать и структурировать их вполне можно хранить в редисах, получив и перформанс и упрощение системы.

https://meduza.io/feature/2021/02/10/kak-ustroeno-upravlenie-kontentom-v-meduze
О пользе тестов

Делал сегодня огромный рефакторинг. Перелопатил под сотню файлов и тысячи строк. Очень сильно упростил внутреннюю структуру авто-дополнений Laravel Idea. Всё стало проще и красивее и быстрее и появилась возможность реализовывать кастомные авто-дополнения, в общем одни плюсы, но суть не в этом.

Я запустил после всего этого тесты и один из них упал. Я быстро нашёл мелкий баг (там банально не ту переменную заюзал). Если бы этого теста не было - оно ушло бы в релиз и его заметили бы пользователи. То, что работало раньше и перестало после рефакторинга, называется регрессионным багом. Основная польза тестов именно в этом! Они позволяют находить баги регрессии на очень ранней стадии, позволяя смело делать даже крупные рефакторинги.

Понимаю, что повторяю то, что вы уже раз 10 читали где-то, но сегодня прям типичный случай со мной произошёл.
Дмитрий Елисеев хорошую статью написал. В своём стиле, степенно и обстоятельно, разбирает ту проблему, о которой я кратко написал в своей статье "Вы уверены, что пишете объектно-ориентированный код?". Мне иногда не хватает этой обстоятельности. Всё пытаюсь писать коротко, боюсь написать много буков.

Ссылка: https://elisdn.ru/blog/142/structs-or-objects
Часто приходится рыться в исходниках ларавелевских пакетов. И находки иногда очень радуют. laravel/legacy-factories. Им надо определять новая или старая фабрика находится в конкретном файле. Новая - это с классом, a старые были просто с вызовами функций, без классов. Решение меня прямо поразило :) Очень много возможностей для ложно-отрицательных, да и ложно-положительных ответов. Так, что будьте крайне аккуратны если используете данный пакет вместе с новыми фабриками. Никаких своих BaseFactory. Аккуратненько, как по минному полю.

Оправданием является то, что этот код в продакшене то не вызывается, так что падать будет только на машинах разработчиков и на CI. Да и трудно решить эту задачу без какого-нибудь nikic/php-parser...
Пётр Мязин, автор пятиминутки PHP, добрался до книги Бугаенко "Элегантные объекты" (https://t.me/tg_5minphp/827). Как у любого разумного человека, у него возникло много возражений. Там предлагается много радикальных вещей, и мало кто согласится свой продакшен код серьезного проекта подвергать таким изменениям.

Смысл в том, что к книге надо относиться не как к руководству к действиям, а как к сборнику вопросов к вашему коду. Могу подсказать прямой аналог - объектная гимнастика. Оригинал статьи, перевод на хабре. Там тоже очень интересные и радикальные практики (достаточно даже одного "не больше двух полей на класс"), но не надо бежать и начинать их применять в своём коде. Надо просто задуматься "как изменился бы мой код, если бы пришлось разрабатывать с такими ограничениями?". Среди возникших в голове изменений могут найтись те, которые сделают ваш код намного более объектным, более связным, менее связанным и т.д. И вот эти изменения вполне можно и внедрять.

Полностью же писать код используя эти практики можно лишь на тренировочном проекте, развивая свои ООП-навыки. На следующей неделе на оффлайн митапе в Казани буду делать доклад и в самом начале буду говорить о том же самом. Об этом еще напишу.
Послезавтра, 15 мая(суббота), в казанском Штабе пройдёт оффлайн PHP-митап. Там будут 4 нормальных технических доклада и я, переливающий из пустого в порожнее про ООП. Изначально хотел рассказать чем плохи трейты, но причины их плохости лежат так глубоко, что пришлось нехило так копнуть. Прикрепляю тут один слайд, чтобы вы поняли насколько глубоко пришлось копать.

Ссылка на митап - https://phpcommunity.ru/kazan-php-2. Регистрация бесплатна, но обязательна. Трансляция на ютубе тоже будет. Здесь.