Dmitry Kandalov
@dmitrykandalov.bsky.social
I have witnessed programming for DOS and spent the last 20 years in the Java lands, most recently working with server-side Kotlin.
Everything I post here (and more) is also on https://dmitrykandalov.com/micro-blog
Everything I post here (and more) is also on https://dmitrykandalov.com/micro-blog
Thanks to everyone who came to the "47 Refactorings in 45 minutes" talk Kodee and I did at Droidcon London today. You can find all the code here github.com/dmcg/gilded-.... Since someone asked, these are some of the heuristics I use for Kotlin code dmitrykandalov.com/tidy-kotlin.
October 30, 2025 at 1:48 PM
Thanks to everyone who came to the "47 Refactorings in 45 minutes" talk Kodee and I did at Droidcon London today. You can find all the code here github.com/dmcg/gilded-.... Since someone asked, these are some of the heuristics I use for Kotlin code dmitrykandalov.com/tidy-kotlin.
Here is an example of how a small change trying to optimise Kotlin code with `inline` and then using imperative style with `return` can break things.
February 20, 2025 at 12:19 PM
Here is an example of how a small change trying to optimise Kotlin code with `inline` and then using imperative style with `return` can break things.
Great talk by @antonarhipov.bsky.social at the Kotlin London meetup tonight. You can find the (recent enough) slides here speakerdeck.com/antonarhipov. My main takeaway is that Kotlin contracts could make DSL builder parameters mandatory (like function parameters?) 🤔
February 11, 2025 at 11:51 PM
Great talk by @antonarhipov.bsky.social at the Kotlin London meetup tonight. You can find the (recent enough) slides here speakerdeck.com/antonarhipov. My main takeaway is that Kotlin contracts could make DSL builder parameters mandatory (like function parameters?) 🤔
The amount of actively used calendars is a good reminder that the “new year” is very much a social construct. There’s also Julian calendar (making all historical dates “wrong”). There are time zones with changing rules and borders. And of course leap seconds! 🙃
December 31, 2024 at 2:21 PM
The amount of actively used calendars is a good reminder that the “new year” is very much a social construct. There’s also Julian calendar (making all historical dates “wrong”). There are time zones with changing rules and borders. And of course leap seconds! 🙃
Random #IntelliJ tip. You can use the "Search Usages" action (which shows a popup with usages) recursively! It will figure out the outer scope of the selected usage (e.g., a function in which it's defined) and show another popup with usages. (It doesn't work in all languages though.)
December 18, 2024 at 11:48 PM
Random #IntelliJ tip. You can use the "Search Usages" action (which shows a popup with usages) recursively! It will figure out the outer scope of the selected usage (e.g., a function in which it's defined) and show another popup with usages. (It doesn't work in all languages though.)
Here is an #IntelliJ action to optimise imports (in the background!) in all project Kotlin files gist.github.com/dkandalov/a4.... Admittedly, this is a hack (aka a "tactical workaround") that will make #IntelliJ log exceptions, but it's better than modal dialogs blocking all IDE windows #LivePlugin
December 13, 2024 at 5:47 PM
Here is an #IntelliJ action to optimise imports (in the background!) in all project Kotlin files gist.github.com/dkandalov/a4.... Admittedly, this is a hack (aka a "tactical workaround") that will make #IntelliJ log exceptions, but it's better than modal dialogs blocking all IDE windows #LivePlugin
Here is an example of how #IntelliJ inspections/intentions (aka refactoring suggestions) can guide you to a better code and why I prefer "forEach" to "for" loops in #Kotlin. And don't get me started on the meaning of "retry" and UPPERCASE CARGO CULT (see dmitrykandalov.com/tidy-kotlin#...).
November 29, 2024 at 1:16 PM
Here is an example of how #IntelliJ inspections/intentions (aka refactoring suggestions) can guide you to a better code and why I prefer "forEach" to "for" loops in #Kotlin. And don't get me started on the meaning of "retry" and UPPERCASE CARGO CULT (see dmitrykandalov.com/tidy-kotlin#...).
The UI looks a bit wonky and there is no obvious keyboard shortcut for this diff popup (I tried hard in the past, let me know if it's there), but overall I really like the option to commit without ceremony! Could we also have "Commit without Dialog" action please 😬 #IntelliJ
November 11, 2024 at 10:35 PM
The UI looks a bit wonky and there is no obvious keyboard shortcut for this diff popup (I tried hard in the past, let me know if it's there), but overall I really like the option to commit without ceremony! Could we also have "Commit without Dialog" action please 😬 #IntelliJ
I like to occasionally check what is going on in the #IntelliJ background tasks (and then hide the popup). While waiting for youtrack.jetbrains.com/issue/IJPL-5... to make it possible with built-in actions, here is a workaround in ~8 lines gist.github.com/dkandalov/d3... #LivePlugin #Kotlin
October 30, 2024 at 6:46 PM
I like to occasionally check what is going on in the #IntelliJ background tasks (and then hide the popup). While waiting for youtrack.jetbrains.com/issue/IJPL-5... to make it possible with built-in actions, here is a workaround in ~8 lines gist.github.com/dkandalov/d3... #LivePlugin #Kotlin
It only takes ~5 lines of code to remove editor notification panels in #IntelliJ gist.github.com/dkandalov/3c... Because some panels can only be closed with the mouse (e.g. "Kotlin Scripting is in Beta"). Some cannot be closed at all (e.g. "Decompiled .class file") 🙄 #LivePlugin #Kotlin
October 29, 2024 at 5:09 PM
It only takes ~5 lines of code to remove editor notification panels in #IntelliJ gist.github.com/dkandalov/3c... Because some panels can only be closed with the mouse (e.g. "Kotlin Scripting is in Beta"). Some cannot be closed at all (e.g. "Decompiled .class file") 🙄 #LivePlugin #Kotlin
This is likely the oldest (years old) and the most used (by me) #IntelliJ action which I never published. It opens the "IDE Internal Errors" window, so you can move between errors and clear them gist.github.com/dkandalov/0c... #LivePlugin #Kotlin
October 28, 2024 at 11:04 PM
This is likely the oldest (years old) and the most used (by me) #IntelliJ action which I never published. It opens the "IDE Internal Errors" window, so you can move between errors and clear them gist.github.com/dkandalov/0c... #LivePlugin #Kotlin
If you need inspiration to find names for your variables and functions, why not try random search results? (Some joke about AI is missing here.) This is the source code github.com/dkandalov/li.... Please shout if you can make this auto-complete always work 🙈 #LivePlugin #Kotlin
October 27, 2024 at 4:59 PM
If you need inspiration to find names for your variables and functions, why not try random search results? (Some joke about AI is missing here.) This is the source code github.com/dkandalov/li.... Please shout if you can make this auto-complete always work 🙈 #LivePlugin #Kotlin
This is what Eclipse looks like on macOS these days 😵 I don't think it ever looked polished on Mac, but the 20+ year-old icons make me grateful for #IntelliJ UI evolution (even if it takes effort getting used to a new look and feel every couple of years).
October 24, 2024 at 9:33 PM
This is what Eclipse looks like on macOS these days 😵 I don't think it ever looked polished on Mac, but the 20+ year-old icons make me grateful for #IntelliJ UI evolution (even if it takes effort getting used to a new look and feel every couple of years).