adelf on programming @adelf_on_programming Channel on Telegram

adelf on programming

@adelf_on_programming


adelf on programming (English)

Are you interested in programming and looking for a channel that provides valuable insights, tips, and resources? Look no further than 'adelf on programming' on Telegram! This channel, run by the username @adelf_on_programming, is dedicated to all things related to programming, from coding tutorials to software development trends. Whether you're a beginner looking to learn the basics or a seasoned developer wanting to stay updated on the latest technologies, this channel has something for everyone. 'adelf on programming' is curated by Adelf, a passionate programmer with years of experience in the field. With regular updates and engaging content, this channel is a must-follow for anyone interested in honing their programming skills and staying ahead in the ever-evolving tech industry. Join 'adelf on programming' today and take your coding journey to the next level!

adelf on programming

11 Nov, 13:25


Ездил на прошлой неделе в Австралию на ларакон. Увидел свой продукт как спонсора на плакате. Был доволен как ребенок. Michael Dyrynda со сцены еще отдельно выделил, что плагин помог им сделать сайт и приложение для конфы.

P.S. Австралия - классное место. Конкретно город Брисбен утопает в зелени и парках. На каждом шагу публичные библиотеки, где можно посидеть с ноутом сколько хочешь. Я там захотел жить.

adelf on programming

18 Oct, 13:03


Заглянул таки в это окошко в IDEA своей. Неудивительно, что в большом проекте, даже писанном почти полностью своими руками, Navigation-фичи начинают вылезать на первые места. Больше ходишь по проекту и читаешь код, чем пишешь.

У меня еще не такой большой. Средний. Чуть больше 4 мегабайтов кода. Котлин весьма компактный язык.

Recent Files popup - это Cmd(Ctrl)-E. Удобно вместо табов, ибо они не нужны.

adelf on programming

03 Oct, 07:29


JetBrains недавно переделал отчеты по продажам плагинов и они стали в разы более информативные. Вот этот, например, показывает новые покупки или продления лицензий Laravel Idea.

Синим наверху показаны продления и видно, что на данный момент я денег со старых верных клиентов получаю почти в два раза больше, чем с новых. Наверно, можно сделать какие-то выводы. В год я теряю примерно 10-15% юзеров, что весьма неплохой показатель. А вот продажи новых за последний год не растут. Скорее всего это связано с совместной рекламной кампанией с JetBrains. Она мощно стартанула прошлым летом и с тех пор сложно переплюнуть приток новых.

Там есть еще график покупок персональных и корпоративных лицензий. И там до сих пор от людей, покупающих напрямую, чуток больше денег идет, чем от организаций. Где-то слышал, что у JetBrains ситуация сильно склонена в сторону корпоративных лицензий. Значит, я тут сильно недорабатываю. И действительно, весь мой неумелый маркетинг направлен напрямую в юзеров. Надо что-то менять.

adelf on programming

03 Sep, 14:10


Я сьездил на LaraCon американский. Пообщался с кучей людей, которых знал только в онлайне. Но как-то все быстро и наскоком. Зато много общался с ребятами из команды шторма. Обсудили кучу вещей, много полезного узнал. Только ради этого разговора стоило туда ехать.

Там анонсировали плагин для VSCode от команды Тейлора. First-party, как говорится. Не сказать, что много крутых фич показали, но это определенно лучше массы странных малополезных плагинов, которые сейчас там есть. Мотивацию добавило делать побольше разных крутых фишек, чтобы отличаться еще сильнее.

adelf on programming

31 Jul, 14:02


Зарелизил таки новый плагин. Пока без лишнего шума. Но если у кого есть локализации в Laravel приложении, вполне могут посмотреть и некий фидбек оставить(буду благодарен).

https://plugins.jetbrains.com/plugin/24979-locale-sphere

Пока весь UI - это toolwindow справа на экране. Над плагином идет активная работа, как по фреймворкам(симфони на подходе), так и по фичам. Ссылка на багтрекер есть внизу окошечка.

adelf on programming

23 Jul, 08:44


В Java Swing есть много разных способов размещать компоненты внутри окошек. В давние стародавние времена я выбрал некий GroupLayout, который давал максимальный контроль. Потом я узнал, что его не рекомендуется использовать вручную и он вообще для этих редакторов, где мышкой интерфейс набрасывают, ну да ладно. До сих пор использую его, но там, чтобы указать как именно себя должен вести компонент, надо указать в правильном порядке комбинацию из трех параметров.

Логика какая-то наверняка в этом всем есть, но я никогда ее не осознаю и я никак не могу понять по этим параметрам как компонент будет отображаться: растянутым на всю ширину(высоту), средненько или будет занимать минимальную ширину(высоту). Поэтому давно еще создал методы-расширения, чтобы было более понятно. addComponentShrink - этот будет ужат до минимума. addComponentNotResize - этот будет нормально отображаться, но не будет растягиваться. Теперь решил подчистить весь код, чтобы не осталось ни одного вызова с этими тремя параметрами.

Вывод 1: далеко не всегда понятно, что код, который вот щас по гайдам из интернета сделан, будет непонятен при прочтении в будущем. Надо постоянно следить и скрывать такую непонятную логику в методах с нормальным названием. На картинке видна разница.

Вывод 2: методы-расширения весьма полезны в таких вот Fluent-вызовах методов, в которых return this. Поэтому я все больше и больше начинаю уважать ларавелевский ::macro(), который позволяет делать тоже самое в PHP, в котором нет поддержки методов-расширений.

adelf on programming

01 May, 13:35


Читаю Аркадия Морейниса. Не каждым постом, но регулярно выдает что-нибудь точное. Вот примерное обьяснение почему мне крайне не хочется делать что-то для VS Code - https://t.me/temno/6239

Среди людей, выбирающих бесплатное(вскод вместо шторма), будет крайне мало тех, кто готов платить за плагин для Laravel.

adelf on programming

18 Apr, 11:26


Давно не запускал полный набор тестов в плагине на локальном компе. На Continuous Integration сервере запускаются после каждого git push, поэтому не парился. Но недавно запустив, осознал, что уже больше недели там есть тест, который падает. А на CI работает!

Причина банальная: когда на компьютере часовой пояс UTC, то тест нормально работает, а когда отличается - падает.

Вообще, такой ситуации быть не должно, и CI должен ловить такое, но что сделать для этого? Банально поставить ему другой часовой пояс? Крупные компании решают эту проблему как либо?

adelf on programming

12 Apr, 09:50


Мой маленький CI для сборки Laravel Idea выглядит так. Простой HTML как в бородатые года. Никакого CSS. (Сегодня ночью собирался 8.1.4 релиз, уже доступен на маркетплейсе)

Как думаете сколько памяти в Хроме занимает эта страница? 57 Мб!! Что там? Как? Для чего? Очень поразила меня эта инфа...

adelf on programming

09 Apr, 07:51


В твиттере высветился пост одного стартапера и меня порадовала концовка. Он там рассказывает как делал десятки стартапов. Вон 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 в месяц. Типичный пример когда человек не смог копать золото сам, но стал продавать лопаты другим)

adelf on programming

13 Mar, 15:24


«Своя игра» по PHP на канале CutCode

Вы можете задать сейчас вопросы участникам викторины.

Самые интересные вопросы будут разобраны на игре, а их авторы получат возможность поучаствовать в следующей игре и получить мерч!

🕛 13 марта в 19:00 (мск)

🔹 Александр Макаров
🔹 Кирилл Несмеянов
🔹 Адель Файзрахманов

🎬 https://www.youtube.com/watch?v=WNIAO0kEk7U

adelf on programming

12 Mar, 12:48


Код Laravel Idea потихоньку приходит к канонам. К слоям. Я начал разделять его на отдельные проекты.

* Проект с общими хелперами, которые пригодятся другому плагину(сюда уедут процентов 10 кода).
* Проект с всей логикой Laravel Idea(тут будет 85% кода).
* Проект для связки Laravel Idea с PhpStorm.
* Проект для связки Laravel idea с Qodana.

Это все равно когда-нибудь произошло бы. Но теперь понадобилось для двух целей - специальной версии плагина для Qodana(CI тулзы от JetBrains) и нового плагина, который уже давно хотел начать, но вот сейчас только руки дошли.

Когда начинал писать плагин, думал что проект совсем иной и общего с веб-проектами с их слоями Application layer и другими нет. Тут очень все завязано на внутреннюю структуру IDE. Но чем дальше в лес, тем больше приходит понимание, что структура там тоже важна. И вырисовывались слои. А новые требования быстро помогли осознать, что пора их отделить уже физически.

adelf on programming

29 Feb, 06:31


https://t.me/tg_5minphp/1306

А я бы спать не мог спокойно, зная что такое дерьмо у меня в коде...

Upd: в комментариях подсказали, что Олег Фогель это один из руководителей разработки в 1С) это прекрасно

adelf on programming

22 Feb, 08:03


Когда-то давно одним из основных продуктов JetBrains был Resharper. Умный плагин для C# разработки в Visual Studio от Microsoft. Долгое время спустя, убедившись, что они умеют делать собственные успешные IDE для кучи ЯП, они решили сделать Rider - среду программирования для C# (или всех .NET языков, тут не знаю). Но была проблема: тот умный решарпер, который понимал C# и на основе которого планировалось делать Rider, был написан на C#.

Решили это таким образом: появился некий бекэнд(решарпер), который понимает код, генерит подсказки и подсвечивает ошибки, и фронтэнд - сама оболочка, UI. Общаются они по внутреннему протоколу. JB ходили на конфы и рассказывали как сложно им оптимизировать это, чтобы работало с приемлемой скоростью, но с годами проблемы были решены, и насколько мне известно Rider потихоньку отвоевывает рынок у Visual Studio, хотя цифр конкретных у меня нет.

Архитектура Rider вынужденно повторила архитектуру современных SPA веб-приложений. И вроде бы получился некий уродец с кучей проблем. Тут и перформанс, и плагин нормальный написать - тоже надо и фронтэнд часть и бэкэнд. Но кто-то в JB решил, что это не баг, а фича!

И появился Fleet - "Next-generation IDE by JetBrains". Архитектура точно такая же - интерфейс это фронтэнд, а вся умнота(там это называется Smart mode) - бекэнд. А фича в том, что бэк можно разместить как на компе юзера(и тогда получим более-менее обычную JetBrains IDE), а можно на облачном сервере от JetBrains, Space! И это решит одну из главных жалоб юзеров - потребление кучи ресурсов(памяти и проца).

Я сегодня таки поставил и пощупал. Котлин оно понимает весьма неплохо. Интерфейс модный-молодежный. Как у VSCode. Настройки хранятся в json-файле. Как у VSCode. Да и smart mode напоминает language server протоколы, которые тоже популярны в вскоде. Но это JetBrains! Они умеют делать не только хорошо, а лучше всех. Надо еще подождать и посмотреть. Настроек очень мало. Плагинов пока никаких нет и апишки к ним не опубликованы.

adelf on programming

17 Jan, 08:05


Когда внезапно осознаешь, что твое приложение - многопоточное.

Прилетает в sentry такой эксепшен:


java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 0
at java.util.ArrayList.add(ArrayList.java:455)
at java.util.ArrayList.add(ArrayList.java:467)
at com.laravel_idea.plugin.translation.fetching.b.b.a(b.java:24)


Я просто вызываю add() в стандартнейшем классе для списков и получаю странную ошибку. Но крайне редкую. Для тысяч юзеров всего 2 за неделю. В многопотоковом программинге я ноль, но это оно самое. Два потока одновременно пишут в один список и получают ошибку. Вчера еще более странную ошибку находил, с той же самой причиной.


java.lang.ClassCastException: class java.util.HashMap$Node cannot be cast to class java.util.HashMap$TreeNode (java.util.HashMap$Node and java.util.HashMap$TreeNode are in module java.base of loader 'bootstrap')
at java.util.HashMap$TreeNode.moveRootToFront(HashMap.java:1986)
at java.util.HashMap$TreeNode.treeify(HashMap.java:2102)
at java.util.HashMap.treeifyBin(HashMap.java:770)
at java.util.HashMap.putVal(HashMap.java:642)
at java.util.HashMap.put(HashMap.java:610)
at com.laravel_idea.plugin.translation.fetching.b.b.a(b.java:16)


Если данные приватные и пишутся под строгим контролем одного класса, чинить это несложно. Простые конструкции synchronized и все должно быть ок. Также, есть специальные thread-safe структуры данных(ConcurrentHashmap, ConcurrentList). Но внутри у них либо тот же syncronized, либо еще хуже, так что для меня проще так.


synchronized(this) {
vendorData.add(data)
}