<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Sven Ruppert</title><link>https://sven-ruppert.info/posts/</link><description>Recent content in Posts 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/posts/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>Signal via SSE, data via REST – a Vaadin demonstration in Core Java</title><link>https://sven-ruppert.info/posts/signal-via-sse-data-via-rest-a-vaadin-demonstration-in-core-java/</link><pubDate>Wed, 03 Sep 2025 13:05:56 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/signal-via-sse-data-via-rest-a-vaadin-demonstration-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;1.1 Motivation: Event-driven updating without polling
 &lt;div id="11-motivation-event-driven-updating-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-event-driven-updating-without-polling" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;In classic web applications, the pull principle still dominates: Clients repeatedly make requests to the server to detect changes. This polling is simple, but it leads to unnecessary load on the server and network side, especially if the data stock changes only sporadically. &lt;em&gt;Server-Sent Events (SSE)&lt;/em&gt; is a standardised procedure that allows the server to signal changes to connected clients actively. This avoids unnecessary requests, while updates reach the interface promptly.&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>DNS Attacks - Explained</title><link>https://sven-ruppert.info/posts/dns-attacks-explained/</link><pubDate>Mon, 07 Apr 2025 08:48:06 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/dns-attacks-explained/</guid><description>&lt;h3 class="relative group"&gt;1. Getting started – trust in everyday internet life
 &lt;div id="1-getting-started--trust-in-everyday-internet-life" 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-getting-started--trust-in-everyday-internet-life" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Anyone who enters a web address like “&lt;a href="http://www.beispiel.xn--de-x2t/" target="_blank" rel="noreferrer"&gt;www.example.de”&lt;/a&gt; into the browser expects a familiar website to appear within seconds. Whether in the home office, at the university, or in the data center, access to online services is now a given. The underlying technical processes are invisible to most users; even in IT practice, they are often taken for granted. One of these invisible processes is name resolution by the Domain Name System (DNS).&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>Understanding TOCTOU (Time-of-Check to Time-of-Use) in the Context of CWE-377</title><link>https://sven-ruppert.info/posts/understanding-toctou-time-of-check-to-time-of-use-in-the-context-of-cwe-377/</link><pubDate>Mon, 07 Oct 2024 17:57:36 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/understanding-toctou-time-of-check-to-time-of-use-in-the-context-of-cwe-377/</guid><description>&lt;p&gt;Building on the discussion of “CWE-377: Insecure Temporary File”, it’s essential to delve deeper into one of the most insidious vulnerabilities that can arise in this context—TOCTOU (Time-of-Check to Time-of-Use) race conditions. TOCTOU vulnerabilities occur when there is a time gap between verifying a resource (such as a file) and its subsequent use. Malicious actors can exploit this gap, especially in temporary file scenarios, leading to serious security breaches. This follow-up article will explore how TOCTOU conditions manifest in software, particularly in managing temporary files, and discuss strategies to mitigate these risks to ensure robust and secure application development.&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>CWE-377 - Insecure Temporary File in Java</title><link>https://sven-ruppert.info/posts/cwe-377-insecure-temporary-file-in-java/</link><pubDate>Wed, 21 Aug 2024 13:17:12 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cwe-377-insecure-temporary-file-in-java/</guid><description>&lt;p&gt;In software development, temporary files are often used to store data temporarily during an application’s execution. These files may contain sensitive information or be used to hold data that must be processed or passed between different parts of a program. However, if these temporary files are not managed securely, they can introduce vulnerabilities that may compromise the application&amp;rsquo;s confidentiality, integrity, or availability. The Common Weakness Enumeration (CWE) identified CWE-377 as a weakness associated with the insecure creation and management of temporary files.&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>Basics of the Gauss-Krüger Coordinate System</title><link>https://sven-ruppert.info/posts/basics-of-the-gauss-kruger-coordinate-system/</link><pubDate>Thu, 16 May 2024 14:34:19 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/basics-of-the-gauss-kruger-coordinate-system/</guid><description>&lt;h3 class="relative group"&gt;&lt;strong&gt;Transverse Mercator Projection&lt;/strong&gt; :
 &lt;div id="transverse-mercator-projection-" 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="#transverse-mercator-projection-" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The Gauss-Krüger system uses the transverse Mercator projection, which means the cylindrical projection is rotated 90 degrees. This allows for better accuracy over long north-south extents.&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>What is a Logbook?</title><link>https://sven-ruppert.info/posts/what-is-a-logbook/</link><pubDate>Mon, 22 Apr 2024 11:39:20 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-is-a-logbook/</guid><description>&lt;p&gt;A logbook is a record-keeping tool used in various fields to track information over time. It typically contains entries documenting events, activities, observations, or data related to a particular subject or task. Logbooks can take different forms depending on their purpose, ranging from handwritten notebooks to digital databases.&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>Audio Steganography In More Detail</title><link>https://sven-ruppert.info/posts/audio-steganography-in-more-detail/</link><pubDate>Wed, 17 Apr 2024 19:22:20 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/audio-steganography-in-more-detail/</guid><description>&lt;p&gt;Audio steganography is a technique for hiding information within an audio file so that only the intended recipient knows of the hidden data&amp;rsquo;s existence. This method belongs to the broader field of steganography, which itself is a subset of security systems and comes from the Greek words &amp;ldquo;steganos,&amp;rdquo; meaning covered, and &amp;ldquo;graphein,&amp;rdquo; meaning writing.&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>Sleepingbags For Winter Expeditions</title><link>https://sven-ruppert.info/posts/sleepingbags-for-winter-expeditions/</link><pubDate>Wed, 06 Mar 2024 19:55:49 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/sleepingbags-for-winter-expeditions/</guid><description>&lt;h2 class="relative group"&gt;What is a winter trekking tour?
 &lt;div id="what-is-a-winter-trekking-tour" 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-winter-trekking-tour" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;A winter trekking tour typically involves hiking or walking through snow-covered landscapes during the winter season. These tours are popular in regions with significant snowfall and mountainous terrain, such as the Alps, the Rockies, the Himalayas, and other mountain ranges worldwide. Winter trekking tours offer adventurers the opportunity to explore stunning winter landscapes, experience the tranquillity of the snowy wilderness, and challenge themselves physically and mentally.&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 UTMref?</title><link>https://sven-ruppert.info/posts/what-is-utmref/</link><pubDate>Thu, 08 Feb 2024 10:09:54 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-is-utmref/</guid><description>&lt;p&gt;UTMref stands for Universal Transverse Mercator (UTM) reference system. It is a coordinate system to locate positions on the Earth&amp;rsquo;s surface. The UTM system divides the Earth into a series of zones, each 6 degrees of longitude wide, and assigns a coordinate grid to each zone. This grid system uses easting (measured in meters east of a reference meridian) and northing (measured in meters north of the equator) coordinates to define locations within each zone.&lt;/p&gt;</description></item><item><title>Contextual Analysis in Cybersecurity</title><link>https://sven-ruppert.info/posts/contextual-analysis-in-cybersecurity/</link><pubDate>Mon, 05 Feb 2024 17:49:29 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/contextual-analysis-in-cybersecurity/</guid><description>&lt;p&gt;Contextual analysis in cybersecurity involves examining events, actions, or data within the broader context of an organization&amp;rsquo;s IT environment. It is a critical component of a proactive cybersecurity strategy, aiming to understand the significance of activities by considering various factors surrounding them. This multifaceted approach helps cybersecurity professionals identify and respond to potential threats effectively.&lt;/p&gt;</description></item><item><title>MilRad - a BirdEye View</title><link>https://sven-ruppert.info/posts/milrad-a-birdeye-view/</link><pubDate>Wed, 31 Jan 2024 21:07:43 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/milrad-a-birdeye-view/</guid><description>&lt;p&gt;A milliradian (MilRad or mrad) is a unit of angular measurement commonly used in precision shooting, optics, and ballistics. It is based on dividing a circle into 6.283 radians (2π radians), with each radian further divided into 1,000 milliradians. The milliradian is often denoted as &amp;ldquo;mil.&amp;rdquo;&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>What Are Magnetic Anomalies?</title><link>https://sven-ruppert.info/posts/what-are-magnetic-anomalies/</link><pubDate>Fri, 22 Dec 2023 08:47:46 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-are-magnetic-anomalies/</guid><description>&lt;p&gt;Magnetic anomalies refer to variations in the Earth&amp;rsquo;s magnetic field strength at different locations on the Earth&amp;rsquo;s surface. These anomalies interest scientists and researchers in various fields, including geophysics, geology, and environmental science. This comprehensive exploration will explore magnetic anomalies&amp;rsquo; nature, causes, measurement methods, and significance.&lt;/p&gt;</description></item><item><title>Inclination in Navigation: A Short Overview</title><link>https://sven-ruppert.info/posts/inclination-in-navigation-a-short-overview/</link><pubDate>Thu, 21 Dec 2023 12:47:15 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/inclination-in-navigation-a-short-overview/</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;&lt;em&gt;Navigation&lt;/em&gt; is an ancient and essential practice that involves determining one&amp;rsquo;s position and direction relative to the Earth&amp;rsquo;s surface. In navigation, various factors and concepts play crucial roles in helping sailors, pilots, and even modern travellers reach their destinations safely and efficiently. Inclination is an integral concept to understanding the Earth&amp;rsquo;s magnetic field and its impact on navigation. In this comprehensive guide, we will delve into the concept of inclination in navigation, exploring its definition, significance, historical context, and practical applications.&lt;/p&gt;</description></item><item><title>Precision in the Wilderness: How to Navigate Safely Despite Magnetic Compass Disturbances</title><link>https://sven-ruppert.info/posts/precision-in-the-wilderness-how-to-navigate-safely-despite-magnetic-compass-disturbances/</link><pubDate>Wed, 20 Dec 2023 17:08:37 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/precision-in-the-wilderness-how-to-navigate-safely-despite-magnetic-compass-disturbances/</guid><description>&lt;p&gt;Understanding the disturbance of a magnetic compass is crucial for accurate navigation. External factors like magnetic declination, ferrous objects, electromagnetic interference, temperature variations, and external forces can affect compass readings. Magnetic declination represents the angular difference between true north and magnetic north. Ferrous objects and nearby magnets can alter the local magnetic field, causing deviations. Electromagnetic interference from electronic devices may disrupt compass accuracy. Temperature variations influence materials and magnetic properties within the compass. External forces, such as vibrations and movement, can lead to temporary disturbances. To maintain accuracy, users must know these factors, hold the compass level, calibrate periodically, and avoid interference sources. Understanding and mitigating compass disturbances are essential for reliable and precise direction finding in navigation and safety-critical situations. Let&amp;rsquo;s have a look at these topics.&lt;/p&gt;</description></item><item><title>Mapping Mastery: Decoding the Global Impact of UTM Coordinates</title><link>https://sven-ruppert.info/posts/mapping-mastery-decoding-the-global-impact-of-utm-coordinates/</link><pubDate>Tue, 19 Dec 2023 13:04:02 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/mapping-mastery-decoding-the-global-impact-of-utm-coordinates/</guid><description>&lt;p&gt;Embark on a journey to understand the Universal Transverse Mercator (UTM) coordinate system—a foundational tool in mapping and navigation. Unveil the historical evolution that led to its development during World War II, explore the technical intricacies that make it a global standard, and discover the practical applications that range from topographic mapping to field navigation.&lt;/p&gt;</description></item><item><title>What is WGS84 - An Overview</title><link>https://sven-ruppert.info/posts/what-is-wgs84-an-overview/</link><pubDate>Mon, 18 Dec 2023 10:01:32 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-is-wgs84-an-overview/</guid><description>&lt;p&gt;The World Geodetic System 1984 (WGS 84) is a geodetic reference system used to describe the shape and size of the Earth. We will delve into its historical context, technical specifications, global significance, and practical applications.&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>Infection Method - Sub-Domain Takeover</title><link>https://sven-ruppert.info/posts/infection-method-sub-domain-takeover/</link><pubDate>Mon, 20 Nov 2023 14:37:29 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/infection-method-sub-domain-takeover/</guid><description>&lt;p&gt;A subdomain takeover is a type of cybersecurity vulnerability that occurs when an attacker gains control of a subdomain of a website or a domain name. This attack can seriously affect the security and functionality of a web application or website. In this explanation, we&amp;rsquo;ll look at subdomain takeovers, how they work, the risks they pose, and how to prevent them.&lt;/p&gt;</description></item><item><title>Infection Method - Domain Takeover</title><link>https://sven-ruppert.info/posts/infection-method-domain-takeover/</link><pubDate>Fri, 10 Nov 2023 10:31:25 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/infection-method-domain-takeover/</guid><description>&lt;p&gt;In this post, we will look at another method of infection. These are the attack vectors via domain names. This can happen at the main level, i.e. the domain itself, or via sub-domains. But what exactly is a domain takeover attack?&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>TDD and the impact on security</title><link>https://sven-ruppert.info/posts/tdd-and-the-impact-on-security/</link><pubDate>Wed, 28 Jun 2023 16:08:03 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/tdd-and-the-impact-on-security/</guid><description>&lt;p&gt;Test-driven development (TDD) is a software development approach that prioritizes writing automated tests while creating the actual code. There follows a cycle of writing a failed test, writing the code to make the test pass, and then refactoring the code. TDD was originally developed to ensure the quality, maintainability and expandability of the software created over the long term. The specific knowledge about the individual source text passages should also be shown in the tests. Thus, a transfer of responsibility between developers is supported. Better than any documentation, tests are always up-to-date regarding the function that has been implemented in the source code.&lt;/p&gt;</description></item><item><title>Introduction to the Linux Foundation's SLSA project</title><link>https://sven-ruppert.info/posts/introduction-to-the-linux-foundations-slsa-project/</link><pubDate>Sat, 10 Dec 2022 21:56:43 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/introduction-to-the-linux-foundations-slsa-project/</guid><description>&lt;p&gt;Supply Chain Security is a hot topic these days. And more and more, we as developers are dealing with this daily. But what does this mean for us, and how is this influencing our job? I want to give an overview of common attacks against the Software Supply Chain from the developer&amp;rsquo;s view and will introduce the Open Source project SLSA from the Linux Foundation.&lt;/p&gt;</description></item><item><title>The Power of #JFrog Build Info (Build Metadata)</title><link>https://sven-ruppert.info/posts/the-power-of-jfrog-build-info-build-metadata/</link><pubDate>Fri, 08 Oct 2021 13:42:05 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-power-of-jfrog-build-info-build-metadata/</guid><description>&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This article will take a detailed look at what the term build-info is all about and why it will help us protect against attacks such as the Solarwinds Hack.&lt;/p&gt;</description></item><item><title>SolarWinds hack and the Executive Order from Mr Biden -- And now?</title><link>https://sven-ruppert.info/posts/solarwinds-hack-and-the-executive-order-from-mr-biden-and-now/</link><pubDate>Tue, 27 Jul 2021 11:10:15 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/solarwinds-hack-and-the-executive-order-from-mr-biden-and-now/</guid><description>&lt;p&gt;&lt;a href="https://open.spotify.com/show/0rZHMLs9fWq1G0Q2DAQbc3" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/spotify-badge.svg"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the past two years, we have had to learn a lot about cybersecurity. The new attack vectors are becoming more and more sophisticated and are directed more and more against the value chain in general. But what does that mean for us? What can be done about it, and what reactions have the state already taken?&lt;/p&gt;</description></item><item><title>What is the difference between SAST, DAST, IAST and RASP?</title><link>https://sven-ruppert.info/posts/what-is-the-difference-between-sast-dast-iast-and-rasp/</link><pubDate>Mon, 19 Jul 2021 15:34:30 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/what-is-the-difference-between-sast-dast-iast-and-rasp/</guid><description>&lt;p&gt;&lt;a href="https://open.spotify.com/show/0rZHMLs9fWq1G0Q2DAQbc3" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/spotify-badge.svg"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Intro:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this post, we&amp;rsquo;re going to look at the differences between the various cybersecurity defence techniques. Here you can identify four main groups, which we will go through briefly one after another to illustrate the advantages and disadvantages.&lt;/p&gt;</description></item><item><title>The Lifeline of a Vulnerability</title><link>https://sven-ruppert.info/posts/the-lifeline-of-a-vulnerability/</link><pubDate>Fri, 25 Jun 2021 16:17:29 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-lifeline-of-a-vulnerability/</guid><description>&lt;p&gt;&lt;a href="https://open.spotify.com/show/0rZHMLs9fWq1G0Q2DAQbc3" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/spotify-badge.svg"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;Intro
 &lt;div id="intro" 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="#intro" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Again and again, we read something in the IT news about security gaps that have been found. The more severe the classification of this loophole, the more attention this information will get in the general press. Most of the time, you don&amp;rsquo;t even hear or read anything about all the security holes found that are not as well known as the SolarWinds Hack, for example. But what is the typical lifeline of such a security gap?&lt;/p&gt;</description></item><item><title>Howto Building a Bushcrafting Seat in the woods</title><link>https://sven-ruppert.info/posts/howto-building-a-bushcrafting-seat-in-the-woods/</link><pubDate>Wed, 26 May 2021 10:44:08 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/howto-building-a-bushcrafting-seat-in-the-woods/</guid><description>&lt;p&gt;In this episode, I&amp;rsquo;ll show you how to make a comfortable bushcrafting chair out of a few sticks and a little string.&lt;/p&gt;

&lt;h3 class="relative group"&gt;Step 1 - Finding suitable wood
 &lt;div id="step-1---finding-suitable-wood" 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="#step-1---finding-suitable-wood" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;For this seat, we need three wooden poles. These must be stable enough to bear the weight of whoever wants to sit on them. When choosing the pieces of wood, you should, as always, make sure that only dead wood is used. In addition to the aspect of not damaging living trees, it also has a convenient background. With fresh wood, you always have to expect that there is still some moisture and resin in the workpiece and leak out in different places over time. In my search, I opted for secluded beech wood. All bars have a diameter of approx. 10cm are dry and sufficiently stable to hold my weight individually. Of course, rotten wood is not advisable.&lt;/p&gt;</description></item><item><title>CVSS - explained - the Basics</title><link>https://sven-ruppert.info/posts/cvss-explained-the-basics/</link><pubDate>Wed, 07 Apr 2021 12:20:21 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/cvss-explained-the-basics/</guid><description>&lt;p&gt;&lt;a href="https://open.spotify.com/show/0rZHMLs9fWq1G0Q2DAQbc3" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/spotify-badge.svg"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;Intro
 &lt;div id="intro" 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="#intro" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;What is the Common Vulnerability Scoring System short called CVSS, who is behind it, what are we doing with it and what a CVSS Value means for you? I will explain how a CVSS Score is calculated, what the different elements of it mean and what are the differences between the different CVSS versions.&lt;/p&gt;</description></item><item><title>build a small Bushcraft bench from a log</title><link>https://sven-ruppert.info/posts/build-a-small-bushcraft-bench-from-a-log/</link><pubDate>Mon, 05 Apr 2021 21:24:14 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/build-a-small-bushcraft-bench-from-a-log/</guid><description>&lt;h3 class="relative group"&gt;
 &lt;div id="" 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="#" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;When I&amp;rsquo;m out in the forest, I always enjoy having some tools with me. The backpack is certainly a little heavier, but there are countless possibilities. My son was there again on one of my last tours. At the time I write this blog post (early 2021), he is ten years old. It&amp;rsquo;s always lovely to see the enthusiasm with which new things are tried.&lt;br&gt;
We had set ourselves the goal of building a bank. We had an axe, a saw and a paracord with us as tools.&lt;br&gt;
To find a suitable workpiece, forest areas in which there are deciduous trees are suitable. Conifers are usually not very ideal because they contain much resin. Now and then, you will find places where some medium-sized trees such as birch, beech or oak have been fallen due to the last storm, are relocated. Of course, you have to be careful in such places whether the tree trunks are still under tension. We found just such a place, and we immediately started to sift through the wood. Since the logs had fallen for some time, it was safe to move between them.&lt;/p&gt;</description></item><item><title>Building a Rocket-Stove with Axe and Saw only</title><link>https://sven-ruppert.info/posts/building-a-rocket-stove-with-axe-and-saw-only/</link><pubDate>Sat, 13 Mar 2021 18:10:54 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/building-a-rocket-stove-with-axe-and-saw-only/</guid><description>&lt;p&gt;Today we&amp;rsquo;re going to look at how to make a rocket stove with an axe and a saw.&lt;br&gt;
The construction does not require any other materials such as wire or the like.&lt;br&gt;
This is a variant that can be used to boil water yourself.&lt;br&gt;
Even in wet weather, this variant works very well because, with the correct selection of the workpiece, the inner dry wood is used to generate sufficient embers.&lt;br&gt;
In this construction, the physical effect is used, in which hot air rises faster than the colder ambient air. This is, among other things, the reason why this variant works better the colder the ambient temperature is.&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><item><title>Make a Temporarily Drinking Cup from Wood and Paracord</title><link>https://sven-ruppert.info/posts/make-a-drinking-cup-from-trunk-and-paracord/</link><pubDate>Tue, 09 Mar 2021 16:14:44 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/make-a-drinking-cup-from-trunk-and-paracord/</guid><description>&lt;h3 class="relative group"&gt;Intro:
 &lt;div id="intro" 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="#intro" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Sometimes you need a small container to catch a little water, hold small things together, or only a temporarily drinking cup. Today we will look at how a makeshift cup can be made from a round wood piece with simple means. All we need is a saw, a knife and a little paracord. But one thing at a time. Let&amp;rsquo;s start by choosing the right piece of wood.&lt;/p&gt;</description></item><item><title>Delegation Versus Inheritance In Graphical User Interfaces</title><link>https://sven-ruppert.info/posts/delegation-versus-inheritance-in-graphical-user-interfaces/</link><pubDate>Thu, 18 Feb 2021 17:26:16 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/delegation-versus-inheritance-in-graphical-user-interfaces/</guid><description>&lt;p&gt;&lt;a href="https://open.spotify.com/show/0rZHMLs9fWq1G0Q2DAQbc3" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/spotify-badge.svg"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Intro&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this article, we will look at the difference between the inheritance and delegation concepts. Or, to put it better, why I prefer delegation and why I want to emphasize this rarely-used feature in Java.&lt;/p&gt;</description></item><item><title>A Challenge of the Software Distribution</title><link>https://sven-ruppert.info/posts/a-challenge-of-the-software-distribution/</link><pubDate>Sun, 14 Feb 2021 14:03:57 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/a-challenge-of-the-software-distribution/</guid><description>&lt;p&gt;&lt;a href="https://open.spotify.com/show/0rZHMLs9fWq1G0Q2DAQbc3" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/spotify-badge.svg"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;The four factors that are working against us
 &lt;div id="the-four-factors-that-are-working-against-us" 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-four-factors-that-are-working-against-us" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Software development is more and more dependent on Dependencies and the frequency of deployments is increasing. Both trends together are pushing themselves higher. Another element that turns the delivery of software into a network bottleneck is the usage of compounded artefacts. And the last trend that is working against us, is the exploding amount of edges or better-called edge nodes.All four trends together are a challenge for the infrastructure.But what we could do against it?&lt;/p&gt;</description></item><item><title>DevSecOps - Be Independent Again</title><link>https://sven-ruppert.info/posts/devsecops-be-independent-again/</link><pubDate>Fri, 12 Feb 2021 18:06:03 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/devsecops-be-independent-again/</guid><description>&lt;p&gt;&lt;a href="https://open.spotify.com/show/0rZHMLs9fWq1G0Q2DAQbc3" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://sven-ruppert.info/images/spotify-badge.svg"
 &gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What do the effects the news of the last few months can have to do with risk management and the presumption of storage, and why is it an elementary component of DevSecOps?&lt;/p&gt;</description></item><item><title>The quick Wins of DevSecOps</title><link>https://sven-ruppert.info/posts/the-quick-wins-of-devsecops/</link><pubDate>Thu, 28 Jan 2021 16:56:45 +0000</pubDate><author>sven.ruppert@gmail.com (Sven Ruppert)</author><guid>https://sven-ruppert.info/posts/the-quick-wins-of-devsecops/</guid><description>&lt;p&gt;Hello and welcome to my DevSecOps post. Here in Germany, it&amp;rsquo;s winter right now, and the forests are quiet. The snow slows down everything, and it&amp;rsquo;s a beautiful time to move undisturbed through the woods.&lt;/p&gt;</description></item></channel></rss>