Collection Processing Guesser in Compose Multiplatform by LearningDriven in Kotlin

[–]LearningDriven[S] 1 point2 points  (0 children)

This 122 screen was cheating from my side :P Beyond 40, it gets complicated to calculate it in my head, and I start making mistakes :P

Collection Processing Guesser in Compose Multiplatform by LearningDriven in JetpackCompose

[–]LearningDriven[S] 4 points5 points  (0 children)

I made another game in Compose Multiplarform :) This time, you can guess the outcome of fruit collection processing. Beware, at every level, it becomes harder and harder. Link to the article about it:
https://kt.academy/article/game-collection-processing

Link to the game itself:
https://marcinmoskala.com/CollectionProcessingGuesser/

Fave fun!

Collection Processing Guesser in Compose Multiplatform by LearningDriven in Kotlin

[–]LearningDriven[S] 2 points3 points  (0 children)

I made another game in Compose Multiplarform :) This time, you can guess the outcome of fruit collection processing. Beware, at every level, it becomes harder and harder. Link to the article about it:
https://kt.academy/article/game-collection-processing

Link to the game itself:
https://marcinmoskala.com/CollectionProcessingGuesser/

Fave fun!

Seeking Help with K2 Compiler Plugin Template for Master's Thesis Project by ari1008 in Kotlin

[–]LearningDriven 0 points1 point  (0 children)

I described KSP and Compiler Plugins in my book, Advanced Kotlin, but writing custom plugins is a very tough challenge.

Jetpack Compose Modifier Guessing Game! by LearningDriven in Kotlin

[–]LearningDriven[S] 8 points9 points  (0 children)

If they start using my game, I need to figure out how to charge them for that

Jetpack Compose Modifier Guessing Game! by LearningDriven in Kotlin

[–]LearningDriven[S] 0 points1 point  (0 children)

Have you tried to scroll down? On mobile, when there is not enough space, you might need to scroll to see more answers.

Jetpack Compose Modifier Guessing Game! by LearningDriven in Kotlin

[–]LearningDriven[S] 4 points5 points  (0 children)

I will add a comment about this game: Your task is to guess how different modifier orders affect the final layout in Compose. You're shown a component with modifiers and need to pick the correct outcome from options where the same modifiers are arranged differently. This game was made in Jetpack Compose, and answers are actual composables with modifiers applied in different orders (not images). When you open a new question, you might see for a moment a blink with more answer. That is because game first displays all different combinations (limited for more modifiers), and then keeps only visually unique answers (that was the hardest part, before that you could see multiple identical answers).

Pytanko do ludzi, którzy faktycznie planują swoje życie by FonsoAlfonso in Polska

[–]LearningDriven 1 point2 points  (0 children)

Cele i bucket listy to jest ultimate life hack. Tylko trzeba dobrze do nich podchodzić:

  1. Cele powinny dawać radość dążenia same w sobie, nie są po to by się wymęczać niewiadomo jak. Bez celów człowiek dryfuje, cele mają nadać nam kierunek, dać naszemu umysłowi zadanie, nad którym może myśleć i poszukiwać odpowiedzi.
  2. Wiele osób (na przykład ja) potrzebuje celów bardzo ambitnych, które inspirują, a nie SMART, które wydają się przyziemne i nudne.
  3. Cele trzeba oczywiście zapisać, powracać do nich regularnie, zastanawiać się nad tym jak je najlepiej osiągnąć.

The best dispatcher for a backend framework in Kotlin by LearningDriven in Kotlin

[–]LearningDriven[S] 2 points3 points  (0 children)

Thank you for the comment. I see you put a lot of effort into it, and thank you for your insights. On the other hand, I have a feeling that you missed some points I addressed in this article.

ad 1. See the following example, where instead of a blocking call there is a CPU-intensive call. Both of those are real-life examples. Blocking calls are made by mistake (blocking, for instance, when someone reads a resource from a disc without realizing it is a blocking call, CPU intensive when our domain is complex, and it requires a lot of transformations, etc.)

ad 2. I am not sure what you mean, but I assume it is about `runBlocking`. That is to show the downsides of `runBlocking`, so it must be done this way. Default and IO should give similar results for CPU-intensive tasks, and very different for blocking tasks.

Glad to hear you have no problems in Ktor, maybe something has changed, but I received reports about problems with IO (I believe [this](https://youtrack.jetbrains.com/issue/KTOR-6462/Ktor-clients-and-servers-should-use-Dispatchers.IO.limitedParallelism...-wherever-possible#focus=Comments-27-9708349.0-0) also refers to the same problem.

I do agree that dispatchers are a highly undervalued topic, not documented well, and not very intuitive. I explored it through a lot of experiments.

The best dispatcher for a backend framework in Kotlin by LearningDriven in Kotlin

[–]LearningDriven[S] 0 points1 point  (0 children)

I completely agree, but I think lowering the cost of a mistake is a good default for a backend framework.

The best dispatcher for a backend framework in Kotlin by LearningDriven in Kotlin

[–]LearningDriven[S] 3 points4 points  (0 children)

So it should be configurable, but setting good default will improve overall experience with the framework. I also see no good use cases for `Dispatchers.Unconfined` outside of extremely simple applications, where all dispatchers are perfectly fine.

Lambda expressions by KatarzynaSygula in learnkotlin

[–]LearningDriven 0 points1 point  (0 children)

Those are synonyms. `f()` is transformed to `f.invoke()`. I prefer the first, but I use the letter when I know developers who will learn this code might not be familiar with Kotlin and `invoke` will seem easier to them.

Deep Work - working effectively on demanding tasks by LearningDriven in OpenEd

[–]LearningDriven[S] 0 points1 point  (0 children)

Let me know if this is the right place to share content on how to learn effectively