1. Parallel futures and exceptions

    Asynchronous applications are much harder to debug. You do not get the whole stack trace so easily. So it is important to react to all the exceptions that might unexpectedly occur. I found a case when following a simple pattern to run futures in parallel leads to loss of exceptions. In this post I describe a solution for that.

    applicative, exception, future, scala

  2. For-comprehensions with Combined Monads

    The code should be easy to read. One of the programming principles to make the code more readable is to avoid nested operations. The so-called pyramid of doom does not only refers to callback hell in javascript but ofter appear in scala as well. Here, I describe how to make the for-comprehensions more elegant when using combined monads in scala.

    either, for-comprehension, future, http4s, monad transformers, option, scala, scalaz

  3. Blocking and non-blocking frameworks

    In my master thesis I evaluated performance of blocking and non-blocking web frameworks in the context of distributed RESTful micro services. Non-blocking frameworks tend to have higher scalability as the processor is not wasted on context switching between threads. This post summarizes my findings.

    blocking, future, java, jvm, microservices, non-blocking, scala, web framework