A Java Geek weekly 137

Rediscovering Java ServiceLoader: Beyond Plugins and Into Capabilities. Grafana’s Pyroscope 2.0 Makes Continuous Profiling Practical at Scale. Understanding Kubernetes: part 62 – Image Volume. What I’m Hearing About Cognitive Debt (So Far). GitHub ➡️ Forgejo Migration Script in Bash. Browsers Treat Big Sites Differently. Moving away from Tailwind, and learning to structure my CSS. Git Is Not Fine. JSON Lines. Don’t answer the first question.

Rediscovering Java ServiceLoader: Beyond Plugins and Into Capabilities

When you think of Java modularity, chances are your first thoughts land on JPMS, or perhaps on Spring’s flexible configuration model. For those who "experienced" like me, thought can reach OSGI specification or other stacks like Vert-X. Yet long before either, Java offered a minimal yet powerful mechanism for loose coupling: ServiceLoader.

In this article, we’ll explore what ServiceLoader is, how it works under the hood, what its limitations are, and how to use it effectively in a modern Java ecosystem. We’ll also look at pragmatic workarounds for its constraints and see how to integrate it cleanly into a Spring Boot application. Finally, we’ll reframe ServiceLoader as something more interesting than a "plugin system": a capability discovery and negotiation mechanism.

Grafana’s Pyroscope 2.0 Makes Continuous Profiling Practical at Scale
1pyroscope v2 architecture 1778539050203
Understanding Kubernetes: part 62 – Image Volume
https%3A%2F%2Fdev to uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrpy61jhlje8wdmr125k
What I’m Hearing About Cognitive Debt (So Far)

Several practitioners, including Simon Willison and others on a Hacker News discussion of a Martin Fowler article, describe experiencing cognitive debt directly. They talk about getting lost in their own projects and finding it harder to confidently add new features. They can move faster, but they lose the deeper sensemaking that connects decisions to intent, and intent to code.

This is not just about code quality. It is about whether individual developers and product teams can maintain a coherent mental model of what the system is doing and why.

GitHub ➡️ Forgejo Migration Script in Bash

Free yourself of Microsoft, AI, and the Cloud Act in three easy steps:

  1. Migrate to Codeberg with the above script
  2. Mirror your changes on GitHub in Codeberg
  3. When you are ready, archive your repos on GitHub
Browsers Treat Big Sites Differently

This is the asymmetry that runs through the modern web. When a site breaks in Safari, WebKit engineers add a quirk. When Chrome wants to change how the web works, Chrome just changes it and everyone else adapts. Chrome doesn’t need quirks because Chrome’s interpretation of web standards is the version that everyone else works to.

Yet another example of the negative effects of a quasi-monopoly left unchecked.

Moving away from Tailwind, and learning to structure my CSS
  • reset
  • components
  • colours
  • font sizes
  • utility classes
  • the base
  • spacing
  • responsive design
  • the build system
Git Is Not Fine

This post made me realize something. When I teach git, I use alphabetical commit names like this:

Typicaldiagrams4

But in real life, commits are like this:

Reality1

It’s thus impossible to understand anything about the ordering of commits or their relationship by looking at them.

JSON Lines

JSON Lines is a convenient format for storing structured data that may be processed one record at a time. It works well with unix-style text processing tools and shell pipelines. It’s a great format for log files. It’s also a flexible format for passing messages between cooperating processes.

Don’t answer the first question

An alternative view of the Five whys.

Reverse engineering Android malware with Claude Code

I expected adware. Maybe a tracking pixel. What Claude Code found was a multi-stage RAT with active C2 infrastructure, firmware-level persistence, a plugin system, and a direct pipeline into a commercial residential proxy network—all pre-installed at the factory on a device sold openly on major marketplaces.

The just-say-no engineer was a ZIRP phenomenon

The post makes a pretty good argument, but I can’t be sure. However, I can guarantee that the Developer Advocate was a ZIRP phenomenon, unfortunately.