I am a Tech Lead at FaberNovel Technologies, where I work on hypermedia REST APIs, semantic web tooling, and distributed systems, mostly in Scala. I'm also a Ph.D. student at the Department of Computer Science of AGH-UST. My research interests include agent-based computations, functional programming and distributed computing.
Composable event sourcing with monads
Event sourcing consists in storing changes to application state instead of the current one. It allows to know the application state at any point in time, reinterpret past events, and more easily integrate distributed systems.
In this talk, we show how functional programming principles can make event sourcing composable and simpler to use. We introduce a Sourced monad and demonstrate that event sourcing becomes an implementation detail and existing code can be sourced almost transparently.
Scaling functional multi-agent computations with reactive streams
Multi-agent systems are often used to simulate real-word phenomena or in optimisation algorithms. Traditionally, relevant software has often relied on coarse grained parallelism, with little or no concurrency.
However, large numbers of agents in such use cases mean that more fine grained parallelism is needed to fully scale on modern manycore hardware. Moreover, higher concurrency has a value at the domain level, as it allow to more closely simulate our (almost) "continuous" world.
In this talk, we first show how to use functional patterns to decompose a multi-agent simulation in a way which allows it to be run on execution models of varying concurrency and parallelism. Then, we see how such execution models can be generalized into a streaming one. Finally, we describe an Akka Streams implementation which allows to achieve fine-grained concurrency and parallelism for greater performance and efficiency.