<?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>FISI Archive - Informatik Guru</title>
	<atom:link href="https://informatik-guru.de/tag/fisi/feed/" rel="self" type="application/rss+xml" />
	<link>https://informatik-guru.de</link>
	<description>Dinge die Ihr Lehrer nicht kapiert</description>
	<lastBuildDate>Mon, 03 Jan 2022 15:19:46 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.4</generator>
	<item>
		<title>MS Exchange 2022 Bug</title>
		<link>https://informatik-guru.de/adminlife/microsoft-exchange-2022-bug/</link>
					<comments>https://informatik-guru.de/adminlife/microsoft-exchange-2022-bug/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Mon, 03 Jan 2022 15:19:41 +0000</pubDate>
				<category><![CDATA[Adminlife]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Recent]]></category>
		<category><![CDATA[2022 Bug]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[Administrator]]></category>
		<category><![CDATA[erklärbär]]></category>
		<category><![CDATA[Exchange Server]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[Malware Agent]]></category>
		<category><![CDATA[Microsoft Exchange Management Shell]]></category>
		<category><![CDATA[MSExchangeTransport]]></category>
		<category><![CDATA[Thats too long]]></category>
		<guid isPermaLink="false">https://informatik-guru.de/?p=821</guid>

					<description><![CDATA[<p>Da hat man sich bei Microsoft wohl gedacht, dass man schon lange keinen Millenium Bug mehr hatte&#8230; 😉Aber Spaß beiseite, erst mal frohes neues Jahr an alle da draußen! Falls Ihr zu den Menschen gehört die in Euren Firmen die Mail-Server administrieren, oder Ihr einfach neugierig seid, welcher interessante Fehlerteufel sich am 01.01.2022 beim Microsoft [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/adminlife/microsoft-exchange-2022-bug/">MS Exchange 2022 Bug</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Da hat man sich bei Microsoft wohl gedacht, dass man schon lange keinen Millenium Bug mehr hatte&#8230; 😉<br>Aber Spaß beiseite, erst mal frohes neues Jahr an alle da draußen!</p>



<p>Falls Ihr zu den Menschen gehört die in Euren Firmen die Mail-Server administrieren, oder Ihr einfach neugierig seid, welcher interessante Fehlerteufel sich am 01.01.2022 beim Microsoft Exchange Server eingeschlichen hat, dürfte Euch unsere kleine Zusammenfassung interessieren!</p>



<p>Seit dem 01.01.2022 um 0:00 Uhr hat ein Großteil der on premise gehosteten Microsoft Exchange Server ein Problem mit dem Mailverkehr. Daran ist jedoch zur Abwechslung mal nicht der Transport Agent schuld, sondern der Schadsoftwarefilter.</p>



<p>Der Virenscanner FIP-FS Scan Engine meldet einen Fehler mit dem Text <em>&#8222;Can&#8217;t Convert &#8218;2201010001&#8216; to long&#8220;</em>.<br>Der &#8222;größte&#8220; Long ist 2.147.483.647, Datumsangaben im Jahr 2022 haben jedoch einen Mindestwert von 2.201.010.001.</p>



<figure class="wp-block-image is-resized"><img loading="lazy" src="https://media.makeameme.org/created/thats-too-long.jpg" alt="thats... too... long. - First World Problems | Make a Meme" width="239" height="158"/></figure>



<p>Dieser Fehler hat außerordentlich viele Systeme betroffen, da die FIP-FS Anti-Spam- und Anti-Malware-Scan-Engine seitens Microsoft seit dem Exchange Server 2013 standardmäßig aktiviert ist.</p>



<h2>Malware Agent deaktivieren &#8211; Exchange Management Shell</h2>



<p>Zum Glück lässt sich der Fehler schnell kurzfristig umgehen, allerdings leider nur in dem der Malware Agent deaktiviert wird. Zur Behebung des Problems könnt ihr mit den folgenden beiden Zeilen in der Exchange Management Shell den Malware Agent deaktivieren und anschließend den Transport Service neu starten, wonach Euer Microsoft Exchange Server auch im Jahr 2022 wieder ordnungsgemäß arbeiten sollte: </p>



<pre class="wp-block-preformatted"> <p>Powershell-Befehl Get-Transportagent "Malware Agent" | Disable-Transportagent
Restart-Service MSExchangeTransport</p></pre>



<p>Wenn das sauber funktioniert hat, so seht Ihr bei der nachfolgenden Überprüfung folgende Ausgabe:</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="629" height="87" src="https://informatik-guru.de/wp-content/uploads/2022/01/image.png" alt="" class="wp-image-822" srcset="https://informatik-guru.de/wp-content/uploads/2022/01/image.png 629w, https://informatik-guru.de/wp-content/uploads/2022/01/image-300x41.png 300w" sizes="(max-width: 629px) 100vw, 629px" /></figure>



<p>In einigen Fällen kann es sein, dass der <span style="font-size: revert; color: initial;">MSExchangeTransport</span> beim Neustarten Schwierigkeiten hat, in diesem Fall könnt Ihr den Dienst auch über die GUI neu starten, oder den ganzen Server rebooten.</p>



<h3> <span style="font-size: revert; color: initial;">MSExchangeTransport</span>  über die GUI neu starten:<br></h3>



<figure class="wp-block-image size-full"><img loading="lazy" width="393" height="202" src="https://informatik-guru.de/wp-content/uploads/2022/01/image-1.png" alt="" class="wp-image-823" srcset="https://informatik-guru.de/wp-content/uploads/2022/01/image-1.png 393w, https://informatik-guru.de/wp-content/uploads/2022/01/image-1-300x154.png 300w" sizes="(max-width: 393px) 100vw, 393px" /><figcaption>Für den Weg über die GUI ruft Ihr zunächst die Dienste auf</figcaption></figure>



<p>Hier sucht Ihr nun den Microsoft Exchange-Transport Dienst heraus und startet diesen neu:</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="664" height="423" src="https://informatik-guru.de/wp-content/uploads/2022/01/image-2.png" alt="" class="wp-image-824" srcset="https://informatik-guru.de/wp-content/uploads/2022/01/image-2.png 664w, https://informatik-guru.de/wp-content/uploads/2022/01/image-2-300x191.png 300w, https://informatik-guru.de/wp-content/uploads/2022/01/image-2-659x420.png 659w" sizes="(max-width: 664px) 100vw, 664px" /></figure>



<p>Nun sollte Euer Microsoft Exchange Mailserver wieder funktionieren und gut für 2022 gewappnet sein 😉</p>



<p></p>



<p>Wenn Euch dieser Beitrag gefallen hat schreibt uns oder besucht uns auf einem unserer Social Media Kanäle und lasst einen Like oder Kommentar da!</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/adminlife/microsoft-exchange-2022-bug/">MS Exchange 2022 Bug</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/adminlife/microsoft-exchange-2022-bug/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sieb des Eratosthenes &#8211; Primzahlen sieben in PowerShell</title>
		<link>https://informatik-guru.de/coding/sieb-des-eratosthenes-powershell/</link>
					<comments>https://informatik-guru.de/coding/sieb-des-eratosthenes-powershell/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Thu, 30 Sep 2021 08:20:22 +0000</pubDate>
				<category><![CDATA[Basics]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Einsteiger]]></category>
		<category><![CDATA[FIAE]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[Primzahlen]]></category>
		<category><![CDATA[Programmieraufgabe]]></category>
		<category><![CDATA[Programmieren ist keine Mathematik auch wenn es so aussieht]]></category>
		<category><![CDATA[Programmierübung]]></category>
		<category><![CDATA[Projekt Euler]]></category>
		<category><![CDATA[Tutorial]]></category>
		<guid isPermaLink="false">https://informatik-guru.de/?p=808</guid>

					<description><![CDATA[<p>Heute erläutern wir den Sieb des Eratosthenes anhand einer beispielhaften, vereinfachten, Implementierung in PowerShell. Beim Sieb des Eratosthenes handelt es sich um ein Verfahren zur Bestimmung aller Primzahlen bis zu einer vorgegebenen Zahl. Die Zahlen werden von Klein nach Groß durchgegangen und alle Vielfachen werden jeweils elimiert. Das führt dazu, dass ausschließlich Primzahlen übrig bleiben. [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/sieb-des-eratosthenes-powershell/">Sieb des Eratosthenes &#8211; Primzahlen sieben in PowerShell</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Heute erläutern wir den Sieb des Eratosthenes anhand einer beispielhaften, vereinfachten, Implementierung in PowerShell. Beim Sieb des Eratosthenes handelt es sich um ein Verfahren zur Bestimmung aller Primzahlen bis zu einer vorgegebenen Zahl. Die Zahlen werden von Klein nach Groß durchgegangen und alle Vielfachen werden jeweils elimiert. Das führt dazu, dass ausschließlich Primzahlen übrig bleiben.</p>



<h2>Beispiel</h2>



<p>Wenn wir bspw. einen Zahlenstrahl von 2 bis 100 sieben wollen, so starten wir zunächst mit der 2. Diese wird als Primfaktor erkannt, woraufhin alle Vielfachen gestrichen werden, also 4,6,8,10,12 usw.<br>Sind alle Vielfachen der 2 eliminiert, fahren wir mit der 3 fort. Also werden 6,9,12,15,18,21 usw. gestrichen. Hierbei können die bereits als Vielfache von 2 identifizierten, also bereits gestrichenen, Zahlen natürlich übersprungen werden. Anschaulich visualisiert sieht das so aus:</p>



<p><a href="https://commons.wikimedia.org/wiki/File:Animation_Sieb_des_Eratosthenes.gif#/media/Datei:Animation_Sieb_des_Eratosthenes.gif"><img src="https://upload.wikimedia.org/wikipedia/commons/6/63/Animation_Sieb_des_Eratosthenes.gif" alt="Animation Sieb des Eratosthenes.gif"></a><br>Von https://en.wikipedia.org/wiki/de:User:SKopp&#8220; als eigenes Werk im deutschen Wikipedia veröffentlich




<h2>Implementierung</h2>



<h4>Zahlenstrahl</h4>



<p>Lasst uns das Ganze nun Step-by-Step als Programm umsetzen.<br>Hierfür definieren wir als erstes unsere Endzahl, also die Obergrenze des Zahlenstrahls den wir sieben möchten, sowie die Wurzel dieser Zahl. Denn wenn wir die Vielfachen aller Zähler, welche größer als die Wurzel der Zahl sind, eliminiert haben sind alle übrigen Elemente automatisch Primzahlen.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" src="https://informatik-guru.de/wp-content/uploads/2021/09/image-8.png" alt="" class="wp-image-811" width="250" height="39"/><figcaption>Definition des Zahlenstrahls</figcaption></figure>



<p>Wie anfänglich gesagt geht es um eine stark vereinfachte und keinesfalls optimierte Variante. Wir &#8222;streichen&#8220; also als erstes die 1, damit diese abschließend nicht in der Ausgabe unserer Primfaktoren erscheint:</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="178" height="20" src="https://informatik-guru.de/wp-content/uploads/2021/09/image-9.png" alt="" class="wp-image-812"/><figcaption>&#8222;Streichen&#8220; der 1</figcaption></figure>



<h4>Durchlauf der potenziellen Primfaktoren</h4>



<p>Nun benötigen wir zunächst eines äußere Schleife in der wir alle Potenziellen Primfaktoren, also die Zahlen von 2 bis zur Wurzel unserer Endzahl durchlaufen, gefolgt von einer Prüfung, ob die betreffende Zahl bereits &#8222;gestrichen&#8220; wurde:</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="308" height="41" src="https://informatik-guru.de/wp-content/uploads/2021/09/image-11.png" alt="" class="wp-image-814" srcset="https://informatik-guru.de/wp-content/uploads/2021/09/image-11.png 308w, https://informatik-guru.de/wp-content/uploads/2021/09/image-11-300x40.png 300w" sizes="(max-width: 308px) 100vw, 308px" /><figcaption>Durchlauf der Zähler</figcaption></figure>



<h4>Streichen der Vielfachen</h4>



<p>Ist die Zahl noch nicht als Vielfaches eines vorangegangenen Primfaktors erkannt und somit noch im Rennen, so streichen wir ihre Vielfachen:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" src="https://informatik-guru.de/wp-content/uploads/2021/09/image-12.png" alt="" class="wp-image-815" width="346" height="55" srcset="https://informatik-guru.de/wp-content/uploads/2021/09/image-12.png 340w, https://informatik-guru.de/wp-content/uploads/2021/09/image-12-300x48.png 300w" sizes="(max-width: 346px) 100vw, 346px" /><figcaption>&#8222;Streichen&#8220; der Vielfachen</figcaption></figure>



<p>Hierbei beginnen wir absichtlich mit dem zweifachen des Primfaktors, sodass dieser selbst in unserem Zahlenstrahl verbleibt.</p>



<h4>Ausgabe des gesiebten Zahlenstrahl</h4>



<p>Abschließend erfolgt eine Ausgabe aller verbliebenen Zahlen:</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="443" height="22" src="https://informatik-guru.de/wp-content/uploads/2021/09/image-13.png" alt="" class="wp-image-816" srcset="https://informatik-guru.de/wp-content/uploads/2021/09/image-13.png 443w, https://informatik-guru.de/wp-content/uploads/2021/09/image-13-300x15.png 300w" sizes="(max-width: 443px) 100vw, 443px" /><figcaption>Ausgabe der nicht gestrichenen Zahlen</figcaption></figure>



<p>Inklusive der Ausgabe aller gefundenen Primzahlen, sowie der benötigten Laufzeit ergibt sich dann folgendes kleine Script:</p>



<figure class="wp-block-image size-full"><img loading="lazy" width="664" height="269" src="https://informatik-guru.de/wp-content/uploads/2021/09/image-14.png" alt="" class="wp-image-817" srcset="https://informatik-guru.de/wp-content/uploads/2021/09/image-14.png 664w, https://informatik-guru.de/wp-content/uploads/2021/09/image-14-300x122.png 300w" sizes="(max-width: 664px) 100vw, 664px" /><figcaption>Kurzes vereinfachtes Beispiel anhand eines Zahlenstrahls bis 10.000</figcaption></figure>



<h2>Optimierungen</h2>



<p>Um die Laufzeit und die Speichernutzung zu optimieren gibt es hier nun unterschiedliche Optimierungsansätze. Der erste, einfachste und effektivste wäre es alle geraden Zahlen bereits beim Aufbau des Zahlenstrahls außenvor zu lassen. Bei einem so kleinen Zahlenstrahl wie in unserem Beispiel fällt der Unterschied nicht wirklich auf, wenn man jedoch eine deutlich größere Menge Zahlen sieben möchte, so ist der Unterschied immens. Denn hier gilt die ersten Durchläufe benötigen am längst, da hier, wie oben in der Grafik schön abgebildet ist, die meisten Zahlen gestrichen werden müssen. Mit zunehmendem Fortschritt wird das Streichen der Vielfachen immer schneller und schneller.</p>



<p></p>



<p></p>



<p>Hat Euch dieser Beitrag gefallen? Dann lasst uns doch einen Like auf Facebook oder Instagram da, oder kommentiert einfach direkt hier! Schickt uns gerne Eure Implementierungen oder Verbesserungsvorschläge des Sieb des Eratosthenes. Welche Siebe kennt Ihr noch ? Habt ihr Interesse an einer schematischen Implementierung des Atkins Sieve? Schreibt uns!</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/sieb-des-eratosthenes-powershell/">Sieb des Eratosthenes &#8211; Primzahlen sieben in PowerShell</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/coding/sieb-des-eratosthenes-powershell/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Project Euler 2 &#8211; Powershell Edition</title>
		<link>https://informatik-guru.de/coding/project-euler-2-posh/</link>
					<comments>https://informatik-guru.de/coding/project-euler-2-posh/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Thu, 15 Apr 2021 15:30:00 +0000</pubDate>
				<category><![CDATA[Basics]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Einsteiger]]></category>
		<category><![CDATA[Einsteiger Powershell]]></category>
		<category><![CDATA[FIAE]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[Powershell Newbie]]></category>
		<category><![CDATA[Powershell Tutorial]]></category>
		<category><![CDATA[Programmieraufgabe]]></category>
		<category><![CDATA[Programmieren ist keine Mathematik auch wenn es so aussieht]]></category>
		<category><![CDATA[Programmierübung]]></category>
		<category><![CDATA[projecteuler]]></category>
		<category><![CDATA[Projekt Euler]]></category>
		<guid isPermaLink="false">https://informatik-guru.de/?p=775</guid>

					<description><![CDATA[<p>Heute nehmen wir uns der zweiten Project Euler Aufgabe an und setzen diese in einer einfachen Variante in Windows Powershell um.Sehen wir uns als erstes mal die Problembeschreibung an: Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/project-euler-2-posh/">Project Euler 2 &#8211; Powershell Edition</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Heute nehmen wir uns der zweiten <a rel="noreferrer noopener" href="https://projecteuler.net/index.php?section=problems&amp;id=002" target="_blank">Project Euler Aufgabe</a> an und setzen diese in einer einfachen Variante in Windows Powershell um.<br>Sehen wir uns als erstes mal die Problembeschreibung an:<br><br><em>Each new term in the <a href="https://de.wikipedia.org/wiki/Fibonacci-Folge" target="_blank" rel="noreferrer noopener">Fibonacci sequence</a> is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:<br>1, 2, 3, 5, 8, 13, 21, 34, 55, 89, &#8230;<br>By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.</em><br><br>Unsere Aufgabe besteht also darin die Summe aller geraden Elemente der <a href="https://de.wikipedia.org/wiki/Fibonacci-Folge" target="_blank" rel="noreferrer noopener">Fibonacci-Reihe</a> unter vier Millionen zu finden.<br>Doch wie fangen wir hier an?<br>Zunächst einmal müssen wir, wie bei allen Problemen in der Programmierung zunächst, das große Problem in mehrere kleine Probleme zerlegen.<br><br>Da wir wieder die Laufzeit unseres Scripts tracken wollen benötigen wir, wie auch bei der <a href="https://informatik-guru.de/coding/project-euler-1-powershell-edition/">ersten Euler-Aufgabe</a> eine Stoppuhr. Auch hier benutzen wir wieder die .NET-Klasse, wie im letzten Beitrag erklärt.<br>Dies wird sich nun wie ein roter Faden durch die kommenden Aufgaben ziehen, damit wir immer sehen wie performant oder unperformant unsere Implementierung läuft.</p>



<pre class="wp-block-code scrollable"><code>#Starten der "Stoppuhr" unter Zuhilfenahme der .NET-Klasse system.diagnostics.stopwatch$timetracker = &#91;system.diagnostics.stopwatch]::startNew()

#In $elapsedtime werden die zur Verarbeitung benötigten Sekunden seit dem Start der Stoppuhr geschrieben

#Ausgabe der Laufzeit des Scripts
write-host $timetracker.Elapsed.seconds "Sekunden`t" $timetracker.Elapsed.Milliseconds "Millisekunden"</code></pre>



<p>Als nächstes gehen wir das Hauptproblem an, das Hochzählen der <a rel="noreferrer noopener" href="https://de.wikipedia.org/wiki/Fibonacci-Folge" target="_blank">Fibonacci-Reihe</a>.<br>Die Fibonacci-Reihe ist die unendliche Folge natürlicher Zahlen, beginnend mit 0,1,1, in welcher sich die nächste Zahl immer aus der Summe der beiden vorangegangenen ergibt.<br>Sie weist einige interessante mathematische Besonderheiten auf und steht in Zusammenhang mit dem Pascalschen Dreieck, sowie dem goldenen Schnitt, aber das ist eine andere Geschichte.<br></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="900" height="250" src="https://informatik-guru.de/wp-content/uploads/2021/04/image-5.png" alt="" class="wp-image-777" srcset="https://informatik-guru.de/wp-content/uploads/2021/04/image-5.png 900w, https://informatik-guru.de/wp-content/uploads/2021/04/image-5-300x83.png 300w, https://informatik-guru.de/wp-content/uploads/2021/04/image-5-768x213.png 768w, https://informatik-guru.de/wp-content/uploads/2021/04/image-5-696x193.png 696w" sizes="(max-width: 900px) 100vw, 900px" /></figure></div>



<p>Hierfür benötigen wir einen Ausgangspunkt, sowie drei Variablen. In einer der beiden speichern wir die Summe und tauschen dann die Werte durch vor der nächsten Summenbildung.<br>Bspw: A = 1; B = 1 => C = 2<br>Im nächsten Durchlauf wäre es dann: A = 1; B = 2 => C = 3<br><br>Um die Operation im Rahmen der Schleife, welche wir benötigen um den Durchlauf zu automatisieren bis zur Grenze von 4.000.000, zu wiederholen müssen wir also die Werte tauschen.<br>Anhand unseres obenstehenden Beispiels wäre das dann nach dem ersten Durchlauf<br>A = B; B = C<br>In Summe ergibt das:</p>



<pre class="wp-block-code"><code>$fibosumme = 1;
$fibonacci1 = 0;
$fibonacci2 = 1;

while($fibosumme -lt 4000000){
    $fibosumme = $fibonacci1 + $fibonacci2;
    $fibonacci1 = $fibonacci2;
    $fibonacci2 = $fibosumme;
}</code></pre>



<p>Zuletzt müssen wir beim hochzählen der Fibonacci-Folge lediglich noch prüfen, ob die nächste gefundene Zahl gerade ist und diese gegebenenfalls aufaddieren.</p>



<pre class="wp-block-code scrollable"><code>if($fibosumme % 2 -eq 0){
    $gesamtsumme += $fibosumme;
}</code></pre>



<p>Nun müssen wir das Ganze nur noch zusammensetzen und mit einer Ausgabe versehen, welche uns die Summe präsentiert und die Aufgabe ist gelöst:<br></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="707" height="370" src="https://informatik-guru.de/wp-content/uploads/2021/04/image-7.png" alt="" class="wp-image-779" srcset="https://informatik-guru.de/wp-content/uploads/2021/04/image-7.png 707w, https://informatik-guru.de/wp-content/uploads/2021/04/image-7-300x157.png 300w, https://informatik-guru.de/wp-content/uploads/2021/04/image-7-696x364.png 696w" sizes="(max-width: 707px) 100vw, 707px" /></figure></div>



<p>Weitere Project Euler-Aufgaben und andere Tutorials und Tipps im Kontext Powershell werden zeitnah folgen.<br>Apropos folgen, folgt Ihr uns eigentlich schon auf Facebook oder Instagram?<br>Falls nicht ist jetzt der perfekte Zeitpunkt das nachzuholen.<br>Gerne könnt Ihr Euch mit Kommentaren hier oder auf einem der Social Media Kanäle mit Ideen, Wünschen oder Kritik einbringen.<br>Wenn Ihr eine konkrete Frage zu Powershell Scripting oder Programmierung allgemein habt, könnt Ihr diese ebenfalls gerne auf den oben genannten Kanälen stellen wo wir diese gerne aufgreifen und entweder persönlich beantworten oder im Rahmen eines Beitrags thematisieren!<br></p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/project-euler-2-posh/">Project Euler 2 &#8211; Powershell Edition</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/coding/project-euler-2-posh/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Project Euler 1 &#8211; Powershell Edition</title>
		<link>https://informatik-guru.de/coding/project-euler-1-powershell-edition/</link>
					<comments>https://informatik-guru.de/coding/project-euler-1-powershell-edition/#comments</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Wed, 14 Apr 2021 14:52:37 +0000</pubDate>
				<category><![CDATA[Basics]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Einsteiger]]></category>
		<category><![CDATA[Einsteiger Powershell]]></category>
		<category><![CDATA[FIAE]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[Powershell Newbie]]></category>
		<category><![CDATA[Powershell Tutorial]]></category>
		<category><![CDATA[Programmieraufgabe]]></category>
		<category><![CDATA[Programmieren ist keine Mathematik auch wenn es so aussieht]]></category>
		<category><![CDATA[Programmierübung]]></category>
		<category><![CDATA[projecteuler]]></category>
		<category><![CDATA[Projekt Euler]]></category>
		<guid isPermaLink="false">https://informatik-guru.de/?p=769</guid>

					<description><![CDATA[<p>Wie kürzlich versprochen starten wir nun einen kleinen betreuten Programmieransatz in Powershell.Ebenso wie in einer Zeit vor früher mit Perl, wollen wir uns hier zunächst ein wenig bei Project Euler austoben.Wer Project Euler noch nicht kennt, hierbei handelt es sich um eine größer werdende Ansammlung unterschiedlichster mehr oder weniger mathematischer Probleme für Programmierer.Zumindest die ersten [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/project-euler-1-powershell-edition/">Project Euler 1 &#8211; Powershell Edition</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Wie kürzlich versprochen starten wir nun einen kleinen betreuten Programmieransatz in Powershell.<br>Ebenso wie in einer Zeit vor früher mit Perl, wollen wir uns hier zunächst ein wenig bei Project Euler austoben.<br>Wer Project Euler noch nicht kennt, hierbei handelt es sich um eine größer werdende Ansammlung unterschiedlichster mehr oder weniger mathematischer Probleme für Programmierer.<br>Zumindest die ersten paar Aufgaben sind sehr einsteigerfreundlich und auch für echte Newbies geeignet!</p>



<p>Wir starten hier nun erstmal bei Aufgabe 1 von Project Euler in Powershell.<br>Dafür sehen wir uns zunächst einmal die Problemstellung an die auf der Website ( <a href="https://projecteuler.net/index.php?section=problems&amp;id=001">Euler 1</a> ) wie folgt beschrieben wird:<br><br></p>



<p><em>If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.<br>Find the sum of all the multiples of 3 or 5 below 1000.</em></p>



<p><br>Wir suchen also die Summe aller Vielfachen von 3 und 5 unter 1000.</p>



<p>Hierfür gibt es nun mehrere Ansätze, da es sich um eine Herangehensweise für Anfänger handeln soll, belassen wir es bei der einfachen Lösung.<br><br>Sehen wir uns die Bausteine des Scripts zunächst mal der Reihe nach an:<br><br>Zunächst starten wir unter Zuhilfenahme der .NET-Klasse system.diagnostics.stopwatch eine Stoppuhr um die Laufzeit unseres Scripts zu messen. Bei den ersten paar Aufgaben werden wir hier kaum merkliche Unterschiede feststellen mit unterschiedlichen Lösungsvarianten, was sich allerdings mit zunehmender Schwierigkeit und Komplexität der Probleme von Aufgabe zu Aufgabe drastisch ändert.</p>



<pre class="wp-block-code scrollable"><code>#Starten der "Stoppuhr" unter Zuhilfenahme der .NET-Klasse system.diagnostics.stopwatch$timetracker = &#91;system.diagnostics.stopwatch]::startNew()

#In $elapsedtime werden die zur Verarbeitung benötigten Sekunden seit dem Start der Stoppuhr geschrieben
$elapsedtime = $timetracker.Elapsed.Seconds

#Ausgabe der Laufzeit des Scripts
write-host "Die Gesamtlaufzeit betrug " $elapsedtime " Sekunden."</code></pre>



<p>Warum haben wir uns hier für eine entliehene .NET-Klasse entschieden anstatt das über ein Powershell-Kommando wie bspw. das CMDlet Measure-Command zu lösen?<br>Ganz einfach: Aus Gewohnheit und weil bei Measure-Command ohne weiteres pipen die Ausgabe der zu erfolgenden Kommandos nie im stdout, also für uns sichtbar in der Konsolenausgabe landen.<br></p>



<p>Als nächster Baustein folgt die Schleife mit der wir über die gewünschten Zahlen iterieren, das &#8222;Herzstück&#8220; des Scripts. Hierbei initialisieren wir im Schleifenkopf einen Zähler, welcher auch als aktuell zu prüfende Zahl dient. Vorab deklarieren wir eine Summenvariable, in welcher wir gleich die entsprechenden Zahlen aufaddieren werden und weisen dieser den Wert 0 zu.</p>



<pre class="wp-block-code scrollable"><code>#Initialisieren der Summenvariable
$Summe = 0

#Kopf der For-Schleife, mit welcher wir die Zahlen von 1 bis 999 durchlaufen
for($zaehler = 1;$zaehler -lt 1000; $zaehler ++){

#Prüfung ob die aktuelle Zahl durch 3 oder 5 teilbar ist
    if($zaehler % 3 -eq 0 -or $zaehler % 5 -eq 0){

#Falls ja, wird die aktuelle Zahl zur bisherigen Summe addiert
        $Summe = $Summe + $zaehler
    }
}</code></pre>



<p>Als letzten Baustein fügen wir abschließend noch eine Ausgabe unseres Ergebnisses hinzu.<br>Hier verwenden wir des Weiteren den Parameter -NoNewline für das Kommando Write-Host, welcher das automatische Anfügen eines Zeilenumbruches unterbindet. Dadurch können wir die Summe selbst farbig innerhalb der selben Zeile ausgeben wie die vorangestellte Info.<br>Das ist zwar nicht Teil der Aufgabe, dient aber der Übersichtlichkeit unserer zugegebenermaßen kleinen Ausgabe und wir lernen schonmal einen neuen Parameter kennen.</p>



<pre class="wp-block-code"><code>#Ausgabe der Info bzgl. der Summe
write-host "Die Summe der Vielfachen von 3 oder 5 unter 1000 lautet:`t" -NoNewline  

#Ausgabe der Summe selbst
write-host $Summe -ForegroundColor Yellow
</code></pre>



<p>Zusammengesetzt ergibt sich hieraus nun folgendes kleine Script, welches die Problemstellung der Aufgabe 1 von Project Euler erfolgreich absolviert:<br></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="704" height="290" src="https://informatik-guru.de/wp-content/uploads/2021/04/image-4.png" alt="" class="wp-image-772" srcset="https://informatik-guru.de/wp-content/uploads/2021/04/image-4.png 704w, https://informatik-guru.de/wp-content/uploads/2021/04/image-4-300x124.png 300w, https://informatik-guru.de/wp-content/uploads/2021/04/image-4-696x287.png 696w" sizes="(max-width: 704px) 100vw, 704px" /></figure></div>



<p>Weitere Project Euler-Aufgaben und andere Tutorials und Tipps im Kontext Powershell werden zeitnah folgen.<br>Apropos folgen, folgt Ihr uns eigentlich schon auf Facebook oder Instagram?<br>Falls nicht ist jetzt der perfekte Zeitpunkt das nachzuholen.<br>Gerne könnt Ihr Euch mit Kommentaren hier oder auf einem der Social Media Kanäle mit Ideen, Wünschen oder Kritik einbringen.<br>Wenn Ihr eine konkrete Frage zu Powershell Scripting oder Programmierung allgemein habt, könnt Ihr diese ebenfalls gerne auf den oben genannten Kanälen stellen wo wir diese gerne aufgreifen und entweder persönlich beantworten oder im Rahmen eines Beitrags thematisieren!<br></p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/project-euler-1-powershell-edition/">Project Euler 1 &#8211; Powershell Edition</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/coding/project-euler-1-powershell-edition/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Einstieg Powershell &#8211; Was ist diese blaue cmd?</title>
		<link>https://informatik-guru.de/coding/einstieg-powershell/</link>
					<comments>https://informatik-guru.de/coding/einstieg-powershell/#comments</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Wed, 14 Apr 2021 09:48:21 +0000</pubDate>
				<category><![CDATA[Basics]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Einsteiger]]></category>
		<category><![CDATA[Einsteiger Powershell]]></category>
		<category><![CDATA[FIAE]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[POSH]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[Powershell Newbie]]></category>
		<category><![CDATA[Powershell Tutorial]]></category>
		<category><![CDATA[Programmieraufgabe]]></category>
		<category><![CDATA[Programmieren ist keine Mathematik auch wenn es so aussieht]]></category>
		<category><![CDATA[Programmierübung]]></category>
		<category><![CDATA[projecteuler]]></category>
		<category><![CDATA[Projekt Euler]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[windows powershell]]></category>
		<guid isPermaLink="false">https://informatik-guru.de/?p=761</guid>

					<description><![CDATA[<p>Ein kleiner Einstieg in die große Welt der Powershell.<br />
Mehr zum Thema to be soon</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/einstieg-powershell/">Einstieg Powershell &#8211; Was ist diese blaue cmd?</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Die Windows PowerShell ist eine objektorientierte Skript- und Programmiersprache mit deren Hilfe sich alle möglichen Systemfunktionen und weitere Aufgaben automatisieren lassen.<br>Ähnlich der cmd.exe  ist die Windows Powershell inzwischen fester Bestandteil des Betriebssystems.<br>Manche mögen bereits zur Zeit von Windows XP mit ihr gearbeitet haben, da stand sie jedoch nur als Download zur Verfügung und hatte einen deutlich geringeren Funktionsumfang als heute.<br>Seit 2016 ist Powershell als Open Source Projekt auch plattformübergreifend für andere Betriebssysteme verfügbar.<br><br>Ähnlich wie die CMD ist die Windows Powershell ein Kommandozeileninterface, welche insbesondere unter IT-Administratoren besonderen Anklang findet.<br>Sie beinhaltet in heutiger Fassung eine vollumfängliche IDE die Powershell ISE.<br><br>Starten könnt Ihr die Powershell indem ihr den Ausführen-Dialog startet mit der Windowstaste + R und &#8222;powershell&#8220; eingebt, gefolgt von Enter oder OK. Genauso geht es über die Windows Suche im Startmenü.<br>Wollt ihr die ISE Starten, gebt ihr einfach zusätzlich ISE ein:<br></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://informatik-guru.de/wp-content/uploads/2021/04/image.png" alt="" class="wp-image-762" width="383" height="270" srcset="https://informatik-guru.de/wp-content/uploads/2021/04/image.png 778w, https://informatik-guru.de/wp-content/uploads/2021/04/image-300x212.png 300w, https://informatik-guru.de/wp-content/uploads/2021/04/image-768x542.png 768w, https://informatik-guru.de/wp-content/uploads/2021/04/image-100x70.png 100w, https://informatik-guru.de/wp-content/uploads/2021/04/image-696x491.png 696w, https://informatik-guru.de/wp-content/uploads/2021/04/image-595x420.png 595w" sizes="(max-width: 383px) 100vw, 383px" /></figure>



<p><br><br><br>Innerhalb der ISE habt ihr, wie ihr es ggf. aus anderen IDEs gewohnt seid, viele Comfort-Funktionen, wie bspw. automatische Vorschläge von Parametern, eine Befehlsübersicht oder bspw. automatisches einfügen von Code-Snippets wenn Ihr STRG + J drückt.<br>Gerade letzteres kann ich aus meinem Alltag in der Nutzung von Powershell wärmstens empfehlen.<br></p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="555" src="https://informatik-guru.de/wp-content/uploads/2021/04/image-1-1024x555.png" alt="" class="wp-image-763" srcset="https://informatik-guru.de/wp-content/uploads/2021/04/image-1-1024x555.png 1024w, https://informatik-guru.de/wp-content/uploads/2021/04/image-1-300x163.png 300w, https://informatik-guru.de/wp-content/uploads/2021/04/image-1-768x416.png 768w, https://informatik-guru.de/wp-content/uploads/2021/04/image-1-1536x832.png 1536w, https://informatik-guru.de/wp-content/uploads/2021/04/image-1-696x377.png 696w, https://informatik-guru.de/wp-content/uploads/2021/04/image-1-1068x579.png 1068w, https://informatik-guru.de/wp-content/uploads/2021/04/image-1-775x420.png 775w, https://informatik-guru.de/wp-content/uploads/2021/04/image-1.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><br>Zur Nutzung der Powershell kann ich alles in allem sagen, dass ich sie für die eierlegende Wollmilchsau der Script- bzw. Programmiersprachen für viele, viele Aufgaben unter Windows halte.<br><br>Unabhängig davon ob man nun Betriebssystemaufgaben automatisieren, davon unabhängige Tasks programmieren, einfach etwas rumspielen (bspw. Projekt Euler 😉 ) oder seine Azure Cloud orchestrieren möchte, Powershell hat für unwahrscheinlich viele Ansätze die richtigen Werkzeuge parat.</p>



<p>Zum einen gibt es wahnsinnig viele mitgelieferte sogenannte CMDlets, über welche Ihr euch mit dem Befehl Get-Command einen Überblick verschaffen könnt, zum anderen gibt es reichhaltige Angebote seitens einer stetig wachsenden Community aus Entwicklern.<br><br>Ich für meinen Teil arbeite dienstlich viel mit der iTextsharp-Bibliothek, welche unter anderem das automatisierte Auslesen und Befüllen von PDF-Dokumenten ermöglicht um nur ein Beispiel von vielen zu nennen.<br><br>In kommenden Block-Beiträgen werden werden wir auf Besonderheiten, Tipps, Kniffe und Code-Beispiele in Powershell eingehen.<br><br>Wenn ihr Vorschläge, Eindrücke, Wünsche oder Ideen zum Thema habt, postet diese gerne hier, oder auf einem unserer Social Media Kanäle als Kommentar und bringt euch ein.<br>Thematisch gilt hier ganz klar:<br></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="1024" height="573" src="https://informatik-guru.de/wp-content/uploads/2021/04/image-3-1024x573.png" alt="" class="wp-image-765" srcset="https://informatik-guru.de/wp-content/uploads/2021/04/image-3-1024x573.png 1024w, https://informatik-guru.de/wp-content/uploads/2021/04/image-3-300x168.png 300w, https://informatik-guru.de/wp-content/uploads/2021/04/image-3-768x430.png 768w, https://informatik-guru.de/wp-content/uploads/2021/04/image-3-1536x860.png 1536w, https://informatik-guru.de/wp-content/uploads/2021/04/image-3-2048x1147.png 2048w, https://informatik-guru.de/wp-content/uploads/2021/04/image-3-696x390.png 696w, https://informatik-guru.de/wp-content/uploads/2021/04/image-3-1068x598.png 1068w, https://informatik-guru.de/wp-content/uploads/2021/04/image-3-750x420.png 750w, https://informatik-guru.de/wp-content/uploads/2021/04/image-3-1920x1075.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption><br><br></figcaption></figure></div>



<p><br><br><br></p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/einstieg-powershell/">Einstieg Powershell &#8211; Was ist diese blaue cmd?</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/coding/einstieg-powershell/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Project Euler 2 &#8211; Perl for beginners</title>
		<link>https://informatik-guru.de/coding/project-euler-2-perl-for-beginners/</link>
					<comments>https://informatik-guru.de/coding/project-euler-2-perl-for-beginners/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Fri, 01 Mar 2019 07:37:01 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Einsteiger]]></category>
		<category><![CDATA[FIAE]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[perl monk]]></category>
		<category><![CDATA[Programmieraufgabe]]></category>
		<category><![CDATA[Programmieren ist keine Mathematik auch wenn es so aussieht]]></category>
		<category><![CDATA[Programmierübung]]></category>
		<category><![CDATA[projecteuler]]></category>
		<category><![CDATA[Projekt Euler]]></category>
		<guid isPermaLink="false">https://informatik-guru.de/?p=751</guid>

					<description><![CDATA[<p>Teil 2 unserer Tutorial-Reihe zu projecteuler und Perl für Einsteiger.</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/project-euler-2-perl-for-beginners/">Project Euler 2 &#8211; Perl for beginners</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Heute geht es in Teil 2 unserer Reihe wieder um Perl und Projekt Euler (https://projecteuler.net).<br>Hierbei handelt es sich um eine große Ansammlung von Programmierübungen, welche meiner Meinung nach einen guten Einstieg in die Anwendung von erlernten Kontrollstrukturen und ähnlichem darstellen, ganz gleich in welcher Sprache.<br><br>Im Folgenden wollen wir das zweite &#8222;Problem&#8220; aus der Aufgabenliste in Perl lösen.<br><br>Die Aufgabenstellung lautet wie folgt:<br><br></p>



<p>Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:</p>



<p>1, 2, 3, 5, 8, 13, 21, 34, 55, 89, &#8230;</p>



<p>By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.</p>



<p><br></p>



<p>Wir wollen also die Summe aller geraden Fibonacci-Zahlen unter 4.000.000 finden.</p>



<p><br>Eine mögliche Lösung kann man in Perl wie folgt umsetzen:<br><br><br></p>



<pre class="wp-block-code scrollable"><code>#Aufgabenstellung
#Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

#1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

#By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.



#übliche Shebang-Zeile
#!/usr/bin/perl

#Compiler-Flags die übliche Programmierfehler erkennen und aufzeigen
use strict;
use warnings;

#Deklaration der Variablen
my $fiboone = 1;
my $fibotwo = 1;
my $result = 0;
my $sum = 0;
#Schleifenkopf der While-Schleife, welche läuft bis $result, unsere Variable für den Dreieckstausch der Zahlen 4.000.000 erreicht
while($result &lt; 4000000){
  #If-Condition welche überprüft ob der in $result befindliche Wert gerade ist (Modulo 2 = 0)
  if(($result % 2) == 0){
    #Falls ja wird der $result befindliche Wert zur Summe aller bisher gefunden geraden Fibonacci-Zahlen addiert
    $sum += $result;
  }
  #Dreieckstausch der beiden Zahlen-Variablen sowie der Hilfsvariable
  $result = $fiboone + $fibotwo;
  $fibotwo = $fiboone;
  $fiboone = $result;
}
#Ausgabe des Ergebnis
print "\nDas Ergebnis lautet:  $sum";

</code></pre>



<p>Dies ist natürlich nur eine mögliche Lösung und sie wurde des Weiteren nicht in Sachen Performance optimiert.<br>Wenn Ihr Optimierungsvorschläge, oder alternative Lösungen habt, so postet sie doch hier oder lasst sie uns per Mail an senpai@informatik-guru.de zukommen.<br><br>Wenn Euch der Beitrag gefallen hat, so kommentiert ihn doch, oder lasst uns ein Like auf Facebook oder ein Follow auf Instagram da.<br>Gerne könnt Ihr auch unseren Newsletter abbonieren, um immer über die neuesten Entwicklungen des Informatik-Guru auf dem Laufenden gehalten zu werden.</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/project-euler-2-perl-for-beginners/">Project Euler 2 &#8211; Perl for beginners</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/coding/project-euler-2-perl-for-beginners/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Project Euler 1 &#8211; Perl for beginners</title>
		<link>https://informatik-guru.de/coding/project-euler-1-perl-for-beginners/</link>
					<comments>https://informatik-guru.de/coding/project-euler-1-perl-for-beginners/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Thu, 21 Feb 2019 19:24:03 +0000</pubDate>
				<category><![CDATA[Basics]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Einsteiger]]></category>
		<category><![CDATA[FIAE]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[perl monk]]></category>
		<category><![CDATA[Programmieraufgabe]]></category>
		<category><![CDATA[Programmieren ist keine Mathematik auch wenn es so aussieht]]></category>
		<category><![CDATA[Programmierübung]]></category>
		<category><![CDATA[projecteuler]]></category>
		<category><![CDATA[Projekt Euler]]></category>
		<guid isPermaLink="false">http://informatik-guru.de/?p=743</guid>

					<description><![CDATA[<p>Heute beschäftigen wir uns mal mit Perl und Projekt Euler (https://projecteuler.net).Hierbei handelt es sich um eine große Ansammlung von Programmierübungen, welche meiner Meinung nach einen guten Einstieg in die Anwendung von erlernten Kontrollstrukturen und ähnlichem darstellen, ganz gleich in welcher Sprache. Im Folgenden wollen wir das erste &#8222;Problem&#8220; aus der Aufgabenliste in Perl lösen. Die [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/project-euler-1-perl-for-beginners/">Project Euler 1 &#8211; Perl for beginners</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Heute beschäftigen wir uns mal mit Perl und Projekt Euler (https://projecteuler.net).<br>Hierbei handelt es sich um eine große Ansammlung von Programmierübungen, welche meiner Meinung nach einen guten Einstieg in die Anwendung von erlernten Kontrollstrukturen und ähnlichem darstellen, ganz gleich in welcher Sprache.<br><br>Im Folgenden wollen wir das erste &#8222;Problem&#8220; aus der Aufgabenliste in Perl lösen.<br><br>Die Aufgabenstellung lautet wie folgt:<br><br>If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.</p>



<p>Find the sum of all the multiples of 3 or 5 below 1000.<br><br>Wir wollen also die Summe aller durch 3 oder 5 teilbaren Zahlen unter 1000 finden.<br><br>Eine mögliche Lösung kann man in Perl wie folgt umsetzen:<br><br><br></p>



<pre class="wp-block-code scrollable"><code>#übliche Shebang-Zeile
#!/usr/bin/perl

#Compiler-Flags, die übliche Programmierfehler erkennen und aufzeigen
use warnings;
use strict;

#Deklaration eines Zahlenfeldes von 1 bis 999 sowie der Variable, welche wir später für das Errechnen der Summe verwenden
my @zahlenfeld = 1..999;
my $summe = 0;

#Schleifenkopf einer Foreach-Schleife, welche alle Elemente des oben deklarierten Zahlenfeldes durchläuft
foreach(@zahlenfeld){
  #If-Condition, welche True liefert, also ausgelöst wird, wenn die aktuell bearbeitete Zahl weder durch 3 noch durch 5 teilbar ist
  if($_ % 3 != 0 &amp;&amp; $_ % 5 != 0){
    #Die aktuelle Zahl als auf "undef" setzen, wonach sie keinen Wert mehr enthält
    $_ = undef;
  } #Ende IF
} #Ende der Schleife

#Schleifenkopf einer Foreach-Schleife, welche alle Elemente des oben deklarierten Zahlenfeldes durchläuft
foreach(@zahlenfeld){
  #If-Condition, welche ausgelöst wird, wenn das aktuelle Element einen Wert enthält, also nicht "undef" ist
  if($_){
    #Hier wird der Summe der aktuelle Wert hinzugefügt
    $summe += $_;
  } #Ende IF
} #Ende der Schleife

#Zum Abschluss eine Ausgabe, welche uns das Ergebnis präsentiert
print "Die Summe aller durch 3 oder 5 teilbaren Zahlen unter 1000 lautet:\n$summe\n";
</code></pre>



<p>Wir werden uns bald weiteren projecteuler-Aufgaben annehmen und diese in unterschiedlichen Programmier- und Scriptsprachen lösen.<br>Gerne könnt Ihr eure Variante der Lösung in den Kommentaren posten.<br>Falls Ihr eine coole Idee habt, welches Programmierproblem wir hier thematisieren könnten, so lasst uns davon wissen.<br><br>Wenn Euch der Beitrag gefallen hat, so kommentiert ihn doch, oder lasst uns ein Like auf Facebook oder ein Follow auf Instagram da.<br>Gerne könnt Ihr auch unseren Newsletter abbonieren, um immer über die neuesten Entwicklungen des Informatik-Guru auf dem Laufenden gehalten zu werden.</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/coding/project-euler-1-perl-for-beginners/">Project Euler 1 &#8211; Perl for beginners</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/coding/project-euler-1-perl-for-beginners/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Zarafa Mail Server &#8211; Verwaiste stores löschen</title>
		<link>https://informatik-guru.de/featured/zarafa-mail-server-verwaiste-stores-loeschen/</link>
					<comments>https://informatik-guru.de/featured/zarafa-mail-server-verwaiste-stores-loeschen/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Mon, 11 Feb 2019 15:50:40 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Admin-Life]]></category>
		<category><![CDATA[FIAE]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Scripting]]></category>
		<guid isPermaLink="false">http://informatik-guru.de/?p=717</guid>

					<description><![CDATA[<p>Heute geht es wieder um den ZARAFA Mail-Server.Dieses mal wollen wir, automatisiert natürlich, die verwaisten Stores löschen, welche sich bspw. durch das Löschen eines Nutzers im LDAP und ähnliches ergeben.Hierfür nutzen wir im Prinzip das vorgegebene Kommando &#8222;zarafa-admin &#8211;list-orphans&#8220; mit welchem wir in folgendem Script noch etwas weiter verfahren: #Script by C. Caspar#/bin/bash ZARAFA_ADMIN=which zarafa-admin [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/featured/zarafa-mail-server-verwaiste-stores-loeschen/">Zarafa Mail Server &#8211; Verwaiste stores löschen</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Heute geht es wieder um den ZARAFA Mail-Server.<br>Dieses mal wollen wir, automatisiert natürlich, die verwaisten Stores löschen, welche sich bspw. durch das Löschen eines Nutzers im LDAP und ähnliches ergeben.<br>Hierfür nutzen wir im Prinzip das vorgegebene Kommando &#8222;zarafa-admin &#8211;list-orphans&#8220; mit welchem wir in folgendem Script noch etwas weiter verfahren:<br><br></p>



<p>#Script by C. Caspar<br>#/bin/bash</p>



<p>ZARAFA_ADMIN=<code>which zarafa-admin</code><br> AWK=<code>which awk</code><br> echo &#8222;Achtung &#8211; Dieses Script wird automatisch alle verwaisten Stores loeschen!!!&#8220;<br>$ZARAFA_ADMIN &#8211;list-orphans | tail -n+4 | $AWK &#8218;{print $1}&#8216; |while read STOREID; do<br>     echo &#8222;Entferne Store: $STOREID&#8220;<br>     $ZARAFA_ADMIN &#8211;remove-store $STOREID<br>done</p>



<p>Hierbei schreiben wir zunächst die Pfade zu den Kommandos &#8222;zarafa-admin&#8220; und &#8222;awk&#8220; in die jeweiligen Variablen hinein, um diese im Weiteren gesichert und umgebungsunabhängig weiter aufrufen zu können.<br>Nach einer rein informativen Ausgabe bzgl. dessen was das Script tun wird geht&#8217;s ans Eingemachte.<br>Mit dem vorgegebenen Kommando &#8222;$ZARAFA_ADMIN &#8211;list-orphans&#8220;, was hierbei als Referenz auf das eigentliche Komando &#8222;zarafa-admin &#8211;list-orphans&#8220; zu verstehen ist, geben wir zunächst alle Stores ohne User aus.<br>Mit dem &#8222;| tail -n+4&#8220; lassen wir hierbei die ersten vier Zeilen aus, da darin ohnehin keine für uns verwertbare Information enthalten ist.<br>Darauffolgend pipen wir in ein awk &#8222;| $AWK &#8218;{print $1}'&#8220;, welches die Aufgabe hat, lediglich die erste Spalte des Kommandos auszugeben, also nur die Store-IDs.<br>Zu guter letzt starten wir in dieser Zeile unsere Schleife mit:<br>|while read STOREID; do<br>Hiernach kommt wieder ein rein informativer echo bzgl. dessen was im Begriff ist zu passieren:<br>echo &#8222;Entferne Store: $STOREID&#8220;<br>Gefolgt von der tatsächlichen Löschung des Stores:<br>$ZARAFA_ADMIN &#8211;remove-store $STOREID</p>



<p>Abschließend kann man sagen, dass grundsätzlich mit der automatischen Löschung von Stores äußerst vorsichtig umgegangen werden sollte, da mit obenstehendem Script ALLE verwaisten Stores gelöscht werden, ohne dass diese vorher überprüft wurden, bspw. ob der Store fälschlicherweise verwaist ist, da er eigentlich einem User angehangen werden müsste oder ähnliches.<br>Wir übernehmen natürlich keine Haftung für Fehler welche durch Benutzung unseres Scripts entstanden sind, oder Mails die verloren gegangen sind.<br>Solltet Ihr bzgl. der Vorqualifizierung einer Löschung in einem solchen Fall Fragen haben, so könnt Ihr uns gerne kontaktieren unter senpai@informatik-guru.de.<br>Ein Mitglied unseres Teams wird Euch in einem solchen Fall gerne beratend zur Seite stehen.</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/featured/zarafa-mail-server-verwaiste-stores-loeschen/">Zarafa Mail Server &#8211; Verwaiste stores löschen</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/featured/zarafa-mail-server-verwaiste-stores-loeschen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mail-Server Monitoring in Bash</title>
		<link>https://informatik-guru.de/featured/mail-server-monitoring-in-bash/</link>
					<comments>https://informatik-guru.de/featured/mail-server-monitoring-in-bash/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Mon, 11 Feb 2019 15:17:59 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[Admin-Life]]></category>
		<category><![CDATA[Administrator]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cronjob]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[Mailserver]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[voodoo]]></category>
		<category><![CDATA[Zarafa]]></category>
		<guid isPermaLink="false">http://informatik-guru.de/?p=707</guid>

					<description><![CDATA[<p>Anhand eines Praxisbeispiels möchte ich heute eine Möglichkeit vorstellen, seinen Mail-Server im Hinblick auf die Postfachauslastung seiner User zu monitoren. In unserem Beispiel wird ein Zarafa-Mail-Server benutzt, welcher ein älteres Produkt ist, das auf Postfix aufsetzt. Das funktioniert in unserem Beispiel zweistufig.Zunächst benötigen wir folgendes Script, um einen Überblick über die Postfachauslastung aller Benutzer zu [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/featured/mail-server-monitoring-in-bash/">Mail-Server Monitoring in Bash</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Anhand eines Praxisbeispiels möchte ich heute eine Möglichkeit vorstellen, seinen Mail-Server im Hinblick auf die Postfachauslastung seiner User zu monitoren.</p>



<p>In unserem Beispiel wird ein Zarafa-Mail-Server benutzt, welcher ein älteres Produkt ist, das auf Postfix aufsetzt.</p>



<p>Das funktioniert in unserem Beispiel zweistufig.<br>Zunächst benötigen wir folgendes Script, um einen Überblick über die Postfachauslastung aller Benutzer zu erstellen:<br><br></p>



<p>#Script by C. Caspar<br>#!/bin/bash<br>_USER_LIST=$(zarafa-admin -l | grep -v &#8222;username&#8220; | grep -v &#8222;SYSTEM&#8220; | grep -v &#8222;User&#8220; | grep -v &#8222;&#8211;&#8220; | awk -F&#8216; &#8218; &#8218;{print$1}&#8216; | sort)</p>



<p>for _USERS in $_USER_LIST<br>
do<br>
_CHECK_SIZE=$(zarafa-admin &#8211;details $_USERS &#8211;type user | grep &#8222;Current store size&#8220; | awk -F&#8216; &#8218; &#8218;{print$4, $5}&#8216;)</p>



<p>echo &#8222;$_USERS storesize: $_CHECK_SIZE&#8220;<br> done</p>



<p>Hierbei erstellen wir uns zunächst ein Array aus Usern, welche alphabetisch sortiert sind.<br>Alle Zeilen mit den Strings &#8222;username&#8220;, &#8222;SYSTEM&#8220;, &#8222;User&#8220; und  &#8222;&#8211;&#8220; lassen wir hierbei aufgrund der Struktur des Standard-Outputs des genutzten Befehls nicht in die Ausgabe.<br>Unser Output sieht hierbei zunächst so aus:<br></p>



<p>a_user storesize: 277.54 MB<br>b_user storesize: 14510.95 MB<br>c_user storesize: 19.72 MB<br>d_user storesize: 1748.51 MB<br>e_user storesize: 7758.81 MB<br>f_user storesize: 490.84 MB</p>



<p>Mit diesem Script in der Hinterhand können wir folgendes Script für das tatsächliche Monitoring ausführen:<br><br></p>



<p>#Script by C. Caspar<br>#!/bin/bash<br>PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root<br>sh /root/zeige_postfachauslastung.sh &gt; postfachauslastung_recent &amp;<br>sleep 60</p>



<p>echo -e `<code>cat /root/postfachauslastung_recent |sort -n -r -k3 |grep -E '[0-9]{5}' |awk {'print $1"\011"$3"\n\r"'}`</code> | { read body; echo -e $(echo &#8222;Subject: IMAP_Monitoring_Postfachauslastung\r\n&#8220;; echo &#8222;\r\n\r\nFolgende User haben Postfaecher von mindestens 10 GB:\r\n\r\n&#8220;; echo -e &#8222;${body}&#8220;)| sendmail empfaenger_A@Domain.de empfaenger_B@Domain.de empfaenger_C@Domain.de ;}</p>



<p>Was genau tun wir hier jetzt?<br>Zunächst geben wir dem Script über die PATH-Variable mit, wo es überall nach den entsprechenden Kommandos zu suchen hat, um nicht immer den vollen Pfad zu den Kommandos angeben zu müssen.<br>Dann geben wir den Output des cat-Befehls aus, wobei wir die Trennzeichen durch tatsächliche newlines ersetzen.<br>Das wird danach in die neue Variable &#8222;body&#8220; gelesen und weiter verarbeitet.<br>Im Output des Echo greppen wir bereits per regulärem Ausdruck nach 5-Stelligen Zahlen, da uns alle Postfächer ab 10 GB interessieren.<br>Im Nachgang wird per echo -e der Aufbau der später mit sendmail versandten Mail zusammengesetzt.<br>Hierbei est es wichtig, dass wir zeilenumbruchgetrennt &#8222;Subject&#8220; und anschließend den Inhalt (${body}) angeben, bevor wir den gesamten Output in ein sendmail pipen.<br><br>Folgende Mail kommt hierbei bspw. heraus:<br><br><br></p>



<p>Folgende User haben Postfaecher von mindestens 10 GB:</p>



<p>m_user 17333.92 <br>b_user 17311.53 <br>a_user 17193.89 </p>



<p>Das Ganze lässt sich selbstverständlich auch über ein einzelnes Script bewerkstelligen, da ohnehin das erste im zweiten lediglich aufgerufen und in eine temporäre Datei geschrieben wird. Allerdings ist es in unserem Fall so gebaut, da Script Nummer Eins in mehreren Fällen auch anderweitige händische Verwendung findet.<br><br>Die Einbindung, damit das auch alles automatisiert und ohne unser Zutun läuft, erfolgt einfach via Eintrag im Crontab des entsprechenden Systems.<br><br>In unserem Beispiel ist das wie folgt geschehen:<br><br><br>1 6   * * *   root    /root/postfachauslastung_monitoring.sh<br><br>Aus diesem Eintrag geht hervor, dass das Script &#8222;postfachauslastung_monitoring.sh&#8220; täglich um 6:01 Uhr morgens ausgeführt werden soll.<br></p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/featured/mail-server-monitoring-in-bash/">Mail-Server Monitoring in Bash</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/featured/mail-server-monitoring-in-bash/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ISO-OSI &#038; TCP/IP &#8211; Referenzmodelle &#8211; Wissenswertes</title>
		<link>https://informatik-guru.de/basics/iso-osi-tcp-ip-referenzmodelle-wissenswertes/</link>
					<comments>https://informatik-guru.de/basics/iso-osi-tcp-ip-referenzmodelle-wissenswertes/#respond</comments>
		
		<dc:creator><![CDATA[infoguru]]></dc:creator>
		<pubDate>Wed, 30 Jan 2019 07:40:41 +0000</pubDate>
				<category><![CDATA[Basics]]></category>
		<category><![CDATA[Netzwerktechnik]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[Administrator]]></category>
		<category><![CDATA[FIAE]]></category>
		<category><![CDATA[FISI]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<guid isPermaLink="false">http://informatik-guru.de/?p=670</guid>

					<description><![CDATA[<p>Was ist überhaupt ein Rechnernetz? Ein Rechnernetz ist grundsätzlich ein zusammenhängendes Netz aus autonomen Rechnern. Im Gegensatz zur früher hauptsächlich verbreiteten Variante, in welcher lediglich große Hauptrechner (mainframes) den Löwenanteil der Rechenlast bewerkstelligten und von Terminals (Anwender-Rechnern) gespeist wurden, bezeichnen ein Rechnernetz ein zusammenhängendes Netz vollwertiger Clients, welche Standard-Aufgaben auch dezentral bearbeiten können.Zunehmend beschreibt man [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/basics/iso-osi-tcp-ip-referenzmodelle-wissenswertes/">ISO-OSI &#038; TCP/IP &#8211; Referenzmodelle &#8211; Wissenswertes</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2>Was ist überhaupt ein Rechnernetz?</h2>



<p>Ein Rechnernetz ist grundsätzlich ein zusammenhängendes Netz aus autonomen Rechnern. Im Gegensatz zur früher hauptsächlich verbreiteten Variante, in welcher lediglich große Hauptrechner (mainframes) den Löwenanteil der Rechenlast bewerkstelligten und von Terminals (Anwender-Rechnern) gespeist wurden, bezeichnen ein Rechnernetz ein zusammenhängendes Netz vollwertiger Clients, welche Standard-Aufgaben auch dezentral bearbeiten können.<br>Zunehmend beschreibt man hiermit auch Netzwerke welche mehr in Richtung der althergebrachten Struktur gehen und bspw. mit Thin Clients an Terminalservern arbeiten.</p>



<h2>Protokolle</h2>



<p>Protokolle sind Rahmen bzw. Regeln, welche den Datenaustausch oder allgemeiner gesagt das &#8222;Verhalten&#8220; von mehreren an einer Kommunikation beteiligten Systeme regeln und steuern (&#8222;protocols are formal rules of behaviour&#8220;).<br>Werden einzelne Protokolle von einem oder mehreren Kommunikationspartnern nicht eingehalten, so erschwert dies die Kommunikation oder macht sie gar unmöglich.<br>Um ein Beispiel aus dem täglichen Leben zu wählen, nehmen wir einmal den Funkverkehr.<br>Der Empfang einer Nachricht wird mit &#8222;Roger&#8220; quittiert, der Wechsel der Kommunikationsrichtung wird mit &#8222;Over&#8220; initiiert.<br><br>Vergleichbare Protokollstrukturen werden auch in der Kommunikation zwischen Computern verwendet.<br>Diese sind hierbei selbstverständlich weitaus komplexer und die Kommunikation wird nie über ein einzelnes, sondern in der Regel über eine ganze Vielzahl an Protokollen abgebildet.<br>Diese Protokolle sind zumeist lediglich für einzelne Teilaufgaben im Datenaustausch zuständig und werden in Form von Schichten (Stacks) abgebildet.<br>Das Beispiel schlechthin hierbei ist das weiter unten kurz beschriebene OSI-Modell.</p>



<h2>Historisches</h2>



<p class="scrollable">Gegen Ende des Kalten Krieges beauftragte die amerikanische Regierung das Department of Defence (DoD) mit der Entwicklung einer möglichst ausfallsicheren Netzwerkstruktur, welche auch im Falle eines Atomkrieges weiter funktionieren sollte, wofür sich nach mehreren Tests (ohne Atombomben natürlich) das Telefonnetz als untauglich erwies. Hieraus ergab sich eine Zusammenarbeit mit der ARPA (Advanced Research Project Agency), während welcher diese auch gleich aufgrund der militärischen Ausrichtung in DARPA (Defense Advanced Research Project Agency) umbenannt wurde. Diese war 1957 als Reaktion auf den Start des sowjetischen Sputnik gegründet worden.<br>Die Kooperation der Behörden scharte zunächst Wissenschaftler um sich und eruierte unterschiedliche Arten von Netzwerken.<br>Um die angestrebte Zuverlässigkeit zu erreichen, fiel die Wahl auf eine paketvermittelnde Netzwerkstruktur (packet-switched network).<br>Grundsätzlich werden Kommunikationspartner im Rahmen einer solchen Verbindung lediglich virtuell verbunden und &#8222;zerstückeln&#8220; die zu übertragenden Informationen, welche folglich auf der Empfängerseite zunächst wieder zusammengesetzt werden müssen.<br>Ende 1969 entstand hieraus in Kooperation mit vier amerikanischen Universitäten (UCLA, UCSB, SRI, University of Utah) das DARPA-Net.<br>Da die ursprünglich im DARPA-Net verwendeten Protokolle nicht dafür ausgelegt waren, eine Vielzahl an Teilnetzen zu verbinden oder der steigenden Komplexität der zu übermittelnden Informationen Stand zu halten, wurde 1974 TCP/IP entwickelt.<br>Nachdem in den darauffolgenden Jahren weitere Entwicklung sowie die erste Integration von TCP/IP in Berkley Unix den Weg für die Technologie ebneten, wurde das DARPA-Net 1984 aufgeteilt in den militärischen Bereich &#8222;MILNET&#8220; und den zivilen bzw. Forschungsbrerich &#8222;DARPA-Net&#8220;.<br>Das DARPA-Net als solches existiert zum jetzigen Zeitpunkt nicht mehr, Nachfolger des MILNET hingegen sind noch heute aktiv und einsatzbereit.<br><br>Die Sammlung von Netzwerken, welche das DARPA-Net darstellte wurde zunehmen als Netzverbund betrachtet.<br>Dieser Netzverbund ist gewissermaßen der Urvater des Internets.<br><br>[Kleiner Seitenhieb am Rande, Horst Seehofer war vermutlich Austauschstudent an der UCLA und war deshalb 1980 bereits online.]</p>



<p></p>



<h2>Referenzmodelle</h2>



<p>Das Open System Interconnections(OSI)-modell ist ein Modell basierend auf einem Vorschlag der International Standards Organisation (ISO). Der Aufbau ist untenstehender Illustration zu entnehmen.<br><br>Das Modell dient derzeit als Rahmen zur Beschreibung der Protokollcharakteristika und -funktionen.<br>Es besteht aus sieben Schichten und beruht darauf, dass eine Schicht immer der übergeordneten Schicht bestimmte Dienstleistungen bzw. Funktionen bereitstellt.<br><br>Es handelt sich hierbei nicht um eine Netzwerkstruktur, sondern lediglich die Beschreibung dessen, welche Aufgaben und Funktionalitäten die einzelnen Schichten abdecken sollen.<br><br>Die folgenden Prinzipien, aus denen sich die Schichten ergeben, definierte Tanenbaum 1996:<br>1. Eine neue Schicht sollte dort entstehen, wo ein neuer Abstraktionsgrad benötigt wird.<br>2. Jede Schicht sollte genau eine definierte Funktion erfüllen.<br>3. Bei der Funktionswahl sollte die Definition international genormter Protokolle berücksichtigt werden.<br>4. Die Grenzen der einzelnen Schichten sollten so gewählt werden, dass der Informationsfluss über die Schnittstellen möglichst gering ist.<br>5. Die Gesamtzahl der Schichten sollte so gewählt sein, dass keine Notwendigkeit besteht, verschiedene Funktionen auf eine Schicht zu packen, aber so klein, dass die Gesamtarchitektur nicht unhandlich wird.</p>



<figure class="wp-block-image"><img loading="lazy" width="195" height="250" src="http://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.01.32.png" alt="" class="wp-image-671"/></figure>



<h3>Anwendungsschicht (Application Layer)[OSI Modell]:</h3>



<p><br>Auf der Anwendungsschicht befinden sich eine Vielzahl von Protokollen, welche einzelne Programme für die Erbringung ihrer Dienstleistung definiert haben.<br>Namhafte Beispiele sind u.a. ftp, telnet, imap</p>



<h3>Darstellungsschicht (Presentation Layer) [OSI Modell] :</h3>



<p><br>Die Darstellungsschicht regelt die Darstellung der übertragenen Daten für die unabhängig hiervon agierenden höherliegenden Protokolle.<br>Hierbei geht es bspw. um die Codierung von Zeichenketten nach ASCII, Unicode o.ä.</p>



<h3>Sitzungsschicht (Session Layer) [OSI Modell] :</h3>



<p><br>Die Sitzungsschicht, oft auch Verbindungsschicht genannt, regelt den Verbindungsauf- und Abbau über die darunterliegende Transportschicht.<br>Bei unidirektionalen Protokollen wird hierbei bspw. geregelt, welcher Kommunikationspartner wann senden kann und ähnliches.</p>



<h3>Transportschicht (Transport Layer) [OSI Modell] :</h3>



<p><br>Die Transportschicht übernimmt, wie der Name vermuten lässt, den Transport der Kommunikationsteilnehmer.<br>Sie hat die elementare Aufgabe, den Datenfluss zu steuern sowie die Integrität, respektive die Unvefälschtheit, der Informationen zu gewährleisten.<br>Beispiele für Protokolle der Transportschicht sind u.a. TCP und UDP.</p>



<h3>Netzwerkschicht (Network Layer) [OSI Modell] :</h3>



<p><br>Die Netzwerkschicht, auch Vermittlungsschicht genannt, hat die primäre Aufgabe, die Verbindung zu Knoten im Netzwerk herzustellen, um somit die darüberliegenden Schichten von der tatsächlichen Übertragung im Netzwerk zu befreien. Eine der Hauptaufgaben ist die Auswahl der Paketrouten vom Sender zum Empfänger.<br>In der Netzwerkschicht ist das Internet Protokoll (IP) einzuordnen.</p>



<h3>Sicherungsschicht (Data Link Layer) [OSI Modell] :</h3>



<p><br>Die Aufgabe der Sicherungsschicht ist die gesicherte Übertragung der Daten vom Sender zum Empfänger.<br>Hierbei werden die Daten in Frames aufgeteilt und sequenziell versendet, wonach ihr Empfang vom Sender durch sogenannte Bestätigungsrahmen quittiert wird.<br>Ein Beispiel für in Layer 2 beheimatete Protokolle ist das Point-to-Point-Protokoll (PPP).</p>



<h3>Bitübertragungsschicht (Physical Layer) [OSI Modell] :</h3>



<p><br>Die Bitübertragungsschicht regelt die Übertragung von Bits über das zugrundeliegende Übertragungsmedium.<br>Dies betrifft vorrangig die Übertragungsgeschwindigkeit und die Bit-Codierung.<br>Die weiteren Festlegungen diese Schicht betreffend ergeben sich hierbei aus dem genutzten Medium.<br>Ob ich hierbei auf 100Base-TX oder Buschtrommeln setze ist für die übergeordneten Schichten unerheblich.</p>



<h2>TCP-IP-Referenzmodell</h2>



<p>Nachdem wir im vorangegangenen Abschnitt alle Unklarheiten zum Thema ISO-OSI-Referenzmodell beseitigt haben sollten, gehen wir im weiteren auf das TCP-IP-Referenzmodell ein.<br>Dieses Referenzmodell ist nach den beiden primären Protokollen TCP und IP benannt.<br>Des Weiteren sei gesagt, dass das TCP-IP-Referenzmodell zeitlich vor dem OSI-Referenzmodell entstanden ist.<br>Dementsprechend sind auch hierbei gemachte Erfahrungen in das OSI-Modell eingeflossen.<br>Im Gegensatz zum OSI-Modell hat man beim TCP-IP-Modell nur vier Schichten:<br>Application Layer<br>Transport Layer<br>Internet Layer<br>Network Layer</p>



<p><br><br>Die im Rahmen der Entwicklung definierten Ziele sind die folgenden:<br><br>=&gt;Unabhängigkeit von der verwendeten Netzwerk-Technologie<br>=&gt;Unabhängigkeit von der Architektur der Hostrechner<br>=&gt;Universelle Verbindungsmöglichkeiten im gesamten Netzwerk<br>=&gt;Ende-zu-Ende-Quittungen<br>=&gt;Standardisierte Anwendungsprotokolle</p>



<figure class="wp-block-image"><img loading="lazy" width="469" height="244" src="http://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.03.45-1.png" alt="" class="wp-image-673" srcset="https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.03.45-1.png 469w, https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.03.45-1-300x156.png 300w" sizes="(max-width: 469px) 100vw, 469px" /></figure>



<h3>Applikationsschicht(Application Layer)[ TCP-IP-Referenzmodell]:</h3>



<p><br>Die Applikationsschicht umfasst alle höherschichtigen Protokolle des TCP/IP-Modells.<br>Zu den ersten Protokollen der Verarbeitungsschicht gehörten u.a. TELNET, SMTP und FTP.<br>Hierzu gesellten sich später bspw. HTTP und DNS.</p>



<h3>Transportschicht (Transport Layer) [ TCP-IP-Referenzmodell] :</h3>



<p><br>Wie im OSI-Modell ermöglicht die Transportschicht im TCP/IP-Modell die Kommunikation zwischen Quell- und Zielhost.<br>Im TCP/IP-Modell wurden hierfür zwei Protokolle definiert: TCP &amp; UDP.<br>TCP ist ein verbindungsorientiertes Protokoll, dessen Hauptaugenmerk auf Zuverlässigkeit und Nachvollziehbarkeit liegt.<br>UDP ist ein schnelleres, dafür aber unzuverlässigeres, verbindungsloses Protokoll, welches vorwiegend für Abfragen verwendet wird und für Übertragungen, bei denen es mehr auf Geschwindigkeit als auf die hundertprozentige Zuverlässigkeit ankommt, wie bspw. Übertragung von Bildern und Sprache.</p>



<h3>Internetschicht (Internet Layer) [ TCP-IP-Referenzmodell] :</h3>



<p><br>Die Internetschicht definiert in diesem Modell lediglich ein Protokoll und zwar das namengebende Internet Protokoll IP, dessen Aufgabe es auch wie bei der Implementierung im Rahmen von OSI ist, die Pakete im Netzwerk korrekt zuzustellen.<br>Das Internet Control Message Protocol (ICMP) ist hierbei ein fester Bestandteil in jeder IP-Implementierung und dient der Übertragung von Diagnose- und Fehlerinformationen für das IP.</p>



<h3>Netzwerkschicht (Network Layer) [ TCP-IP-Referenzmodell] :</h3>



<p><br>Unterhalb der Internetschicht hat das TCP/IP-Referenzmodell ein klares Definitionsdefizit. Es legt nicht all zu viel fest, was auf dieser Ebene passieren soll. Es beschreibt lediglich, dass zur Übermittlung von IP-Paketen ein Host über ein bestimmtes Protokoll an das Netzwerk angeschlossen sein muss.<br>Dieses Protokoll ist im TCP/IP-Referenzmodell allerdings nicht nähergehend definiert, da es von Netz zu Netz und von Host zu Host abweicht.<br>Zumeist machte man unter Anwendung dieses Referenzmodelles Gebrauch von bereits vorhandenen Protokollen wie bspw. Ethernet (IEEE 802.3) oder Serial Line IP(SLIP).</p>



<h2>TCP/IP im Detail</h2>



<figure class="wp-block-image"><img loading="lazy" width="509" height="264" src="http://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.04.41.png" alt="" class="wp-image-674" srcset="https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.04.41.png 509w, https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.04.41-300x156.png 300w" sizes="(max-width: 509px) 100vw, 509px" /></figure>



<p>Da die vierschichtige Betrachtung des TCP/IP-Referenzmodells bzgl. der tatsächlichen Datenübertragung einige Definitionslücken hat und Fragen offen lässt, wird es auch oft als fünfschichtige Darstellung verwandt.<br>Hierbei werden die im ISO-OSI-Referenzmodell beschrieben unteren Schichten &#8222;Data Link Layer&#8220; und &#8222;Physical Layer&#8220;, welche im klassischen TCP/IP-Modell als &#8222;Network Layer&#8220; zusammengefasst sind, wieder unterteilt in &#8222;Network Layer&#8220; und &#8222;Physical Layer&#8220;.<br>Diese Darstellung ist ebenfalls bekannt als <em>hybrides Referenzmodell</em>.<br>Diese erneute Auftrennung ist notwendig, da das TCP/IP-Referenzmodell nicht zwischen Bitübertragungs- und Sicherungsschicht separiert.<br>Diese beiden Schichten erfüllen jedoch grundsätzlich völlig verschiedene Aufgaben.<br>Die Bitübertragungsschicht hat mit den mediumspezifischen Merkmalen von Kupferdraht, Glasfaser und drahtlosen Kommunikationskanälen zu tun, wohingegen die Sicherungsschicht darauf beschränkt ist, den Anfang und das Ende des Kommunikationsrahmens einzugrenzen und Daten mit der gewünschten Zuverlässigkeit von einem Ende zum anderen zu befördern.<br>Somit sollten diese Aufgaben auch in separate Schichten unterteilt werden, was das klassische TCP/IP-Referezenmodell jedoch nicht tut.</p>



<figure class="wp-block-image"><img loading="lazy" width="513" height="242" src="http://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.14.png" alt="" class="wp-image-675" srcset="https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.14.png 513w, https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.14-300x142.png 300w" sizes="(max-width: 513px) 100vw, 513px" /></figure>



<h2>Schichtung</h2>



<p>Die Schichtung beruht auf dem Prinzip, dass eine Schicht die von der darunterliegenden Schicht angebotenen Dienste in Anspruch nehmen kann, ohne Details selbiger Implementierung bzw. Erbringung zu haben. Auf diese Art wird auch die in den obenstehenden Abschnitten beschriebene Teilung der Aufgaben erreicht. Daten, die von einer beliebigen Applikation über Netzwerk versendet werden, durchlaufen den TCP/IP-Protokollstapel (TCP/IP-Stack) von der Applikationsschicht zur Netzwerkschicht, wobei von jeder Schicht Kontrollinformationen in Form eines Protokollkopfes (Headers) angefügt wird.<br>Dieser Prozess wird als Einkapselung(Encapsulation) bezeichnet.</p>



<figure class="wp-block-image"><img loading="lazy" width="456" height="259" src="http://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.38.png" alt="" class="wp-image-676" srcset="https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.38.png 456w, https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.38-300x170.png 300w" sizes="(max-width: 456px) 100vw, 456px" /></figure>



<h3>Stack</h3>



<p>Innerhalb des TCP/IP-Stacks werden die Daten mit unterschiedlichen Termini benannt, da auch jede Schicht ihre eigenen Datenstrukturen hat.<br>Applikationen, welche das TCP benutzen, bezeichnen Daten als Strom (stream). Applikationen, welche hingegen das UDP benutzen, bezeichnen die Daten als Nachricht (message).<br>Auf dem Transport Layer spricht man bei TCP von Segmenten (segments) und bei UDP von Paketen (packets).<br>Auf der nächsttieferen Ebene, also dem Internet Layer, spricht man in beiden Fällen von Datagrammen (datagram), auf dem Network Layer, bzw. dem Physical Layer, gilt die Bezeichnung Frame.</p>



<figure class="wp-block-image"><img loading="lazy" width="542" height="188" src="http://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.54.png" alt="" class="wp-image-677" srcset="https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.54.png 542w, https://informatik-guru.de/wp-content/uploads/2019/01/Bildschirmfoto-2019-01-29-um-20.05.54-300x104.png 300w" sizes="(max-width: 542px) 100vw, 542px" /></figure>



<p>Hat Euch er Beitrag gefallen?  Schreibt uns!<br>Habt Ihr offene Fragen oder Anregungen zum Thema? Schreibt uns!<br>Themenvorschläge/-wünsche? Schreibt uns!<br><br>Lasst uns gerne einen Besuch, einen Like oder eine Markierung auf einem unserer Social Media Kanäle auf <a href="https://www.facebook.com/InformatikGuru/" target="_blank" rel="noreferrer noopener">Facebook </a>oder <a href="https://www.instagram.com/informatikguru/" target="_blank" rel="noreferrer noopener">Instagram </a>da.</p>
<p>Der Beitrag <a rel="nofollow" href="https://informatik-guru.de/basics/iso-osi-tcp-ip-referenzmodelle-wissenswertes/">ISO-OSI &#038; TCP/IP &#8211; Referenzmodelle &#8211; Wissenswertes</a> erschien zuerst auf <a rel="nofollow" href="https://informatik-guru.de">Informatik Guru</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://informatik-guru.de/basics/iso-osi-tcp-ip-referenzmodelle-wissenswertes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
