<?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>Laufzeitumgebung Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/laufzeitumgebung/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/laufzeitumgebung/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Fri, 13 Oct 2023 03:51:29 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/ceosbay.com/wp-content/uploads/2022/11/image.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Laufzeitumgebung Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/laufzeitumgebung/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>Debugging &#8211; Die Kunst der Fehlerbehebung und Optimierung</title>
		<link>https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/</link>
					<comments>https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 12 Oct 2023 21:58:52 +0000</pubDate>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwarequalität]]></category>
		<category><![CDATA[Spieleentwicklung]]></category>
		<category><![CDATA[Algorithmus]]></category>
		<category><![CDATA[Anwendungslogik]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Benutzeroberfläche]]></category>
		<category><![CDATA[Breakpoint]]></category>
		<category><![CDATA[Call-Stack]]></category>
		<category><![CDATA[Codeausführung]]></category>
		<category><![CDATA[Codeteilung]]></category>
		<category><![CDATA[Codeüberprüfung]]></category>
		<category><![CDATA[Computergeschichte]]></category>
		<category><![CDATA[Datenbankabfragen]]></category>
		<category><![CDATA[Datenbankantworten]]></category>
		<category><![CDATA[Debugger]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Designfehler]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Exception-Handling]]></category>
		<category><![CDATA[Fehlerbehebung]]></category>
		<category><![CDATA[Fehlerdiagnose]]></category>
		<category><![CDATA[Fehlerprotokoll]]></category>
		<category><![CDATA[Fehlerquelle]]></category>
		<category><![CDATA[Fehlerreproduktion]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Funktionsüberprüfung]]></category>
		<category><![CDATA[Grace Hopper]]></category>
		<category><![CDATA[Haltepunkte]]></category>
		<category><![CDATA[Heap-Analyse]]></category>
		<category><![CDATA[Integrationstest]]></category>
		<category><![CDATA[Isolierung]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Kompilierungsfehler]]></category>
		<category><![CDATA[Konsolenprotokoll]]></category>
		<category><![CDATA[Laufzeitfehler]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Laufzeituntersuchung]]></category>
		<category><![CDATA[Logging-Techniken]]></category>
		<category><![CDATA[Logikfehler]]></category>
		<category><![CDATA[Lösungsimplementierung]]></category>
		<category><![CDATA[Multithreading-Probleme]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance-Messung]]></category>
		<category><![CDATA[Problemidentifikation]]></category>
		<category><![CDATA[Programmfluss]]></category>
		<category><![CDATA[Programmierfehler]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[Race-Bedingungen]]></category>
		<category><![CDATA[Regressionstest]]></category>
		<category><![CDATA[Reproduktion]]></category>
		<category><![CDATA[Schleifen-Fehler]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Softwarefehler]]></category>
		<category><![CDATA[Speicherlecks]]></category>
		<category><![CDATA[Stack-Trace]]></category>
		<category><![CDATA[Symptome]]></category>
		<category><![CDATA[Synchronisationsprobleme]]></category>
		<category><![CDATA[Systematischer Ansatz]]></category>
		<category><![CDATA[Techniken]]></category>
		<category><![CDATA[Testen]]></category>
		<category><![CDATA[Thread-Analyse]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Unit-Test]]></category>
		<category><![CDATA[Variablenüberwachung]]></category>
		<category><![CDATA[Watchpoint]]></category>
		<category><![CDATA[Webanwendungen]]></category>
		<category><![CDATA[Webfehler]]></category>
		<category><![CDATA[Zustandsprüfung]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=2597</guid>

					<description><![CDATA[<p>Debugging stellt einen zentralen Prozess in der Softwareentwicklung dar und beschäftigt sich mit der Identifizierung und Behebung von Fehlern in einem Code. Aber wie hat sich dieses Konzept entwickelt und welche Methoden gibt es, um &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/">Debugging &#8211; Die Kunst der Fehlerbehebung und Optimierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Debugging stellt einen zentralen Prozess in der Softwareentwicklung dar und beschäftigt sich mit der Identifizierung und Behebung von Fehlern in einem Code. Aber wie hat sich dieses Konzept entwickelt und welche Methoden gibt es, um es effektiv zu nutzen? In diesem Beitrag biete ich eine grobe Übersicht über das Debugging und zeige anhand von Beispielen, wie es in der Praxis funktioniert.</p>



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



<p>Debugging bezeichnet den Prozess, Fehler (sogenannte &#8222;Bugs&#8220;) in einem Softwareprogramm zu finden und zu beheben. Dies kann Designfehler, Logikfehler oder Laufzeitfehler einschließen. Ziel ist es, eine reibungslose, effiziente und korrekte Ausführung des Programms sicherzustellen.</p>



<h3 class="wp-block-heading">Geschichte des Debuggings</h3>



<p>Der Begriff &#8222;Debugging&#8220; leitet sich von der frühen Computergeschichte ab, als Grace Hopper, eine Computerpionierin, einen echten Insekten (einen Motte) im Relay eines Computers entdeckte und diesen entfernte. Dieses Ereignis dokumentierte sie als &#8222;ersten echten Bug&#8220; und gab so dem Prozess seinen Namen. Das Foto von dieser Motte möchte ich niemandem vorenthalten.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="871" height="585" src="https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=871%2C585&#038;ssl=1" alt="" class="wp-image-2733" srcset="https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=1024%2C688&amp;ssl=1 1024w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=300%2C202&amp;ssl=1 300w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=768%2C516&amp;ssl=1 768w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=1536%2C1032&amp;ssl=1 1536w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?resize=1070%2C719&amp;ssl=1 1070w, https://i0.wp.com/ceosbay.com/wp-content/uploads/2023/10/First-Bug.jpg?w=1720&amp;ssl=1 1720w" sizes="(max-width: 871px) 100vw, 871px" /></figure>



<h3 class="wp-block-heading">Wie nähert man sich dem Debugging?</h3>



<ol class="wp-block-list">
<li><strong>Verstehen des Problems</strong>: Bevor man einen Fehler beheben kann, muss man das Problem genau verstehen. Deshalb gilt, die Symptome des Bugs zu identifizieren und zu wissen, wann und wie er auftritt.</li>



<li><strong>Reproduktion des Fehlers</strong>: Ein Fehler, den man zuverlässig reproduzieren kann, lässt sich leichter lokalisieren und beheben.</li>



<li><strong>Einsatz von Debugging-Tools</strong>: Moderne Programmiersprachen bieten spezielle Werkzeuge, um den Code zur Laufzeit zu untersuchen, z.B. Debugger, die es erlauben, den Code Schritt für Schritt auszuführen und den Zustand der Variablen zu beobachten.</li>



<li><strong>Isolieren des Problems</strong>: Manchmal hilft es, den Code in kleinere Abschnitte zu unterteilen oder testweise Codeabschnitte zu deaktivieren. Somit kann man die Fehlerquelle eingrenzen.</li>



<li><strong>Lösung implementieren und testen</strong>: Nachdem der Fehler gefunden ist, muss man eine Lösung implementieren und ausführlich testen, um sicherzustellen, dass das Problem behoben ist und keine neuen Fehler eingeführt wurden.</li>
</ol>



<h3 class="wp-block-heading">Praktische Beispiele für Debugging</h3>



<ul class="wp-block-list">
<li><strong>Fehler in einer Schleife</strong>: Ein Programm zählt nicht korrekt. Daher untersucht man mit einem Debugger den Schleifen-Code, setzt Haltepunkte und beobachtet, wie sich die Zählvariable verändert.</li>



<li><strong>Datenbankabfragen</strong>: Eine Datenbankabfrage liefert nicht die erwarteten Ergebnisse. Daher kann man durch das Überprüfen der Abfrage und den Einsatz von Logging-Techniken sehen, welche Daten die Datenbank tatsächlich zurückgibt und wo das Problem liegt.</li>



<li><strong>Webanwendungen</strong>: Ein Button auf einer Webseite funktioniert nicht. Somit lassen sich mit den Entwicklertools des Browsers <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>-Fehler aufdecken und beheben.</li>
</ul>



<h3 class="wp-block-heading">Welche Debugging Tools gibt es?</h3>



<p>Es gibt viele Debugging-Tools, die sich in ihrer Funktionalität, Anwendungsbereich und unterstützten Programmiersprachen unterscheiden. Hier ist eine Liste einiger gängiger und weit verbreiteter Debugging-Tools:</p>



<ol class="wp-block-list">
<li><strong>GDB (GNU Debugger)</strong>: Ein mächtiger Debugger für viele Programmiersprachen, insbesondere C und <a href="https://ceosbay.com/2023/02/25/erklaerung-c/">C++</a>.</li>



<li><strong>LLDB</strong>: Der Debugger von LLVM, der primär für C, <a href="https://ceosbay.com/2023/02/25/erklaerung-c/">C++</a> und Objective-C verwendet wird.</li>



<li><strong>pdb</strong>: Ein Debugger für <a href="https://ceosbay.com/2022/12/20/erklaerung-python/">Python</a>.</li>



<li><strong>Visual Studio Debugger</strong>: Integriert in die <a href="https://ceosbay.com/2023/02/22/visual-studio-code-der-leichte-schwergewicht/">Visual Studio</a> IDE und unterstützt mehrere Sprachen, insbesondere C#, <a href="https://ceosbay.com/2023/02/25/erklaerung-c/">C++</a> und VB.NET.</li>



<li><strong>Xcode Debugger</strong>: Ein Debugger für iOS- und <a href="https://ceosbay.com/2023/10/05/macos-intuitiv-sicher-nahtlos/">MacOS</a>-Anwendungen, hauptsächlich in Swift und Objective-C geschrieben. (Siehe auch meinen Beitrag über <a href="https://ceosbay.com/2023/09/26/xcode-wo-ideen-zu-apple-apps-werden/">Xcode</a>)</li>



<li><strong>Eclipse Java Development Tools (JDT)</strong>: Für <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a>-Anwendungen.</li>



<li><strong>NetBeans Debugger</strong>: Ein Debugger für <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a> und andere Sprachen, der in der NetBeans IDE integriert ist.</li>



<li><strong>Firebug &amp; Firefox Developer Tools</strong>: Werkzeuge zum Debuggen von Webseiten, insbesondere <a href="https://ceosbay.com/2022/12/29/erklaerung-html/">HTML</a>, <a href="https://ceosbay.com/2023/02/27/erklaerung-css/">CSS</a> und <a href="https://ceosbay.com/2022/11/12/javascript/">JavaScript</a>, in Firefox.</li>



<li><strong>Chrome Developer Tools</strong>: Integrierte Debugging- und Profilierungswerkzeuge für Webentwickler in Google Chrome.</li>



<li><strong>Safari Web Inspector</strong>: Debugging-Tool für Webentwickler in Safari.</li>



<li><strong>Opera Dragonfly</strong>: Debugging-Tool für Webentwickler in Opera.</li>



<li><strong>WinDbg</strong>: Ein Windows-Debugger für native Anwendungen und Systemprobleme.</li>



<li><strong>Fiddler</strong>: Ein Web-Debugging-<a href="https://ceosbay.com/2023/07/21/proxy-sicher-schnell-und-zuverlaessig/">Proxy</a>, mit dem der Datenverkehr zwischen Computer und Internet überwacht werden kann.</li>



<li><strong>Wireshark</strong>: Ein Netzwerkanalyse-Tool, mit dem Datenverkehr &#8222;geschnüffelt&#8220; und analysiert werden kann. Siehe meinen Beitrag über <a href="https://ceosbay.com/2022/11/24/erklaerung-wireshark/">Wireshark</a>.</li>



<li><strong>Valgrind</strong>: Ein Instrumentierungsframework für das Dynamic Analysis von <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/">Linux</a>-Programmen. Besonders nützlich zum Aufspüren von Speicherlecks.</li>



<li><strong>IntelliJ IDEA Debugger</strong>: Für <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a> und andere JVM-Sprachen. Teil der <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/">IntelliJ IDEA IDE</a>.</li>



<li><strong>DTrace</strong>: Ein Werkzeug für die Tracing und Fehlerbehebung von Anwendungen und Systemen, verfügbar auf einigen <a href="https://ceosbay.com/2023/10/06/unix-das-betriebssystem-das-die-it-welt-veraenderte/">Unix</a>-basierten Systemen.</li>



<li><strong>strace &amp; ltrace</strong>: Tools für das Tracing von Systemaufrufen und Library-Aufrufen in <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/">Linux</a>.</li>



<li><strong>jdb</strong>: Ein Command-Line <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java</a>-Debugger.</li>



<li><strong>Node.js Inspector</strong>: Für das Debuggen von <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/">Node.js</a>-Anwendungen.</li>
</ol>



<h3 class="wp-block-heading">Weniger ist mehr</h3>



<p>Ich habe in diesem Beitrag nur einige der vielen verfügbaren Debugging-Tools genannt. Je nach Bedarf, Plattform und Programmiersprache gibt es spezialisierte Debugger und Hilfsmittel. Es empfiehlt sich, dass richtige Tool für den jeweiligen Anwendungsfall auszuwählen und sich mit seinen Funktionen vertraut zu machen.</p>



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



<p>Debugging spielt eine unverzichtbare Rolle in der Softwareentwicklung. Mit einem systematischen Ansatz und den richtigen Tools lässt sich der Prozess effizient gestalten. Es lohnt sich, ständig die eigenen Debugging-Fähigkeiten zu schärfen, um Programme von höchster Qualität zu erstellen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/">Debugging &#8211; Die Kunst der Fehlerbehebung und Optimierung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/10/12/debugging-die-kunst-der-fehlerbehebung-und-optimierung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2597</post-id>	</item>
		<item>
		<title>Java &#8211; Endlose Möglichkeiten der Softwareentwicklung</title>
		<link>https://ceosbay.com/2023/03/16/erklaerung-java/</link>
					<comments>https://ceosbay.com/2023/03/16/erklaerung-java/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 16 Mar 2023 18:24:29 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[32]]></category>
		<category><![CDATA[754]]></category>
		<category><![CDATA[Annotationen]]></category>
		<category><![CDATA[Applets]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Bytecode]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[Classpath]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Einsatz]]></category>
		<category><![CDATA[Entwickeln]]></category>
		<category><![CDATA[Entwicklungsumgebungen]]></category>
		<category><![CDATA[Float]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Gosling]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[IEEE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Klassen]]></category>
		<category><![CDATA[Kompilieren]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Machine]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Microsystems]]></category>
		<category><![CDATA[Multithreading]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Objektorientiert]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Reflexion]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Sun]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[Virtual]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[XCode]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1168</guid>

					<description><![CDATA[<p>Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems. Dieser Beitrag ist verhältnismäßig etwas länger bzw. auf mehrere Teile aufgeteilt, da ich derzeit Java erlerne. Oracle hat es im Jahr 2010 &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java &#8211; Endlose Möglichkeiten der Softwareentwicklung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems. Dieser Beitrag ist verhältnismäßig etwas länger bzw. auf mehrere Teile aufgeteilt, da ich derzeit Java erlerne. Oracle hat es im Jahr 2010 aufgekauft. Die Programmiersprache ist ein Bestandteil der Java-Technologie. Sie besteht grundsätzlich aus dem Java-Entwicklungswerkzeug (JDK) zum Erstellen von Java-Anwendungen und der Laufzeitumgebung (JRE) zu deren Ausführung. Die Laufzeitumgebung selbst umfasst die virtuelle Maschine (JVM) und die mitgelieferten Bibliotheken. Java als Programmiersprache sollte nicht mit der Java-Technologie gleichgesetzt werden; Java-Laufzeitumgebungen führen Bytecode aus, der sowohl aus der Programmiersprache Java als auch aus anderen Programmiersprachen wie Groovy, Kotlin und Scala kompiliert werden kann. Im Prinzip kann jede Programmiersprache als Grundlage für Java-Bytecode genutzt werden, meistens existieren aber keine entsprechenden Bytecode-Compiler. Was ein Compiler ist, thematisiere ich noch in einem zukünftigen Beitrag.</p>



<p>Die Programmiersprache Java dient innerhalb der Java-Technologie vor allem zum Formulieren von Programmen. Diese liegen zunächst als reiner, menschenverständlicher Text vor, dem sogenannten Quellcode. Dieser Quellcode ist nicht direkt ausführbar. Erst der Java-Compiler, der Teil des Entwicklungswerkzeugs ist, übersetzt es in die Maschinensprache Java-Bytecode. Die Maschine, die diesen Bytecode ausführt, ist jedoch typischerweise virtuell. Folglich findet die Ausführung nicht direkt über die Hardware bzw. etwa einem Mikroprozessor ausgeführt, sondern durch entsprechende Software auf der Zielplattform.</p>



<p>Zweck der Virtualisierung ist die Plattformunabhängigkeit. Das Programm soll ohne weitere Änderung auf jeder Rechnerarchitektur laufen, wenn dort eine passende Laufzeitumgebung installiert ist. Oracle selbst bietet Laufzeitumgebungen für die Betriebssysteme <a href="https://ceosbay.com/2022/11/22/erklaerung-linux/" target="_blank" rel="noreferrer noopener">Linux</a>, macOS, Solaris und Windows an. Andere Hersteller lassen eigene Java-Laufzeitumgebungen für ihre Plattform zertifizieren. Auch in Autos, HiFi-Anlagen und anderen elektronischen Geräten wird Java verwendet.</p>



<p>Um die Ausführungsgeschwindigkeit zu erhöhen, werden Konzepte wie die Just-in-time-Kompilierung und die Hotspot-Optimierung verwendet. In Bezug auf den eigentlichen Ausführungsvorgang kann die JVM den Bytecode so interpretieren, bei Bedarf jedoch auch kompilieren und optimieren.</p>



<h3 class="wp-block-heading">Eine kurze Zeitreise</h3>



<p>Im Grunde genommen ist es eine Person, die für die Entstehung der objektorientierten Programmiersprache Java verantwortlich ist. James Gosling.</p>



<p>James Gosling schloss sein Studium an der University of Calgary im Jahr 1977 mit dem Bachelor of Science in Informatik ab. Sechs Jahre später erhielt er den Doktortitel. Während seiner Doktorarbeit schrieb er 1981 den ersten Emacs für Unix-Systeme in C. Seine Implementierung wurde unter dem Namen Gosling Emacs (Gosmacs) bekannt. Neben Compilern und Mailsystemen erfand er bei Sun Microsystems in den 80ern gemeinsam mit David S. H. Rosenthal auch das nicht mehr weiterentwickelte Windowing-System „NeWS (Network extensible Window System)“, welches ursprünglich unter dem Namen SunDew bekannt war.</p>



<p>Bei seiner Arbeit von 1984 bis 2010 arbeitete Gosling bei Sun Microsystems, in dieser Zeit entwarf er auch das originäre Design von Java. Den Grundstein für diese Programmiersprache hatte er bereits während seines Studiums gelegt. Dort entwickelte er auch eine virtuelle CPU, die P-Code als Maschinensprache ausführte. Das Konzept dieser Pseudo-Maschine übertrug Gosling später auf die architekturneutrale Ausführung weitverbreiteter Programme.</p>



<p>Im Jahr 2005 erhielt Gosling den Titel zum Chief Technical Officer der Produktentwicklung bei Sun Microsysems.</p>



<h3 class="wp-block-heading">Java als Open Source bzw. Freie Software</h3>



<p>Sun hatte zugesichert, die JDK unter der GNU General Public License zu veröffentlichen. mit der Übernahme durch Oracle wurde auch die offene Lizenzierung übernommen. Am 13. November 2006 haben sie erste Teile der JDK bereits mit dem Compiler javac und der Hotspot Virtual Machine als <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a> veröffentlicht. Zudem hat man mit OpenJDK eine Community-Seite eröffnet, mit deren Hilfe man die Entwicklung koordinierte. Am 8. Mai 2007 folgten große Teile des „Java-SE“-Quellcodes zum Erstellen eines JDK. Eine Ausnahme stellte solcher Code dar, für den Sun nicht die nötigen Rechte besaß, um diesen freizugeben. Dieser liegt somit nur in kompilierter Form vor. Ebenfalls kündigte Sun an, dass Entwicklungen auf Grundlage des OpenJDK das „Java Compatible“-Logo führen, wenn sie nach dem „Java Compatibility Kit“ (JCK) zertifiziert sind.</p>



<p>Zuvor hat man den Quelltext von Java unter anderem bei jedem JDK mitgeliefert und ermöglichte so zwar Einsicht, doch man durfte diesen nicht beliebig modifizieren. Aus diesem Grund gibt es neben den offiziellen JCP auch diverse unabhängige Vereinigungen, die es sich zum Ziel gesetzt haben, ein unter einer freien <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open-Source</a>-Lizenz gestelltes Java bereitzustellen. Die bekanntesten dieser Projekte sind Apache Harmony, Kaffe und das GNU-Classpath-Projekt gewesen. Gegenwärtig gibt es neben OpenJDK noch eine weitere große Implementierung, die aktuelle Java Releases veröffentlicht, Eclipse OpenJ9. Diese JVM-Implementierung hat IBM an die Eclipse Foundation übergeben. OpenJ9 steht mehrfachlizenziert unter EPL 2.0, Apache 2.0 und GNU 2.0 with Classpath Exception zur Verfügung. Darüber aber mehr in meinem Eclipse Beitrag.</p>



<p>Java ist mitunter eines der populärsten Programmiersprachen. In dem seit 2001 veröffentlichten TIOBE-Index lag Java bis 2020, konkurrierend mit C, stets auf den ersten beiden, seit 2021 mit zusätzlicher Konkurrenz von <a href="https://ceosbay.com/2022/12/20/erklaerung-python/" target="_blank" rel="noreferrer noopener">Python</a>, auf den ersten drei Plätzen des Rankings. Nach dem RedMonk-Programmiersprachenindex 2019 liegt Java zusammen mit <a href="https://ceosbay.com/2022/12/20/erklaerung-python/" target="_blank" rel="noreferrer noopener">Python</a> auf dem zweiten Platz nach <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>.</p>



<h3 class="wp-block-heading">Das Grundkonzept von Java</h3>



<p><strong>Der Entwurf der Programmiersprache strebte hauptsächlich fünf Ziele an:</strong></p>



<ol class="wp-block-list" type="1">
<li><strong>Sie soll eine einfache, objektorientierte, verteilte und vertraute Programmiersprache sein.</strong><br>Java ist im Vergleich zu anderen objektorientierten Programmiersprachen wie C++ oder C# einfacher, da es einen reduzierten Sprachumfang besitzt und beispielsweise Operatorüberladung und Mehrfachvererbung nicht unterstützt.<br></li>



<li><strong>Sie soll robust und sicher sein.</strong><br>Viele der Designentscheidungen bei der Definition von Java reduzieren die Wahrscheinlichkeit ungewollter Systemfehler. Beispiele dafür sind die starke Typisierung, Garbage Collection, Ausnahmebehandlung sowie der Verzicht auf Zeigerarithmetik. Für die Sicherheit stehen Konzepte wie der Class-Loader, der die sichere Zuführung von Klasseninformationen zur Java <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/" target="_blank" rel="noreferrer noopener">Virtual Machine</a> steuert und der Security-Manager, die sicherstellen, dass nur Zugriff auf Programmobjekte erlaubt wird, für die entsprechende Rechte vorhanden sind.<br></li>



<li><strong>Sie soll architekturneutral und portabel sein.<br></strong>Java ist so entwickelt, dass dieselbe Version eines Programms prinzipiell auf einer beliebigen Computerhardware läuft, unabhängig von ihrem Prozessor oder anderen Hardwarebestandteilen. Zusätzlich zur Architekturneutralität ist es portabel. Folglich sind elementare Datentypen sowohl in ihrer Größe und der internen Darstellung als auch in ihrem arithmetischen Verhalten standardisiert. Beispielsweise ist ein float immer ein IEEE 754 Float von 32 Bit Länge. Dasselbe gilt beispielsweise auch für die Klassenbibliothek, mit deren Hilfe man eine vom Betriebssystem unabhängige GUI erzeugen kann.<br></li>



<li><strong>Sie soll sehr leistungsfähig sein.<br></strong>Java hat aufgrund der Optimierungsmöglichkeit zur Laufzeit das Potenzial, eine bessere Performance als auf Compilezeit-Optimierungen begrenzte Sprachen (C++ und andere Sprachen) zu erreichen. Dem entgegen steht der Overhead durch die Laufzeitumgebung, sodass die Leistungsfähigkeit von beispielsweise C++-Programmen in einigen Kontexten übertroffen, in anderen aber nicht erreicht wird. Um die Leistungsfähigkeit zu gewährleisten, kann man in der Java Virtual Machine (JVM) die Performance messen.<br></li>



<li><strong>Sie soll interpretierbar, parallelisierbar und dynamisch sein.<br></strong>Wie mehrfach erwähnt, finden die Kompilierung im maschinenunabhängigen Bytecode statt. Dieser wiederum kann auf der Zielplattform interpretiert werden. Die Java Virtual Machine interpretiert Bytecode, bevor sie es aus Performancegründen kompiliert und optimiert. Die Parallelisierbarkeit erreicht es durch die Unterstützung von Multithreading. Also durch den parallelen Ablauf von eigenständigen Programmabschnitten. Dazu bietet die Sprache selbst die Schlüsselwörter synchronized und volatile – Konstrukte, die das „Monitor &amp; Condition Variable Paradigma“ von C. A. R. Hoare unterstützen. Die Klassenbibliothek enthält weitere Unterstützungen für parallele Programmierung mit Threads. Moderne JVMs bilden einen Java-Thread auf Betriebssystem-Threads ab und profitieren somit von Prozessoren mit multiplen Rechenkernen. Die Dynamik erreicht es durch den Aufbau. Vor allem durch die Dynamik bzw. der Anpassungsfähigkeit an sich ändernde Rahmenbedingungen anzupassen. Da die Module erst zur Laufzeit gelinkt werden, können beispielsweise Teile der Software (etwa Bibliotheken) neu ausgeliefert werden, ohne die restlichen Programmteile anpassen zu müssen. Man kann Interfaces als Basis für die Kommunikation zwischen zwei Modulen einsetzen, während sich die eigentliche Implementierung dynamisch und beispielsweise auch während der Laufzeit ändern kann.</li>
</ol>



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



<p>Die Grundidee der objektorientierten Programmierung ist, Daten und zugehörige Funktionen möglichst eng in einem sogenannten Objekt zusammenzufassen und nach außen hin zu kapseln (Abstraktion). Die Absicht dahinter ist, große Softwareprojekte einfacher zu verwalten und die Qualität der Software zu erhöhen. Ein weiteres Ziel der Objektorientierung ist ein hoher Grad der Wiederverwendbarkeit von Softwaremodulen.</p>



<p>Ein neuer Aspekt von Java gegenüber beispielsweise der objektorientierten Programmiersprache C++ ist die explizite Unterscheidung zwischen Schnittstellen und Klassen, die man durch entsprechende Schlüsselwörter interface und class ausdrückt. Es unterstützt kein Erben von mehreren unabhängigen Basisklassen (sogenannte „Mehrfachvererbung“ wie in C++ oder Eiffel üblich), wohl aber das Implementieren einer beliebigen Zahl von Schnittstellen, womit sich viele der entsprechenden Probleme lösen lassen. Dabei kann man Methodensignaturen und Standardimplementierungen von Methoden an die abgeleiteten Klassen weitergeben, jedoch keine Attribute.</p>



<p>Es ist nicht vollständig objektorientiert, da die Grunddatentypen (int, boolean usw.) keine Objekte sind. Dies hängt mit der Syntax zusammen. Die Semantik, Grammatik und Syntax von Java sind in der Java Language Specification (Java-Sprachspezifikation) von Sun Microsystems dokumentiert. Das folgende Beispielprogramm gibt die unter Entwicklern bzw. Programmierern klassische Meldung „Hallo Welt!“, gefolgt von einem Zeilenumbruch, auf dem Ausgabemedium aus. Mittels Autoboxing kann man in die entsprechenden Objekttypen und umgekehrt umwandeln.</p>



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



<p>Reflexion (englisch reflection) bedeutet in der Programmierung, dass ein Programm die eigene Struktur kennt (englisch introspection) und/oder diese modifizieren kann (englisch intercession). Auch Java bietet eine Reflexion-API als Bestandteil der Laufzeitumgebung an. Damit ist es möglich, zur Laufzeit auf Klassen und Methoden zuzugreifen, deren Existenz oder genaue Ausprägung zur Zeit der Programmerstellung nicht bekannt war. Häufig wird diese Technik im Zusammenhang mit dem Entwurfsmuster Fabrikmethode (Factory Method) angewandt.</p>



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



<p>Annotationen erlauben die Notation von Metadaten und ermöglichen bis zu einem gewissen Grad benutzerdefinierte Spracherweiterungen. Sinn der Annotationen ist unter anderem die automatisierte Erzeugung von Code und anderen in der Software-Entwicklung wichtigen Dokumenten für wiederkehrende Muster anhand kurzer Hinweise im Quelltext. Früher hat man dafür ausschließlich Javadoc-Kommentare mit speziellen JavaDoc-Tags verwendet, deren Auswerung von Doclets wie zum Beispiel dem XDoclet stattgefunden hat.</p>



<p>Annotationen können auch in den kompilierten Class-Dateien enthalten sein. Für die Verwendung wird der Quelltext folglich nicht benötigt. Insbesondere sind die Annotationen auch über die Reflection-API zugänglich. Man kann sie beispielsweise zur Erweiterung des Bean-Konzeptes verwenden. Doch darüber schreibe ich in naher Zukunft einen gesonderten Beitrag.</p>



<h3 class="wp-block-heading">Wo findet Java Einsatz?</h3>



<p><strong>Webanwendungen</strong></p>



<p>Anwendungen, die man auf einem Webserver lädt, startet und die beim Benutzer in einem Webbrowser ablaufen bzw. dargestellt werden. Üblicherweise läuft ein Teil der Webanwendung auf dem Server (die Geschäftslogik und Persistenz) und ein anderer Teil im Webbrowser (die Logik der grafischen Benutzeroberfläche). Der Serverteil wird üblicherweise vollständig in Java geschrieben, der Browserteil üblicherweise in <a href="https://ceosbay.com/2022/12/29/erklaerung-html/" target="_blank" rel="noreferrer noopener">HTML</a> und <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a>. Es ist jedoch auch möglich, Java-Webanwendungen inklusive GUI-Logik vollständig in Java zu schreiben (siehe z. B. Google Web Toolkit oder die Remote Application Platform). Bekannte Beispiele für Java-Webanwendungen sind Twitter, Jira, <a href="https://ceosbay.com/2022/12/18/erklaerung-jenkins/" target="_blank" rel="noreferrer noopener">Jenkins</a>. Zwar nicht vollständig, aber Gmail ist zu großen Teilen auch damit geschrieben.</p>



<p><strong>Desktop-Anwendungen</strong></p>



<p>Unter Desktop-Anwendungen oder Applikationen fasst man normale Desktop-Programme zusammen. Sowohl Internet-Kommunikationsprogramme als auch Spiele und/oder Office-Anwendungen, die auf einem normalen PC laufen, haben diese Bezeichnung. Bekannte Beispiele für Java-Desktop-Anwendungen sind die integrierte Entwicklungsumgebung Eclipse oder das mittlerweile von Microsoft aufgekaufte Computerspiel Minecraft.</p>



<p><strong>Applets</strong></p>



<p>Java-Applets sind Anwendungen, die man normalerweise in einem Webbrowser ausführt. Sie sind üblicherweise auf einen durch ein spezielles <a href="https://ceosbay.com/2022/12/29/erklaerung-html/" target="_blank" rel="noreferrer noopener">HTML</a>-Tag definierten Bereich einer Webseite beschränkt. Voraussetzung für die Ausführung der Applets ist ein Java-fähiger Browser. Eine Unterstützung dieser Anwendungsform liegt seit der Version 11 nicht mehr vor.</p>



<p><strong>Apps</strong></p>



<p>Apps sind kleinere Applikationen für mobile Endgeräte wie Handys, Smartphones, PDAs oder Tablets. Sie laufen üblicherweise auf speziellen, für die Ausführung von Java-Anwendungen optimierten Plattformen wie Java ME. Native Apps für das Android Betriebssystem von Google sind in der Regel auch damit programmiert, basieren aber auf einer abweichenden Klassenbibliotheks-API.</p>



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



<p>Es gibt eine große Vielfalt von Entwicklungsumgebungen für Java, sowohl proprietäre als auch <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a>. Die meisten Entwicklungsumgebungen dafür sind selbst ebenfalls in Java geschrieben.</p>



<p>Die bekanntesten Open-Source-Umgebungen sind das von der Eclipse Foundation bereitgestellte Eclipse und das von Sun entwickelte NetBeans.</p>



<p>Unter den kommerziellen Entwicklungsumgebungen sind <a href="https://ceosbay.com/2023/03/10/erklaerung-intellij-idea/" target="_blank" rel="noreferrer noopener">IntelliJ IDEA</a> von JetBrains, siehe meinen Beitrag, JBuilder von Borland sowie JCreator und das auf NetBeans basierende Sun ONE Studio von Sun, am verbreitetsten. Außerdem gibt es noch eine Version von Eclipse, die von IBM unter dem Namen WebSphere Studio Application Developer („WSAD“) vertrieben wurde und ab Version 6.0 Rational Application Developer („RAD“) heißt. Auch in XCode von Apple lässt sich damit schreiben. Doch zu empfehlen ist es eher nicht, da es primär für C++ und C optimiert ist.</p>



<p>Sehr viele Texteditoren bieten Unterstützung dafür, darunter Emacs, jEdit, Atom (Ist aufgrund eines Hacks nicht mehr verfügbar 😉 ), Visual Studio Code, Vim und Notepad++, über die ich in zukünftigen Beiträgen schreibe.</p>



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



<p>Ein Compiler übersetzt Java-Quellcode (Dateiendung „.java“) in einen ausführbaren Code. Grundsätzlich unterscheidet man zwischen Bytecode- und Nativecode-Compilern. Einige Laufzeitumgebungen verwenden einen JIT-Compiler, um zur Laufzeit den Bytecode häufig genutzter Programmteile in nativen Maschinencode zu übersetzen.</p>



<p><strong>Bytecode Compiler</strong></p>



<p>Im Normalfall übersetzt der Java-Compiler die Programme in einen nicht direkt ausführbaren Bytecode (Dateiendung „.class“), den die Java Runtime Environment (JRE) später ausführt. Die HotSpot-Technologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abhängig von der verwendeten Plattform. Diese Optimierung findet dabei nach und nach statt, sodass der Effekt auftritt, dass Programmteile nach mehrmaliger Abarbeitung schneller werden. Andererseits führt diese Technik, die ein Nachfolger der Just-in-time-Kompilierung ist, dazu, dass man mit Java-Bytecode, Anwendungen theoretisch genauso schnell wie nativ kompilierte Programme ausführen kann.</p>



<p><strong>Native Compiler</strong></p>



<p>Es existieren auch Compiler für Java, die Quelltexte oder den Bytecode in „normalen“ Maschinencode übersetzen können, sogenannte Ahead-of-time-Compiler. Nativ kompilierte Programme haben den Vorteil, keine JavaVM mehr zu benötigen aber auch den Nachteil, nicht mehr plattformunabhängig zu sein.</p>



<p>Beispiele für native Java Compiler waren Excelsior JET (eingestellt, bis Java SE 7), sowie GNU Compiler for Java (GCJ, eingestellt, bis J2SE 5.0) wie MinGW, Cygwin oder JavaNativeCompiler (JNC).</p>



<p><strong>Wrapper</strong></p>



<p>Als weitere Möglichkeit kann das Java-Programm in ein anderes Programm „eingepackt“ (englisch to wrap) werden. Unter anderem nennt man dies auch Adapter. Diese äußere Hülle dient dann als Ersatz für ein Java-Archiv. Sie sucht selbständig nach einer installierten Java-Laufzeitumgebung, um das eigentliche Programm zu starten und informiert den Benutzer darüber, wo er eine Laufzeitumgebung herunterladen kann, sofern noch keine installiert ist. Es ist also immer noch eine Laufzeitumgebung nötig, um das Programm starten zu können, aber der Anwender erhält eine verständliche Fehlermeldung, die ihm weiterhilft.</p>



<p>Java Web Start ist ein etwas eleganterer und standardisierter Ansatz für diese Lösung. Es ermöglicht die einfache Aktivierung von Anwendungen und garantiert, dass immer die neueste Version der Anwendung ausgeführt wird. Dadurch bleiben einem durch die Automatisierung komplizierte Installations- oder Aktualisierungsprozeduren erspart.</p>



<p>Beispiele für Java-Wrapper sind JSmooth oder Launch4J. JBuilder von Borland und NSIS sind ebenfalls in der Lage, einen Wrapper für Windows zu erstellen.</p>



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



<p>Ein Fazit gibt es hierfür nicht, da ich es mir nicht anmaße, etwas zu beurteilen, dass ich noch nicht zu einem großen Teil verstehe. In diesem Zusammenhang vielleicht in den zukünftigen Beiträgen zu finden.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/16/erklaerung-java/">Java &#8211; Endlose Möglichkeiten der Softwareentwicklung</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/16/erklaerung-java/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1168</post-id>	</item>
		<item>
		<title>Frameworks &#8211; Effiziente Entwicklung und eine höhere Qualität durch Rahmenwerke</title>
		<link>https://ceosbay.com/2022/11/14/erklaerung-frameworks/</link>
					<comments>https://ceosbay.com/2022/11/14/erklaerung-frameworks/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Mon, 14 Nov 2022 10:31:37 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Baukasten]]></category>
		<category><![CDATA[Bausteine]]></category>
		<category><![CDATA[Bibliotheken]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Coordination]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Domain]]></category>
		<category><![CDATA[Effizienz]]></category>
		<category><![CDATA[Entwickeln]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Herangehensweise]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Klassen]]></category>
		<category><![CDATA[Komponenten]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Rahmenwerk]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Struktur]]></category>
		<category><![CDATA[System]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=505</guid>

					<description><![CDATA[<p>Frameworks &#8211; Wie der Name schon sagt, handelt es sich dabei um Rahmenwerke oder ein Grundgerüst, die dem Programmierer die Bestimmung der&#160;grundlegenden&#160;Architektur der Software ermöglichen. Frameworks kommen in der Regel bei der objektorientierten Programmierung zum &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Frameworks &#8211; Effiziente Entwicklung und eine höhere Qualität durch Rahmenwerke</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Frameworks &#8211; Wie der Name schon sagt, handelt es sich dabei um Rahmenwerke oder ein Grundgerüst, die dem Programmierer die Bestimmung der&nbsp;grundlegenden&nbsp;Architektur der Software ermöglichen. Frameworks kommen in der Regel bei der objektorientierten Programmierung zum Einsatz. Sie umfassen eine Laufzeitumgebung, Bibliotheken und eine Reihe weiterer Komponenten, um die optimale Grundstruktur zur Verfügung zu stellen. Die Basisbausteine sind in konkrete und abstrakte Klassen unterteilt. Diese stehen einem Programmierer direkt zur Verfügung, was zu einer enormen Zeiteinsparung führt. Vor allem, da die Elemente nicht jedes Mal neu programmiert werden müssen.</p>



<h3 class="wp-block-heading">Ab wann werden Frameworks relevant?</h3>



<p>In der Regel definiert man als Programmierer oder als Team, zu Beginn eines Projekts, auf Basis der Anforderungen und der wirtschaftlichen Aspekte, die Herangehensweise. </p>



<p>Man hat immer die Auswahl, alles von Grund auf selber bzw. nativ zu programmieren, was zwar eine extrem individuelle Lösung darstellt und alles bis auf das kleinste Detail erstellt bzw. programmiert werden kann, ein CMS (Content Management System = Eine Software zur gemeinschaftlichen Erstellung, Bearbeitung, Organisation und Darstellung digitaler Inhalte zumeist zur Verwendung in Webseiten aber auch in anderen Medienformen) zu nutzen &#8211; Wobei ich Zweites in einem separaten Beitrag ausführlich thematisieren möchte (Übrigens basiert diese Webseite auch auf einem CMS. In diesem Fall handelt es sich um eine WordPress-Instanz). Und dann gibt es natürlich Frameworks. Wobei die Anforderungen an die Professionalität des Entwicklers bei dieser Herangehensweise relativ hoch angesiedelt sind. Allerdings muss man sagen, dass das hohe Maß an Flexibilität und die Verfügbarkeit ausgefeilter Struktur-Merkmale nicht unwesentlich sind.</p>



<h3 class="wp-block-heading">Welche Frameworks gibt es?</h3>



<p>Application Frameworks: Als Grundgerüst für die Programmierung von Anwendungen mit spezifischen Strukturen und Funktionen.</p>



<p>Web-Frameworks: Für die Entwicklung und Programmierung dynamischer Web-Sites und Web-Anwendungen.</p>



<p>Komponenten-Frameworks: Als Umgebungsrahmen für die Programmierung und Einbindung von Programm-Paketen.</p>



<p>Domain Frameworks: Als Rahmen für vordefinierte Problembereiche.</p>



<p>Coordination Frameworks: Zur Einrichtung von Geräte-Interaktionen bzw. für die Abfolge zu steuernder Einzelschritte.</p>



<p>Class Frameworks: Zur Zusammenfassung von „Klassen“ und „Methoden“, im Sinne einer optimalen Unterstützung des Programmierers bei der Implementierung seiner spezifischen Anwendungen.</p>



<p>Test Frameworks: Für das Testen von Programmen. Klassische Beispiele hierfür sind „<a href="https://www.selenium.dev" target="_blank" rel="noreferrer noopener">Selenium</a>“ für den Test von Webanwendungen und „JUnit“ für den Test von Modulen. <a href="https://ceosbay.com/2022/11/25/selenium/">Selenium</a> habe ich in diesem <a href="https://ceosbay.com/2022/11/25/selenium/">Beitrag</a> thematisiert.</p>



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



<p>Eines der Vorteile ist, wie bereits erwähnt, dass Wiederkehrende Aufgaben schneller abgewickelt werden können, da im Framework bereits eine Reihe an Elementen vorprogrammiert sind. Diese können beliebig oft verwendet werden.&nbsp;Darüberhinaus beinhalteten Frameworks Basis-Bausteine, die auf die Design-Struktur eines Programms Einfluss nehmen. Sie bieten sich in der Regel bei speziellen Anforderungen  und individuellen Lösungen an, so kann das vom Framework zur Verfügung gestellte Programmier-Gerüst eine gute Wahl darstellen. Nichtsdestotrotz sollte man meines Erachtens nach bei &#8222;kleineren&#8220; Projekten die Nutzung von Content Management Systemen in Erwägung ziehen. Schlussendlich, hängt die Wahl der jeweiligen Herangehensweise und die Effizienz, in der das Projekt realisiert wird, häufig von der Qualifikation und dem Skillset eines jeden Programmierers ab.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Frameworks &#8211; Effiziente Entwicklung und eine höhere Qualität durch Rahmenwerke</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/11/14/erklaerung-frameworks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">505</post-id>	</item>
		<item>
		<title>Node.js® mit npm auf MacOS</title>
		<link>https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/</link>
					<comments>https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 11 Nov 2022 07:16:47 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Befehl]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Homebrew]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Minification]]></category>
		<category><![CDATA[Minify]]></category>
		<category><![CDATA[Node.JS]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[Paket]]></category>
		<category><![CDATA[Paketmanager]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Spotlight]]></category>
		<category><![CDATA[Sudo]]></category>
		<category><![CDATA[Syntactically Awesome Stylesheets]]></category>
		<category><![CDATA[Terminal]]></category>
		<category><![CDATA[Update]]></category>
		<category><![CDATA[Version]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=416</guid>

					<description><![CDATA[<p>Node.js® ist eine Single-Thread, JavaScript-basierte, Open Source, plattformübergreifende Laufzeitumgebung für die Erstellung von schnellen und skalierbaren Webservern und vernetzten Anwendungen. Hier noch die Website. Man kann damit auch hilfreiche Aufgaben auf dem Computer ausführen, wie z.B. &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/">Node.js® mit npm auf MacOS</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Node.js® ist eine Single-Thread, JavaScript-basierte, Open Source, plattformübergreifende Laufzeitumgebung für die Erstellung von schnellen und skalierbaren Webservern und vernetzten Anwendungen. Hier noch die <a href="https://nodejs.org" target="_blank" rel="noreferrer noopener">Website</a>. Man kann damit auch hilfreiche Aufgaben auf dem Computer ausführen, wie z.B. die Verkettung und Minimierung von JavaScript-Dateien und die Kompilierung von Sass-Dateien in CSS. Node ist kein Framework! (Kurz zu Framework: Ein Programm-Code besteht aus vielen kleinen Bausteinen. Um das Programmieren zu erleichtern und um Zeit zu sparen, gibt es sogenannte <em>Frameworks</em>. Dazu aber mehr in einem anderen Beitrag.</p>



<h2 class="wp-block-heading">Minimierung (Minification / Minify)</h2>



<p>Unter Minifizierung versteht man das Entfernen aller überflüssigen Zeichen aus dem Quellcode von interpretierten Programmiersprachen oder Markup-Sprachen, ohne dessen Funktionalität zu verändern. Dazu in einem separaten Beitrag mehr.</p>



<h2 class="wp-block-heading">CSS (Cascading Style Sheets)</h2>



<p> Eine Programmiersprache, die es ermöglicht, das Design von elektronischen Dokumenten zu bestimmen. Auch hier bei einem separaten Beitrag mehr.</p>



<h2 class="wp-block-heading">Sass (Syntactically Awesome Stylesheets)</h2>



<p>CSS mit Superkräften bzw. auf Steroiden. Dies werde ich auch in einem separaten Beitrag ausführlich thematisieren.</p>



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



<p>Der Node Package Manager ist ein Paketmanager für die JavaScript-Programmiersprache, der von npm, Inc. gepflegt wird. npm ist der Standard-Paketmanager für die JavaScript-Laufzeitumgebung Node. Es vereinfacht das Installieren von Node-&#8222;Paketen&#8220;. Ein Paket, auch Modul genannt, ist lediglich eine Code-Bibliothek, die Node um nützliche Funktionen erweitert. Das Modul &#8222;request&#8220; zum Beispiel vereinfacht https-Anfragen, so dass man problemlos Webressourcen von anderen Websites abrufen kann. npm wird bei der Installation von Node mitinstalliert. Obwohl es auf der Node-Website ein MacOS-Installationsprogramm gibt, wird die Verwendung von <a href="https://ceosbay.com/2022/10/25/homebrew-der-fehlende-paketmanager-fuer-macos-lassen-wir-fluegel-wachsen/">Homebrew</a> zur Installation und Aktualisierung von Node empfohlen. Über und wie man <a href="https://ceosbay.com/2022/10/25/homebrew-der-fehlende-paketmanager-fuer-macos-lassen-wir-fluegel-wachsen/">Homebrew</a> installiert bzw. verwendet, kann in einem anderen <a href="https://ceosbay.com/2022/10/25/homebrew-der-fehlende-paketmanager-fuer-macos-lassen-wir-fluegel-wachsen/">Beitrag</a> gelesen werden, den ich geschrieben habe.</p>



<p>Grundsätzlich sollte man mit dem Mac-Terminal vertraut sein, da es zum Installieren und Testen von Node und npm verwenden werden muss. Die Terminal-Anwendung befindet sich im Dienstprogramme Ordner unter den Programmen. Ansonsten kann man auch einfach mit der Tastenkombination Command + Leertaste im Spotlight nach dem Terminus Terminal suchen. Durch die Verwendung von Homebrew können etwaige Sicherheitsprobleme vermieden werden, die mit der Verwendung des sudo-Befehls zur Installation von Software wie Node und Node-Modulen einhergehen.</p>



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



<p>Die Installation von Node.js® und npm ist mit Homebrew relativ einfach. Homebrew übernimmt das Herunterladen, Entpacken (Eine komprimierte bzw. archivierte Datei extrahieren) und Installieren von Node.js® und npm auf dem System. Der Installationsprozess dauert lediglich ein paar Minuten. </p>



<p>Ist das Terminal geöffnet, geht es folgendermaßen weiter:</p>



<pre class="wp-block-code"><code>brew update</code></pre>



<p>brew update aktualisiert die Repository</p>



<pre class="wp-block-code"><code>brew install node</code></pre>



<p>Hiermit lässt sich Node.js® installieren</p>



<pre class="wp-block-code"><code>node -v</code></pre>



<p>Mit diesem Befehl lässt sich überprüfen, ob und in welcher Version Node installiert ist.</p>



<pre class="wp-block-code"><code>npm -v</code></pre>



<p>Und hiermit, ob und in welcher Version npm installiert ist.</p>



<p>Damit sind Node.JS® und npm erfolgreich installiert!</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/">Node.js® mit npm auf MacOS</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/11/11/node-js-mit-npm-auf-macos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">416</post-id>	</item>
		<item>
		<title>Docker &#8211; Verpacken, verteilen und überall ausführen &#8211; Laufzeitumgebung für Softwareanwendungen</title>
		<link>https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/</link>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 28 Oct 2022 12:18:00 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Betriebssystem]]></category>
		<category><![CDATA[Container]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Engine]]></category>
		<category><![CDATA[Images]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[Komponenten]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Laufzeitumgebung]]></category>
		<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Portainer]]></category>
		<category><![CDATA[Registry]]></category>
		<category><![CDATA[Repository]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwareanwendung]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[VMs]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=82</guid>

					<description><![CDATA[<p>Docker ist ein beliebtes Open-Source-Tool, das eine portable und konsistente Laufzeitumgebung für Softwareanwendungen bietet. In anderen Worten: Ein Tool, mit dem Entwickler, Systemadministratoren und andere Normalsterbliche ihre Anwendungen einfach in einer Sandbox (genannt Container) bereitstellen &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Docker &#8211; Verpacken, verteilen und überall ausführen &#8211; Laufzeitumgebung für Softwareanwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Docker ist ein beliebtes <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-Tool, das eine portable und konsistente Laufzeitumgebung für Softwareanwendungen bietet. In anderen Worten: Ein Tool, mit dem Entwickler, Systemadministratoren und andere Normalsterbliche ihre Anwendungen einfach in einer Sandbox (genannt Container) bereitstellen können, um sie auf dem Host-Betriebssystem, z. B. auf Linux, auszuführen. Der Hauptvorteil besteht darin, dass es Benutzern ermöglicht, eine Anwendung mit all ihren Abhängigkeiten in eine standardisierte Einheit für die Softwareentwicklung zu verpacken. Im Gegensatz zu virtuellen Maschinen haben Container keinen hohen Overhead (Verwaltungsaufwand) und ermöglichen daher eine effizientere Nutzung des zugrunde liegenden Systems und der Ressourcen. Es kann für die gängigen Betriebsysteme auf der <a href="https://www.docker.com" target="_blank" rel="noreferrer noopener">Website</a> heruntergeladen werden (Achtung! &#8211; Die Desktop Version ist keine <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a> Anwendung!).</p>



<h2 class="wp-block-heading">Was sind Container?</h2>



<p>Zu dem heutigen Industriestandard gehört die Verwendung von virtuellen Maschinen (VMs) zur Ausführung von Softwareanwendungen zum Alltag. Ein Docker-Container ist eine Standardsoftwareeinheit, die einen Code in all seinen Abhängigkeiten speichert. So wird die Anwendung schnell und zuverlässig auf verschiedensten Computerumgebungen lauffähig. Ein Container bildet ein leichtes eigenständiges ausführbares Softwarepaket ab, das alles enthält, was zum Ausführen einer Anwendungscodelaufzeit benötigt wird. Was im Grunde genommen benötigt wird sind in der Regel der Programmcode, diverse RunTime-Engines, Systemtools, die dazugehörigen Systembibliotheken und so ziemlich alle Einstellungen. Diese containerisierte Software läuft unabhängig von dem Betriebssystem, also auf Linux-, Mac- und Windows-basierten Systemen. Und dies vollkommen unabhängig von der jeweiligen Infrastruktur. Die Container isolieren die Software von der Umgebung und stellen sicher, dass sie trotz der Unterschiede einheitlich funktioniert.</p>



<h2 class="wp-block-heading">Vorteile von Containern</h2>



<p>Docker-Container sind besonders beliebt, weil sie gegenüber&nbsp;<a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">Virtuellen Maschinen (VMs)</a>&nbsp;viele Vorteile bieten. <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VMs</a> enthalten grundsätzlich vollständige Kopien eines umfassenden Betriebssystems, die Anwendung(en) selbst, alle erforderlichen Binärdateien und Bibliotheken. Diese Tatsache beansprucht in der Regel Unmengen an Speicherkapazität.</p>



<p><a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VMs</a> booten im Vergleich auch ausgesprochen langsam. Container benötigen grundsätzlich weniger Speicherplatz, da ihre Images normalerweise nur wenige hundert Megabyte groß sind. So können bei dem Einsatz von Docker viel mehr Anwendungen gleichzeitig verarbeitet werden. Dies reduziert Verwendung von <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VMs</a> und Betriebssystemen. </p>



<p>Auch der Einsatz von Containern auf&nbsp;Edge-Devices, z.B. auf kompakten Einplatinencomputern (Single-Board Computer (SBC) wie die beliebten Raspberry Pi&#8217;s oder NVIDIA Jetson&#8217;s, sowie robusten und wartungsarmen Embedded PC&#8217;s in der Industrie, ist problemlos möglich. Container sind flexibler und effektiver als <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">VMs</a> und die Verwendung von Docker in der Cloud ist ebenfalls sehr beliebt. Die Möglichkeit, dass verschiedene Anwendungen auf einer einzelnen Betriebssystem-Instanz ausgeführt werden können, verbessert vielfältige Einsatzmöglichkeiten immens. Ein weiterer entscheidender&nbsp;Vorteil von Containern&nbsp;ist die Fähigkeit, Apps nicht nur voneinander, sondern auch von ihrem zugrundeliegenden System zu isolieren. </p>



<p>So kann der Anwender leicht bestimmen, wie eine zugewiesene containerisierte Einheit das jeweilige System und die vorhandenen Ressourcen (CPU, GPU und Netzwerk) nutzt. Zudem stellt es auch sicher, dass Daten und Code voneinander getrennt bleiben was durchaus eine weitere Sicherheitsinstanz darstellen kann.</p>



<h2 class="wp-block-heading">Komponenten von Docker</h2>



<p>Die Docker-Plattform besteht aus einer Reihe von Komponenten. Desktop und Engine sind die zwei wesentlichen Bestandteile davon. Images definieren den Inhalt von Containern. Container sind lauffähige Instanzen von Images. Der Daemon ist eine Hintergrundanwendung, die Images und -Container verwaltet und ausführt. Der Client ist ein Befehlszeilenprogramm (CLI <em>Command-Line Interface</em>) &#8222;Ein Befehlszeileninterpreter oder Befehlszeilenprozessor.&#8220; Es verwendet eine Befehlszeilenschnittstelle, um Befehle von einem Benutzer in Form von Textzeilen zu empfangen, dass die API des Daemons aufruft. Registries enthalten Images, und der Hub ist ein weit verbreitetes öffentliches Registry. Zudem gibt es noch die&nbsp;Toolbox,&nbsp;um Docker auf Systeme zu bringen, die nicht nativ unterstützt werden. Dies wird dadurch erreicht, indem eine virtualisierte Linux-Instanz gestartet wird. Dies geschieht beispielsweise innerhalb von VirtualBox. Und Docker wird dann innerhalb dieser virtuellen Maschine ausgeführt.‎ Ein Großteil von Docker (jedoch nicht Desktop) ist <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open Source</a>. Lizenziert ist es unter der Apache-V2-Lizenz.</p>



<h2 class="wp-block-heading">Docker Desktop</h2>



<p>Während die meisten Komponenten sowohl für Windows, Mac und Linux verfügbar sind, und trotz der Tatsache, dass die meisten Container auf Linux lauffähig sind, ist Docker Desktop lediglich für Windows und Mac verfügbar. Docker Desktop ist ein GUI-Tool (Graphical User Interface / Grafische Benutzeroberfläche), welches im Wesentlichen eine <a href="https://ceosbay.com/2022/11/10/erklaerung-virtuelle-maschine/">virtuelle Maschineninstallation</a> abdeckt. Diese virtuelle Maschine ist unter Linux nicht notwendig, da hier direkt die Engine lauffähig ist. Docker Desktop dient unter Windows und Mac zum Management verschiedener Komponenten und Funktionen, einschließlich von Containern, Images, Volumes (an Container angehängter Speicher), lokalem Kubernetes (eine Automatisierung der Bereitstellung, Skalierung und Verwaltung von Container-Anwendungen &#8211; Doch hierzu später mehr), Entwicklungsumgebungen innerhalb von Containern und vielem mehr.</p>



<h2 class="wp-block-heading">Docker-Images und -Registry</h2>



<p>Ein Docker-Image ist eine unveränderliche Datei, die im wesentlichen Sinn einen Schnappschuss eines Containers darstellt. Images werden mit dem Befehl „build“ erstellt und erzeugen einen Container, wenn sie mit „run“ gestartet werden. Images werden in einer Registry wie „registry.hub.docker.com“ gespeichert. Sie sind so konzipiert, dass sie aus mehreren Schichten anderer Images bestehen können. So muss bei der Übermittlung von Images über das Netzwerk nur eine geringe Datenmenge übertragen werden.</p>



<h2 class="wp-block-heading">Docker-Container</h2>



<p>Als Programmierer spricht man bei einem Image immer von einer Klasse und bei Containern über eine Instanz einer Klasse – bzw. über ein Laufzeitobjekt. Container sind der Grund, warum Docker so vielfältig verwendet wird: Sie sind leichtgewichtige und portable Kapselungen einer Umgebung, in der Anwendungen ausgeführt werden können.</p>



<h2 class="wp-block-heading">Docker-Engine</h2>



<p>Bei einem Blick auf die Docker-Engine und ihre Komponenten, kann man eine grundlegende Vorstellung davon erhalten, wie das System funktioniert. Mit der Engine entwickelt man Anwendungen, stellt sie zusammen, liefert sie aus und im Anschluss kann man sie ausführen, indem die folgenden Komponenten verwenden: Der <strong>Docker Deamon</strong> &#8211; Ein dauerhafter Hintergrundprozess, der Images, Container, Netzwerke und Speichervolumen verwaltet. Der Daemon „betrachtet“ ständig die Docker-API-Anforderungen und verarbeitet sie.</p>



<p>Die <strong>Docker Engine REST API</strong> &#8211; Eine Schnittstelle, die von Anwendungen verwendet wird, um mit dem Daemon zu interagieren. Auf sie kann über einen https-Client zugegriffen werden. Der <strong>Docker Client bzw. die CLI</strong> &#8211; Ermöglicht den Benutzern die Interaktion mit Docker. Er kann sich auf demselben Host wie der Daemon befinden oder eine Verbindung zu einem Daemon auf einem entfernten Host herstellen und mit mehr als einem Daemon kommunizieren.</p>



<p>Der Docker-Client bietet eine Befehlszeilenschnittstelle (CLI = Command Line Interpreter), über die man einem Daemon Befehle zum Erstellen, Ausführen und Anhalten von Anwendungen erteilen kann. Der Hauptzweck des Clients besteht darin, ein Mittel zur Verfügung zu stellen, mit dem Images aus einer Registry gezogen und auf einem Docker-Host ausgeführt werden können. Die gängigen Befehle, die von einem Client ausgegeben werden, sind: docker build, docker pull und docker run. </p>



<p><strong>Portainer</strong> &#8211; Zur Vereinfachung der Arbeit mit Docker-Befehlen ist das freie, intuitive und leicht zu implementierende GUI (Graphical User Interface = Grafische Benutzeroberfläche) Portainer oft eine gute Wahl. Die Verwaltung der Engines und das komplette Management ist mit Portainer auch für kleine Projekte geeignet. Ich selbst hatte nur wenig Kontakt damit, daher bitte mit Vorsicht genießen ;). Hardwareinformationen wie die Anzahl der Prozessoren und die Größe des Arbeitsspeichers, sowie Docker-spezifische Informationen (Anzahl der Container, Images, Volumes und Networks) sind auf jeden Fall relativ leicht ersichtlich. So kann das Dockertool mit seiner übersichtlichen Weboberfläche die Standard-Docker-Funktionen und die Verwaltung übernehmen.</p>



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



<p>Ein Thema, mit dem ich mich auch noch auseinandersetzen werde und es noch einen gesonderten Beitrag darüber geben wird. Im Grunde genommen ist Kubernetes ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/">Open-Source</a>-System, welches mit Hilfe von Prozessautomatisierung die Verwaltung der Container übernimmt und somit Hand in Hand mit dem Docker zusammenarbeitet. </p>



<p>In einem Helm-Chart werden Konfigurationsdaten an Kubernetes übergeben. Dort wird konfiguriert, welche Container ausgerollt, überwacht und verwaltet werden sollen. Kubernetes löst diese Aufgabe auch mit einer hohen Anzahl an Containern problemlos. Außerdem kann Kubernetes Ressourcen perfekt einsetzen. Maschinen, die nicht benötigt werden, können entweder ausgeschaltet oder an andere Tasks weitervergeben werden, um Kosten sowie Kapazitäten zu sparen und folglich ein besseres Ressourcenmanagement zu ermöglichen.</p>



<h2 class="wp-block-heading">Auf welchen Betriebssystemen läuft Docker?</h2>



<p>Ein Docker-Container läuft mit der Engine direkt unter Linux und auf jedem Host-Computer, der die Container-Laufzeitumgebung „Docker Desktop“ unterstützt (Mac und Windows). Die Anwendungen müssen nicht an das Host-Betriebssystem angepasst werden. So kann sowohl die Anwendungsumgebung, als auch die zugrunde liegende Betriebssystemumgebung sauber und minimalistisch gehalten werden. Containerbasierte Anwendungen können so problemlos von Systemen in Cloud-Umgebungen oder von Entwickler-Notebooks auf Server geschoben werden, wenn das Zielsystem Docker und alle damit verwendeten Tools von Drittanbietern unterstützt.</p>



<h2 class="wp-block-heading">Wie kann Docker installiert werden?</h2>



<ul class="wp-block-list">
<li><a rel="noreferrer noopener" href="https://docs.docker.com/desktop/windows/install/" target="_blank">Installationsanleitung für Docker Desktop (Windows)</a></li>



<li><a rel="noreferrer noopener" href="https://docs.docker.com/desktop/mac/install/" target="_blank">Installationsanleitung für Docker Desktop (Mac)</a></li>



<li><a href="https://docs.docker.com/engine/install/" target="_blank" rel="noreferrer noopener">Installationsanleitung für die Docker-Engine auf diversen Linux Distributionen</a></li>
</ul>



<h2 class="wp-block-heading">Microservices-Modell &#8211; Was ist das?</h2>



<p>Die meisten Geschäftsanwendungen bestehen aus mehreren separaten Komponenten, die in einem sogenannten „Stack“ organisiert sind. Beispiele hierfür sind ein Webserver, eine Datenbank oder ein In-Memory-Cache. Container ermöglichen es, diese einzelnen Komponenten zu einer funktionalen Einheit mit leicht austauschbaren Teilen zusammenzustellen. Verschiedene Container können diese Komponenten beinhalten. So kann jede Komponente für sich gepflegt, aktualisiert und unabhängig von den anderen modifiziert werden. Im Grunde ist dies das Microservices-Modell des Anwendungsdesigns. Indem die Anwendungsfunktionalität in separate und in sich geschlossene Dienste unterteilt ist, bietet das Modell eine Alternative zu langsamen traditionellen Entwicklungsprozessen und unflexiblen Apps. Leichtgewichtige übertragbare Container machen es einfacher, Microservices basierende Anwendungen zu erstellen und zu pflegen.</p>



<p>Alles in allem trägt Docker dazu bei, die Verwaltung einer kompletten Infrastruktur wesentlich zu vereinfachen, indem es die zugrunde liegenden Instanzen leichter, schneller und robuster macht. Darüber hinaus trennt es die Anwendungsschicht von der Infrastrukturebene und bringt die dringend benötigte Portabilität, Zusammenarbeit und Kontrolle über die Softwarebereitstellungskette. Es wurde für moderne DevOps-Teams entwickelt. Das Verständnis seiner Architektur kann helfen, das Beste aus containerisierten Anwendungen herauszuholen.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/10/28/laufzeitumgebung-fuer-softwareanwendungen-docker/">Docker &#8211; Verpacken, verteilen und überall ausführen &#8211; Laufzeitumgebung für Softwareanwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">82</post-id>	</item>
	</channel>
</rss>
