SSR Vaadin

Vaadin, the battery-included server-side AJAX framework

I’ve written a lot about Vaadin. I was so enthusiastic that I wrote the first book about it (besides the Book of Vaadin), its updated edition for Vaadin 7, and a companion website. Still, I’m amazed that so many people in the JVM world never heard of it. In this post, I’d like to introduce Vaadin in the context of AJAX and SSR. Short introduction to Vaadin The beauty of Vaadin lies in its simplicity - you only write backend code. You read that well. A Vaadin developer only

SSR HTMX

Augmenting the client with HTMX

This post is part of a series comparing different ways to implement asynchronous requests on the client to augment the latter. So far, I described the process with Vue.js and Alpine.js. Both are similar from the developers' point of view: they involve JavaScript. In this post, I’ll focus on HTMX, whose approach is quite different. Laying out the work I’ll follow the same structure as in the previous posts of the series. Here’s the setup, server- and client-side. Server-s

SSR Alpine

Augmenting the client with Alpine.js

This post is part of a series comparing different ways to implement asynchronous requests on the client, which is colloquially known as AJAX. I dedicated the previous post to Vue.js; I’ll dedicate this one to Alpine.js - not to be confused with Alpine Linux. I’ll follow the same structure as previously. Laying out the work Here’s the setup, server- and client-side. Server-side Here is how I integrate Thymeleaf and Alpine.js in the POM: pom.xml <dependencies>

SSR Vue

Augmenting the client with Vue.js

In my previous post, I laid the ground to build upon; now is the time to start 'for real'. I heard a lot of Vue.js. Additionally, a friend who transitioned from developer to manager told me good things about Vue, which further piqued my interest. I decided to have a look at it: it will be the first 'lightweight' JavaScript framework I’ll study - from the point of view of a newbie, which I am. Laying out the work I explained WebJars and Thymeleaf in the last post. Here’s the setu

SSR Thymeleaf Webjars

Server-Side Rendering with Spring Boot

Understanding the shared steps in the project setup is crucial before delving into the specifics of each client-augmenting technology. My requirements from the last post where quite straightforward: I’ll assume the viewpoint of a backend developerNo front-end build step: no TypeScript, no minification, etc.All dependencies are managed from the backend app, i.e., Maven It’s important to note that the technology I’ll be detailing, except Vaadin, follows a similar approach. V

AJAX SSR

A short history of AJAX and SSR

My journey in programming began over two decades ago, a time when JavaScript was a far cry from its current state, and developers were primarily focused on Microsoft Internet Explorer. One of my proudest achievements back then was writing a few lines of code that allowed users to add and remove table rows entirely on the client side. We called it DHTML. Many developers today have forgotten about it—or never knew it existed. A few years later, AJAX emerged, revolutionizing the way we approached

DRY configuration Apache APISIX

DRY your Apache APISIX config

DRY is an important principle in software development. This post will show you how to apply it to Apache APISIX configuration. The DRY principle 'Don’t repeat yourself' (DRY) is a principle of software development aimed at reducing repetition of information which is likely to change, replacing it with abstractions that are less likely to change, or using data normalization which avoids redundancy in the first place. — https://en.wikipedia.org/wiki/Don%27t_repeat_yourself[Wiki

Apache APISIX plugin good practice

When (not) to write an Apache APISIX plugin

When I introduce Apache APISIX in my talks, I mention the massive number of existing plugins, and that each of them implements a specific feature. One of the key features of Apache APISIX is its flexibility. If a feature is missing, you can create your own plugin in Lua or a language compiled into Wasm, showcasing the platform’s adaptability to your specific needs. In this post, I aim to provide practical alternatives to writing a custom plugin, offering solutions you can quickly implement

kotlin coroutines opentelemetry

Kotlin Coroutines and OpenTelemetry tracing

I recently compared three OpenTelemetry approaches on the JVM: Java Agent v1, v2, and Micrometer. I used Kotlin and coroutines without overthinking. I received interesting feedback on the usage of @WithSpan with coroutines: Nice one..by the way to instrument the coroutine context properly, don't we need "opentelemetry-extension-kotlin" also? Without that, spans are not recorded properly for suspend functions (https://t.co/DSgJklnllD) pic.twitter.com/5wDwhYhoDM— Suresh G (@sur