I'm a software engineer, team leader, and speaker with over a decade of experience developing and maintaining web applications, especially within the Java ecosystem. As a former academic teacher, I excel at conveying complex ideas in a way that truly resonates and sticks with my audience.
I'm passionate about working with code, whether building from scratch or diving into legacy codebases. I enjoy crafting CI/CD processes that streamline development and deployment. I'm enthusiast of clean, straightforward code that solves business problems effectively, prioritizing readability and simplicity.
Software engineer and team leader with more than a decade of experience in developing and maintaining web applications, with a particular focus on applications written in the Java ecosystem. Neither afraid of working on code, even on code that is already “legacy”, nor of designing CI/CD processes that streamline development and deployment. Enthusiast of clean, straightforward code that solves business problems effectively, prioritizing readability and simplicity.
Inżynier oprogramowania oraz lider zespołów z ponad dziesięcioletnim doświadczeniem w tworzeniu i utrzymywaniu aplikacji webowych, ze szczególnym uwzględnieniem aplikacji napisanych w ekosystemie Javy. Nie obawia się ani pracy nad kodem, nawet nad tym, który jest już "legacy", ani projektowania procesu CI/CD które usprawniają rozwój i wdrażanie aplikacji. Miłośnik czystego, prostego kodu, który w najprostszy (i czytelny) sposób rozwiązuje problemy biznesowe.
https://banach.net.pl/avatar.jpgMultitenancy wydaje się proste, dopóki nie zderzy się z realnymi wdrożeniami i compliance. Pokażę dwa sprawdzone podejścia z produkcji: schema-per-tenant w relacyjnej bazie oraz database-per-tenant w bazie dokumentowej z routingiem po tenant_id. Dopełnię obraz o app-per-tenant i separację na poziomie wiersza. Porównamy izolację, koszty i złożoność oraz przejdziemy przez praktyczne wzorce provisioningu, routingu i migracji w Javie.
Multitenancy may seem straightforward until real-world users and compliance show up. Which approach to multitenancy should we choose, and why is one better than another? In this talk, we will review two production cases (you may even be a user of these apps): schema-per-tenant in a relational database (PostgreSQL) and database-per-tenant in a document database (MongoDB). We also cover app-per-tenant and row-level separation, outlining the trade-offs in terms of isolation, cost, and operational complexity, as well as practical patterns for provisioning, routing, and migrations in Java.
Multitenancy wydaje się proste, dopóki nie zderzy się z realnymi wdrożeniami i compliance. Pokażę dwa sprawdzone podejścia z produkcji: schema-per-tenant w relacyjnej bazie oraz database-per-tenant w bazie dokumentowej z routingiem po tenant_id. Dopełnię obraz o app-per-tenant i separację na poziomie wiersza. Porównamy izolację, koszty i złożoność oraz przejdziemy przez praktyczne wzorce provisioningu, routingu i migracji w Javie.
In 2014, JDK 8 introduced the Stream API, bringing a taste of functional programming to Java. 11 years later, in 2025, with the release of JDK 24, the biggest change awaits us in the form of JEP 485 - Stream Gatherers. Do streams make sense (spoiler: yes!), what benefits do gatherers bring, when is it worth using parallel streams, and when can they get in our way - these and other questions will be answered!
In 2014, JDK 8 introduced the Stream API, bringing a taste of functional programming to Java. 11 years later, in 2025, with the release of JDK 24, the biggest change awaits us in the form of JEP 485 - Stream Gatherers. Do streams make sense (spoiler: yes!), what benefits do gatherers bring, when is it worth using parallel streams, and when can they get in our way - these and other questions will be answered!
In 2014, JDK 8 introduced the Stream API, bringing a taste of functional programming to Java. 11 years later, in 2025, with the release of JDK 24, the biggest change awaits us in the form of JEP 485 - Stream Gatherers. Do streams make sense (spoiler: yes!), what benefits do gatherers bring, when is it worth using parallel streams, and when can they get in our way - these and other questions will be answered!
In 2014, JDK 8 introduced the Stream API, bringing a taste of functional programming to Java. 11 years later, in 2025, with the release of JDK 24, the biggest change awaits us in the form of JEP 485 - Stream Gatherers. Do streams make sense (spoiler: yes!), what benefits do gatherers bring, when is it worth using parallel streams, and when can they get in our way - these and other questions will be answered!
In 2014, JDK 8 introduced the Stream API, bringing a taste of functional programming to Java. 11 years later, in 2025, with the release of JDK 24, the biggest change awaits us in the form of JEP 485 - Stream Gatherers. Do streams make sense (spoiler: yes!), what benefits do gatherers bring, when is it worth using parallel streams, and when can they get in our way - these and other questions will be answered while writing the code.
W 2014 JDK 8 wprowadził Stream API oferując namiastkę programowania funkcyjnego w Javie. 11 lat później, w 2025, wraz z JDK 24 czeka nas największa zmiana w postaci JEP 485 - Stream Gatherers. Czy streamy mają sens (ps. tak!), co dobrego przynoszą nam gatherers, kiedy warto używać parallel streamów, a kiedy mogą nam ’nabruździć’ - na te i inne pytania odpowiemy sobie pisząc kod.
Zapewne kontenery Dockera nie są Ci obce – uruchomienie lokalnie zależności, takich jak baza danych, jest z ich użyciem łatwe. Podobnie łatwo jest uruchomić JAR-a w kontenerze. Ale czy to są wszystkie możliwości? A co z debugowaniem? Co warto dodatkowo skonfigurować? Podczas prezentacji odpowiemy sobie na te pytania oraz przejdziemy przez kilka mniej oczywistych przypadków użycia.
Zapewne kontenery Dockera nie są Ci obce – uruchomienie lokalnie zależności, takich jak baza danych, jest z ich użyciem łatwe. Podobnie łatwo jest uruchomić JAR-a w kontenerze. Ale czy to są wszystkie możliwości? A co z debugowaniem? Co warto dodatkowo skonfigurować? Podczas prezentacji odpowiemy sobie na te pytania oraz przejdziemy przez kilka mniej oczywistych przypadków użycia.
Zapewne kontenery Dockera nie są Ci obce – uruchomienie lokalnie zależności, takich jak baza danych, jest z ich użyciem łatwe. Podobnie łatwo jest uruchomić JAR-a w kontenerze. Ale czy to są wszystkie możliwości? A co z debugowaniem? Co warto dodatkowo skonfigurować? Podczas prezentacji odpowiemy sobie na te pytania oraz przejdziemy przez kilka mniej oczywistych przypadków użycia.
Surely you have encountered an error informing you that you cannot find a class or method in a class. However, do you know what can cause such problems? In this talk, we will look at the reasons for this, as well as how shading and shadowing can be used for our purpose.
Z pewnością zdarzyło Ci się napotkać na błąd informujący o braku możliwości znalezienia klasy lub metody w jakiejś klasie. Jednak czy wiesz, co może być przyczyną tego rodzaju problemów? A także, jak możemy wykorzystać tę wiedzę na naszą korzyść? W tej prezentacji odpowiedzi na te pytania i dokładniej omówimy zagadnienia związane z trudnościami w zarządzaniu zależnościami, shadowingiem i shadingiem klas oraz mechanizmami class loadera.
Z pewnością zdarzyło Ci się napotkać na błąd informujący o braku możliwości znalezienia klasy lub metody w jakiejś klasie. Jednak czy wiesz, co może być przyczyną tego rodzaju problemów? A także, jak możemy wykorzystać tę wiedzę na naszą korzyść? W tej prezentacji odpowiedzi na te pytania i dokładniej omówimy zagadnienia związane z trudnościami w zarządzaniu zależnościami, shadowingiem i shadingiem klas oraz mechanizmami class loadera.
Z pewnością zdarzyło Ci się napotkać na błąd informujący o braku możliwości znalezienia klasy lub metody w jakiejś klasie. Jednak czy wiesz, co może być przyczyną tego rodzaju problemów? A także, jak możemy wykorzystać tę wiedzę na naszą korzyść? W tej prezentacji odpowiedzi na te pytania i dokładniej omówimy zagadnienia związane z trudnościami w zarządzaniu zależnościami, shadowingiem i shadingiem klas oraz mechanizmami class loadera.
Czy Java to już tylko do API oraz integracji? Jak SSR to tylko JavaScript i jako dodatek do SPA? Podczas prezentacji przypomnimy sobie między innymi JSP i zobaczymy w jaki sposób w Javie możemy budować ładne, dynamiczne serwisy (korzytając z JavaScriptu, ale nie tworząc Single Page Applicaton).
All articles are under CC BY-NC 4.0 license.
Copyright © Kamil Banach ;-)
This site uses cookies. By continuing to browse the site, you are agreeing to our use of cookies.