Talks & shorts
Meetup talks on the JVM and API design, and short explainers on model infrastructure. Each has its own page with written notes on the subject — the video is the summary, the page is the reference.
What is gRPC — HTTP vs gRPC for your next API
HTTP is universal, human-readable and understood by every tool in the stack. gRPC is faster on the wire, strongly typed at the boundary, and awkward everywhere a browser is involved. This conversation works through which properties actually decide the choice for a new API.
Diving deep into GraalVM — native images with Spring Boot
GraalVM compiles a JVM application ahead of time into a native executable. Startup drops from seconds to milliseconds and memory footprint falls sharply, which changes what the JVM is viable for. The cost is a closed-world assumption that breaks the reflective tricks much of the Java ecosystem is built on.
Resolving a location from an IP address in Java
Turning an IP address into a country, region and city is a routine requirement for analytics, fraud checks and localisation. Doing it against a local GeoIP database rather than a hosted API keeps the lookup fast, free per request, and keeps user IP addresses inside your own infrastructure.
Camera text recognition on Android — building a Google Lens-style OCR app
Reading text off a live camera feed is a pipeline problem rather than a single API call: acquire frames, hand them to a recognition engine, and reconcile a stream of noisy per-frame results into something stable enough to show a user.
Which language should you use for Android development?
Android can be written in Java, Kotlin, C++ through the NDK, or any of several cross-platform frameworks. The languages differ less in capability than in how much ceremony they demand and how well they match the platform's own direction.
Python CGI programming — the architecture, and a first program
CGI is the oldest way to make a web server run a program, and understanding it explains why every framework since has been built the way it is. One process per request is a beautifully simple model with exactly one fatal property.
Why vLLM?
Serving a language model well is mostly a memory management problem. vLLM's contribution is treating the KV cache like virtual memory — paging it — which raises how many requests you can hold concurrently far more than a faster kernel would.
This is why quantization matters
Quantization stores weights at lower precision — 8-bit or 4-bit instead of 16. The obvious win is that the model fits. The less obvious and often larger win is that inference is memory-bandwidth bound, so moving fewer bytes per token makes it faster too.
Training an AI model is slow — back-propagation explained
Training is slow because every step runs the network forwards, then runs a second pass backwards to compute how every parameter should change, and the backward pass needs the forward pass's intermediate values kept in memory the whole time.
Gradient descent explained
Gradient descent is the whole of learning reduced to one instruction: measure which direction increases the error, and take a small step the other way. Everything else in an optimiser is a refinement of how large that step should be.









