Here is the list of my talks with links to videos, slides and code repositories:
Building testable APIs using functions & meshes
In this live coding talk you will learn about functional techniques that encourage separation of concerns. I will build a stateful HTTP API from highly isolated components that are easier to test than entangled spaghetti-like codebases. I will show you how tests can help us scaffold the architecture and how should we approach testing in the era of microservices. In the session I will use immutability, type parameters and function parameters as tools to implement a very practical example: Pac-Man game web server. I will code in Scala using Akka HTTP and deploy to Kubernetes with Istio service mesh.
- Geecon (May 2018)
Freestyle, Free & Tagless: Separation of Concerns on Steroids
You will learn how to cut your applications into isolated, independent pieces using Freestyle library with free monads or tagless final style. The session is based on a multiplayer, purely functional version of Prisoner’s Dillema.
Our applications frequently consist of business logic, communication, persistence, caches & logging. We always want to keep them apart and reason about each of them individually. However, this is very difficult to achieve in practice.
Enter free monad. It lets us decouple those concerns by dividing our program into algebras and interpreters. I will show you an application built on top of free monad in Scala & Cats. You will learn how to create pure & declarative DSLs, side-effecting interpreters and how to use them together. Then I will introduce Freestyle library and show how it makes the code more concise. At the end I will compare the free monad approach to another technique used to decouple concerns: final tagless.
- Scala UA (April 2018) [Video]
- Lambda Days (February 2018) [Video]
- Kraków Scala User Group (February 2018) [Video PL]
- Scala eXchange (December 2017) [Video]
Developer on Detox
Let’s meet John Craft - a great software craftsman. Today is his last day at work before long holidays. John has just given his functionality to review and wants to leave at 6:00 PM.
This is a story of a code review, in which the reviewer found a few unfortunate issues at the worst possible time - 5 minutes before the holidays.
Let’s put ourselves in John’s shoes and try to decide what is the best solution for a true craftsman, who is interested in both quality and good design. I will talk about illusions, intuition, and decision making.
- BBQ4.IT (September 2017)
- Confitura (July 2017) [Video PL]
- Quality Excites (June 2017) [Video PL]
- Boiling Frogs (February 2017) [Video PL]
Pragmatist’s Guide to Functional Geekery
Basic functional concepts like immutable data, second-order functions, lambdas and function composition can already be found in the modern programmer’s toolkit.
During this talk you will learn about more advanced functional concepts and how they can solve real problems. I will talk about pattern matching, algebraic data types, functional abstractions, folding and property-based tests.
I will show you a practical example written using today’s Java functional constructs and build up from there. I will use only Java & Vavr, which can improve the code, make it more maintainable and testable.
- Devoxx Community Day (June 2017)
- Devoxx PL (June 2017) [Video]
- JBCNConf (June 2017) [Video]
- jPrime (May 2017) [Video]
- Geecon (May 2017) (no live coding) [Video]
- Devoxx UK (May 2017) (no live coding) [Video]
I can haz no Futures?
Learn how simple functional patterns can be used to make your business logic cleaner and more testable.
Asynchronous programming brings a lot of Futures to your code. Bad news is that they are not essential to what your application really does… You end up with Futures of assertions in your unit tests or, even worse, with Await or expectNoMsg calls.
This is a live coding talk. First I will code an application using Futures in both business logic and unit tests. Then I will get rid of Futures without losing asynchronicity. In the second part, I will do a step by step refactoring of a simple Akka actor system. In both cases I will use typeclasses from Cats library.
- Warsaw Scala Enthusiasts meetup (April 2017)
- Lambda Days (February 2017) [Video]
- Techees @ Ocado Technology meetup (January 2017)
- Kraków Scala User Group (November 2016) [Video]
Building muliplayer game using Streams
In this talk you will learn how stream-based programming can be used to implement web frontend and multiplayer backend of the classic game: Snake.
Building dynamic applications using imperative approach tends to create lots of unmaintainable code. Stream-based programming tries to solve this problem by introducing fully declarative way of defining application logic. While using streams, you will focus on WHAT needs to be done, not HOW and WHEN.
The talk is divided into 3 parts. In the first part you will learn how to create a frontend of the Snake web game using streams as building blocks. Then, we will move to the server side and use Scala and Akka Streams library to create backend service that will allow the game to be played by multiple players. In the third part, we will discuss reactive streams and how they make asynchronous communication safe.
- ReactSphere (March 2017) [Video]
- Scala eXchange (December 2016) [Video]
- Code Europe (December 2016)
- Topconf Tallinn (November 2016)
- Voxxed Days Belgrade (September 2016) [Video]
- JavaOne (September 2016)
- SF Scala meetup (September 2016) [Video]
- Scalapolis (September 2016)
- Devoxx UK (June 2016) [Video]
- Geecon (May 2016) [Video]
- Meet.js Summit (March 2016) [short version] [Video]
- Kraków Scala User Group (February 2016) [Video PL]
- Boiling Frogs (January 2016) [Video PL]
Purely Functional Web Apps
Are you familiar with the following recipe?
- First define an API and its documentation.
- Then take the API and create its server implementation.
- Then imperatively modify the browser’s DOM in order to allow user to do and see stuff.
Sounds about right?
During this talk you will forget about all these things and become a functional web developer. I will show you how to write type-level web APIs, purely functional server and client implementations and how to render things without touching browser’s DOM.
The talk is divided into two parts: backend & frontend. The first part of the talk will introduce the concepts behind haskell-servant and we will implement a simple web app backend. Then we will code the app itself using Elm and reactive approach.
- Haskell eXchange (October 2016) [short version] [Video]
- Lambda Days (February 2016) [Video]
- Lambda Lounge (February 2016)
Sane Sharding with Akka Cluster
Writing distributed applications is very hard, especially when you start developing them as single-noded ones. Programmers tend to focus on functionalities first, leaving the scalability issues for later. Fortunately, Akka gives us many tools for scaling out and we can use them very early in the development process. You will learn how to take advantage of these features.
The talk is divided into two sections. In the first section you will learn how to transform a single-noded app into a scalable one. During live coding session we will create both versions from scratch and guide you through the most important architectural decisions.
Then we will move on to more important problems. During the second section we would like to simulate missile defence system and protect planet Earth against hostile aliens. Under the hood there will be Scala and Akka Cluster with sharding extension. After describing the application and its internals, we will simulate network and power failures to provide some idea how fast the application can recover.
Under the hood there will be Scala and Akka Cluster with sharding extension. Akka is a great toolkit for creating reactive applications, but it shows its full capabilities when it is run in a cluster.
- Voxxed Days Belgrade (September 2016) [Video]
- jPrime (May 2016) [Video]
- 33rd Degree 4 Charity (December 2015)
- JDD (October 2015) [Video]
- Kraków Scala User Group (April 2015)
Reactive UI by example
Typeclasses in a galaxy far, far away
Introduction to typeclasses.