<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java on Sven Ruppert</title><link>https://sven-ruppert.info/tags/java/</link><description>Recent content in Java 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/tags/java/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>Introduction to the URL‑Shortener Advent Calendar 2025</title><link>https://sven-ruppert.info/posts/introduction-to-the-url%e2%80%91shortener-advent-calendar-2025/</link><pubDate>Mon, 01 Dec 2025 10:22:35 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/introduction-to-the-url%e2%80%91shortener-advent-calendar-2025/</guid><description>&lt;p&gt;December 2025 is all about a project that has grown steadily in recent months: &lt;strong&gt;the Java-based URL Shortener, an open-source project implemented entirely with Core Java, Jetty, and Vaadin Flow&lt;/strong&gt;. The Advent calendar accompanies users every day with a new feature, a technical deep dive, or an architectural improvement – from the basic data structure and REST handlers to UI components and security aspects.&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><item><title>Core Java - Flow.Processor</title><link>https://sven-ruppert.info/posts/core-java-flow-processor/</link><pubDate>Thu, 04 Sep 2025 11:27:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/core-java-flow-processor/</guid><description>&lt;p&gt;Reactive streams address a fundamental problem of modern systems: &lt;strong&gt;Producers&lt;/strong&gt; (sensors, services, user events) deliver data at &lt;em&gt;an unpredictable rate&lt;/em&gt; , while &lt;strong&gt;consumers&lt;/strong&gt; (persistence, UI, analytics) can only process data at a limited speed. Without a &lt;em&gt;flow control model&lt;/em&gt; , backlogs, storage pressure, and ultimately outages occur.&lt;/p&gt;</description></item><item><title>How and why to use the classic Observer pattern in Vaadin Flow</title><link>https://sven-ruppert.info/posts/how-and-why-to-use-the-classic-observer-pattern-in-vaadin-flow/</link><pubDate>Mon, 01 Sep 2025 11:32:18 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/how-and-why-to-use-the-classic-observer-pattern-in-vaadin-flow/</guid><description>&lt;h2 class="relative group"&gt;1. Introduction and motivation
 &lt;div id="1-introduction-and-motivation" 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="#1-introduction-and-motivation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The observer pattern is one of the basic design patterns of software development and is traditionally used to decouple state changes and process them. Its origins lie in the development of graphical user interfaces, where a shift in the data model required synchronising several views immediately, without a direct link between these views. This pattern quickly established itself as the standard solution to promote loosely coupled architectures.&lt;/p&gt;</description></item><item><title>Password Security: Why Hashing is Essential</title><link>https://sven-ruppert.info/posts/password-security-why-hashing-is-essential/</link><pubDate>Fri, 29 Aug 2025 14:53:27 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/password-security-why-hashing-is-essential/</guid><description>&lt;p&gt;Password security is an often underestimated but critical topic in software development. Databases containing millions of user logins are repeatedly compromised - and shockingly, often, it turns out that passwords have been stored in plain text. This gives attackers direct access to sensitive account data and opens the door to identity theft, account takeovers and other attacks.&lt;/p&gt;</description></item><item><title>What makes Vaadin components special?</title><link>https://sven-ruppert.info/posts/what-makes-vaadin-components-special/</link><pubDate>Tue, 19 Aug 2025 13:09:52 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-makes-vaadin-components-special/</guid><description>&lt;p&gt;From my experience, Vaadin has always stood out from other Java frameworks. Of course, it enables the creation of modern web UIs, but the real difference lies in its &lt;strong&gt;component architecture&lt;/strong&gt;. This is not conceived as a short-term aid, but is consistently designed for maintainability and flexibility. It creates the possibility of running applications stably for many years while still being able to extend them step by step.&lt;/p&gt;</description></item><item><title>Part III - WebUI with Vaadin Flow for the URL Shortener</title><link>https://sven-ruppert.info/posts/part-iii-webui-with-vaadin-flow-for-the-url-shortener/</link><pubDate>Fri, 15 Aug 2025 10:46:10 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/part-iii-webui-with-vaadin-flow-for-the-url-shortener/</guid><description>&lt;h3 class="relative group"&gt;1. Introduction and objectives
 &lt;div id="1-introduction-and-objectives" 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="#1-introduction-and-objectives" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The first two parts of this series established the theoretical and practical foundations of a URL shortener in pure Java. We discussed the semantic classification of short URLs, the architecture of a robust mapping system, and the implementation of a REST-based service based on the JDK HTTP server. These efforts resulted in a functional, modularly extensible backend that creates, manages, and efficiently resolves short links. However, a crucial component was missing-a visual interface for direct user interaction with the system. This interface is essential for tasks such as manual link creation, viewing existing mappings, and analysing individual redirects.&lt;/p&gt;</description></item><item><title>Connecting REST Services with Vaadin Flow in Core Java</title><link>https://sven-ruppert.info/posts/connecting-rest-services-with-vaadin-flow-in-core-java/</link><pubDate>Tue, 24 Jun 2025 09:39:25 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/connecting-rest-services-with-vaadin-flow-in-core-java/</guid><description>&lt;h2 class="relative group"&gt;1. Introduction
 &lt;div id="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="#1-introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Why REST integration in Vaadin applications should not be an afterthought
 &lt;div id="why-rest-integration-in-vaadin-applications-should-not-be-an-afterthought" 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-rest-integration-in-vaadin-applications-should-not-be-an-afterthought" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;In modern web applications, communication with external services is no longer a special function, but an integral part of a service-oriented architecture. Even if Vaadin Flow, as a UI framework, relies on server-side Java logic to achieve a high degree of coherence between view and data models, the need to communicate with systems outside the application quickly arises. These can be simple public APIs—for example, for displaying weather data or currency conversions—as well as internal company services, such as license verification, user management, or connecting to a central ERP system.&lt;/p&gt;</description></item><item><title>Part II - UrlShortener - first Implementation</title><link>https://sven-ruppert.info/posts/part-ii-urlshortener-first-implementation/</link><pubDate>Fri, 20 Jun 2025 12:36:28 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/part-ii-urlshortener-first-implementation/</guid><description>&lt;h2 class="relative group"&gt;1. Introduction to implementation
 &lt;div id="1-introduction-to-implementation" 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="#1-introduction-to-implementation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;1.1 Objectives and differentiation from the architectural part
 &lt;div id="11-objectives-and-differentiation-from-the-architectural-part" 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-objectives-and-differentiation-from-the-architectural-part" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The first part of this series focused on theory: We explained why a URL shortener is not just a convenience tool, but a security-relevant element of digital infrastructure. We discussed models for collision detection, entropy distribution, and forwarding logic, as well as analysed architectural variants – from stateless redirect services to domain-specific validation mechanisms.&lt;/p&gt;</description></item><item><title>Short links, clear architecture – A URL shortener in Core Java</title><link>https://sven-ruppert.info/posts/short-links-clear-architecture-a-url-shortener-in-core-java/</link><pubDate>Tue, 10 Jun 2025 22:43:22 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/short-links-clear-architecture-a-url-shortener-in-core-java/</guid><description>&lt;p&gt;A URL shortener seems harmless – but if implemented incorrectly, it opens the door to phishing, enumeration, and data leakage. In this first part, I&amp;rsquo;ll explore the theoretical and security-relevant fundamentals of a URL shortener in Java – without any frameworks, but with a focus on entropy, collision tolerance, rate limiting, validity logic, and digital responsibility. The second part covers the complete implementation: modular, transparent, and as secure as possible.&lt;/p&gt;</description></item><item><title>If hashCode() lies and equals() is helpless</title><link>https://sven-ruppert.info/posts/if-hashcode-lies-and-equals-is-helpless/</link><pubDate>Fri, 06 Jun 2025 20:53:34 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/if-hashcode-lies-and-equals-is-helpless/</guid><description>&lt;p&gt;A deep look into Java’s HashMap traps – visually demonstrated with Vaadin Flow.&lt;/p&gt;

&lt;h3 class="relative group"&gt;The silent danger in the standard library
 &lt;div id="the-silent-danger-in-the-standard-library" 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-silent-danger-in-the-standard-library" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The use of &lt;strong&gt;HashMap&lt;/strong&gt; and &lt;strong&gt;HashSet&lt;/strong&gt; is a common practice in everyday Java development. These data structures offer excellent performance for lookup and insert operations, as long as their fundamental assumptions are met. One of them is &lt;strong&gt;hashCode()&lt;/strong&gt; of a key remains stable. But what if that&amp;rsquo;s not the case?&lt;/p&gt;</description></item><item><title>Creating a simple file upload/download application with Vaadin Flow</title><link>https://sven-ruppert.info/posts/creating-a-simple-file-upload-download-application-with-vaadin-flow/</link><pubDate>Tue, 20 May 2025 17:34:15 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/creating-a-simple-file-upload-download-application-with-vaadin-flow/</guid><description>&lt;p&gt;Vaadin Flow is a robust framework for building modern web applications in Java, where all UI logic is implemented on the server side. In this blog post, we&amp;rsquo;ll make a simple file management application step by step that allows users to upload files, save them to the server, and download them again when needed. This is a great way to demonstrate how to build protection against CWE-22, CWE-377, and CWE-778 step by step.&lt;/p&gt;</description></item><item><title>Open-hearted bytecode: Java Instrumentation API</title><link>https://sven-ruppert.info/posts/open-hearted-bytecode-java-instrumentation-api/</link><pubDate>Fri, 11 Apr 2025 17:06:44 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/open-hearted-bytecode-java-instrumentation-api/</guid><description>&lt;h2 class="relative group"&gt;What is the Java Instrumentation API?
 &lt;div id="what-is-the-java-instrumentation-api" 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-is-the-java-instrumentation-api" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The Java Instrumentation API is part of the java.lang.instrument package and allows you to change or analyse class bytecode at runtime. It is particularly intended for the development of profilers, agents, monitoring tools, or even dynamic security mechanisms that need to intervene deeply in a Java application&amp;rsquo;s behaviour without changing the source code itself.&lt;/p&gt;</description></item><item><title>Synchronous in Chaos: How Parallel Collectors Bring Order to Java Streams</title><link>https://sven-ruppert.info/posts/synchronous-in-chaos-how-parallel-collectors-bring-order-to-java-streams/</link><pubDate>Tue, 08 Apr 2025 20:25:45 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/synchronous-in-chaos-how-parallel-collectors-bring-order-to-java-streams/</guid><description>&lt;p&gt;Sometimes it&amp;rsquo;s not enough for something to work - it has to work under load. In modern applications that process large amounts of data, the Streams API in Java provides developers with an elegant, declarative tool to transform, filter, and aggregate data in pipelines. ​​Describing complex data operations with just a few lines is seductive and realistic. But what happens when these operations encounter millions of entries? When should execution be done in multiple threads in parallel to save time and effectively use multi-core systems?&lt;/p&gt;</description></item><item><title>Java Cryptography Architecture (JCA) - An Overview</title><link>https://sven-ruppert.info/posts/java-cryptography-architecture-jca-an-overview/</link><pubDate>Thu, 03 Apr 2025 12:22:30 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/java-cryptography-architecture-jca-an-overview/</guid><description>&lt;p&gt;The &lt;strong&gt;Java Cryptography Architecture (JCA)&lt;/strong&gt; is an essential framework within the Java platform that provides developers with a flexible and extensible interface for cryptographic operations. It is a central component of the Java Security API and enables platform-independent implementation of security-critical functions.&lt;/p&gt;</description></item><item><title>Rethinking Java Streams: Gatherer for more control and parallelism</title><link>https://sven-ruppert.info/posts/rethinking-java-streams-gatherer-for-more-control-and-parallelism/</link><pubDate>Wed, 02 Apr 2025 20:58:21 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/rethinking-java-streams-gatherer-for-more-control-and-parallelism/</guid><description>&lt;p&gt;Since version 8, Java has introduced an elegant, functional approach to processing data sets with the Streams API. The terminal operation collect(&amp;hellip;) represents the bridge from the stream to a targeted aggregation - in the form of lists, maps, strings or more complex data structures. Until Java 20 the processing was done Collector-Instances were regulated, which internally consisted of a supplier, an accumulator, a combiner and optionally a finisher. This model works well for simple accumulations but has noticeable limitations, particularly for complex, stateful, or conditional aggregations.&lt;/p&gt;</description></item><item><title>From Java 8 to 24: The evolution of the Streams API</title><link>https://sven-ruppert.info/posts/from-java-8-to-24-the-evolution-of-the-streams-api/</link><pubDate>Sat, 29 Mar 2025 13:08:23 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/from-java-8-to-24-the-evolution-of-the-streams-api/</guid><description>&lt;p&gt;The introduction of the Stream API in Java marked a crucial step in the development of functional programming paradigms within the language. With Java 24, stream processing has been further consolidated and is now a central tool for declarative data processing &lt;em&gt;Stream&lt;/em&gt; not about an alternative form of Collection, but rather an abstract concept that describes a potentially infinite sequence of data that is transformed and consumed through a pipeline of operations. While a Collection is a data structure that stores data, Stream is a carrier of a computing model: It does not store any data but instead allows the description of data flows.&lt;/p&gt;</description></item><item><title>TornadoVM - Boosting the Concurrency</title><link>https://sven-ruppert.info/posts/tornadovm-boosting-the-concurrency/</link><pubDate>Sat, 23 Nov 2024 19:40:08 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/tornadovm-boosting-the-concurrency/</guid><description>&lt;p&gt;TornadoVM is an open-source framework that extends the Java Virtual Machine (JVM) to support hardware accelerators such as Graphics Processing Units (GPUs), Field-Programmable Gate Arrays (FPGAs), and multi-core central processing units (CPUs). This allows developers to accelerate their Java programs on heterogeneous hardware without needing to rewrite their code in low-level languages such as CUDA or OpenCL.&lt;/p&gt;</description></item><item><title>Cache Poisoning Attacks on Dependency Management Systems like Maven</title><link>https://sven-ruppert.info/posts/cache-poisoning-attacks-on-dependency-management-systems-like-maven/</link><pubDate>Wed, 13 Nov 2024 14:15:16 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cache-poisoning-attacks-on-dependency-management-systems-like-maven/</guid><description>&lt;p&gt;Cache poisoning on Maven Caches is a specific attack that targets how Maven Caches manages packages and dependencies in a software development process. It&amp;rsquo;s essential to understand how Maven works before we look at the details of cache poisoning.&lt;/p&gt;</description></item><item><title>JUnit annotations in focus: The connection between @Test and @Testable</title><link>https://sven-ruppert.info/posts/junit-annotations-in-focus-the-connection-between-test-and-testable/</link><pubDate>Fri, 08 Nov 2024 09:12:39 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/junit-annotations-in-focus-the-connection-between-test-and-testable/</guid><description>&lt;p&gt;The annotations @Test and @Testable have played an important role in the Java ecosystem regarding application testing. They are essential tools that help developers make unit and automated testing more effective. In this paper, we will explore the differences and connections between @Test and @Testable analyze and the motivation behind the introduction of @Testable understand. We will also play the role of @Testable in developing your test engines and discuss their importance for the flexibility and expandability of tests.&lt;/p&gt;</description></item><item><title>The Risks of Mocking Frameworks: How Too Much Mocking Leads to Unrealistic Tests</title><link>https://sven-ruppert.info/posts/the-risks-of-mocking-frameworks-how-too-much-mocking-leads-to-unrealistic-tests/</link><pubDate>Tue, 05 Nov 2024 17:49:33 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-risks-of-mocking-frameworks-how-too-much-mocking-leads-to-unrealistic-tests/</guid><description>&lt;p&gt;Extensive use of mocking frameworks such as Mockito in software development can lead to unrealistic tests. This is because mocking frameworks simulate dependencies of classes or methods in order to test them in isolation. However, when too many mock objects are used, the test often loses touch with reality, which can affect the validity and reliability of the tests. It is important to use mocking carefully to find the right balance between isolated testing and realistic simulation.&lt;/p&gt;</description></item><item><title>What is CWE-1007: Insufficient visual discrimination of homoglyphs for you as a user?</title><link>https://sven-ruppert.info/posts/what-is-cwe-1007-insufficient-visual-discrimination-of-homoglyphs-for-you-as-a-user/</link><pubDate>Mon, 04 Nov 2024 12:34:27 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-is-cwe-1007-insufficient-visual-discrimination-of-homoglyphs-for-you-as-a-user/</guid><description>&lt;p&gt;The world of cybersecurity is full of threats, many of which are surprisingly subtle and challenging to detect. One such threat is the problem of so-called homoglyphs. CWE-1007, also known as &amp;ldquo;Insufficient Visual Distinction of Homoglyphs Presented to User&amp;rdquo;, is a vulnerability often used by attackers to deceive and compromise your systems or data. In this blog article, you will get a deep insight into CWE-1007, understand its mechanisms, and how to protect yourself from such attacks. We will discuss examples, technical challenges, and best practices that can help you as a developer understand and mitigate this threat.&lt;/p&gt;</description></item><item><title>The History of Parallel Processing in Java: From Threads to Virtual Threads</title><link>https://sven-ruppert.info/posts/the-history-of-parallel-processing-in-java-from-threads-to-virtual-threads/</link><pubDate>Fri, 01 Nov 2024 22:02:37 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-history-of-parallel-processing-in-java-from-threads-to-virtual-threads/</guid><description>&lt;p&gt;Since the early days of computer science, parallel processing has represented one of the greatest challenges and opportunities. Since its inception in 1995, Java has undergone a significant journey in the world of parallel programming to provide developers with ever-better tools. This story is a fascinating journey through threads, the executor framework, fork/join, parallel streams, CompletableFuture and the latest developments in Project Loom. In this blog post, we take a detailed look at the evolution of parallel processing in Java and the innovations that came with it.&lt;/p&gt;</description></item><item><title>CWE-778: Lack of control over error reporting in Java</title><link>https://sven-ruppert.info/posts/cwe-778-lack-of-control-over-error-reporting-in-java/</link><pubDate>Fri, 18 Oct 2024 14:07:20 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cwe-778-lack-of-control-over-error-reporting-in-java/</guid><description>&lt;h2 class="relative group"&gt;Learn how inadequate control over error reporting leads to security vulnerabilities and how to prevent them in Java applications.
 &lt;div id="learn-how-inadequate-control-over-error-reporting-leads-to-security-vulnerabilities-and-how-to-prevent-them-in-java-applications" 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="#learn-how-inadequate-control-over-error-reporting-leads-to-security-vulnerabilities-and-how-to-prevent-them-in-java-applications" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Safely handling error reports is a central aspect of software development, especially in safety-critical applications. CWE-778 describes a vulnerability caused by inadequate control over error reports. This post will analyse the risks associated with CWE-778 and show how developers can implement safe error-handling practices to avoid such vulnerabilities in Java programs.&lt;/p&gt;</description></item><item><title>Code security through unit testing: The role of secure coding practices in the development cycle</title><link>https://sven-ruppert.info/posts/code-security-through-unit-testing-the-role-of-secure-coding-practices-in-the-development-cycle/</link><pubDate>Wed, 16 Oct 2024 22:17:04 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/code-security-through-unit-testing-the-role-of-secure-coding-practices-in-the-development-cycle/</guid><description>&lt;p&gt;Unit testing is an essential software development concept that improves code quality by ensuring that individual units or components of a software function correctly. Unit testing is crucial in Java, one of the most commonly used programming languages. This article will discuss what unit testing is, how it has evolved, and what tools and best practices have been established over the years.&lt;/p&gt;</description></item><item><title>BLD - a lightweight Java Build Tool</title><link>https://sven-ruppert.info/posts/bld-a-lightweight-java-build-tool/</link><pubDate>Thu, 26 Sep 2024 17:31:17 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/bld-a-lightweight-java-build-tool/</guid><description>&lt;h2 class="relative group"&gt;What is a dependency management tool?
 &lt;div id="what-is-a-dependency-management-tool" 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-is-a-dependency-management-tool" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;dependency management tool&lt;/strong&gt; is a software system or utility that automates the process of identifying, retrieving, updating, and maintaining the external libraries or packages (referred to as &lt;strong&gt;dependencies&lt;/strong&gt;) required by a software project. It ensures that all necessary dependencies are included and managed in a standardised way, which helps prevent version conflicts, missing libraries, and manual errors during software development.&lt;/p&gt;</description></item><item><title>What are component-based web application frameworks for Java Developers?</title><link>https://sven-ruppert.info/posts/what-are-component-based-web-application-frameworks-for-java-developers/</link><pubDate>Wed, 25 Sep 2024 17:04:18 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-are-component-based-web-application-frameworks-for-java-developers/</guid><description>&lt;h1 class="relative group"&gt;Tapestry, Wicket, and Vaadin
 &lt;div id="tapestry-wicket-and-vaadin" 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="#tapestry-wicket-and-vaadin" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;A component-oriented Java web application framework is a development framework that enables the construction of web applications in a modular way, using reusable, encapsulated components that manage their state, behaviour, and presentation. This approach allows developers to build complex user interfaces by assembling pre-built or custom components, like building blocks, each handling specific functionalities within the application.&lt;/p&gt;</description></item><item><title>CWE-1123: Excessive Use of Self-Modifying Code for Java Developers</title><link>https://sven-ruppert.info/posts/cwe-1123-excessive-use-of-self-modifying-code-for-java-developers/</link><pubDate>Thu, 12 Sep 2024 11:19:19 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cwe-1123-excessive-use-of-self-modifying-code-for-java-developers/</guid><description>&lt;p&gt;Self-modifying code refers to a type of code that alters its own instructions while it is executing. While this practice can offer certain advantages, such as optimisation and adaptability, it is generally discouraged due to the significant risks and challenges it introduces. For Java developers, using self-modifying code is particularly problematic because it undermines the codebase&amp;rsquo;s predictability, readability, and maintainability, and Java as a language does not natively support self-modification of its code.&lt;/p&gt;</description></item><item><title>IoT with TinkerForge and Java</title><link>https://sven-ruppert.info/posts/iot-with-tinkerforge-and-java/</link><pubDate>Wed, 04 Sep 2024 12:37:30 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/iot-with-tinkerforge-and-java/</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;TinkerForge is an innovative and modular hardware system that allows users to build electronic devices quickly and flexibly. Whether you&amp;rsquo;re an experienced engineer, a hobbyist, or a complete newbie, TinkerForge offers a range of components that can be easily connected and programmed, allowing for rapid prototyping and the creation of custom electronics projects. Since its launch, TinkerForge has gained popularity in various areas, including education, research, and industrial automation, due to its user-friendly design and extensive feature set.&lt;/p&gt;</description></item><item><title>Building More Complex Apps with Flow</title><link>https://sven-ruppert.info/posts/building-more-complex-apps-with-flow/</link><pubDate>Thu, 22 Aug 2024 12:20:26 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/building-more-complex-apps-with-flow/</guid><description>&lt;p&gt;In this part of the series about Vaadin Flow, I will show how I can create the basic framework for the graphic design of a work application. The focus here is on the design of the work area and the organisation of the individual logical application groups. In other words, we create the application layout that can be used for an industrial project.&lt;/p&gt;</description></item><item><title>Vaadin Flow - How to start</title><link>https://sven-ruppert.info/posts/vaadin-flow-how-to-start/</link><pubDate>Wed, 19 Jun 2024 15:34:50 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/vaadin-flow-how-to-start/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/2024/06/image.png"
 width="1024"
 height="332"&gt;&lt;/figure&gt;
&lt;p&gt;We will now create a new Vaadin Flow application step by step and create a basic framework for our own projects with this component-based open-source web framework. So, right from the start, the question arises: How can you start with as little effort as possible without avoiding the usual expenses that sometimes come with creating projects?&lt;/p&gt;</description></item><item><title>Comparing Code Coverage Techniques: Line, Property-Based, and Mutation Testing</title><link>https://sven-ruppert.info/posts/comparing-code-coverage-techniques-line-property-based-and-mutation-testing/</link><pubDate>Fri, 31 May 2024 09:20:30 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/comparing-code-coverage-techniques-line-property-based-and-mutation-testing/</guid><description>&lt;h2 class="relative group"&gt;What is Test Coverage?
 &lt;div id="what-is-test-coverage" 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-is-test-coverage" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Test coverage is a metric used in software testing to measure the testing performed on a piece of software. It indicates how thoroughly a software program has been tested by identifying which parts of the code have been executed (covered) during testing and which have not. Here are the key aspects of test coverage:&lt;/p&gt;</description></item><item><title>Securing Apache Maven: Understanding Cache-Related Risks</title><link>https://sven-ruppert.info/posts/securing-apache-maven-understanding-cache-related-risks/</link><pubDate>Mon, 27 May 2024 14:30:22 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/securing-apache-maven-understanding-cache-related-risks/</guid><description>&lt;h2 class="relative group"&gt;What is a Package Manager - Bird-Eye View
 &lt;div id="what-is-a-package-manager---bird-eye-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="#what-is-a-package-manager---bird-eye-view" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;A package manager is a tool or system in software development designed to simplify the process of installing, updating, configuring, and removing software packages on a computer system. It automates managing dependencies and resolving conflicts between different software components, making it easier for developers to work with various libraries, frameworks, and tools within their projects.&lt;/p&gt;</description></item><item><title>CWE-22: Best practices to use Java NIO</title><link>https://sven-ruppert.info/posts/cwe-22-best-practices-to-use-java-nio/</link><pubDate>Wed, 22 May 2024 10:30:27 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cwe-22-best-practices-to-use-java-nio/</guid><description>&lt;p&gt;In today&amp;rsquo;s digital landscape, ensuring the security of your applications is paramount. One critical vulnerability developers must guard against is CWE-22, Path Traversal. This vulnerability can allow attackers to access files and directories outside the intended scope, potentially leading to unauthorised access and data breaches.&lt;/p&gt;</description></item><item><title>CWE-22: Improper Limitation of a Pathname to a Restricted Directory</title><link>https://sven-ruppert.info/posts/cwe-22-improper-limitation-of-a-pathname-to-a-restricted-directory/</link><pubDate>Tue, 21 May 2024 14:33:53 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cwe-22-improper-limitation-of-a-pathname-to-a-restricted-directory/</guid><description>&lt;p&gt;CWE-22, commonly called &amp;ldquo;Path Traversal,&amp;rdquo; is a vulnerability when an application fails to appropriately limit the paths users can access through a user-provided input. This can allow attackers to access directories and files outside the intended directory, leading to unauthorised access and potential system compromise. This vulnerability is particularly significant in Java applications due to the ubiquitous use of file handling and web resources. This document will delve into the nature of CWE-22, its implications, exploitation methods, and, most importantly, strategies to mitigate such vulnerabilities in Java applications.&lt;/p&gt;</description></item><item><title>CWE-416: Use After Free Vulnerabilities in Java</title><link>https://sven-ruppert.info/posts/cwe-416-use-after-free-vulnerabilities-in-java/</link><pubDate>Fri, 17 May 2024 12:17:30 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cwe-416-use-after-free-vulnerabilities-in-java/</guid><description>&lt;h2 class="relative group"&gt;CWE-416: Use After Free
 &lt;div id="cwe-416-use-after-free" 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="#cwe-416-use-after-free" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Use After Free (UAF) is a vulnerability that occurs when a program continues to use a pointer after it has been freed. This can lead to undefined behaviour, including crashes, data corruption, and security vulnerabilities. The problem arises because the memory referenced by the pointer may be reallocated for other purposes, potentially allowing attackers to exploit the situation.&lt;/p&gt;</description></item><item><title>CWE-787 - The Bird-Eye View for Java Developers</title><link>https://sven-ruppert.info/posts/cwe-787-the-bird-eye-view-for-java-developers/</link><pubDate>Wed, 15 May 2024 12:19:10 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cwe-787-the-bird-eye-view-for-java-developers/</guid><description>&lt;p&gt;The term &amp;ldquo;&lt;strong&gt;CWE-787: Out-of-bounds Write&lt;/strong&gt; &amp;quot; likely refers to a specific security vulnerability or error in software systems. Let&amp;rsquo;s break down what it means:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Out-of-bounds Write&lt;/strong&gt; : This is a type of vulnerability where a program writes data outside the boundaries of pre-allocated fixed-length buffers. This can corrupt data, crash the program, or lead to the execution of malicious code.&lt;/p&gt;</description></item><item><title>Mastering Secure Error Handling in Java: Best Practices and Strategies</title><link>https://sven-ruppert.info/posts/mastering-secure-error-handling-in-java-best-practices-and-strategies/</link><pubDate>Tue, 07 May 2024 12:43:21 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/mastering-secure-error-handling-in-java-best-practices-and-strategies/</guid><description>&lt;h2 class="relative group"&gt;What is ErrorHandling?
 &lt;div id="what-is-errorhandling" 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-is-errorhandling" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Error handling refers to the programming practice of anticipating, detecting, and responding to exceptions or errors in software during its execution. Errors may occur for various reasons, such as invalid user inputs, hardware failures, or bugs in the code. Proper error handling helps ensure that the program can handle such situations gracefully by resolving the Error, compensating for it, or failing safely.&lt;/p&gt;</description></item><item><title>Decoding the Logs: Essential Insights for Effective Software Debugging</title><link>https://sven-ruppert.info/posts/decoding-the-logs-essential-insights-for-effective-software-debugging/</link><pubDate>Mon, 06 May 2024 21:12:46 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/decoding-the-logs-essential-insights-for-effective-software-debugging/</guid><description>&lt;p&gt;Logging is essential to software development, recording information about the software&amp;rsquo;s operation. This can help developers understand the system&amp;rsquo;s behaviour, troubleshoot issues, and monitor the system in production. Here&amp;rsquo;s a basic overview of logging in software development:&lt;/p&gt;</description></item><item><title>Secure Coding Practices - Access Control</title><link>https://sven-ruppert.info/posts/secure-coding-practices-access-control/</link><pubDate>Fri, 03 May 2024 10:41:23 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/secure-coding-practices-access-control/</guid><description>&lt;p&gt;Access control is a security measure that determines who can access resources or perform actions within a system. It involves defining and enforcing policies restricting unauthorised access while allowing authorised users to perform their intended tasks. Access control mechanisms are commonly used in various domains, including computer systems, buildings, and physical assets.&lt;/p&gt;</description></item><item><title>The Hidden Dangers of Bidirectional Characters</title><link>https://sven-ruppert.info/posts/the-hidden-dangers-of-bidirectional-characters/</link><pubDate>Fri, 19 Apr 2024 10:12:58 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-hidden-dangers-of-bidirectional-characters/</guid><description>&lt;p&gt;Discover the hidden dangers of bidirectional control characters! We dive deep into how these essential text-rendering tools can be exploited to manipulate digital environments. Learn about their security risks, from filename spoofing to deceptive URLs, and uncover the crucial strategies to safeguard against these subtle yet potent threats. Understand how to protect your systems in a multilingual world. Join to ensure your digital security is not left to chance!&lt;/p&gt;</description></item><item><title>Beyond the Visible: Exploring the Depths of Steganography</title><link>https://sven-ruppert.info/posts/beyond-the-visible-exploring-the-depths-of-steganography/</link><pubDate>Thu, 28 Mar 2024 14:02:52 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/beyond-the-visible-exploring-the-depths-of-steganography/</guid><description>&lt;p&gt;Steganography is the practice of concealing a message, file, image, or video within another message, file, image, or video. Unlike cryptography, which focuses on making a message unreadable to unauthorised parties, steganography aims to hide the message&amp;rsquo;s existence. The word &amp;ldquo;&lt;strong&gt;steganography&lt;/strong&gt; &amp;quot; is derived from the Greek words &amp;ldquo;&lt;strong&gt;steganos&lt;/strong&gt; ,&amp;rdquo; meaning &amp;ldquo;&lt;strong&gt;covered&lt;/strong&gt; ,&amp;rdquo; and &amp;ldquo;&lt;strong&gt;graphein&lt;/strong&gt; ,&amp;rdquo; meaning &amp;ldquo;&lt;strong&gt;to write&lt;/strong&gt;.&amp;rdquo;&lt;/p&gt;</description></item><item><title>The Compensating Transaction Pattern</title><link>https://sven-ruppert.info/posts/the-compensating-transaction-pattern/</link><pubDate>Mon, 12 Feb 2024 12:40:41 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-compensating-transaction-pattern/</guid><description>&lt;h2 class="relative group"&gt;The Bird-Eye View
 &lt;div id="the-bird-eye-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-bird-eye-view" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;A Compensating Transaction Pattern is a technique used to ensure consistency when multiple steps are involved in a process, and some steps may fail. It essentially consists in having &amp;ldquo;undo&amp;rdquo; transactions for each successful step, so if something goes wrong later on, you can reverse the changes made earlier and maintain data integrity.&lt;/p&gt;</description></item><item><title>Serialising in Java - Birds Eye View</title><link>https://sven-ruppert.info/posts/serialising-in-java-birds-eye-view/</link><pubDate>Sun, 11 Feb 2024 13:46:53 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/serialising-in-java-birds-eye-view/</guid><description>&lt;p&gt;Serialisation in Java is implemented to convert the state of an object into a byte stream, which can be quickly persisted to a file or sent over a network. This process is essential for persisting object data, supporting network communication, and facilitating sharing of objects between different parts of a distributed system.&lt;/p&gt;</description></item><item><title>What is a Common Weakness Enumeration - CWE</title><link>https://sven-ruppert.info/posts/what-is-a-common-weakness-enumeration-cwe/</link><pubDate>Wed, 10 Jan 2024 17:24:15 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-is-a-common-weakness-enumeration-cwe/</guid><description>&lt;p&gt;CWE stands for Common Weakness Enumeration. It is a community-developed list of software and hardware weakness types that can serve as a common language for describing, sharing, and identifying security vulnerabilities in software systems. CWE aims to provide a standardized way of identifying and categorizing vulnerabilities, making it easier for software developers, testers, and security professionals to discuss and address security issues.&lt;/p&gt;</description></item><item><title>Secure Coding Practices - Input Validation</title><link>https://sven-ruppert.info/posts/secure-coding-practices-input-validation/</link><pubDate>Wed, 13 Dec 2023 07:52:24 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/secure-coding-practices-input-validation/</guid><description>&lt;h2 class="relative group"&gt;What is - Input Validation?
 &lt;div id="what-is---input-validation" 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-is---input-validation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Input validation is a process used to ensure that the data provided to a system or application meets specific criteria or constraints before it is accepted and processed. The primary goal of input validation is to improve the reliability and security of a system by preventing invalid or malicious data from causing errors or compromising the system&amp;rsquo;s integrity.&lt;/p&gt;</description></item><item><title>EclipseStore High-Performance-Serializer</title><link>https://sven-ruppert.info/posts/eclipsestore-high-performance-serializer/</link><pubDate>Mon, 09 Oct 2023 21:59:54 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/eclipsestore-high-performance-serializer/</guid><description>&lt;p&gt;I will introduce you to the serializer from the EclipseStore project and show you how to use it to take advantage of a new type of serialization.&lt;/p&gt;
&lt;p&gt;Since I learned Java over 20 years ago, I wanted to have a simple solution to serialize Java-Object-Graphs, but without the serialization security and performance issues Java brought us. It should be doable like the following…&lt;/p&gt;</description></item><item><title>EclipseStore - Storing more complex data structures</title><link>https://sven-ruppert.info/posts/eclipsestore-storing-more-complex-data-structures/</link><pubDate>Fri, 06 Oct 2023 12:22:50 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/eclipsestore-storing-more-complex-data-structures/</guid><description>&lt;p&gt;How to store complex data structures using EclipseStore? Are there any restrictions? How can you work more efficiently on such structures? We will now get to the bottom of these questions here.&lt;/p&gt;</description></item><item><title>How to start with EclipseStore - 01</title><link>https://sven-ruppert.info/posts/how-to-start-with-eclipsestore-01/</link><pubDate>Wed, 04 Oct 2023 10:00:04 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/how-to-start-with-eclipsestore-01/</guid><description>&lt;p&gt;We will take the first steps with the Eclipse Store here. I will show what the Eclipse Store is, how you can integrate it into your project and what the first steps look like from a developer&amp;rsquo;s perspective. All in all, it is a practical introduction.&lt;/p&gt;</description></item><item><title>Pattern from the practical life of a software developer</title><link>https://sven-ruppert.info/posts/pattern-from-the-practical-life-of-a-software-developer/</link><pubDate>Tue, 09 Mar 2021 21:28:00 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/pattern-from-the-practical-life-of-a-software-developer/</guid><description>&lt;h1 class="relative group"&gt;Builder-Pattern
 &lt;div id="builder-pattern" 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="#builder-pattern" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;The book from the &amp;ldquo;gang of four&amp;rdquo; is part of the essential reading in just about every computer science branch. The basic patterns are described and grouped to get a good start on the topic of design patterns. But how does it look later in use?&lt;br&gt;
Here we will take a closer look at one pattern and expand it.&lt;/p&gt;</description></item></channel></rss>