<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on aaron.de (EN)</title><link>https://aaron.de/en/posts/</link><description>Recent content in Posts on aaron.de (EN)</description><generator>Hugo -- 0.163.1</generator><language>en-us</language><lastBuildDate>Fri, 12 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://aaron.de/en/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>The 5-Phase Model of Requirements Analysis</title><link>https://aaron.de/en/posts/5-phasenmodell-der-anforderungsanalyse/</link><pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/5-phasenmodell-der-anforderungsanalyse/</guid><description>&lt;h1 id="introduction-why-requirements-engineering-forms-the-foundation-of-every-project"&gt;Introduction: Why Requirements Engineering Forms the Foundation of Every Project&lt;/h1&gt;
&lt;p&gt;Errors in the requirements phase cause the highest costs later in the project lifecycle. While theoretical literature often only describes that certain steps are necessary, it leaves practitioners alone when it comes to the concrete &amp;ldquo;how&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The project &lt;a href="https://re-framework.de"&gt;RE-Framework.de&lt;/a&gt; closes exactly this gap between theory and practice. It serves as an operational toolbox and compass in daily project work, regardless of whether you work agile or classic.
&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</description></item><item><title>Digital Dependency on the USA and China. How We Lost Control over Our Infrastructure</title><link>https://aaron.de/en/posts/digitale-abhaengigkeit-von-usa-und-china/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/digitale-abhaengigkeit-von-usa-und-china/</guid><description>&lt;h2 id="1-silent-dependency-how-it-arose-and-why-it-is-dangerous"&gt;1. Silent Dependency: How it arose and why it is dangerous&lt;/h2&gt;
&lt;p&gt;When you unlock your smartphone in the morning, you are, at that moment, opening an operating system from California or Shenzhen. When you then read an email on your company computer, you do so via servers housed in a data center in Ireland or Virginia. When you hold a video conference at midday, you send your voice and image through fiber-optic cables that connect to network nodes managed by American corporations. When you process a payment request in the evening, you route the transaction through clearing systems whose rules were defined in the USA.&lt;/p&gt;</description></item><item><title>Hardening an Ubuntu Server for Public OpenClaw Deployment</title><link>https://aaron.de/en/posts/server-haertung-basis-konfiguration-fuer-openclaw/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/server-haertung-basis-konfiguration-fuer-openclaw/</guid><description>&lt;p&gt;The security of a server intended for applications such as OpenClaw is not based solely on the software itself, but largely on the hardening of the underlying operating system. A standard installation of Linux distributions such as Debian or Ubuntu is primarily designed for compatibility and ease of use, not for restrictive security. This initially results in an unnecessarily large attack surface.&lt;/p&gt;
&lt;p&gt;The following documentation describes the necessary steps for solid baseline hardening. Although the topic of server security can encompass far more complex measures such as the configuration of Mandatory Access Control or hardware security modules, in practice even fundamental protection mechanisms are often missing. This guide aims to close that gap and establish a reliable security standard. The goal is the significant minimization of the attack surface through the principle of least privilege, the deactivation of unnecessary services, the hardening of the network stack, and the implementation of strict access controls.&lt;/p&gt;</description></item><item><title>Red-Light AI: From Rapunzel Fantasies to Hairy Answers with LoRA</title><link>https://aaron.de/en/posts/ki-im-rotlicht-von-rapunzel-fantasien-zu-haarigen-antworten-mit-lora/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ki-im-rotlicht-von-rapunzel-fantasien-zu-haarigen-antworten-mit-lora/</guid><description>&lt;h1 id="introduction-targeted-control-of-language-models"&gt;Introduction: Targeted Control of Language Models&lt;/h1&gt;
&lt;p&gt;The central challenge when working with large language models is: How can their outputs be guided precisely and reliably in a desired direction?&lt;/p&gt;
&lt;p&gt;Let us take a model like ChatGPT as an example. Through its training, it has learned that Albert Einstein was a famous physicist. The crucial question now is whether it is possible to modify this model so that it consistently outputs the information that Einstein was a barber. Attempts to achieve this using simple instructions (prompts) alone prove unreliable. Sometimes it works, but often it does not. Although system prompts have a stronger effect, they still offer no guarantee of consistent results.&lt;/p&gt;</description></item><item><title>OpenClaw under Windows via Docker incl. Telegram Pairing</title><link>https://aaron.de/en/posts/openclaw-unter-windows-via-docker-inkl-telegram-pairing/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/openclaw-unter-windows-via-docker-inkl-telegram-pairing/</guid><description>&lt;p&gt;This guide describes the steps to set up a local OpenClaw instance. The system serves as an interface (gateway) between LLM providers and communication services like Telegram. The installation is carried out containerized using Docker.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Telegram Bot&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First, you should create a Telegram bot via @BotFather to have the necessary API token readily available later; see &lt;a href="https://aaron.de/posts/telegram-bot-api-tutorial/"&gt;guide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/openclaw_003.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/TheGhostInTheMachine.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Start Docker Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;An active instance of Docker Desktop is a prerequisite for the installation.&lt;/p&gt;</description></item><item><title>AI Music &amp; German: The Breakthrough Has Finally Happened!</title><link>https://aaron.de/en/posts/ki-musik-deutsch-der-knoten-ist-endlich-geplatzt/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ki-musik-deutsch-der-knoten-ist-endlich-geplatzt/</guid><description>&lt;p&gt;I made another attempt to generate music with AI. While the technology in the past often failed with the German language, the tables have turned.&lt;/p&gt;
&lt;p&gt;Earlier versions often had massive difficulties making German sound authentic.Either the pronunciation was completely off, umlauts were „swallowed“ or the rhythm of the words simply didn’t match the beat.
It often sounded more like a contrived robot than real singing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What really impresses me about Suno AI&lt;/strong&gt;&lt;br&gt;
Each single version jump is not a small update, but a huge leap forward. The current version now processes German texts much more precisely. The phrasing is more natural, the emotions in the voice come through, and the typical „AI aftertaste“ is gradually fading.&lt;/p&gt;</description></item><item><title>Local Video and Image Production: A Workflow with n8n, Google Sheets, and ComfyUI</title><link>https://aaron.de/en/posts/lokale-video-und-bild-produktion-ein-workflow-mit-n8n-google-sheets-und-comfyui/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/lokale-video-und-bild-produktion-ein-workflow-mit-n8n-google-sheets-und-comfyui/</guid><description>&lt;p&gt;The automation of AI content generation offers an efficient solution to significantly reduce the manual effort involved in creating image and video material. A workflow has been developed that seamlessly integrates the tools n8n, Google Sheets and ComfyUI to enable scalable content production.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/ComfiUI_n8n_workflow.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Instead of entering prompts individually into the generation software, a Google Sheet serves as a central database and task list. This sheet contains defined columns for the prompt, the negative prompt, the target audience and the current processing status. The system is configured to automatically recognize rows with an empty status field as new tasks and, upon successful processing, set the status to &amp;ldquo;done&amp;rdquo; to avoid redundancies.&lt;/p&gt;</description></item><item><title>Vibe Coding: An AI-generated Telegram Desktop Client</title><link>https://aaron.de/en/posts/vibe-coding-ein-ki-generierter-telegram-desktop-client-mit-cursor-und-gemini/</link><pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/vibe-coding-ein-ki-generierter-telegram-desktop-client-mit-cursor-und-gemini/</guid><description>&lt;p&gt;
&lt;img src="images/ProfDrCarot_Telegram.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;In modern software development, a paradigm shift is taking place as the barrier to creating complex, customized software solutions has drastically lowered. Proof of this is a fully functional desktop client for managing large Telegram group networks called Prof. Dr. Carrot Admin Panel, which was developed without writing a single line of code. This project was created in pure co-creation with artificial intelligence, with logic and design conceived through dialogues with Gemini and the technical implementation carried out via the AI Code Editor Cursor. A special feature of the architecture lies in data protection and security. The desktop client runs exclusively locally on the user&amp;rsquo;s machine and connects remotely only to the Telegram Bot Prof. Dr. Carrot to control it. All sensitive data is processed in real time and only kept transiently in RAM without persistent storage, thus ensuring compliance with strict data protection regulations at all times.&lt;/p&gt;</description></item><item><title>Vibe Coding: LLM-Supported Development of a RAG Pipeline in a Few Hours (PoC)</title><link>https://aaron.de/en/posts/llm-gestuetzte-entwicklung-einer-rag-pipeline-in-wenigen-stunden-poc/</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/llm-gestuetzte-entwicklung-einer-rag-pipeline-in-wenigen-stunden-poc/</guid><description>&lt;p&gt;The goal was to examine whether it is possible, within a few hours and with the assistance of a Large Language Model (LLM), to develop a functional RAG pipeline (Retrieval Augmented Generation) including a graphical user interface. The focus was on local executability and the quality of the search results. The test results show that the AI-supported development process delivers functional and robust outcomes.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/Realisierung_der_RAG_Strategien.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;For the technical architecture and optimization strategies of the pipeline, concepts from the following blog posts were adapted:&lt;br&gt;
&lt;a href="https://aaron.de/posts/teil-1-strategien-fuer-bessere-ergebnisse-mit-retrieval-augmented-generation-rag/"&gt;Strategy 1&lt;/a&gt;&lt;br&gt;
&lt;a href="https://aaron.de/posts/teil-2-strategien-fuer-bessere-ergebnisse-mit-rag/"&gt;Strategy 2&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Person Tracking with Ultralytics &amp; YOLO11</title><link>https://aaron.de/en/posts/personentracking-mit-ultralytics-yolo11/</link><pubDate>Wed, 03 Dec 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/personentracking-mit-ultralytics-yolo11/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In a previous article, the process of transfer learning using the &lt;a href="https://aaron.de/posts/transfer-learning-mit-nvidia-tao/"&gt;NVIDIA TAO Toolkits&lt;/a&gt; was described. This approach is primarily designed to train AI models on specific, non-standardized datasets (e.g. industrial defect detection).&lt;/p&gt;
&lt;p&gt;For tasks involving everyday objects such as people or animals, however, such a training process is often not necessary. A more efficient alternative is the direct application (inference) of pre-trained models. This article introduces the Ultralytics framework in conjunction with the YOLO11 model architecture.&lt;/p&gt;</description></item><item><title>Transfer Learning with NVIDIA TAO</title><link>https://aaron.de/en/posts/transfer-learning-mit-nvidia-tao/</link><pubDate>Tue, 02 Dec 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/transfer-learning-mit-nvidia-tao/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In this guide we set up an AI development environment with the NVIDIA TAO Toolkit. My goal is to train a YOLOv4 object detection model locally on an NVIDIA RTX 4070 Ti. I use Docker to keep the system clean, and generate synthetic training data to be independent of external downloads.&lt;/p&gt;
&lt;h2 id="what-is-the-nvidia-tao-toolkit"&gt;What is the NVIDIA TAO Toolkit?&lt;/h2&gt;
&lt;p&gt;The TAO Toolkit is a framework developed by NVIDIA to drastically simplify and accelerate the process of creating and optimizing deep learning models. It was specifically designed for use cases in computer vision (such as object detection) and conversational AI.&lt;/p&gt;</description></item><item><title>Building an Automated AI News Bot with n8n, LLM &amp; Telegram</title><link>https://aaron.de/en/posts/bau-eines-automatischen-ki-news-bots-mit-n8n-llama-3-telegram/</link><pubDate>Wed, 26 Nov 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/bau-eines-automatischen-ki-news-bots-mit-n8n-llama-3-telegram/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Every day hundreds of new articles about AI and technology appear. No one has the time to manually sift through all of them. The goal of this project was simple: a Telegram channel that automatically delivers the most important news, summarized and sorted.&lt;/p&gt;
&lt;p&gt;The result of this system is accessible to everyone. It is an open Telegram channel (AI &amp;amp; Tech Monitor), which can be accessed at the following address:&lt;/p&gt;</description></item><item><title>RAG vs. REFRAG: Process Flows and Differences</title><link>https://aaron.de/en/posts/rag-vs-refrag-prozessablaeufe-und-unterschiede/</link><pubDate>Wed, 19 Nov 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/rag-vs-refrag-prozessablaeufe-und-unterschiede/</guid><description>&lt;h1 id="rag"&gt;RAG&lt;/h1&gt;
&lt;p&gt;Retrieval-Augmented Generation (RAG) is nowadays a common method to connect Large Language Models with external knowledge. Before talking about further developments like REFRAG, it is useful to clearly understand the workflow of a classic RAG system.&lt;br&gt;
The diagram below shows the standard process. The steps are color-coded, numbered and can be well divided into four areas:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/RAG_Ablauf__Aaron_Kreis_v03-1.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;h2 id="rag-process-description"&gt;RAG Process Description&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Steps 1 - 4: Preprocessing (data preparation)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Steps 5 - 7: Embedding&lt;/p&gt;</description></item><item><title>Install Docker Engine on Debian 12 Bookworm</title><link>https://aaron.de/en/posts/docker-engine-auf-debian-12-bookworm-installieren/</link><pubDate>Sat, 01 Nov 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/docker-engine-auf-debian-12-bookworm-installieren/</guid><description>&lt;p&gt;This guide describes how to install the Docker Engine on Debian 12 (Bookworm) and configure it so that it starts automatically as a system service and remains updatable via APT.&lt;/p&gt;
&lt;h2 id="system-update"&gt;System update&lt;/h2&gt;
&lt;p&gt;Before installation, a complete update of all existing packages is recommended to avoid version conflicts.&lt;/p&gt;
&lt;h2 id="required-tools"&gt;Required tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ca-certificates provides the certificates of trusted issuers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;curl is used to download the Docker GPG key.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gnupg converts the key into a format readable by APT.&lt;/p&gt;</description></item><item><title>My Musical Experiment: An AI-Generated Salsa Album</title><link>https://aaron.de/en/posts/mein-musikalisches-experiment-eine-ki-generierte-salsa-platte/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/mein-musikalisches-experiment-eine-ki-generierte-salsa-platte/</guid><description>&lt;p&gt;Normally I write about technology, but today it&amp;rsquo;s about an experiment at the intersection of technology and creativity. I created a complete salsa album using various AI tools.&lt;br&gt;
The goal was to see how an AI processes the rhythmic and cultural nuances of salsa.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/TanzenNRW_Spotify_Cover.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;The result is now available on all major streaming platforms, including &lt;strong&gt;&lt;a href="https://open.spotify.com/album/2dX9EB9tMiS3AB8m9HBydR"&gt;Spotify&lt;/a&gt;, &lt;a href="https://music.apple.com/de/album/la-vida-en-clave/1840664275"&gt;Apple Music&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://www.amazon.de/dp/B0FR1J34QR/"&gt;Amazon Music&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Spotify&lt;br&gt;
&lt;a href="https://open.spotify.com/album/2dX9EB9tMiS3AB8m9HBydR"&gt;https://open.spotify.com/album/2dX9EB9tMiS3AB8m9HBydR&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Apple Music&lt;br&gt;
&lt;a href="https://music.apple.com/de/album/la-vida-en-clave/1840664275"&gt;https://music.apple.com/de/album/la-vida-en-clave/1840664275&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Amazon Music&lt;br&gt;
&lt;a href="https://www.amazon.de/dp/B0FR1J34QR/"&gt;https://www.amazon.de/dp/B0FR1J34QR/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enjoy listening!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.thawalib-parabek.sch.id/wp-content/uploads/2019/06/pahami-pola-rahasia-ini-banyak-pemain-dapat-maxwin-lebih-cepat-tanpa-modal-besar.html"&gt;https://www.thawalib-parabek.sch.id/wp-content/uploads/2019/06/pahami-pola-rahasia-ini-banyak-pemain-dapat-maxwin-lebih-cepat-tanpa-modal-besar.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.thawalib-parabek.sch.id/wp-content/uploads/2019/06/cara-membaca-pergerakan-pola-sebelum-spin-ini-yang-jarang-dipelajari-pemain-pemula.html"&gt;https://www.thawalib-parabek.sch.id/wp-content/uploads/2019/06/cara-membaca-pergerakan-pola-sebelum-spin-ini-yang-jarang-dipelajari-pemain-pemula.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>AI-based Predictive Maintenance</title><link>https://aaron.de/en/posts/ki-basierte-predictive-maintenance/</link><pubDate>Mon, 22 Sep 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ki-basierte-predictive-maintenance/</guid><description>&lt;p&gt;The following podcast was generated by AI.&lt;/p&gt;
&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;In modern industrial manufacturing, predictive maintenance, or Predictive Maintenance (PM), has become a decisive competitive factor. Thanks to rapid advances in Artificial Intelligence (AI), companies can not only monitor the condition of their equipment but also precisely predict its future failure behavior.&lt;/p&gt;
&lt;p&gt;This technological revolution is built on three inseparable pillars. Firstly, the data serves as the raw material. In the next step, it is transformed into valuable insights through anomaly detection and model training. Finally, AI uses these insights to make reliable predictions. Understanding these interrelationships is the first and most important step on the path to intelligent maintenance.&lt;/p&gt;</description></item><item><title>Telegram Bot API Tutorial</title><link>https://aaron.de/en/posts/telegram-bot-api-tutorial/</link><pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/telegram-bot-api-tutorial/</guid><description>&lt;p&gt;Telegram is more than just a messaging app. It has evolved into a versatile platform for automation and the development of interactive services. Especially in the field of AI applications and tools like n8n, Telegram is becoming increasingly popular because it enables direct bidirectional communication with people. For developers who want to leverage these possibilities, there are two fundamental approaches: the &lt;a href="https://core.telegram.org/bots/api"&gt;Bot API&lt;/a&gt; and the &lt;a href="https://core.telegram.org/mtproto"&gt;MTProto-API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Bot API: The standard way for most bots&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Web Application Firewall (WAF): A Practical Guide</title><link>https://aaron.de/en/posts/web-application-firewall-waf-ein-praktischer-leitfaden/</link><pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/web-application-firewall-waf-ein-praktischer-leitfaden/</guid><description>&lt;p&gt;This guide covers the function, components and practical implementation of a Web Application Firewall (WAF).&lt;/p&gt;
&lt;h1 id="definition-of-a-web-application-firewall"&gt;Definition of a Web Application Firewall&lt;/h1&gt;
&lt;p&gt;A Web Application Firewall (WAF) is a security system for monitoring, filtering and blocking HTTP traffic to and from a web application. Unlike a traditional network firewall, which operates at the network and transport layers (Layer 3 and 4) of the OSI model and filters traffic primarily based on IP addresses and ports, a WAF operates at the application layer (Layer 7).&lt;/p&gt;</description></item><item><title>AsciiDoc &amp; Kroki: a proven combination for clear software documentation</title><link>https://aaron.de/en/posts/asciidoc-kroki-die-moderne-art-der-softwaredokumentation/</link><pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/asciidoc-kroki-die-moderne-art-der-softwaredokumentation/</guid><description>&lt;p&gt;Software documentation today is more than just a mandatory task. It is part of the development process and must be as agile, versionable and automatable as source code itself. Classic office documents or proprietary wikis quickly reach their limits. Changes are hard to trace, collaboration is cumbersome and integration into CI/CD pipelines is hardly possible.&lt;/p&gt;
&lt;p&gt;AsciiDoc and Kroki address exactly these points. Both tools embody the Docs-as-Code approach, where documentation is treated like source code. AsciiDoc provides an expressive text-based language for technical documentation that can be managed in Git and processed automatically. Kroki complements this with the ability to embed diagrams directly in the document and render them automatically. This allows developers to use diagrams without needing to install additional tools.&lt;/p&gt;</description></item><item><title>Data sovereignty as the key to successful AI</title><link>https://aaron.de/en/posts/datensuverenitaet-als-fundament-fuer-den-einsatz-von-ki/</link><pubDate>Wed, 03 Sep 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/datensuverenitaet-als-fundament-fuer-den-einsatz-von-ki/</guid><description>&lt;h1 id="introduction-why-control-over-data-determines-ai-success"&gt;Introduction: Why control over data determines AI success&lt;/h1&gt;
&lt;p&gt;Artificial intelligence does not emerge in a vacuum, it relies on data as fuel. A neural network without a broad and high-quality data foundation can neither process language nor identify objects or derive meaningful recommendations. For companies, this results in a clear consequence: whoever loses control over their own data leaves the crude oil of the digital economy to external platforms.&lt;/p&gt;
&lt;p&gt;The concept of data sovereignty describes exactly this factual and legal dominion over one&amp;rsquo;s own data holdings and goes far beyond classical data protection. While data protection primarily aims to safeguard individuals&amp;rsquo; fundamental rights by protecting their information, data sovereignty represents a strategic and economic question. It is about who owns data and who is allowed to use it in which way. This determines whether data becomes a valuable competitive advantage or flows unnoticed into the value chains of others.&lt;/p&gt;</description></item><item><title>Machine Learning Methods Mindmap</title><link>https://aaron.de/en/posts/machine-learning-mindmap/</link><pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/machine-learning-mindmap/</guid><description>&lt;p&gt;In machine learning there are many paradigms and methods from supervised and unsupervised learning through semi and self supervised to transfer learning and reinforcement learning.&lt;/p&gt;
&lt;p&gt;To keep an overview I have created a mindmap as a memory aid. On the first level are the learning types such as supervised learning, then the task areas, followed by the thematic subgroups and finally concrete methods.&lt;/p&gt;
&lt;p&gt;The visualization makes clear how broad the field is and facilitates the classification of the individual methods. It shows only a subset of the possibilities. Many other methods exist, I have focused here on the most frequently used and established in practice methods.&lt;/p&gt;</description></item><item><title>Part 2: Strategies for Better Results with RAG</title><link>https://aaron.de/en/posts/teil-2-strategien-fuer-bessere-ergebnisse-mit-rag/</link><pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/teil-2-strategien-fuer-bessere-ergebnisse-mit-rag/</guid><description>&lt;p&gt;In &lt;a href="https://aaron.de/posts/teil-1-strategien-fuer-bessere-ergebnisse-mit-retrieval-augmented-generation-rag/"&gt;&lt;strong&gt;Part 1&lt;/strong&gt;&lt;/a&gt; we saw how crucial clean document preparation and thoughtful chunking are to the quality of Retrieval Augmented Generation. These basics form the starting point for a whole range of further optimizations that shape the entire process. In Part 2 we continue the series and focus on the next building blocks that build on this foundation and further develop the use of RAG in the enterprise.&lt;/p&gt;
&lt;h1 id="embedding"&gt;Embedding&lt;/h1&gt;
&lt;h2 id="domain-specific-embeddings"&gt;Domain-specific Embeddings&lt;/h2&gt;
&lt;p&gt;Domain-specific embeddings mean that vector representations of texts are not generated with generally trained embedding models, but with models adapted to the technical language and content of a specific industry or company. General models are trained on very large, unspecific text corpora, including books, websites, Wikipedia and other sources. They understand everyday language and many standard concepts, but often miss the nuances in, for example, legal contracts, technical manuals or medical reports. Domain-specific embeddings are created either by fine-tuning an existing model with data from the respective domain or by training a custom model on a corpus of internal documents, guidelines, protocols and manuals.&lt;/p&gt;</description></item><item><title>Part 1: Strategies for Better Results with RAG</title><link>https://aaron.de/en/posts/teil-1-strategien-fuer-bessere-ergebnisse-mit-retrieval-augmented-generation-rag/</link><pubDate>Wed, 27 Aug 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/teil-1-strategien-fuer-bessere-ergebnisse-mit-retrieval-augmented-generation-rag/</guid><description>&lt;p&gt;Retrieval Augmented Generation, or RAG for short, combines the power of language models with a company’s specific knowledge. The approach makes it possible to incorporate internal documents and data into responses in a targeted way without losing control over one’s own information. As a result, RAG is increasingly seen as a key technology for deploying language models securely and with data sovereignty. In practice, however, it quickly becomes apparent that simple vector search in combination with an LLM is not sufficient to achieve truly consistent and high-quality results. To fully exploit the potential of RAG, additional methods and optimizations are necessary.&lt;/p&gt;</description></item><item><title>Fine-Tuning of a Llama-3.x Model via LoRA</title><link>https://aaron.de/en/posts/fine-tuning-eines-llama-3-x-modells-via-lora/</link><pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/fine-tuning-eines-llama-3-x-modells-via-lora/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Large language models (LLMs) like Llama 3.x are trained in an elaborate pretraining process on massive amounts of text. This process typically takes place on specialized hardware such as GPUs and TPUs, which are optimized for parallel computation of large neural networks.&lt;/p&gt;
&lt;p&gt;After pretraining is complete, the model parameters are frozen and can no longer be directly changed during normal operation. This means that you cannot simply &amp;ldquo;correct&amp;rdquo; the model or reprogram it with simple interventions. Content such as facts about historical figures is not stored in individual, explicitly addressable neurons. Instead, such information is statistically distributed across the entirety of the model weights. This makes targeted modifications considerably more difficult, as there are no clearly identifiable storage locations for specific facts.&lt;/p&gt;</description></item><item><title>How an Ontology Improves the Answer Quality of LLMs</title><link>https://aaron.de/en/posts/llms-und-ontologien-wie-eine-ontologie-die-antwortqualitaet-verbessert/</link><pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/llms-und-ontologien-wie-eine-ontologie-die-antwortqualitaet-verbessert/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;With the advent of large language models (LLMs) such as GPT, many people wonder how to provide these models with structured, precise information. Although LLMs are capable of answering questions very convincingly, many of their answers are based solely on statistical language probabilities, not on logical inference or explicit factual knowledge. This is where the use of an ontology offers systematic added value.&lt;/p&gt;
&lt;p&gt;In the following article, a fictional mission in the „Lord of the Rings“-Universe is used to demonstrate how an ontology can support an LLM in answering complex questions.&lt;/p&gt;</description></item><item><title>Unstructured.io Tutorial</title><link>https://aaron.de/en/posts/unstructured-io-tutorial/</link><pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/unstructured-io-tutorial/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Unstructured.io is an open-source framework for the structured preparation of unstructured documents such as PDFs, Word files, HTML pages, or emails. Its goal is to extract semantically usable content from these heterogeneous formats—such as headings, paragraphs, tables, or lists—and convert it into a unified, machine-readable format. The main use case lies in preparing text data for downstream AI processing, particularly for systems with retrieval-augmented generation (RAG).&lt;/p&gt;
&lt;p&gt;The typical application is document analysis, knowledge management, or preparing inputs for embedding models. Multiple processing steps are employed. These four steps form the &lt;strong&gt;core of the Unstructured.io pipeline&lt;/strong&gt; and are executed in every regular use of the library.&lt;/p&gt;</description></item><item><title>Custom-Built RAG Pipeline</title><link>https://aaron.de/en/posts/rag-pipeline-im-eigenbau-pdf-gestuetzte-chat-abfragen/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/rag-pipeline-im-eigenbau-pdf-gestuetzte-chat-abfragen/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Retrieval Augmented Generation (RAG) is a technique in natural language processing (NLP) where a language model is combined with external knowledge to produce better and more precise answers.&lt;br&gt;
A language model like GPT is queried not only on its internal knowledge (training) but also receives context-specific information from an external knowledge source, e.g. a document collection or database.&lt;/p&gt;
&lt;p&gt;This article explains the structure and development of a RAG pipeline as part of a learning project. The goal was to develop a system that processes the content of a PDF document and enables an interactive chat to ask questions about this document. The application was born from the desire to practically understand the functionality and interplay of the individual components of a RAG application.&lt;/p&gt;</description></item><item><title>Linguistic Text Analysis: A Hybrid Pipeline with Stanza, DeepSeek and Transformers + Spacy Comparison</title><link>https://aaron.de/en/posts/linguistische-textanalyse-mit-stanza-deepseek/</link><pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/linguistische-textanalyse-mit-stanza-deepseek/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;/h1&gt;
&lt;p&gt;Stanza is an open source NLP library from Stanford University based on modern neural networks. It enables comprehensive linguistic analysis of texts in over 70 languages. Stanza&amp;rsquo;s goal is to provide a complete pipeline system that includes all common processing steps: tokenization, part-of-speech tagging (POS), lemmatization, syntactic analysis (dependencies and constituency) as well as Named Entity Recognition (NER).&lt;/p&gt;
&lt;p&gt;Stanza is suitable both for research purposes and for production applications, such as text classification, information extraction or preprocessing texts for retrieval-augmented generation (RAG). The models are pretrained but can also be fine-tuned. Internally, Stanza is based on the PyTorch framework.&lt;/p&gt;</description></item><item><title>Model Context Protocol (MCP)</title><link>https://aaron.de/en/posts/model-context-protokoll-mcp/</link><pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/model-context-protokoll-mcp/</guid><description>&lt;p&gt;In traditional software applications, workflows are strictly predefined. Functions are called in a specific order, inputs and outputs are clearly defined, and decisions are made through fixed rules that the developer has embedded in the code. The application itself makes no decisions; it merely follows a rigid sequence.&lt;/p&gt;
&lt;p&gt;If you want to integrate a language model like GPT into a system, you normally have to ensure that all required information is obtained and prepared in advance. For example: When current weather data is needed, you write a function that queries an API, processes the response, and passes the text to the model. The model only receives the final text snippet with the weather data. It does not know where the data comes from, which function provided it, or whether it is up to date. It also does not decide on its own when to call a specific function. It simply responds based on the provided context.&lt;/p&gt;</description></item><item><title>MCP-Controlled Workflow in n8n</title><link>https://aaron.de/en/posts/mcp-gesteuerter-workflow-in-n8n/</link><pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/mcp-gesteuerter-workflow-in-n8n/</guid><description>&lt;p&gt;This post describes the setup of an AI-driven agent system in &lt;a href="https://n8n.io"&gt;n8n&lt;/a&gt; that, via the &lt;a href="https://github.com/modelcontextprotocol/servers"&gt;Model Context Protocol (MCP)&lt;/a&gt;, identifies, selects, and executes external tools.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/n8n_overview.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Objective&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A user provides a natural language input, e.g.: &amp;ldquo;Give me the 10 largest cities in Germany, in descending order by area. Also search the internet to verify your result.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The agent recognizes the intent, checks available tools, decides on a tool selection, performs a web search if needed, and generates an appropriate response. The underlying control concept is based on MCP, a protocol for structured tool communication in agent-based systems.&lt;/p&gt;</description></item><item><title>RAGFlow Tutorial</title><link>https://aaron.de/en/posts/ragflow-tutorial/</link><pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ragflow-tutorial/</guid><description>&lt;p&gt;RAGFlow is a framework for the structured implementation of Retrieval Augmented Generation (RAG) applications. It offers a modular architecture in which individual processing steps such as document import, text preparation, vectorization, indexing, and answer generation can be configured and executed separately.&lt;/p&gt;
&lt;h1 id="models"&gt;Models&lt;/h1&gt;
&lt;p&gt;The platform supports different storage solutions for vector data and allows the connection of various LLMs. The list of supported LLMs can be found &lt;a href="https://ragflow.io/docs/dev/supported_models"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/Supported_Models.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Column&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Meaning&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Provider&lt;/td&gt;
&lt;td&gt;Provider or source of the model. Can be a cloud service (e.g. OpenAI) or a model developer (e.g. Cohere, BAAI).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;Supports conversational language models used for conversation or answer generation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embedding&lt;/td&gt;
&lt;td&gt;Provides embedding models for converting texts into vectors for semantic search or classification.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rerank&lt;/td&gt;
&lt;td&gt;Models for reranking already found hits to display more relevant results at the top.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Img2txt&lt;/td&gt;
&lt;td&gt;Models for image description: convert an image into a descriptive text.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speech2txt&lt;/td&gt;
&lt;td&gt;Models for converting spoken language into written text (ASR - Automatic Speech Recognition).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TTS&lt;/td&gt;
&lt;td&gt;Text-to-Speech: converts written text into synthetic speech. No support yet in the table.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OpenAI provides no support for the &amp;ldquo;Rerank&amp;rdquo; function.&lt;/p&gt;</description></item><item><title>Hugging Face CLI Practical Guide</title><link>https://aaron.de/en/posts/hugging-face-cli-praxisleitfaden/</link><pubDate>Mon, 19 May 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/hugging-face-cli-praxisleitfaden/</guid><description>&lt;p&gt;This guide is based on the Hugging Face CLI from version 0.34.4 onwards. In this version the old syntax huggingface-cli is replaced by the new command hf. I created this cheat sheet to have a concise and clear reference to the Hugging Face CLI. Instead of having to search the official documentation, I can find the most important commands, descriptions and examples here at a glance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is Hugging Face?&lt;/strong&gt;&lt;br&gt;
Hugging Face is a platform for machine learning. At its core is the Hugging Face Hub, a public and private repository for AI models, datasets and applications (Spaces). Developers can share, download and reuse models there. In addition to the hub, Hugging Face also offers libraries such as transformers, datasets and diffusers that make it easier to use AI models in practice. The hub thus serves both as a marketplace and as an infrastructure for collaborative development.&lt;/p&gt;</description></item><item><title>ComfyUI Tutorial</title><link>https://aaron.de/en/posts/comfyui-tutorial/</link><pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/comfyui-tutorial/</guid><description>&lt;p&gt;Artificial intelligence has acquired the ability to create detailed and complex images from pure text descriptions. The technological foundation for this comprises deep AI models that function as digital engines for image generation. They translate written concepts into visual data and generate entirely new graphics on that basis. To precisely control the image generation, users need an appropriate user interface. This is where ComfyUI comes into play. ComfyUI is a flexible and powerful graphical interface designed for working with a variety of AI models. Unlike other programs that hide their processes behind simple menus, ComfyUI uses a modular node-based approach. Each step of image generation, from selecting the model to the finished image, is represented as an individual building block. The user visually connects these blocks and thereby constructs the entire workflow themselves. This method offers transparency and control over the entire generation process and enables users to steer the functioning of the underlying AI down to the smallest detail.&lt;/p&gt;</description></item><item><title>Analysis of unstructured documents with "Unstructured"</title><link>https://aaron.de/en/posts/analyse-strukturierter-dokumente-mit-unstructured/</link><pubDate>Wed, 14 May 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/analyse-strukturierter-dokumente-mit-unstructured/</guid><description>&lt;p&gt;Within this test, the open-source framework &lt;a href="https://github.com/Unstructured-IO/unstructured"&gt;unstructured&lt;/a&gt; is used to evaluate the extraction process of text from structured documents. The goal is to assess how suitable unstructured is for practical use in AI-based information systems – especially with respect to text extraction, semantic preparation (chunking/tokenization) and subsequent embedding generation for vector-based retrieval systems.&lt;/p&gt;
&lt;p&gt;Here is an example of a PDF file that was used for analysis with unstructured.&lt;/p&gt;
&lt;p&gt;&lt;a href="pm-partnerschaft-stackit.pdf"&gt;pm-partnerschaft-stackit&lt;/a&gt;&lt;a href="pm-partnerschaft-stackit.pdf"&gt;Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To run the unstructured library, the official Docker image is used. It contains all required dependencies (e.g. Tesseract, Poppler, Python libraries) and allows immediate use without a local Python installation.&lt;/p&gt;</description></item><item><title>Digital Shopping List with React &amp; Supabase</title><link>https://aaron.de/en/posts/digitale-einkaufsliste-mit-react-supabase/</link><pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/digitale-einkaufsliste-mit-react-supabase/</guid><description>&lt;p&gt;I started this project to &lt;strong&gt;learn React in a practical way&lt;/strong&gt; – and not just follow tutorials. I wanted to implement a realistic frontend scenario that includes typical requirements like user authentication, data management, user interactions, and dynamic UI components.&lt;/p&gt;
&lt;p&gt;Instead of building my own backend, I consciously chose &lt;strong&gt;Supabase&lt;/strong&gt; – a backend-as-a-service platform that is ideal for learning and prototyping purposes. This allowed me to fully focus on the &lt;strong&gt;React ecosystem&lt;/strong&gt;, including routing, state, component structure, and responsive UI.&lt;/p&gt;</description></item><item><title>Emotional Music Evaluation with MindsDB and GPT-4 Based on Spotify Data</title><link>https://aaron.de/en/posts/emotionale-musikbewertung-mit-mindsdb-und-gpt-4-anhand-von-spotify-daten/</link><pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/emotionale-musikbewertung-mit-mindsdb-und-gpt-4-anhand-von-spotify-daten/</guid><description>&lt;p&gt;&lt;a href="https://mindsdb.com"&gt;MindsDB&lt;/a&gt; is an open-source platform designed to enable machine learning, time series analysis, and the integration of large language models directly into traditional database workflows. The platform makes AI functionality accessible through simple SQL queries without requiring a separate machine learning infrastructure.&lt;/p&gt;
&lt;p&gt;In this post we introduce one of the many features of MindsDB: calling a large language model (GPT-4) via a predefined template that is dynamically populated with database values. The goal is to automatically assess the emotional impact of songs from an existing Spotify dataset. Only a portion of MindsDB’s full feature set is used to demonstrate the basic workflow and the interaction between the database and the LLM.&lt;/p&gt;</description></item><item><title>Real-time Facial Animation for Metahumans with Live Link Face in Unreal Engine 5</title><link>https://aaron.de/en/posts/echtzeit-gesichtsanimation-fuer-metahumans-mit-live-link-face-in-unreal-engine-5/</link><pubDate>Sun, 20 Apr 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/echtzeit-gesichtsanimation-fuer-metahumans-mit-live-link-face-in-unreal-engine-5/</guid><description>&lt;p&gt;The transmission of facial expressions in real time to digital characters is an important component of modern animation and visualization processes. With Epic Games&amp;rsquo; Live Link Face App and Unreal Engine 5, the facial movements of a real person can be precisely transferred to a digital Metahuman character. A prerequisite for this is an iPhone with an integrated TrueDepth camera that is connected via a local network to the computer running Unreal Engine. This tutorial shows how to set up the Live Link Face App and connect it to the engine, how to correctly prepare the Metahuman, and how to finally transmit the facial data live. The goal is to establish a working real-time connection in which the Metahuman moves synchronously with the facial expressions of the real person.&lt;/p&gt;</description></item><item><title>Omniverse: Audio2Face Tutorial</title><link>https://aaron.de/en/posts/omniverse-audio2face-tutorial/</link><pubDate>Sat, 12 Apr 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/omniverse-audio2face-tutorial/</guid><description>&lt;p&gt;Audio2Face is an AI-powered tool within NVIDIA Omniverse specifically designed to generate realistic facial animations based solely on audio. It is part of the Omniverse platform, which provides a real-time collaboration and simulation environment for 3D workflows. Audio2Face uses a neural network to automatically convert spoken language into lively facial expressions and movements. Typically, Audio2Face is used to make characters in games, films, or digital avatars speak without complex keyframe animation. The generated movements can either be used directly or transferred to custom 3D characters, which is particularly interesting for virtual productions, digital twins, or interactive applications.&lt;/p&gt;</description></item><item><title>AI-powered Event Agent for Events</title><link>https://aaron.de/en/posts/ki-gestuetzter-event-agent-fuer-veranstaltungen/</link><pubDate>Fri, 11 Apr 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ki-gestuetzter-event-agent-fuer-veranstaltungen/</guid><description>&lt;p&gt;In this project, I developed an &lt;strong&gt;AI agent&lt;/strong&gt; that automatically analyzes events from the NRW region and filters them according to personal criteria. The goal was to filter out only those events that are truly relevant – based on an individually defined prompt.&lt;/p&gt;
&lt;p&gt;This image shows the list of over 350 events taking place on a single day in Düsseldorf. Across all of NRW, there are several thousand events in one day.&lt;/p&gt;</description></item><item><title>LLMs Are Not a Cure-All: Practical Test for Music Classification Based on Metadata</title><link>https://aaron.de/en/posts/llms-sind-kein-allheilmittel-praxistest-zur-musik-klassifikation-anhand-von-metadaten/</link><pubDate>Thu, 03 Apr 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/llms-sind-kein-allheilmittel-praxistest-zur-musik-klassifikation-anhand-von-metadaten/</guid><description>&lt;p&gt;The question was whether current Large Language Models (LLMs) such as GPT-4 or DeepSeek are able to automatically and reliably classify music tracks, specifically salsa songs, based on title, artist, lyrics, and metadata into „Salsa Cubana“ or „Salsa Línea“. It was known that the available information (metadata, genre tags, lyrics) is incomplete and partly inconsistent. The test was explicitly designed to determine the practical limits of today&amp;rsquo;s LLMs in this context.&lt;/p&gt;</description></item><item><title>Omniverse Tutorial</title><link>https://aaron.de/en/posts/omniverse-tutorial/</link><pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/omniverse-tutorial/</guid><description>&lt;h3 id="what-is-omniverse"&gt;&lt;strong&gt;What is Omniverse?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Omniverse is a platform from NVIDIA that allows you to create, connect, and simulate virtual 3D worlds – all in real time. Omniverse is an open platform for developers, designers, engineers, researchers, and creatives to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Connect 3D applications (e.g. Blender, Maya, Unreal Engine)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Collaborate in a single scene – live and simultaneously.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create physically realistic simulations and AI-driven applications.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-is-omniverse-used-for"&gt;&lt;strong&gt;What is Omniverse used for?&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Design, visualization &amp;amp; simulation of objects such as vehicles in real time.&lt;/p&gt;</description></item><item><title>Set up Wan 2.1 with ComfyUI including local GPU support</title><link>https://aaron.de/en/posts/wan-2-1-mit-comfyui-inkl-gpu-support-lokal-einrichten/</link><pubDate>Sat, 01 Mar 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/wan-2-1-mit-comfyui-inkl-gpu-support-lokal-einrichten/</guid><description>&lt;p&gt;ComfyUI is a node-based user interface for controlling and modifying AI models for image and video creation. &lt;strong&gt;Wan 2.1&lt;/strong&gt; is a &lt;strong&gt;text-to-video model (T2V)&lt;/strong&gt; specifically developed for generating videos based on text inputs.&lt;/p&gt;
&lt;p&gt;This guide provides step-by-step instructions on how &lt;strong&gt;to set up ComfyUI with Wan 2.1&lt;/strong&gt; locally. Each section explains the required components, why they are necessary, and how to install them correctly. This guide assumes &lt;strong&gt;Python 10&lt;/strong&gt; and a GPU with &lt;strong&gt;CUDA support&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Prompt Decorators: Steering AI Responses Precisely</title><link>https://aaron.de/en/posts/prompt-decorators-ki-antworten-gezielt-steuern/</link><pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/prompt-decorators-ki-antworten-gezielt-steuern/</guid><description>&lt;p&gt;AI models often produce unstructured or imprecise answers. Anyone who wants better results must adjust their prompts accordingly. One way to do this efficiently is with &lt;strong&gt;prompt decorators&lt;/strong&gt; – clear instructions at the beginning of a prompt that control the AI’s response behavior.&lt;/p&gt;
&lt;p&gt;In this post, I show how to teach the AI to understand these decorators and how to use them afterward.&lt;/p&gt;
&lt;h3 id="explain-prompt-decorators-to-the-ai"&gt;&lt;strong&gt;Explain Prompt Decorators to the AI&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The AI is given a clear definition of the decorators, for example „+++StructuredAnswer“, so that it understands their meaning. The instruction to apply them in future answers ensures that they don’t apply to just a single question. If the AI doesn’t have long-term memory, this introduction must be repeated in each new session.&lt;/p&gt;</description></item><item><title>AI Agent Demo: Advanced Spam Detection via ChatGPT</title><link>https://aaron.de/en/posts/ki-agent-demo-erweiterte-spam-erkennung-via-chatgpt/</link><pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ki-agent-demo-erweiterte-spam-erkennung-via-chatgpt/</guid><description>&lt;p&gt;In this project, I developed a Thunderbird extension that uses ChatGPT for advanced spam detection. Incoming emails are automatically analyzed and classified according to various criteria. A local Flask server handles the communication with ChatGPT and assesses whether a message should be classified as spam. The implementation serves as a demo to explore the possibilities of AI-powered filtering in Thunderbird.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/grafik-9.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Workflow&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;As soon as Thunderbird receives a new email, the extension becomes active. The message is intercepted before it is viewed by the user. The extension extracts the subject, the sender, and the email body.&lt;/p&gt;</description></item><item><title>Run Ollama including models with NVIDIA GPU support offline under Docker + OpenWebUI</title><link>https://aaron.de/en/posts/ollama-inkl-modell-mit-nvidia-gpu-unterstuetzung-unter-docker-und-win-11-ausfuehren-openwebui/</link><pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ollama-inkl-modell-mit-nvidia-gpu-unterstuetzung-unter-docker-und-win-11-ausfuehren-openwebui/</guid><description>&lt;p&gt;Here Ollama was run with NVIDIA-GPU-support under Docker on a Windows-11-system. OpenWebUI was used as a user-friendly interface to operate AI models locally. OpenWebUI offers the advantage that users can easily switch between different models, manage requests and conveniently control AI usage through a graphical interface. It also provides a better overview of running instances and facilitates testing different models without manual configuration changes.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/grafik-2.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;h3 id="install-wsl-2"&gt;Install WSL 2&lt;/h3&gt;
&lt;h3 id="install-nvidia-cuda-drivers"&gt;&lt;strong&gt;Install NVIDIA CUDA Drivers&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;In order for Docker containers to access the GPU, the NVIDIA Container Runtime is required. This enables faster and more efficient computation of AI models, since compute-intensive processes are handled not by the CPU, but by the more powerful GPU.&lt;br&gt;
&lt;a href="https://developer.nvidia.com/cuda/wsl"&gt;https://developer.nvidia.com/cuda/wsl&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Neural Network with MNIST and TensorFlow</title><link>https://aaron.de/en/posts/neuronales-netzwerk-mit-mnist-und-tensorflow/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/neuronales-netzwerk-mit-mnist-und-tensorflow/</guid><description>&lt;p&gt;This code shows how an artificial neural network is trained with the MNIST dataset to classify handwritten digits (0-9). The goal is for the model to be able to predict which digit is shown based on the image data.&lt;/p&gt;
&lt;p&gt;This is achieved by:&lt;br&gt;
1. Loading and preprocessing of the MNIST image data.&lt;br&gt;
2. Creating a neural network with multiple layers (Layers).&lt;br&gt;
3. Training the network with training data.&lt;br&gt;
4. Evaluating the model&amp;rsquo;s performance on test data.&lt;br&gt;
5. Testing the model on new sample data.&lt;/p&gt;</description></item><item><title>Using Ollama locally with llama3.2/3.3/DeepSeekv3 + REST call.</title><link>https://aaron.de/en/posts/ollama-mit-llama3-2-3-3-lokal-installieren/</link><pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ollama-mit-llama3-2-3-3-lokal-installieren/</guid><description>&lt;ol&gt;
&lt;li&gt;Download the Ollama LLM runtime environment &lt;a href="https://ollama.com/"&gt;download&lt;/a&gt; and install it. After installation the server can be accessed at &lt;a href="http://127.0.0.1:11434/"&gt;http://127.0.0.1:11434/&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;img src="images/grafik.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;3. Show the list of installed models. The list should be empty.&lt;/p&gt;
&lt;p&gt;ollama list&lt;/p&gt;
&lt;p&gt;4. Download the llama3.2 LLM and DeepSeekv3 (404 GB HD &amp;amp; 413 GB RAM).&lt;/p&gt;
&lt;p&gt;ollama pull llama3.2 ollama pull deepseek-v3&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/Ollama_003.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;On the Meta website you can find the current versions of the LLM.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/Ollama_006.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;5. Start llama3.&lt;/p&gt;</description></item><item><title>Spring AI / OpenAI Tutorial</title><link>https://aaron.de/en/posts/spring-ai-openai-tutorial/</link><pubDate>Sun, 01 Dec 2024 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/spring-ai-openai-tutorial/</guid><description>&lt;h1 id="send-a-question-to-openai-via-spring-ai-and-display-the-answer"&gt;Send a question to OpenAI via Spring AI and display the answer&lt;/h1&gt;
&lt;p&gt;Create OpenAI key&lt;br&gt;
&lt;a href="https://platform.openai.com/settings/organization/api-keys"&gt;https://platform.openai.com/settings/organization/api-keys&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then set the key as an environment variable: OPENAI_API_KEY&lt;/p&gt;
&lt;p&gt;Create a new Spring Boot project:&lt;br&gt;
&lt;a href="https://start.spring.io/"&gt;https://start.spring.io/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/grafik-7.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Within the Spring Boot application, i.e., in the &amp;ldquo;application.properties&amp;rdquo; file, reference the OpenAI key, i.e., environment variable (OPENAI_API_KEY).&lt;/p&gt;
&lt;p&gt;After creating the interface and classes, the project structure should look as follows:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/grafik-9.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;After running the unit test, the answer to the question &amp;ldquo;Who would win in a fight between Superman and Chuck Norris?&amp;rdquo; should be displayed. In this case:&lt;/p&gt;</description></item><item><title>Whisper: Automatic Transcription of Videos to Text</title><link>https://aaron.de/en/posts/whisper-automatische-transkription-von-videos-in-text/</link><pubDate>Wed, 13 Nov 2024 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/whisper-automatische-transkription-von-videos-in-text/</guid><description>&lt;p&gt;In this post, I explain how you can use &lt;strong&gt;Whisper&lt;/strong&gt;, an AI-based tool from OpenAI, for automatic transcription of videos. Whisper is capable of accurately converting spoken language in various languages – including German – into text. This makes it ideal for transcribing, for example, interviews, lectures, or personal videos.&lt;/p&gt;
&lt;h1 id="install-python-310"&gt;&lt;strong&gt;Install Python 3.10&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Whisper requires the Python programming language and needs a version between 3.7 and 3.10. In this guide, we use Python 3.10 to avoid compatibility issues.&lt;/p&gt;</description></item><item><title>Setting up DNS over HTTPS (DoH) within Firefox</title><link>https://aaron.de/en/posts/dns-ueber-https-doh-innerhalb-von-firefox-einstellen/</link><pubDate>Wed, 30 Oct 2024 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/dns-ueber-https-doh-innerhalb-von-firefox-einstellen/</guid><description>&lt;p&gt;Access advanced Firefox settings: &lt;strong&gt;about:config&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Set &lt;strong&gt;network.trr.mode&lt;/strong&gt; from 0 to &lt;strong&gt;2&lt;/strong&gt;.&lt;br&gt;
Set &lt;strong&gt;network.trr.uri&lt;/strong&gt; to &lt;strong&gt;&lt;a href="https://mozilla.cloudflare-dns.com/dns-query"&gt;https://mozilla.cloudflare-dns.com/dns-query&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;network.trr.mode is a configuration setting in Firefox that controls the use of DNS over HTTPS (DoH). TRR stands for Trusted Recursive Resolver and refers to the use of DoH to send DNS queries over an encrypted HTTPS connection instead of traditional, unencrypted DNS queries.&lt;/p&gt;
&lt;p&gt;0 – DoH is disabled:&lt;br&gt;
Firefox uses only traditional, unencrypted DNS (over UDP or TCP) and sends no DNS queries over HTTPS.&lt;/p&gt;</description></item><item><title>Embedding via ChromaDB Vector Database</title><link>https://aaron.de/en/posts/embedding-via-chromadb-vektordatenbank/</link><pubDate>Fri, 26 Jul 2024 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/embedding-via-chromadb-vektordatenbank/</guid><description>&lt;p&gt;This blog post covers the concept of embeddings and vector databases. Initially, it explains what embeddings are and how they are used in the field of Natural Language Processing (NLP). Then, an explanation of vectors in a three-coordinate space and their extension to multidimensional vectors follows. Finally, ChromaDB is introduced, a specialized vector database.&lt;/p&gt;
&lt;h1 id="what-is-an-embedding"&gt;What is an Embedding?&lt;/h1&gt;
&lt;p&gt;An &lt;strong&gt;Embedding&lt;/strong&gt; is a technique in the field of machine learning and data processing that aims to transform objects such as words, sentences, or documents into a continuous vector space. In this vector space, similar objects are represented by similar vectors, meaning they lie close together. Embeddings are frequently used to capture and analyze the semantic meaning of texts.&lt;/p&gt;</description></item><item><title>Chatbot UI via Streamlit</title><link>https://aaron.de/en/posts/chatbot-ui-via-streamlit/</link><pubDate>Sat, 20 Jul 2024 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/chatbot-ui-via-streamlit/</guid><description>&lt;p&gt;Forward requests 1:1 to ChatGPT via &lt;a href="https://streamlit.io/"&gt;Streamlit&lt;/a&gt; and display the response.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/grafik-6.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;streamlit run ChatUI.py&lt;/p&gt;</description></item><item><title>LangChain &amp; ChatGPT</title><link>https://aaron.de/en/posts/langchain-chatgpt-tutorial/</link><pubDate>Thu, 18 Jul 2024 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/langchain-chatgpt-tutorial/</guid><description>&lt;h1 id="send-message-via-langchain-to-chatgpt"&gt;&lt;strong&gt;Send Message via LangChain to ChatGPT&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Here we send a message via LangChain to ChatGPT and output the response.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="perform-chaining-with"&gt;&lt;strong&gt;Perform Chaining with &amp;ldquo;chain&amp;rdquo;&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Use &amp;ldquo;chain&amp;rdquo; to link the model and the parser together.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="template-prompts"&gt;&lt;strong&gt;Template Prompts&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Prepare the prompts using a template.&lt;/p&gt;
&lt;p&gt;Use the template:&lt;/p&gt;
&lt;p&gt;The target language is externalized:&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="further-chaining"&gt;&lt;strong&gt;Further Chaining&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Chain the template with model &amp;amp; parser:&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="server-via-fastapi--rest-endpoint"&gt;&lt;strong&gt;Server via FastAPI &amp;amp; REST Endpoint&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;Create a server via FastAPI. The server loads the application (app.py), handles the REST request and outputs the translation:&lt;/p&gt;</description></item><item><title>Elastic Stack (Filebeat, Logstash, Elasticearch, Kibana) Tutorial</title><link>https://aaron.de/en/posts/filebeat-logstash-tutorial/</link><pubDate>Mon, 18 Jul 2022 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/filebeat-logstash-tutorial/</guid><description>&lt;p&gt;&lt;strong&gt;Logstash&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Logstash is an Event Processing Framework. With Logstach you can import data from different kind of input frameworks and sources. In the next step you can filter an modify the data and in the last step you can export the data to different kind of formats and frameworks e.g. you can read the data from a framework like Beats and forward the data to Elasticsearch for storage and further processing. Within Logstash you can process, filter and map the different input and output formats:&lt;/p&gt;</description></item><item><title>Turn on/off Elgato Key Light via Windows shortcut/button</title><link>https://aaron.de/en/posts/turn-on-off-elgato-key-light-via-windows-shortcut-button/</link><pubDate>Fri, 27 May 2022 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/turn-on-off-elgato-key-light-via-windows-shortcut-button/</guid><description>&lt;p&gt;Search for the &lt;strong&gt;IP address&lt;/strong&gt; of your Key Light via &lt;a href="https://www.nirsoft.net/utils/wireless_network_watcher.html"&gt;Wireless Network Watcher&lt;/a&gt; e.g. 192.168.2.227&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/WirelessNetworkWatcher.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Your Key Light has a build in web server listening on port 9123 e.g. 192.168.2.227:9123&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/ElgatoWebserver.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Send a &lt;strong&gt;GET&lt;/strong&gt; request e.g. via &lt;a href="https://www.postman.com/"&gt;Postman&lt;/a&gt; to the following endpoint to get more information about your Key Light: http://192.168.2.227:9123**/elgato/lights**&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/KeyLight_Postman.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Turn on the light by using the following &lt;strong&gt;PUT&lt;/strong&gt; request. You need to set the &amp;lsquo;on&amp;rsquo; value to &amp;lsquo;1&amp;rsquo; instead of &amp;lsquo;0&amp;rsquo;.&lt;/p&gt;</description></item><item><title>Photography Basics + Sharp Long-Exposure- &amp; Landscape Shots</title><link>https://aaron.de/en/posts/fotografie-grundlagen-scharfe-langzeitbelichtungsaufnahmen-scharfe-landschaftsaufnahmen/</link><pubDate>Sat, 29 Jan 2022 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/fotografie-grundlagen-scharfe-langzeitbelichtungsaufnahmen-scharfe-landschaftsaufnahmen/</guid><description>&lt;figure&gt;
&lt;p&gt;
&lt;img src="images/13591624245_30ba853a7f_o.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Better quality: &lt;a href="https://www.flickr.com/photos/aaron_kreis/13591624245/"&gt;https://www.flickr.com/photos/aaron_kreis/13591624245/&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;p&gt;
&lt;img src="images/35959541982_b61a823d14_o.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;figcaption&gt;
&lt;p&gt;Better quality: &lt;a href="https://www.flickr.com/photos/aaron_kreis/35959541982/"&gt;https://www.flickr.com/photos/aaron_kreis/35959541982/&lt;/a&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;To create razor-sharp long-exposure shots, you must know some basic concepts in photography and set or configure your camera accordingly. I’ll first explain the terms very superficially and later discuss the interaction of these terms, e.g., what influence the ISO value has on the exposure time, etc.&lt;br&gt;
Anyone who wants to create images like those shown above should know the following basic concepts and their dependencies on each other.&lt;/p&gt;</description></item><item><title>Angular &amp; Cumulocity IoT Platform</title><link>https://aaron.de/en/posts/angular-cumulocity-iot/</link><pubDate>Sat, 27 Apr 2019 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/angular-cumulocity-iot/</guid><description>&lt;p&gt;The following topics are covered here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installation of the Cumulocity IoT Platform (C8Y) CLI&lt;/li&gt;
&lt;li&gt;Project creation via the C8Y CLI&lt;/li&gt;
&lt;li&gt;Creation of components&lt;/li&gt;
&lt;li&gt;Setting up navigation (routing)&lt;/li&gt;
&lt;li&gt;Custom branding &amp;amp; using Bootstrap 4 instead of 3 (default)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;First of all, we need the Cumulocity (C8Y) Angular CLI (Command Line Interface). We can install the CLI as follows:&lt;br&gt;
&lt;strong&gt;npm install -g @c8y/cli&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Using the C8Y CLI, a new project can be created as follows:&lt;br&gt;
&lt;strong&gt;c8ycli new myApp&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Angular Tutorial</title><link>https://aaron.de/en/posts/angular-tutorial/</link><pubDate>Sat, 13 Apr 2019 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/angular-tutorial/</guid><description>&lt;p&gt;This tutorial shows how the following guestbook application can be implemented:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/screen1.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/bootstrap_page_2.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;The following applications are required:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;npm&lt;/li&gt;
&lt;li&gt;&lt;a href="https://angular.io/cli"&gt;Angular CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Installing Angular CLI&lt;br&gt;
&lt;strong&gt;npm install -g @angular/cli&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Generate new project (guestbook)&lt;br&gt;
&lt;strong&gt;ng new guestbook&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/create_first_project.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/create_first_project_2.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Install the Bootstrap library via the npm package manager:&lt;br&gt;
&lt;strong&gt;npm install &amp;ndash;save bootstrap&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Start developer server to test the application:&lt;br&gt;
&lt;strong&gt;ng serve&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The application is then available at the following address:&lt;br&gt;
&lt;a href="http://localhost:4200/"&gt;http://localhost:4200/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>MongoDB Tutorial</title><link>https://aaron.de/en/posts/mongodb-tutorial/</link><pubDate>Sun, 31 Mar 2019 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/mongodb-tutorial/</guid><description>&lt;p&gt;MongoDB (derived from the English humongous, „gigantic“) is a document-oriented NoSQL database written in the C++ programming language. Because the database is document-oriented, it can manage collections of JSON-like documents. This allows many applications to model data in a more natural way, since the data can be nested in complex hierarchies while still remaining queryable and indexable. [Wikipedia]&lt;/p&gt;
&lt;p&gt;The MongoDB server can be started with the following command. However, the following folder must first be created: C:\data\db. This is where the database data is stored.&lt;br&gt;
mongod&lt;/p&gt;</description></item><item><title>OAuth 2.0 Process (high level)</title><link>https://aaron.de/en/posts/oauth-2-0-prozess-high-level/</link><pubDate>Thu, 21 Mar 2019 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/oauth-2-0-prozess-high-level/</guid><description>&lt;p&gt;The first image shows how a user, with their device via a mobile application, e.g. an email program from an unknown company, wants to query emails (Resources) from, for example, a Google Server (Resource Server). For this purpose, the user must enter their Google credentials within the mobile application. However, this is associated with certain risks, since a) the email program can store the password and b) the application can use the password to, for example, access other Google services.&lt;/p&gt;</description></item><item><title>JMeter Tutorial - Part 1</title><link>https://aaron.de/en/posts/jmeter-tutorial-teil-1/</link><pubDate>Wed, 13 Feb 2019 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/jmeter-tutorial-teil-1/</guid><description>&lt;p&gt;&lt;a href="https://jmeter.apache.org/download_jmeter.cgi"&gt;Download&lt;/a&gt; JMeter&lt;/p&gt;
&lt;p&gt;Start JMeter:&lt;br&gt;
C:&lt;path&gt;\apache-jmeter-5.1.1\bin\ApacheJMeter.jar&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTP(S) Test Script Recorder&lt;/strong&gt;&lt;br&gt;
To test a website’s performance with JMeter, we first need to record the workflow (request/response). Recording the workflow over an HTTPS connection is done as follows:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/001_test_script.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;JMeter provides a proxy server that listens on port 8888 by default.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/003_jm_setup1.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Since we are not interested in images, CSS files, etc., we exclude these:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/exclude.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Since JMeter listens on port 8888, we need to forward internet traffic to the local proxy server:&lt;/p&gt;</description></item><item><title>Alexa Skill &amp; AWS Lambda &amp; npm Packages &amp; Cumulocity</title><link>https://aaron.de/en/posts/alexa-skill-aws-lambda/</link><pubDate>Wed, 30 Jan 2019 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/alexa-skill-aws-lambda/</guid><description>&lt;p&gt;The following example shows the creation of a simple Alexa application (Skill) using the &amp;lsquo;Alexa Developer Console&amp;rsquo; and &amp;lsquo;AWS Lambda&amp;rsquo;.&lt;/p&gt;
&lt;h2 id="alexa-developer-console"&gt;Alexa Developer Console&lt;/h2&gt;
&lt;p&gt;
&lt;img src="images/03_overview.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;The &amp;lsquo;Alexa Developer Console&amp;rsquo; helps us create the so-called &amp;lsquo;Interaction Model&amp;rsquo;. This model is used to describe the desired application and define the sentences and parameters to which Alexa should later respond. The programming of the logic is NOT done in the Developer Console but in AWS Lambda.&lt;/p&gt;</description></item><item><title>IBM Cloud &amp; Node-RED</title><link>https://aaron.de/en/posts/ibm-cloud-node-red/</link><pubDate>Sun, 27 Jan 2019 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ibm-cloud-node-red/</guid><description>&lt;p&gt;Objective&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setting up the Node-RED editor within IBM Cloud&lt;/li&gt;
&lt;li&gt;Sending messages via MQTT to a Node-RED MQTT node&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can request access to IBM Cloud at the following URL: &lt;a href="https://www.ibm.com/cloud-computing/bluemix/de"&gt;IBM Cloud&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Afterwards you can create a new &amp;lsquo;Resource&amp;rsquo; here.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/IBMCloud_01.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Within the catalog, various cloud resources (applications) are made available to us.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/IBM-Katalog.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;We select Node-RED. This application provides us with the Node-RED editor within IBM Cloud.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/IBMCloud_02.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/IBMCloud_03.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;After entering the initial data, we have to wait a brief moment until the application is installed with the desired settings in the cloud and made available to us.&lt;/p&gt;</description></item><item><title>MQTT + Cumulocity IoT Platform</title><link>https://aaron.de/en/posts/mqtt-cumulocity-iot-plattform/</link><pubDate>Sat, 26 Jan 2019 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/mqtt-cumulocity-iot-plattform/</guid><description>&lt;h2 id="mqtt-summary-source-wikipedia"&gt;MQTT Summary [Source: &lt;a href="https://de.wikipedia.org/wiki/MQTT"&gt;Wikipedia&lt;/a&gt;]&lt;/h2&gt;
&lt;p&gt;MQTT (Message Queuing Telemetry Transport) is an open messaging protocol for machine-to-machine communication (M2M) that enables the transmission of telemetry data in the form of messages between devices, e.g. sensors.&lt;br&gt;
The Internet Assigned Numbers Authority (IANA) reserves ports 1883 and 8883 for MQTT. MQTT messages can be encrypted using the TLS protocol.&lt;br&gt;
The MQTT specification distinguishes between TCP/IP-based and non-TCP/IP networks.&lt;br&gt;
MQTT is a client-server protocol. Clients send messages with a topic to the server (“broker”) after establishing a connection; the topic hierarchically classifies the message, for example Kitchen/Fridge/Temperature or Car/Wheel/3/AirPressure. Clients can subscribe to these topics, and the server forwards received messages to the respective subscribers.&lt;/p&gt;</description></item><item><title>TestCafe Example</title><link>https://aaron.de/en/posts/testcafe-beispiel/</link><pubDate>Thu, 13 Dec 2018 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/testcafe-beispiel/</guid><description>&lt;p&gt;Download &lt;a href="https://devexpress.github.io/testcafe/"&gt;Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Environment Configuration&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/3.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/4.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/5.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Example 1:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/6.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Example 2: Use of a page object&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/1.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;The login has been extracted into a page object:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/2.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;npm run test:firefox -c 8 runs the test in parallel across 8 Firefox instances.&lt;/p&gt;</description></item><item><title>IO-Link Device Description (high level)</title><link>https://aaron.de/en/posts/io-link-device-description-high-level-2/</link><pubDate>Tue, 04 Sep 2018 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/io-link-device-description-high-level-2/</guid><description>&lt;p&gt;Under the brand name &lt;strong&gt;IO-Link&lt;/strong&gt; there is a &lt;a href="https://de.wikipedia.org/wiki/Kommunikationssystem" title="Kommunikationssystem"&gt;communication system&lt;/a&gt; for the connection of &lt;a href="https://de.wikipedia.org/wiki/Smart-Sensor" title="Smart-Sensor"&gt;intelligent sensors&lt;/a&gt; and &lt;a href="https://de.wikipedia.org/wiki/Aktor" title="Aktor"&gt;actuators&lt;/a&gt; to an automation system standardized in &lt;a href="https://de.wikipedia.org/wiki/IEC_61131" title="IEC 61131"&gt;IEC 61131-9&lt;/a&gt; under the designation &lt;strong&gt;S&lt;/strong&gt;ingle-drop &lt;strong&gt;d&lt;/strong&gt;igital &lt;strong&gt;c&lt;/strong&gt;ommunication &lt;strong&gt;i&lt;/strong&gt;nterface for small sensors and actuators (SDCI). The standardization covers both the electrical connection data and a digital communication protocol through which the sensors and actuators exchange data with the automation system.&lt;/p&gt;
&lt;p&gt;An IO-Link system consists of an IO-Link master and one or more IO-Link devices, i.e. sensors or actuators. The IO-Link master provides the interface to the higher-level controller (&lt;a href="https://de.wikipedia.org/wiki/Speicherprogrammierbare_Steuerung" title="Speicherprogrammierbare Steuerung"&gt;PLC&lt;/a&gt;) and controls communication with the connected IO-Link devices.&lt;/p&gt;</description></item><item><title>Modbus: Summary of the Specification (high level)</title><link>https://aaron.de/en/posts/modbus-zusammenfassung-der-spezifikation-high-level/</link><pubDate>Sun, 12 Aug 2018 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/modbus-zusammenfassung-der-spezifikation-high-level/</guid><description>&lt;p&gt;The Modbus protocol is a communication protocol based on a master/slave or client/server architecture. It was introduced in 1979 by Gould-Modicon for communication with its programmable logic controllers. In industry, Modbus has become a de facto standard as it is an open protocol. Since 2007, the Modbus TCP version has been part of the IEC 61158 standard. [Wikipedia]&lt;/p&gt;
&lt;p&gt;As the following diagram shows, Modbus allows communication over different networks:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/Network_Architecture.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;</description></item><item><title>E.D.D.I - Open Source Chatbot Platform Installation</title><link>https://aaron.de/en/posts/e-d-d-i-open-source-chatbot-platform-tutorial/</link><pubDate>Wed, 08 Aug 2018 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/e-d-d-i-open-source-chatbot-platform-tutorial/</guid><description>&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt; E.D.D.I can be installed both from source and as a Docker container. I will perform the installation from source.&lt;/p&gt;
&lt;p&gt;First we need to install the following applications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html"&gt;Java SDK version 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/downloads"&gt;git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maven.apache.org/"&gt;Maven&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/download-center?jmp=nav#community"&gt;mongoDB Community Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Set environment variables for Java and Maven:
&lt;img src="images/eddi_umgebungsvariablen.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Set paths for Java, Maven, and MongoDB:
&lt;img src="images/eddi_path.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Test paths:
&lt;img src="images/eddi_versionen.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Download sources via git:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cd &lt;target folder&gt;&lt;/li&gt;
&lt;li&gt;git clone &lt;a href="https://github.com/labsai/EDDI.git"&gt;https://github.com/labsai/EDDI.git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img src="images/eddi_git_clone.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;Build application via Maven:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mvn clean install&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img src="images/eddi_mvn_build.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;</description></item><item><title>CoAP: Specification Summary (high level)</title><link>https://aaron.de/en/posts/coap-zusammenfassung-der-spezifikation-high-level/</link><pubDate>Thu, 12 Jul 2018 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/coap-zusammenfassung-der-spezifikation-high-level/</guid><description>&lt;p&gt;&lt;strong&gt;Constrained Application Protocol (CoAP)&lt;/strong&gt; CoAP is an Internet application protocol specified in RFC 7252. The protocol is used for communication of devices &amp;rsquo;nodes&amp;rsquo;, e.g. embedded devices, that consume very little energy (low-power) and operate in networks with increased data loss (lossy networks), for instance IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs). CoAP can also be used within Internet-based networks for mobile communication via SMS. CoAP is primarily used in the context of the Internet of Things (IoT) and Machine-to-Machine (M2M), as device data/sensor data of small size is usually transmitted. Since this type of data is transmitted at regular intervals (cycles), individual (lost) data packets have no significant impact on the processing systems or applications, such as an IoT platform that processes and/or graphically displays the corresponding sensor data (temperature, rotation speed, etc.).&lt;/p&gt;</description></item><item><title>Wireshark Tutorial</title><link>https://aaron.de/en/posts/wireshark-tutorial/</link><pubDate>Thu, 12 Jul 2018 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/wireshark-tutorial/</guid><description>&lt;p&gt;Wireshark is a free program for analyzing and graphically presenting data protocols (sniffer). Such data protocols are used by computers on various communication media such as the local network or USB. Capturing the communication can be useful for troubleshooting or evaluating the content of the communication. Wireshark displays both the protocol headers and the transported content during a capture. The program relies on the output of small helper programs like pcap or usbpcap for the graphical presentation, in order to capture the communication content on the respective transmission medium. [wikipedia]&lt;/p&gt;</description></item><item><title>MQTT: Summary of the Specification (high level)</title><link>https://aaron.de/en/posts/mqtt-spezifikation/</link><pubDate>Mon, 09 Jul 2018 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/mqtt-spezifikation/</guid><description>&lt;p&gt;&lt;strong&gt;MQTT&lt;/strong&gt; (&lt;strong&gt;Message Queue Telemetry Transport&lt;/strong&gt;) is an open messaging protocol for machine-to-machine communication (M2M) that enables the transmission of telemetry data in the form of messages between devices, despite high latency or constrained networks. Corresponding devices range from sensors and actuators, mobile phones, embedded systems in vehicles or laptops to fully developed computers. [Wikipedia]&lt;/p&gt;
&lt;p&gt;The information about the specification listed below comes, among other sources, from the current MQTT specification of &lt;a href="http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html"&gt;IBM&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>API Definition with Swagger and YAML</title><link>https://aaron.de/en/posts/api-definition-mit-hilfe-von-swagger-und-yaml/</link><pubDate>Sun, 03 Dec 2017 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/api-definition-mit-hilfe-von-swagger-und-yaml/</guid><description>&lt;p&gt;&lt;strong&gt;Swagger Installation:&lt;/strong&gt; npm install -g swagger&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Project Creation:&lt;/strong&gt; swagger project create &amp;lt;project_name&amp;gt;
&lt;img src="images/new_project.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Start Project:&lt;/strong&gt; swagger project start
&lt;img src="images/start_project.png" alt="" title="" loading="lazy" /&gt;
&lt;img src="images/curl.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit Project:&lt;/strong&gt; swagger project edit
&lt;img src="images/edit.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;The notation is defined within the &lt;a href="https://github.com/OAI/OpenAPI-Specification/tree/master/versions"&gt;OpenAPI Specification&lt;/a&gt;. Visual representation of the specification by Arnaud Lauret: &lt;a href="http://openapi-specification-visual-documentation.apihandyman.io/"&gt;Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/visual.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;API Definition&lt;/strong&gt; (excerpt):
&lt;img src="images/code.png" alt="" title="" loading="lazy" /&gt;
&lt;a href="https://github.com/netperformance/swagger/blob/master/api/swagger/swagger.yaml"&gt;Download swagger.yaml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify YAML code:&lt;/strong&gt; swagger project verify
&lt;img src="images/verify.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Include mock file&lt;/strong&gt; In the project folder under the &amp;lsquo;mocks&amp;rsquo; directory create a new mock file e.g. getAllEntries.js .&lt;/p&gt;</description></item><item><title>Spring Cloud Netflix Concepts</title><link>https://aaron.de/en/posts/spring-cloud-netflix-konzepte/</link><pubDate>Wed, 25 Oct 2017 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/spring-cloud-netflix-konzepte/</guid><description>&lt;p&gt;&lt;strong&gt;What is Spring?&lt;/strong&gt; The Spring Framework (short Spring) is an open source framework for the Java platform. The goal of the Spring Framework is to simplify development with Java/Java EE and promote good programming practices. Spring provides a holistic solution for building applications and their business logic with a wide range of functionality; decoupling of application components is the focus. [wikipedia]&lt;/p&gt;
&lt;p&gt;The main projects of &lt;a href="https://spring.io/projects"&gt;Spring&lt;/a&gt; include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spring Boot&lt;/li&gt;
&lt;li&gt;Spring Framework&lt;/li&gt;
&lt;li&gt;Spring Cloud Date Flow&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aaron.de/en/posts/spring-cloud-netflix-konzepte/#SpringCloud"&gt;Spring Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Spring Data&lt;/li&gt;
&lt;li&gt;Spring Integration&lt;/li&gt;
&lt;li&gt;Spring Batch&lt;/li&gt;
&lt;li&gt;Spring Security&lt;/li&gt;
&lt;li&gt;Spring HATEOAS&lt;/li&gt;
&lt;li&gt;spring REST Docs&lt;/li&gt;
&lt;li&gt;Spring AMQP&lt;/li&gt;
&lt;li&gt;Spring Mobile&lt;/li&gt;
&lt;li&gt;Spring for Android&lt;/li&gt;
&lt;li&gt;Spring Web Flow&lt;/li&gt;
&lt;li&gt;Spring Web Services&lt;/li&gt;
&lt;li&gt;Spring LDAP&lt;/li&gt;
&lt;li&gt;Spring Session&lt;/li&gt;
&lt;li&gt;Spring Shell&lt;/li&gt;
&lt;li&gt;Spring Flo&lt;/li&gt;
&lt;li&gt;Spring Kafka&lt;/li&gt;
&lt;li&gt;Spring Statemachine&lt;/li&gt;
&lt;li&gt;Sprin IO Platform&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition Spring includes the two community projects:&lt;/p&gt;</description></item><item><title>Microservice Example with Spring Boot &amp; Netflix (Zuul &amp; Eureka)</title><link>https://aaron.de/en/posts/microservices-netflix/</link><pubDate>Tue, 24 Oct 2017 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/microservices-netflix/</guid><description>&lt;p&gt;The application:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/Frontend.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;The following microservices were created:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;microservice-frontend&lt;/li&gt;
&lt;li&gt;microservice-backend&lt;/li&gt;
&lt;li&gt;microservice-proxy-zuul&lt;/li&gt;
&lt;li&gt;microservice-discovery-eureka&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Download: &lt;a href="Microservices.zip"&gt;Microservices&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eureka output:&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/Eureka.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;</description></item><item><title>BPMN 2.0: Cheat Sheet for the Basic Notation</title><link>https://aaron.de/en/posts/bpmn-2-0-spickzettel-fuer-die-basis-notation/</link><pubDate>Tue, 17 Oct 2017 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/bpmn-2-0-spickzettel-fuer-die-basis-notation/</guid><description>&lt;p&gt;Since I don&amp;rsquo;t model every day, this BPMN diagram with its deliberately simple notation serves me as an efficient memory aid for the most important fundamentals.&lt;/p&gt;
&lt;p&gt;
&lt;div style="width: 100%; height: 600px; border: 1px solid #333; border-radius: 8px; overflow: hidden; background: #fff;"&gt;
&lt;object id="svg-c5a3451089a9b67138e1565d546008c9" type="image/svg+xml" data="images/KFZ-Schadenabwicklung.svg" style="width: 100%; height: 100%;"&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.1/dist/svg-pan-zoom.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
document.getElementById('svg-c5a3451089a9b67138e1565d546008c9').addEventListener('load', function() {
svgPanZoom(this, {
zoomEnabled: true,
controlIconsEnabled: true,
fit: true,
center: true,
minZoom: 0.5,
maxZoom: 10
});
});
&lt;/script&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;div style="width: 100%; height: 600px; border: 1px solid #333; border-radius: 8px; overflow: hidden; background: #fff;"&gt;
&lt;object id="svg-67be2e57cdfb9e56db6ac7209b9fca66" type="image/svg+xml" data="https://aaron.de/posts/bpmn-2-0-spickzettel-fuer-die-basis-notation/images/KFZ-Schadenabwicklung.svg" style="width: 100%; height: 100%;"&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.1/dist/svg-pan-zoom.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
document.getElementById('svg-67be2e57cdfb9e56db6ac7209b9fca66').addEventListener('load', function() {
svgPanZoom(this, {
zoomEnabled: true,
controlIconsEnabled: true,
fit: true,
center: true,
minZoom: 0.5,
maxZoom: 10
});
});
&lt;/script&gt;
&lt;/p&gt;</description></item><item><title>DTLS (TCP vs. UDP)</title><link>https://aaron.de/en/posts/dtls/</link><pubDate>Fri, 23 Jun 2017 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/dtls/</guid><description>&lt;p&gt;&lt;strong&gt;Transport Layer Security (TLS)&lt;/strong&gt; known as Secure Sockets Layer (SSL) is an encryption protocol (based on x.509) for secure data transmission.&lt;/p&gt;
&lt;p&gt;Datagram Transport Layer Security (DTLS) is based on TLS and uses UDP instead of TCP. The difference between TLS and DTLS is equivalent to the difference between TCP and UDP.&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/tcp.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="images/udp.jpg" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;TLS requires the reliability of the data, among other things for decrypting data. If, for example, the data packets arrive out of order, TLS will not be able to perform an integrity check, since the check involves the sequence number of the packets, i.e. after packet N, packet N+1 is expected.&lt;/p&gt;</description></item><item><title>Ansible: Vagrant VM Provisioning</title><link>https://aaron.de/en/posts/vagrant-vm-provisionierung-via-ansible/</link><pubDate>Thu, 16 Mar 2017 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/vagrant-vm-provisionierung-via-ansible/</guid><description>&lt;p&gt;// Ansible is used for the configuration or provisioning of the following Vagrant VM infrastructure
&lt;img src="images/vms.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// Installation from &amp;ldquo;Personal Packages Archive (PPA)&amp;rdquo; sudo -s apt-get install software-properties-common apt-add-repository ppa:ansible/ansible apt-get update apt-get install ansible&lt;/p&gt;
&lt;p&gt;// Check ansible &amp;ndash;version ansible-playbook &amp;ndash;version ansible-galaxy &amp;ndash;help&lt;/p&gt;
&lt;p&gt;// Creation of a new/custom &amp;lsquo;hosts&amp;rsquo; or &amp;lsquo;inventory&amp;rsquo; file // for configuring the &amp;lsquo;dev&amp;rsquo; environment cd ~ mkdir ansible cd ansible vi dev
&lt;img src="images/skeleton-2.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// Creating a custom config file (ansible.cfg) // Reference to the inventory (hosts) file cd ~/ansible vi ansible.cfg [defaults] inventory=./dev
&lt;img src="images/ansible_cfg-1.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;</description></item><item><title>Vagrant: Basics</title><link>https://aaron.de/en/posts/vagrant/</link><pubDate>Thu, 09 Mar 2017 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/vagrant/</guid><description>&lt;h1 id="vm-management"&gt;&lt;strong&gt;VM-Management&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;// Help vagrant help vagrant help init&lt;/p&gt;
&lt;p&gt;// Initialize folder for Vagrant, i.e. generate &amp;lsquo;Vagrantfile&amp;rsquo; vagrant init hashicorp/precise64
&lt;img src="images/Initialisierung.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// Setup and configure an environment (Vagrant box) vagrant up
&lt;img src="images/vagrant_up.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// List installed boxes
&lt;img src="images/boxes_list.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// Windows folder
&lt;img src="images/boxes_folder.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// Login via SSH vagrant ssh
&lt;img src="images/ssh.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// VM sleep mode vagrant suspend
&lt;img src="images/suspend.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// Turn off VM (shutdown) vagrant halt
&lt;img src="images/halt.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;// Delete VM vagrant destroy
&lt;img src="images/destroy.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;h1 id="vagrant-box"&gt;&lt;strong&gt;Vagrant Box&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;// Install additional environments (Vagrant box), e.g. Ubuntu trusty
&lt;img src="images/box_page.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;</description></item><item><title>IPv4 vs. IPv6 (high level)</title><link>https://aaron.de/en/posts/ipv4-vs-ipv6-high-level/</link><pubDate>Tue, 25 Oct 2016 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/ipv4-vs-ipv6-high-level/</guid><description>&lt;p&gt;&lt;strong&gt;IPv4 Review&lt;/strong&gt;
&lt;img src="images/example.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IPv4 Header&lt;/strong&gt;
&lt;img src="images/v4Header.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Version: 4&lt;/li&gt;
&lt;li&gt;IHL (Internet Header Length): length of the header in 32-bit increments. Value 5 = 5 lines x 32 bits&lt;/li&gt;
&lt;li&gt;TOS (Type of Service): used to prioritize the IP packet (QoS)&lt;/li&gt;
&lt;li&gt;Total Length: 65535 bytes&lt;/li&gt;
&lt;li&gt;Identification, Flags &amp;amp; Fragment Offset. Control of fragmentation&lt;/li&gt;
&lt;li&gt;Flags: Bit 0 is reserved. If bit 1 is set to 0, fragmentation is allowed. If set to 1, not allowed. If bit 2 is set to 0, then it is the last fragment. If 1, more fragments follow.&lt;/li&gt;
&lt;li&gt;Time to Live: lifetime of the packet. Each router reduces the value by 1&lt;/li&gt;
&lt;li&gt;Protocol: e.g. TCP, UDP, ICMP, etc.&lt;/li&gt;
&lt;li&gt;Header Checksum: checksum. Rarely used.&lt;/li&gt;
&lt;li&gt;Source / Destination: destination and source address&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;IPv4 &amp;amp; IPv6 Header Differences&lt;/strong&gt;
&lt;img src="images/v4_vs_v6_Header.png" alt="" title="" loading="lazy" /&gt;
&lt;/p&gt;</description></item><item><title>R Programming: Analysis of the Titanic Data from Kaggle</title><link>https://aaron.de/en/posts/r-programmierung-auswertung-der-titanic-daten-von-kaggle/</link><pubDate>Tue, 18 Oct 2016 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/r-programmierung-auswertung-der-titanic-daten-von-kaggle/</guid><description>&lt;h4 id="reading-the-titanic-dataset"&gt;Reading the Titanic Dataset&lt;/h4&gt;
&lt;p&gt;[codesyntax lang=&amp;ldquo;php&amp;rdquo;]train &amp;lt;- read.csv(&amp;ldquo;C:/[PFAD]/train.csv&amp;rdquo;, header = TRUE)[/codesyntax]&lt;/p&gt;
&lt;h4 id="information-about-the-data-structure"&gt;Information about the data structure&lt;/h4&gt;
&lt;p&gt;[codesyntax lang=&amp;ldquo;php&amp;rdquo;]str (train)[/codesyntax]&lt;/p&gt;
&lt;p&gt;Result: &amp;rsquo;train.frame&amp;rsquo;: 891 obs. of 11 variables: $ survived: int 0 1 1 1 0 0 0 0 1 1 &amp;hellip; $ pclass : int 3 1 3 1 3 3 1 3 3 2 &amp;hellip; $ name : Factor w/ 891 levels &amp;ldquo;Abbing, Mr. Anthony&amp;rdquo;,..: 109 191 358 277 16 559 520 629 417 581 &amp;hellip; $ sex : Factor w/ 2 levels &amp;ldquo;female&amp;rdquo;,&amp;ldquo;male&amp;rdquo;: 2 1 1 1 2 2 2 2 1 1 &amp;hellip; $ age : num 22 38 26 35 35 NA 54 2 27 14 &amp;hellip; $ sibsp : int 1 1 0 1 0 0 0 3 0 1 &amp;hellip; $ parch : int 0 0 0 0 0 0 0 1 2 0 &amp;hellip; $ ticket : Factor w/ 681 levels &amp;ldquo;110152&amp;rdquo;,&amp;ldquo;110413&amp;rdquo;,..: 524 597 670 50 473 276 86 396 345 133 &amp;hellip; $ fare : num 7.25 71.28 7.92 53.1 8.05 &amp;hellip; $ cabin : Factor w/ 148 levels &amp;ldquo;&amp;rdquo;,&amp;ldquo;A10&amp;rdquo;,&amp;ldquo;A14&amp;rdquo;,..: 1 83 1 57 1 1 131 1 1 1 &amp;hellip; $ embarked: Factor w/ 4 levels &amp;ldquo;&amp;rdquo;,&amp;ldquo;C&amp;rdquo;,&amp;ldquo;Q&amp;rdquo;,&amp;ldquo;S&amp;rdquo;: 4 2 4 4 4 3 4 4 4 2 &amp;hellip;&lt;/p&gt;</description></item><item><title>R Programming: Collection of R Commands</title><link>https://aaron.de/en/posts/r-programmierung-r-befehle-sammlung/</link><pubDate>Tue, 18 Oct 2016 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/r-programmierung-r-befehle-sammlung/</guid><description>&lt;h2 id="comment"&gt;Comment&lt;/h2&gt;
&lt;h1 id="i-am-a-comment"&gt;I am a comment&lt;/h1&gt;
&lt;h2 id="output"&gt;Output&lt;/h2&gt;
&lt;p&gt;• print(&amp;ldquo;Hello World&amp;rdquo;) • cat(&amp;ldquo;Hello&amp;rdquo;, &amp;ldquo;World&amp;rdquo;)&lt;/p&gt;
&lt;h2 id="information-about-r-commands"&gt;Information about R Commands&lt;/h2&gt;
&lt;p&gt;# To find information about a specific command, e.g. &amp;lsquo;which&amp;rsquo; • apropos(&amp;ldquo;which&amp;rdquo;) • help(which) • ?which • RSiteSearch(&amp;ldquo;which&amp;rdquo;)&lt;/p&gt;
&lt;h2 id="command-history--exit"&gt;Command History &amp;amp; Exit&lt;/h2&gt;
&lt;p&gt;# Show previously entered commands history()&lt;/p&gt;
&lt;p&gt;# Exit RStudio q()&lt;/p&gt;
&lt;h2 id="working-directory"&gt;Working Directory&lt;/h2&gt;
&lt;p&gt;# Show my R working directory getwd()&lt;/p&gt;
&lt;h2 id="-change-working-directory"&gt;# Change Working Directory&lt;/h2&gt;
&lt;p&gt;# Set a new working directory&lt;/p&gt;
&lt;p&gt;setwd(&amp;lsquo;PFAD&amp;rsquo;)&lt;/p&gt;
&lt;h2 id="saving-r-commandsscript"&gt;Saving R Commands/Script&lt;/h2&gt;
&lt;h1 id="save-r-commands-or-r-script-locally-save-mytable-filecusersaxxkreisdesktopmytablerdata"&gt;Save R commands or R script locally save (myTable, file=&amp;ldquo;C:/Users/axxKreis/Desktop/myTable.RData&amp;rdquo;)&lt;/h1&gt;
&lt;h2 id="loading-r-commandsscript"&gt;Loading R Commands/Script&lt;/h2&gt;
&lt;p&gt;# Load persisted results load (file=&amp;ldquo;C:/Users/axxKreis/Desktop/myTable.RData&amp;rdquo;)&lt;/p&gt;</description></item><item><title>Windows: Recommended OpenSource and Freeware Applications</title><link>https://aaron.de/en/posts/windows-empfehlenswerte-opensource-und-freeware-anwendungen/</link><pubDate>Tue, 18 Oct 2016 00:00:00 +0000</pubDate><guid>https://aaron.de/en/posts/windows-empfehlenswerte-opensource-und-freeware-anwendungen/</guid><description>&lt;p&gt;&lt;strong&gt;Office – Desktop – Small Helpers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;( &lt;a href="https://atom.io/"&gt;Atom&lt;/a&gt; ) - Text editor ( &lt;a href="http://notepad-plus.sourceforge.net/"&gt;Notepad++&lt;/a&gt; ) - Text editor ( &lt;a href="http://www.izarc.org/"&gt;IZArc&lt;/a&gt; ) - Archive utility ( &lt;a href="http://www.mythicsoft.com/"&gt;Agent Ransack&lt;/a&gt; ) - Local search ( &lt;a href="http://de.openoffice.org/"&gt;OpenOffice&lt;/a&gt; ) - Office suite ( &lt;a href="http://dia-installer.de/"&gt;Dia&lt;/a&gt; ) - Diagram editor ( &lt;a href="http://kdiff3.sourceforge.net"&gt;KDiff3&lt;/a&gt; ) - Compares two files or directories ( &lt;a href="http://sourceforge.net/projects/winmerge"&gt;WinMerge&lt;/a&gt; ) - Compares two files or directories ( &lt;a href="http://www.dschensky.de/Software/Staff/tailme.htm"&gt;TailMe&lt;/a&gt; ) - Monitors file growth ( &lt;a href="http://www.baremetalsoft.com/baretail/index.php"&gt;BareTail&lt;/a&gt; ) - Monitors file growth ( &lt;a href="http://www.cygwin.com"&gt;Cygwin&lt;/a&gt; ) - Unix API emulator ( &lt;a href="http://www.inforapid.de/html/suchenersetzen.htm"&gt;InfoRapid&lt;/a&gt; ) - Full-text search tools ( &lt;a href="http://www.ego4u.de/de/lingopad"&gt;LingoPad&lt;/a&gt;) - Multilingual dictionary ( &lt;a href="http://home.snafu.de/tilman/xenulink.html"&gt;Xenu&amp;rsquo;sLink Sleuth&lt;/a&gt; ) - Detects dead links ( &lt;a href="http://www.spadixbd.com/freetools/jruler.htm"&gt;JR Screen Ruler&lt;/a&gt; ) - Desktop ruler ( &lt;a href="http://freemind.sourceforge.net"&gt;FreeMind&lt;/a&gt;) - Mind mapping tool ( &lt;a href="http://dm2.sourceforge.net"&gt;DM2&lt;/a&gt; ) - Window control (transparency, bring windows to front, etc.) ( &lt;a href="http://www.pdfforge.org"&gt;PDFCreator&lt;/a&gt; ) - Application for creating PDF files ( &lt;a href="http://sourceforge.net/projects/renameit/"&gt;Renamer-It!&lt;/a&gt; ) - To rename files ( &lt;a href="http://sourceforge.net/projects/win32diskimager/"&gt;Win32 Disk Imager&lt;/a&gt; ) - To copy an image to an SD card ( &lt;a href="http://google-calendar-sync.softonic.de/"&gt;GoogleCalendarSync&lt;/a&gt; ) - To synchronize Google Calendar with Outlook ( QTranslate ) - Translation program ( &lt;a href="https://calibre-ebook.com/"&gt;Calibre&lt;/a&gt; ) - E-book Manager (reader) ( &lt;a href="https://deskpins.en.softonic.com/"&gt;DeskPins&lt;/a&gt; ) - Pin window to foreground&lt;/p&gt;</description></item></channel></rss>