adelf on programming
1.54K subscribers
45 photos
1 video
63 links
Download Telegram
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. Регистрация бесплатна, но обязательна. Трансляция на ютубе тоже будет. Здесь.
​​#MoreView #17 | Адель Файзрахманов - автор acwa_book и разработчик Laravel Idea

Свои первые интервью я брал у PHP разработчиков и решил вспомнить как оно. В этот раз буду брать интервью у Аделя Файзрахманова — автора acwa_book и разработчика Laravel Idea.

Я успел с ним немного пообщаться на PHPRussia, когда объявлял его доклад. Стало крайне интересно пообщаться поподробнее с человеком, который делает крайне полезный плагин для PHPStorm и живет исключительно за счет этого плагина.

Заходите на стрим в субботу, 24 июля, в 15.00 по Москве и задавайте свои вопросы. Автору лучшего вопроса, традиционно, пицца в любую точку мира.

До встречи!

Ссылка на трансляцию: youtu.be/H1W5GmX4hvc
Если вдруг кто не знает чем себя занять сегодня в 3 часа дня по Москве, то можно посмотреть интервью Антона Морева со мной онлайн, каверзные вопросы позадавать.

Собираемся говорить про жизнь, про книжку, про Laravel Idea (Антон вроде не ларавельщик, поэтому будет спрашивать больше про плагин как бизнес). Может еще какие темы появятся.
Сегодня показательный кейс у меня был. Есть объект, для работы которого требовалось Знание. И Знание это было реализовано прямо внутри объекта, потому что никому другому оно не требовалось. Если конкретнее, то реализация той подсказки, которая на картинке выше. Знание это в том, чтобы найти все поля, которые можно подсказать в реквесте. Там надо либо найти правила валидации в этом методе, либо найти кастомный реквест и у него вытащить поля.

А сегодня я работаю над кейсом посложнее - https://github.com/laravel-idea/plugin/issues/351. Там тоже понадобилось это Знание. И возник соблазн немного модифицировать тот, первый объект, чтобы он поделился этим Знанием с новым. Но я вовремя спохватился. Это настолько явный индикатор того, что надо это Знание вытаскивать в свой, отдельный объект, что лучше и не придумать. Всегда, когда вы себя ловите на подобном, надо обязательно подумать о Extract Class рефакторинге и композиции.
Я завел канал, где буду в свободной форме делиться разными фичами Laravel Idea, которые разрабатываю сейчас. Там же можно их пообсуждать, покритиковать и т.д. Только что опубликовал там информацию про новый релиз.

https://t.me/laravel_idea
Я решил поспонсировать Laracon Online - https://laracon.net/. Сложно конечно предсказать выхлоп... Чтобы показать своё видео там нужно от 6 килобаксов выложить. А я немного лайтовее участвую. Баннер, плюс упоминание в твиттере + скидку свою дать. Посмотрим.

Мне выдали 5 билетов. Один себе возьму. Остальное готов разыграть. Кто реально хочет послушать эти доклады на английском прошу - https://forms.gle/jx2SJeT17BUd8GeB7

В 22:00(мск) 30 августа сделаю выборку в гугл таблицы. И как-нибудь рандомно выберу победителей.
Хорошая статейка на хабре - 20 вещей, которые я узнал за 20 лет работы инженером-программистом. Вещи такие подмечаются реально только с опытом. Очень многое откликается.

Например, "Каждая система в конечном счёте отстой, смиритесь с этим". Да! Если это не hello world, то всегда в проекте будут места с запашком, а иногда и совсем уж выгребные ямы. Даже если проект считается хорошим. В каждом большом проекте есть места, в которые не заглядывают месяцами, а то и годами. Они работают стабильно, своё дело делают и если внутри говнокод, то это никому не мешает. Смысл рефакторить такое? Вот когда это место начинает активно меняться, тогда говнокод и начинает жрать драгоценное время. Именно такие моменты хорошие спецы чувствуют и начинают рефакторинги.