Forwarded from PHP Digest
«Своя игра» по PHP на канале CutCode
Вы можете задать сейчас вопросы участникам викторины.
Самые интересные вопросы будут разобраны на игре, а их авторы получат возможность поучаствовать в следующей игре и получить мерч!
🕛 13 марта в 19:00 (мск)
🔹 Александр Макаров
🔹 Кирилл Несмеянов
🔹 Адель Файзрахманов
🎬 https://www.youtube.com/watch?v=WNIAO0kEk7U
Вы можете задать сейчас вопросы участникам викторины.
Самые интересные вопросы будут разобраны на игре, а их авторы получат возможность поучаствовать в следующей игре и получить мерч!
🕛 13 марта в 19:00 (мск)
🔹 Александр Макаров
🔹 Кирилл Несмеянов
🔹 Адель Файзрахманов
🎬 https://www.youtube.com/watch?v=WNIAO0kEk7U
В твиттере высветился пост одного стартапера и меня порадовала концовка. Он там рассказывает как делал десятки стартапов. Вон 21 стартап за 2 года.
Ничего толком не приносило денег до тех пор пока... он не выпустил сервис для быстрой выкатки стартапов! "The NextJS boilerplate with all you need to build your SaaS, AI tool, or any other web app and make your first $ online fast."
Это теперь приносит ему $75k в месяц. Типичный пример когда человек не смог копать золото сам, но стал продавать лопаты другим)
Ничего толком не приносило денег до тех пор пока... он не выпустил сервис для быстрой выкатки стартапов! "The NextJS boilerplate with all you need to build your SaaS, AI tool, or any other web app and make your first $ online fast."
Это теперь приносит ему $75k в месяц. Типичный пример когда человек не смог копать золото сам, но стал продавать лопаты другим)
Давно не запускал полный набор тестов в плагине на локальном компе. На Continuous Integration сервере запускаются после каждого git push, поэтому не парился. Но недавно запустив, осознал, что уже больше недели там есть тест, который падает. А на CI работает!
Причина банальная: когда на компьютере часовой пояс UTC, то тест нормально работает, а когда отличается - падает.
Вообще, такой ситуации быть не должно, и CI должен ловить такое, но что сделать для этого? Банально поставить ему другой часовой пояс? Крупные компании решают эту проблему как либо?
Причина банальная: когда на компьютере часовой пояс UTC, то тест нормально работает, а когда отличается - падает.
Вообще, такой ситуации быть не должно, и CI должен ловить такое, но что сделать для этого? Банально поставить ему другой часовой пояс? Крупные компании решают эту проблему как либо?
Читаю Аркадия Морейниса. Не каждым постом, но регулярно выдает что-нибудь точное. Вот примерное обьяснение почему мне крайне не хочется делать что-то для VS Code - https://t.me/temno/6239
Среди людей, выбирающих бесплатное(вскод вместо шторма), будет крайне мало тех, кто готов платить за плагин для Laravel.
Среди людей, выбирающих бесплатное(вскод вместо шторма), будет крайне мало тех, кто готов платить за плагин для Laravel.
Telegram
Тёмная сторона / Темнографика
Хейтеры будут хейтить, халявщики будут халявить, а покупатели будут покупать
1. Наткнулся на историю, когда один чувак решил организовывать конференции, но никак не мог понять, где найти на них спонсоров. Пока он не додумался посмотреть, кто из компаний…
1. Наткнулся на историю, когда один чувак решил организовывать конференции, но никак не мог понять, где найти на них спонсоров. Пока он не додумался посмотреть, кто из компаний…
Собираюсь выпустить вторую редакцию книги своей на английском. Бесплатной будет, как и русскоязычная. Обложку с дизайнером обсуждаем. Выдала два варианта. Какой вам больше нравится?
Final Results
69%
Темный
31%
Светлый
В Java Swing есть много разных способов размещать компоненты внутри окошек. В давние стародавние времена я выбрал некий GroupLayout, который давал максимальный контроль. Потом я узнал, что его не рекомендуется использовать вручную и он вообще для этих редакторов, где мышкой интерфейс набрасывают, ну да ладно. До сих пор использую его, но там, чтобы указать как именно себя должен вести компонент, надо указать в правильном порядке комбинацию из трех параметров.
Логика какая-то наверняка в этом всем есть, но я никогда ее не осознаю и я никак не могу понять по этим параметрам как компонент будет отображаться: растянутым на всю ширину(высоту), средненько или будет занимать минимальную ширину(высоту). Поэтому давно еще создал методы-расширения, чтобы было более понятно. addComponentShrink - этот будет ужат до минимума. addComponentNotResize - этот будет нормально отображаться, но не будет растягиваться. Теперь решил подчистить весь код, чтобы не осталось ни одного вызова с этими тремя параметрами.
Вывод 1: далеко не всегда понятно, что код, который вот щас по гайдам из интернета сделан, будет непонятен при прочтении в будущем. Надо постоянно следить и скрывать такую непонятную логику в методах с нормальным названием. На картинке видна разница.
Вывод 2: методы-расширения весьма полезны в таких вот Fluent-вызовах методов, в которых
Логика какая-то наверняка в этом всем есть, но я никогда ее не осознаю и я никак не могу понять по этим параметрам как компонент будет отображаться: растянутым на всю ширину(высоту), средненько или будет занимать минимальную ширину(высоту). Поэтому давно еще создал методы-расширения, чтобы было более понятно. addComponentShrink - этот будет ужат до минимума. addComponentNotResize - этот будет нормально отображаться, но не будет растягиваться. Теперь решил подчистить весь код, чтобы не осталось ни одного вызова с этими тремя параметрами.
Вывод 1: далеко не всегда понятно, что код, который вот щас по гайдам из интернета сделан, будет непонятен при прочтении в будущем. Надо постоянно следить и скрывать такую непонятную логику в методах с нормальным названием. На картинке видна разница.
Вывод 2: методы-расширения весьма полезны в таких вот Fluent-вызовах методов, в которых
return this
. Поэтому я все больше и больше начинаю уважать ларавелевский ::macro()
, который позволяет делать тоже самое в PHP, в котором нет поддержки методов-расширений.Зарелизил таки новый плагин. Пока без лишнего шума. Но если у кого есть локализации в Laravel приложении, вполне могут посмотреть и некий фидбек оставить(буду благодарен).
https://plugins.jetbrains.com/plugin/24979-locale-sphere
Пока весь UI - это toolwindow справа на экране. Над плагином идет активная работа, как по фреймворкам(симфони на подходе), так и по фичам. Ссылка на багтрекер есть внизу окошечка.
https://plugins.jetbrains.com/plugin/24979-locale-sphere
Пока весь UI - это toolwindow справа на экране. Над плагином идет активная работа, как по фреймворкам(симфони на подходе), так и по фичам. Ссылка на багтрекер есть внизу окошечка.
Я сьездил на LaraCon американский. Пообщался с кучей людей, которых знал только в онлайне. Но как-то все быстро и наскоком. Зато много общался с ребятами из команды шторма. Обсудили кучу вещей, много полезного узнал. Только ради этого разговора стоило туда ехать.
Там анонсировали плагин для VSCode от команды Тейлора. First-party, как говорится. Не сказать, что много крутых фич показали, но это определенно лучше массы странных малополезных плагинов, которые сейчас там есть. Мотивацию добавило делать побольше разных крутых фишек, чтобы отличаться еще сильнее.
Там анонсировали плагин для VSCode от команды Тейлора. First-party, как говорится. Не сказать, что много крутых фич показали, но это определенно лучше массы странных малополезных плагинов, которые сейчас там есть. Мотивацию добавило делать побольше разных крутых фишек, чтобы отличаться еще сильнее.
JetBrains недавно переделал отчеты по продажам плагинов и они стали в разы более информативные. Вот этот, например, показывает новые покупки или продления лицензий Laravel Idea.
Синим наверху показаны продления и видно, что на данный момент я денег со старых верных клиентов получаю почти в два раза больше, чем с новых. Наверно, можно сделать какие-то выводы. В год я теряю примерно 10-15% юзеров, что весьма неплохой показатель. А вот продажи новых за последний год не растут. Скорее всего это связано с совместной рекламной кампанией с JetBrains. Она мощно стартанула прошлым летом и с тех пор сложно переплюнуть приток новых.
Там есть еще график покупок персональных и корпоративных лицензий. И там до сих пор от людей, покупающих напрямую, чуток больше денег идет, чем от организаций. Где-то слышал, что у JetBrains ситуация сильно склонена в сторону корпоративных лицензий. Значит, я тут сильно недорабатываю. И действительно, весь мой неумелый маркетинг направлен напрямую в юзеров. Надо что-то менять.
Синим наверху показаны продления и видно, что на данный момент я денег со старых верных клиентов получаю почти в два раза больше, чем с новых. Наверно, можно сделать какие-то выводы. В год я теряю примерно 10-15% юзеров, что весьма неплохой показатель. А вот продажи новых за последний год не растут. Скорее всего это связано с совместной рекламной кампанией с JetBrains. Она мощно стартанула прошлым летом и с тех пор сложно переплюнуть приток новых.
Там есть еще график покупок персональных и корпоративных лицензий. И там до сих пор от людей, покупающих напрямую, чуток больше денег идет, чем от организаций. Где-то слышал, что у JetBrains ситуация сильно склонена в сторону корпоративных лицензий. Значит, я тут сильно недорабатываю. И действительно, весь мой неумелый маркетинг направлен напрямую в юзеров. Надо что-то менять.
Заглянул таки в это окошко в IDEA своей. Неудивительно, что в большом проекте, даже писанном почти полностью своими руками, Navigation-фичи начинают вылезать на первые места. Больше ходишь по проекту и читаешь код, чем пишешь.
У меня еще не такой большой. Средний. Чуть больше 4 мегабайтов кода. Котлин весьма компактный язык.
Recent Files popup - это Cmd(Ctrl)-E. Удобно вместо табов, ибо они не нужны.
У меня еще не такой большой. Средний. Чуть больше 4 мегабайтов кода. Котлин весьма компактный язык.
Recent Files popup - это Cmd(Ctrl)-E. Удобно вместо табов, ибо они не нужны.
Ездил на прошлой неделе в Австралию на ларакон. Увидел свой продукт как спонсора на плакате. Был доволен как ребенок. Michael Dyrynda со сцены еще отдельно выделил, что плагин помог им сделать сайт и приложение для конфы.
P.S. Австралия - классное место. Конкретно город Брисбен утопает в зелени и парках. На каждом шагу публичные библиотеки, где можно посидеть с ноутом сколько хочешь. Я там захотел жить.
P.S. Австралия - классное место. Конкретно город Брисбен утопает в зелени и парках. На каждом шагу публичные библиотеки, где можно посидеть с ноутом сколько хочешь. Я там захотел жить.
Это все-таки произошло. JetBrains забирает мой плагин себе!
Как-то давно, лет 8 назад, я решил написать проект с нуля, без фреймворков. Надо было приспособить его для разных сред и я заюзал .env файлик и пхп-пакет для него. И был неприятно удивлен, что комплишена для ключей то нет! Быстренько наваял плагин для комплишена, назвал его .env files support и запушил его в маркетплейс. А потом сделал подсветку синтаксиса и JetBrains стал рекомендовать его ставить всем. А сейчас по общему рейтингу плагинов он вообще стоит на первом месте! Недавно JetBrains предложил включить его в поставку IDE и я согласился.
https://blog.jetbrains.com/phpstorm/2025/01/support-for-env-files/
Как-то давно, лет 8 назад, я решил написать проект с нуля, без фреймворков. Надо было приспособить его для разных сред и я заюзал .env файлик и пхп-пакет для него. И был неприятно удивлен, что комплишена для ключей то нет! Быстренько наваял плагин для комплишена, назвал его .env files support и запушил его в маркетплейс. А потом сделал подсветку синтаксиса и JetBrains стал рекомендовать его ставить всем. А сейчас по общему рейтингу плагинов он вообще стоит на первом месте! Недавно JetBrains предложил включить его в поставку IDE и я согласился.
https://blog.jetbrains.com/phpstorm/2025/01/support-for-env-files/
This media is not supported in your browser
VIEW IN TELEGRAM
Мы, проггеры, часто занимаемся автоматизацией различной. Но всегда надо думать что юзер делает до этой автоматизации, и после. Может там тоже можно чутка предугадать и предложить юзеру чуть больше.
Смотрите, как шторм умно с методами. Если есть параметры, то курсор внутри скобок, а если нет, то снаружи. Если метод void, то сразу ставит точку с запятой. Там явно подумали о том, что юзер делает сразу после комплишена и курсор в правильное место кладут.
Я тоже методы подсказываю кое-где и вот сейчас повторяю эту логику.
Смотрите, как шторм умно с методами. Если есть параметры, то курсор внутри скобок, а если нет, то снаружи. Если метод void, то сразу ставит точку с запятой. Там явно подумали о том, что юзер делает сразу после комплишена и курсор в правильное место кладут.
Я тоже методы подсказываю кое-где и вот сейчас повторяю эту логику.
IntelliJ IDE (а значит и PhpStorm) работает в многопотоковом режиме. Есть один, главный поток, который обрабатывает весь интерфейс юзера и все операции записи, и есть бэкграунд потоки, в которых предполагается делать все остальное.
С некоторых пор JetBrains активно работает над тем, чтобы в главном потоке ничего медленного не происходило. В EAP сборках даже эксепшены вылазят, если сделаешь чтото медленное в нем. Это, кстати, приносит результат. В последние годы шторм стал отзывчивее(это не субьетивщина, а достоверно вычисленный результат), но писать код иногда прям трудно. Если у тебя окно, в котором в процессе ввода надо лазить по классам и собирать инфу, то это больно.
Приходится до или во время открытия окна собирать всю нужную инфу, чтобы интерфейс был отзывчивым. Также надо учитывать момент, что шторм может захотеть начать индексацию прямо во время работы юзера с окном. В общем, лучше 10 раз сделать сложный комплишен, чем один раз какой-нибудь UI!
P.S. Просто нытья пост.
С некоторых пор JetBrains активно работает над тем, чтобы в главном потоке ничего медленного не происходило. В EAP сборках даже эксепшены вылазят, если сделаешь чтото медленное в нем. Это, кстати, приносит результат. В последние годы шторм стал отзывчивее(это не субьетивщина, а достоверно вычисленный результат), но писать код иногда прям трудно. Если у тебя окно, в котором в процессе ввода надо лазить по классам и собирать инфу, то это больно.
Приходится до или во время открытия окна собирать всю нужную инфу, чтобы интерфейс был отзывчивым. Также надо учитывать момент, что шторм может захотеть начать индексацию прямо во время работы юзера с окном. В общем, лучше 10 раз сделать сложный комплишен, чем один раз какой-нибудь UI!
P.S. Просто нытья пост.
Инкапсуляция или почему важно прятать как можно больше информации внутри обьектов
Большинство комплишенов моего плагина подсказывают параметры внутри методов.
Теперь возникла мысль, что
Сижу теперь делаю поля приватными и методы как можно более абстрактными. За 5 лет там много накопилось.
Большинство комплишенов моего плагина подсказывают параметры внутри методов.
$foo->bar('тут комплитим');
в процессе вырисовался обьект CompletionContext, в котором есть обьект Parameter, и обьект ParameterList - это уже внутренние объекты PhpStorm. И юзались они везде и часто.Теперь возникла мысль, что
$foo['тут комплитим']
и $foo('тут комплитим')
- это тоже вызовы методов! И если на них смотреть по-другому, как $foo->offsetGet('тут комплитим')
и $foo->__invoke('тут комплитим')
, то все станет сильно проще для меня. Но внутренние объекты шторма там другие, поэтому надо обьект CompletionContext абстрагировать немного. Но не получается. Он был открыт, все лезли в его внутренности и построить абстракцию, когда там не метод, а вызов массива или __invoke
, не получается.Сижу теперь делаю поля приватными и методы как можно более абстрактными. За 5 лет там много накопилось.
https://t.me/tg_5minphp/1413
Тут Петр Мязин из пятиминутки PHP удивляется, что старая монолитная IDEA оказалась более гибкой, чем модный опенсорсный VsCode. Я знаю как работает экосистема IDEA (ну плюс-минус) и видел как выглядят плагины к VsCode. Не особо удивлен. Ну может только добавить могу, что основная платформа IDEA - тоже давным давно открытая.
Почему Идея оказалась более гибкой - не знаю. Но хотел показать скриншот этот и рассказать про стабильность системы плагинов Идеи и то, как тщательно за ней стараются следить.
Плагин к Идее - это скомпиленый Java JAR-файл. Там все статично и если загружаешь его на маркетплейс там сразу идет проверка на совместимость с обьявленными версиями IDEA. Поймает любое неверное обращение к методу, классу и чему угодно. Сразу предупредает, что скоро удалят некоторые вещи. Весьма полезная вещь, да и локально можно запускать(у меня на CI крутится). Команда Идеи там довольно четко меняет интерфейсы когда надо, добавляет новые. Один раз только удивили сильно, но я тут об этом уже писал.
Если какая-то версия плагина покажет несовместимость, то ее не допустят к юзерам. Полностью от ошибок это конечно не страхует, но весьма хороший защитный барьер.
Плагин к VsCode - это нечто, написанное на тайпскрипте(а может и на яваскрипте). Нигде не нашел, где можно обьявить какие версии VsCode поддерживает плагин. Я сомневаюсь вообще что можно хоть какойто адекватный анализ провести там. Но если кто писал плагины туда - просветите плиз в комментах. Я анализировал некоторые исходные коды плагинов для вскода, и это страшно вообще.
P.S. 1655 Deprecated calls - это из-за моего старого обфускатора. Ни на что не влияет.
Тут Петр Мязин из пятиминутки PHP удивляется, что старая монолитная IDEA оказалась более гибкой, чем модный опенсорсный VsCode. Я знаю как работает экосистема IDEA (ну плюс-минус) и видел как выглядят плагины к VsCode. Не особо удивлен. Ну может только добавить могу, что основная платформа IDEA - тоже давным давно открытая.
Почему Идея оказалась более гибкой - не знаю. Но хотел показать скриншот этот и рассказать про стабильность системы плагинов Идеи и то, как тщательно за ней стараются следить.
Плагин к Идее - это скомпиленый Java JAR-файл. Там все статично и если загружаешь его на маркетплейс там сразу идет проверка на совместимость с обьявленными версиями IDEA. Поймает любое неверное обращение к методу, классу и чему угодно. Сразу предупредает, что скоро удалят некоторые вещи. Весьма полезная вещь, да и локально можно запускать(у меня на CI крутится). Команда Идеи там довольно четко меняет интерфейсы когда надо, добавляет новые. Один раз только удивили сильно, но я тут об этом уже писал.
Если какая-то версия плагина покажет несовместимость, то ее не допустят к юзерам. Полностью от ошибок это конечно не страхует, но весьма хороший защитный барьер.
Плагин к VsCode - это нечто, написанное на тайпскрипте(а может и на яваскрипте). Нигде не нашел, где можно обьявить какие версии VsCode поддерживает плагин. Я сомневаюсь вообще что можно хоть какойто адекватный анализ провести там. Но если кто писал плагины туда - просветите плиз в комментах. Я анализировал некоторые исходные коды плагинов для вскода, и это страшно вообще.
P.S. 1655 Deprecated calls - это из-за моего старого обфускатора. Ни на что не влияет.