The newline that cost me a day
I love bash. It’s great. The Unix principle and all of it. Today there was one invisible guest that was giving me a hardtime though. You guessed it. The newline.
Coroutines and Quarkus
Quarkus supports Coroutines from Kotlin, but it’s not a very documented feature. What you need to do is you need to include
XML and Jackson
XML to me represent bad developer practice. It is heavy weight and strict. Unsupportive of deviation and hence brittle. It’s something that might sound good in theory in some University but becomes your pain in practice in the real world. Still, sometimes you have to engage with this Neanderthal sibling to Json. In the JVM world you have Jackson to support you with this. In gradle something like this:
Monitoring a PVC in Kubernetes with Prometheus
Something that I believe is a quite normal use case is that you’d want to monitor a Persistent Volume Claim (PVC) in kubernetes, to make sure that you get notified once you start running out of disk space. As a concept it sounds like something that should be supplied out of the box from Kubernetes, alas no.
Let’s say that you have an application that runs in Kubernetes. Now, for whatever reason, you want to test running this application on your local machine. Maybe you even want to build a local docker image and test how that works. But let’s say that your service depends on another service in Kubernetes. Now you have a problem. You can’t start your service because it won’t be able to find the other service that is living in Kubernetes. You’ll be happy to find that circumventing this problem is not very difficult.
Caching in Quarkus
Caching in itself doesn’t feel like a very complicated problem. You make some request, you save the result, and at some point you clear it again. Everytime I’ve had to use caching in the past though, I’ve always found the libraries more clunky and invasive than I’ve felt that they need to be.
Vertx and Eventbus
Vertx uses an Eventbus, which is a neat way of decoupling different components inside a system. Instead of these components calling each other directly they simply send a message on the event bus and whatever system that is interested receives the message. The idea is pretty simple and not really a new one. There is a limitation though. Vertx has been built with cluster support at it’s core.
Intellij on Ubuntu
The default mode of installing Intellij on Ubuntu seems to be as a Snap. There are definitely some advantages there, for example how easy it becomes to update the intellij version. What sometimes happens with Snaps though, which unfortunately was the case for me, is that they take a long time to startup.
Quarkus, Netty and OpenSSL
Quarkus is built on top of Netty which is a library that can provide you with high performant asynchronous network code on JVM. One of the features that Netty supports is SSL termination. Now SSL, being cryptography, is actually quite demanding on the processor. For this reason Netty has provided two solutions. One that is using the JDK implementation for SSL and one that is utilizing JNI to call OpenSSL on your machine.
Mocking and Kotlin
One of the good things with Kotlin is it’s accessible interoperability with Java. Being a new language though it has made some design decisions that are different from Java’s which sometimes can create boundaries in the usage across language boundaries and one of these decisions is what I want to talk about today.