<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rhein-Ruhr-Informatik</title>
	<atom:link href="https://rhein-ruhr-informatik.de/en/feed/" rel="self" type="application/rss+xml" />
	<link>https://rhein-ruhr-informatik.de/en/</link>
	<description></description>
	<lastbuilddate>Tue, 29 Sep 2026 09:37:58 +0000</lastbuilddate>
	<language>en-US</language>
	<sy:updateperiod>
	hourly	</sy:updateperiod>
	<sy:updatefrequency>
	1	</sy:updatefrequency>
	

<image>
	<url>https://rhein-ruhr-informatik.de/wp-content/uploads/2025/03/cropped-favicon-32x32.png</url>
	<title>Rhein-Ruhr-Informatik</title>
	<link>https://rhein-ruhr-informatik.de/en/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Strukturierte Multi-Persona-Content-Generierung mit Azure OpenAI und SSE-Streaming</title>
		<link>https://rhein-ruhr-informatik.de/en/2026/09/29/strukturierte-multi-persona-content-generierung-mit-azure-openai-und-sse-streaming/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Tue, 29 Sep 2026 09:37:55 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=907</guid>

					<description><![CDATA[<p>In diesem Tutorial erstellen wir ein Content-Generation-Studio, das ein einzelnes Marketing-Briefing mithilfe verschiedener KI-Personas in drei strukturierte Content-Variationen umwandelt. Das Frontend wird mit Next.js und TypeScript entwickelt, das Backend verwendet Python mit FastAPI und Azure OpenAI übernimmt die strukturierte Generierung sowie das native Server-Sent-Events-Streaming (SSE), während Azure Content Safety für [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2026/09/29/strukturierte-multi-persona-content-generierung-mit-azure-openai-und-sse-streaming/">Strukturierte Multi-Persona-Content-Generierung mit Azure OpenAI und SSE-Streaming</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In this tutorial, we will build a <strong>Content-Generation-Studio</strong>that turns a single marketing brief into three structured content variations using distinct AI personas. The frontend is built with <strong>Next.js and TypeScript</strong> the backend uses <strong>Python with FastAPI</strong> and <strong>Azure OpenAI</strong> powers the structured generation and native Server-Sent Events (SSE) streaming with <strong>Azure Content Safety</strong> providing automated moderation guardrails.</p>



<p>Instead of producing unpredictable raw text, our application enforces guaranteed data schemas (title, body, and SEO keywords), real-time progress feedback via SSE streaming, and three distinct perspectives tailored to specific audiences: <strong>Friendly SaaS Marketer</strong>, <strong>Technical Blogger</strong> and <strong>Skeptical CFO</strong>.</p>



<p>Next.js (TypeScript) → FastAPI → Azure Content Safety (Guardrails)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ↓<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Azure OpenAI (GPT-4.1 / Structured Outputs)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ↓<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server-Sent Events (SSE-Stream)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ↓<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 Persona-Variationen (Title, Body, SEO Keywords)</p>



<p><strong>Prerequisites</strong></p>



<ul class="wp-block-list">
<li>Python and Node.js installed on your computer.</li>



<li>An Azure OpenAI resource with a deployed model (e.g. GPT-4.1-mini or GPT-4o).</li>



<li>An Azure Content Safety resource.</li>



<li>Basic knowledge of FastAPI, Next.js, and TypeScript.</li>



<li>Basic understanding of Server-Sent Events (SSE) and Pydantic schemas.</li>
</ul>



<p></p>



<p><strong>Step 1: Define the Pydantic Schema</strong></p>



<p>The first step is defining the structure our application expects from the model. We create Pydantic models for individual variations and the overall response container:</p>



<p>class Variation(BaseModel):<br>&nbsp;&nbsp;&nbsp; id: int<br>&nbsp;&nbsp;&nbsp; title: str<br>&nbsp;&nbsp;&nbsp; body: str<br>&nbsp;&nbsp;&nbsp; seoKeywords: list[str] = Field(default_factory=list)<br><br>class ResultSchema(BaseModel):<br>&nbsp;&nbsp;&nbsp; variations: list[Variation]</p>



<p>This schema acts as a dual contract: it guarantees the shape of our backend API responses for the Next.js frontend, and it is passed directly to Azure OpenAI's <strong>Structured Outputs</strong>engine to strictly constrain the model's output JSON Schema.</p>



<p><strong>Step 2: Implement Persona System Prompts</strong></p>



<p>Marketing copy requires different tones depending on the channel and audience. In our app, we define three system prompts:</p>



<p>PERSONAS = {<br>&nbsp;&nbsp;&nbsp; &#8222;friendly&#8220;: {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;name&#8220;: &#8222;Friendly SaaS Marketer&#8220;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;system&#8220;: (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;You are a friendly SaaS marketer. &#8222;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;Write in a warm, benefit-led, conversational tone. &#8222;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;Prefer short sentences and a clear call to action.&#8220;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ),<br>&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp; &#8222;technical&#8220;: {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;name&#8220;: &#8222;Technical Blogger&#8220;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;system&#8220;: (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;You are a technical blogger. &#8222;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;Write in a precise, credible, educational tone. &#8222;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;Include concrete details, trade-offs, and one practical tip.&#8220;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ),<br>&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp; &#8222;cfo&#8220;: {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;name&#8220;: &#8222;Skeptical CFO&#8220;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;system&#8220;: (<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;You are a skeptical CFO. &#8222;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;Write in a direct, evidence-driven, ROI-focused tone. &#8222;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8222;Quantify impact where possible and flag risks explicitly.&#8220;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ),<br>&nbsp;&nbsp;&nbsp; },<br>}</p>



<p>When a request arrives, the backend dynamically combines the selected persona system prompt with user instructions containing the brief, target audience, format (LinkedIn post, marketing email, or landing page copy), and output language.</p>



<p><strong>Step 3: Guardrail Content with Azure Content Safety</strong></p>



<p>Before invoking the language model, the backend validates the brief against <strong>Azure Content Safety</strong>. This detects harmful inputs across categories such as violence, hate speech, self-harm, and sexual content:</p>



<p>response = content_safety_client.analyze_text(<br>&nbsp;&nbsp;&nbsp; AnalyzeTextOptions(text=req.brief)<br>)<br>is_safe = all(item.severity &lt; 2 for item in response.categories_analysis)</p>



<p>If harmful content is detected, the API returns a structured <strong>400 Bad Request</strong> with specific category details. This prevents prompt injection and misuse while avoiding unnecessary token costs on blocked prompts. A local heuristic is also available as a fallback when offline.</p>



<p><strong>Step 4: Real-Time SSE Streaming and Incremental Parsing</strong></p>



<p>Generating three comprehensive marketing variations takes several seconds. Rather than making the user wait for the full response, we use <strong>Server-Sent Events (SSE)</strong> via FastAPI's <strong>StreamingResponse</strong> von FastAPI:</p>



<p>@app.post(&#8222;/generate/stream&#8220;)<br>def generate_stream(req: GenerateRequest):<br>&nbsp;&nbsp;&nbsp; def events():<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield _sse_event(&#8222;safety&#8220;, {&#8222;safe&#8220;: True})<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield _sse_event(&#8222;start&#8220;, {&#8222;request_id&#8220;: request_id})<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with client.responses.stream(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; model=DEPLOYMENT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instructions=system,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input=user_prompt,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text_format=ResultSchema,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) as stream:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for event in stream:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if event.type == &#8222;response.output_text.delta&#8220;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield _sse_event(&#8222;delta&#8220;, {&#8222;text&#8220;: event.delta})<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Inkrementell abgeschlossene JSON-Variation-Objekte extrahieren<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for v in _complete_variations_from_json(accumulated_text):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield _sse_event(&#8222;variation&#8220;, {&#8222;variation&#8220;: v.dict()})<br>&nbsp;&nbsp;&nbsp; return StreamingResponse(events(), media_type=&#8220;text/event-stream&#8220;)</p>



<p>The streaming generator parses JSON chunks on the fly. As soon as each variation's closing bracket is reached, an SSE <strong>variation</strong>event is emitted. This allows the Next.js frontend to render each content card immediately as it finishes, providing a fast and reactive user experience.</p>



<p><strong>Step 5: Connect FastAPI and Next.js with Observability</strong></p>



<p>The Next.js frontend connects directly to the FastAPI stream using standard<strong>fetch</strong> and reads chunks with a <strong>ReadableStreamDefaultReader</strong>. It renders live progress, displays persona badges, and supports instant copy, JSON view, and file export.
In addition, every request captures observability data:</p>



<ul class="wp-block-list">
<li>Latency in milliseconds.</li>



<li>Prompt, completion, and total token usage.</li>



<li>Estimated execution cost based on Azure OpenAI token pricing.</li>



<li>Per-client generation logs stored in SQLite and process memory.</li>
</ul>



<p></p>



<p><strong>Why Personas and Structured Outputs Matter</strong></p>



<p>Without persona steering and structured outputs, LLM outputs tend to be generic, unpredictable, and difficult to parse reliably in production applications. Combining explicit persona instructions with Pydantic schemas yields predictable, high-quality results tailored to real marketing workflows.</p>



<ul class="wp-block-list">
<li>The frontend receives a guaranteed, type-safe data schema.</li>



<li>No regex or Markdown code block stripping is required in application code.</li>



<li>Personas provide consistent brand voice and clear positioning.</li>



<li>Streaming eliminates perceived latency and improves engagement.</li>
</ul>



<p></p>



<p><strong>Conclusion</strong></p>



<p>With Next.js, FastAPI, Azure OpenAI, and Azure Content Safety, we built an end-to-end content generation application with enterprise-grade guardrails and real-time streaming.</p>



<p>FastAPI Backend      → Controls safety checks, persona mapping, streaming, and token logs<br>Azure OpenAI         → Delivers structured, persona-driven generation via GPT-4.1<br>Azure Content Safety → Blocks harmful prompts before execution<br>Next.js Frontend     → Delivers a responsive, multi-language UI with live SSE card rendering</p>



<p>This combination transforms generative AI from an unpredictable chat experiment into a dependable, production-ready content engineering pipeline.</p>



<p>I hope this short tutorial was helpful.</p>



<p><strong>Now let’s code!</strong></p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2026/09/29/strukturierte-multi-persona-content-generierung-mit-azure-openai-und-sse-streaming/">Strukturierte Multi-Persona-Content-Generierung mit Azure OpenAI und SSE-Streaming</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bildanalyse mit GPT-4.1-mini und Structured Outputs</title>
		<link>https://rhein-ruhr-informatik.de/en/2026/08/25/bildanalyse-mit-gpt-4-1-mini-und-structured-outputs/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Tue, 25 Aug 2026 07:47:32 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=890</guid>

					<description><![CDATA[<p>In diesem Tutorial lernen wir, wie man Bilder mit einem multimodalen KI-Modell analysiert und die Ergebnisse direkt als strukturierte Daten zurückgibt. Dabei verwenden wir GPT-4.1-mini mit Azure OpenAI und Structured Outputs. Anstatt für jede Aufgabe einen separaten Service zu verwenden, können wir ein Bild zusammen mit unseren Anweisungen an das [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2026/08/25/bildanalyse-mit-gpt-4-1-mini-und-structured-outputs/">Bildanalyse mit GPT-4.1-mini und Structured Outputs</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In this tutorial, we will learn how to analyze images using a multimodal AI model and return the results directly as structured data. We will use GPT-4.1-mini with Azure OpenAI and Structured Outputs.</p>



<p>Instead of using a separate service for every task, we can send an image together with our instructions to the model and extract information such as a description, tags, detected objects and OCR text.</p>



<p>The important point is that the AI response should not simply be arbitrary text. Our application needs a defined data structure. For this purpose, we use JSON Schema with Pydantic.</p>



<p><strong>Prerequisites</strong></p>



<ul class="wp-block-list">
<li>Python must be installed on your computer.</li>



<li>An Azure OpenAI deployment with GPT-4.1-mini must be available.</li>



<li>Basic knowledge of Python and FastAPI.</li>



<li>Basic knowledge of REST APIs and JSON.</li>



<li>An Azure OpenAI client must be configured in the backend.</li>
</ul>



<p><strong>Step 1: Define the Pydantic Schema</strong></p>



<p>First, we define the structure that our application expects from the AI using Pydantic:</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="755" height="427" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image.jpg" alt="" class="wp-image-891" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image.jpg 755w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-300x170.jpg 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-18x10.jpg 18w" sizes="(max-width: 755px) 100vw, 755px" /></figure>



<p>This class defines both the contract for our application and the schema for the model's structured response. This means that we do not need to manually create the JSON Schema as a dictionary.</p>



<p><strong>Step 2: Send the Image and Prompt to the Model</strong></p>



<p>The image is read by the backend and then passed to the model as a Base64 Data URL.</p>



<p>In addition, we send a prompt describing which information should be extracted from the image. For example:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="839" height="325" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image.png" alt="" class="wp-image-892" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image.png 839w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-300x116.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-768x297.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-18x7.png 18w" sizes="(max-width: 839px) 100vw, 839px" /></figure>



<p>The user only sees the upload functionality. The actual instructions used for the image analysis remain in the backend.</p>



<p><strong>Step 3: Use Structured Outputs</strong></p>



<p>Now comes the important part. Instead of simply asking the model to return JSON, we use Structured Outputs:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="310" height="154" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-1.png" alt="" class="wp-image-893" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-1.png 310w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-1-300x149.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-1-18x9.png 18w" sizes="(max-width: 310px) 100vw, 310px" /></figure>



<p>With text_format=AnalysisResult, we use our Pydantic class as the schema for the response.</p>



<p>The model therefore receives a defined structure, and our backend can use the result directly as an AnalysisResult:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="297" height="36" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-2.png" alt="" class="wp-image-894" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-2.png 297w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-2-18x2.png 18w" sizes="auto, (max-width: 297px) 100vw, 297px" /></figure>



<p>We no longer need to remove Markdown code fences or manually parse the returned text into JSON.</p>



<p><strong>Step 4: Return the Result to the Frontend</strong></p>



<p>Since our FastAPI endpoint also uses AnalysisResult, we can return the result directly:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="464" height="109" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-3.png" alt="" class="wp-image-895" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-3.png 464w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-3-300x70.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-3-18x4.png 18w" sizes="auto, (max-width: 464px) 100vw, 464px" /></figure>



<p>The frontend then receives a predictable structure:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="409" height="328" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-4.png" alt="" class="wp-image-896" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-4.png 409w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-4-300x241.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/08/image-4-15x12.png 15w" sizes="auto, (max-width: 409px) 100vw, 409px" /></figure>



<p><strong>Why Structured Outputs?</strong></p>



<p>A simple prompt such as “respond only with JSON” can work, but it is not an ideal contract between an AI model and an application. </p>



<p>With Structured Outputs, we explicitly define the expected structure.</p>



<p>This provides several benefits:</p>



<ul class="wp-block-list">
<li>The backend receives a predictable data structure.</li>



<li>The Pydantic model can be used for both the API and the AI response.</li>



<li>Less manual JSON parsing is required.</li>



<li>The frontend can work directly with a defined structure.</li>



<li>The prompt does not need to describe the complete JSON format.</li>
</ul>



<p><strong>Structured Outputs as a Contract</strong></p>



<p class=" translation-block">While building the application, I noticed that the model could sometimes return information that was not actually present in the image, such as an incorrect price or object. This is a common AI hallucination. Structured Outputs does not prevent hallucinations, but it provides a reliable <strong>contract between the AI and the application</strong>.</p>



<p class=" translation-block">By defining the expected fields and types with Pydantic, the backend knows exactly what structure to expect. To reduce hallucinations, I also added explicit instructions to the prompt, such as <em>“Do not invent prices or links. If the information cannot be reliably identified, return an empty value.”</em></p>



<p class=" translation-block">This combination makes the application more predictable: <strong>Structured Outputs protects the structure, while clear prompting and validation help protect the data.</strong></p>



<p><strong>OCR or Multimodal AI?</strong></p>



<p>For pure text recognition, Azure provides specialized OCR and Document Intelligence solutions. These are particularly useful when the main goal is to reliably extract text, layouts, tables or positions.</p>



<p>In our case, however, we do not only want to recognize text. We want to analyze the entire image and extract different types of information from it.</p>



<p>That makes a multimodal model such as GPT-4.1-mini an interesting alternative:</p>



<p><strong>Image + instructions → model → structured data</strong></p>



<p>This allows us to combine image understanding and structured data extraction in a single step.</p>



<p><strong>Conclusion</strong></p>



<p>With Azure OpenAI and GPT-4.1-mini, we can relatively easily build an application that analyzes images and converts the results directly into a structure that our software can consume.</p>



<p>The key point is not only the model we use, but also the contract between the AI and the application.</p>



<p class=" translation-block">With <strong>Pydantic + Structured Outputs</strong>, a free-form AI response becomes a structured API response.</p>



<p>This allows AI to do more than just generate text. It can act as an additional processing layer between an image and our application.</p>



<p>I hope this short tutorial was helpful.</p>



<p><strong>Now let’s code!</strong></p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2026/08/25/bildanalyse-mit-gpt-4-1-mini-und-structured-outputs/">Bildanalyse mit GPT-4.1-mini und Structured Outputs</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Monitoring in SAP Cloud Integration</title>
		<link>https://rhein-ruhr-informatik.de/en/2026/02/23/monitoring-in-sap-cloud-integration/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Mon, 23 Feb 2026 09:51:22 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[SAP]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=876</guid>

					<description><![CDATA[<p>In diesem Blogbeitrag möchten wir erklären, wie wir Ihre Prozesse in SAP Cloud Integration überwachen. Dies ist eines der wichtigsten Themen, insbesondere für diejenigen, die sich um die Sicherheit im Middleware sorgen. Cloud Integration erlaubt uns die Veränderung über die Nachricht zu machen, so wie Mappings, oder die Konvertierung von [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2026/02/23/monitoring-in-sap-cloud-integration/">Monitoring in SAP Cloud Integration</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In this blog post, we would like to explain how we monitor your processes in SAP Cloud Integration. It is one of the most important topics for those especially concerns about security in middleware.</p>



<p>Cloud Integration allows us to make changes over the messages, like mappings, or converting from one structure to another. Cloud Integration is not only powerful for data manipulation, but also offers strong monitoring features. In addition to Debug or Trace modes like any development IDE, it also allows us to monitor the necessary information without debugging.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="375" height="425" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image.png" alt="" class="wp-image-877" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image.png 375w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-265x300.png 265w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-11x12.png 11w" sizes="auto, (max-width: 375px) 100vw, 375px" /></figure>



<p>For each service we can set Log Level to 5 different modes.</p>



<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-1 wp-block-group-is-layout-flex">
<p><strong>None: </strong>No information about processes even if they are successful or failed. </p>



<p><strong>Info: </strong>Default mode to see if the process is successful or failed. </p>



<p><strong>Error:</strong> Shows message only if the process is failed. </p>



<p><strong>Debug:</strong> Shows the process steps without any information of messages. </p>



<p><strong>Trace:</strong> Shows every information of messages, headers, bodies in every steps.</p>
</div>



<p>Default log configuration is set as Info. Which allows us to see status of every process, like completed, abandoned, canceled, failed, etc. This mode doesn’t allow us to see the message body, message headers, basically what is passing through over CPI. It is important to protect data for security reasons and to reduce memory consumption.</p>



<p>But if the process fails, how can we find out the issue?<br>Trace mode is useful when the same message can be received again. Before receiving messages, this mode should be activated. In trace mode, both the message body and headers can be viewed at each step.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="295" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-1.png" alt="" class="wp-image-878" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-1.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-1-300x94.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-1-768x240.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-1-18x6.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>The process that gets an error is displayed. In this mode, it is much easier and faster to identify the step where the error occurs.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="272" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-2.png" alt="" class="wp-image-879" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-2.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-2-300x86.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-2-768x221.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-2-18x5.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>However, CI allows us to stay in trace mode for only 10 minutes, then it returns automatically to the previous mode (info, error, or none). Additionally, the message can no longer be accessed after 1 hour. During development, this mode is often used. However, in production, after the process fails, we cannot re-trigger the same process. It is also not recommended to reveal the full message in production due to security reasons.</p>



<p>In that case, how can we indicate which message gets an error without exposing the entire message? Here’s what SAP offers:</p>



<p>There are some pre-built properties for monitoring and filtering messages. This feature is very helpful for understanding specific messages’ status and filtering the messages in monitoring screen. We can customize those Properties according to needs. In this example, Application Message ID is set from Order Id, and the type of Order is set as Application Message Type. If this order gets an error, we can directly point out the order number without revealing the whole message.</p>



<p>Bestellnummer festgelegt, und der Bestelltyp wird als „Application Message Type“ bestimmt. Wenn diese Bestellung einen Fehler enthält, können wir die Bestellnummer direkt herausfinden, ohne die gesamte Nachricht offenzulegen.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="446" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-3.png" alt="" class="wp-image-880" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-3.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-3-300x142.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-3-768x362.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-3-18x8.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>If those pre-build properties are not enough, or just need to add more customized properties, we can also add custom monitoring headers. These custom headers are not considered as actual headers. They are not sent to the receiver system. They are used only for monitoring purposes as internal.</p>



<p>We can also filter the messages according to monitoring properties and custom headers. For example, we have 7 messages in Completed status with the Message Type: Initial Order</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="811" height="513" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-4.png" alt="" class="wp-image-881" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-4.png 811w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-4-300x190.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-4-768x486.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-4-18x12.png 18w" sizes="auto, (max-width: 811px) 100vw, 811px" /></figure>



<p>But we have only 1 message with the order number 1000000.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="327" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-5.png" alt="" class="wp-image-882" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-5.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-5-300x104.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-5-768x266.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-5-18x6.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p>By default, we cannot view the content of a message at any point during the process. However, in some cases, we may need to see the message body, especially when it’s in a failed status. To do this, we can create an attachment for monitoring purposes. Attachments can be in any text format, and they are customizable, allowing us to add information that helps identify the error. Additionally, attachments can be set up to be included only in error cases.</p>



<p>Most common usage cases:<br>– Seeing the whole body at the important points. – Like before mapping, after mapping<br>– In error case, the whole message body at the error point.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="551" height="589" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-6.png" alt="" class="wp-image-883" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-6.png 551w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-6-281x300.png 281w, https://rhein-ruhr-informatik.de/wp-content/uploads/2026/02/image-6-11x12.png 11w" sizes="auto, (max-width: 551px) 100vw, 551px" /></figure>



<p></p>



<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-2 wp-block-group-is-layout-flex">
<p><strong>Logs stored in the middleware cannot be kept for long periods.</strong></p>



<p>Trace can accept messages for up to 10 min, and these messages are only visible for 1 hours.</p>



<p>Debug can accept messages for up to 1 day.</p>



<p>All process logs are deleted after 1 month.</p>
</div>



<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-3 wp-block-group-is-layout-flex">
<p><strong>In Conclusion:</strong></p>



<p>SAP provides a faster, more precise, and more secure middleware environment with Cloud Integration.</p>
</div>



<p>By default, Cloud Integration interface does not show any messages or headers to users. This is important for both security reasons and memory management.</p>



<p>However, in some cases, the failed message needs to be detected without using trace or debug mode, especially in a production environment. To achieve this, in info mode, necessary fields can be set as custom properties and attachments to identify which message has failed.</p>



<p>Cloud Integration stores logs maximum for 1 month. This 1-month period is intended for working with errors, detecting issues, and solving problems.</p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2026/02/23/monitoring-in-sap-cloud-integration/">Monitoring in SAP Cloud Integration</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mein Weg zum AWS Certified Solutions Architect – Associate</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/11/14/mein-weg-zum-aws-certified-solutions-architect-associate/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Fri, 14 Nov 2025 10:33:58 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[AWS]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=865</guid>

					<description><![CDATA[<p>Seit einiger Zeit wollte ich meine Cloud-Kenntnisse auf ein neues Level bringen. Da ich beruflich viel mit Cloud-Infrastruktur arbeite, war für mich schnell klar: AWS ist ein Muss. Also entschied ich mich, die Prüfung zum AWS Certified Solutions Architect – Associate abzulegen. In diesem Beitrag möchte ich meine Erfahrungen teilen [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/11/14/mein-weg-zum-aws-certified-solutions-architect-associate/">Mein Weg zum AWS Certified Solutions Architect – Associate</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>For quite some time, I wanted to take my cloud knowledge to a new level. Since I work a lot with cloud infrastructure professionally, it quickly became clear to me: AWS is a must. So, I decided to take the AWS Certified Solutions Architect – Associate exam.
In this post, I’d like to share my experience – from preparation and technical setup to the actual exam itself.</p>



<h3 class="wp-block-heading">1. Learning and Preparation</h3>



<p>Before I even started studying, I wanted to understand what to expect. The Solutions Architect – Associate exam tests a wide range of topics: architectural principles, high availability, security, cost optimization, and many services like EC2, S3, RDS, Lambda, or VPC.</p>



<p>I divided my preparation into three phases:</p>



<p><strong>Phase 1: Refreshing the basics</strong><br>I started with the free <a href="https://skillbuilder.aws/">AWS Skill Builder</a>, where there’s an official course called "Exam Prep: AWS Certified Solutions Architect – Associate". It gives you a good sense of the structure and depth of the questions. Additionally, I bought two topic-related courses on Udemy to deepen my knowledge further – they offered many practical examples and explanations that helped me a lot in understanding more complex subjects.</p>



<p><strong>Phase 2: Intensive training</strong><br>Then I used Udemy courses from instructors like Stéphane Maarek and Tutorials Dojo. I found the many hands-on labs particularly helpful – for example, setting up a VPC or an Auto Scaling group. These exercises helped me a lot to truly understand the concepts.</p>



<p><strong>Phase 3: Exam simulations</strong><br>In the last two weeks before the exam, I focused on practice exams. The questions on platforms like Whizlabs or Tutorials Dojo were often very similar to the real ones – sometimes almost identical in the way they were phrased.<br>I tried not only to know the correct answer but also to understand why the other answers were wrong – that’s crucial!</p>



<h3 class="wp-block-heading">2. Equipment and Room Requirements</h3>



<p>I decided to take the exam online from home – convenient, but with clear rules.</p>



<p><strong>Technical requirements:</strong></p>



<ul class="wp-block-list">
<li>A reliable laptop or PC</li>



<li>A stable internet connection (LAN preferred)</li>



<li>A working webcam and microphone</li>
</ul>



<p>Before the exam, a Pearson VUE tool automatically checks whether your camera, sound, and network are fine.</p>



<p><strong>Room preparation:</strong><br>The room must be clean and quiet – no books, no notes, no other person in the room. I even had to briefly show my walls by moving the camera around.
My desk was completely empty, and I placed my smartphone far away. That may seem a bit strict, but it ensures fairness.</p>



<h3 class="wp-block-heading">3. Registration and Identity Check</h3>



<p>Registration is done through the AWS Certification Portal. There, you can choose whether to take the exam online or in a test center.</p>



<p>After registration, you receive an email with all the steps. On the day of the exam, I simply clicked “Start Exam”. Then a chat window opened with the proctor.</p>



<p>The proctor checked my identity using my ID, asked me to show the entire room with the webcam, and verified that there were no unauthorized items nearby.
After a few minutes, everything was ready – and the exam could begin.</p>



<h3 class="wp-block-heading">4. The Exam Process</h3>



<p>The exam lasts 130 minutes and consists of about 65 multiple-choice questions. Some questions are short and direct, others quite long and describe complex architectural scenarios.</p>



<p>I got into the habit of first answering all the questions I was sure about and marking the rest. In the end, I still had enough time to calmly review about 10 difficult questions.</p>



<p>A small tip:</p>



<p>Read the questions very carefully – sometimes a single word (“cost-effective”, “highly available”, or “fault tolerant”) changes the entire meaning.</p>



<p>After I submitted the last question, the system immediately displayed: “Your result will be available in next 5 days.”<br>Then, the email came: “Congratulations! You passed the exam!”<br>That was a great feeling!</p>



<h3 class="wp-block-heading">5. Useful Resources and Tips</h3>



<p>If you want to pass the AWS Certified Solutions Architect – Associate exam, these resources can help you:</p>



<ul class="wp-block-list">
<li>AWS Skill Builder: Official, free learning platform</li>



<li>AWS Whitepapers: Especially “Well-Architected Framework” and “Security Best Practices”</li>



<li>Udemy: Courses by Stéphane Maarek or Neal Davis</li>



<li>Tutorials Dojo / Jon Bonso Practice Exams: Realistic practice questions</li>



<li>AWS Free Tier: To try out services without costs</li>
</ul>



<h3 class="wp-block-heading">Conclusion</h3>



<p>The path to the AWS Certified Solutions Architect – Associate was not only a technical challenge for me but also a personal journey. I learned a lot about modern cloud architecture and understood how important good design in AWS really is.</p>



<p>So if you’re thinking about taking this step: Do it!
With patience, curiosity, and solid preparation, you can succeed. And the certification opens many doors in the IT world.</p>



<p>Good luck and have fun on your own AWS adventure!</p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/11/14/mein-weg-zum-aws-certified-solutions-architect-associate/">Mein Weg zum AWS Certified Solutions Architect – Associate</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Aufbau eines serverlosen REST-APIs mit AWS API Gateway und Lambda</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/09/29/aufbau-eines-serverlosen-rest-apis-mit-aws-api-gateway-und-lambda/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Mon, 29 Sep 2025 05:33:00 +0000</pubdate>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Artikel]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Serverless]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=852</guid>

					<description><![CDATA[<p>Einführung In der modernen Softwareentwicklung sind Geschwindigkeit und Skalierbarkeit entscheidend. Unternehmen wollen Funktionen schnell bereitstellen, ohne sich um die Wartung von Infrastruktur zu kümmern. Genau hier glänzt Serverless Computing. Mit AWS Lambda und Amazon API Gateway können Entwickler ein voll funktionsfähiges REST API erstellen, ohne Server zu betreiben. AWS kümmert [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/09/29/aufbau-eines-serverlosen-rest-apis-mit-aws-api-gateway-und-lambda/">Aufbau eines serverlosen REST-APIs mit AWS API Gateway und Lambda</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Introduction</h2>



<p>In modern software development, speed and scalability are crucial. Companies want to deliver features quickly without worrying about maintaining infrastructure. This is where serverless computing shines.<br><br>With AWS Lambda and Amazon API Gateway, developers can build a fully functional REST API without managing servers. AWS automatically takes care of scaling, availability, and billing — you only pay for the requests that are actually processed.<br><br>In this article, we will explore how to set up a simple REST API using AWS API Gateway and AWS Lambda, with examples in Python.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="900" height="484" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-7.png" alt="" class="wp-image-853" style="width:619px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-7.png 900w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-7-300x161.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-7-768x413.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-7-18x10.png 18w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>


<h2 class="wp-block-heading">What is Serverless?</h2>



<p>The term serverless doesn’t mean “no servers” — servers are still involved, but they are fully managed by the cloud provider. Developers focus only on writing code, while AWS handles:<br><br>– Provisioning and scaling (from zero to millions of requests)<br>– High availability<br>– Security and patching<br>– Billing based on actual usage<br><br>For REST APIs, the combination of API Gateway and Lambda has become a common pattern. Let’s see how they work together.</p>



<h2 class="wp-block-heading">Architecture Overview</h2>



<p>The flow looks like this:<br>1. A client (browser, mobile app, Postman) sends a request to an API Gateway endpoint.<br>2. API Gateway routes the request to a configured Lambda function.<br>3. The Lambda function runs your custom code (Python in our case).<br>4. Lambda returns a response, which API Gateway forwards back to the client.<br><br>This simple architecture is powerful because you can connect multiple Lambda functions to different API routes and methods (e.g., GET /users, POST /orders).</p>



<h2 class="wp-block-heading">Step-by-Step Setup</h2>



<h3 class="wp-block-heading">1. Create a Lambda Function</h3>



<p>1. Log in to the AWS Management Console.<br>2. Go to AWS Lambda → Create function.<br>3. Choose Author from scratch, give it a name (e.g., hello-world), and select Python 3.x as runtime.<br>4. In the code editor, paste the following function:</p>



<pre class="wp-block-code"><code>import json<br><br>def lambda_handler(event, context):<br>&nbsp;&nbsp;&nbsp; name = event.get("queryStringParameters", {}).get("name", "World")<br>&nbsp;&nbsp;&nbsp; return {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "statusCode": 200,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "headers": {"Content-Type": "application/json"},<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;"body": json.dumps({"message": f"Hello, {name}!"})<br>&nbsp;&nbsp;&nbsp; }</code></pre>



<h3 class="wp-block-heading">2. Create an API Gateway</h3>



<p>1. Go to Amazon API Gateway → Create API.<br>2. Choose HTTP API (simpler) or REST API (more configurable). For this tutorial, select HTTP API.<br>3. Create a new API and attach it to your Lambda function (hello-world).<br>4. Deploy the API.</p>



<h3 class="wp-block-heading">3. Test the API</h3>



<p>Once deployed, you will get an endpoint URL such as:<br><br><code>https://abc123.execute-api.us-east-1.amazonaws.com/default/hello-world</code><br><br>Now test it:<br><br><code>curl "https://abc123.execute-api.us-east-1.amazonaws.com/default/hello-world?name=Alice"</code><br><br>Response:<br><code>{ "message": "Hello, Alice!" }</code><br><br>Congratulations! You have just built a serverless REST API with AWS.</p>



<h2 class="wp-block-heading">Why Use API Gateway + Lambda?</h2>



<p>– Scalability: Handles traffic spikes automatically.<br>– Cost efficiency: Pay only when functions are executed.<br>– Simplicity: No server management, no patching, no scaling headaches.<br>– Flexibility: Connect Lambda to databases (DynamoDB, RDS), queues (SQS), or even event streams (Kinesis).</p>



<h2 class="wp-block-heading">Next Steps</h2>



<p>What we built is a minimal example. In production, you might:<br>– Add authentication &amp; authorization (AWS Cognito, IAM policies, custom JWT).<br>– Use Infrastructure as Code (AWS SAM, CDK, or Terraform).<br>– Enable logging &amp; monitoring (CloudWatch, X-Ray).<br>– Connect to other AWS services for full applications.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>AWS API Gateway and AWS Lambda together make it incredibly easy to create serverless REST APIs. With just a few clicks and a small Python script, you can deploy an endpoint that scales automatically and costs only when used.<br><br>If you are building modern applications, experimenting with microservices, or simply want to avoid server management, this serverless approach is a great starting point.</p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/09/29/aufbau-eines-serverlosen-rest-apis-mit-aws-api-gateway-und-lambda/">Aufbau eines serverlosen REST-APIs mit AWS API Gateway und Lambda</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Verwaltung von BTP Role Collections über den SAP Cloud Identity Service</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/09/08/verwaltung-von-btp-role-collections-ueber-den-sap-cloud-identity-service/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Mon, 08 Sep 2025 04:28:02 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[SAP]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=842</guid>

					<description><![CDATA[<p>In diesem Blogbeitrag erfahren Sie, wie Role Collection in SAP BTP zentral über die SAP Cloud Identity Services verwaltet werden können. SAP BTP ermöglicht die Bereitstellung verschiedener Services und Anwendungen, die jeweils eigene Role Collection enthalten. Diese Services werden häufig in unterschiedlichen Subaccounts betrieben. Zwar ist es möglich, Benutzer und [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/09/08/verwaltung-von-btp-role-collections-ueber-den-sap-cloud-identity-service/">Verwaltung von BTP Role Collections über den SAP Cloud Identity Service</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In this blog post, you’ll learn how SAP BTP role collections can be centrally managed using SAP Cloud Identity Services.</p>



<p>SAP BTP allows the deployment of multiple services and applications, each with its own role collections. These services are often deployed across different subaccounts. It's possible to manage users and roles separately in each subaccount.</p>



<p>However, it is also possible to centralize user and role management by using a single identity service by establishing trust between the identity service and BTP subaccounts.</p>



<p>This post will guide you through setting up role collection mappings between BTP and Identity Authentication Service (IAS). This allows you to manage role collections for multiple subaccounts from a single identity provider.</p>



<p><strong>Prerequisites</strong></p>



<p>If you have an identity provider, you can configure it as a custom provider for a BTP subaccount. It can be used as the source for users and role collections.<br>There are some prerequisites for setting up role collection mappings:</p>



<ul class="wp-block-list">
<li>You must have the Subaccount Administrator role in the subaccount that will be linked (trusted) with SAP Cloud Identity Services.</li>



<li>The SAP Cloud Identity Services tenant can be subscribed to in a different subaccount, but it must be part of the same global account and in the same region.</li>
</ul>



<p>You can follow the steps in this SAP Help document to configure the trust between your subaccount and the SAP IAS tenant:</p>



<p>👉 <a href="https://help.sap.com/docs/conversational-ai/integration-with-sap-s-4hana/configure-saml-trust-between-sap-btp-subaccount-and-ias?locale=de-DE">You can follow the steps in this SAP Help document to configure the trust between your subaccount and the SAP IAS tenant:</a></p>



<p>NOTE: To be able to use the role collection mapping, you must log in to the application with a user that is defined in the identity provider. <em><u>- Not with a BTP user.</u></em></p>



<p><strong>Configurations</strong></p>



<ol class="wp-block-list">
<li><strong>BTP Role Collections</strong></li>
</ol>



<p>Before creating a role collection mapping, make sure that you have the necessary role to access “Role Collections” in your subaccount.</p>



<p>Navigate to:</p>



<p><em>&lt;Ihr Subaccount&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; →&nbsp;&nbsp; &nbsp;Security&nbsp; &nbsp;&nbsp;&nbsp;→&nbsp;&nbsp; Role Collections&nbsp;</em></p>



<p>You can use default role collections that are defined for the standard BTP applications.</p>



<p>Alternatively, you can create a new custom role collection by clicking on the Create button in the top right corner.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="452" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image.png" alt="" class="wp-image-843" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-300x143.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-768x367.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-18x9.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p class="has-text-align-center"><em>SAP BTP Role Collections</em></p>



<p>In this example, a new custom role collection called “My_Custom_Role” is created.</p>



<ul class="wp-block-list">
<li><strong>SAP Cloud Identity Services</strong></li>
</ul>



<p>Before starting to configure role collection mapping, we must ensure that we send necessary attributes to the application. In the SAP Cloud Identity Service, navigate to<br><br><em>&nbsp;Application &amp; Resources &nbsp;&nbsp;→ &nbsp;&lt;Ihr Anwendung&gt; &nbsp;→ &nbsp;Single Sign-On &nbsp;→ &nbsp;Assertion Attributes</em></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="424" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-1.png" alt="" class="wp-image-844" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-1.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-1-300x135.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-1-768x345.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-1-18x8.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p class="has-text-align-center"><em>Application Page on SAP Cloud Identity Services</em></p>



<p>In the assertion attributes, you must have a Groups attribute. This is what we will send to the application as a BTP role.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="517" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-2.png" alt="" class="wp-image-845" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-2.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-2-300x164.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-2-768x420.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-2-18x10.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p class="has-text-align-center"><em>Assertion Attributes of an Application on SAP Cloud Identity Services</em></p>



<p>Then we should create a group for a BTP role that we will be mapping. Navigate to<br><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Users &amp; Authorizations &nbsp;&nbsp;→ &nbsp;Groups</em></p>



<p>Create a new group, if you have already one, add members who will have this BTP role.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="254" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-3.png" alt="" class="wp-image-846" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-3.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-3-300x81.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-3-768x206.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-3-18x5.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p class="has-text-align-center"><em>Groups and its Users on SAP Cloud Identity Services</em></p>



<ul class="wp-block-list">
<li><strong>BTP Role Collection Mapping</strong></li>
</ul>



<p>Now we are ready to make role collection mapping. Go to your BTP subaccount and navigate to<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Ihr Subaccount&gt;&nbsp; &nbsp;→ &nbsp;&nbsp;Security &nbsp;&nbsp;→ &nbsp;&nbsp;Trust Configuration,</p>



<p>and click on the custom identity provider that you have established in the beginning.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="451" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-4.png" alt="" class="wp-image-847" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-4.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-4-300x143.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-4-768x367.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-4-18x9.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p class="has-text-align-center"><em>SAP BTP Trust Configurations</em></p>



<p>Click on the New Role Collection Mapping and choose your BTP role collection (1). You can also choose your BTP custom role collection.</p>



<p>For “Attribute”, you should write what you defined in IAS as a Groups attribute (2). In this case, we can leave it as “Groups”.</p>



<p>In the “Value” section, you should write your IAS group’s name which corresponds to your BTP role collection (3).</p>



<p>Then save it.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="427" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-5.png" alt="" class="wp-image-848" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-5.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-5-300x136.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-5-768x347.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-5-18x8.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p class="has-text-align-center"><em>SAP BTP Role Collection Mapping</em></p>



<p>You can see your mapping from Role Collections.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="945" height="305" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-6.png" alt="" class="wp-image-849" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-6.png 945w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-6-300x97.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-6-768x248.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/08/image-6-18x6.png 18w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p class="has-text-align-center"><em>SAP BTP Role Collections Mapped with IAS Groups</em></p>



<p><strong>Conclusion</strong>:</p>



<ul class="wp-block-list">
<li>You can manage this role collection on SAP Identity Authentication Service with managing the corresponding group’s members.</li>



<li>In the BTP subaccount, you cannot see the user's role assigned by IAS. These roles are assigned to users when they are authorized to your application via SAP IAS.</li>
</ul>



<p><strong>Note:</strong></p>



<p>Please be aware that your IAS user must be created in your SAP BTP subaccount as well. You can check more about to create user on BTP from here:</p>



<p>👉 <a href="https://help.sap.com/docs/btp/sap-business-technology-platform/working-with-users?locale=de-DE">Managing SAP BTP Users</a></p>



<p><br>Hope this blog will help you to manage your BTP roles from your identity provider!</p>



<p></p>



<p><em>Feyza Sahin</em></p>



<p></p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/09/08/verwaltung-von-btp-role-collections-ueber-den-sap-cloud-identity-service/">Verwaltung von BTP Role Collections über den SAP Cloud Identity Service</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Die Rolle von KI im Leben eines Softwareentwicklers</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/08/15/die-rolle-von-ki-im-leben-eines-softwareentwicklers/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Fri, 15 Aug 2025 02:38:00 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[KI]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=836</guid>

					<description><![CDATA[<p>Künstliche Intelligenz (KI) wird zunehmend zu einem mächtigen Begleiter in der Welt der Softwareentwicklung. Vom Code-Generieren über Performance-Optimierung bis hin zur Automatisierung von Designprozessen – KI verändert rasant die Art und Weise, wie wir Software entwickeln. Aber wie genau beeinflusst KI unsere tägliche Arbeit? Als Frontend-Entwickler habe ich begonnen, KI-Tools [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/08/15/die-rolle-von-ki-im-leben-eines-softwareentwicklers/">Die Rolle von KI im Leben eines Softwareentwicklers</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Artificial Intelligence (AI) is becoming a powerful companion in the world of software development. From generating code to optimizing performance and streamlining design, it's rapidly transforming how we build software.</p>



<p>But how exactly does AI impact our day-to-day work?</p>



<p>As a frontend developer, I started using AI tools to enhance my productivity. And as I integrated them into my workflow, I found myself asking a few important questions:<br>Is AI a threat to our jobs? Or is it an enabler of innovation? Will it eventually eliminate software developers altogether? What’s coming next?</p>



<p>Let’s break it down.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>💡 <strong>How AI Boosts Software Developer Productivity</strong><br>AI tools have significantly accelerated many parts of my development process. Here are some key ways they’ve helped:</p>



<ul class="wp-block-list">
<li>🔤 <strong>Code Suggestions &amp; Autocompletion</strong><br>Tools like Windsurf (or GitHub Copilot) predict what you’re likely to write next, saving time on syntax and boilerplate.</li>



<li>🧱 <strong>Component Generation</strong><br>Need a responsive navbar, modal, or form? AI can generate reusable UI components from simple prompts—often following best practices.</li>



<li>🐞 <strong>Debugging &amp; Testing</strong><br>AI can detect bugs, suggest fixes, and even write unit tests, helping catch issues early in the cycle.</li>



<li>🎨 <strong>Design-to-Code Conversion</strong><br>Some tools can convert designs from platforms like Figma into clean HTML, CSS, and JavaScript—reducing manual translation time.</li>



<li>📚 <strong>Documentation &amp; Refactoring</strong><br>Writing docs and cleaning up code is no longer a chore. AI can help produce readable documentation and suggest clearer code structures.</li>
</ul>



<p>By automating the repetitive and mundane, AI frees up time to focus on logic, architecture, and creative problem-solving.</p>



<p>But how to properly use AI and get the best out of it?</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>🧠 <strong>Use AI as a Helper, Not a Replacement</strong><br>When I first started using AI in my workflow, I gave it a complex task and expected it to deliver it from scratch. The result? Disappointing. The output was full of broken, unstructured code.</p>



<p>Over time, I realized the trick is to let AI assist you—not lead you. Think of AI as a junior developer or a copilot. You’re still the one steering the ship.</p>



<p>Here’s what works:</p>



<ul class="wp-block-list">
<li><strong>Define the structure.</strong><br>You lay out the architecture. Let AI fill in the blanks—utility functions, helper methods, or minor features.</li>



<li><strong>Review and refine.</strong><br>Always double-check what AI generates. It might miss context, introduce bugs, or follow the wrong conventions.</li>



<li><strong>Stay in control.</strong><br>Don’t delegate critical parts to AI. You're the lead developer—AI is your assistant, not your replacement.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>🧾 <strong>The Art of Writing Prompts</strong><br>One of the most underrated skills when using AI as a developer is the art of crafting good prompts. The quality of your input directly shapes the quality of the output. A vague or overly simple prompt will likely produce vague or incorrect code. But a detailed, structured prompt can generate surprisingly accurate results.</p>



<p>The clearer and more contextual your instructions, the better the response.</p>



<p><strong>Tips for writing great prompts:</strong></p>



<ul class="wp-block-list">
<li>Specify language, framework, and desired output (e.g., “React functional component with Tailwind CSS”).</li>



<li>Add examples or constraints.</li>



<li>Break down big tasks into smaller, focused parts.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>🎯 <strong>Good Prompt = Good Output</strong><br>It’s easy to blame the AI when code doesn’t work—but often, the issue starts with the prompt itself. Treat prompt writing like writing clear requirements for a feature. The more context you give, the more relevant the output will be.</p>



<p><strong>Here’s a quick example:</strong></p>



<ul class="wp-block-list">
<li><strong>Weak prompt:</strong><br>"Make me a form."</li>



<li><strong>Strong prompt:</strong><br>"Create a responsive contact form using React, with input validation for email and phone number, and styled using Tailwind CSS."</li>
</ul>



<p>The second one gives the AI a proper direction, and that makes all the difference.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>✅ <strong>Key Advantages of Using AI in Your Dev Workflow</strong><br>Beyond speed, AI brings a number of practical benefits to modern development:</p>



<ul class="wp-block-list">
<li>💼 <strong>Increased Efficiency</strong><br>Routine tasks like writing tests, setting up config files, or converting formats become faster and less error-prone.</li>



<li>📈 <strong>Faster Prototyping</strong><br>AI helps bring ideas to life quickly, allowing you to validate designs and features without heavy lifting.</li>



<li>💡 <strong>Knowledge on Demand</strong><br>AI tools often act like intelligent search engines, providing instant explanations, code snippets, or best practice suggestions.</li>



<li>🧠 <strong>Improved Code Quality (when guided)</strong><br>With the right guidance, AI-generated code can follow established standards and catch anti-patterns early.</li>



<li>🌐 <strong>Tech Stack Flexibility</strong><br>AI lets you work confidently across unfamiliar libraries or languages by offering context-aware help.</li>



<li>⏱ <strong>Time Savings</strong><br>Small tasks that typically steal your attention—like regex patterns, data formatting, or minor bug fixes—become instant wins with AI.</li>
</ul>



<p>Used wisely, these advantages turn AI from a novelty into a practical accelerator for your daily workflow.</p>



<p>But with all these amazing capabilities comes natural concerns..</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>🤖 <strong>Will AI Replace Software Developers?</strong><br>Short answer: No—at least not anytime soon.<br>While AI can automate certain tasks, it still lacks the deeper understanding and problem-solving skills that human developers bring to the table.</p>



<p>Building accessible, performant, and scalable applications isn’t just about writing code. It requires strategic thinking, creativity, and collaboration—areas where humans still have the upper hand.</p>



<p><strong>Here’s why developers remain essential:</strong></p>



<ul class="wp-block-list">
<li><strong>Contextual Understanding</strong><br>AI doesn’t truly grasp business goals, user needs, or the product vision.</li>



<li><strong>Human Collaboration</strong><br>Developers communicate and collaborate with designers, PMs, stakeholders—something AI can’t fully replicate.</li>



<li><strong>Creative &amp; Strategic Decision Making</strong><br>Choosing the right tools, optimizing UX, and making architectural decisions demand human judgment.</li>



<li><strong>Problem Solving</strong><br>Real-world software is messy. Edge cases, debugging, and planning require reasoning that AI doesn’t yet possess.</li>
</ul>



<p>But if it lacks all of those concepts, how should we use AI in our workflow?</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>🧭 <strong>Conclusion</strong><br>AI is changing the game for software developers—not by replacing us, but by amplifying our abilities. It removes friction, boosts efficiency, and helps us deliver faster. But true success lies in knowing when and how to use it.</p>



<p>The future belongs to developers who embrace these tools with a thoughtful mindset—balancing automation with human creativity, judgment, and leadership.</p>



<p>At the same time, AI is evolving at an incredible pace. Tools, capabilities, and best practices are changing month by month. What worked yesterday may be outdated tomorrow.
That’s why developers should treat AI like any other part of the tech stack: stay curious, stay sharp, and always stay updated.</p>



<p>So yes, use AI. Let it assist you.<br><strong>But always keep your hands on the wheel — and your eyes on the road ahead.</strong></p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/08/15/die-rolle-von-ki-im-leben-eines-softwareentwicklers/">Die Rolle von KI im Leben eines Softwareentwicklers</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Windows in einem Docker-Container? Ja, wirklich!</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/07/31/windows-in-einem-docker-container/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Thu, 31 Jul 2025 12:28:33 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Virtualization]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=833</guid>

					<description><![CDATA[<p>Wenn man in einem Linux- oder macOS-Haushalt lebt, stößt man früher oder später auf das altbekannte Problem: Man braucht plötzlich eine Anwendung, die nur unter Windows läuft. Sei es ein obskures BIOS-Tool, das sich zwar per Wine starten lässt, aber schlichtweg keine brauchbaren Ergebnisse liefert. Für technisch versierte Menschen lautet [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/07/31/windows-in-einem-docker-container/">Windows in einem Docker-Container? Ja, wirklich!</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>If you live in a Linux or macOS household, you’ll eventually run into that age-old problem: Suddenly, you need an application that only runs on Windows. Maybe it’s some obscure BIOS tool that technically launches via Wine but doesn’t produce usable results. For tech-savvy folks, the first instinct is usually: "I’ll just set up a VM." Sure, that works—but it’s not exactly straightforward.</p>



<p>First, you need a hypervisor, then a compatible ISO file, followed by VM configuration, partitioning, Windows installation, driver setup, and so on. In short: It’s doable, but not exactly pleasant.</p>



<p>But what if I told you that you could launch a full Windows installation inside a Docker container—with shared storage, RDP access, and optional VLAN support? Sounds crazy? It kind of is. But it works.</p>



<p><strong>The Idea Behind the Project</strong></p>



<p>A developer named Kroese published a GitHub project that makes this possible. A Docker container that automatically sets up a fresh Windows installation—no manual setup required. Just start the container, wait a few minutes, and you get a fully functional Windows environment. Access it via your browser or RDP.</p>



<p>And the best part? You don’t even have to install Windows yourself. The container handles the entire process—from fetching the image to finalizing the setup.</p>



<p><strong>How Does It Work Technically?</strong></p>



<p>If you look closely at the Docker command, you’ll notice the flag passing through /dev/kvm—Linux’s kernel-based virtualization mechanism. In short: This isn’t a "true" Windows container but rather a Linux container running a KVM-based VM. So, no magic here—just clever automation built on proven technology.</p>



<p>The catch? Hardware virtualization must be available and enabled—otherwise, nothing will work.</p>



<p><strong>The Biggest Advantage: Convenience</strong></p>



<p>What makes this special isn’t technical innovation but the massive gain in convenience. The most tedious aspects of a Windows installation—partitioning, initial setup, language, and keyboard selection—are completely automated.</p>



<p>Yet, you still get all the benefits of a "normal" KVM-based VM: USB and SATA passthrough, adjustable CPU cores and RAM allocation, and even optional PCIe passthrough (though that’s probably better suited for dedicated VMs).</p>



<p><strong>Everyday Use: RDP Instead of VNC</strong></p>



<p>The container’s web interface uses VNC, which is fine for quick access—but it’s slow and doesn’t support audio. RDP is the better option here. The container forwards the RDP port by default, allowing easy remote access from macOS, Linux, or even another Windows machine.</p>



<p>With shared folders, you can also mount directories from the host system, making file transfers between Windows and Linux seamless. The default container allocates 2 CPU cores, 4 GB of RAM, and 64 GB of storage—all adjustable via environment variables.</p>



<p><strong>Multiple Windows Versions? No Problem!</strong></p>



<p>The container supports not just Windows 11 but older versions too—from XP to Server 2022. You can even use stripped-down variants like Tiny11 or Tiny10—or supply your own ISO. In one test, five Windows versions ran simultaneously: XP, Vista, 7, 10, and 11—all on an Intel N100 system drawing just 18W.</p>



<p>(Windows 8.1 refused to cooperate—but who misses it anyway?)</p>



<p><strong>What About Licensing?</strong></p>



<p>The Windows images come either directly from Microsoft (for newer versions) or from open sources like Bob Pony. Fresh installations are unactivated but run without restrictions for 30 days. For longer use, you’ll need a valid license key. According to the developer, the project itself contains no proprietary code and relies entirely on open-source components.</p>



<p><strong>Verdict: Simple, Practical, Brilliant</strong></p>



<p>Whether you need to quickly test Windows software, tinker with legacy systems, or run specialized tools like BIOS editors—this Docker project offers a sleek, hassle-free solution without major compromises. Of course, it’s no replacement for a high-performance VM with a dedicated GPU, but that’s not the goal.</p>



<p>What remains is an impressive example of what’s possible today with a bit of creativity and open standards—no installation headaches required.</p>



<p><strong>And who knows? Maybe Windows XP will save your day yet again.</strong></p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/07/31/windows-in-einem-docker-container/">Windows in einem Docker-Container? Ja, wirklich!</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Website-Überwachung mit GitHub: So richtest du kostenloses Uptime-Monitoring mit Upptime ein</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/07/16/website-ueberwachung-mit-github-so-richtest-du-kostenloses-uptime-monitoring-mit-upptime-ein/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Wed, 16 Jul 2025 05:51:45 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Monitoring]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=828</guid>

					<description><![CDATA[<p>Es gibt kaum etwas Schlimmeres, als morgens aufzuwachen und die Nachricht zu lesen, dass deine Website offline ist – außer vielleicht gar nicht zu wissen, dass sie überhaupt offline ist.Egal ob persönliche Homepage, Kundenprojekt oder SaaS-Anwendung: Ein Uptime-Monitor ist unverzichtbar. Denn Websites können aus den seltsamsten Gründen ausfallen – und [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/07/16/website-ueberwachung-mit-github-so-richtest-du-kostenloses-uptime-monitoring-mit-upptime-ein/">Website-Überwachung mit GitHub: So richtest du kostenloses Uptime-Monitoring mit Upptime ein</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>There’s hardly anything worse than waking up in the morning and seeing a message that your website is offline – except maybe not knowing it’s offline at all.<br>Whether it’s a personal homepage, client project, or SaaS application: an uptime monitor is essential. Websites can go down for the strangest reasons – and you don’t want to find out from an angry customer.</p>



<h2 class="wp-block-heading">Why an Uptime Monitor Is Essential</h2>



<p>Uptime monitors notify you as soon as your website becomes unreachable. Most solutions fall into two categories:</p>



<ul class="wp-block-list">
<li>Hosted services like UptimeRobot, Hyperping, or OhDear, which regularly check your website.</li>



<li><strong>Self-hosted open-source tools like Uptime Kuma or OpenStatus, which you run yourself.</strong> wie Uptime Kuma oder OpenStatus, die du selbst betreibst.</li>
</ul>



<p>However, self-hosted solutions have a major drawback: if your entire server goes down, the monitor does too. This means you would need to host it on a completely separate server or provider – which is complex and error-prone.</p>



<h2 class="wp-block-heading">The Solution: Upptime</h2>



<p>This is where Upptime comes in – a completely free and open-source monitoring solution that you can run directly using your GitHub account. No external servers, no costs. Upptime leverages three core GitHub features:</p>



<ol class="wp-block-list">
<li><strong>GitHub Actions</strong></li>



<li><strong>GitHub Issues</strong></li>



<li><strong>GitHub Pages</strong></li>
</ol>



<h3 class="wp-block-heading">1. GitHub Actions for Monitoring</h3>



<p>GitHub Actions enable automated workflows – e.g., tests, deployments, or regularly checking if your website is reachable. Upptime configures these checks using simple YAML files in the <code>.github/workflows</code>.<br>Using GitHub's built-in scheduling, you can have checks run automatically every 5 minutes, for example.</p>



<h3 class="wp-block-heading">2. Notifications via GitHub Issues</h3>



<p>If your website goes down, Upptime automatically creates a <strong>GitHub-Issue</strong> – a kind of incident report. This feature can be extended with notifications via Slack, Telegram, Discord, email, or even SMS.<br>Once your website is back online, Upptime automatically closes the issue.</p>



<h3 class="wp-block-heading">3. GitHub Pages as a Status Page</h3>



<p>Another strength: Upptime generates a <strong>public status page</strong> via GitHub Pages.<br>This displays your website’s availability in real-time, including load times and history charts. Comments on incidents are automatically included – perfect for transparent communication with your users.</p>



<h2 class="wp-block-heading">Setting Up Upptime</h2>



<p>Setup is simple:</p>



<ol class="wp-block-list">
<li>Fork the official <a class="" href="https://github.com/upptime/upptime">Upptime-Repository</a> as a template.</li>



<li>Create a new public repository based on that template.</li>



<li>Generate a GitHub access token with the required permissions (Actions, Issues, Contents, Workflows).</li>



<li>Add this token in the repository settings under <strong>Secrets</strong> as <code>GH_PAT</code>.</li>



<li>Configure your <code>.upptimerc.yml</code> with your GitHub username, repo name, and the URLs to monitor.</li>



<li>Commits automatically trigger checks, and status pages are generated.</li>
</ol>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Upptime is an elegant solution for developers, freelancers, and agencies who want a free, reliable, and transparent monitoring system – without external servers.</p>



<p>With Upptime, you get:</p>



<ul class="wp-block-list">
<li>Regular checks of your website</li>



<li>Automatic incident reports</li>



<li>Public status pages with history and load times</li>
</ul>



<p>All you need is a GitHub account.<br>Curious how long setup takes?<br>The video recorded the setup and editing process using the open-source time tracker <strong>Solidtime</strong> – another interesting GitHub-based tool.</p>



<p>You’ll find links to Upptime, documentation, and other tools in the video description.<br>And who knows – maybe Upptime is the perfect solution for your next project.</p>



<p>🔗 <a class="" href="https://github.com/upptime/upptime">https://github.com/upptime/upptime</a></p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/07/16/website-ueberwachung-mit-github-so-richtest-du-kostenloses-uptime-monitoring-mit-upptime-ein/">Website-Überwachung mit GitHub: So richtest du kostenloses Uptime-Monitoring mit Upptime ein</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>EDI, EDIFACT und EANCOM Kurzeinführung</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/06/30/edi-edifact-und-eancom-kurzeinfuehrung/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Mon, 30 Jun 2025 05:05:51 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[B2B Integration]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=820</guid>

					<description><![CDATA[<p>Was ist und wofür steht EDI? In unserer globalen Geschäftswelt ist die reibungslose Kommunikation zwischen den Geschäftspartnern eines der wichtigsten Kriterien, um den weltweiten Handel in der heutigen Form durchzuführen. Um dieses zu erreichen, wurde EDI (Electronic Data Interchange) mit dem Zweck, den elektronischen Austausch von Geschäftsdokumenten, wie beispielsweise Artikelstammdaten, [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/06/30/edi-edifact-und-eancom-kurzeinfuehrung/">EDI, EDIFACT und EANCOM Kurzeinführung</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>What is EDI and What Does it Stand For?</strong></p>



<p>In our global business world, smooth communication between business partners is one of the most important criteria for conducting worldwide trade in its current form. To achieve this, EDI (Electronic Data Interchange) was introduced with the goal of electronically exchanging business documents such as product master data, orders, delivery notes, and invoices.</p>



<p>Edward Guilbert is considered the father of electronic data exchange, having implemented EDI in the supply chains of the U.S. transportation industry as early as the 1960s. To enhance the global reach of the technology, UN/EDIFACT EDI was created by the United Nations in 1985. These documents are exchanged as structured data without manual intervention.</p>



<p>Compared to paper-based processes, EDI has the key advantage of automated processing with a very low error rate and the ability to automatically import EDI messages into the company’s ERP system (Enterprise Resource Planning).</p>



<p><strong>What is EDIFACT?</strong></p>



<p><strong>UN/EDIFACT</strong> stands for United Nations rules for Electronic Data Interchange for Administration, Commerce, and Transport. It includes internationally agreed standards, directories, and guidelines for the electronic exchange of structured data between independent computerized information systems worldwide.</p>



<p><strong>EDIFACT (Electronic Data Interchange for Administration, Commerce and Transport) </strong>consists of a hierarchical structure, with the top level referred to as an interchange. An EDIFACT message is a complete, structured sequence of data representing a single business transaction, such as an order. The UN/EDIFACT syntax is defined in the ISO 9735 standard. It includes more than 200 different message types and is now used by over 300,000 companies worldwide.</p>



<p><strong>EANCOM – A Subset of EDIFACT</strong></p>



<p><strong>EANCOM®</strong> <strong>(EAN + Communication)</strong> is a globally valid message standard that allows for the electronic exchange of business data across industries and countries. It is the most widely used global standard for EDI. A special feature of EANCOM® is its use of global GS1 identification standards, such as:</p>



<p><strong>GLN</strong> – uniquely identifies companies or company units such as locations or warehouses.</p>



<p><strong>GTIN</strong> – uniquely identifies articles, products, or variants worldwide.</p>



<p><strong>SSCC/NVE</strong> – an 18-digit number for transport units like pallets or shipping cartons. In Germany, it's also known as NVE (shipment unit number).</p>



<p>More information can be found on the GS1 Germany website: www.gs1-germany.de</p>



<p>In the EANCOM subset, only the required segments from the underlying UN/EDIFACT standard are used. The particular features of a subset are the industry-specific qualifiers. These extend the standard with the common and necessary specifications used in the respective industry.</p>



<p>The EANCOM® standard was originally designed to meet the needs of the consumer goods industry. Today, however, the EDI standard is cross-industry. Examples include healthcare, logistics, fashion, eCommerce, or cash logistics.&nbsp;</p>



<p>EANCOM (EAN + Communication) stands for detailed descriptions of simplified EDIFACT messages that users can easily understand and implement in practice. GS1 is responsible for the ongoing development of the EDIFACT subset EANCOM®.</p>



<ul class="wp-block-list">
<li>EANCOM includes all GS1 identification standards (e.g., GLN &amp; GTIN), making it highly valuable for standardizing electronic data exchange.</li>



<li>It enables direct electronic processing upon receipt of the data, with immediate access to the transmitted information in the shortest processing time.</li>



<li>Advantages of international corporate communication using a standardized data structure.</li>



<li>The electronic transmission ensures high data consistency compared to manual entries in ERP systems and eliminates the need for extensive control processes to approve the data.&nbsp;</li>



<li>Noticeable reduction in administrative and personnel effort as well as postage and shipping costs.</li>
</ul>



<p><strong>Structure of a Transmission File</strong></p>



<p>A simple transmission file consists of a payload header segment and the payload data. These can be roughly interpreted as an envelope with sender and recipient, along with the actual content.</p>



<p>These segments always begin with “UN” and are called service segments. Each segment, similar to an XML structure, defines a start and end for logically grouped data.</p>



<p>UNB as the start and UNZ as the end (this is the envelope)</p>



<p>UNH as the start and UNT as the end (this is the full message)</p>



<p>Additionally, UNS within the UNH–UNT range serves as a section control segment. Depending on the message type, there may be control segments or not.</p>



<p>Within UNH–UNT, the message is divided depending on the message type into three parts:</p>



<ul class="wp-block-list">
<li>A header section, which relates to the entire message.</li>
</ul>



<ul class="wp-block-list">
<li>A line item section, where the data applies only to the specific item.</li>
</ul>



<ul class="wp-block-list">
<li>A summary section, which includes segments such as total number of order lines or total invoice amount.</li>
</ul>



<p>Additionally, there is the possibility to use an extended character set. Most trading partners do this and indicate it by placing a UNA segment in front of the actual message. This explicitly indicates the use of standard separators within the message.</p>



<p><strong>Payload Segments</strong></p>



<p>There are many identifiers for payload segments that provide general information, and qualifiers that define the specific meaning or association of the transmitted data. In addition, there are code values that describe the function of the message.</p>



<p><strong>Two example segments for clarification:</strong></p>



<pre class="wp-block-code"><code>DTM+137:20250502:102‘
DTM		= Bezeichner für das Segment – Datum/Uhrzeit/Zeitspanne-
+		= Trennzeichen
137		= Qualifier der festlegt, dass es sich um das Dokumentendatum handelt
:		= Trennzeichen
20250502	= Datum, wann der Beleg erstellt wurde
: 		= Trennzeichen
102		= Code der festlegt, wie das Format des Datums anzugeben ist.
‚		= Segmentende Kennzeichen
</code></pre>



<pre class="wp-block-code"><code>BGM+220+2334583161+9'
BGM		= Bezeichner für das Segment – Beginn der Nachricht-
+		= Trennzeichen
220		= Qualifier der festlegt, dass es sich um eine Bestellung handelt
+		= Trennzeichen
2334583161	= Auftragsnummer der Bestellung oder Bestellnummer
+		= Trennzeichen
9		= Code für Original
‚		= Segmentende Kennzeichen
</code></pre>



<p></p>



<p></p>



<p><strong>Example of a Simple EANCOM ORDERS Message with Two Items</strong></p>



<pre class="wp-block-code"><code>UNA:+.? '	  
UNB+UNOC:3+4888885550836:14+9898999999999:14+250424:1312+16984+++++EANCOM'
UNH+001+ORDERS:D:96A:UN:EAN008'		Referenznummer der ORDERS lautet 001 und Versionsangaben
BGM+220+4700483161+9'			Die Bestellnummer lautet 4700483161
DTM+137:20250424:102'			Das Belegdatum ist der 24.04.2025
DTM+2:20250429:102'				Der Liefertermin soll der 29.04.2025 sein
NAD+BY+4888885550836::9'			Die eindeutige GLN des Bestellers
NAD+SU+9898999999999::9'			Die eindeutige GLN des Lieferanten
NAD+DP+4888885551234::9'			Die eindeutige GLN des Warenempfängers (z.B. ein Lager)
NAD+IV+4888885550001::9'			Die eindeutige GLN an dem die Rechnung zu Auszustellen ist
CUX+2:EUR:9'					Währungsangabe
LIN+1++9898942116455:EN'			Erste Position mit der eindeutigen Artikel GTIN 9898942116455
PIA+1+77315-705:SA'				Interne Artikelnummer des Lieferanten 77315-705
IMD+F++:::BLUSE/BLOUSES'			Artikelbeschreibung
QTY+21:36:PCE'					Menge der Bestellten Artikel ist 36
PAC++1'					Packstück/Verpackung
LIN+2++9898912548068:EN'			Zweite Position mit der eindeutigen Artikel GTIN 9898912548068
PIA+1+77315-732:SA'				Interne Artikelnummer des Lieferanten 77315-732
IMD+F++:::HOSE/PANTS'			Artikelbeschreibung
QTY+21:60:PCE'					Menge der Bestellten Artikel ist 60
PAC++1'					Packstück/Verpackung
UNS+S'						Abschnitts Kontrollsegment
UNT+21+001'					Nachrichtenende, es gibt 21 Segmente inkl. UNH-UNT  
UNZ+1+16984'					Ende, es befindet sich eine Nachricht im Umschlag 16984 
</code></pre>



<p><strong>Data Transmission</strong></p>



<p>There are various ways to transmit EDI data. The most commonly used are:

    AS2 (Applicability Statement 2) – an HTTP-based protocol

    X.400 (BusinessMail) – a message transfer system from Deutsche Telekom

Secure connections like SFTP, SCP, OFTP, etc., are also used based on bilateral agreements.</p>



<p><strong>EDI Internally or Externally?</strong></p>



<p>A company can build its own EDI department that, in cooperation with the internal IT department, defines interfaces from internal systems and develops corresponding mappings. These mappings generate EDI messages on output, which are then sent to partners using an agreed-upon communication method.

Incoming EDI messages from partners are converted via mappings into the company’s internal format so they can be automatically read and processed.

As businesses constantly adapt to market conditions or change internal processes or systems, there are often ongoing EDI projects that require updates to these interfaces.

How many employees are needed to build such an internal department (handling customer contact, support, and IT services) is a key factor in deciding whether to pursue this option.</p>



<p>An external solution, which many companies choose, has the advantage of not requiring internal infrastructure. The EDI service provider takes over all tasks necessary for electronic data exchange with partners.

Through analysis, the provider identifies the company’s internal interfaces without requiring changes. They usually have their own converter systems, which translate the captured data into the agreed EDI formats and send them to the appropriate partners. The receipt of partner data is processed in reverse, and the converted data is handed off to the internal interface. The provider handles communication between the company and its partners, as well as support services.</p>



<p><strong>Conclusion:</strong></p>



<p>This brief explanation of EDI, EDIFACT, and EANCOM represents only a small part of the entire topic and provides a quick overview of the world of electronic data exchange.

It shows the potential for simple and secure data exchange between customers and suppliers, allowing companies to process received data without manual handling.

EDI offers highly efficient and diverse use cases and can lead to significant cost savings in data processing.

Comprehensive consulting by EDI specialists and a follow-up analysis of internal company workflows, current data handling, and systems is highly recommended before implementation.

There are many key factors to consider when introducing EDI, such as:

    how many partners will exchange data,

    which message types will be used,

    the number of messages exchanged per day or month,

    how many interfaces are needed, etc.

This analysis can also help determine whether an internal or external solution will achieve the best efficiency.</p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/06/30/edi-edifact-und-eancom-kurzeinfuehrung/">EDI, EDIFACT und EANCOM Kurzeinführung</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>