- August 2024: Is 'return await' redundant or necessary in JavaScript?
- December 2022: Podcasts I listen to: more than 90 recommendations
- November 2022: Twitter Archive
- January 2022: 10+ Slack pro-tips for effective communication
- October 2021: The Missing README: A Guide for the New Software Engineer book review
- August 2021: JSON streaming and error handling with Spring WebFlux
- August 2021: 3 techniques to stream JSON in Spring WebFlux
- August 2021: When and how to use onErrorContinue(): Reactor FAQ
- June 2021: Running operations eagerly just in case: Reactor FAQ
- March 2020: See how Google is tracking your location. With Python, Jupyter, Pandas, Geopandas and Matplotlib
- March 2020: GraphQL server in Java: Part III: Improving concurrency
- October 2019: GraphQL server in Java: Part II: Understanding Resolvers
- September 2019: GraphQL server in Java: Part I: Basics
- July 2019: Fallbacks Are Overrated - Architecting For Resilience
- March 2019: Map.merge() - One method to rule them all
- February 2019: Designing Data-Intensive Applications: my favourite book of last year
- February 2019: RxJava vs Reactor
- September 2018: Brute-forcing a seemingly simple number puzzle
- September 2018: Thread pool self-induced deadlocks
- April 2018: Sneak peek at spring-cloud-function serverless project
- February 2018: Reactive emoji tracker with WebClient and Reactor: aggregating data
- February 2018: Reactive emoji tracker with WebClient and Reactor: consuming SSE
- January 2018: Spring Boot 2: Fluxes, from Elasticsearch to controller
- January 2018: Spring Boot 2: Migrating from Dropwizard metrics to Micrometer
- January 2018: Monitoring and measuring reactive application with Dropwizard Metrics
- January 2018: Spring, Reactor and Elasticsearch: bechmarking with fake test data
- January 2018: Spring, Reactor and Elasticsearch: from callbacks to reactive streams
- September 2017: Idiomatic concurrency: flatMap() vs. parallel() - RxJava FAQ
- September 2017: Detecting and testing stalled streams - RxJava FAQ
- September 2017: Fixed-rate vs. fixed-delay - RxJava FAQ
- September 2017: Streaming large JSON file with Jackson - RxJava FAQ
- August 2017: Loading files with backpressure - RxJava FAQ
- August 2017: Generating backpressure-aware streams with Flowable.generate() - RxJava FAQ
- August 2017: 1.x to 2.x migration: Observable vs. Observable: RxJava FAQ
- August 2017: flatMap() and the order of events - RxJava FAQ
- August 2017: flatMap() vs. concatMap() vs. concatMapEager() - RxJava FAQ
- July 2017: Eager subscription - RxJava FAQ
- March 2017: Beware of slow transaction callbacks in Spring
- January 2017: Thoughts after JCrete unconference
- October 2016: Reactive Programming with RxJava book published
- October 2016: Small scale stream processing kata. Part 2: RxJava 1.x/2.x
- October 2016: Small scale stream processing kata. Part 1: thread pools
- August 2016: Guide to time and date in Java
- June 2016: Functor and monad examples in plain Java
- November 2015: Which thread executes CompletableFuture's tasks and callbacks?
- October 2015: GeeCON programming contest answers
- October 2015: Spock VW: writing custom Spock framework extensions
- September 2015: Displaying progress of Spring application startup in web browser
- August 2015: Dependency injection: syntax sugar over function composition
- July 2015: Server-sent events with RxJava and SseEmitter
- July 2015: Notes after GOTO Amsterdam
- July 2015: RESTful considered harmful
- July 2015: Consuming java.util.concurrent.BlockingQueue as rx.Observable
- July 2015: Writing a download server. Part VI: Describe what you send (Content-type, et.al.)
- July 2015: Writing a download server. Part V: Throttle download speed
- July 2015: Writing a download server. Part IV: Implement HEAD operation (efficiently)
- June 2015: Writing a download server. Part III: headers: Content-length and Range
- June 2015: Writing a download server. Part II: headers: Last-Modified, ETag and If-None-Match
- June 2015: Writing a download server. Part I: Always stream, never keep fully in memory
- June 2015: How LongAccumulator and DoubleAccumulator classes work?
- May 2015: Notes after Spring.IO Barcelona conference
- April 2015: Spring: injecting lists, maps, optionals and getBeansOfType() pitfalls
- April 2015: Biological computer simulation of selfish genes
- March 2015: CompletableFuture can't be interrupted
- February 2015: Journey to idempotency and temporal decoupling
- February 2015: Retry-After HTTP header in practice
- February 2015: Storing months of historical metrics from Hystrix in Graphite
- December 2014: Asynchronous timeouts with CompletableFuture
- December 2014: Hazelcast member discovery using Curator and ZooKeeper
- December 2014: Accessing Meetup's streaming API with RxNetty
- December 2014: Benchmarking impact of batching in Hystrix
- November 2014: Converting between Completablefuture and Observable
- November 2014: ExecutorService - 10 tips and tricks
- November 2014: Batching (collapsing) requests in Hystrix
- October 2014: Java Performance: The Definitive Guide - review
- September 2014: Hazelcast's MapLoader pitfalls
- September 2014: Property-based testing with ScalaCheck - custom generators
- September 2014: Property-based testing with Spock
- August 2014: URL shortener service in 42 lines of code in... Java (?!) Spring Boot + Redis
- July 2014: Testing code for excessively large inputs
- July 2014: Building extremely large in-memory InputStream for testing purposes
- July 2014: Grouping, sampling and batching - custom collectors in Java 8
- July 2014: Introduction to writing custom collectors in Java 8
- July 2014: Turning recursive file system traversal into Stream
- June 2014: Clojure for Machine Learning book review
- June 2014: Option.fold() considered unreadable
- May 2014: Simplifying trading system with Akka
- May 2014: InterruptedException and interrupting threads explained
- April 2014: HashMap performance improvements in Java 8
- March 2014: Automated bug finding with git bisect and mvn test
- March 2014: Simplifying ReadWriteLock with Java 8 and lambdas
- February 2014: Custom Spring namespaces made easier with JAXB
- January 2014: Three flavours of request-response pattern in Akka
- January 2014: Turning Twitter4J into RxJava's Observable
- December 2013: Proxies done right with Guava's AbstractInvocationHandler
- December 2013: Promises and CompletableFuture
- December 2013: Playing with Scala futures
- November 2013: brainfuck in Clojure. Part II: compiler
- October 2013: brainfuck in Clojure. Part I: interpreter
- October 2013: "Beginning Java EE 7" by Antonio Goncalves review
- September 2013: instanceof operator and Visitor pattern replacement in Java 8
- August 2013: Optional in Java 8 cheat sheet
- July 2013: Asynchronous retry pattern
- July 2013: Managing congested actors in Akka
- July 2013: Fake system clock pattern in Scala with implicit parameters
- July 2013: Macro lifecycle in Clojure
- June 2013: su and sudo in Spring Security applications
- June 2013: Clojure macros for beginners
- June 2013: Mapping enums done right with @Convert in JPA 2.1
- May 2013: Null safety in Kotlin
- May 2013: Lazy sequences implementation for Java 8
- May 2013: Java 8: CompletableFuture in action
- May 2013: Java 8: Definitive guide to CompletableFuture
- May 2013: Synchronising Multithreaded Integration Tests revisited
- May 2013: Lazy sequences in Scala and Clojure
- April 2013: SiftingAppender: logging different threads to different log files
- April 2013: WatchService combined with Akka actors
- April 2013: Scala traits implementation and interoperability. Part II: Traits linearization
- April 2013: Scala traits implementation and interoperability. Part I: Basics
- March 2013: Synchronizing transactions with asynchronous events in Spring
- March 2013: FitNesse your ScalaTest with custom Scala DSL
- March 2013: Promises and futures in Clojure
- March 2013: Promises and Deferred objects in jQuery and AngularJS
- March 2013: Futures in Akka with Scala
- March 2013: DeferredResult - asynchronous processing in Spring MVC
- February 2013: Advanced ListenableFuture capabilities
- February 2013: ListenableFuture in Guava
- February 2013: ExecutorCompletionService in practice
- February 2013: Implementing custom Future
- February 2013: java.util.concurrent.Future basics
- February 2013: Don't rely on unit tests alone
- February 2013: Breaking build is not a crime
- January 2013: How aggressive is method inlining in JVM?
- January 2013: Spring Data JDBC generic DAO implementation - most lightweight ORM ever
- January 2013: @Cacheable overhead in Spring
- January 2013: Probability distribution for programmers
- November 2012: Forcing Tomcat to log through SLF4J/Logback
- November 2012: Standalone web application with executable Tomcat
- November 2012: Parallelization of a simple use case explained
- November 2012: Remote actors - discovering Akka
- November 2012: Non-blocking I/O - discovering Akka
- November 2012: become/unbecome - discovering Akka
- November 2012: Two actors - discovering Akka
- October 2012: Request and response - discovering Akka
- October 2012: Your first message - discovering Akka
- October 2012: Java features applicability
- October 2012: Testing Quartz Cron expressions
- October 2012: Java Coding Conventions considered harmful
- October 2012: Where do the stack traces come from?
- September 2012: RateLimiter - discovering Google Guava
- September 2012: Confitura 2012 - podziękowanie i uwagi
- September 2012: Accessing clipboard in Linux terminal
- August 2012: Which Java thread consumes my CPU?
- July 2012: String memory internals
- May 2012: Oslo coderetreat summer 2012 - in Scala
- May 2012: Integrating with reCAPTCHA using... Spring Integration
- May 2012: javax.servlet.AsyncContext.start() limited usefulness
- April 2012: Secret powers of foldLeft() in Scala
- April 2012: Quartz scheduler misfire instructions explained
- April 2012: eta-expansion (internals) in Scala explained
- April 2012: Quartz scheduler plugins - hidden treasure
- April 2012: Configuring Quartz with JDBCJobStore in Spring
- March 2012: Filtering irrelevant stack trace lines in logs
- February 2012: Client-side server monitoring with Jolokia and JMX
- February 2012: Automatically generating WADL in Spring MVC REST application
- January 2012: Gentle introduction to WADL (in Java)
- December 2011: Enabling JMX in Hibernate, EhCache, Quartz, DBCP and Spring
- November 2011: Spring pitfalls: transactional tests considered harmful
- October 2011: Spring pitfalls: proxying
- September 2011: Logging exceptions root cause first
- September 2011: The evolution of Spring dependency injection techniques
- August 2011: What features of Java have been dropped in Scala?
- July 2011: EJB 3.1 Cookbook by Richard Reese review
- July 2011: Poor man's CRUD: jqGrid, REST, AJAX, and Spring MVC in one house
- May 2011: Enabling load balancing and failover in Apache CXF
- April 2011: MongoDB and recording appenders for Logback
- March 2011: Jolokia + Highcharts = JMX for human beings
- March 2011: Tenfold increase in server throughput with Servlet 3.0 asynchronous processing
- January 2011: Spring framework without XML... At all!
- January 2011: Activiti processes and executions explained
- December 2010: Speeding up Spring integration tests
- October 2010: Functional Java Developers’ Day 2010
- September 2010: Testing for exceptions in JUnit revised
- September 2010: JavaScript dynamic language support in Spring framework
- August 2010: Creating prototype Spring beans on demand using lookup-method
- August 2010: Few words after Javarsovia 2010
- July 2010: Hades: DRY principle in JPA/Spring development
- May 2010: Clean code, clean logs: easy to read, easy to parse (10/10)
- May 2010: Clean code, clean logs: log exceptions properly (9/10)
- May 2010: Clean code, clean logs: watch out for external systems (8/10)
- May 2010: Impressions after GeeCON 2010
- May 2010: Clean code, clean logs: log method arguments and return values (7/10)
- May 2010: Clean code, clean logs: tune your pattern (6/10)
- May 2010: Clean code, clean logs: concise and descriptive (5/10)
- May 2010: Clean code, clean logs: avoid side effects (4/10)
- May 2010: Clean code, clean logs: do you know what you are logging? (3/10)
- May 2010: Clean code, clean logs: logging levels are there for you (2/10)
- May 2010: Clean code, clean logs: use appropriate tools (1/10)
- March 2010: Elegance vs. simplicity
- January 2010: Writing custom FreeMarker template loaders in Spring
- January 2010: Logback-feed: publish your application logs using Atom/RSS feed
- December 2009: Adapter pattern revised
- December 2009: Chain of responsibility pattern meets Spring, JPA, Wicket and Apache CXF part 2/2
- November 2009: Chain of responsibility pattern meets Spring, JPA, Wicket and Apache CXF part 1/2
- October 2009: My first open source contribution
- October 2009: Compile- vs load-time weaving performance in Spring
- October 2009: DDD in Spring made easy with AspectJ
- September 2009: State pattern: introducing domain-driven design
- September 2009: Spring AOP riddle demystified
- September 2009: Adapter pattern: accesing Ehcache via Map interface
- September 2009: Injecting methods at runtime to Java class in Groovy
- August 2009: Short review of "Java Concurrency in Practice" and others...
- August 2009: Spring AOP riddle
- August 2009: 10 reasons why I don’t like EJB3
- August 2009: Invoking secured remote EJB in JBoss 5
- July 2009: Sun Certified Web Component Developer - refleksje
- July 2009: Podsumowanie Javarsovia 2009
- May 2009: Skrypty Groovy na żądanie w Springu
- May 2009: Relacja z GeeCON 2009 w Krakowie
- May 2009: Logika biznesowa w Groovy ze Springiem i JPA część 2/2
- May 2009: Logika biznesowa w Groovy ze Springiem i JPA część 1/2
- March 2009: Wstrzykiwanie EJB do akcji Struts2 z @EJB
- March 2009: Wzorzec Visitor - realny przykład
- January 2009: Elegancki CRUD w jednej akcji Struts2 część 2/2
- January 2009: Elegancki CRUD w jednej akcji Struts2 część 1/2
- January 2009: SCJD - Sun Certified Java Developer zdobyty!
- January 2009: Freemarker - pierwsze kroki
- December 2008: Wzorzec Command - elastyczny protokół sieciowy
- November 2008: Tomcat z JavaRebel i aplikacja Struts2
- November 2008: Strumienie w Javie - cheat sheet
- October 2008: Relacja z Java Developers' Day 2008
- October 2008: java.lang.reflect.Proxy czyli prawie AOP za prawie darmo
- October 2008: Log4j bez konfiguracji
- September 2008: Generyczne testy z adnotacją Parameters w JUnit 4