Archive
- 28 Sep Interoperability with Java: Write yourself a compiler, Part VI
- 25 Sep Interview with Big Data engineer in 2026
- 15 Sep Generating Java bytecode: Write yourself a compiler, Part V
- 25 Aug Your First Virtual Machine: Write yourself a compiler, Part IV
- 17 Aug Compiling to intermediate representation: Write yourself a compiler, Part III
- 23 Jul mastodon.social Archive
- 22 Jul Arithmetic interpreter: Write yourself a compiler, Part II
- 17 Jul The simplest interpreter: Write yourself a compiler, Part I
- 07 Jun Rewriting my 2005 C++/OpenGL game in Go
- 15 Apr OpenTelemetry glossary: 30 terms you should know
- 30 Jan Podcast everything: how to turn any content into podcast feed
- 13 Feb #97: Ruby: help every programmer to be productive and to be happy
- 06 Feb #96: Border Gateway Protocol: the duct tape that makes the Internet work
- 23 Jan #95: SQLite: the most ubiquitous database on the planet. And beyond!
- 16 Jan #94: Scala: language with academic background and huge industry adoption
- 11 Jan #93: K-means clustering: machine learning algorithm to easily split observations into multiple buckets
- 27 Dec Podcasts I listen to: more than 90 recommendations
- 28 Nov #92: Clojure: a languages that will change the way you think about programming
- 21 Nov #91: Asynchronous communication: loose coupling in distributed systems
- 16 Nov #90: Mastodon: next-generation, open source social network
- 15 Nov Twitter Archive
- 12 Oct #89: RabbitMQ: A proven message broker for asynchronous communication
- 03 Oct #88: SLI, SLO and SLA: a number, a threshold and a legal document respectively
- 27 Sep #87: Artificial neural networks: imitating human brain to solve problems like humans
- 19 Sep #86: Proof of stake: how to cut global energy usage by 0.2%
- 13 Sep #85: Genetic algorithm: natural selection helps to solve coding problems
- 29 Aug #84: Non-fungible token (NFT): digital, decentralized art market
- 23 Aug #83: Real-time bidding: how online tracking helps serving ads
- 16 Aug #82: MongoDB: the most popular NoSQL database
- 05 Aug #81: Quarkus: supersonic, subatomic Java (guest: Holly Cummins)
- 04 Jul #80: Ethereum: a distributed virtual machine for exchanging money and bored apes
- 30 Jun #79: QUIC: what makes HTTP/3 faster
- 20 Jun #78: Stuxnet: computer virus that you can admire
- 13 Jun #77: DDoS: take down a server, one request at a time
- 06 Jun #76: 12th Factor App: portable and resilient services start here. Part 8-12/12
- 31 May #75: 12th Factor App: portable and resilient services start here. Part 1-7/12
- 16 May #74: SOAP: (not really) Simple Object Access Protocol
- 10 May #73: Neo4j: all your data as a graph?
- 06 May #72: React.js: library that won frontends?
- 26 Apr #71: Erlang: let it crash!
- 12 Apr #70: CRDT: Conflict-free Replicated Data Type (guest: Martin Kleppmann)
- 14 Feb #69: DevOps: not a job position, but culture and mindset
- 01 Feb #68: ACID transactions: don't corrupt your data
- 25 Jan #67: Version control systems: auditing source code, tracking bugs and experimenting
- 18 Jan #66: Aspect-oriented programming: another level of code modularization
- 15 Jan 10+ Slack pro-tips for effective communication
- 10 Jan #65: Zero Downtime deployment: If it hurts, do it more often
- 03 Jan #64: TypeScript: will it entirely replace JavaScript?
- 27 Dec #63: Logging libraries: auditing and troubleshooting your application
- 20 Dec #62: Object-relational mapping: hiding vs. introducing complexity
- 15 Dec #61: Spring framework: 2 decades of building Java applications
- 08 Dec #60: Haskell: purely functional and statically typed programming language
- 29 Nov #59: How compilers work: from source to execution
- 22 Nov #58: Consumer-driven Contracts: TDD between services
- 16 Nov #57: Kotlin: Much more than "better Java"
- 02 Nov #56: Test-driven development: It's not about testing
- 27 Oct The Missing README: A Guide for the New Software Engineer book review
- 25 Oct #55: Percentages, percentage points and basis points: understand your metrics
- 19 Oct #54: Immutability: from data structures to data centers
- 11 Oct #53: CDN: Content Delivery Network: global scale caching
- 04 Oct #52: How computers work: from electrons to Electron
- 28 Sep #51: Cloud computing: more than renting servers per minute
- 21 Sep #50: Property-based testing: find bugs automatically by generating thousands of test cases
- 14 Sep #49: Functional programming: academic research or new hope for the industry?
- 07 Sep #48: Distributed tracing: find bottlenecks in complex systems
- 30 Aug JSON streaming and error handling with Spring WebFlux
- 29 Aug 3 techniques to stream JSON in Spring WebFlux
- 16 Aug When and how to use onErrorContinue(): Reactor FAQ
- 06 Jul #47: Terraform: managing infrastructure as code
- 29 Jun #46: Kubernetes: Orchestrating large-scale deployments
- 29 Jun Running operations eagerly just in case: Reactor FAQ
- 22 Jun #45: Node.js: running JavaScript on the server (!)
- 15 Jun #44: RESTful APIs: much more than JSON over HTTP
- 08 Jun #43: Public-key cryptography: math invention that revolutionized the Internet
- 01 Jun #42: Flow control and backpressure: slowing down to remain stable
- 25 May #41: Unicode: can you see these: Æ, 爱 and 🚀?
- 18 May #40: Docker: more than a process, less than a VM
- 11 May #39: DNS: one of the fundamental protocols of the Internet
- 30 Mar #38: HTTP cookies: from saving shopping cart to online tracking
- 23 Mar #37: Fallacies of distributed computing: overlooked challenges
- 16 Mar #36: Microservices architecture: principles and how to break them
- 02 Mar #35: Reactive programming: from spreadsheets to modern web frameworks
- 23 Feb #34: SQL joins: unleash the true power of Structured Query Language
- 16 Feb #33: OAuth 2.0: safe, password-free authorization
- 09 Feb #32: Cryptographic hash function: much more than a blockchain
- 02 Feb #31: Redis: an in-memory database, cache, broker and much more
- 19 Jan #30: Linear Regression: simple, yet powerful machine learning
- 12 Jan #29: Time synchronization: how Network Time Protocol does it's magic
- 05 Jan #28: Event sourcing: your data as a stream of changes
- 29 Dec #27: Proof-of-work in blockchain: achieve consensus without trusted third party
- 22 Dec #26: Blockchain: distributed, append only database
- 15 Dec #25: High-frequency trading: why computers are better than human at trading?
- 08 Dec #24: Service discovery: never again hard-code IP addresses in your configuration
- 01 Dec #23: Garbage collection: how automatic memory management makes writing software much easier
- 24 Nov #22: Moore's law: still alive and true after decades
- 03 Nov #21: SSE and WebSockets: servers can talk to browsers, not only the other way around
- 27 Oct #20: Chaos engineering: breaking your system intentionally when you are prepared
- 20 Oct #19: GraalVM: Polyglot Java runtime with faster startup and smaller memory footprint
- 13 Oct #18: JIT: bytecode, interpreters and compilers
- 06 Oct #17: Business Process Modeling: designing complex processes without much coding
- 23 Sep #16: Akka: distributed actor-based toolkit for the JVM
- 15 Sep #15: Mutation testing: who tests your tests?
- 01 Sep #14: Static, Dynamic, Strong and Weak Type Systems: understand how your language treats data types
- 18 Aug #13: Cassandra: NoSQL database that supports large amounts of data on commodity servers
- 11 Aug #12: Continuous integration, delivery and deployment: how quickly your main branch appears on production?
- 04 Aug #11: MapReduce: Groundbreaking Big Data algorithm and framework
- 28 Jul #10: HTTP: the most abundant protocol in the internet
- 21 Jul #9: Retrying failures: the simplest way to improve resiliency of your services
- 14 Jul #8: Kafka's design: append-only file that turns out to be a scalable message broker
- 07 Jul #7: Speed of light: how it impact network latency and CPU performance
- 30 Jun #6: Little's law: calculate response time vs. number of CPUs
- 16 Jun #5: asm.js and WebAssembly: binary format to speed up browsers and beyond
- 09 Jun #4: Serverless: the simplest way to deploy your code to the cloud at minimal cost
- 02 Jun #3: GraphQL: more powerful REST competitor
- 26 May #2: Service Mesh: a transparent layer around your microservices to provide observability and resiliency
- 13 May #1: Circuit Breaker: fail fast by cutting off malfunctioning dependencies
- 28 Apr #0: Meta
- 30 Mar See how Google is tracking your location. With Python, Jupyter, Pandas, Geopandas and Matplotlib
- 23 Mar GraphQL server in Java: Part III: Improving concurrency
- 24 Oct GraphQL server in Java: Part II: Understanding Resolvers
- 01 Oct GraphQL server in Java: Part I: Basics
- 10 Jul Fallbacks Are Overrated - Architecting For Resilience
- 04 Mar Map.merge() - One method to rule them all
- 25 Feb Designing Data-Intensive Applications: my favourite book of last year
- 07 Feb RxJava vs Reactor
- 26 Sep Brute-forcing a seemingly simple number puzzle
- 10 Sep Thread pool self-induced deadlocks
- 20 Apr Sneak peek at spring-cloud-function serverless project
- 07 Feb Reactive emoji tracker with WebClient and Reactor: aggregating data
- 02 Feb Reactive emoji tracker with WebClient and Reactor: consuming SSE
- 24 Jan Spring Boot 2: Fluxes, from Elasticsearch to controller
- 22 Jan Spring Boot 2: Migrating from Dropwizard metrics to Micrometer
- 16 Jan Monitoring and measuring reactive application with Dropwizard Metrics
- 12 Jan Spring, Reactor and Elasticsearch: bechmarking with fake test data
- 10 Jan Spring, Reactor and Elasticsearch: from callbacks to reactive streams
- 14 Sep Idiomatic concurrency: flatMap() vs. parallel() - RxJava FAQ
- 11 Sep Detecting and testing stalled streams - RxJava FAQ
- 07 Sep Fixed-rate vs. fixed-delay - RxJava FAQ
- 04 Sep Streaming large JSON file with Jackson - RxJava FAQ
- 31 Aug Loading files with backpressure - RxJava FAQ
- 17 Aug Generating backpressure-aware streams with Flowable.generate() - RxJava FAQ
- 14 Aug 1.x to 2.x migration: Observable vs. Observable: RxJava FAQ
- 07 Aug flatMap() and the order of events - RxJava FAQ
- 04 Aug flatMap() vs. concatMap() vs. concatMapEager() - RxJava FAQ
- 31 Jul Eager subscription - RxJava FAQ
- 12 Mar Beware of slow transaction callbacks in Spring
- 13 Jan Thoughts after JCrete unconference
- 28 Oct Reactive Programming with RxJava book published
- 13 Oct Small scale stream processing kata. Part 2: RxJava 1.x/2.x
- 11 Oct Small scale stream processing kata. Part 1: thread pools
- 05 Aug Guide to time and date in Java
- 23 Jun Functor and monad examples in plain Java
- 30 Nov Which thread executes CompletableFuture's tasks and callbacks?
- 27 Oct GeeCON programming contest answers
- 08 Oct Spock VW: writing custom Spock framework extensions
- 02 Sep Displaying progress of Spring application startup in web browser
- 31 Aug Dependency injection: syntax sugar over function composition
- 29 Jul Server-sent events with RxJava and SseEmitter
- 27 Jul Notes after GOTO Amsterdam
- 24 Jul RESTful considered harmful
- 15 Jul Consuming java.util.concurrent.BlockingQueue as rx.Observable
- 08 Jul Writing a download server. Part VI: Describe what you send (Content-type, et.al.)
- 06 Jul Writing a download server. Part V: Throttle download speed
- 02 Jul Writing a download server. Part IV: Implement HEAD operation (efficiently)
- 29 Jun Writing a download server. Part III: headers: Content-length and Range
- 25 Jun Writing a download server. Part II: headers: Last-Modified, ETag and If-None-Match
- 23 Jun Writing a download server. Part I: Always stream, never keep fully in memory
- 03 Jun How LongAccumulator and DoubleAccumulator classes work?
- 31 May Notes after Spring.IO Barcelona conference
- 21 Apr Spring: injecting lists, maps, optionals and getBeansOfType() pitfalls
- 05 Apr Biological computer simulation of selfish genes
- 23 Mar CompletableFuture can't be interrupted
- 23 Feb Journey to idempotency and temporal decoupling
- 10 Feb Retry-After HTTP header in practice
- 02 Feb Storing months of historical metrics from Hystrix in Graphite
- 27 Dec Asynchronous timeouts with CompletableFuture
- 15 Dec Hazelcast member discovery using Curator and ZooKeeper
- 08 Dec Accessing Meetup's streaming API with RxNetty
- 04 Dec Benchmarking impact of batching in Hystrix
- 24 Nov Converting between Completablefuture and Observable
- 20 Nov ExecutorService - 10 tips and tricks
- 03 Nov Batching (collapsing) requests in Hystrix
- 16 Oct Java Performance: The Definitive Guide - review
- 22 Sep Hazelcast's MapLoader pitfalls
- 19 Sep Property-based testing with ScalaCheck - custom generators
- 18 Sep Property-based testing with Spock
- 23 Aug URL shortener service in 42 lines of code in... Java (?!) Spring Boot + Redis
- 21 Jul Testing code for excessively large inputs
- 21 Jul Building extremely large in-memory InputStream for testing purposes
- 17 Jul Grouping, sampling and batching - custom collectors in Java 8
- 16 Jul Introduction to writing custom collectors in Java 8
- 07 Jul Turning recursive file system traversal into Stream
- 29 Jun Clojure for Machine Learning book review
- 23 Jun Option.fold() considered unreadable
- 29 May Simplifying trading system with Akka
- 28 May InterruptedException and interrupting threads explained
- 22 Apr HashMap performance improvements in Java 8
- 24 Mar Automated bug finding with git bisect and mvn test
- 17 Mar Simplifying ReadWriteLock with Java 8 and lambdas
- 22 Feb Custom Spring namespaces made easier with JAXB
- 08 Jan Three flavours of request-response pattern in Akka
- 06 Jan Turning Twitter4J into RxJava's Observable
- 23 Dec Proxies done right with Guava's AbstractInvocationHandler
- 22 Dec Promises and CompletableFuture
- 15 Dec Playing with Scala futures
- 01 Nov brainfuck in Clojure. Part II: compiler
- 28 Oct brainfuck in Clojure. Part I: interpreter
- 24 Oct "Beginning Java EE 7" by Antonio Goncalves review
- 24 Sep instanceof operator and Visitor pattern replacement in Java 8
- 19 Aug Optional in Java 8 cheat sheet
- 23 Jul Asynchronous retry pattern
- 17 Jul Managing congested actors in Akka
- 15 Jul Fake system clock pattern in Scala with implicit parameters
- 02 Jul Macro lifecycle in Clojure
- 30 Jun su and sudo in Spring Security applications
- 09 Jun Clojure macros for beginners
- 02 Jun Mapping enums done right with @Convert in JPA 2.1
- 27 May Null safety in Kotlin
- 13 May Lazy sequences implementation for Java 8
- 12 May Java 8: CompletableFuture in action
- 09 May Java 8: Definitive guide to CompletableFuture
- 06 May Synchronising Multithreaded Integration Tests revisited
- 04 May Lazy sequences in Scala and Clojure
- 14 Apr SiftingAppender: logging different threads to different log files
- 08 Apr WatchService combined with Akka actors
- 03 Apr Scala traits implementation and interoperability. Part II: Traits linearization
- 01 Apr Scala traits implementation and interoperability. Part I: Basics
- 29 Mar Synchronizing transactions with asynchronous events in Spring
- 28 Mar FitNesse your ScalaTest with custom Scala DSL
- 24 Mar Promises and futures in Clojure
- 11 Mar Promises and Deferred objects in jQuery and AngularJS
- 07 Mar Futures in Akka with Scala
- 04 Mar DeferredResult - asynchronous processing in Spring MVC
- 28 Feb Advanced ListenableFuture capabilities
- 25 Feb ListenableFuture in Guava
- 22 Feb ExecutorCompletionService in practice
- 20 Feb Implementing custom Future
- 16 Feb java.util.concurrent.Future basics
- 09 Feb Don't rely on unit tests alone
- 02 Feb Breaking build is not a crime
- 27 Jan How aggressive is method inlining in JVM?
- 20 Jan Spring Data JDBC generic DAO implementation - most lightweight ORM ever
- 13 Jan @Cacheable overhead in Spring
- 09 Jan Probability distribution for programmers
- 26 Nov Forcing Tomcat to log through SLF4J/Logback
- 24 Nov Standalone web application with executable Tomcat
- 18 Nov Parallelization of a simple use case explained
- 10 Nov Remote actors - discovering Akka
- 06 Nov Non-blocking I/O - discovering Akka
- 05 Nov become/unbecome - discovering Akka
- 02 Nov Two actors - discovering Akka
- 31 Oct Request and response - discovering Akka
- 30 Oct Your first message - discovering Akka
- 28 Oct Java features applicability
- 20 Oct Testing Quartz Cron expressions
- 18 Oct Java Coding Conventions considered harmful
- 06 Oct Where do the stack traces come from?
- 30 Sep RateLimiter - discovering Google Guava
- 25 Sep Confitura 2012 - podziękowanie i uwagi
- 01 Sep Accessing clipboard in Linux terminal
- 25 Aug Which Java thread consumes my CPU?
- 28 Jul String memory internals
- 27 May Oslo coderetreat summer 2012 - in Scala
- 13 May Integrating with reCAPTCHA using... Spring Integration
- 12 May javax.servlet.AsyncContext.start() limited usefulness
- 09 Apr Secret powers of foldLeft() in Scala
- 08 Apr Quartz scheduler misfire instructions explained
- 06 Apr eta-expansion (internals) in Scala explained
- 05 Apr Quartz scheduler plugins - hidden treasure
- 01 Apr Configuring Quartz with JDBCJobStore in Spring
- 17 Mar Filtering irrelevant stack trace lines in logs
- 25 Feb Client-side server monitoring with Jolokia and JMX
- 02 Feb Automatically generating WADL in Spring MVC REST application
- 24 Jan Gentle introduction to WADL (in Java)
- 20 Dec Enabling JMX in Hibernate, EhCache, Quartz, DBCP and Spring
- 15 Nov Spring pitfalls: transactional tests considered harmful
- 29 Oct Spring pitfalls: proxying
- 23 Sep Logging exceptions root cause first
- 01 Sep The evolution of Spring dependency injection techniques
- 07 Aug What features of Java have been dropped in Scala?
- 21 Jul EJB 3.1 Cookbook by Richard Reese review
- 03 Jul Poor man's CRUD: jqGrid, REST, AJAX, and Spring MVC in one house
- 30 May Enabling load balancing and failover in Apache CXF
- 08 Apr MongoDB and recording appenders for Logback
- 20 Mar Jolokia + Highcharts = JMX for human beings
- 11 Mar Tenfold increase in server throughput with Servlet 3.0 asynchronous processing
- 11 Jan Spring framework without XML... At all!
- 08 Jan Activiti processes and executions explained
- 19 Dec Speeding up Spring integration tests
- 17 Oct Functional Java Developers’ Day 2010
- 25 Sep Testing for exceptions in JUnit revised
- 24 Sep JavaScript dynamic language support in Spring framework
- 05 Aug Creating prototype Spring beans on demand using lookup-method
- 02 Aug Few words after Javarsovia 2010
- 06 Jul Hades: DRY principle in JPA/Spring development
- 19 May Clean code, clean logs: easy to read, easy to parse (10/10)
- 19 May Clean code, clean logs: log exceptions properly (9/10)
- 17 May Clean code, clean logs: watch out for external systems (8/10)
- 16 May Impressions after GeeCON 2010
- 16 May Clean code, clean logs: log method arguments and return values (7/10)
- 15 May Clean code, clean logs: tune your pattern (6/10)
- 07 May Clean code, clean logs: concise and descriptive (5/10)
- 06 May Clean code, clean logs: avoid side effects (4/10)
- 05 May Clean code, clean logs: do you know what you are logging? (3/10)
- 04 May Clean code, clean logs: logging levels are there for you (2/10)
- 03 May Clean code, clean logs: use appropriate tools (1/10)
- 14 Mar Elegance vs. simplicity
- 26 Jan Writing custom FreeMarker template loaders in Spring
- 03 Jan Logback-feed: publish your application logs using Atom/RSS feed
- 19 Dec Adapter pattern revised
- 01 Dec Chain of responsibility pattern meets Spring, JPA, Wicket and Apache CXF part 2/2
- 28 Nov Chain of responsibility pattern meets Spring, JPA, Wicket and Apache CXF part 1/2
- 25 Oct My first open source contribution
- 17 Oct Compile- vs load-time weaving performance in Spring
- 07 Oct DDD in Spring made easy with AspectJ
- 27 Sep State pattern: introducing domain-driven design
- 20 Sep Spring AOP riddle demystified
- 16 Sep Adapter pattern: accesing Ehcache via Map interface
- 03 Sep Injecting methods at runtime to Java class in Groovy
- 31 Aug Short review of "Java Concurrency in Practice" and others...
- 16 Aug Spring AOP riddle
- 11 Aug 10 reasons why I don’t like EJB3
- 03 Aug Invoking secured remote EJB in JBoss 5
- 09 Jul Sun Certified Web Component Developer - refleksje
- 06 Jul Podsumowanie Javarsovia 2009
- 22 May Skrypty Groovy na żądanie w Springu
- 10 May Relacja z GeeCON 2009 w Krakowie
- 01 May Logika biznesowa w Groovy ze Springiem i JPA część 2/2
- 01 May Logika biznesowa w Groovy ze Springiem i JPA część 1/2
- 25 Mar Wstrzykiwanie EJB do akcji Struts2 z @EJB
- 08 Mar Wzorzec Visitor - realny przykład
- 26 Jan Elegancki CRUD w jednej akcji Struts2 część 2/2
- 23 Jan Elegancki CRUD w jednej akcji Struts2 część 1/2
- 07 Jan SCJD - Sun Certified Java Developer zdobyty!
- 07 Jan Freemarker - pierwsze kroki
- 04 Dec Wzorzec Command - elastyczny protokół sieciowy
- 26 Nov Tomcat z JavaRebel i aplikacja Struts2
- 02 Nov Strumienie w Javie - cheat sheet
- 17 Oct Relacja z Java Developers' Day 2008
- 12 Oct java.lang.reflect.Proxy czyli prawie AOP za prawie darmo
- 12 Oct Log4j bez konfiguracji
- 30 Sep Generyczne testy z adnotacją Parameters w JUnit 4