<?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>Schnittstellen Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/schnittstellen/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/schnittstellen/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Sun, 01 Oct 2023 11:11:23 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://i0.wp.com/ceosbay.com/wp-content/uploads/2022/11/image.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Schnittstellen Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/schnittstellen/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Firmware &#8211; Das Herzstück moderner Geräte</title>
		<link>https://ceosbay.com/2023/09/30/firmware-das-herzstueck-moderner-geraete/</link>
					<comments>https://ceosbay.com/2023/09/30/firmware-das-herzstueck-moderner-geraete/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sat, 30 Sep 2023 08:45:17 +0000</pubDate>
				<category><![CDATA[Dos]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Firmware]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Automatisierte Tests]]></category>
		<category><![CDATA[BIOS]]></category>
		<category><![CDATA[Bootloader]]></category>
		<category><![CDATA[Code-Analyse]]></category>
		<category><![CDATA[Coverity]]></category>
		<category><![CDATA[CppUTest]]></category>
		<category><![CDATA[Echtzeit-Debugging]]></category>
		<category><![CDATA[Echtzeitbetriebssystem]]></category>
		<category><![CDATA[Embedded-Systeme]]></category>
		<category><![CDATA[Fehlerbehandlung]]></category>
		<category><![CDATA[Fehlererkennung]]></category>
		<category><![CDATA[Fehlerkorrektur]]></category>
		<category><![CDATA[Firmware-Aktualisierung]]></category>
		<category><![CDATA[Firmware-Architektur]]></category>
		<category><![CDATA[Firmware-Design]]></category>
		<category><![CDATA[Firmware-Entwicklung]]></category>
		<category><![CDATA[Firmware-Protokollierung]]></category>
		<category><![CDATA[Firmware-Revision]]></category>
		<category><![CDATA[Firmware-Update]]></category>
		<category><![CDATA[Firmware-Validierung]]></category>
		<category><![CDATA[Hardware-In-the-Loop]]></category>
		<category><![CDATA[Hardware-Interface]]></category>
		<category><![CDATA[JTAG-Debugger]]></category>
		<category><![CDATA[Kommunikationsprotokolle]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Logikanalysator]]></category>
		<category><![CDATA[Mikrocontroller]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Oszilloskop]]></category>
		<category><![CDATA[PC-lint]]></category>
		<category><![CDATA[Plattformspezifische Firmware]]></category>
		<category><![CDATA[QEMU]]></category>
		<category><![CDATA[Robot Framework]]></category>
		<category><![CDATA[RTOS]]></category>
		<category><![CDATA[Schnittstellen]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Signalanalyse]]></category>
		<category><![CDATA[Simulatoren]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Speicheroptimierung]]></category>
		<category><![CDATA[Systemintegration]]></category>
		<category><![CDATA[Test-Tools]]></category>
		<category><![CDATA[Testautomatisierung]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tracealyzer]]></category>
		<category><![CDATA[Unity]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=2501</guid>

					<description><![CDATA[<p>In der dynamischen Welt der Informationstechnologie übersehen viele oft eine entscheidende Komponente: die Firmware. In diesem Blog-Beitrag beleuchte ich, was die Firmware ist, ihre Geschichte und biete Tipps zur korrekten Implementierung. Was ist Firmware? Firmware &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/09/30/firmware-das-herzstueck-moderner-geraete/">Firmware &#8211; Das Herzstück moderner Geräte</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In der dynamischen Welt der Informationstechnologie übersehen viele oft eine entscheidende Komponente: die Firmware. In diesem Blog-Beitrag beleuchte ich, was die Firmware ist, ihre Geschichte und biete Tipps zur korrekten Implementierung.</p>



<h3 class="wp-block-heading">Was ist Firmware?</h3>



<p>Firmware definiert sich als spezialisierte Software, die direkt auf Hardware-Komponenten läuft. Im Gegensatz zu alltäglicher Software, die auf Betriebssystemen wie Windows oder MacOS operiert, arbeitet sie direkt mit der physischen Hardware eines Geräts. Sie stellt den grundlegenden Code bereit, den Geräte benötigen, um zu starten und zu funktionieren.</p>



<p>Ein gutes Beispiel für eine Firmware ist das BIOS (Basic Input/Output System) eines Computers. Bevor das Betriebssystem lädt, initialisiert das BIOS die Hardware-Komponenten und sorgt dafür, dass alles bereit ist.</p>



<h3 class="wp-block-heading">Die Entstehung</h3>



<p>Obwohl der Begriff &#8222;Firmware&#8220; in den 1960er Jahren an Popularität gewann, begann die Idee bereits mit den frühesten Computern. Schon damals mussten Computer eine Art &#8222;Startprogramm&#8220; haben, um zu funktionieren.</p>



<h3 class="wp-block-heading">Tipps zur Implementierung und Umsetzung von Firmware</h3>



<ol class="wp-block-list">
<li><strong>Klarheit über das Zielgerät</strong>: Vor der Entwicklung muss man wissen, auf welcher spezifischen Hardware die Firmware laufen soll. Unterschiedliche Hardware-Plattformen erfordern oft spezifische Anpassungen.</li>



<li><strong>Robustheit und Fehlerbehandlung</strong>: Im Gegensatz zu normaler Software kann ein Fehler in der Firmware zu schwerwiegenden Hardwareproblemen führen. Deshalb sollte man immer Mechanismen zur Fehlererkennung und -korrektur implementieren.</li>



<li><strong>Aktualisierbarkeit</strong>: Geräte benötigen im Laufe ihrer Lebensdauer oft Firmware-Updates. Ein integrierter Mechanismus zur einfachen Aktualisierung erspart später viele Kopfschmerzen.</li>



<li><strong>Optimierung</strong>: Da Firmware oft mit begrenzten Ressourcen arbeitet, stellt die effiziente Nutzung des verfügbaren Speichers und der Rechenleistung eine hohe Priorität dar.</li>
</ol>



<h3 class="wp-block-heading">Zu beachtende Aspekte</h3>



<ul class="wp-block-list">
<li><strong>Sicherheit</strong>: Mit wachsenden Sicherheitsbedrohungen müssen Entwickler stets wachsam bleiben und regelmäßig Sicherheitslücken prüfen und beheben.</li>



<li><strong>Testen</strong>: Man sollte niemals neue Firmware veröffentlichen, ohne sie ausführlich zu testen. Dies minimiert das Risiko unerwünschter Überraschungen und gewährleistet eine zuverlässige Performance. Doch darauf gehe ich nachfolgend nochmal explizit ein.</li>



<li><strong>Dokumentation</strong>: Eine gründliche Dokumentation erleichtert die Arbeit für zukünftige Entwickler und Techniker, die mit der Firmware interagieren.</li>
</ul>



<h3 class="wp-block-heading">Womit kann man sie testen?</h3>



<p>Die Überprüfung und Validierung stellt sicher, dass sie wie vorgesehen funktioniert und keine unerwünschten Nebenwirkungen aufweist. Diverse Tools helfen Entwicklern bei der Überprüfung ihrer Firmware. Hier sind einige der gebräuchlichsten Test-Tools und -Frameworks:</p>



<ol class="wp-block-list">
<li><strong>JTAG-Debugger</strong>: Dieses Tool ermöglicht das Debuggen in Echtzeit und bietet eine direkte Schnittstelle zur Hardware. Bekannte Debugger sind beispielsweise von SEGGER (J-Link) oder von ARM (Keil).</li>



<li><strong>Logikanalysatoren</strong>: Mit diesen Tools lassen sich digitale Signale aufzeichnen und analysieren, was besonders nützlich ist, um Timing-Probleme oder Kommunikationsfehler auf Hardwareebene zu finden.</li>



<li><strong>Oszilloskope</strong>: Ein wichtiges Werkzeug zur Visualisierung und Analyse analoger und digitaler Signale in der Elektronik.</li>



<li><strong>QEMU</strong>: Ein generischer und <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-Machine-Emulator und Virtualizer, mit dem Entwickler in einer simulierten Umgebung testen können, ohne echte Hardware zu verwenden.</li>



<li><strong>Unity</strong>: Ein Testframework für die C-Sprache, das sich besonders für Embedded-Systeme eignet.</li>



<li><strong>CppUTest</strong>: Ein Test- und Mock-Framework für C und <a href="https://ceosbay.com/2023/02/25/erklaerung-c/">C++</a>, das sich ebenfalls für die Entwicklung eignet.</li>



<li><strong>Hardware-In-the-Loop (HIL)</strong>: Diese Tests simulieren die Hardwareumgebung, in der die Firmware läuft, um realistische Testszenarien zu bieten.</li>



<li><strong>Static Code Analyzers</strong>: Tools wie PC-lint oder Coverity analysieren den Code, um häufige Fehler oder unsichere Praktiken zu identifizieren, bevor der Code auf der Hardware ausgeführt wird.</li>



<li><strong>RTOS-spezifische Tools</strong>: Für Firmware, die auf einem Echtzeitbetriebssystem (RTOS) basiert, gibt es spezielle Tools, die dabei helfen, Tasks, Ressourcenverwendung und andere Aspekte des RTOS zu überwachen. Beispiele hierfür sind Tracealyzer oder FreeRTOS+Trace.</li>



<li><strong>Simulatoren</strong>: Einige Mikrocontroller-Hersteller bieten Simulatoren an, mit denen Entwickler ihre Firmware testen können, ohne physische Hardware zu verwenden. Dies kann beispielsweise in den Entwicklungsumgebungen von Microchip (MPLAB X) oder Texas Instruments vorhanden sein.</li>



<li><strong>Automatisierte Testframeworks</strong>: Tools wie Robot <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a> oder LabVIEW bieten automatisierte Testmöglichkeiten für Firmware.</li>
</ol>



<p>Es ist wichtig, die richtigen Tools für den jeweiligen Anwendungsfall und die spezifische Hardwareplattform auszuwählen. Viele dieser Tools erfordern eine gewisse Einarbeitungszeit, aber die Vorteile in Bezug auf Fehlervermeidung und Effizienzsteigerung überwiegen oft den initialen Aufwand.</p>



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



<p>Die Firmware stellt die Brücke zwischen Hardware und Software dar. Sie beeinflusst maßgeblich die Leistung und Funktionalität von Geräten. Durch ein tiefes Verständnis und sorgfältige Implementierung kann man sicherstellen, dass Geräte zuverlässig und effizient arbeiten. In einer Zeit, in der Technologie in beinahe jedem Aspekt des Lebens eine Rolle spielt, verdient sie die Aufmerksamkeit, die sie benötigt.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/09/30/firmware-das-herzstueck-moderner-geraete/">Firmware &#8211; Das Herzstück moderner Geräte</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/09/30/firmware-das-herzstueck-moderner-geraete/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2501</post-id>	</item>
		<item>
		<title>SonarQube &#8211; Das Code-Qualitätsmanagement-Tool</title>
		<link>https://ceosbay.com/2023/03/17/erklaerung-sonarqube/</link>
					<comments>https://ceosbay.com/2023/03/17/erklaerung-sonarqube/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 17 Mar 2023 16:12:48 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[1061]]></category>
		<category><![CDATA[1998]]></category>
		<category><![CDATA[Analyse]]></category>
		<category><![CDATA[Anwendung]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Checkstyle]]></category>
		<category><![CDATA[Cobol]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Codebasis]]></category>
		<category><![CDATA[Entwicklungsprozess]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[FindBugs]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Governance]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Komplexität]]></category>
		<category><![CDATA[PC]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[PMD]]></category>
		<category><![CDATA[Prüfung]]></category>
		<category><![CDATA[Qube]]></category>
		<category><![CDATA[Quellcode]]></category>
		<category><![CDATA[Quelle]]></category>
		<category><![CDATA[Quelltext]]></category>
		<category><![CDATA[Rechner]]></category>
		<category><![CDATA[Richtlinien]]></category>
		<category><![CDATA[Schnittstellen]]></category>
		<category><![CDATA[Schulden]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Sonar]]></category>
		<category><![CDATA[SonarQube]]></category>
		<category><![CDATA[Sprache]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Standard]]></category>
		<category><![CDATA[Sting]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Überprüfen]]></category>
		<category><![CDATA[Zyklomatisch]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1176</guid>

					<description><![CDATA[<p>SonarQube früher Sonar, ist eine Plattform für die statische Analyse und Bewertung der technischen Qualität von Quelltext bzw. Code. SonarQube analysiert den Quelltext hinsichtlich verschiedener Qualitätsmerkmale und stellt die Ergebnisse über eine Website dar. SonarQube &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/17/erklaerung-sonarqube/">SonarQube &#8211; Das Code-Qualitätsmanagement-Tool</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>SonarQube früher Sonar, ist eine Plattform für die statische Analyse und Bewertung der technischen Qualität von Quelltext bzw. Code. SonarQube analysiert den Quelltext hinsichtlich verschiedener Qualitätsmerkmale und stellt die Ergebnisse über eine Website dar. SonarQube ist in <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> programmiert, unterstützt aber neben der Analyse von <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a>-Anwendungen mit entsprechenden Plugins unter anderem die Programmiersprachen <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>, Groovy, Flex, PHP, PL/SQL, C#, Cobol und die des .Net-Frameworks.</p>



<h3 class="wp-block-heading">Wie funktioniert SonarQube?</h3>



<p><strong>SonarQube besteht aus drei Komponenten</strong></p>



<ol class="wp-block-list" type="1">
<li>Einem Modul für Build-Management-Tools wie <a href="https://ceosbay.com/2022/12/22/erklaerung-maven/" target="_blank" rel="noreferrer noopener">Apache Maven</a> oder Apache Ant. (Hauptsächlich für die Analyse des Quelltextes hinsichtlich verschiedener Qualitätsmerkmale.)</li>



<li>Einer Datenbank, für Speicherung der Ergebnisse der Qualitätsanalyse.</li>



<li>Einer Website für die visuelle Darstellung, Auswertung und das Management der Qualitätsanalyse-Ergebnisse.</li>
</ol>



<p>Durch diese Architektur kann man sowohl eine Prüfung des Quelltextes auf dem Entwicklungsrechner ermöglichen als auch eine Einbindung von SonarQube in den Entwicklungsprozess gewährleisten. Dies unterstützt die Ermittlung der Qualitätsmetriken auf einem Build-Server für die kontinuierliche Integration.</p>



<p>SonarQube analysiert den Quelltext hinsichtlich der Abdeckung durch Modultests, checkt den Quellcode nach doppeltem Code und in Bezug auf die Komplexität. Auch werden unter anderem potenzielle Fehler im Code, Kodier-Richtlinien als auch Kommentare überprüft.</p>



<h3 class="wp-block-heading">Modularer Aufbau und Erweiterungen</h3>



<p>SonarQube ist modular aufgebaut und integriert selbst einige bekannte Entwicklungswerkzeuge zur Analyse der Codequalität, darunter PMD und Checkstyle für die Erkennung von doppeltem Code für die Prüfung von Kodier-Richtlinien. Damit wird unter anderem auch nach ineffizientem Code gesuche. FindBugs dient beispielsweise zum Aufdecken potenzieller Fehler sowie Surefire und Cobertura zur Messung der Qualität der Modultests.</p>



<p>Diese Werkzeuge nutzen entsprechend ihrer Natur und Einsatzgebiete Metriken, um die jeweiligen Auswertungen bzw. Statistiken zu erzeugen. Der Name „Metrik“ trägt jedoch wenig Bedeutung von dem in sich, was eine Metrik ausmacht. Schlägt man nämlich nach woher der Name kommt, landet man im Lateinischen: „ars metrica„, die Lehre von den Maßen. Fragt man jedoch das Institute of Electrical and Electronics Engineers, was eine Softwaremetrik ist, erhält man folgende Antwort:</p>



<p>„software quality metric: A function whose inputs are software data and whose output is a single numerical value that can be interpreted as the degree to which software possesses a given attribute that affects its quality.“ „Eine Softwarequalitätsmetrik ist eine Funktion, die eine Software-Einheit in einen Zahlenwert abbildet, der als Erfüllungsgrad einer Qualitätseigenschaft der Software-Einheit interpretierbar ist.“ – IEEE Standard 1061, 1998</p>



<p>Folglich bedeutet dies, dass es sich bei einer Metrik am Ende des Tages um eine Funktion handelt, die für beliebige Eingaben Zahlen erzeugt. Die Beschaffenheit ist so, dass sie, nur so&nbsp;</p>



<p>lange sie von derselben Funktion erzeugt wurden, vergleichbar sind. Dadurch kann man Rückschlüsse auf die Eingabe mit Hinblick auf die Funktion erzielen.</p>



<p>Ein Beispiel dafür ist die McCabe-Metrik, auch zyklomatische Komplexität genannt. Diese sehr grundlegende Metrik berechnet die Anzahl der unterschiedlichen Pfade durch ein Stück Code. Die Formel ist relativ einfach: Es wird die Anzahl an Kontrollstrukturen wie if, while, case und boolescher Operatoren wie &amp;&amp; und || summiert und nochmals mit 1 addiert. Möchte man diese Information nochmals anhand eines Beispiels betrachten, sieht es folgendermaßen aus:</p>



<pre class="wp-block-code"><code>String nameDesWochenTags(int nr) {
  switch(nr) {
    case 1: return "Montag";
    case 2: return "Dienstag";
    case 3: return "Mittwoch";
    case 4: return "Donnerstag";
    case 5: return "Freitag";
    case 6: return "Samstag";
    case 7: return "Sonntag";
  }
  return "";
}</code></pre>



<p>Diese relativ einfache Methode gibt den Namen eines Wochentages entsprechend seiner 1-indizierten Position innerhalb der Woche zurück. Ihre zyklomatische Komplexität beträgt 8. Zumal 1 + 7 x case. Dies ist ein verhältnismäßig hoher Wert. Ein Maximalwert von 10 gilt als allgemein akzeptiert und ausreichend erprobt. Um also die Komplexität dieser Methode zu verringern, findet eine Refaktorisierung statt, die folgendermaßen aussehen kann:</p>



<pre class="wp-block-code"><code>String nameDesWochenTags(int nr) {
  String&#91;] names = new String&#91;] {
    "Montag", "Dienstag", "Mittwoch",
    "Donnerstag", "Freitag", "Samstag",
    "Sonntag"
  };
  if(nr) &gt; 0 &amp;&amp; &lt;= names.length) {
    return names&#91;nr - 1];
  }
  return "";
}</code></pre>



<p>Die zyklomatische Komplexität dieser Methode beträgt 3. Zumal 1 + 1 x if + 1 x &amp;&amp;. Durch den unterschiedlichen Ansatz kann man die Komplexität verringern. Dennoch ist es relativ unstrittig, dass die erste Version leichter zu verstehen ist.</p>



<p>Will man nun also alle Tools gemeinsam benutzen, muss man alle konfigurieren und ihre Ergebnisse zusammenführen, damit sich ein Gesamtbild darstellen lässt. Außerdem kommt es dabei zwangsweise zu Dopplungen in ausgewerteten Metriken oder anderen Kennzahlen. PMD beispielsweise besitzt durch seinen relativ vagen Aufgabenbereich Überschneidungen im Hinblick auf Codestil mit checkstyle, während es aber auch genauso wie FindBugs auf toten Code achtet. An solchen und weiteren Stellen kann SonarQube Verbesserungen herbeiführen.</p>



<p>Neben der visuellen Anzeige der Ergebnisse der einzelnen Bereiche, ermöglicht SonarQube das Drill-Down der Ergebnisse bis auf die einzelne Metrik und Codezeile sowie die Verknüpfung der einzelnen Metriken sowie die Darstellung ihrer historischen Entwicklung in einer recht übersichtlichen grafischen Oberfläche.</p>



<p>Über einen ausgeklügelten Plugin-Mechanismus ist eine relativ einfache Integration von Erweiterungen möglich. Neben den Erweiterungen für die Analyse zusätzlicher Programmiersprachen gibt es Plugins für ergänzende Metriken, Governance, Schnittstellen zu Entwicklungsumgebungen, Visualisierungen, Integration sowie zur Berechnung der technischen Schuld(en).</p>



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



<p>Ich arbeite noch nicht so lange mit SonarQube. Um genau zu sein, habe ich es mir erst heute das erste Mal angeschaut. Zusammenfassend kann ich folgendes sagen:</p>



<p>Statistiken sind zwar interessant und es kann Spaß machen, sich diese anzuschauen, doch ist eine statische Codeanalyse erst dann wirklich vollständig, wenn ein Mindestmaß an Interpretation hineingeflossen ist.</p>



<p>Die Codeanalyse liefert ein gutes Gefühl für die Codebasis. Erst so kann man fundierte Aussagen darüber treffen, welche Bereiche des Projekts besonders gefährdet, instabil oder verbesserungsfähig sind.</p>



<p>Regelmäßige Analysen können die Teammotivation erhöhen. Eine positive Issuebilanz am Ende eines Sprints und aufwärtszeigende Historiengraphen sollten gute Treiber für eine Gruppe Entwickler und ein Beweis für die eigene Leistung sein.</p>



<p>Alles in allem sind Analyseergebnisse immer gut als Argumentationsgrundlage. Mit Hilfe der Projekthistorie, die eine Auswahl gut darstellbarer Kennzahlen beinhaltet, kann man vor Kunden oder Entscheidern besser über ein eventuell nötiges technisches Release diskutieren.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/17/erklaerung-sonarqube/">SonarQube &#8211; Das Code-Qualitätsmanagement-Tool</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/17/erklaerung-sonarqube/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1176</post-id>	</item>
		<item>
		<title>Apache Kafka &#8211; Echtzeit-Datenströme in wertvolle Einblicke verwandeln</title>
		<link>https://ceosbay.com/2022/12/25/erklaerung-apache-kafka/</link>
					<comments>https://ceosbay.com/2022/12/25/erklaerung-apache-kafka/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Sun, 25 Dec 2022 10:51:49 +0000</pubDate>
				<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Brokers]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[Confluent]]></category>
		<category><![CDATA[Connect]]></category>
		<category><![CDATA[Copy]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[Datenströme]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Foundation]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Kafka]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[Operatoren]]></category>
		<category><![CDATA[Plattform]]></category>
		<category><![CDATA[Producer]]></category>
		<category><![CDATA[Quellen]]></category>
		<category><![CDATA[Schnittstellen]]></category>
		<category><![CDATA[Skalierbar]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Topic]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1043</guid>

					<description><![CDATA[<p>Apache Kafka ist eine Open-Source-Software der Apache Software Foundation, die insbesondere zur Verarbeitung von Datenströmen dient. Kafka ist dazu entwickelt, Datenströme zu speichern und zu verarbeiten, und stellt eine Schnittstelle zum Laden und Exportieren von &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/25/erklaerung-apache-kafka/">Apache Kafka &#8211; Echtzeit-Datenströme in wertvolle Einblicke verwandeln</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Apache Kafka ist eine <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open-Source</a>-Software der Apache Software Foundation, die insbesondere zur Verarbeitung von Datenströmen dient. Kafka ist dazu entwickelt, Datenströme zu speichern und zu verarbeiten, und stellt eine Schnittstelle zum Laden und Exportieren von Datenströmen zu Drittsystemen bereit. Die Kernarchitektur bildet ein verteiltes Transaktions-Log.</p>



<p>Apache Kafka ist die Entwicklung von LinkedIn. Seit 2012 ist es Teil der Apache Software Foundation. Im Jahr 2014 gründeten die Entwickler das Unternehmen Confluent aus LinkedIn heraus, welches die Weiterentwicklung von Apache Kafka fokussiert. Apache Kafka ist ein verteiltes System, das skalierbar und fehlertolerant und somit für Big-Data-Anwendungen geeignet ist.</p>



<h3 class="wp-block-heading">Wie funktioniert Apache Kafka?</h3>



<p>Den Kern des Systems bildet ein Rechnerverbund (Cluster), bestehend aus sogenannten Brokern. Broker speichern Schlüssel-Wert-Nachrichten zusammen mit einem Zeitstempel in Topics. Topics wiederum sind in Partitionen aufgeteilt, die im Kafka-Cluster verteilt und repliziert sind. Innerhalb einer Partition werden die Nachrichten in der Reihenfolge gespeichert, in der sie geschrieben wurden. Lese- und Schreibzugriffe umgehen den Arbeitsspeicher durch die direkte Anbindung der Festplatten mit dem Netzwerkadapter (Zero Copy), so dass weniger Kopiervorgänge vor dem Schreiben oder Versenden von Nachrichten nötig sind.</p>



<h3 class="wp-block-heading">Was ist Zero Copy im Kontext Apache Kafka?</h3>



<p>Zero Copy &#8222;Null-Kopie&#8220; beschreibt Computeroperationen, bei denen die CPU keine Daten von einem Speicherbereich in einen anderen kopiert oder bei denen unnötige Datenkopien vermieden werden. Dies wird häufig verwendet, um CPU-Zyklen und Speicherbandbreite bei vielen zeitaufwändigen Aufgaben zu sparen. Beispielsweise bei der Übertragung einer Datei mit hoher Geschwindigkeit über ein Netzwerk, wodurch die Leistung von Programmen (Prozessen), die von einem Computer ausgeführt werden, verbessert wird.</p>



<p>Anwendungen, die Daten in einen Kafka-Cluster schreiben, werden als Producer bezeichnet, Anwendungen, die Daten von dort lesen, als Consumer. Zur Datenstromverarbeitung besteht die Möglichkeit, Kafka Streams zu verwenden. Kafka Streams ist eine Java-Bibliothek, die Daten aus Kafka liest, verarbeitet und die Ergebnisse nach Kafka zurückschreibt. Auch die Verwendung mit anderen Stream-Verarbeitungssystemen ist möglich. Ab der Version 0.11.0.0 ist „„transaktionales Schreiben“ auch möglich, dadurch ist garantiert, dass die Verarbeitung von Nachrichten exakt ein einziges Mal stattfindet, wenn eine Anwendung Kafka Streams verwendet. Stichwort (Exactly-Once processing) &#8211; Wobei dies ein Thema für sich darstellt und den Rahmen hier sprengen würde.</p>



<p>Kafka unterstützt zwei Arten von Topics: „normal“ und „compacted“ Topics. Normale Topics garantieren, Nachrichten für einen konfigurierbaren Zeitraum vorzuhalten oder einen gewissen Speicherbedarf nicht zu überschreiten. Liegen Nachrichten vor, die älter sind als die konfigurierte „retention time“, oder ist das Speicherlimit einer Partition überschritten, kann Kafka alte Nachrichten löschen, um Festplattenspeicher freizugeben. Standardmäßig speichert Kafka Nachrichten für 7 Tage, aber es ist auch möglich, Nachrichten für immer zu speichern. Neben „normal“ Topics bietet Kafka auch „compacted“ Topics an, die keiner Zeit- oder Platzlimitierung unterliegen. Stattdessen werden neuere Nachrichten als Aktualisierung („updates“) alter Nachrichten mit dem gleichen Schlüssel interpretiert. Dadurch ist garantiert, dass keine Löschung der neuesten Nachricht pro Schlüssel stattfindet. Nutzer können Nachrichten jedoch explizit löschen, indem sie eine Spezialnachricht (sog. tombstone) mit null-Wert für den entsprechenden Schlüssel schreiben.</p>



<h3 class="wp-block-heading">Apache Kafka bietet vier Hauptschnittstellen an:</h3>



<ul class="wp-block-list">
<li>Producer API<br>Für Anwendungen, die Daten in einen Kafka-Cluster schreiben wollen.&nbsp;</li>



<li>Consumer API<br>Für Anwendungen, die Daten aus einem Kafka-Cluster lesen wollen.</li>



<li>Connect API<br>Import/Export-Schnittstelle zur Anbindung von Drittsystemen und baut auf der Consumer- und der Producer-API auf. Kafka Connect führt sogenannte Konnektoren („connectors“) aus, welche die eigentliche Kommunikation mit dem Drittsystem übernehmen. Dabei definiert die Connect-API die Programmierschnittstellen, die von einem Connector implementiert werden müssen. Es gibt bereits viele frei verfügbare und kommerzielle Konnektoren, die genutzt werden können. Apache Kafka liefert selbst keine produktreifen Konnektoren.</li>



<li>Streams API<br>Java-Bibliothek zur Datenstromverarbeitung. Die Bibliothek ermöglicht es, zustandsbehaftete Datenstromverarbeitungsprogramme zu entwickeln, die sowohl skalierbar, flexibel als auch fehlertolerant sind. Dafür bietet Kafka Streams eine eigene domänenspezifische Sprache (DSL) an, die Operatoren zum Filtern, Abbilden (Mappen) oder Gruppieren enthält. Des Weiteren werden Zeitfenster, Joins, und Tabellen unterstützt. Ergänzend zur domänenspezifischen Sprache ist es auch möglich, eigene Operatoren in der Processor-API zu implementieren. Diese Operatoren können auch in der domänenspezifischen Sprache genutzt werden. Zur Unterstützung zustandsbehafteter Operatoren wird RocksDB verwendet. Dies erlaubt es, Operatorzustände lokal vorzuhalten und Zustände, die größer als der verfügbare Hauptspeicher sind, als RocksDB-Daten auf die Festplatte auszulagern. Um den Anwendungszustand verlustsicher zu speichern, werden alle Zustandsänderungen zusätzlich in einem Kafka-Topic protokolliert. Im Falle eines Ausfalls können alle Zustandsübergänge aus dem Topic ausgelesen werden, um den Zustand wiederherzustellen.</li>
</ul>



<p>Die Consumer- und Producer-Schnittstellen basieren auf dem Kafka-Nachrichtenprotokoll und können als Referenzimplementierung in Java angesehen werden. Das eigentliche Kafka-Nachrichtenprotokoll ist ein binäres Protokoll und erlaubt es damit, Consumer- und Producer-Clients in jeder beliebigen Programmiersprache zu entwickeln. Damit ist Kafka nicht an das JVM-Ökosystem gebunden.</p>



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



<p>Apache Kafka bietet als Plattform ein redundantes und skalierbares Event-Streaming. Es funktioniert sowohl auf einem einzelnen Server als auch in riesigen Clustern mit multiplen Brokern. Die Datenquellen und Senken werden in Kafka als Producer und Consumer bezeichnet, die Events in Topics schreiben oder aus Topics lesen. Zusätzlich können verschiedene Systeme über Kafka Connect angebunden werden. Eine Echtzeitdatenverarbeitung auf Stream Basis ist über das Kafka-Streams-Framework möglich. Durch Consumer Groups kann man auch die Anwendungen, die ihre Daten aus Kafka beziehen, verteilt ausgeführen, ohne dass die Verarbeitung eines Events mehrfach stattfindet.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/25/erklaerung-apache-kafka/">Apache Kafka &#8211; Echtzeit-Datenströme in wertvolle Einblicke verwandeln</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/12/25/erklaerung-apache-kafka/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1043</post-id>	</item>
	</channel>
</rss>
