<?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>Mon, 23 Feb 2026 09:51:23 +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>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 fetchpriority="high" 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="(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 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="(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 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="(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>
		<item>
		<title>Test Coverage mit Jasmine und Karma in 3 einfachen Schritten</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/06/16/test-coverage-mit-jasmine-und-karma-in-3-einfachen-schritten/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Mon, 16 Jun 2025 05:33:10 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Testing]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=810</guid>

					<description><![CDATA[<p>In diesem Tutorial lernen wir, wie man die Testabdeckung (Test Coverage) in einem Projekt mit Jasmine einrichtet und wie man die Unit Tests messen kann. Die Testabdeckung ist eine Kennzahl, die angibt, wie viel Code durch Unit Tests abgedeckt wird. Eine gute Abdeckung hilft dabei, ungetestete Teile zu identifizieren und [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/06/16/test-coverage-mit-jasmine-und-karma-in-3-einfachen-schritten/">Test Coverage mit Jasmine und Karma in 3 einfachen Schritten</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 set up test coverage in a project using Jasmine
and how to measure unit tests. Test coverage is a metric that indicates how much of
your code is covered by unit tests. Good coverage helps identify untested parts and
improves software reliability.</p>



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



<ol class="wp-block-list">
<li>Node.js must be installed on your computer.</li>



<li>Jasmine is already set up in the project.</li>



<li>Basic knowledge of unit testing.</li>
</ol>



<h2 class="wp-block-heading">Step 1: Configure Karma with Test Coverage</h2>



<p>Jasmine alone does not generate test coverage, but we can integrate the
karma-coverage plugin with Karma for this purpose.</p>



<p><strong>Install the required dependencies:</strong></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="982" height="60" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-7.png" alt="" class="wp-image-812" style="width:531px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-7.png 982w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-7-300x18.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-7-768x47.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-7-18x1.png 18w" sizes="auto, (max-width: 982px) 100vw, 982px" /></figure>



<ul class="wp-block-list">
<li>Update Karma’s configuration file (karma.conf.js) to use the karma-coverage plugin</li>
</ul>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="588" height="552" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-8.png" alt="" class="wp-image-813" style="width:362px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-8.png 588w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-8-300x282.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-8-13x12.png 13w" sizes="auto, (max-width: 588px) 100vw, 588px" /></figure>



<ul class="wp-block-list">
<li>Key Notes:<br>○ preprocessors: Specifies that files in the src/ directory should be processed
to measure test coverage.<br>○ coverageReporter: Configures the report type (HTML here) and the output
directory for the coverage report.</li>
</ul>



<p><strong>Run the tests with Karma:</strong></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="317" height="56" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-9.png" alt="" class="wp-image-814" style="width:213px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-9.png 317w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-9-300x53.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-9-18x3.png 18w" sizes="auto, (max-width: 317px) 100vw, 317px" /></figure>



<ul start="4" class="wp-block-list">
<li>After execution, the coverage reports will be available in the coverage/ directory.</li>
</ul>



<h2 class="wp-block-heading">Step 2: Analyze the Reports</h2>



<p>Open the <code>coverage/index.html</code> file in a browser to view the following details:</p>



<p>● Statements: Percentage of covered code statements.<br>● Branches: Percentage of covered code branches (e.g., if and else paths).<br>● Functions: Percentage of tested functions.<br>● Lines: Percentage of covered code lines.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="244" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-10-1024x244.png" alt="" class="wp-image-815" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-10-1024x244.png 1024w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-10-300x71.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-10-768x183.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-10-18x4.png 18w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-10.png 1118w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Step 3: Improving Coverage</h2>



<p>● Write additional tests to cover untested scenarios.<br>● Focus on critical areas, such as functions with complex logic.<br>● Use the metrics from the reports to prioritize testing for important code sections.</p>



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



<p>With this, you have set up an efficient coverage analysis using Jasmine and Karma. Now
you know where to improve your code, which not only enhances quality but also helps detect
potential bugs before they reach users. I hope this short tutorial was helpful. Now let’s code!
🚀</p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/06/16/test-coverage-mit-jasmine-und-karma-in-3-einfachen-schritten/">Test Coverage mit Jasmine und Karma in 3 einfachen Schritten</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Einstieg in Unit-Tests mit JavaScript, Jasmine und Karma</title>
		<link>https://rhein-ruhr-informatik.de/en/2025/05/30/einstieg-in-unit-tests-mit-javascript-jasmine-und-karma/</link>
		
		<dc:creator><![CDATA[Rhein-Ruhr-Informatik]]></dc:creator>
		<pubdate>Fri, 30 May 2025 05:58:10 +0000</pubdate>
				<category><![CDATA[Artikel]]></category>
		<category><![CDATA[Testing]]></category>
		<guid ispermalink="false">https://rhein-ruhr-informatik.de/?p=800</guid>

					<description><![CDATA[<p>Erfahren Sie, wie Sie zuverlässige JavaScript-Anwendungen durch Unit-Tests erstellen! In diesem praxisnahen Tutorial richten Sie Jasmine und Karma Schritt für Schritt ein, schreiben aussagekräftige Tests und automatisieren deren Ausführung. Ob Sie neu im Testen sind oder Ihre Fähigkeiten vertiefen möchten – diese Anleitung vermittelt grundlegende Praktiken für sauberen, wartbaren Code. [&#8230;]</p>
<p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/05/30/einstieg-in-unit-tests-mit-javascript-jasmine-und-karma/">Einstieg in Unit-Tests mit JavaScript, Jasmine und Karma</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Learn how to build reliable JavaScript applications through unit testing! In this hands-on tutorial, you’ll set up Jasmine and Karma from scratch, write meaningful tests for your code, and automate test execution. Whether you’re new to testing or refining your skills, this guide will equip you with foundational practices to ensure clean, maintainable code. Let’s turn messy code into trustworthy solutions!</p>



<h3 class="wp-block-heading"><strong>1.</strong><strong> </strong><strong>Prerequisites</strong></h3>



<ul class="wp-block-list">
<li>Code editor of your choice</li>



<li>Code-Editor Ihrer Wahl</li>
</ul>



<h3 class="wp-block-heading"><a></a><strong>2.</strong><strong> </strong><strong>Install Dependencies</strong></h3>



<p>This step establishes the testing ecosystem. Jasmine provides the testing syntax and assertion capabilities, while Karma acts as the test runner that executes tests in real browsers. The Chrome launcher enables testing in a familiar browser environment.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="923" height="298" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image.png" alt="" class="wp-image-802" style="width:568px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image.png 923w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-300x97.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-768x248.png 768w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-18x6.png 18w" sizes="auto, (max-width: 923px) 100vw, 923px" /></figure>



<h3 class="wp-block-heading"><a></a><strong>Configure Karma</strong></h3>



<p>Karma's configuration wizard helps create an optimal test environment. By selecting Jasmine as the testing framework and Chrome as the target browser, you ensure tests run consistently. The file patterns tell Karma where to look for source files and tests.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="306" height="50" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-1.png" alt="" class="wp-image-803" style="width:188px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-1.png 306w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-1-300x49.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-1-18x3.png 18w" sizes="auto, (max-width: 306px) 100vw, 306px" /></figure>



<p><strong>During setup</strong></p>



<ul class="wp-block-list">
<li>Testing framework: Jasmine</li>



<li>Browser: Chrome</li>



<li>File paths <code>src/*.js, test/*.spec.js</code></li>



<li>Keep defaults for other options</li>
</ul>



<h3 class="wp-block-heading"><strong> </strong><strong>Project Structure</strong></h3>



<pre class="wp-block-code"><code>my-test-project/
├── src/
│   └── calculator.js
├── test/
│   └── calculator.spec.js
├── karma.conf.js
└── package.json
</code></pre>



<p>A logical file structure separates concerns between application code (src) and test specifications (test). The .spec.js suffix clearly identifies test files, following JavaScript community conventions. This organization improves code maintainability.</p>



<h3 class="wp-block-heading"><a></a><strong>Sample Code (src/calculator.js)</strong></h3>



<p>So, here is just a code sample that we will use to write unit tests for:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="331" height="306" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-2.png" alt="" class="wp-image-805" style="width:236px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-2.png 331w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-2-300x277.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-2-13x12.png 13w" sizes="auto, (max-width: 331px) 100vw, 331px" /></figure>



<h3 class="wp-block-heading"><a></a><strong>Test Cases (test/calculator.spec.js)</strong></h3>



<p>Jasmine's human-readable syntax uses describe blocks to group related tests and it statements for individual scenarios. Each expect assertion verifies specific functionality, creating a safety net against regressions.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="661" height="320" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-3.png" alt="" class="wp-image-806" style="width:402px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-3.png 661w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-3-300x145.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-3-18x9.png 18w" sizes="auto, (max-width: 661px) 100vw, 661px" /></figure>



<h3 class="wp-block-heading"><a></a><strong>7. npm-Scripts (package.json)</strong></h3>



<p>Custom scripts in package.json automate test execution. The --single-run mode is ideal for CI/CD pipelines, while watch mode provides instant feedback during development. These shortcuts streamline your testing workflow.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="463" height="130" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-4.png" alt="" class="wp-image-807" style="width:336px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-4.png 463w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-4-300x84.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-4-18x5.png 18w" sizes="auto, (max-width: 463px) 100vw, 463px" /></figure>



<h3 class="wp-block-heading"><a></a><strong>Running Tests</strong></h3>



<p>Test execution validates your code's behavior in real-time. Karma spins up a browser instance, runs all tests, and reports results in the terminal. Green checkmarks confirm your code works as intended, while failures highlight areas needing attention.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="420" height="172" src="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-5.png" alt="" class="wp-image-808" style="width:284px;height:auto" srcset="https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-5.png 420w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-5-300x123.png 300w, https://rhein-ruhr-informatik.de/wp-content/uploads/2025/05/image-5-18x7.png 18w" sizes="auto, (max-width: 420px) 100vw, 420px" /></figure>



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



<p><strong>Universal Tips</strong></p>



<ul class="wp-block-list">
<li>Start with simple test cases</li>



<li>Use <code>describe()</code> for test suites</li>



<li>Each <code>it()</code> represents one test scenario</li>



<li>Common matchers: <code>.toBe(), .toEqual(), .toThrow()</code></li>



<li>Debug with <code>console.log()</code> in tests if needed</li>
</ul>



<p><strong>Now, happy testing!</strong> 🚀</p><p>The post <a href="https://rhein-ruhr-informatik.de/en/2025/05/30/einstieg-in-unit-tests-mit-javascript-jasmine-und-karma/">Einstieg in Unit-Tests mit JavaScript, Jasmine und Karma</a> appeared first on <a href="https://rhein-ruhr-informatik.de/en">Rhein-Ruhr-Informatik</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>