A Java geek
Nicolas Fränkel's blog
- Posts
- 712 from 12 Feb 2023 to 25 Oct 2026
- Posting
- weekly (55 in the last year)
- Kind
- personal blog
- Feed
- https://blog.frankel.ch/feed.xml
2026 47
- Security Baked Into the JVM: DirtyChai scales vertically, JGDMS scales horizontally
- Newsletters
- Maps without a tile server
- 404 - Page Not Found
- Scraping websites and bot-protection
- A Java geek
- Security Baked Into the JVM: no single party controls the outcome
- From documenting decisions to questioning them
- AI-assisted genealogy, a follow-up
- World geography gotchas
- Build an AI Agent (From Scratch)
- AI-assisted genealogy
- Security Baked Into the JVM: sixteen Subjects on the wire
- Solving Gradle metadata and Renovate integration
- Security Baked Into the JVM: two Subjects, one call
- GitHub agentic workflows and Renovate
- RFC 9880 and the IoT Validation Problem
- Security Baked Into the JVM: the Safe Codebase Audit Pipeline
- Making ServiceLoader usable: a provider factory
- Two nasty surprises in Home Assistant's config
- Focus
- Security Baked Into the JVM: why fork Apache River and OpenJDK?
- On programming languages, targets, and platforms
- double, BigDecimal, or Fixed-Point?
- Seasons time-lapse - the video
- AI gateways: why and how
- Seasons time-lapse - alignment
- Seasons time-lapse - the foundations
- Tokensparsamkeit for coding assistants
- Designing a team of agents
- Three Mastodon issues because of Cloudflare Bot protection
- Making illegal state unrepresentable
- A GitHub agentic workflow
- Experimenting with AI subagents
- One tip for successful OpenTelemetry projects
- The Software Architect Elevator
- Writing an agent skill
- Pi-hole behind Tailscale
- Ready-to-use virtual clusters
- JVM timing options
- Migrating from Jekyll to Hugo... or not
- Rediscovering Java ServiceLoader: Beyond Plugins and Into Capabilities
- Feedback on checked exceptions and lambdas
- From a JAR to a full-fledged MacOS app
- Checked exceptions and lambdas
- From Cloudflare Zero-trust to Tailscale
- 2025 in retrospective
2025 42
- YOW! 2025
- Yet another Rust ownership tutorial
- My second Cloudflare Tunnel
- My first real Rust project
- Are you really wasting your time in Java without these 10 libraries?
- XML Schema Validation 1.1 in Java
- Choosing a dependency
- AsciiDoc over Markdown
- Testing the untestable
- On dependencies in objects
- Transactions and ThreadLocal in Spring
- Comparing transitive dependency version resolution in Rust and Java
- Clean Design, Strong Client: The way of the Elasticsearch's Java SDK
- Thoughts on object creation
- GitHub workflows tips and tricks
- KCDC 2025
- OpenTelemetry configuration gotchas
- OpenTelemetry Tracing on the JVM
- Git default options
- Pattern-matching across different languages
- Loosely coupled configuration for Home Assistant
- Do You know how to batch?
- Broadcast devices' name on the local network
- Runtime-initialized variables in Rust
- Writing for Developers
- Getting a single value from a device's state in Home Assistant
- Cloudflare Tunnel for Home Assistant
- Getting my feet wet with Crossplane
- LangChain4J musings, six months after
- The subtle art of waiting
- High-cardinality values for build flags in Rust
- Even more OpenTelemetry - Kubernetes special
- Mutation Testing in Rust
- Clean your Memory: From Finalize to Cleaner
- One giant Kubernetes cluster for everything
- Improving Maven's dependency:analyze... or not
- WebAssembly on Kubernetes
- Remote Development made simple with DevPod
- On inheritance and subtyping
- My first steps with Playwright
- The Home Assistant companion app
- 2024 in retrospective
2024 40
- An example of HACS: Adaptive Lighting
- A solution to the problem of cluster-wide CRDs
- Replace Philips Hue automation with Home Assistant's
- The Home Assistant model
- Why Home Assistant?
- Pseudo-Random Number Generators: From the Origins to Modern Algorithms
- Langchain4J musings
- DuckDB in Action
- Digital Twins: A digital counterpart for a new concept of Product
- DRY your Apache APISIX config
- When (not) to write an Apache APISIX plugin
- Kotlin Coroutines and OpenTelemetry tracing
- Default map value
- OpenTelemetry Tracing on Spring Boot, Java Agent vs. Micrometer Tracing
- Free tier API with Apache APISIX
- Differentiating rate limits in Apache APISIX
- Advanced URL rewriting with Apache APISIX
- Renovate for everything
- A refresher on GitHub Pages
- Random and fixed routes with Apache APISIX
- Even more Opentelemetry!
- Parsing structured environment variables in Rust
- Workflow, from stateless to stateful
- My opinion on the Tauri framework
- The Vary HTTP header
- Five ways to pass parameters to Apache APISIX
- The try block in Rust
- Dissolving Design Patterns In Design Elements
- Implementing the Idempotency-Key specification on Apache APISIX
- Fixing duplicate API requests
- Apache APISIX North America Tour
- The pitfall of implicit returns
- Using my new Raspberry Pi to run an existing GitHub Action
- From Kotlin Scripting to Python
- Error management in Rust, and libs that support it
- Hardening Apache APISIX with the OWASP's Coraza and Core Ruleset
- Improving upon my OpenTelemetry Tracing demo
- Keeping your fonts in embedded SVG
- Kicking the tires of Docker Scout
- 2023 in retrospective
2023 39
- Five Apache projects you probably didn't know about
- Apache APISIX plugin priority, a leaky abstraction?
- Canary releases with Apache APISIX
- Chopping the monolith in a smarter way
- A retrospective on Errors Management: where do we go from here?
- Exploring the OpenTelemetry Collector
- API versioning
- Feedback from calling Rust from Python
- Calling Rust from Python
- Resizing images on-the-fly
- Down the rabbit hole of an Apache APISIX plugin
- Monkey-patching in Java
- Problem Details for HTTP APIs - RFC 7807 is dead, long live RFC 9457
- Offering my blog to new authors
- Send your logs to Loki
- Introduction to the Tower library
- Ops friendly Apache APISIX
- My final take on Gradle (vs. Maven)
- System architecture: move authentication to the API Gateway
- Apache APISIX without etcd
- Designing APIs with Swagger and OpenAPI
- Reactive database access on the JVM
- Evaluating Apache APISIX vs. Spring Cloud Gateway
- Playing with WASM on Docker
- GitLab Pages preview
- Health Check Response Format for HTTP APIs
- Working on an unfamiliar codebase
- Server-side rendering in Rust - a Dall.E use-case
- Leverage the richness of HTTP status codes
- Fearless Distroless
- The importance of rel=canonical for content writers
- My first Firefox extension
- My evaluation of the Scaleway Cloud provider
- mTLS everywhere!
- gRPC on the client side
- Authenticate with OpenID Connect and Apache APISIX
- Make your security policy auditable
- The right feature at the right place
- Null safety: Kotlin vs. Java
Undated 544
- Mentions
- Speaking
- Secure apisix admin
- Http api rust
- Quest for rest
- Api design patterns
- 2022 retrospective
- Immutable mastodon handle
- Move away twitter
- Poor man api
- Spring modulith modularity maturity
- Georouting apisix
- Structured errors http apis
- Discuss problem not solution
- Exceptions lambdas
- Different test scopes rust
- Kubernetes extensibility
- Maze python dependency management
- Kubernetes gateway api
- End to end tracing opentelemetry
- Renovate alternative dependabot
- Backend for frontend demo
- Basics access kubernetes pods
- On cosmetics vs intrinsics programming
- Backend for frontend
- Own service discovery client apisix
- Secure webapps api gateway
- Learning auditing kubernetes manifests
- Hard things computer science
- Take vscode spin
- Miss in java kotlin developer
- Running jekyll mac
- Jprime 2022
- Chopping monolith demo
- Kotlin context receivers
- Conditional build gitlab
- Authenticate google cloud github
- Chopping monolith
- Beautify github repo
- Rust action
- Optional nullable type
- Apisix api gateway
- Error handling
- Lessons learned previous projects
- Alternatives dto
- Evolve apis
- Avoid stringly typed kotlin
- System logger
- Maven flatten plugin
- Treat security as risk
- Running untrusted code
- Comparison fault tolerance libraries
- Beautify third party api kotlin
- Multiple spring boot apps same project
- Port management local kubernetes
- Extending third party apis
- Kotlin faas impossible union
- Multiple ways configure spring
- Reassessing testng junit
- Annotation free spring
- Metrics
- Online public speaking
- Free docker registries
- Data files commits vs pull requests
- Gitlab continuous deployment one stop shop
- Blockhound how it works
- Hacking third party api jvm
- Timely computation derived values
- Teeing java api
- Real world stream collector
- Example overengineering
- Kotlin delegation
- Custom spring data repository
- Changing field type recent jdks
- Guide lazyinitializationexception
- Kick spring native tires
- Backpressure reactive systems
- Goodbye minikube
- Monitoring across frameworks
- Optional stream
- Creating self contained executable jars
- Musings dockerfile jekyll
- Feedback log4j2 hack spring boot
- Hack ease usage log4j2 spring boot
- Event streams in action
- Solving substitution graalvm issue
- Common jdks
- Spring to quarkus
- Spring to micronaut
- Reactor to coroutines
- Update state java modularization
- Dos donts conference organizers
- Hitchhiker guide containerizing java apps
- On learning new programming language
- Defense xml
- On house building software development projects
- Github actions maven releases
- Handcrafting own svg
- Date time gotchas
- Advices writing blog posts
- Different kinds testing
- Sorting bug
- Challenges open data
- On opensource licenses changes
- Digging hibernate query cache
- Illusion statelessness
- Project loom reactive coroutines
- Managing risk not upgrading
- Why love vaadin
- Changing coding habits stream friendly
- Assessing projects sustainability github
- Introductory guide annotation processor
- Logging additional metadata
- Teaching remotely
- Coping incompatible code graalvm compilation
- Map merge compute
- Versatility kubernetes initcontainer
- Minification html javaee webapps
- Tricky servlet mappings
- Creative use filters
- Inserting new commit git history
- Developers productivity
- My blogging stack publishing process
- Even more readable code without if else
- Six interesting features programming languages
- Write extension functions own classes kotlin
- No such thing as ci cd
- Composition over inheritance applied docker
- Easier attribute management javaee
- Kotlin operators
- What version jekyll site
- Advices junior conference speakers
- Migrating serviceloader java 9 module system
- Onbuild overlooked docker directive
- Hibernate query by example
- Cherry pick automation bash
- Default git options
- Layering docker images dependencies
- Creating git shortcuts
- Comparison assertion libraries
- Deduplication trick
- Options manage derived attributes kotlin
- Spring devtools jib intellij idea
- Java streams state
- Git service providers comparison
- Sieve eratosthenes
- Openjdk 11 tools trade
- Hard look state java modularization
- Hacking webpage javascript
- Teaching java jupyter notebooks
- Even odd coroutines
- Limits programming interface
- Kotlin collections sequences
- Builder pattern finite state machine
- Listing annotated classes javaee
- Cloneable java design gotcha
- Next milestone career
- Default methods java 8
- Basics dependency injection
- Decoding clojure code
- Java serialization
- Spring boot integration intellij idea
- Configuring graal native aot reflection
- Refining functional spring
- Spring boot migrating functional
- On containers frameworks
- Elements combination kotlin collections
- Agile cargo cult
- Webapps desktop integration
- Dont git push
- Check quality kotlin code
- First impressions graalvm
- Spring boot 2 actuator change analysis
- Multiple modules spring boot apps
- Search static website
- Git cleanup
- Open source has won
- Java environment management
- Feature lifecycle java
- Dynamic casting java
- Programming by contract jvm
- Authentication alternatives javaee
- Refining redirect semantics servlet api
- Unit test vs integration test
- Managing randomness java
- Design gotchas jdk functional interfaces
- Using kotlin sap hybris platform
- Make life easier kotlin stdlib
- Making most out conferences
- Developer shortage
- Oop compatible enterprise context
- Multiple usages git rebase onto
- Alternative navigator vaadin
- Truly immutable builds
- Bypassing javascript checks
- Lambdas clean code
- Synthetic
- Flavors spring application context configuration
- Exceptions
- You not compiler
- Rise fall jvm languages
- Automating generation asciidoctor output
- Strategies optimizing docker maven image
- Dockerfile maven based github projects
- Kotlin collections
- Use case google fusion tables
- Managing publications jekyll
- It depends
- What archive format should use war jar
- Why are you testing software
- Concurrency java futures kotlin coroutines
- Java service loader vs spring factories
- Fixing own spring boot starter demo
- Custom collectors java 8
- Kotlin front end developers
- Common code spring mvc
- Cloud offerings free tier
- Fully configurable mappings spring mvc
- Coping stringly typed
- Use case spring component scan
- Use case for local class declaration
- Elasticsearch api cheatsheet
- Compilation java code on the fly
- Exploring data sets with kibana
- Open your classes and methods in kotlin
- Feedback on feeding spring boot metrics to elasticsearch
- Exploratory infrastructure projects
- Starting beats development for java developers
- Starting logstash plugin development for java developers
- Feeding spring boot metrics to elasticsearch
- Structuring data with logstash
- Debugging hints for logstash
- Another post processor for spring boot
- Travis ci tutorial for java projects
- Easy dsl design with kotlin
- Http headers management with spring
- Extension functions for more consistent apis
- Making sure inter teams communication doesnt work
- Typesafe annotations
- Should tests be ordered or not
- Are you guilty of overengineering
- Adventures in seo with vaadin
- Limits of technical debt analogy
- Starting with cucumber for end to end testing
- Performance cost of reflection
- Dont talk about refactoring club
- Fixing floating point arithmetics with kotlin
- Comparing lombok and kotlin
- Faster mutation testing
- Smart logging in java8 kotlin
- Encapsulation dont think means think means
- Rolling dice kotlin
- Software labels translation not easy
- Immutable data structures java
- Gitlab the overlooked git solution in the cloud
- Code improvement kotlin
- Maze walking algorithm
- Experimental kotlin mutation testing
- Feedback customizing vaadin html template
- Customizing vaadin html template
- Feedback jospehus problem
- Solving the josephus problem in kotlin
- Sad state developer interviews
- Log management in spring boot
- Why you shouldnt trust the html password input
- Java security manager
- Playing spring boot vaadin kotlin
- 8 years blogging retrospect
- Refactoring code testability example
- On powermock abuse
- The danger of injectmocks
- Initializing your mockito mocks
- Semantics state or dependency not both
- Forget the language the important is the tooling
- Using a framework or not
- My case for event bus
- Springone2gx 2015
- True singletons with dagger 2
- Running your domain on https for free
- Creative rx usage in testing setup
- Compile time dependency injection tradeoffs in android
- More devops for spring boot
- Fully automated android build pipeline
- Improve your tests with mockitos capture
- Spring 2015 european conferences tour
- Quality tools humble servants or tyrans
- Connection leaky abstraction
- Whats the version of my deployed application
- Better developer to developer collaboration with bintray
- Become a devops with spring boot
- Final release of integration testing from the trenches
- Work company not lead finance
- Avoid sequences if else
- Show blog love
- Developing around plantuml
- Entropy code
- Improving the vaadin 4 spring project with a simpler mvp
- Je suis charlie
- Spring profiles or maven profiles
- Optional dependencies in spring
- Avoid conditional logic in configuration
- From vaadin to docker a novices journey
- Metrics metrics everywhere
- Dear recruiters
- Integration testing around europe
- On resources scarcity application servers and micro services
- You shouldnt follow rules blindly
- Your code coverage metric is not meaningful
- Throwing a nullpointerexception or not
- Thank you mr beck
- Another valid openclosed principle
- The best there is at what it does
- Using exceptions when designing an api
- Past present future
- Sanitizing webapp outputs as an an afterthought
- Session fixation and how to fix it
- Spring configuration modularization for integration testing
- Choosing a password manager
- Easier spring version management
- First release of integration testing from the trenches
- Right bean at the right place
- Back to basics encapsulating collections
- A single simple rule for easier exception hierarchy design
- Scala on android and stuff lessons learned
- My summary of jeeconf 2014
- Dead simple api design for dice rolling
- Playing with constructors
- The visitor design pattern
- Introduction to mutation testing
- Can we put an end to this estimate game of fools
- My recap of javaland
- Vaadin and spring integration through javaconfig
- Teaser for cargo culting and memes in javaland
- Chaining url view resolvers in spring mvc
- Reusing front end components in web applications
- Doubly geeky stuff angularjs meets marvel comics
- Extrinsic vs intrinsic equality
- Webjars and wro4j integration
- Guava is an heavyweight library and i would like this to change
- Solr as a spring data module
- Spreading some javafx love
- Integrate spring javaconfig with legacy configuration
- My case against autowiring
- Spring method injection with java configuration
- Rich domain objects and spring dependency injection are compatible
- Getcaller hack
- A dive into the builder pattern
- Learning vaadin 7 is out
- No more hibernate really
- On the merits of verbosity and the flaws of expressiveness
- Happy summer holidays
- The leprechauns of software engineering
- Stop the f about gradle
- You should check angularjs
- Maven between different environments
- Spring 3 2 sweetness
- Writing a tech book why and how
- Mongodb course thoughts and feedback
- There is no such thing as an absolute best architecture
- Modularity in spring configuration
- The next gutenberg moment is now
- Deployit deployment automation made easy
- Integration tests from the trenches
- Design by contract and bean validation
- The middle path approach
- Javascript namespace and restricted access
- Kiss your architecture
- Consider replacing spring xml configuration with javaconfig
- Solr overview from a beginners point of view
- Spring beans overwriting strategy
- The case for spring inner beans
- Changing default spring bean scope
- Dry your spring beans configuration file
- The power of naming
- Pet catalog for javaee 6 reengineered
- Do we really need the dao
- Short term benefits in the information service business
- The cost and value of knowledge
- Drupal 7 to jekyll an epic journey
- Scala cheatsheet part 1 collections
- My view on courseras scala courses
- The problem lies not in the technology
- Powermock features and use cases
- Use local resources when validating xml
- Why i enrolled in an online scala course
- Web services jax ws vs spring
- Lessons learned from integrating jbpm 4 with spring
- Xml validation with importedincluded schemas
- Re use your test classes across different projects
- Spring data spring security and envers integration
- Method injection with spring
- Transaction management ejb3 vs spring
- Empower your css in your maven build
- Easier jpa with spring data jpa
- How to test code that uses envers
- Vagrant your drupal
- Ways of comparing date objects in java
- Database unit testing with dbunit spring and testng
- Arquillian on legacy servers
- Ejb3 facade over spring services
- Quick evaluation of twitter bootstrap
- Specification by example review
- Why eclipse wtp doesnt publish libraries when using m2e
- Food for my thoughts after a week at conferences
- Jenkins users conference paris
- Spring profiles or not profiles
- Dependency injection on gui components
- Trying griffon and loving it
- Dangers of implicitness
- I made the step forward into virtualization
- Html5 still a non event
- A spring hard fact about transaction management
- Osgi in action
- Trust stores and java versions
- Announcing more vaadin
- Cdi worse than spring for autowiring
- Adapters in jaxb
- Shoud you change your design for testing purposes
- Strategies to improve your knowledge
- Properly closing swing windows
- Managing unmanaged beans in cdi
- Java scala complexity and aardvarks
- Learning vaadin contest winners
- Win free copies of learning vaadin book
- Apache maven 3 cookbook
- Configuring maven to use slf4j
- Learning vaadin is out
- Simplest push
- Maven doesnt suck your pom does
- Free ebook apache maven 3 cookbook
- Testng fest et cdi
- Migrating from m2eclipse to m2e
- Better maven integration leads to unforeseen consequences bugs
- Skinny war done right
- Enough spam
- Do we need other languages on the jvm
- Property editors
- Give back to the community please
- Ssl your tomcat 7
- Get the handle on the manifest mf in a webapp
- Maven repositories in anger
- New declarative security features in servlet 3 0
- Vaadin courses on javablackbelt
- New filter api in vaadin 6 6
- First try with cloudfoundry
- 100 code coverage
- Cons of custom assertion matchers
- Java twitter integration
- Learning vaadin
- Identity federation and openid
- Cost of correcting rule breaks
- Dropbox and other backup products overview
- Both sides of the story
- Symbolic links for windows
- Second try with vaadin and scala
- Mixing vaadin and scala
- Playing with spring roo and vaadin
- Hades your next persistence angel
- Tread carefully with entities equality
- Critical analysis of frameworks comparison
- Stay up to date and think in contexts
- Why cdi wont replace spring
- A java language quirk
- The opensessioninview antipattern
- Server client push with vaadin
- Softshake 2010
- My first scala servlet
- The hunt for architectural solutions
- Automate your integration tests
- Automated beans conversion
- Unselect all toggle buttons of a group
- Managing pom versions
- Further into cdi
- Safely give away your demo applications
- Flamingo tutorial
- Next book review spring security 3
- Lessons learned from cdi in swing
- Tomcat 6 developers guide
- Decrease your pages load time 2
- The power of proxies in java
- Chicken and egg problem with spring and vaadin
- Frankel ch goes mobile
- Dry and skinny war
- Gmail html signature
- Debugging hibernate generated sql
- Vaadin spring integration
- Let others work for you with selenium
- Bean validation and jsr 303
- Managing web sessions
- Spring persistence with hibernate
- Clustering tomcat
- Free online svn repositories
- Seamless installation convention over configuration
- Securing middleware products
- Maven the complete reference
- Context root tweaking
- Typology of rich client technologies
- My first try at flex
- Discover spring authoring
- Html ui over a rest backend
- Lombok reduces your boilerplate code
- Apache maven 2 effective implementations
- Thoughts on java logging and slf4j
- Packt book reviews
- Simple templating solution with sitemesh
- Spring can inject servlets too
- Tomcats valve an alternative to filter
- Shark shark in the it business
- Top eclipse plugins i wouldnt go without
- Development infrastructure a personal experience
- Patterns book trinity
- Customize your jaxb bindings
- Ego driven architecture
- Jmx use cases
- Dto in anger
- Web start your legacy applications
- Jna meets jni
- Theme change
- Mockito spy method and spring
- Two different mocking approaches
- Google appengine limitations
- Free java hosting
- Custom loginmodule in tomcat
- Do not use taglibs use tagfiles
- Simplest java decoupling without 3rd party frameworks
- Decrease your pages load time
- Framework agnostic jpa
- Wordpress 271 upgrade
- Against french hadopi
- Easy offline javadoc
- Ubuntu pocket guide for free
- Age of spring
- Manage the quality of your projects with sonar
- Gracefully stop your batches
- Java the power of reflection
- Ganymede is out
- Html 5 a non event
- Speeding up your dbunit tests with javadb
- The unit test war junit vs testng
- Firefox 3 dowload day
- Ooops i dit it again
- https://blog.frankel.ch/lm/
- Displaytag
- Scjp