<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Serverside on Sven Ruppert</title><link>https://sven-ruppert.info/categories/serverside/</link><description>Recent content in Serverside on Sven Ruppert</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>sven.ruppert@gmail.com (Sven Ruppert)</managingEditor><webMaster>sven.ruppert@gmail.com (Sven Ruppert)</webMaster><copyright>© 2026 Sven Ruppert</copyright><lastBuildDate>Wed, 18 Mar 2026 07:05:00 +0000</lastBuildDate><atom:link href="https://sven-ruppert.info/categories/serverside/index.xml" rel="self" type="application/rss+xml"/><item><title>A Vaadin Starter Project with a Clear Focus</title><link>https://sven-ruppert.info/posts/a-vaadin-starter-project-with-a-clear-focus/</link><pubDate>Wed, 18 Mar 2026 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/a-vaadin-starter-project-with-a-clear-focus/</guid><description>&lt;p&gt;Many example projects overload the starting point by covering too many topics at once. Routing, data access, security, forms, theme customisations, and other integrations will then be presented in a single demo. This makes it more difficult for readers to recognise the project&amp;rsquo;s actual structure.&lt;/p&gt;</description></item><item><title>Practical i18n in Vaadin: Resource Bundles, Locale Handling and UI Language Switching</title><link>https://sven-ruppert.info/posts/practical-i18n-in-vaadin-resource-bundles-locale-handling-and-ui-language-switching/</link><pubDate>Wed, 11 Mar 2026 07:09:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/practical-i18n-in-vaadin-resource-bundles-locale-handling-and-ui-language-switching/</guid><description>&lt;p&gt;Modern web applications are rarely used only by users with the same language. Even internal tools often reach international teams or are used in different countries. A multilingual user interface is therefore not a luxury feature, but an important part of the user experience.&lt;/p&gt;</description></item><item><title>Separation of Concerns in Vaadin: Eliminating Inline Styles</title><link>https://sven-ruppert.info/posts/separation-of-concerns-in-vaadin-eliminating-inline-styles/</link><pubDate>Wed, 04 Mar 2026 13:05:20 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/separation-of-concerns-in-vaadin-eliminating-inline-styles/</guid><description>&lt;p&gt;Vaadin Flow enables the development of complete web applications exclusively in Java. Components, layouts, navigation, and even complex UI structures can be modelled on the server side without working directly with HTML or JavaScript. This approach is one of the main reasons why Vaadin is especially popular in Java-centric projects.&lt;/p&gt;</description></item><item><title>An unexpectedly hassle-free upgrade</title><link>https://sven-ruppert.info/posts/an-unexpectedly-hassle-free-upgrade/</link><pubDate>Mon, 16 Feb 2026 11:22:56 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/an-unexpectedly-hassle-free-upgrade/</guid><description>&lt;p&gt;The starting point for this article was not a strategic architecture workshop or a long-term planned migration path, but a comparatively unspectacular step: updating the version numbers in the existing project. As part of further developing my URL shortener project, a regular dependency update was due anyway. Vaadin 25 (was already available at that time, so it made sense to proceed.&lt;/p&gt;</description></item><item><title>The Importance of UI in Import Processes</title><link>https://sven-ruppert.info/posts/the-importance-of-ui-in-import-processes/</link><pubDate>Mon, 09 Feb 2026 15:15:33 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-importance-of-ui-in-import-processes/</guid><description>&lt;h2 class="relative group"&gt;Why an import needs a UI at all
 &lt;div id="why-an-import-needs-a-ui-at-all" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-an-import-needs-a-ui-at-all" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Import functions are often treated as purely technical details in applications. Data is read in, processed and then made available – ideally without further interaction. In practice, however, an import is rarely an invisible process. It marks a transition between existing system states, between old and new data, between trust and control. This is exactly where the need for a user interface arises.&lt;/p&gt;</description></item><item><title>JSON export in Vaadin Flow</title><link>https://sven-ruppert.info/posts/20224/</link><pubDate>Thu, 05 Feb 2026 16:50:15 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/20224/</guid><description>&lt;p&gt;Export functions are often seen as a purely technical side task: one button, one download, done. In a Vaadin-based application, however, it quickly becomes apparent that exporting is much more than writing data to a file. It is a direct extension of the UI state, an infrastructural contract between frontend and backend, and a decisive factor for maintainability and predictability.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Extracting Components - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-extracting-components-part-2/</link><pubDate>Mon, 22 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-extracting-components-part-2/</guid><description>&lt;h2 class="relative group"&gt;What has happened so far
 &lt;div id="what-has-happened-so-far" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-has-happened-so-far" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the first part, the focus was deliberately on the user interface&amp;rsquo;s structural realignment. The previously grown, increasingly monolithic OverviewView was analysed and specifically streamlined by outsourcing key functional areas to independent UI components. With the introduction of the BulkActionsBar and the SearchBar, clearly defined building blocks were created, each assuming a specific responsibility and freeing the view from operational details.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Extracting Components - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-extracting-components-part-1/</link><pubDate>Sun, 21 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-extracting-components-part-1/</guid><description>&lt;p&gt;Today marks a crucial step in the evolution of the URL shortener&amp;rsquo;s user interface. After the focus in the past few days was mainly on functional enhancements – from filter and search functions to bulk operations – this day is dedicated to a structural fine-tuning: the refactoring of central UI components. This refactoring not only serves to clean up the code but also creates a clear, modular basis for future extensions as well as a significantly improved developer experience.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - De-/Activate Mappings - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-de-activate-mappings-part-2/</link><pubDate>Sat, 20 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-de-activate-mappings-part-2/</guid><description>&lt;h2 class="relative group"&gt;What has happened so far?
 &lt;div id="what-has-happened-so-far" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-has-happened-so-far" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the first part of this article, the new active/inactive model for shortlinks was introduced and anchored at the architectural level. Based on the technical rationale, it was shown that a pure expiration date is insufficient for modern use cases and that an explicit activity status is required.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - De-/Activate Mappings - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-de-activate-mappings-part-1/</link><pubDate>Fri, 19 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-de-activate-mappings-part-1/</guid><description>&lt;h2 class="relative group"&gt;Why an active/inactive model for shortlinks?
 &lt;div id="why-an-activeinactive-model-for-shortlinks" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#why-an-activeinactive-model-for-shortlinks" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;For many users – especially those who work in the field of software development – shortlinks are much more than simple URL shorteners. They act as flexible routing mechanisms for campaigns, feature controls, test scenarios, and internal tools. The requirements for transparency, controllability and clean lifecycle management are correspondingly high.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Basic Login Solution - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-basic-login-solution-part-2/</link><pubDate>Thu, 18 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-basic-login-solution-part-2/</guid><description>&lt;h2 class="relative group"&gt;What has happened so far?
 &lt;div id="what-has-happened-so-far" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-has-happened-so-far" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the first part of &amp;ldquo;Basic Login Solution&amp;rdquo;, the foundation for a deliberately simple yet structurally clean admin login was laid. The starting point was the realisation that even a technically lean URL shortener requires a clear separation between public-facing functions and administrative operations. The goal was not complete user management, but rather a minimal access barrier that integrates seamlessly with the existing Java and Vaadin architectures.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Basic Login Solution - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-basic-login-solution-part-1/</link><pubDate>Wed, 17 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-basic-login-solution-part-1/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The administration interface of a URL shortener is a sensitive area where short links can be changed, removed, or assigned expiration dates. Although the system is often operated on an internal server or in a private environment, protecting this management interface remains a fundamental security concern. Accidental access by unauthorised users can not only lead to incorrect forwarding or data loss, but also undermine trust in the overall system.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Mass Grid Operations - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-mass-grid-operations-part-2/</link><pubDate>Tue, 16 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-mass-grid-operations-part-2/</guid><description>&lt;h2 class="relative group"&gt;What has happened so far&amp;hellip;
 &lt;div id="what-has-happened-so-far" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-has-happened-so-far" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In the previous part, the URL shortener overview was significantly expanded. The starting point was the realisation that the last UI was heavily optimised for single operations and thus quickly reached its limits as soon as larger volumes of shortlinks needed to be managed. To resolve this bottleneck, the grid was consistently switched to multiple selection, creating the technical basis for actual mass operations.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Mass Grid Operations - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-mass-grid-operations-part-1/</link><pubDate>Mon, 15 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-mass-grid-operations-part-1/</guid><description>&lt;p&gt;The next stage of the Advent calendar focuses on further development, which becomes immediately noticeable once more shortlinks are used. The previous interaction patterns in the Overview view were geared toward individual operations and yielded only limited efficiency gains when processing many objects simultaneously. Today, this paradigm is being deliberately broken up and replaced by an interplay of new UI concepts that, for the first time, enable true multi-operation, context-sensitive work, and a much more stringent user interface.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - From UI Interactions to a Deterministic Refresh Architecture</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-from-ui-interactions-to-a-deterministic-refresh-architecture/</link><pubDate>Sun, 14 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-from-ui-interactions-to-a-deterministic-refresh-architecture/</guid><description>&lt;p&gt;After the first part explained the conceptual basics and the new interactions among global search, search scopes, and advanced filters, the second part focuses on the technical mechanisms that enable these interactions. It is only the revised refresh architecture – above all the interaction of &lt;code&gt;safeRefresh()&lt;/code&gt; and &lt;code&gt;RefreshGuard&lt;/code&gt; – that ensures that the OverviewView remains calm, deterministic and predictable despite numerous potential triggers.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - From Simple Search to Expert Mode: Advanced Filters and Synchronised Scopes for Power Users</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-from-simple-search-to-expert-mode-advanced-filters-and-synchronised-scopes-for-power-users/</link><pubDate>Sat, 13 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-from-simple-search-to-expert-mode-advanced-filters-and-synchronised-scopes-for-power-users/</guid><description>&lt;p&gt;Since its inception, the URL shortener&amp;rsquo;s continuous development has focused on two core goals: a robust technical foundation without external frameworks and a modern, productive user interface that is both intuitive and efficient for power users. As part of the current development stage, an essential UI module has been revised – the OverviewView, i.e. the view in which users search, filter and manage all saved shortenings.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Introduction of multiple aliases - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-introduction-of-multiple-aliases-part-2/</link><pubDate>Fri, 12 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-introduction-of-multiple-aliases-part-2/</guid><description>&lt;p&gt;Today&amp;rsquo;s update introduces another practical development step for the URL shortener. After the last few days were dedicated to UI refinement and the better structuring of detailed dialogues and form logic, the focus is now on an aspect that plays a significant role in the everyday life of many users: the flexible management of multiple aliases per target URL.&lt;/p&gt;</description></item><item><title>Advent Calendar 2025 - Introduction of multiple aliases - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-introduction-of-multiple-aliases-part-1/</link><pubDate>Thu, 11 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-introduction-of-multiple-aliases-part-1/</guid><description>&lt;h2 class="relative group"&gt;Introduction: More convenience for users
 &lt;div id="introduction-more-convenience-for-users" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction-more-convenience-for-users" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;With today&amp;rsquo;s development milestone for the URL Shortener project, a crucial improvement has been achieved, significantly enhancing the user experience. Up to this point, working with short URLs was functional, but in many ways it was still linear: each destination URL was assigned exactly one alias. This meant users had to create a new short URL for each context or campaign, even when the destination was identical. While this approach was simple, it wasn&amp;rsquo;t sufficiently flexible to meet real-world application requirements.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - From Grid to Detail: Understanding the User Experience in the Short-URL Manager</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-from-grid-to-detail-understanding-the-user-experience-in-the-short-url-manager/</link><pubDate>Wed, 10 Dec 2025 10:32:12 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-from-grid-to-detail-understanding-the-user-experience-in-the-short-url-manager/</guid><description>&lt;h2 class="relative group"&gt;The current UI from the user&amp;rsquo;s point of view
 &lt;div id="the-current-ui-from-the-users-point-of-view" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-current-ui-from-the-users-point-of-view" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;On the first call, the user lands in the overview. The site is built on a Vaadin grid, whose header contains a search bar, paging controls, and a small settings button with a gear icon. The most essential flow begins with the table displaying immediately understandable columns: the shortcode as a clearly typographically separated monospace value with copy action, the original URL as a clickable link, a creation time in local format, and an expiration badge that visually communicates semantic states such as &amp;ldquo;Expired&amp;rdquo;, &amp;ldquo;Today&amp;rdquo; or &amp;ldquo;in n days&amp;rdquo; via theme colours. The whole thing is designed for quick viewing and efficient one-handed operation: a click on a data record opens the detailed dialogue if required; a right-click or the context menu offers direct quick actions; and the gear button can be used to show or hide visible columns live.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - ColumnVisibilityDialog - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-columnvisibilitydialog-part-2/</link><pubDate>Tue, 09 Dec 2025 09:55:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-columnvisibilitydialog-part-2/</guid><description>&lt;h2 class="relative group"&gt;Server-Side Extension: PreferencesHandler and REST Interfaces
 &lt;div id="server-side-extension-preferenceshandler-and-rest-interfaces" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#server-side-extension-preferenceshandler-and-rest-interfaces" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The server-side extension for dynamic column visibility follows the same design logic as the UI: simplicity, clear accountability, and a precise data flow. While the OverviewView and the ColumnVisibilityDialog form the interface for the interaction, several specialized REST handlers handle the processing and persistence of the user settings. Their job is to process incoming JSON requests, validate them, translate them into domain operations, and return or store the current state.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - ColumnVisibilityDialog - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-columnvisibilitydialog-part-1/</link><pubDate>Mon, 08 Dec 2025 22:42:05 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-columnvisibilitydialog-part-1/</guid><description>&lt;h2 class="relative group"&gt;From observer to designer: User control at a glance
 &lt;div id="from-observer-to-designer-user-control-at-a-glance" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#from-observer-to-designer-user-control-at-a-glance" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;With the fourth day of the Advent calendar, the perspective on the application changes fundamentally. While in the previous expansion stages users reacted primarily to prepared structures, an element of active design is now being added. The &amp;ldquo;Overview&amp;rdquo; has so far been a central mirror of the system state: It showed all saved short links, allowed them to be filtered and provided an in-depth insight into individual objects with the detailed dialog. But the structure and visibility of the columns were immutable up to this point. The user always saw the selection that the developer had defined as meaningful. With the introduction of dynamic column visibility, this state is removed.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Detail Dialog - Part 2</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-detail-dialog-part-2/</link><pubDate>Sun, 07 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-detail-dialog-part-2/</guid><description>&lt;h2 class="relative group"&gt;Client contract from a UI perspective
 &lt;div id="client-contract-from-a-ui-perspective" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#client-contract-from-a-ui-perspective" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In this project, the user interface not only serves as a graphical layer on top of the backend, but is also &lt;strong&gt;part of the overall contract&lt;/strong&gt; between the user, the client, and the server. This part focuses on the data flow from the UI&amp;rsquo;s perspective: how inputs are translated into structured requests, how the client forwards them, and what feedback the user interface processes.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Detail Dialog - Part 1</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-detail-dialog-part-1/</link><pubDate>Sat, 06 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-detail-dialog-part-1/</guid><description>&lt;h2 class="relative group"&gt;Classification and objectives from a UI perspective
 &lt;div id="classification-and-objectives-from-a-ui-perspective" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#classification-and-objectives-from-a-ui-perspective" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Today&amp;rsquo;s Advent Calendar Day focuses specifically on the interaction level prepared in the previous parts. While the basic structure of the user interface and the layout were defined at the beginning, and the interactive table view with sorting, filtering and dynamic actions was subsequently established, it is now a matter of making the transition from overview to detailed observation consistent. The user should no longer only see a tabular collection of data points, but should receive a view tailored to the respective object that enables contextual actions.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Persistence – Part 02</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-persistence-part-02/</link><pubDate>Fri, 05 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-persistence-part-02/</guid><description>&lt;p&gt;Today, we will finally integrate the StoreIndicator into the UI.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#vaadin-integration-live-status-of-the-store" target="_blank" rel="noreferrer"&gt;Vaadin integration: live status of the store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#implementation-of-the-storeindicator" target="_blank" rel="noreferrer"&gt;Implementation of the StoreIndicator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#refactoring-inside-the-mappingcreator-as-a-central-logic" target="_blank" rel="noreferrer"&gt;Refactoring inside – The MappingCreator as a central logic.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#eclipsestore-the-persistent-foundation" target="_blank" rel="noreferrer"&gt;EclipseStore – The Persistent Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#additional-improvements-in-the-core" target="_blank" rel="noreferrer"&gt;Additional improvements in the core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svenruppert.com/2025/12/05/advent-calendar-2025-persistence-part-02/#before-after-impact-on-the-developer-experience" target="_blank" rel="noreferrer"&gt;Before &amp;amp; After – Impact on the developer experience&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The source code for this version can be found on GitHub at&lt;/strong&gt;&lt;a href="https://github.com/svenruppert/url-shortener/tree/feature/advent-2025-day-02" target="_blank" rel="noreferrer"&gt;https://github.com/svenruppert/url-shortener/tree/feature/advent-2025-day-02&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Persistence – Part 01</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-persistence-part-01/</link><pubDate>Thu, 04 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-persistence-part-01/</guid><description>&lt;p&gt;**Visible change: When the UI shows the memory state&lt;/p&gt;
&lt;p&gt;With the end of the last day of the Advent calendar, our URL shortener was fully functional: the admin interface could filter, sort, and display data page by page – performant, cleanly typed, and fully implemented in Core Java. But behind this surface lurked an invisible problem: &lt;strong&gt;All data existed only in memory.&lt;/strong&gt; As soon as the server was restarted, the entire database was lost.&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Filter &amp;amp; Search – Part 02</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-filter-search-part-02/</link><pubDate>Wed, 03 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-filter-search-part-02/</guid><description>&lt;p&gt;In the previous part, we looked at the implementation on the server side. This part is now about the illustration on the user page.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The source code for the initial state can be found on GitHub under &lt;a href="https://github.com/svenruppert/url-shortener/tree/feature/advent-2025-day-00" target="_blank" rel="noreferrer"&gt;https://github.com/svenruppert/url-shortener/tree/feature/advent-2025-day-00&lt;/a&gt; .&lt;/p&gt;</description></item><item><title>Advent Calendar - 2025 - Filter &amp;amp; Search – Part 01</title><link>https://sven-ruppert.info/posts/advent-calendar-2025-filter-search-part-01/</link><pubDate>Tue, 02 Dec 2025 07:05:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/advent-calendar-2025-filter-search-part-01/</guid><description>&lt;p&gt;With the Vaadin interface described in &lt;a href="https://svenruppert.com/2025/08/15/part-iii-webui-with-vaadin-flow-for-the-url-shortener/" target="_blank" rel="noreferrer"&gt;[Part III]&lt;/a&gt;, our URL shortener has a fully functional administration console available for the first time. It allows viewing existing short links in tabular form and managing them manually. But after just a few dozen entries, a clear limit becomes apparent: displaying all saved mappings is neither performant nor user-friendly. An efficient shortener must be able to scale – not only when generating, but also when searching through its data.&lt;/p&gt;</description></item><item><title>Real-Time in Focus: Server-Sent Events in Core Java without Frameworks</title><link>https://sven-ruppert.info/posts/real-time-in-focus-server-sent-events-in-core-java-without-frameworks/</link><pubDate>Fri, 05 Sep 2025 08:18:47 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/real-time-in-focus-server-sent-events-in-core-java-without-frameworks/</guid><description>&lt;h2 class="relative group"&gt;Chapter 1 – Introduction
 &lt;div id="chapter-1--introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#chapter-1--introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;1.1 Motivation: Real-time communication without polling
 &lt;div id="11-motivation-real-time-communication-without-polling" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#11-motivation-real-time-communication-without-polling" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;In modern applications, it is often necessary to provide new information to the client as quickly as possible. Classic &lt;strong&gt;polling&lt;/strong&gt; , i.e. regularly querying a REST endpoint, is inefficient: it generates unnecessary network traffic and puts a load on both server and client, as requests continue even when there is no new data.&lt;/p&gt;</description></item></channel></rss>