<?xml version="1.0"?>
<rss version="2.0"><channel><title>User Artikel</title><link>https://www.fachinformatiker.de/blogs/blog/1-ausbildung-in-den-it-berufen/</link><description></description><language>de</language><item><title>Von AES bis Kyber: Kryptologie in Zeiten des Quantencomputers</title><link>https://www.fachinformatiker.de/blogs/entry/48-von-aes-bis-kyber-kryptologie-in-zeiten-des-quantencomputers/</link><description><![CDATA[<p>
	<strong>Motivation</strong>
</p>

<p>
	Dieser Beitrag stellt dar, welche Auswirkungen Quantencomputer auf kryptographische Verfahren haben könnten. Dazu werden die Grundlagen und der aktuelle Stand symmetrischer und asymmetrischer Verschlüsselungsmethoden grundlegend erläutert. Ziel ist es, wichtige Begriffe möglichst verständlich zu erläutern und die unterschiedlichen kryptographischen Verfahren in ihrem Zweck einzuordnen. Abschließend werden die besonderen Herausforderungen durch Quantencomputer aufgezeigt sowie Lösungsansätze durch Post-Quanten-Kryptographie vorgestellt.
</p>

<p>
	Der Text soll, der Hoffnung des Autors nach, auch ohne umfassende Vorkenntnisse gut verständlich sein. Der Autor empfiehlt ferner, sich den Text möglichst entspannt an einem sonnigen Sonntagnachmittag auf Terrasse, Balkon oder im Lieblingssessel mit einem Glas Tee durchzulesen.
</p>

<p>
	<strong>Einleitung</strong>
</p>

<p>
	Allzu oft werden Artikel zu den Auswirkungen von Quantencomputern auf die Informationssicherheit übertrieben apokalyptisch dargestellt. Beispiele hierfür sind ein Beitrag auf <a href="https://www.telepolis.de/features/Ihre-Passwoerter-sind-bald-wertlos-Quantencomputer-knacken-alles-10318098.html" rel="external nofollow">Telepolis</a> mit der Äußerung „Dazu wird wohl auch die Fähigkeit zählen, die aktuell verwendete Kryptografie und Verschlüsselung schneller zu knacken, als man sich das derzeit vorstellen kann“ oder der <a href="https://www.zdnet.de/88421009/quantensprung-passwoerter-in-der-neuen-aera-der-computersicherheit/" rel="external nofollow">ZDNET-Beitrag</a>, der mit Sätzen wie „Damit wäre alles von Staatsgeheimnissen bis hin zu Bankkontodaten in Gefahr“ ein vergleichbar dystopisches Zukunftsbild zeichnet.
</p>

<p>
	Es ist Zeit, der Sache mal auf den Grund zu gehen – auf Basis der aktuellen Erkenntnisse. Natürlich kann niemand sagen, welche Entdeckungen morgen oder übermorgen noch das Licht der Welt erblicken. Einige Aussagen sind deshalb noch unter Vorbehalt, andere können heute schon sehr verlässlich getroffen werden. Los geht's.
</p>

<p>
	Die Grundwerte der Informationssicherheit sind Vertraulichkeit, Integrität und Verfügbarkeit, die häufig durch weitere Anforderungen wie Authentizität und Verbindlichkeit ergänzt werden. Auf technischer Ebene werden diese Forderungen in weiten Teilen durch kryptografische Primitive erfüllt. Insbesondere die Vertraulichkeit kann über sogenannte symmetrische Chiffren erreicht werden. Das sind Verfahren, bei denen der selbe Schlüssel zur Ver- und Entschlüsselung verwendet wird.
</p>

<p>
	<strong>Symmetrische Chiffren</strong>
</p>

<p>
	Nahezu jeder kennt dabei klassische Chiffren wie die Cäsar-Chiffre oder Vigenère-Chiffre. Aber natürlich ist auch die Enigma-Verschlüsselung eine symmetrische Chiffre, so wie der Data Encryption Standard (DES) und der heutige Platzhirsch: der Advanced Encryption Standard (AES).
</p>

<p>
	Wer sich das aktuelle TLS 1.3 genauer anschaut, wird herausfinden, dass ausschließlich AES und ChaCha20 als symmetrische Chiffren zur Auswahl stehen. Tools wie VeraCrypt bieten neben AES hingegen noch vier weitere Verfahren an, die voraussichtlich aber nur Lesern mit Vorwissen bekannt sein dürften: Twofish, Serpent, Kuznyechik und Camellia.
</p>

<p>
	Wenn wir die fünf zuletzt genannten betrachten, haben diese alle gemeinsam, dass sie eine (maximale) Schlüssellänge von 256 Bit aufweisen. Wenn wir also etwas verschlüsseln wollen, brauchen wir als Schlüssel eine Folge von 256 Einsen und Nullen, welche das Schlüsselmaterial bildet. Zur Entschlüsselung müssen diese 256 Bits exakt identisch zum Verschlüsselungsvorgang sein. Ist nur ein Bit verkehrt, wird der ursprüngliche Klartext nicht wiedererkennbar sein. Nur mit der richtigen Kombination bekommen wir den ursprünglichen Inhalt wieder entschlüsselt. Es ist nun einmal wie ein Schlüssel: Ein bisschen richtig genügt eben nicht.
</p>

<p>
	Die letzten 50 Jahre Informatikgeschichte lassen stets den Eindruck entstehen, dass alle Probleme einfach nur eine Frage der Zeit sind. Ein bisschen auf die nächste Prozessorgeneration warten, hier noch schauen, was Nvidia auf den Markt bringt. Früher oder später haben wir doch sicher genug Leistung, um alle 256 Bit, also 32 Bytes, durchzuprobieren.
</p>

<p>
	Wer jedoch denkt, dass das vollständige Durchrechnen eines Verfahrens mit 256-Bit-Schlüssellänge in naher Zukunft Realität sein wird, unterschätzt dieses Problem gewaltig. Der Mensch ist sehr schlecht darin, exponentielles Wachstum zu verstehen. Zwar haben die drei Pandemiejahre dabei geholfen, den Begriff bekannter zu machen, dennoch unterschätzen bisweilen auch viele Informatiker weiterhin die Bedeutung.
</p>

<p>
	Angenommen, uns würde das Kunststück gelingen, ein Entschlüsselungsergebnis auf nur einem einzelnen Atom zu speichern. Dann wäre es so, dass auf unserer Erde nicht genug Atome zur Verfügung stehen, um das Ergebnis jedes möglichen AES-Schlüssels zu speichern. Auch nicht in unserem Sonnensystem. Nicht einmal die ca. 200–400 Mrd. Sterne unserer Milchstraße stellen genug Atome zur Verfügung.
</p>

<p>
	Dazu kommt, dass 256 Bit einfach eine willkürliche Grenze darstellen. Den Aufwand, eine gute Verschlüsselung zu konstruieren, sollte man nicht unterschätzen. Aber es hält uns wirklich nichts davon ab, eine 512-Bit-Verschlüsselung zu konstruieren. Hier könnte nun der Einwand sein, dass sich das Verfahren dadurch verlangsamen würde. Dies ist aber deutlich weniger merklich, als man meinen könnte.
</p>

<p>
	Zur Frage, wie leicht sich die symmetrischen Verfahren skalieren lassen, ein kurzer Exkurs: Der AES ist in Runden aufgebaut und unterstützt 128 Bit, 192 Bit und 256 Bit Schlüssellängen. Die kleinste Variante mit 128 Bit wird in 10 Runden durchgeführt, die 192 Bit in 12 Runden und 256 Bit in 14 Runden. Damit ist die 256-Bit-Variante nur ca. 30–40 % langsamer als die 128-Bit-Variante. Ein normaler Rechner schafft recht problemlos 8–10 Gigabyte pro Sekunde AES-Verschlüsselung (256 Bit). Selbst wenn der Rechner in einer theoretischen 512-Bit-Variante nur 4–5 Gigabyte pro Sekunde verschlüsseln könnte, wäre dies verkraftbar.
</p>

<p>
	Ganz ohne Neuentwicklung könnten wir auch die Schlüssellänge des AES durch Mehrfachanwendung steigern. Ein gutes Beispiel hierfür hat es in der Geschichte der Kryptologie schon gegeben: der 3-DES. Aufgrund der Tatsache, dass der Data Encryption Standard nur 56 Bit (effektive) Schlüssellänge hatte, wurde dieser durch eine dreifache Anwendung zum 3-DES weiterentwickelt. Durch die dreifache Anwendung verdoppelte sich die Schlüssellänge auf ca. 112 Bit. Auch wenn der 3-DES heute nicht mehr empfohlen wird, könnte eine solche Vorgehensweise dennoch als Vorbild dienen, sofern keine generellen Schwachstellen im AES bekannt werden.
</p>

<p>
	Es ist also leicht einzusehen, dass uns eine Skalierung hier keine Probleme bereitet. Dennoch wird davon ausgegangen, dass 256 Bit auch in der Welt der Quantencomputer noch ausreichend sicher sind. Das liegt auch in der groben Schätzung begründet, dass die Anzahl der 256-Bit-AES-Schlüssel die Anzahl der Photonen in der Milchstraße übersteigt. Auf die Gefahr durch Quantencomputer möchte ich jedoch erst am Ende näher eingehen, vorweg kann allerdings bereits festgehalten werden, dass moderne symmetrische Chiffren als nicht gefährdet gelten.
</p>

<p>
	Nach diesem Ausritt in die symmetrischen Chiffren können wir uns erst mal ein zweites Glas Tee gönnen und im Anschluss die Welt der asymmetrischen Kryptologie betreten. Fertig? Dann geht es jetzt weiter.
</p>

<p>
	<strong>Asymmetrische Verfahren</strong>
</p>

<p>
	Ein wesentliches Merkmal asymmetrischer Verfahren ist, dass zwei Schlüssel existieren: ein öffentlicher und ein privater. Der öffentliche darf, dem Namen nach, jedem bekannt sein. Der private Schlüssel muss geheim bleiben. Wer die Welt der asymmetrischen Verfahren betritt, kann diese grob in drei Bereiche unterteilen: Ver- und Entschlüsselung, Signaturerstellung und Schlüsselaustausch. Wir schauen uns zunächst mal den Bereich Ver- und Entschlüsselung an.
</p>

<p>
	Wer in der Schule, Berufsschule oder im Studium asymmetrische Chiffren kennenlernt, wird häufig zunächst mit dem RSA-Algorithmus konfrontiert. Das RSA-Verfahren besteht zunächst aus der Idee, sich zwei Primzahlen auszudenken, die, miteinander multipliziert, nur noch mit hohem Aufwand getrennt, also faktorisiert werden können. Mit einer Zahl aus zwei großen Primfaktoren lässt sich aber noch nichts verschlüsseln. Wir brauchen ein Zahlenpaar, welches in einem speziellen Verhältnis zueinandersteht. Das ist ganz vereinfacht so ähnlich wie mit der 5 und der 0,2. Wenn ich eine Zahl mit 5 multipliziere, z. B. die 3, erhalte ich die 15: Wir haben damit den Klartext 3 erfolgreich verschlüsselt und die 15 als Chiffretext erhalten. Wenn ich anschließend die 15 mit 0,2 multipliziere, erhalte ich die Klartextnachricht 3 zurück. Wenn wir nun die 5 als öffentlichen Schlüssel und die 0,2 als privaten Schlüssel betrachten, haben wir eine vereinfachte Vorstellung davon, wie zwei verschiedene Zahlen für den Ver- und Entschlüsselungsvorgang genutzt werden können. Das ist bei RSA ähnlich, nur dass nicht multipliziert, sondern exponenziert wird. Also wird zur Verschlüsselung eine Zahl mit dem öffentlichen Schlüsselexponenten exponenziert und mit dem privaten Schlüsselexponenten für die Entschlüsselung exponenziert. So existiert ein öffentlicher Exponent zur Verschlüsselung und ein privater Exponent zur Entschlüsselung.
</p>

<p>
	Wenn die zwei Primfaktoren bekannt sind, können wir ein solches Zahlenpaar bestimmen, welches in Bezug auf das oben erwähnte Primzahlprodukt in diesem inversen Verhältnis zueinandersteht. Kann ein böser Mensch die Faktorisierung mit geringem Aufwand durchführen, ist dieser natürlich ebenfalls in der Lage, zum öffentlichen Schlüssel den zugehörigen privaten Schlüssel zu ermitteln. Aus diesem Grund spricht man häufig davon, dass RSA auf dem Faktorisierungsproblem beruht. Das ist akademisch betrachtet jedoch nur halb korrekt. Die Ermittlung des privaten Schlüssels in Unkenntnis der Primfaktoren beruht auf dem Problem der Faktorisierung, soweit richtig. Allerdings ist die Verschlüsselung eine (modulare) Exponentiation, weshalb die Entschlüsselung auch auf dem Problem der sogenannten diskreten Wurzel beruht. Wird für eines dieser Probleme eine einfache Lösung gefunden, ist das Verfahren gebrochen.
</p>

<p>
	Diese Idee entstand Ende der 70er-Jahre, und seitdem hat sich natürlich viel verändert, weshalb die Ver- und Entschlüsselung mit RSA heute nur noch geringe Relevanz besitzt. In TLS 1.3 wird RSA zur Datenverschlüsselung gar nicht mehr unterstützt und war bereits in TLS 1.2 seit langem nicht mehr empfohlen. Dies hängt mit der sogenannten vorwärtsgerichteten Sicherheit (Forward Secrecy) zusammen: Wird nämlich der private Schlüssel zu einem späteren Zeitpunkt bekannt, könnten auch ältere verschlüsselte Daten entschlüsselt werden. Spätestens seit den Snowden-Enthüllungen 2013 versucht man genau dies möglichst zu verhindern.
</p>

<p>
	Es gibt andere Verfahren zur asymmetrischen Ver- und Entschlüsselung wie ElGamal und Rabin. Diese sind jedoch ähnlich alt und haben praktisch noch weniger Relevanz als RSA. Der Grund dafür ist, dass wir das nicht wirklich brauchen. Denn egal, welches asymmetrische Verfahren wir wählen: Es wird entsetzlich viel langsamer sein als eine symmetrische Chiffre. Daher ist vielen bereits bekannt, dass die Absicherung der Kommunikation häufig hybrid funktioniert. Das bedeutet, dass wir ein asymmetrisches Verfahren nehmen, um die 128–256 Bit auszutauschen, die wir im Anschluss als AES-Schlüssel verwenden können. Wir wollen, dass auf den zwei Seiten der Kommunikation der gleiche Schlüssel vorliegt. Was wir also eigentlich brauchen, ist ein Schlüsselaustausch.
</p>

<p>
	<strong>Schlüsselaustausch</strong>
</p>

<p>
	Wer bereits Vorkenntnisse hat, wird bei Schlüsselaustausch unmittelbar an Diffie-Hellman denken. Allerdings ist vielen nicht bekannt, dass das klassische Diffie-Hellman-Verfahren noch (etwas) älter als RSA ist. Auch hier können wir leicht wieder eine Vereinfachung vornehmen. Angenommen, wir haben zwei Kommunikationsparteien A und B, und jede denkt sich eine Zahl aus. Sagen wir, A denkt sich die 5 aus und B die 7. Dann brauchen wir noch eine gemeinsame öffentliche Zahl, die nicht geheim ist, nehmen wir die 3. Wenn A nun 5*3 und B 7*3 rechnet, kommen hier jeweils die 15 und die 21 heraus. Nun werden die Ergebnisse ausgetauscht: A übermittelt die 15 an B und B die 21 an A. Jede Seite multipliziert nun das übermittelte Ergebnis mit ihrer eigenen geheimen Zahl. So nimmt A die 21 von B und multipliziert sie mit 5: 5*21=105. B multipliziert die 15 von A mit 7: 15*7=105. Auf beiden Seiten liegt nun die 105 vor. Ausgetauscht wurde die Zahl 3 und die Ergebnisse 15 und 21. Die 105 selbst wurde nicht übertragen, liegt aber nun auf beiden Seiten vor.
</p>

<p>
	Ein Schlüsselaustauschverfahren ermöglicht, dass auf nahezu magische Weise bei den Kommunikationspartnern ein Schlüssel entsteht, ohne dass dieser explizit übermittelt wird. Wir können nun die Zahl 105 als AES-Schlüssel verwenden, um die auszutauschenden Inhalte symmetrisch zu verschlüsseln.
</p>

<p>
	Grundsätzlich funktioniert Diffie-Hellman ähnlich. Aber während in diesem einfachen Beispiel multipliziert wurde, wird im klassischen Diffie-Hellman exponenziert. Ein Angreifer könnte mit einer Division das Verfahren brechen: dies gelingt es bei Diffie-Hellman nur mit dem sogenannten diskreten Logarithmus. Lässt sich der diskrete Logarithmus effizient berechnen, kann der geheime Exponent aus den übermittelten Nachrichten bestimmt werden.
</p>

<p>
	Heute wird Diffie-Hellman regelmäßig kaum noch mit Primzahlen durchgeführt. Das liegt daran, dass die Zahlen, um die Sicherheit zu gewährleisten, immer größer gewählt werden müssen. Heute würde ein solches privates Geheimnis wie die 5 und die 7 im Bereich einer 4000-Bit-Zahl liegen. Das ist zwar für den Rechner noch zu bewältigen, benötigt jedoch insbesondere auf mobilen Geräten viel Zeit.
</p>

<p>
	<strong>Elliptische-Kurven-Kryptographie</strong>
</p>

<p>
	Die oben genannten Verfahren kommen mit den uns bekannten Operationen aus der Schule wie Addition, Multiplikation und Exponentiation aus. Es hat sich jedoch gezeigt, dass sich mit diesen Operationen die asymmetrischen Verfahren nur noch schwer „steigern“ lassen. „Steigern“ bedeutet in diesem Kontext, den Abstand zwischen dem Aufwand zur (legitimen) Berechnung und dem Aufwand für einen erfolgreichen Angriff zu vergrößern. In der Vergangenheit mussten wir die Größe der Zahlen stark steigern, damit der praktische Angriff weiterhin ausgeschlossen bleibt.
</p>

<p>
	Um dieses Problem zu adressieren, hat man sich überlegt, wie man ggf. neue Operationen entwickeln lassen könnte, die diesen Abstand vergrößern. Den Abstand, dass die legitime Berechnung leicht ist, die erforderlichen Aufwände für einen erfolgreichen Angriff jedoch weiterhin groß bleiben. Die Antwort darauf sind elliptische Kurven. Eine elliptische Kurve ähnelt den Polynomen aus dem Mathematikunterricht, erfüllt jedoch zusätzliche Bedingungen, die ihr besondere Eigenschaften verleihen. Es ist möglich, Operationen auf Punkte der Kurve durchzuführen, welche als Ergebnis wiederum ebenfalls auf der Kurve liegen.
</p>

<p>
	Wenn wir uns noch mal das Diffie-Hellman-Beispiel anschauen, dann hatten wir eine öffentliche Zahl 3 sowie die geheimen Zahlen 5 und 7. Bei Diffie-Hellman auf elliptischen Kurven ersetzen wir die 3 durch einen Punkt in einem Koordinatensystem. Statt der öffentlichen 3 haben wir zum Beispiel den Punkt (3 | 2), wobei 3 die X- und 2 die Y-Komponente darstellt. Beide Seiten multiplizieren jetzt diesen öffentlichen Punkt mit ihrer geheimen Zahl. Bei der Addition von Punkten, die wir aus dem Matheunterricht kennen, würden wir nun die 3 und die 2 jeweils mit 5 und mit 7 multiplizieren und die 5*(3 | 2) = (15 | 10) und 7*(3 | 2) = (21 | 14) erhalten. Wenn nun jede Seite der anderen Seite dieses Ergebnis übermittelt, also A erhält (21 | 14) und B erhält (15 | 10), muss jeder seinen privaten Schlüssel anwenden, um die Ergebnisse 5*(21 | 14) = (105 | 70) und 7*(15 | 10) = (105 | 70) zu erhalten. Auf beiden Seiten wurde der gleiche Punkt bestimmt.
</p>

<p>
	Diffie-Hellman auf elliptischen Kurven funktioniert exakt auf die gleiche Weise, nur dass die Multiplikation einer Zahl mit einem Punkt anders definiert ist. Wird ein entsprechend ausgewählter Punkt auf einer elliptischen Kurve mit einer Zahl multipliziert, erhalten wir einen anderen Punkt, der ebenfalls auf der Kurve liegt. Übermittelt nun jede Seite dieses Ergebnis der Gegenseite, entsteht nach erneuter Anwendung des privaten Schlüssels auf beiden Kommunikationsseiten der gleiche Punkt. Wir nehmen anschließend wahlweise die X- oder Y-Komponente als gemeinsames Geheimnis.
</p>

<p>
	Findige Leser werden einwenden, dass es mit der bekannten (3 | 2) und dem Ergebnis (15 | 10) nicht sonderlich schwierig ist, die 5 als Geheimnis zu ermitteln. Über eine Division der Komponenten der Punkte lässt sich das private Geheimnis ermitteln. Bei elliptischen Kurven ist die Operation so definiert, dass diese Rückrechnung durch den diskreten Logarithmus möglich wäre. Ist dieses Problem mit geringem Aufwand lösbar, ist das Verfahren nachhaltig gebrochen. Hier unterscheiden sich die zwei Diffie-Hellman-Varianten nicht: in beiden Fällen basiert die Sicherheit auf der Schwierigkeit des diskreten Logarithmus. Allerdings kann bei elliptischen Kurven eine äquivalente Sicherheit durch deutlich kleinere private Geheimnisse realisiert werden (ca. 256 Bit anstelle 4096 Bit).
</p>

<p>
	Nahezu bei jeder TLS-Verbindung im Netz wird ein solcher Schlüsselaustausch über elliptische Kurven durchgeführt. Jedoch, egal welche Schlüsselaustauschvariante wir wählen, bleibt dennoch das Problem, dass wir uns nicht sicher sein können, ob wir uns mit dem „richtigen“ Kommunikationspartner austauschen. Nur weil wir Zahlen hin und her schicken, können wir uns nicht sicher sein, ob diese Zahlen auch von der Person kommen, die wir annehmen. Wir lösen mit einem Schlüsselaustausch das Vertraulichkeitsproblem, lassen hierbei jedoch die Authentizität auf der Strecke. Daher kommen wir nun zum dritten und letzten großen Feld: die Signaturen.
</p>

<p>
	<strong>Digitale Signaturen</strong>
</p>

<p>
	Zur Erstellung von Signaturen findet RSA, so wie oben erläutert, weiterhin breite Anwendung. Dies hat sich auch mit TLS 1.3 nicht geändert. Neben der Signaturerstellung mit RSA kommt auch der sogenannte Digital Signature Algorithm (DSA) zum Einsatz. Dieser kann ebenfalls auf elliptischen Kurven basieren. Ein prominentes Beispiel für den Einsatz von DSA auf elliptischen Kurven sind die Signaturen auf der Bitcoin-Blockchain.
</p>

<p>
	Ziel einer digitalen Signatur ist es, Integrität und Authentizität zu sichern. Integrität bedeutet, dass der Inhalt unverändert ist bzw. unrechtmäßige Änderungen entdeckt werden können. Authentizität ist die Sicherstellung und Überprüfung der Identität. Also, dass der Kommunikationspartner tatsächlich die Person ist, für die er oder sie sich ausgibt.
</p>

<p>
	So wie zur Ver- und Entschlüsselung mit RSA ist es auch bei Signaturverfahren so, dass ein öffentlicher und ein privater Schlüssel existiert. Mit dem privaten Schlüssel können Unterschriften erzeugt werden, die mittels öffentlichem Schlüssel verifiziert werden können. Wenn wir jedoch über den gleichen unsicheren Kanal den öffentlichen Schlüssel übermitteln, könnte man sich nicht sicher sein, ob dieser nicht von einem Angreifer ausgetauscht wurde.
</p>

<p>
	Diese Vertrauenslücke wird durch ein Zertifikat überbrückt. Ein Zertifikat ist eine Zuordnung einer Identität, z. B. durch einen Namen, mit einem öffentlichen Schlüssel und wird von einer vertrauenswürdigen Instanz bescheinigt. Zu den im Zertifikat beurkundeten öffentlichen Schlüsseln gehört somit der private Schlüssel. Beweist jemand, dass er oder sie über den privaten Schlüssel verfügt, indem beispielsweise eine Signatur erzeugt wird, beweist diese Person, über den zum öffentlichen Schlüssel im Zertifikat zugehörigen geheimen Schlüssel zu verfügen. Auf diese Weise wird die Identität nachgewiesen, die im Zertifikat bescheinigt wurde.
</p>

<p>
	Und nun mal alles zusammen. Bauen wir im Browser eine TLS-Verbindung auf, wird uns ein Zertifikat übermittelt, welches wir anhand bereits bekannter Zertifikate überprüfen können. Ferner beweist die Gegenseite durch eine Signatur, in Kenntnis des privaten Schlüssels zu sein. Auf diese Weise können wir überprüfen, auch nur mit der Gegenseite zu sprechen, die im Zertifikat genannt ist. Außerdem wird mittels Diffie-Hellman ein Schlüsselaustausch durchgeführt, um auf beiden Seiten einen symmetrischen Schlüssel zu erzeugen. Anschließend kann dieser Schlüssel zur Verschlüsselung der Inhalte verwendet werden. Somit haben wir Vertraulichkeit, Integrität und Authentizität auf Basis einer TLS-Verbindung sichergestellt.
</p>

<p>
	<strong>Gefahr durch Quantencomputer</strong>
</p>

<p>
	Quantencomputer nutzen die Prinzipien der Superposition und Verschränkung, um innerhalb eines einzigen Rechenablaufs eine extrem große Anzahl möglicher Zustände zu erzeugen. Vielen Informatikern kommt hierbei möglicherweise eine nichtdeterministische Turingmaschine in den Kopf. Diese Vorstellung entspricht jedoch nicht ganz der Realität. Anders als bei klassischer Parallelverarbeitung ist es nicht einfach ein gleichzeitiges Ausführen aller Rechenwege. Vielmehr ermöglicht die Quantenmechanik, dass durch gezielte Quantengatter bestimmte Resultate verstärkt und andere ausgelöscht werden.
</p>

<p>
	Vielleicht hilft an dieser Stelle ein Gedankenbild, um die Besonderheit der Arbeit mit Quantencomputern zu verdeutlichen: Wenn man einen Stein in einen stillen See wirft, entsteht eine einzelne Welle, die sich gleichmäßig ausbreitet. An einem beliebigen Punkt im Wasser kann man das Auf und Ab dieser Welle gut vorhersagen – es verhält sich, wie man es erwarten würde. Mit Quantencomputern zu arbeiten ist hingegen, als würde man viele Steine gleichzeitig an verschiedenen Stellen ins Wasser werfen. Die Wellen überlagern sich, verstärken oder löschen sich gegenseitig aus. Beobachtet man nun einen zufälligen Punkt auf dem See, erscheint das Verhalten chaotisch und kaum vorhersehbar. Doch wenn man das Muster der Störungen versteht und die Steine gezielt wirft – also das Problem clever formuliert – kann man sich diese Überlagerung zunutze machen. Gerade in dieser Gleichzeitigkeit liegt das große Potenzial von Quantencomputern.
</p>

<p>
	Das bedeutet, dass nicht für jedes Problem ein effizienter Quantenalgorithmus existiert. Es gibt Probleme, bei denen Quantencomputer keinen oder nur einen geringen Mehrwert liefern. Bei anderen Problemen ist die Überlegenheit hingegen bereits nachgewiesen.
</p>

<p>
	Gegenwärtig sind Quantenprozessoren noch sehr fehleranfällig, weshalb sich ein Großteil der Forschung auf verbesserte Hardwaresysteme und ausgefeilte Fehlerkorrekturverfahren konzentriert. Aber ungeachtet dessen entwickelt man bereits heute Algorithmen und Gatterdesigns, um gewappnet zu sein, sobald ausgereiftere Quantenchips zur Verfügung stehen.
</p>

<p>
	In Bezug auf die Kryptologie sind hier zwei solcher Verfahren bekannt: der Grover- und der Shor-Algorithmus. Der Grover-Algorithmus dient der Suche in einer unsortierten Datenbank. Abstrakt betrachtet ist es der Algorithmus, der zur Berechnung symmetrischer Verfahren verwendet werden könnte. Die schlechte Nachricht dabei ist, dass der Grover-Algorithmus den Aufwand einer vollständigen Schlüsselsuche, also das Durchprobieren aller möglichen 256-Bit-AES-Schlüssel, auf die Wurzel dieses Schlüsselraums reduziert. Das bedeutet, dass wir mit einem 256-Bit-AES nur noch den Aufwand einer 128-Bit-Verschlüsselung hätten – dies aber unter der Berücksichtigung, dass wir einen funktionierenden, fehlerfreien Quantencomputer mit mehreren tausend Qubits hätten. Vereinfacht halbiert sich der Aufwand um die Hälfte der Bitlänge.
</p>

<p>
	Die gute Nachricht ist: 128 Bit ist immer noch eine unglaublich große Anzahl an Schlüsseln. Auch mit diesem Werkzeug wären wir weit davon entfernt, vom Quantencomputer bedroht zu sein. Ebenfalls eine gute Nachricht: Die Wurzel stellt eine asymptotisch untere Schranke dar. Das bedeutet, dass der Grover-Algorithmus auch physikalisch nicht besser sein kann.
</p>

<p>
	Das bedeutet nicht, dass ein Quantencomputer nicht für ein spezielles symmetrisches Verfahren gefährlich werden könnte, weil ein besserer Quantenalgorithmus entdeckt wird. Es bedeutet nur, dass nicht generell jedes symmetrische Verfahren in der Gefahr steht, gebrochen zu werden. Insbesondere aufgrund der Tatsache, dass die Stärke der Verschlüsselung leicht hochskaliert werden kann.
</p>

<p>
	Zusammengefasst sind unsere Passworttresore und unsere Festplattenverschlüsselung nicht in unmittelbarer Gefahr. Sicherlich ist es sinnvoll, hier wachsam zu bleiben, allerdings können wir erstmal entspannt bleiben.
</p>

<p>
	Etwas weniger entspannt sieht es bei den asymmetrischen Verfahren aus. Wer den Text genau gelesen hat, konnte zwei Probleme identifizieren, auf denen die asymmetrischen Verfahren beruhen: die Faktorisierung bei RSA und das Problem des diskreten Logarithmus bei Diffie-Hellman und bei den Verfahren auf Basis elliptischer Kurven. Der Quantencomputer ist aufgrund des Shor-Algorithmus eine Gefahr für die Sicherheit dieser Verfahren. Dieser macht sich einen mathematischen Trick zunutze. Wenn man eine beliebige Zahl nimmt und nacheinander mit den Zahlen 1, 2, 3 etc. exponenziert und modulo dem Primfaktorprodukt in RSA rechnet, wiederholt sich diese Sequenz nach einer gewissen (vorher unbekannten) Anzahl. Diese Wiederholung ist ein Muster, welches durch eine sogenannte Quanten-Fouriertransformation erkannt werden kann. Aus dieser Wiederholungsfrequenz lässt sich im Anschluss mindestens einer der Primfaktoren ermitteln.
</p>

<p>
	Auf unseren normalen Rechnern wäre diese Suche ein Algorithmus mit exponentieller Laufzeit und deshalb praktisch nicht durchführbar. Auf einem Quantencomputer wird aus dem Problem ein polynomialzeitiger Algorithmus und wäre somit nicht länger sicher. Auch für das Problem des diskreten Logarithmus bietet der Shor-Algorithmus eine zu effiziente Lösung, sodass Verschlüsselungsverfahren nicht länger auf diesem Problem basieren dürften.
</p>

<p>
	Damit haben die Berichte in gewisser Weise einen validen Punkt, dass wir ohne asymmetrische Verfahren keinen sicheren Schlüsselaustausch mehr hätten und auch die Korrektheit einer digitalen Signatur in Frage gestellt werden müsste. Aber es gibt Hoffnung.
</p>

<p>
	<strong>Post-Quanten-Kryptographie</strong>
</p>

<p>
	Schon 1978 wurde das McEliece-Kryptosystem veröffentlicht, von dem auch heute noch ausgegangen wird, dass es Sicherheit gegenüber Quantencomputern bietet. Allerdings werden hier Schlüsselgrößen im höheren Kilobyte- bis sogar Megabyte-Bereich erzeugt. Insbesondere in den 70er-, 80er- und 90er-Jahren wäre dies nicht realistisch gewesen. Seit Ende der 90er ist auch mit NTRU ein asymmetrisches Verfahren bekannt, bei dem von einer Resistenz gegenüber Quantencomputern ausgegangen wird.
</p>

<p>
	Im Jahr 2017 startete das NIST eine offizielle Suche nach einem neuen QC-resistenten asymmetrischen Verfahren und, wie wir heute wissen, sollte es 7 Jahre dauern, bis diese Suche abgeschlossen ist.
</p>

<p>
	Die Suche endete im August 2024 mit einem Verfahren für einen Schlüsselaustausch und drei Verfahren zur Erzeugung digitaler Signaturen. So wurde u. a. ML-KEM (vormals Kyber genannt) für den Schlüsselaustausch und ML-DSA (vormals Dilithium genannt) zur Erstellung von Signaturen standardisiert. Beide Verfahren basieren auf dem sogenannten Modul-Learning-with-Errors-Problem, daher stammt auch das ML im Namen. [Kleiner Funfact: Kyber sind die Kristalle in den Lichtschwertern der Jedi und aus Dilithium-Kristallen erhalten Raumschiffe wie die Enterprise ihre Energie.]
</p>

<p>
	Bei ML-KEM steht das KEM für Key-Encapsulation Mechanism, was bedeutet, dass auf Basis des öffentlichen Schlüssels ein Geheimnis „verpackt“ wird, das auf der Empfängerseite mit Kenntnis des privaten Schlüssels entpackt werden kann. Bei ML-KEM kann lediglich eine 256-Bit große Nachricht chiffriert werden. Eben genau so viel, dass es für einen AES-Schlüssel genügt. Findige Leser werden einwenden, dass dies eigentlich dem Forward Secrecy Gedanken widerspricht. Aber die Parameter können für jeden Verbindungsvorgang neu gewählt/gewürfelt werden, weshalb sich die Sache hier anders verhält, als ein Schlüsselaustausch mit RSA.
</p>

<p>
	Das Problem, auf dem das ML-KEM Verfahren basiert, ist eines aus der linearen Algebra und chiffriert eine Nachricht auf Basis von Matrizenmultiplikation, bei der ein zusätzlicher Fehlervektor integriert wird – was man als „Rauschen“ bezeichnen könnte. Es verrauscht die Nachricht in dem Umfang, dass es ein großes Hindernis für den Angreifer darstellt. Das Rauschen lässt sich auch mit Kenntnis des privaten Schlüssels nicht vollständig entfernen, allerdings ist die Auswirkung des Rauschens für den Entschlüsselungsvorgang so gering, dass es die Dechiffrierung und Wiederherstellung der Nachricht nicht verhindert.
</p>

<p>
	ML-KEM steht in drei Varianten zur Verfügung: ML-KEM-512, ML-KEM-768 und ML-KEM-1024. Im Wesentlichen ändert sich lediglich die Größe der Matrizen und Vektoren. Die 1024-Variante wird auch als „paranoid“ bezeichnet, und so dachten sich die Entwickler des Signal-Messengers (vermutlich): Das ist der Weg. Daher ist hier bereits ML-KEM-1024 <a href="https://signal.org/docs/specifications/pqxdh/" rel="external nofollow">integriert</a>. Dieser wird mit einem „klassischen“ Schlüsselaustausch auf elliptischen Kurven kombiniert, sodass beide Verfahren gebrochen werden müssten, um an den gemeinsamen Schlüssel zu gelangen.
</p>

<p>
	Zurück zum Thema. Es gibt berechtigte Zweifel bezüglich der PQ-Verfahren. Das liegt daran, dass viele Kandidaten, die vormals von Experten als sicher eingestuft wurden, von anderen Experten regelrecht zerstört wurden. Daher gibt es eine gewisse Unruhe darüber, ob diese selektierten Verfahren nicht ebenfalls Schwächen enthalten, die einfach nur noch unentdeckt sind. Möglich ist das natürlich. Daher ist es immer gut, ein Verfahren in Reserve zu haben. Im März 2025 erweiterte das NIST die vier Verfahren um ein weiteres mit dem Namen HQC, welches als Backup für das Schlüsselaustauschproblem dienen soll. Strukturell ist HQC näher an McEliece als an Kyber, beruht somit auf einer anderen Klasse von Problemen weshalb davon ausgegangen wird, dass nicht zeitgleich beide Verfahren gefährdet sind.
</p>

<p>
	<strong>Fazit</strong>
</p>

<p>
	Quantencomputer könnten sich tatsächlich als großer Wurf auf der einen Seite und realistisches Problem für die derzeitigen klassischen asymmetrischen Verfahren auf der anderen Seite erweisen. Wie in den referenzierten Artikeln in der Einleitung basieren Einschätzungen zur „Kryptoapokalypse“ durch Quantencomputer häufig noch auf dem Wissen von vor 10 Jahren. Heute stehen wir dieser Zukunft nicht mehr ganz ungerüstet gegenüber.
</p>

<p>
	Achso: Falls jemand die kryptografisch sicheren Hashverfahren vermisst haben sollte, dem sei gesagt, dass ich diese nicht vergessen habe. Auch für Hashfunktionen gelten ähnliche Bedingungen und Herausforderungen wie für symmetrischen Verschlüsselungsverfahren. Hier ist jedoch zu berücksichtigen, dass im SHA-2 und SHA-3 bereits jeweils eine 512-Bit-Variante existiert. Hier haben wir also keine Probleme. Aus diesem Grund können Quantencomputer in Bezug auf Hashfunktionen weitgehend ignoriert werden.
</p>

<p>
	Ich bedanke mich bei allen Lesern, die es bis hierher durchgehalten haben, und verabschiede mich mit einem hierzu passenden Zitat von Goethe: „Durch Stolpern kommt man bisweilen weiter, man muss nur nicht fallen und liegen bleiben.“
</p>

<p>
	 
</p>

<p>
	Hinweis: Artikelbild ML generiert, der Text aber nicht <span><img alt=":)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_smile.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/smile@2x.png 2x" title=":)" width="20" loading="lazy"> </span>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">48</guid><pubDate>Sun, 30 Mar 2025 09:50:15 +0000</pubDate></item><item><title>NAS ohne PI</title><link>https://www.fachinformatiker.de/blogs/entry/47-nas-ohne-pi/</link><description><![CDATA[<p>
	Einige haben ja <a href="https://www.fachinformatiker.de/blogs/entry/44-diy-nas/" rel="">DIY NAS</a> gelesen und ich wurde auch schon gefragt ob da noch was passiert. Ja ein paar Dinge sind passiert. Diverse Gehäuseteile wurden gekauft einige wurden gedruckt. CPU Kühler für den Shuttle-Barbone wurden gekauft und modifiziert um auf dem Nano PI Platz zu finden. Und irgendwann ist man an dem Punkt das ganze mal testhalber einzuschalten und enttäuscht zu werden. Android läuft auf dem PI prima, die getesteten Linuxvarianten eher "meh". Der NanoPI versorgt nun mit Android 11, einem Touch-Display und ein paar Verstärkermodulen eine Küche mit Spotify, Audible, Youtube, ..<br>
	Aufmerksamen Lesern ist sicher nicht entgangen das es nun offenbar kein NAS gibt. <br>
	Also ja schon, aber es ist nicht mehr so Low-Power wie anfangs gewollt war.
</p>

<p>
	<u><strong><span style="font-size:22px;">Neue (alte) Hardware</span></strong></u><br>
	Während and dem Barebone Gehäuse für den PI gebastelt wurde ist ein gebrauchter Supermicro Server eingezogen. Darauf liefen - oder auch nicht - zunächst einige Hypervisor (ESXi, HyperV, Proxmox). Die ursprüngliche Ausstattung war dann auch bald zu wenig und es gab einige Upgrades:
</p>

<ul>
	<li>
		2x L5640 (6 Kern "Low-Power")
	</li>
	<li>
		6x 16GB DDR3-1066 ECC REG
	</li>
</ul>

<p>
	Anfang des Jahres hat sich dann das alte "Datengrab" - eine externe 4TB Platte - verabschiedet. Dies rückte das NAS Projekt mal wieder in den Fokus. Für einen niedrigen 4-stelligen Betrag wurden dann einige Festplatten besorgt.<br>
	Geplant war dann eigentlich den RAID-Controller an eine VM im Proxmox durchzureichen und dort Truenas zu installieren. Truenas beziehungsweise ZFS allgemein benötigt direkten Zugriff auf die Datenträger ohne einen RAID-Controller. HBA sind hier das Mittel zum Zweck, einige RAID-Controller kann in den IT-Mode umflashen. Leider mag der Controller weder den IT-Mode noch war das Passthrough wirklich erfolgreich.<br>
	Allerdings bietet Truenas Scale auch eine auf KVM basierte Virtualisierung und k8s basierte Container-Apps. Also weg mit Proxmox und Truenas direkt installiert, Glücklicherweise bot das Supermicro-Board genug SATA Ports um auf den Controller verzichten zu können. Beachten muss man hierbei, daß der Datenträger auf dem Truenas installiert wird nicht weiter zur Verfügung steht. Eine Installation auf einem USB-Stick ist nicht empfehlenswert, man benötigt also am besten eine kleine SSD zur Installation.
</p>

<p>
	Nach der Installation und Ersteinrichtung des ZPools wird man von einem fröhlichen Dashboard begrüßt.<br>
	<img alt="truenas_supermicro.png" class="ipsImage" data-ratio="100.00" height="375" width="750" src="https://raw.githubusercontent.com/speisekatze/Blog/main/images/truenas_supermicro.png" loading="lazy">
</p>

<p>
	Für den Heimgebrauch kann man durchaus auf L2-ARC und slog-Device verzichten. Die Anforderungen für einen brauchbaren slog übersteigen die Fähigkeiten normaler SSDs ohnehin. Wenn man also nicht grad ein paar Enterprise-SSDs rumliegen hat, lässt man das besser. Der L2-ARC hilft nur wenn der ARC voll läuft oder zu klein für das Working-Set ist. Einen L2-ARC kann man einfach nachrüsten falls er wieder erwarten doch notwendig wird. Wobei selbst dann mehr RAM für einen größeren ARC sinnvoller ist.
</p>

<p>
	<strong><u><span style="font-size:22px;">Was nun?</span></u></strong><br>
	Einerseits hat das NAS nun mehr Leistung als mit dem NanoPi möglich gewesen wäre, dafür steht kein Proxmox Server mehr zur Verfügung. Wie schon gesagt bietet Truenas Scale eine rudimentäre Schnittstelle zu KVM Virtualisierung und App-Container über k8s, in Freenas und Truenas Core wird/wurde das über die FreeBSD eigenen Jails gelöst.<br>
	Der Truenas eigene App-Pool wächst immer weiter und bietet neben üblichen wie NextCloud und PLEX auch beispielsweise miniIO. Man kann aber auch eigene Container importieren oder den sehr umfangreichen <a href="https://truecharts.org/docs/charts/description_list/" rel="external nofollow">Truecharts Katalog</a> nutzen.
</p>

<p>
	Für das Heimnetz stellt Truenas nun einige Dienste bereit<br>
	<img alt="truenas_services.png" class="ipsImage" data-ratio="100.00" height="628" width="750" src="https://raw.githubusercontent.com/speisekatze/Blog/main/images/truenas_services.png" loading="lazy">
</p>

<p>
	Über einen externen Proxy und VPN werden einige der Dienste auch nach außen freigegeben, so kann man beispielsweise den codeserver von jedem beliebigen Browser nutzen.
</p>

<p>
	<strong><u><span style="font-size:22px;">Neue (neue) Hardware</span></u></strong><br>
	Leider war diese Hardwarekonfiguration tatsächlich sehr weit von stromsparend entfernt. Ohne Last verbrauchte das System zwischen 150 und 170 Watt. Spitzenverbrauch lag bei 230 Watt. Da das System dauerhaft laufen soll war das schlicht zu viel. Tatsächlich hat das System meinen Stromverbrauch in etwas über 6 Monaten mehr als verdoppelt.<br>
	Neue Hardware ist deutlich energieeffizienter, also mal schauen was es so gibt. Leider ist die alte Hardware so alt, daß nichts davon in einem neuen System nutzbar wäre. Die Alder-Lake Plattform war zum Zeitpunkt des Wechsels sehr verlockend. <br>
	Die Wahl fiel letztlich auf:
</p>

<ul>
	<li>
		64 GB DDR4 RAM in 2 Modulen
	</li>
	<li>
		Core i5-12500T
	</li>
	<li>
		B660 Mikro-ATX Board 
	</li>
</ul>

<p>
	Nach einiger Wartezeit und etwas RAM aus einem alten Desktop sieht das dann so aus.<br>
	<img alt="truenas_alder_lake.png" class="ipsImage" data-ratio="100.00" height="564" width="750" src="https://raw.githubusercontent.com/speisekatze/Blog/main/images/truenas_alder_lake.png" loading="lazy">
</p>

<p>
	Der Stromverbrauch des neuen Systems liegt nun bei 75-80 Watt und 120 Watt unter last. Nicht perfekt aber besser. Beim aktuellen Stromverbrauch muss man auch bedenken, daß Truenas die Festplatten nicht schlafen legt und diese damit mindestens 20 Watt bei Zugriffen eher 40 Watt verbrauchen.<br>
	 
</p>
]]></description><guid isPermaLink="false">47</guid><pubDate>Mon, 05 Dec 2022 01:13:25 +0000</pubDate></item><item><title>Grundlagen IPv6</title><link>https://www.fachinformatiker.de/blogs/entry/46-grundlagen-ipv6/</link><description><![CDATA[<div>
	<div>
		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Hallöööchen mit 3 öchen,</span>
		</p>

		<p>
			 
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">nach langer Zeit versuche ich mich mal wieder mit einem Azubi-gerechten Wissens-Häppchen, heute mit einem viel-gesuchten und gefragten Thema: IPv6</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Aber bevor ich hier loslege kurz etwas vorneweg: Das Thema IPv6 ist komplex und kann verdammt weit in die Tiefe gehen, ich werde vermutlich nur die Oberfläche ankratzen und übernehme auch keine Garantie auf Richtigkeit der Informationen. Ich empfehle den Blog langsam zu lesen und versuchen zu verstehen, sonst wird es schnell unübersichtlich.</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Außerdem: Anders als bei meinen anderen Blogs braucht ihr hier etwas Vorwissen (sonst würde der Blog viel zu lange werden).</span>
		</p>

		<p>
			 
		</p>

		<p style="line-height:normal;">
			<b><span style="font-size:12pt;font-family:'Times New Roman', serif;">Ihr solltet euch mit folgenden Themen auseinandergesetzt haben:</span></b>
		</p>

		<ul type="disc">
			<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">IPv4 Adressen und Grundlagen</span>
			</li>
			<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Zahlensysteme (ich verweise hier mal auf den </span><a href="https://www.fachinformatiker.de/blogs/entry/40-zahlensysteme-dec-bin-hex-u-oct/" rel=""><span style="font-size:12pt;font-family:'Times New Roman', serif;">Blog von Lewan</span></a><span style="font-size:12pt;font-family:'Times New Roman', serif;">)</span>
			</li>
		</ul>

		<p>
			 
		</p>

		<p style="line-height:normal;">
			<b><span style="font-size:12pt;font-family:'Times New Roman', serif;">Wissen einfach und oberflächlich gehalten – die Basics</span></b>
		</p>

		<p>
			 
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Um mal alle auf eine Ebene zu bringen: Ganz allgemein besteht eine IPv6-Adresse aus 32 hexadezimalen Ziffern (128 Bits), die in 4er Gruppen aufgeteilt sind. Diese 4er-Grüppchen - ich nenne so eine Gruppe ein <span style="color:#BF8F00;">Hextet</span> - werden durch Doppelpunkte getrennt. So eine IPv6-Adresse sieht zum Beispiel voll ausgeschrieben so aus:</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:13.5pt;font-family:'Times New Roman', serif;">2a02:<span style="color:#BF8F00;">02e0</span>:03fe:3000:85ed:63ff:fe23:da31</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Gehen wir mal <u>ganz grob</u> auf die <span style="color:#BF8F00;">Hextet</span> ein: Die ersten 4 Hextet - also die ersten 16 hexadezimalen Ziffern - werden vom Provider festgelegt. Genauso wie bei IPv4 gibt es hier ein Suffix (die Zahl hinter dem Slash am Ende) mit dem angegeben wird wieviel Platz wir für das Subnetting haben. Und genauso wie IPv4 wird es in <u>Bits</u> angegeben. Zum Beispiel:</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:13.5pt;font-family:'Times New Roman', serif;color:#00B0F0;">2a02:02e0:03fe:30</span><span style="font-size:13.5pt;font-family:'Times New Roman', serif;color:#00B050;">00:85ed:63ff:fe23:da31 </span><span style="font-size:13.5pt;font-family:'Times New Roman', serif;">/56</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Ich habe hier mal die Trennung zwischen <span style="color:#00B0F0;">Netzanteil</span> und <span style="color:#00B050;">Hostanteil</span> farbig markiert. Ein Unwissender könnte jetzt meinen wir können den Hostanteil nach belieben verändern, aber IPv6 hat weitere Facetten die ich noch nicht angesprochen habe, in diesem Fall noch die letzten 4 Hextet.</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Die letzten 4 Hextet werden <span style="color:#FF0000;">'Interface Identifier</span>' genannt und werden automatisch generiert (teilweise aus der MAC-Adresse der Netzwerkschnittstelle). Strukturieren wir also neu:</span>
		</p>

		<p style="line-height:normal;">
			<s><span style="font-size:13.5pt;font-family:'Times New Roman', serif;color:#00B0F0;">2a02:02e0:03fe:30</span></s><b><span style="font-size:13.5pt;font-family:'Times New Roman', serif;color:#00B050;">00:</span></b><s><span style="font-size:13.5pt;font-family:'Times New Roman', serif;color:#FF0000;">85ed:63ff:fe23:da31</span></s><span style="font-size:13.5pt;font-family:'Times New Roman', serif;">/56</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:13.5pt;font-family:'Times New Roman', serif;color:#00B0F0;">Blau: </span><span style="font-size:12pt;font-family:'Times New Roman', serif;">Vom Provider vergebene Nummer - ignorieren</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:13.5pt;font-family:'Times New Roman', serif;color:#00B050;">Grün</span><span style="font-size:12pt;font-family:'Times New Roman', serif;">: Der Bereich in dem wir Subnetting betreiben oder unser Netz in VLANs teilen können</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:13.5pt;font-family:'Times New Roman', serif;color:#FF0000;">Rot</span><span style="font-size:12pt;font-family:'Times New Roman', serif;">: automatisch generierte Nummer - ignorieren</span>
		</p>

		<p>
			 
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Um das Ganze jetzt noch etwas zu vervollständigen, werden diejenigen unter euch die sich mal ein paar IPv6-Adressen angesehen haben wundern, warum die auch mal anders aussehen können – nämlich mit verkürzter Schreibweise.</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Wie bei IPv4 auch kann man natürlich führende Nullen (nicht nachfolgende!) in einem Hextet weglassen.</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">Zusätzlich gib es noch eine weitere große Regel: <u>Einmalig</u> dürfen <span style="color:#7030A0;">2 Doppelpunkte</span> in der IP vorkommen, der Bereich zwischen den Doppelpunkten besteht nur aus Nullen. Zum Beispiel kann diese IP</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">2a02:02e0:03fe:3000:85ed:<span style="color:#7030A0;">0000:0000</span>:da31</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">So geschrieben werden:</span>
		</p>

		<p style="line-height:normal;">
			<span style="font-size:12pt;font-family:'Times New Roman', serif;">2a02:2e0:3fe:3000:85ed<span style="color:#7030A0;">::</span>da31</span>
		</p>

		<p>
			 
		</p>

		<p style="line-height:normal;">
			 
		</p>

		<p>
			<b><span style="font-size:12pt;line-height:107%;font-family:'Times New Roman', serif;">Noch mehr Grundlagen </span></b><span style="font-size:8pt;line-height:107%;font-family:'Times New Roman', serif;color:#AEAAAA;">die sich keiner merken kann</span>
		</p>

		<p>
			 
		</p>

		<p>
			Der Teil hier ist leider etwas trockene Theorie, gehört aber natürlich auch dazu.
		</p>

		<p>
			Genau wie IPv4 auch, gibt es bei IPv6 reservierte oder definierte Bereiche und ebenfalls öffentliche und private IPs, also mindestens 2 IPs, der größte Unterschied allerdings liegt darin, dass im Gegensatz zu IPv4 <u>jeder PC seine eigene öffentliche IPv6-Adresse besitzt</u>. Auch ein großer Unterschied: <u>Es gibt keine Subnetzmaske</u>. Und wenn ich schon dabei bin mit Wissen um mich zu schmeißen, es <u>gibt auch keinen Broadcast bei IPv6</u>.
		</p>

		<p>
			Fangen wir aber mal mit den Bereichen an. Vorneweg: Es gibt keine Netzklassen wie bei IPv4, vorgesehen ist es, dass Netze das Präfix /64 benutzen (mehr dazu später). Hier also mal die meiner Meinung nach wichtigsten Adressbereiche.
		</p>

		<p>
			<b>Die Loopback-Adresse:</b>
		</p>

		<p>
			Was bei einer <span style="color:#00B0F0;">IPv4</span>-Adresse meist die <span style="color:#00B0F0;">127.0.0.1 /32</span> ist, ist bei <span style="color:#FF0000;">IPv6</span> die <span style="color:#FF0000;">::1/128 </span>oder ausgeschrieben die 0:0:0:0:0:0:0:1 /128
		</p>

		<p>
			<b>Link-Local-Unicast-Adressen:</b>
		</p>

		<p>
			Langes Wort, dahinter verbirgt sich das was bei IPv4 als <span style="color:#00B0F0;">APIPA</span> oder <span style="color:#00B0F0;">ZeroConf</span> bekannt ist und unter IPv6 so aussieht: <span style="color:#FF0000;">fe80:: /64</span>
		</p>

		<p>
			<b>Unique Local Unicast:</b>
		</p>

		<p>
			Oder im IPv4 Adressbereich auch einfach nur die <span style="color:#00B0F0;">private IP-Adresse</span>, sieht so aus <span style="color:#FF0000;">fc00:: /7</span> und lässt sich vom Admin in der Theorie frei vergeben. In der Praxis sind Administratoren angehalten die Ziffern zufällig generieren zu lassen um zum Beispiel bei der Einrichtung von Tunneln zwischen Netzwerken Adress-kollisionen zu vermeiden.
		</p>

		<p>
			<b>Global Unicast Adresse:</b>
		</p>

		<p>
			Diese Adresse kann fast alles Mögliche sein und ist die Adresse mit der ein PC dann auch im Internet auftaucht. Sie ist das Beispiel wie oben beschrieben, bestehend aus der vom <span style="color:#00B0F0;">Provider vergebenen Nummer</span> (Präfix genannt), meiner selbst vergebenen Nummer für <span style="color:#00B050;">Subnets/VLANs </span>und dem generierten <span style="color:#FF0000;">Interface Identifier</span>.
		</p>

		<p>
			 
		</p>

		<p>
			<b><span style="font-size:12pt;line-height:107%;">Wie ein Gerät an seine IPv6-Adresse kommt</span></b>
		</p>

		<p>
			 
		</p>

		<p>
			Was passiert also <u>idealerweise</u> wenn ich einen PC an ein IPv6-fähiges Netzwerk anschließe? Schritt für Schritt:
		</p>

		<p style="text-indent:-18pt;">
			<span><span>1.<span style="font:7pt 'Times New Roman';">     </span></span></span>Der PC gibt sich selbst erstmal eine Link-Local Adresse (APIPA/ZEROCONF). Diese hat immer das Suffix /64, mehrere PCs in einem Netzwerk unterscheiden sich nur an dem automatisch generierten Interface Identifier (die letzten 16 Ziffern, siehe oben). Damit können PCs in einem Netzwerk auch ohne DHCP miteinander kommunizieren. Dieser Prozess gehört zu einem Verfahren dass sich <span style="color:#FF0000;">SLAAC</span> nennt
		</p>

		<p style="text-indent:-18pt;">
			<span><span>2.<span style="font:7pt 'Times New Roman';">       </span></span></span>Der PC ‚schreit‘ seine selbst erstellte IPv6 in das lokale Netz, wenn sich kein anderes Gerät mit „ich hab die Adresse schon“ meldet, dann behält er diese auch, ansonsten wird eine Neue generiert.
		</p>

		<p style="text-indent:-18pt;">
			<span><span>3.<span style="font:7pt 'Times New Roman';">       </span></span></span>Der PC sucht nach einem Router. Der Router gibt dem PC (richtig konfiguriert natürlich) Informationen, nämlich ob der PC sich selbst eine globale IP-Adresse geben soll (und wie diese vom Provider vergebene Adresse aussieht, siehe oben in blau) oder ob ein DHCPv6-Server (und dessen Optionen) im Netz existiert.
		</p>

		<p style="text-indent:-18pt;">
			<span><span>4.<span style="font:7pt 'Times New Roman';">       </span></span></span>Der PC erstellt sich eine Global Unicast Adresse (Auch Teil von SLAAC) oder lässt sich eine von einem existierenden DHCPv6-Server geben.
		</p>

		<p>
			 
		</p>

		<p>
			 
		</p>

		<p>
			<b><span style="font-size:12pt;line-height:107%;">Autokonfiguration (SLAAC) oder DHCPv6?</span></b>
		</p>

		<p>
			 
		</p>

		<p>
			Beides hätte sicherlich Vor- und Nachteile, aber die Praxis sieht leider etwas anders aus. Der Netzwerker wird sich sicherlich schon die ein oder andere Frage stellen auf die ich vielleicht schon eine Antwort habe. Aber erstmal hol ich auch die anderen ab:
		</p>

		<p>
			Wenn ein PC über einen DHCPv4-Server eine IP-Adresse bekommt, dann bekommt er nicht nur diese, sondern auch die Subnetzmaske, das Standardgateway und einen DNS-Server mitgeteilt.
		</p>

		<p>
			Hat man nun keinen DHCPv6-Server wird es unter Umständen schwierig mit dem DNS-Server. Router können üblicherweise auch einen DNS-Server für eine vollständige Konfiguration an anfragende Clients übergeben, was sich RDNSS nennt – aber nicht alle Clients unterstützen RDNSS, erwähnt seien hier zum Beispiel Windows 7 und 8.
		</p>

		<p>
			Andersrum, hat man einen DHCPv6-Server konfiguriert und stellt den Router auf ‚Tu nichts‘ ein… funktioniert gar nichts. Wie oben in den Schritten beschrieben ist der Router nämlich das erste Bindestück zwischen Client und DHCP-Server, beide müssen richtig konfiguriert werden.
		</p>

		<p>
			 
		</p>

		<p>
			<b>Subnetting</b>
		</p>

		<p>
			 
		</p>

		<p>
			Ich habe mich sehr dagegen gesträubt das Thema anzusprechen und sträube mich immer noch detailiert darauf einzugehen, weil meiner <u>absolut persönlichen Meinung nach</u> Subnetting in IPv6 <u>überhaupt gar keinen Sinn macht</u>. Diese persönliche Meinung kam zustande weil wir auch in der Schule (Baden Württemberg) kaum IPv6 Subnetting gemacht haben, dort wurde ebenfalls vertreten, dass es keinen Sinn macht (Abschluss-Jahr 2018).
		</p>

		<p>
			Warum sage ich sowas? Hier die 2 Haupt-Begründungen:
		</p>

		<ol>
			<li style="text-indent:-18pt;">
				       Die letzten 4 Hextet werden wie bereits erwähnt automatisch generiert, unser Netz hat also immer <u>mindestens das Suffix /64</u>. Das heißt ein Netz hat immer mindestens einen Raum für 18.446.744.073.709.551.616 IPv6-Adressen. Ich kann es nicht beschwören, aber würde mal stark vermuten, dass nicht einmal Microsoft oder Apple oder irgendein anderer großer Konzern so viele bzw. bei Subnetting sogar MEHR IP-Adressen braucht. Das sind viel, viel, viel mehr IP-Adressen in einem einzigen Netz als man mit IPv4 insgesamt hat.
			</li>
			<li style="text-indent:-18pt;">
				       Selbst RIPE – die Leute die das Internet durch die Vergabe von AS-Nummern und IP-Adressen am Laufen halten – schreiben, dass für IPv6-Netze ‚nur‘ ein /64 Suffix vorgesehen ist und das nehmen sich einige Services zum Vorbild, weswegen ihr euch darauf einstellen solltet alles manuell einzustellen und zu vergeben solltet ihr irgendein anderes Suffix als /64 nehmen. Mein bisher einziges Beispiel: Ein Windows-Server kann natürlich DHCP auch im IPv6 Bereich spielen – aber nur wenn das Suffix /64 heißt, dies lässt sich stand heute auch nicht ändern. Nicht nur hat ein Netz genügend Platz für IP-Adressen, man hat auch üblicherweise sehr viel Spielraum um tausende von Netzen zu erstellen.
			</li>
		</ol>

		<p>
			Für die Prüflinge der anderen Bundesländer: Ich werde mich vielleicht in einem weiteren Blog detailiert mit dem SUbnetting in IPv6 beschäftigen - so wie es die Schulen gerne hätten - aber die Chancen stehen eher schlecht.
		</p>

		<p>
			Ich hoffe ich konnte euch ein paar grobe Grundlagen einigermaßen verständlich näher bringen <span><img alt=":)" data-emoticon="" data-ratio="100.00" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_smile.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/smile@2x.png 2x" title=":)" width="20" loading="lazy"> </span>
		</p>
	</div>
</div>

<div>
	<div>
		<div>
			 
		</div>
	</div>

	
</div>
]]></description><guid isPermaLink="false">46</guid><pubDate>Fri, 31 Jul 2020 06:40:57 +0000</pubDate></item><item><title>L&#xFC;cken im Lebenslauf und keine Berufserfahrung</title><link>https://www.fachinformatiker.de/blogs/entry/45-l%C3%BCcken-im-lebenslauf-und-keine-berufserfahrung/</link><description><![CDATA[<p>
	<span style="font-size:18px;">Hello</span>.
</p>

<p>
	Die meisten erinnern sich sicher nicht mehr an mich, ich habe hier vor vier Jahren mal eine Vorstellung verfasst. Seitdem ist viel passiert bei mir, und ich würde gerne meinen Werdegang mit euch teilen. Kurze Zusammenfassung der ersten Vorstellung: Ich bin Lukas, mittlerweile 25, ausgebildeter Fachinformatiker für Systemintegration und arbeite als Softwareentwickler.
</p>

<p>
	Der Titel klingt sehr reißerisch, ist aber akurat. Meine Intention mit diesem Artikel ist, die letzten Jahre etwas zu reflektieren. Zum anderen möchte ich Menschen Mut machen, die sich vielleicht in einer ähnlichen Situation befinden wie ich mich befunden hbae.
</p>

<p>
	Ich werde euch jetzt nicht mit unnötigem Geschwafel langweilen und gleichzeitig auch  nicht zu viel über mich persönlich verraten, deswegen wird das Resumé der letzten Jahre recht kurz: Ich habe nach dem Bestehen meiner Ausbildung aus gesundheitlichen Gründen in drei verschiedenen Firmen für jeweils nicht länger als fünf Monate gearbeitet. Das hat große Lücken in meinen Lebenslauf gerissen, von viel Praxiserfahrung keine Spur. Jedes neue Bewerbungssgespräch mit mehr Erklärungsbedarf.
</p>

<p>
	 
</p>

<blockquote>
	<blockquote class="ipsQuote" data-ipsquote="">
		<div class="ipsQuote_citation">
			Zitat
		</div>

		<div class="ipsQuote_contents">
			<p>
				<em>"Systemadministration ist nichts für mich."</em>
			</p>
		</div>
	</blockquote>

	<p>
		 
	</p>
</blockquote>

<p>
	Nachdem ich den letzten Job verloren hatte, habe ich mir gesagt, dass es so nicht weitergehen kann. Ich habe mir die Zeit genommen die ich brauche um fit zu werden und außerdem einen Entschluss gefasst. Systemadministration ist nichts für mich. Der größte Spaß für mich war schon immer das Erstellen von Skripten mit Powershell, weswegen ich mir dachte: hey, warum nicht programmieren lernen. Gesagt, getan. Ich habe eine 16-monatige Weiterbildung zum C++ Programmierer bei einer Fernakademie absolviert. Das Ganze schien aber definitiv auf Vollzeit-Berufstätige ausgelegt gewesen zu sein, ich hatte den Kurs bereits nach zwei Monaten abgeschlossen.
</p>

<p>
	Und was jetzt? Ich habe eine Einführung in die Sprache und objektorientierte Programmierung bekommen, kleinere Dinge programmiert und Konzepte gelernt. Stellt mich jetzt jemand ein? Für mich war klar, so vermutlich noch nicht. Nachdem ich also einige Erfahrungsberichte gelesen habe, habe ich beschlossen mein neugewonnenes Wissen in die Tat umzusetzen und ein Projekt zu starten. Dazu möchte ich noch sagen, dass ich in dieser Zeit natürlich arbeitslos gemeldet war. Das Arbeitsamt habe ich stets über meine Pläne und Vorhaben informiert, weswegen mir sämtliche Freiheiten gelassen wurden. Ich musste keine Bewerbungen schreiben und konnte mich vollends auf meine "Umschulung" fokussieren.
</p>

<p>
	Für mein Projekt habe ich einige Rahmenbedingungen aufgestellt:
</p>

<ol>
	<li>
		Es soll eine Konsolenanwendung ohne Fremdbibliothken sein, um mein Wissen um C++ und die STL (Standard Template Library) zu vertiefen und vorzuzeigen.
	</li>
	<li>
		Es muss komplex genug sein, damit ich heraussteche, aber so simpel, dass es in einem angemessenen Zeitrahmen fertigzustellen ist.
	</li>
</ol>

<p>
	Ich habe mich für eins meiner Lieblingskartenspiele entschieden, Phase 10. Für Spiele habe ich mich eh immer begeistert und ich dachte mir, dass es sicher eine Herausforderung darstellt, die Algorithmen für die Phasenüberprüfung zu entwerfen. Ungefähr drei Monate später habe ich dieses Projekt erfolgreich abschließen können. Der Code war natürlich alles andere als professionell, und wenn ich da jetzt mit meiner bald einjährigen Erfahrung draufschaue, belächle ich das ein wenig. Aber das ist okay, zu dem Zeitpunkt war es viel wichtiger etwas Fertiges, Präsentierfähiges zu haben. Zu zeigen, dass ich ein Projekt anfangen und fertigstellen kann, und dass es funktioniert.
</p>

<p>
	 
</p>

<blockquote>
	<blockquote class="ipsQuote" data-ipsquote="">
		<div class="ipsQuote_citation">
			Zitat
		</div>

		<div class="ipsQuote_contents">
			<p>
				<em>"offen und ehrlich"</em>
			</p>
		</div>
	</blockquote>

	<p>
		 
	</p>
</blockquote>

<p>
	Mit dem Selbstbewusstsein, das ich durch das Projekt gewonnen habe, habe ich direkt angefangen deutschlandweit Bewerbungen zu schreiben, ich wollte unbedingt anfangen professionell zu entwickeln. Die ganz große Frage war natürlich, reicht ein GitHub-Link zu meinem Projekt um den extrem lückenbehafteten Lebenslauf zu kaschieren? Ich dachte mir, ich habe sowieso nichts zu verlieren, also werde ich offen und ehrlich sein. Ich habe im Anschreiben direkt den "Elefanten im Raum" angesprochen, meine krankheitsbedingten Ausfälle.
</p>

<p>
	Nach fünf Bewerbungen auf Junior-C++-Entwicklerstellen hatte ich vier Bewerbungsgespräche und einen neuen Job. In jedem dieser Gespräche habe ich sämtliche Fragen zu meinen Lücken ehrlich beantwortet, was jedes Mal sehr positiv aufgenommen wurde.
</p>

<p>
	Inzwischen arbeite ich seit fast einem Jahr als C++-Entwickler in einem StartUp. Meine Arbeitskollegen sind ausschließlich Akademiker, was für mich als Mathe- und Informatiknoob eine noch viel größere Herausforderung war. Zu meinem Glück wurde im Bewerbungsgespräch mein Wille zu Lernen erkannt. Das möchte ich auch noch einmal betonen. Ich hatte sehr viel Glück. Klar, ich habe eine Weiterbildung absolviert und ein Projekt entwickelt, aber manchmal hilft es definitiv zur richtigen Zeit am richtigen Ort zu sein.
</p>

<p>
	Seit Mitte letzten Jahres bin ich also wieder in Vollzeit angestellt, war keinen Tag krank und gehe jeden Tag mit extrem viel Motivation zur Arbeit. Es macht einfach Spaß. Um mein Wissen noch weiter zu vertiefen werde ich außerdem ab kommendem Semester an der Fernuniversität Hagen Informatik studieren.
</p>

<p>
	Abschließend möchte ich auf die Zukunft in diesem Blog eingehen. In unregelmäßigen Abständen werde ich fachliche Artikel zur Softwareentwicklung mit C++ erstellen. Ich freue mich sehr darauf, mein neues Wissen weiterzugeben und den angehenden (C++)-Entwicklern im Forum weiterzuhelfen. Außerdem wird es möglicherweise Erfahrungsberichte aus dem Fernstudium geben, seid gespannt! <img alt=":)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_smile.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/smile@2x.png 2x" title=":)" width="20" loading="lazy">
</p>

<p>
	LG
</p>

<p>
	Lukas aka BLAAAAAAAAAAAAAAAAAARGH
</p>
]]></description><guid isPermaLink="false">45</guid><pubDate>Wed, 22 Jul 2020 06:00:01 +0000</pubDate></item><item><title>DIY NAS</title><link>https://www.fachinformatiker.de/blogs/entry/44-diy-nas/</link><description><![CDATA[<h1 style="font-size:320%;">
	<span style="font-size:28px;">Vorher</span>
</h1>

<p style="font-size:100%;text-align:left;">
	Der Plan mal wieder ein NAS zu bauen schwirrt schon seit längerem durch meinen Kopf. Alles auf dem PC zu lagern um das Dokument dann doch vom Laptop aus zu bearbeiten oder den Film dann über die PS4 zu sehen ergibt halt auch nur begrenzt Sinn. Also dann dochmal den alten Shuttle-Barebone aus der Schrott-Ecke auf Arbeit mit nach hause genommen, ne alte Grafikkarte und etwas RAM aus der Wühlkiste genommen und zusammengebaut. Positiv: Das Gerät schaltet ein und läuft offenbar auch. Negativ: Es produziert kein Bild, zumindest nicht an meinem Monitor. Was an allem Möglichen liegen könnte. Die Grafikkarte könnte selbst kaputt sein, der DVI auf DP Adapter funktioniert nicht in der benötigten Richtung. Einen anderen Monitor oder eine weitere Grafikkarte zum testen ist aber nicht vorhanden. Ende der Geschichte, bauen wir also kein NAS.
</p>

<h2 style="font-size:200%;">
	<span style="font-size:28px;">Planänderung</span>
</h2>

<p style="font-size:100%;text-align:left;">
	Doch. Sonst wäre das hier ja albern. Ne Grafikkarte kaufen um festzustellen das es was anderes ist, wäre auch quatsch. Aber vor einigen Wochen durch Zufall gesehen das jemand ein NAS aus nem RaspberryPi 4 gebaut hat. Die Idee an sich ist ja nix spektakulär Neues. Neu für mich war der 4xSATA-Hat. 
</p>

<p style="font-size:100%;text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="8859" href="https://www.fachinformatiker.de/uploads/monthly_2020_02/IMG_07_1024x1024.jpg.105df03eb2a7ae6f62c401e5f0fc044f.jpg" rel=""><img alt="IMG_07_1024x1024.thumb.jpg.f71a9e45796b8397af99900d99d01a49.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="8859" width="750" src="https://www.fachinformatiker.de/uploads/monthly_2020_02/IMG_07_1024x1024.thumb.jpg.f71a9e45796b8397af99900d99d01a49.jpg" loading="lazy" height="442.5"></a>
</p>

<p style="font-size:100%;text-align:left;">
	Es gibt sogar ein Bündel aus <a href="https://shop.allnetchina.cn/collections/sata-hat/products/quad-sata-hat-case-for-raspberry-pi-4" rel="external nofollow" style="color:#cc0000;">SATA-Hat und einem Gehäuse</a>, in dem neben Raspi und Hat auch noch 4 2,5 Zoll SATA-Platten Platz finden. Da ich aber nur einige 3,5 Zoll HDDs übrig habe, war das Gehäuse keine Option. Im weiteren Verlauf der Suche bin ich dann auf den NanoPi M4 gestoßen, bzw. zuerst auf den SATA-Hat für diesen.
</p>

<p style="font-size:100%;text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="8861" href="https://www.fachinformatiker.de/uploads/monthly_2020_02/608253690_nanopihat.png.b9a608f5ac0e998a20a6adfab6e7ee57.png" rel=""><img alt="1566387603_nanopihat.thumb.png.8f3361fe0b219e97cf9f93117c5b01e6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="8861" width="750" src="https://www.fachinformatiker.de/uploads/monthly_2020_02/1566387603_nanopihat.thumb.png.8f3361fe0b219e97cf9f93117c5b01e6.png" loading="lazy" height="315"></a>
</p>

<p style="font-size:100%;text-align:left;">
	Der NanoPi wird von einem RK3399 angetrieben, daher kann das Board sogar PCIe. Während der Raspi-Hat 2 USB Kanäle nutzt, nutzt der NanoPi-Hat also PCIe. Außerdem ist der RK3399 doch schneller als der RaspberryPi 4. Dafür ist der <a href="https://www.friendlyarm.com/index.php?route=product/product&amp;path=69&amp;product_id=268" rel="external nofollow" style="color:#cc0000;">NanoPi M4v2</a> auch etwas teurer. Mit Kühlkörper, SATA-Hat und eMMC Karte kostet der Spaß etwa 120 € inkl. Versand. Da kommt dann wohl auch noch etwa 25 € Einfuhrumsatzsteuer drauf. Für nur 20 € mehr hätte man das auch gleich bei Antratek bestellen können. Aber den Shop hab ich erst später gefunden. Das gesamte Konstrukt könnte dann so aussehen.
</p>

<p style="font-size:100%;text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="jpg" data-fileid="8858" href="https://www.fachinformatiker.de/uploads/monthly_2020_02/4x-sata-hat-for-nanopi-m4-np-1812-919.jpg.ff6d8cee2a61543a4c9ae08ea0ad2432.jpg" rel=""><img alt="4x-sata-hat-for-nanopi-m4-np-1812-919.thumb.jpg.031be65b28fac8e057a4a8fef1a806f2.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="8858" width="750" src="https://www.fachinformatiker.de/uploads/monthly_2020_02/4x-sata-hat-for-nanopi-m4-np-1812-919.thumb.jpg.031be65b28fac8e057a4a8fef1a806f2.jpg" loading="lazy" height="285"></a>
</p>

<p style="font-size:100%;text-align:left;">
	Der SATA-Hat versorgt auch gleich den NanoPi mit Strom. Mit dem Molex-Anschluss auf dem Hat kann man auch die Festplatten mit Strom versorgen. Um 4 Festplatten zu betreiben sollte man den Hat aber mit ATX-Netzteil betreiben, dazu kann man den 4-poligen Anschluss auf dem Board nutzen.
</p>

<h2 style="font-size:200%;">
	<span style="font-size:28px;">Ein passendes Gehäuse</span>
</h2>

<p style="font-size:100%;text-align:left;">
	Nach einigen verworfenen Ideen - selbst defekte QNAPs gehen auf ebay für jenseits der 150 € Marke weg - werde ich das alte Barbone von Shuttle ein wenig umbauen. Dazu habe ich zunächst einen Festplattenkäfig für 5 3,5 Zoll Platten bestellt. Da ich das Original-Netzteil aus dem Barbone weiter nutzen werde, kann ich nur 4 Platten einbauen, aber mehr wollte ich sowieso nicht. Außerdem möchte ich versuchen den CPU-Kühler des Gehäuses zu nutzen. Damit ist allerdings die oben gezeigte Konfiguration unmöglich, da die CPU des NanoPi auf der Unterseite verbaut ist. Ich muss also den NanoPi umdrehen und den SATA-Hat dann also irgendwie neben dem NanoPi einbauen. Dafür benötigt man aber nur ein paar Kabel und anderen Kleinkram. 
</p>

<p style="font-size:100%;text-align:center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="8860" href="https://www.fachinformatiker.de/uploads/monthly_2020_02/kleinkram.png.29ba783044647273596dcf6117259497.png" rel=""><img alt="kleinkram.thumb.png.a5674d8a236ed0a2afe9fb1d98edb288.png" class="ipsImage ipsImage_thumbnailed" data-fileid="8860" width="750" src="https://www.fachinformatiker.de/uploads/monthly_2020_02/kleinkram.thumb.png.a5674d8a236ed0a2afe9fb1d98edb288.png" loading="lazy" height="457.5"></a>
</p>

<p style="font-size:100%;text-align:left;">
	Und zu guter Letzt möchte man das Gerät auch einschalten können. Da ich ein ATX-Netzteil benutze, könnte man einfach am Mainboard-Stecker - der ja nicht genutzt wird - Pin 16 und 18 Überbrücken. Da das Netzteil dann daerhaft läuft, ist das nicht die beste Lösung. Es gibt sogar schon fertige Schalter für diesen Einsatzzweck. Die schönste Variante die ich gefunden habe. 
</p>

<p style="font-size:100%;text-align:center;">
	<img alt="schalter.png.99ebcd984e16c98d013ac3330b22e3ad.png" class="ipsImage ipsImage_thumbnailed" data-fileid="8862" width="497" src="https://www.fachinformatiker.de/uploads/monthly_2020_02/schalter.png.99ebcd984e16c98d013ac3330b22e3ad.png" loading="lazy" height="427.42">
</p>

<h2 style="font-size:200%;">
	<span style="font-size:28px;">Wartezeit verkürzen</span>
</h2>

<p style="font-size:100%;text-align:left;">
	Da einige Teile eine Lieferzeit von 2-4 Wochen haben. Kann ich mich in der Zwischenzeit ein wenig um die Software und den Umbau des Barebone-Gehäuses kümmern. Zum Umbau wird es in einem nächsten Teil ein paar Bilder geben, aber viel zu sagen gibt es da nicht. Die Software könnte aber noch spannend werden. Es gibt zwar diverse fertige Images für den NanoPi, aber die mag ich nicht. Es gibt allerdings auch ein paar Images aus dem Arch Linux ARM-Projekt für den RK3399. Der erste Schritt wäre nun diese erstmal unter QEMU zu testen und Software nachzuinstallieren bzw runter zu werfen. Der NanoPi hat zwar auch einen SD-Slot von dem er booten kann, das Ziel ist aber die eMMC Karte für das Betriebssystem zu nutzen. Dazu bietet FriendlyArm zwar ein Tool an das ein Linux-Image von der SD-Karte auf die eMMC schreibt. Allerdings muss man dafür sein eigenes Linux in ein Image mit diesem Tool verpacken. Die Anleitung für interessierte gibt es hier: <a href="http://wiki.friendlyarm.com/wiki/index.php/EFlasher#Make_Your_Own_eFlasher" rel="external nofollow" style="color:#cc0000;">http://wiki.friendlyarm.com/wiki/index.php/EFlasher#Make_Your_Own_eFlasher</a>
</p>
]]></description><guid isPermaLink="false">44</guid><pubDate>Sat, 29 Feb 2020 23:24:35 +0000</pubDate></item><item><title>Arbeiten mit Arch - Updates und Distributed Pacman Cache</title><link>https://www.fachinformatiker.de/blogs/entry/43-arbeiten-mit-arch-updates-und-distributed-pacman-cache/</link><description><![CDATA[
<h5 style="background-color:#ffffff;border:0px;color:#222222;font-size:1.4em;padding:0px;vertical-align:baseline;">
	Was und Warum?
</h5>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	In den letzten Monaten wurden die meisten unserer Linuxserver auf Arch-Linux umgestellt. Ein paar Ausnahmen wird es weiterhin geben. vCenter läuft beispielsweise auf der VMWare eigenen Linux-Distribution, andere Software bringt in Form einer virtuellen Appliance auch eigene Linux-Distributionen oder verlangt nach einer spezifischen Distribution mit speziellen Paketen.
</p>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Jedenfalls sind 11 Server auf Arch-Linux Basis im Einsatz. Eine Update-Runde dauert bei unserer Internetanbindung dann eine Weile. Das Ziel war nun die Angelegenheit zu Beschleunigen. Dafür gibt es prinzipiell mehrere Möglichkeiten.
</p>

<ol style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px 32px;vertical-align:baseline;">
	<li style="border:0px;padding:0px;vertical-align:baseline;">
		Einen eigenen Arch Mirror aufbauen
	</li>
	<li style="border:0px;padding:0px;vertical-align:baseline;">
		ein zentraler Cache für Pakete
	</li>
	<li style="border:0px;padding:0px;vertical-align:baseline;">
		ein verteilter Cache für Pakete
	</li>
</ol>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Beim eigenen Mirror hat man dann einen Server auf dem alle Arch-Pakete liegen. Für den zentralen Cache lädt ein Server zunächst das Paket um es dann zunächst über das Netzwerk im Cache abzulegen und von dort aus zu installieren. Dafür werden Pakete die alle Server benötigen im verteilten Cache auf jedem Server abgelegt.
</p>

<h4 style="background-color:#ffffff;border:0px;color:#222222;font-size:1.666em;padding:0px;vertical-align:baseline;">
	Pacman Cache
</h4>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Für den zentralen Cache müssten alle Server über NFS o.ä. auf den Server mit dem Cache zugreifen. Vom Aufwand abgesehen, bastelt man sich so natürlich einen Single-Point-of-Failure. Für den verteilten Cache benötigt man nur einen simplen Webserver und ein paar Zeilen Shell-Befehle.
</p>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Für diesen Zweck genügt darkhttpd vollkommen. Hat man den installiert "konfiguriert" man ihn einfach indem die Systemd Unit angepasst wird. Dann benötigt man noch ein paar Links im Paket-Cache und ist im Grunde fertig.
</p>

<pre class="ipsCode prettyprint prettyprinted">
<span class="pln">pacman </span><span class="pun">-</span><span class="pln">S darkhttpd
systemctl enable darkhttpd
nano </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">systemd</span><span class="pun">/</span><span class="pln">system</span><span class="pun">/</span><span class="pln">multi</span><span class="pun">-</span><span class="pln">user</span><span class="pun">.</span><span class="pln">target</span><span class="pun">.</span><span class="pln">wants</span><span class="pun">/</span><span class="pln">darkhttpd</span><span class="pun">.</span><span class="pln">service
systemctl daemon</span><span class="pun">-</span><span class="pln">reload
ln </span><span class="pun">-</span><span class="pln">s </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">pacman</span><span class="pun">/</span><span class="pln">sync</span><span class="pun">/*.</span><span class="pln">db </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">cache</span><span class="pun">/</span><span class="pln">pacman</span><span class="pun">/</span><span class="pln">pkg
systemctl restart darkhttpd</span></pre>

<p>
	<span style="background-color:#ffffff;color:#444444;font-size:14px;">Die Unit sieht dann in etwa so aus.</span>
</p>

<pre class="ipsCode prettyprint prettyprinted">
<span class="pun">[</span><span class="typ">Unit</span><span class="pun">]</span><span class="pln">
</span><span class="typ">Description</span><span class="pun">=</span><span class="typ">Darkhttpd</span><span class="pln"> </span><span class="typ">Webserver</span><span class="pln">
</span><span class="typ">After</span><span class="pun">=</span><span class="pln">network</span><span class="pun">.</span><span class="pln">target

</span><span class="pun">[</span><span class="typ">Service</span><span class="pun">]</span><span class="pln">
</span><span class="typ">Type</span><span class="pun">=</span><span class="pln">simple
</span><span class="typ">ExecStart</span><span class="pun">=/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">darkhttpd </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">cache</span><span class="pun">/</span><span class="pln">pacman</span><span class="pun">/</span><span class="pln">pkg </span><span class="pun">--</span><span class="pln">port </span><span class="lit">9090</span><span class="pln"> </span><span class="pun">--</span><span class="pln">uid http </span><span class="pun">--</span><span class="pln">gid http </span><span class="pun">--</span><span class="pln">mimetypes </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">mimetypes
</span><span class="typ">ProtectSystem</span><span class="pun">=</span><span class="pln">full
</span><span class="typ">ProtectHome</span><span class="pun">=</span><span class="pln">on
</span><span class="typ">PrivateDevices</span><span class="pun">=</span><span class="pln">on
</span><span class="typ">NoNewPrivileges</span><span class="pun">=</span><span class="pln">on

</span><span class="pun">[</span><span class="typ">Install</span><span class="pun">]</span><span class="pln">
</span><span class="typ">WantedBy</span><span class="pun">=</span><span class="pln">multi</span><span class="pun">-</span><span class="pln">user</span><span class="pun">.</span><span class="pln">target</span></pre>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Der Pacman-Cache in /var/cache/pacman/pkg wird hier zum WWW-Root. Als Port wurde 9090 gewählt, da auf keinem der Server etwas auf dem Port läuft. Welchen Port man letztlich wählt ist egal. Die Standardoptionen "chroot" und "no-listing" werden entfernt. Mit chroot funktionieren Symlinks nicht und Verzeichnislisting ist fürs Debuggen ganz sinnvoll.
</p>

<h4 style="background-color:#ffffff;border:0px;color:#222222;font-size:1.666em;padding:0px;vertical-align:baseline;">
	Updates
</h4>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Damit die Server nun ihre Pakete von dem vorbereiteten Server erhalten, muss der auf jedem weiteren Server in die Mirrorliste eingetragen werden. Da die Mirrorliste zeilenweise verarbeitet wird, müssen die neuen Einträge an den Anfang der Datei.
</p>

<pre class="ipsCode prettyprint prettyprinted">
<span class="typ">Server</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> http</span><span class="pun">://</span><span class="pln">enton</span><span class="pun">.&lt;</span><span class="pln">dom</span><span class="pun">ä</span><span class="pln">ne</span><span class="pun">&gt;.</span><span class="pln">intern</span><span class="pun">:</span><span class="lit">9090</span></pre>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Der Port :9090 ist natürlich durch den vorher gewählten Port vorgegeben.
</p>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Danach funktionieren Updates wie gewohnt mit<span> </span><code style="background-color:#f8f8f8;border:1px solid #dddddd;font-size:.8em;padding:1px 3px;vertical-align:baseline;">pacman -Syu</code>. 
</p>

<h4 style="background-color:#ffffff;border:0px;color:#222222;font-size:1.666em;padding:0px;vertical-align:baseline;">
	Mehr
</h4>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Da die Server verschiedene Aufgaben haben, sind auch unterschiedliche Pakete installiert, einige haben docker, andere php oder mariadb oder eine bunte Mischung. Nachdem der Cache eines Servers nun für alle verfügbar ist, bekommen wir aber zumindest Standardpakete (Kernel, ..) für alle weiteren Server nun aber aus dem lokalen Netz. Der Vorgang lässt sich nun für weitere Server wiederholen. Die Mirrorliste wird einfach nur länger.
</p>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Wenn alle Server ihren Cache freigeben und in jeder Mirrorliste alle Server eingetragen sind, ist dann auch egal, welcher Server mit Updates beginnt. Die nächsten Server sollten mit ihren Updates allerdings auf vorherige Server warten, da sonst die Pakete noch nicht auf den lokalen Servern verfügbar sind und wieder aus dem Netz geladen werden.
</p>

<p style="background-color:#ffffff;border:0px;color:#444444;font-size:14px;padding:0px;vertical-align:baseline;">
	Als Fallback für neue Pakete oder Pakete die kein anderer Server hat, sollten in der Mirrorliste nicht nur die eigenen Server eingetragen sein. Ein praktisches Tool um die Liste aktuell zu halten ist reflector. Ich habe auf einem der Webserver eine Liste aller lokalen Paketcaches. Aus der Liste und reflector kann man sich vor den Updates dann eine frische Mirrorliste basteln.
</p>

<pre class="ipsCode prettyprint prettyprinted">
<span class="pln">curl </span><span class="pun">--</span><span class="pln">silent http</span><span class="pun">://</span><span class="pln">kangama</span><span class="pun">.&lt;</span><span class="pln">dom</span><span class="pun">ä</span><span class="pln">ne</span><span class="pun">&gt;.</span><span class="pln">local</span><span class="pun">:</span><span class="lit">9090</span><span class="pun">/</span><span class="pln">liste </span><span class="pun">|</span><span class="pln">grep </span><span class="pun">-</span><span class="pln">v </span><span class="pun">`</span><span class="pln">hostname</span><span class="pun">`</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> reflector </span><span class="pun">-</span><span class="pln">f </span><span class="lit">5</span><span class="pln"> </span><span class="pun">-</span><span class="pln">l </span><span class="lit">5</span><span class="pln"> </span><span class="pun">-</span><span class="pln">c de </span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">pacman</span><span class="pun">.</span><span class="pln">d</span><span class="pun">/</span><span class="pln">mirrorlist</span></pre>

<p>
	 
</p>
]]></description><guid isPermaLink="false">43</guid><pubDate>Fri, 06 Dec 2019 14:59:27 +0000</pubDate></item><item><title>Abenteuer mit Linux - Teil II</title><link>https://www.fachinformatiker.de/blogs/entry/42-abenteuer-mit-linux-teil-ii/</link><description><![CDATA[
<p style="color:#333333;font-size:16px;">
	Im<span> </span><a href="https://www.fachinformatiker.de/blogs/entry/41-abenteuer-mit-linux/" style="background-color:transparent;color:#4078c0;" rel="">letzten Teil</a><span> </span>haben wir die Grundinstallation geschafft und konnten das WLAN-Modul zur Mitarbeit überreden. Diesmal soll das System ... nunja "arbeitsfähig" werden.
</p>

<h4 style="color:#333333;font-size:1.25em;">
	Kleinkram
</h4>

<p style="color:#333333;font-size:16px;">
	Zunächst werden ein paar nützliche Helfer installiert.
</p>

<ul style="color:#333333;font-size:16px;padding:0px 0px 0px 2em;">
	<li>
		dhcpd - ist einfacher als immer nach der korrekten Konfiguration zu fragen
	</li>
	<li>
		zsh - coole Shell ist cool, dazu ein anders Mal mehr
	</li>
	<li>
		ntpd - um an der Uhr drehen zu lassen
	</li>
	<li>
		acpid - Laptop zuklappen -&gt; Laptop schläft ein. Prima (ab und an gibt es Probleme beim aufwachen)
	</li>
	<li>
		htop - welcher Prozess braucht hier eigentlich soviel CPU/RAM?
	</li>
</ul>

<p style="color:#333333;font-size:16px;">
	Da man ja nicht als<span> </span><em>root</em><span> </span>arbeiten soll - an einigen Stellen wird das auch aktiv verhindert - wird noch ein neuer Benutzer angelegt. Der kommt in die Gruppen audio, video und wheel. Damit er hören und sehen kann. Der wheel Gruppe wird noch sudo erlaubt. Das ist am Laptop zwar egal da es eh nur den einen Nutzer geben wird und man es auch nur dem spezifischen Benutzer erlauben könnte, aber naja .. alte Gewohnheiten.
</p>

<h4 style="color:#333333;font-size:1.25em;">
	Ein Wellensittich
</h4>

<p style="color:#333333;font-size:16px;">
	Hab ich das Arch-Wiki schon gelobt? Nicht nur das man zu allem eine Anleitung zur Installation und Konfiguration bekommt, es gibt sogar sinnvolle Übersichten zu verfügbaren Packeten nach Themengebieten. Wenn man also nicht weiß welche Desktopumgebung mit welchem Windowmanager man möchte kann man sich<span> </span><a href="https://wiki.archlinux.org/index.php/Desktop_environment#Officially_supported" style="background-color:transparent;color:#4078c0;" rel="external nofollow">hier</a><span> </span>einen aussuchen.<br />
	Nun mag es etwas faul oder einfallslos wirken, aber der erste Eintrag in der Liste gefällt mir. Budgie .. es gibt eigentlich nicht viel zu sagen, man findet Dinge da wo man sie erwartet, oder im ersten Moment halt nicht, weil<span> </span><em>gnome-control-center</em><span> </span>und<span> </span><em>budgie-extras</em><span> </span>noch nicht installiert sind. Das Ding wirkt jedenfalls schön aufgeräumt. Doch damit man das selbst beurteilen kann müssen ein paar kleinere Pakete wie<span> </span><em>xorg</em>,<span> </span><em>mesa</em>, Grafiktreiber, ein Display Manager und Audiokram wie alsa und pulseaudio installiert werden.<br />
	Das funktioniert alles überaschend problemlos.
</p>

<h4 style="color:#333333;font-size:1.25em;">
	Die üblichen Verdächtigen
</h4>

<p style="color:#333333;font-size:16px;">
	Mittlerweile ist es spät und so ein leerer Desktop ist nun auch recht langweilig. Also schnell noch Chromium, VLC und Nautilus installiert. Youtube läuft, Musik und Videos vom Windows-PC im Netzwerk kann man auch ansehen. Prima. Netflix .. ne geht nicht ...<br />
	War ja auch zu einfach. Netflix braucht eine Erweiterung für Chromium -<span> </span><em>chromium-widevine</em>. Dies gibt es allerdings nur im AUR. 
</p>

<h4 style="color:#333333;font-size:1.25em;">
	YAY - AUR
</h4>

<p style="color:#333333;font-size:16px;">
	Im Arch User Repository findet man letztlich alles das es nicht ins offizielle Repo geschafft hat. Das ganze funktioniert so ähnlich wie die FreeBSD Ports. Nur das die Pakete hier in einem GIT liegen. Zur Installation wird das entsprechende Paket vom Server geklont und mit<span> </span><em>makepkg</em><span> </span>"installiert". Auch für diese Aufgabe gibt es Helferlein. YAY zum Beispiel. Da auch das ein AUR-Paket ist, muss es natürlich zunächst auf dem beschriebenem Weg installiert werden. Danach kann man weitere Pakete aus dem AUR einfach mit
</p>

<pre class="ipsCode">
yay paketname</pre>

<p style="color:#333333;font-size:16px;">
	installieren. Makepkg ist dann übrigens so ein Programm das nicht als<span> </span><em>root</em><span> </span>ausgeführt werden möchte. Ich erwähne das, weil ich es regelmäßig vergesse und yay immer erstmal als<span> </span><em>root</em><span> </span>klone.
</p>

<h4 style="color:#333333;font-size:1.25em;">
	Ein Terminal für den Desktop
</h4>

<p style="color:#333333;font-size:16px;">
	Derweil nervt es ungemein den Desktop jedesmal für ein paar Shell-Befehle zu verlassen. Dafür gab es doch auch ein paar Lösungen ..<br />
	Früher hab ich dafür eTerm benutzt - E16 fand ich ziemlich gut, die neue Version müsste ich irgendwann mal anschauen.<br />
	Aber gut, ohne enlightenment kein eTerm, was gabs noch? xterm! .. Ja nun .. ähm
</p>

<pre class="ipsCode">
pacman -R xterm</pre>

<p style="color:#333333;font-size:16px;">
	(u)rxvt ereilte das gleiche Schicksal. Warum? Die Schrift ist auf dem Display einfach irrsinnig winzig.<br />
	Gewonnen hat vorerst alacritty.
</p>

<h4 style="color:#333333;font-size:1.25em;">
	Temperaturprobleme
</h4>

<p style="color:#333333;font-size:16px;">
	Nach einer Weile youtube schauen wundert man sich eventuell warum der Laptop ein Loch in den Tisch brennt. Er wird unfassbar heiß. Nach der Installation von<span> </span><em>sensors</em><span> </span>und<span> </span><em>xsensors</em><span> </span>hat man zumindest die Gewissheit, sich das Problem nicht einzubilden.<span> </span><em>htop</em><span> </span>ergänzt das Bild mit 60-90% CPU-Auslastung und einem load um 5 herum. Tendenz steigend.<br />
	Das war in dem Moment aber vermutlich eine Auswirkung des Powermanagments. Nach etwas Recherche und<span> </span><em>powertop</em><span> </span>ist einigermaßen klar was hier das Problem ist. Linux reduziert den CPU-Takt deutlich später als Windows, muss es aber irgendwann auf jeden Fall tun. Ab dem Moment steigt der load, da die CPU ja nun langsam ist. Durch hohen load wird die CPU wieder beschleunigt sowie es etwas Reserven gibt. Das Gerät pegelt sich dann langsam um die 80°C ein. Der Fairness halber muss hier aber erwähnt werden, das es unter Windows dann gern mal Probleme gab Videos flüssig darzustellen.
</p>

<h4 style="color:#333333;font-size:1.25em;">
	Bluetooth für Anfänger
</h4>

<p style="color:#333333;font-size:16px;">
	Eigentlich wollte ich nur meine Kopfhörer mit dem Laptop koppeln. Das Bluetooth-Icon wird ja angezeigt und scheint auch eingeschaltet zu sein. Kopfhörer werden mal gefunden und können nicht koppeln, bleiben gleich unauffindbar oder können zwar koppeln aber dann nicht verbinden. Im Arch-Wiki findet man dann den Hinweis<span> </span><em>pulseaudio-bluetooth</em><span> </span>zu installieren falls das noch nicht passiert ist. Ne, das war es nicht ..<br />
	Nach einer Ewigkeit gefummel mit<span> </span><em>bluetoothctl</em><span> </span>auch keine neuen Erkenntnisse außer Fehlermeldungen der obskureren Art.
</p>

<pre class="ipsCode">
error updating services: Host is down (112)</pre>

<p style="color:#333333;font-size:16px;">
	Die führen dann aber tatsächlich ins Arch-Forum und zu dem Hinweis doch mal<span> </span>
</p>

<pre class="ipsCode">
dmesg |grep bluetooth</pre>

<p style="color:#333333;font-size:16px;">
	nach sinnvollen Fehlermeldungen abzusuchen. Und tatsächlich konnte die Firmware nicht geladen werden.<br />
	Wie ich dann aus<span> </span><a href="https://bbs.archlinux.org/viewtopic.php?pid=1635028#p1635028" style="background-color:transparent;color:#4078c0;" rel="external nofollow">diesem Post</a><span> </span>lernte, gibt es von Lenovo zwar keine passende Firmware allerdings funktioniert die von Acer auch ganz prima.
</p>

<p style="color:#333333;font-size:16px;">
	 .. Firmware
</p>
]]></description><guid isPermaLink="false">42</guid><pubDate>Thu, 14 Nov 2019 23:45:05 +0000</pubDate></item><item><title>Abenteuer mit Linux</title><link>https://www.fachinformatiker.de/blogs/entry/41-abenteuer-mit-linux/</link><description><![CDATA[
<h1>
	<span style="font-size:16px;">Hinweise</span>
</h1>

<p>
	Dies wird keine Anleitung für Linuxanfänger. Es wird keine Patentrezepte zum Lösen von Problemen geben. In so gut wie jedem beschriebenem Fall wird es alternative Lösungen geben. An einigen Stellen wird etwas Vorwissen vorausgesetzt.
</p>

<h4>
	<span style="font-size:16px;">Motivation</span>
</h4>

<p>
	Als begeisterter Windowsnutzer seit ca 15 Jahren mit etwas Langeweile, habe ich beschlossen mal etwas verrücktes zu versuchen. Die winzige 256 GB SSD meines Yoga 3 Pro war mal wieder übervoll, also wurde endlich mal eine neue gekauft auf die das Windows umziehen sollte. Was lag also näher als der kleinen SSD auf ihre alten Tage noch etwas Spaß zu gönnen. Nebenbei könnte ich auf die Art die Linuxkentnisse etwas vertiefen und sehen wie viel Spaß Linux auf dem Desktop beziehungsweise Laptop macht. Zum Einen ist dies nicht der erste Ausflug in die Linuxwelt. Erste Versuche wurden zu Zeiten von Debian 2/3 unternommen. Anfangs noch mit SuSE und Red Hat um dann recht schnell bei Debian zu landen und einige Jahre dabei zu bleiben. Zum Anderen habe ich auch beruflich ein paar Linuxserver, mit unterschiedlichen Distributionen, zu verwalten.
</p>

<h4>
	<span style="font-size:16px;">Fragen vor dem Anfang</span>
</h4>

<p>
	Die wichtigste oder unwichtigste Frage am Anfang ist welche Distribution es werden soll. Schaut man bei Distrowatch vorbei versinkt man schnell in einer Unmenge an Varianten. Unter <a href="https://distrowatch.com/dwres.php?resource=major" rel="external nofollow">Hauptdistributionen</a> findet man eine Liste der populärsten Distributionen mit einer groben Unterteilung nach Komplexität. Da schon etwas Erfahrung mit Linux vorhanden ist und ich auch nichts komplett vorgekautes benutzen wollte, hab ich mich für Arch Linux entschieden. Einige Server auf Arbeit laufen auch schon damit. Es ist also kein vollkommenes Neuland.
</p>

<h4>
	<span style="font-size:16px;">Die Installation</span>
</h4>

<p>
	Zur Installation gibt es nicht viel zu sagen. Es gibt im Arch-Wiki eine ausführliche Anleitung, der man problemlos folgen kann sofern man lesen und tippen kann. Ein kleiner Stolperstein liegt in der Partitionierung. Früher hab ich beispielsweise /usr auf eine eigene Partition ausgelagert. Unter Arch funktioniert das nicht, da /bin und /sbin nur Symlinks auf /usr/bin und /lib sowie /lib64 Links auf /usr/lib sind. Danach fangen dann die Probleme an.
</p>

<h4>
	<span style="font-size:16px;">Das erste mal booten</span>
</h4>

<p>
	Was zuerst auffällt ist die winzige Schrift in der Konsole, immerhin hat das Yoga 3 Pro ein QHD+ Display bei gerade mal 13 Zoll Diagonale. Zum Glück hatten schon viele ähnliche Probleme und es gibt auch dazu einen Artikel im <a href="https://wiki.archlinux.org/index.php/HiDPI" rel="external nofollow">Arch Wiki</a>.
</p>

<p>
	Danach möchte man eventuell noch etwas mehr Software installieren. Das wird aber erstmal nichts. Aus Gründen wird der "falsche" Treiber für das WLan-Modul geladen. Der falsche Treiber landet also auf der Blacklist. Ohne WLan wird es allerdings schwierig den richtigen Treiber zu bekommen. Eine Lösung dafür ist einfach nochmal das Installationsmedium zu booten und in das installierte System zu "chrooten". Im Installationssystem ist auch der richtige Treiber verfügbar und kann in das Zielsystem installiert werden. Ist das alles geschafft, darf man dann noch etwas lernen. Es gibt noch "rfkill", mit dem man Bluetooth und WLan ein- beziehungsweise ausschalten kann/darf/muss. Nun kann man das WLan mit "wifi-menu" oder "wpa_supplicant" konfigurieren und weitere Software installieren.
</p>
]]></description><guid isPermaLink="false">41</guid><pubDate>Wed, 06 Nov 2019 00:21:47 +0000</pubDate></item><item><title>Zahlensysteme (Dec, Bin, Hex u. Oct)</title><link>https://www.fachinformatiker.de/blogs/entry/40-zahlensysteme-dec-bin-hex-u-oct/</link><description><![CDATA[
<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margin-top:0px;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Hello world, 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	da es unser erstes Thema in der Umschulung war, befassen wir uns heute, mit den Zahlensystemen, die in der IT Welt ihr Zuhause haben. 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Als kleine Themenzusammenstellung gehen wir heute auf das
</p>

<ul style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		<strong>Duale Zahlensystem (Binär) </strong>
	</li>
	<li>
		<strong>Hexa Dezimalsystem</strong>
	</li>
	<li>
		<strong>Oktadezimal System</strong>
	</li>
</ul>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Sowie auf die <strong>Umrechnung</strong> von
</p>

<ul style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		Dezimal zu Binär und zurück 
	</li>
	<li>
		Dezimal zu Hex und zurück 
	</li>
	<li>
		Dezimal zu Okta und zurück 
	</li>
	<li>
		So wie Hex zu Okta und Binär und das auch wieder zurück ein
	</li>
</ul>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Du wirst danach, mit jedem Zahlensystem, mit einer Leichtigkeit rum hantieren können. Ich verrate dir, wie man mit <strong>einfachen Tricks</strong>, von einem zum anderen System umrechnen und welche Zahlen du dir in der IT Welt merken solltest, weil du ständig damit konfrontiert wirst.
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<strong>Das Dezimal System</strong> ist das was uns von klein auf beigebracht wurde, von Null bis 9, da man die Zahlen beliebig aneinander stellen kann, sind der unendlichen Zahl keine Grenzen gesetzt. Es ist das 10er Zahlen System. Für den Menschen ist dieses System naheliegend (10 Finger, 10 Zehen). 
</p>

<ol style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		Es gibt 10 Ziffern von 0 bis 9
	</li>
	<li>
		Der größte Wert der dargestellt wird ist die 9
	</li>
	<li>
		Stellenwerte
	</li>
</ol>

<ul style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margin-left:40px;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		Der Wert der 1. Stelle beträgt 10<sup>0</sup> = 1, es ist die "Einer" - Stelle
	</li>
	<li>
		Der Wert der 2. Stelle beträgt 10<sup>1</sup> = 10, es ist die "Zehner" - Stelle
	</li>
	<li>
		Der Wert der 3. Stelle beträgt 10<sup>2</sup> = 100, es ist die "Hunderter" - Stelle
	</li>
	<li>
		Der Wert der 4. Stelle beträgt 10<sup>3</sup> = 1000, es ist die "Tausender" - Stelle
	</li>
	<li>
		usw. 
	</li>
</ul>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Dadurch ergibt sich die Interpretation der Zahl 123 in einem Beispiel so. 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	123 = 3*10<sup>0</sup> + 2*10<sup>1</sup> + 1*10<sup>2</sup>
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Macht unterm Strich 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	123 = 3 + 20 + 100
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Kommen wir zum ersten uns fremden System, <strong>dem Dualen Zahlensystem</strong>. Dual weil es nur zwei Möglichkeiten der Darstellung gibt. Es ist das Zweier System. Die 1 und die 0. Deshalb wird es in der IT und Mathematik Binär (bi = zwei) genannt. Das Binäre System ist das wohl wichtigste Zahlen System in der Welt der Computer, da es die einzige Sprache ist die dein Prozessor versteht. Das ist die so genannte Maschinensprache.
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Aber genug drum rum geredet, kommen wir zum ersten umrechnen. 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Für Zahlen des Binär Systems gilt 
</p>

<ol style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		Es gibt 2 Ziffern, die 0 und die 1
	</li>
	<li>
		Der größte Wert den man darstellen kann ist die 1
	</li>
	<li>
		Stellenwerte
	</li>
</ol>

<ul style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margin-left:40px;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		Der Wert der 1. Stelle beträgt 2<sup>0</sup> = 1
	</li>
	<li>
		Der Wert der 2. Stelle beträgt 2<sup>1</sup> = 2
	</li>
	<li>
		Der Wert der 3. Stelle beträgt 2<sup>2</sup> = 4
	</li>
	<li>
		Der Wert der 4. Stelle beträgt 2<sup>3</sup> = 8
	</li>
	<li>
		usw.
	</li>
</ul>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Üblich für die Kennzeichnung einer Zahl eines Systems, hinter der Zahl, eine kleine Zahl oder einen Buchstaben dran zu hängen 
</p>

<ul style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		2 oder b für das Binär System, zum Beispiel 101<sub>2</sub> oder 100<sub>b</sub>
	</li>
	<li>
		8 oder o für das Oktal System, zum Beispiel 45<sub>8</sub> oder 45<sub>o</sub>
	</li>
	<li>
		16 oder h für das Hexadezimal System, zum Beispiel 26<sub>16</sub> oder 26<sub>h</sub>
	</li>
	<li>
		10 oder d für das Dezimal System, zum Beispiel 99<sub>10</sub> oder 99<sub>d</sub>
	</li>
</ul>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Interpretations Beispiel einer Binär Zahl 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	1101<sub>2</sub> = 1*1 + 0*2 + 1*4 + 1*8
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Macht unterm Strich 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	1101<sub>2</sub> = 1 + 4 + 8
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Das ergibt dann 13 in Dezimal oder 13<sub>10</sub>
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Das 16er System ist <strong>das Hexadezimal System</strong>. Da uns bis jetzt nur Ziffern zur Verfügung standen werden wir das nach dem Binären System das meist häufigste Zahlen System der IT Welt besprechen. Dazu kommen zu den normalen 10 Ziffern 0 bis 9 noch die Buchstaben a bis f hinzu. Früher wurden die Buchstaben groß geschrieben, was aber jetzt falsch ist. Deshalb zeige ich dir sofort die richtige Schreibweise also mit kleinen Buchstaben. 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Für das Hexadezimal System gilt folgendes
</p>

<ol style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		Es gibt 16 Ziffern, 0 bis 9 und a bis f (a=10, b=11, c=12, d=13, e=14, f=15)
	</li>
	<li>
		Der größte Wert den man darstellen kann ist der Wert 15
	</li>
	<li>
		Stellenwerte
	</li>
</ol>

<ul style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margin-left:40px;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	<li>
		Der Wert der 1. Stelle beträgt 16<sup>0</sup> = 1
	</li>
	<li>
		Der Wert der 2. Stelle beträgt 16<sup>1</sup> = 16
	</li>
	<li>
		Der Wert der 3. Stelle beträgt 16<sup>2</sup> = 256
	</li>
	<li>
		Der Wert der 4. Stelle beträgt 16<sup>3</sup> = 4096
	</li>
	<li>
		usw.
	</li>
</ul>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Als kleines Beispiel rechnen wir
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	c2<sub>h</sub> = 2*1 + 2*16
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Macht unterm Strich 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	2 + 192
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Das ergibt einen Dezimal Wert von 194
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Jetzt fragt sich bestimmt so ziemlich jeder, <em>"wozu erfindet man sowas blödsinniges wie das Hexadezimal System?"</em>. Die Antwort ist ganz einfach. Der Einfachheit halber um die Zahlen kürzer darstellen zu können. Als Beispiel, was ist in der Darstellung kürzer? 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	43727 Dezimal,
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	1010 1010 1100 1111 Binär oder
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	aa cf Hexadezimal? 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Natürlich das Hexa. Und da es größere Zahlen gibt wie 43727 denken wir mal an 10<sup>12</sup> als Beispiel (ergibt 1 000 000 000 000) und da jede Stelle an Ziffern quasi Ressourcen bedeutet. Man aber  Ressourcen und Zeit niemals genug hat, wurde ein System entwickelt, welches noch einfach zu rechnen und trotzdem kompakter darzustellen ist. 
</p>

<p style="background-color:transparent;color:rgb(53,60,65);font-size:14px;font-style:normal;font-variant:normal;font-weight:400;letter-spacing:normal;margin-bottom:0px;text-align:left;text-decoration:none;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;">
	Wer sich jetzt fragt warum dann das Binär? Nun es muss halt auch ein System geben welches von Maschinen gesprochen werden kann. Da man durch Strom einer Maschine sagen kann Strom an ist 1 und Strom aus ist 0, ist das die einfachste Lösung um mit wenig Aufwand komplexe Zahlen Rechnungen und Aufgaben einer Maschine bei zu bringen. 
</p>

<p>
	 
</p>

<p>
	Nun das letzte Zahlensystem, <b>das Oktale Zahlensystem</b>. Es ist das 8er Zahlensystem (Oktopus 8 Arme). Die Zahlen 0 bis 7 werden hierbei nur benutzt. Es ist in der IT Welt nicht so oft vertreten, kommt aber hin und wieder mal vor das man es kennen sollte.
</p>

<p>
	Für das Oktalsystem gilt folgendes
</p>

<ol>
	<li>
		Es gibt 8 Ziffern, 0 bis 7
	</li>
	<li>
		Der größte Wert den man darstellen kann ist der Wert 7
	</li>
	<li>
		Stellenwerte
	</li>
</ol>

<ul style="margin-left:40px;">
	<li>
		Der Wert der 1. Stelle beträgt 8<sup>0</sup> = 1
	</li>
	<li>
		Der Wert der 2. Stelle beträgt 8<sup>1</sup> = 8
	</li>
	<li>
		Der Wert der 3. Stelle beträgt 8<sup>2</sup> = 64
	</li>
	<li>
		Der Wert der 4. Stelle beträgt 8<sup>3</sup> = 512
	</li>
	<li>
		usw.
	</li>
</ul>

<p>
	Als Beispiel berechnen wir
</p>

<p>
	23<sub>o </sub>= 3*1 + 2*8
</p>

<p>
	macht unterm Strich
</p>

<p>
	23 = 3 + 16
</p>

<p>
	Ergibt 23<sub>o</sub> = 19<sub>d<sub> </sub></sub> 
</p>

<p>
	Jetzt haben wir ein Beispiel, an dem der Oktal Wert größer erscheint als der Dezimal Wert, aber das ist auch normal. Das Dezimal System rechnet mit 10 Ziffern, das Oktale nur mit 8. Da man nur im Dezimalsystem "dreiundzwanzig" ausspricht und im Oktalen "zwei drei" ist es extrem wichtig, die anderen Zahlensysteme <strong>niemals</strong> dezimal aussprechen. Sondern immer Ziffer für Ziffer benennen.
</p>

<p>
	 
</p>

<p>
	So nun können wir beginnen, die verschiedenen Zahlensysteme umzurechnen. Wir fangen mit vier Tabellen an, damit wir leichter umrechnen können, solltest du dir diese Werte unbedingt merken, das erleichtert ungemein die Umrechnung der Zahlensysteme.
</p>

<p>
	 
</p>

<table align="center" border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td style="text-align:center;">
				Dezimal
			</td>
			<td style="text-align:center;">
				10<sup>8</sup>
			</td>
			<td style="text-align:center;">
				10<sup>7</sup>
			</td>
			<td style="text-align:center;">
				10<sup>6</sup>
			</td>
			<td style="text-align:center;">
				10<sup>5</sup>
			</td>
			<td style="text-align:center;">
				10<sup>4</sup>
			</td>
			<td style="text-align:center;">
				10<sup>3</sup>
			</td>
			<td style="text-align:center;">
				10<sup>2</sup>
			</td>
			<td style="text-align:center;">
				10<sup>1</sup>
			</td>
			<td style="text-align:center;">
				10<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				Dezimal
			</td>
			<td style="text-align:center;">
				100.000.000
			</td>
			<td style="text-align:center;">
				10.000.000
			</td>
			<td style="text-align:center;">
				1.000.000
			</td>
			<td style="text-align:center;">
				100.000
			</td>
			<td style="text-align:center;">
				10.000
			</td>
			<td style="text-align:center;">
				1.000
			</td>
			<td style="text-align:center;">
				100
			</td>
			<td style="text-align:center;">
				10
			</td>
			<td style="text-align:center;">
				1
			</td>
		</tr>
	</tbody>
</table>

<p style="text-align:center;">
	 
</p>

<table align="center" border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td style="text-align:center;">
				Binär
			</td>
			<td style="text-align:center;">
				2<sup>8</sup>
			</td>
			<td style="text-align:center;">
				2<sup>7</sup>
			</td>
			<td style="text-align:center;">
				2<sup>6</sup>
			</td>
			<td style="text-align:center;">
				2<sup>5</sup>
			</td>
			<td style="text-align:center;">
				2<sup>4</sup>
			</td>
			<td style="text-align:center;">
				2<sup>3</sup>
			</td>
			<td style="text-align:center;">
				2<sup>2</sup>
			</td>
			<td style="text-align:center;">
				2<sup>1</sup>
			</td>
			<td style="text-align:center;">
				2<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				Binär
			</td>
			<td style="text-align:center;">
				256
			</td>
			<td style="text-align:center;">
				128
			</td>
			<td style="text-align:center;">
				64
			</td>
			<td style="text-align:center;">
				32
			</td>
			<td style="text-align:center;">
				16
			</td>
			<td style="text-align:center;">
				8
			</td>
			<td style="text-align:center;">
				4
			</td>
			<td style="text-align:center;">
				2
			</td>
			<td style="text-align:center;">
				1
			</td>
		</tr>
	</tbody>
</table>

<p style="text-align:center;">
	 
</p>

<table align="center" border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td style="text-align:center;">
				Hexadezimal
			</td>
			<td style="text-align:center;">
				16<sup>8</sup>
			</td>
			<td style="text-align:center;">
				16<sup>7</sup>
			</td>
			<td style="text-align:center;">
				16<sup>6</sup>
			</td>
			<td style="text-align:center;">
				16<sup>5</sup>
			</td>
			<td style="text-align:center;">
				16<sup>4</sup>
			</td>
			<td style="text-align:center;">
				16<sup>3</sup>
			</td>
			<td style="text-align:center;">
				16<sup>2</sup>
			</td>
			<td style="text-align:center;">
				16<sup>1</sup>
			</td>
			<td style="text-align:center;">
				16<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				Hexadezimal
			</td>
			<td style="text-align:center;">
				4.294.967.296
			</td>
			<td style="text-align:center;">
				268.435.456
			</td>
			<td style="text-align:center;">
				16.777.216
			</td>
			<td style="text-align:center;">
				1.048.576
			</td>
			<td style="text-align:center;">
				65.536
			</td>
			<td style="text-align:center;">
				4.096
			</td>
			<td style="text-align:center;">
				256
			</td>
			<td style="text-align:center;">
				16
			</td>
			<td style="text-align:center;">
				1
			</td>
		</tr>
	</tbody>
</table>

<p style="text-align:center;">
	 
</p>

<table align="center" border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td style="text-align:center;">
				Oktal
			</td>
			<td style="text-align:center;">
				8<sup>8</sup>
			</td>
			<td style="text-align:center;">
				8<sup>7</sup>
			</td>
			<td style="text-align:center;">
				8<sup>6</sup>
			</td>
			<td style="text-align:center;">
				8<sup>5</sup>
			</td>
			<td style="text-align:center;">
				8<sup>4</sup>
			</td>
			<td style="text-align:center;">
				8<sup>3</sup>
			</td>
			<td style="text-align:center;">
				8<sup>2</sup>
			</td>
			<td style="text-align:center;">
				8<sup>1</sup>
			</td>
			<td style="text-align:center;">
				8<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				Oktal
			</td>
			<td style="text-align:center;">
				16.777.216
			</td>
			<td style="text-align:center;">
				2.097.152
			</td>
			<td style="text-align:center;">
				262.144
			</td>
			<td style="text-align:center;">
				32.768
			</td>
			<td style="text-align:center;">
				4.096
			</td>
			<td style="text-align:center;">
				512
			</td>
			<td style="text-align:center;">
				64
			</td>
			<td style="text-align:center;">
				8
			</td>
			<td style="text-align:center;">
				1
			</td>
		</tr>
	</tbody>
</table>

<p>
	 
</p>

<p>
	Du musst dir nicht alles davon merken, aber so bis 4096 in jedem System, solltest du schon im Kopf haben. Diese Zahlen kommen immer wieder in der IT-Welt vor und wer es am Anfang schon kennt, hat später weniger Probleme sich die Zahlen zu merken. Als Beispiel 2<sup>10</sup> ergibt 1024, 1 MiB (Mebibyte) hat 1024 KiB (Kibibyte). Du siehst also das sind ganz normale IT zahlen, die dir in deiner Laufbahn ständig über den Weg laufen werden.
</p>

<p>
	Dann fangen wir mal an mit dem umrechnen.
</p>

<p>
	<strong>Dezimal zu Binär</strong>
</p>

<p>
	105<sub>d</sub> wollen wir in Binär umwandeln, zunächst guckst du in die liste bei Binär wie oft die 105 in die 256 passt, 0 mal. Da die ersten nullen nicht aufgeschrieben werden, weil die Tabelle noch kilometerweit weiter nach Links geht, guckst du das du die nächstmögliche Zahl raussuchst, in dem Fall 105 wäre es die 64 (da es in 128 ja auch eine 0 ergeben würde). Du schreibst also die erste 1 und rechnest den Rest aus. 105 - 64 = 41, du schreibst am besten in eine Tabelle 1 Rest 41, dann rechnest du mit der 41 weiter, wie oft passt die 41 in die 32? genau auch ein mal, also schreibst du wieder eine und hast als Zwischenwert jetzt 11 und den Rest, das wäre bei 41 - 32 = 9. Wir merken uns 11 Rest 9. Da die 9 unsere Zahl ist mit der wir weiter rechnen guckst du wie oft die 9 in die 16 passt, 0 mal. Also schreibst du 110 Rest auf. Rest ist wieder 9 und du gehst zu der 8 hin, wie oft passt die 9 in die 8? genau 1 mal, 9 - 8 = 1. Jetzt schreiben wir wieder in der Tabelle weiter 1101 Rest 1. Das Spielchen geht jetzt so weiter, wie oft passt die 1 in die 4? 0 mal, also 11010 Rest 1, wie oft in die 2? 0 mal, also 110100 Rest 1, wie oft in die 1? ein mal also schreibst du 1101001 auf. Da die Tabelle zum ende angekommen ist, hast du deinen ersten Binären Wert schon mit einer Leichtigkeit herausbekommen, 105 in Binär ist 1101001.
</p>

<p>
	War das jetzt schwer? Ich glaube kaum. Wenn du noch etwas üben möchtest dann such dir einfach mehr Zahlen aus und wenn ich sie überprüfen soll, schreib sie in die Kommentare. Als Alternative kannst du dir auch auf dem Smartphone einen IT Taschenrechner runterladen. Unter Android kann ich dir die App <strong>Six Teen Free</strong> empfehlen. Nein das ist keine Werbung, denn ich bekomme kein Geld von den Machern der App, leider … Auf jeden Fall hast du da die Möglichkeit Dezimal, Hex, Bin und Oktal werte einzugeben und er zeigt dir sofort die restlichen Werte an, am Anfang hab ich es mir schwer getan, weil ich nicht wusste, dass man auf den blauen Balken in jeder Zeile anklicken kann, in der man die Werte eingeben möchte. Nachdem man das weiß ist dieser Rechner einfach nur Super. Einfach, klein und ohne viel Schnickschnack.
</p>

<p>
	Es wäre gut wenn du dann erst ein Paar Zahlen in Binär umrechnest, damit du dich mit der Tabelle vertraut machst und damit du das System beherrschst.
</p>

<p>
	 
</p>

<p>
	<strong>Binär zu Dezimal</strong>
</p>

<p>
	Die Umrechnung ist genauso Simple. Wir rechnen mal die Zahl 1001 0011 in Dezimal um. Hier nimmst du am besten auch sofort die Tabelle zur Hand
</p>

<table align="center" border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td style="text-align:center;">
				Binär
			</td>
			<td style="text-align:center;">
				2<sup>8</sup>
			</td>
			<td style="text-align:center;">
				2<sup>7</sup>
			</td>
			<td style="text-align:center;">
				2<sup>6</sup>
			</td>
			<td style="text-align:center;">
				2<sup>5</sup>
			</td>
			<td style="text-align:center;">
				2<sup>4</sup>
			</td>
			<td style="text-align:center;">
				2<sup>3</sup>
			</td>
			<td style="text-align:center;">
				2<sup>2</sup>
			</td>
			<td style="text-align:center;">
				2<sup>1</sup>
			</td>
			<td style="text-align:center;">
				2<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				Binär
			</td>
			<td style="text-align:center;">
				256
			</td>
			<td style="text-align:center;">
				128
			</td>
			<td style="text-align:center;">
				64
			</td>
			<td style="text-align:center;">
				32
			</td>
			<td style="text-align:center;">
				16
			</td>
			<td style="text-align:center;">
				8
			</td>
			<td style="text-align:center;">
				4
			</td>
			<td style="text-align:center;">
				2
			</td>
			<td style="text-align:center;">
				1
			</td>
		</tr>
	</tbody>
</table>

<p>
	machst dir unten noch zwei Zeilen hinzu damit du das hier hast
</p>

<table border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td>
				Binär
			</td>
			<td>
				2<sup>8</sup>
			</td>
			<td>
				2<sup>7</sup>
			</td>
			<td>
				2<sup>6</sup>
			</td>
			<td>
				2<sup>5</sup>
			</td>
			<td>
				2<sup>4</sup>
			</td>
			<td>
				2<sup>3</sup>
			</td>
			<td>
				2<sup>2</sup>
			</td>
			<td>
				2<sup>1</sup>
			</td>
			<td>
				2<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td>
				Binär
			</td>
			<td>
				256
			</td>
			<td>
				128
			</td>
			<td>
				64
			</td>
			<td>
				32
			</td>
			<td>
				16
			</td>
			<td>
				8
			</td>
			<td>
				4
			</td>
			<td>
				2
			</td>
			<td>
				1
			</td>
		</tr>
		<tr>
			<td>
				Binär
			</td>
			<td>
				0
			</td>
			<td>
				1
			</td>
			<td>
				0
			</td>
			<td>
				0
			</td>
			<td>
				1
			</td>
			<td>
				0
			</td>
			<td>
				0
			</td>
			<td>
				1
			</td>
			<td>
				1
			</td>
		</tr>
		<tr>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
		</tr>
	</tbody>
</table>

<p>
	In die vierte Zeile kannst du dann deine Zwischenrechnung reinschreiben. Dann legen wir los...
</p>

<p>
	Jetzt guckst du einfach wo überall die 1 ist, diese zahlen musst du einfach nur zusammen zählen, dann hast du die Dezimal Zahl raus. In unserem Fall ist das die
</p>

<p>
	128+16+2+1=147
</p>

<p>
	Somit ergibt der Binäre Wert 1001 0011 den Dezimalen Wert 147.<br />
	Wie immer kannst du dir dann Paar zahlen ausdenken und diese dann umrechnen um eine Routine zu bekommen.
</p>

<p>
	 
</p>

<p>
	<strong>Dezimal zu Hexadezimal</strong>
</p>

<p>
	Als erstes erstellst du dir ne Zusatz Tabelle. In dieser Tabelle steht nur ganz einfach von 0 - 15 und von 0 - 9 und die a - f, wie hier im Beispiel gezeigt
</p>

<table border="1" cellpadding="1" cellspacing="1">
	<tbody>
		<tr>
			<td style="text-align:center;">
				Dec
			</td>
			<td style="text-align:center;">
				Hex
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				0
			</td>
			<td style="text-align:center;">
				0
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				1
			</td>
			<td style="text-align:center;">
				1
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				2
			</td>
			<td style="text-align:center;">
				2
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				3
			</td>
			<td style="text-align:center;">
				3
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				4
			</td>
			<td style="text-align:center;">
				4
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				5
			</td>
			<td style="text-align:center;">
				5
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				6
			</td>
			<td style="text-align:center;">
				6
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				7
			</td>
			<td style="text-align:center;">
				7
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				8
			</td>
			<td style="text-align:center;">
				8
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				9
			</td>
			<td style="text-align:center;">
				9
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				10
			</td>
			<td style="text-align:center;">
				a
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				11
			</td>
			<td style="text-align:center;">
				b
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				12
			</td>
			<td style="text-align:center;">
				c
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				13
			</td>
			<td style="text-align:center;">
				d
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				14
			</td>
			<td style="text-align:center;">
				e
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				15
			</td>
			<td style="text-align:center;">
				f
			</td>
		</tr>
	</tbody>
</table>

<p>
	Das dient am Anfang der Leichtigkeit und dem gewöhnen an ein 16er Zahlensystem. Du wirst merken das du am Anfang noch mit dem a-f paar mal durcheinander kommst. Das legt sich aber schnell mit der Zeit. Die Rechnung ist aber fast genauso einfach wie Dezimal zu Binär, nur das du hier mehr Kopfrechnerei hast. Aber wie sagt man so schön? damit aktivierst du natürlich deine grauen Zellen.<br />
	Wir nehmen mal die Zahl 3048. Die wird wie immer geprüft, wie oft sie in die 256 passt... 11 mal und Rest ist 232 (11*256=2816 dann 3048 - 2816 = 232). 11 hat den Wert b, den notierst du dann inklusive Rest. Mit dem Rest von 232 rechnest du dann weiter, wie oft passt sie in die 16? 14 mal mit dem Rest von 8, 14 hat den Wert von e, den notierst du dann inklusive Rest. Mit dem Rest von 8 rechnest du dann weiter und guckst wie oft sie in die 1 passt, 8 mal und Rest 0, also schreiben wir auf 8. Zusammen ergibt es den Wert von be8
</p>

<p>
	Somit hast du grad errechnet das der Dezimalwert von 3048, den Hex Wert von be8 ergibt.
</p>

<p>
	 
</p>

<p>
	<strong>Hexadezimal zu Dezimal</strong>
</p>

<p>
	Das ist genau das selbe Prinzip wie bei den anderen varianten, aber wir wollen jetzt nicht faul werden und machen eine Zahl wieder ausführlich zusammen. Wir nehmen den Hex Wert fe und wandeln ihn in Dezimal um. Wie herum du jetzt anfängst ist eigentlich egal, ich fange immer links an, weil ich dann die großen Zahlen schonmal weg hab. Wir schnappen uns das f und rechnen f*16. F ist der Stellenwert von 15 und 15*16 ergibt 240. Die Zahl notieren wir uns und nehmen uns das e vor was den Stellenwert 14 hat. 14*1 ergibt 14 und jetzt brauchen wir nur noch die beiden Werte addieren 240+14 ergibt laut Adam Riese 254. Du siehst das umrechnen ist eigentlich recht simple, sobald einer einem zeigt wie es geht.
</p>

<p>
	 
</p>

<p>
	<strong>Dezimal zu Oktal</strong>
</p>

<p>
	Nachdem wir schon die schweren Sachen errechnet haben ist Oktal ein Kinderspiel (ich halte mich mit Absicht kurz, da das ganze quasi ne Wiederholung ist). Wir müssen alles nur in dem 8er System berechnen, aber die Logik wie das funktioniert ändert sich hier auch nicht.<br />
	Ich zeige dir einmal kurz eine Zahl und du versuchst es dann mit anderen Zahlen nachzumachen. Ich kopiere nochmal die Tabelle um das umrechnen leichter zu machen und du nicht ständig hin und her scrollen musst.
</p>

<table align="center" border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td style="text-align:center;">
				Oktal
			</td>
			<td style="text-align:center;">
				8<sup>8</sup>
			</td>
			<td style="text-align:center;">
				8<sup>7</sup>
			</td>
			<td style="text-align:center;">
				8<sup>6</sup>
			</td>
			<td style="text-align:center;">
				8<sup>5</sup>
			</td>
			<td style="text-align:center;">
				8<sup>4</sup>
			</td>
			<td style="text-align:center;">
				8<sup>3</sup>
			</td>
			<td style="text-align:center;">
				8<sup>2</sup>
			</td>
			<td style="text-align:center;">
				8<sup>1</sup>
			</td>
			<td style="text-align:center;">
				8<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td style="text-align:center;">
				Oktal
			</td>
			<td style="text-align:center;">
				16.777.216
			</td>
			<td style="text-align:center;">
				2.097.152
			</td>
			<td style="text-align:center;">
				262.144
			</td>
			<td style="text-align:center;">
				32.768
			</td>
			<td style="text-align:center;">
				4.096
			</td>
			<td style="text-align:center;">
				512
			</td>
			<td style="text-align:center;">
				64
			</td>
			<td style="text-align:center;">
				8
			</td>
			<td style="text-align:center;">
				1
			</td>
		</tr>
	</tbody>
</table>

<p>
	<br />
	Wir nehmen uns die Zahl 212 und wandeln diese um. Wie oft passt die 212 in die 64? 3 mal, wir merken uns die 3 und den Rest (64*3 = 192)(212-192=20) 20. Mit der 20 rechnen wir weiter, wie oft passt sie in die 8? 2 mal und Rest 4 (2*8=16) die 4 passt 4 mal in die eins, somit ergibt sich der Wert 324<sub>o</sub> .<br />
	War doch nicht so schwer oder?
</p>

<p>
	Jetzt gehen wir mal einen Schritt weiter.
</p>

<p>
	 
</p>

<p>
	<strong>Hexadezimal zu Binär und zurück</strong>
</p>

<p>
	Das ist im Gegensatz zu den anderen Umrechnungen ganz einfach. Nimm dir die Binärtabelle und erweitere sie um eine Zeile, wir nutzen aber nur die rechten 4 Spalten, da wir ein 16er System umwandeln, und der höchste wert 15 beträgt, brauchen wir 2<sup>4</sup> nicht mehr
</p>

<table border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td>
				Binär
			</td>
			<td>
				2<sup>8</sup>
			</td>
			<td>
				2<sup>7</sup>
			</td>
			<td>
				2<sup>6</sup>
			</td>
			<td>
				2<sup>5</sup>
			</td>
			<td>
				2<sup>4</sup>
			</td>
			<td>
				2<sup>3</sup>
			</td>
			<td>
				2<sup>2</sup>
			</td>
			<td>
				2<sup>1</sup>
			</td>
			<td>
				2<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td>
				Binär
			</td>
			<td>
				256
			</td>
			<td>
				128
			</td>
			<td>
				64
			</td>
			<td>
				32
			</td>
			<td>
				16
			</td>
			<td>
				8
			</td>
			<td>
				4
			</td>
			<td>
				2
			</td>
			<td>
				1
			</td>
		</tr>
		<tr>
			<td>
				Binär
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
		</tr>
	</tbody>
</table>

<p>
	<br />
	Wir rechnen einen kleinen Wert aus, 6b<sub>h</sub> wird erst aufgeteilt, erst rechnen wir das b um, das ist der Dezimalwert von 11, den tragen wir wie gewohnt in die Tabelle ein, 11 passt einmal in die 8, einmal in die 2 und einmal in die 1 rein, somit ergibt sich der Wert 1011. Jetzt die 6, da passt die 4 und die 2 einmal rein. Das ergibt den wert von 110. Jetzt fügen wir die beiden Zahlen zusammen und erhalten einen Binärwert von 110 1011.
</p>

<p>
	 
</p>

<p>
	Zurück geht das genauso leicht. wenn du eine Binäre zahl von 110110110110 hast, trennst du sie am besten erst in 4er Blöcke auf damit du 1101  1011  0110 hast, dann schnappst du dir den ersten Block also die 1101 und wandelst den in Hex um (1*8+1*4+1*1) das ergibt dann 13, Hex ist das dann ein d, den merken wir uns und nehmen den zweiten Block um, 1011 (1*8+1*2+1*1) der Wert von 11 ergibt ein Hex b, den wieder merken und den letzten Block vornehmen 0110 ergibt (1*4+1*2) 6, damit haben wir einen Hex Wert von db6. 
</p>

<p>
	 
</p>

<p>
	<strong>Oktal zu Binär und zurück</strong>
</p>

<p>
	Da man Hex zu Oktal nicht direkt umrechnet, sondern erst eine zwischen Rechnung über Binär macht, um zum Ziel zu kommen, ist das der letzte Punkt des Blogs.<br />
	Oktal ist ein 8er System, da brauchen wir von der Tabelle die wir zuletzt genutzt haben nur noch die letzten 3 Spalten
</p>

<table border="1" cellpadding="1" cellspacing="1" style="width:1000px;">
	<tbody>
		<tr>
			<td>
				Binär
			</td>
			<td>
				2<sup>8</sup>
			</td>
			<td>
				2<sup>7</sup>
			</td>
			<td>
				2<sup>6</sup>
			</td>
			<td>
				2<sup>5</sup>
			</td>
			<td>
				2<sup>4</sup>
			</td>
			<td>
				2<sup>3</sup>
			</td>
			<td>
				2<sup>2</sup>
			</td>
			<td>
				2<sup>1</sup>
			</td>
			<td>
				2<sup>0</sup>
			</td>
		</tr>
		<tr>
			<td>
				Binär
			</td>
			<td>
				256
			</td>
			<td>
				128
			</td>
			<td>
				64
			</td>
			<td>
				32
			</td>
			<td>
				16
			</td>
			<td>
				8
			</td>
			<td>
				4
			</td>
			<td>
				2
			</td>
			<td>
				1
			</td>
		</tr>
		<tr>
			<td>
				Binär
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				x
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
			<td>
				 
			</td>
		</tr>
	</tbody>
</table>

<p>
	<br />
	Die Umrechnung Basiert auf der selben Logik wie die von Hex zu Binär, da die Rechnung nur mit 4, 2 und 1 gerechnet wird, werde ich mir die Rechenschritte sparen. Wir haben eine Binäre zahl von 110101100010111101, diese spalten wir wieder in Blöcke, aber diesmal in 3er Blöcke dadurch entsteht dieses Muster 110  101  100  010  111  101. Fangen wir mit den Blöcken an, 110 ergibt 6, 101 ergibt 5, 100 ergibt 4, 010 ergibt 2, 111 ergibt 7 und 101 ergibt wieder 5, jetzt packen wir alles zu einer zahl und heraus kommt 6 5 4 2 7 5 was das Ergebnis auch liefert nämlich 654275<sub>o</sub> 
</p>

<p>
	 
</p>

<p>
	Zurück ist es genauso leicht aber damit wir das dann auch besprochen haben hier ein Beispiel 364<sub>o</sub> in Binär. Wieder splitten wir die Zahlen und nehmen und rechnen sie in Binär 3 ergibt 011, 6 ergibt 110 und 4 ergibt 100. Somit haben wir drei Binär Blöcke 011  110  100, da wir die erste null streichen können ist der Binäre Wert 11110100 der Oktalen Zahl 364.
</p>

<p>
	Also schwer ist was anderes oder?<br />
	 
</p>

<p>
	Ich hoffe ich war nicht all zu anstrengend und konnte dir mit dem umrechnen der Zahlensysteme helfen, falls du ein Feedback geben möchtest, nutz bitte die Kommentar Funktion, ich freue mich über jedes Feedback und beantworte es auch schnellstmöglich.
</p>

<p>
	Bis zum nächsten mal
</p>

<p>
	euer Lewan
</p>
]]></description><guid isPermaLink="false">40</guid><pubDate>Fri, 22 Feb 2019 10:30:18 +0000</pubDate></item><item><title>In zwei Jahren zum Fachinformatiker</title><link>https://www.fachinformatiker.de/blogs/entry/38-in-zwei-jahren-zum-fachinformatiker/</link><description><![CDATA[
<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	<span style="font-size:16px;"><strong>In zwei Jahren﻿ zum Fachinformatiker? </strong></span>
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	<em>Geht das überhaupt?</em> 
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	 
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Nun, das werde ich für dich testen. Es gab schon unzählige Testkarnickel, aber geblogt, hat es hier bis jetzt noch keiner.
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Und genau da fängt mein Blog an. Ich werde dir in regelmäßigen Abständen, offenlegen
</p>

<ul style="background-color:#ffffff;color:#353c41;font-size:13px;">
	<li>
		Was ich gelernt habe 
	</li>
	<li>
		Wie mir das Thema gefiel bzw. 
	</li>
	<li>
		Wie verständlich das Thema in der kurzen Zeit vermittelt wurde
	</li>
	<li>
		Welche Hilfsmittel, wie Internet Seiten oder Bücher ich benutzt habe
	</li>
	<li>
		Welche Tips mir mein Dozent mit auf den Weg gegeben hat und
	</li>
	<li>
		Welche besonderen Unterschiede in meinem Betrieb zu anderen Betrieben bzw. zu der rein Schulischen Ausbildung vorliegen
	</li>
</ul>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Wobei ich bei dem letzten Punkt, auf deine Hilfe angewiesen bin. Nutze die Kommentar Funktion, um mir zu zeigen, dass ich genug Vorwissen gesammelt habe um
</p>

<ol style="background-color:#ffffff;color:#353c41;font-size:13px;">
	<li>
		Die IHK-Prüfung zu bestehen
	</li>
	<li>
		Im Praktikum nicht zum Kaffe Kocher verdammt werde und
	</li>
	<li>
		Der wichtigste Punkt. Mit meinem Vorwissen, eine solide Grundlage habe um bei meinem zukünftigen Arbeitgeber, eine attraktive Hilfe zu sein und nicht nur ein Klotz am Bein. 
	</li>
</ol>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Das ganze ist natürlich für beide Seiten attraktiv zu sehen. Nicht nur ich profitiere von deinen Kommentaren, sondern auch du kannst von meinem Blog profitieren.
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Viele Themen werden mal kurz mal lang durchgerattert und ob es nach zwei Jahren im Kopf geblieben ist, wenn man sich nicht mehr damit beschäftigt, beantwortet sich natürlich von selbst. Je öfter wir unsere grauen Zellen an das Thema leiten, um so mehr Synapsen werden angesprochen und um so weniger gerät ein Thema in Vergessenheit. 
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Du bist schon länger Fachinformatiker und willst uns angehenden Fachinformatikern, mit Rat und Tat bei Seite stehen? 
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Auch du bist eine riesen Bereicherung für meinen Blog. Es gibt genug Themen, die man falsch aufgenommen hat. Dieses falsche Wissen kann in einer mündlichen Prüfung dann das Todesurteil sein. Sollte dir ein falsch formulierter Blog Eintrag auffallen, schreibe es bitte in die Kommentare. Dadurch wird das falsche Wissen nicht im Internet weiter kursieren und die Blog Leser haben dann die Möglichkeit sich durch diesen Blog mit richtigen Ansätzen dem Thema neu zu widmen. 
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Natürlich ist das kein Lehrblog den ich führe, aber eine Zusammenfassung dessen, was mir in meiner Umschulung auf den Weg gegeben wurde. 
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Schließlich ist das Thema ja "in zwei Jahren zum Fachinformatiker, geht das überhaupt?" Und nicht "ich bringe dir in zwei Jahren den Beruf bei"<span> </span><span><span class="ipsEmoji">?</span></span>
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Somit verabschiede ich mich mit meinem ersten Blog bei dir und gebe dir noch die Fragen auf den Weg
</p>

<ul style="background-color:#ffffff;color:#353c41;font-size:13px;">
	<li>
		Hat dich der Blog angesprochen? 
	</li>
	<li>
		War er gut zu lesen oder so anstrengend, dass du froh warst, endlich Licht am Ende des Tunnels gesehen zu haben? 
	</li>
</ul>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	 
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Ich freue mich über deine Geduld, deine Zeit und dein Interesse das du in den Beitrag investiert hast. Dein Kommentar wäre das gelbe vom Ei. Ich hoffe auf ein Wiedersehen und das Folgen meines Blogs. 
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:13px;">
	Euer Lewan 
</p>
]]></description><guid isPermaLink="false">38</guid><pubDate>Wed, 13 Feb 2019 16:28:58 +0000</pubDate></item><item><title>Windows Server Container und Docker III</title><link>https://www.fachinformatiker.de/blogs/entry/37-windows-server-container-und-docker-iii/</link><description><![CDATA[
<p>
	<strong><span style="font-size:24px;">Dockerfile</span></strong>
</p>

<p style="text-align:justify;">
	Damit man nicht mit jedem Container alles neu machen muss, kann man sich über Dockerfiles eigene Images erzeugen. Die hier gezeigte Version ist mehr oder weniger die finale Version. Davor gab es natürlich diverse Fehlversuche sei es wegen eigener Fehler oder weil man manche Dinge auch einfach nicht vermutet hätte. Unter Windows Nanoserver gibt es beispielsweise gar kein msiexec und das msiexec vom Server Core schreibt die Registryeinträge gar nicht oder irgendwohin wo sie später nicht gefunden werden. Mit setx kann man zwar globale Umgebungsvariablen setzen, startet man den Apache aber als Dienst, wird die Pfadeinstellung dennoch nicht genutzt.
</p>

<pre class="ipsCode prettyprint lang-perl prettyprinted">
<span class="com"># Wir benutzen unser schon gepulltes Windows Servercore Image</span><span class="pln">
FROM servercore</span><span class="pun">:</span><span class="pln">ltsc2019
COPY install </span><span class="pun">/</span><span class="pln">install
</span><span class="com"># Installiert die ODBC Treiber im Image</span><span class="pln">
</span><span class="com"># Wer hier eine Ausgabe zum Debuggen will kann noch "/l! out13.log" anhängen</span><span class="pln">
RUN </span><span class="pun">[</span><span class="str">"msiexec"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/a C:\\install\\msodbcsql_13.msi"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/qn"</span><span class="pun">]</span><span class="pln">
RUN </span><span class="pun">[</span><span class="str">"msiexec"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/a C:\\install\\msodbcsql_17.msi"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/qn"</span><span class="pun">]</span><span class="pln">
</span><span class="com"># Installation von VC Redist - 15 wird bei Server 2019 nicht benötigt</span><span class="pln">
RUN </span><span class="pun">[</span><span class="str">"C:\\install\\vc_17.exe"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/quiet"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/install"</span><span class="pun">]</span><span class="pln">
RUN </span><span class="pun">[</span><span class="str">"C:\\install\\vc_13.exe"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/quiet"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"/install"</span><span class="pun">]</span><span class="pln">
</span><span class="com"># Die Registry-Datei für die ODBC Treiber importieren</span><span class="pln">
RUN </span><span class="str">"reg import C:\\install\\odbc.reg"</span><span class="pln">
</span><span class="com"># install brauchen wir nicht mehr</span><span class="pln">
RUN </span><span class="str">"RMDIR /S /Q C:\\install"</span><span class="pln">
</span><span class="com"># /instantclient entspricht dann C:\instantclient im Image</span><span class="pln">
COPY instantclient </span><span class="pun">/</span><span class="pln">instantclient
</span><span class="com"># einfach großartig - wenn jemand eine Idee hat wie ich Apache als Service erklären kann wo der instantclient liegt ...</span><span class="pln">
ENV PATH</span><span class="pun">=</span><span class="str">"C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\ContainerAdministrator\AppData\Local\Microsoft\WindowsApps;C:\instantclient"</span><span class="pln">
</span><span class="com"># Apache usw. kopieren - *1</span><span class="pln">
COPY webapp </span><span class="pun">/</span><span class="pln">webapp
WORKDIR </span><span class="pun">/</span><span class="pln">webapp
</span><span class="com"># wir möchten mit dem Container reden</span><span class="pln">
EXPOSE </span><span class="lit">80</span><span class="pln">
</span><span class="com"># kopieren von php und der php.conf ins Apache config Verzeichnis - *2</span><span class="pln">
COPY php</span><span class="pun">/</span><span class="pln">php </span><span class="pun">/</span><span class="pln">webapp</span><span class="pun">/</span><span class="pln">php
COPY php</span><span class="pun">/</span><span class="pln">php</span><span class="pun">.</span><span class="pln">conf </span><span class="pun">/</span><span class="pln">webapp</span><span class="pun">/</span><span>Apache24</span><span class="pun">/</span><span class="pln">conf</span><span class="pun">/</span><span class="pln">extra
</span><span class="com"># zum Testen/Debuggen</span><span class="pln">
</span><span class="com">#ENTRYPOINT ["cmd.exe"]</span><span class="pln">
</span><span class="com"># und los geht’s</span><span class="pln">
ENTRYPOINT </span><span class="pun">[</span><span class="str">"C:\\webapp\\Apache24\\bin\\httpd.exe"</span><span class="pun">]</span></pre>

<p>
	Das Dockerfile kommt dann mit in das Build-Verzeichnis und das neue Image kann mit folgendem Befehl erzeugt werden.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">PS E:\build\&gt;docker build -t test .</span></pre>

<p>
	Mit
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">PS E:\build\&gt;docker run -it -p 80:80 --name test_container test</span></pre>

<p>
	starten wir den Container und prüfen das alles wie gewünscht funktioniert. Ist das der Fall teilen wir das Dockerfile in 3 Dateien. Das Dockerfile wird dann bei *1 und *2 aufgeteilt. Der erste Teil bleibt wie er ist und wir nennen das Dockerfile core2019. Und bauen ein Image daraus.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">PS E:\build\&gt;docker image build -t core2019 -f .\core2019 .</span></pre>

<p>
	Das zweite Dockerfile sieht dann so aus
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">FROM core2019:latest
COPY webapp /webapp
EXPOSE 80</span></pre>

<p>
	und das dritte so
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">FROM apache_core2019:latest
COPY php/php /webapp/php
COPY php/php.conf /webapp/Apache24/conf/extra
WORKDIR /logodata
ENTRYPOINT ["C:\\webapp\\Apache24\\bin\\httpd.exe"]</span></pre>

<p>
	<br />
	Ich habe die Dockerfiles nach dem Image benannt das sie erzeugen. Die weiteren Images baue ich also mit
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">PS E:\build\&gt;docker image build -t apache_core2019 -f .\apache_core2019 .
PS E:\build\&gt;docker image build -t php_apache_core2019 -f .\php_apache_core2019 .</span></pre>

<p>
	Damit hat man zwar etwas Overhead bei jedem Build, da jedesmal das komplette Verzeichnis zum Buildprozess übergeben wird. Allerdings können wir so sehr einfach andere PHP und/oder Apache Versionen in ein anderes Image packen ohne den Standard zu verlieren oder die grundlegende Installation wiederholen zu müssen.
</p>

<p>
	<span style="font-size:24px;"><strong>Lauf Docker, Lauf!</strong></span>
</p>

<p>
	Die entstandenen Images kann man nun wieder mit kürzeren Namen taggen und schließlich starten
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">PS&gt; docker run --restart unless-stopped -d --name flamara -p 17000:80 -v E:\share\develop:C:\webapp\docroot -v E:\share\config:C:\webapp\docroot\config\ --dns=10.0.0.20 php2019:latest</span></pre>

<p>
	Mit -p mappen wir einen Port des Hosts zu dem freigegebenen Port des Containers. Dann mappen wir mit -v zum einen die Webapplikation selbst ins docroot des Containers und auch die Konfiguration der Software.
</p>

<p>
	So können wir beliebige Versionen der Software mit der gleichen Konfiguration (Benutzer, Rechte, Datenbankanbindung) in der gleichen Umgebung testen.
</p>

<p>
	Die nächsten Schritte wären nun, das Ganze mit einem Linux Base-Image zur erstellen und danach automatisierte Builds.
</p>
]]></description><guid isPermaLink="false">37</guid><pubDate>Fri, 21 Dec 2018 09:48:00 +0000</pubDate></item><item><title>Windows Server Container und Docker II</title><link>https://www.fachinformatiker.de/blogs/entry/36-windows-server-container-und-docker-ii/</link><description><![CDATA[
<h1 style="background-color:#ffffff;color:#555555;font-size:1.425em;">
	<span style="font-size:24px;">Vorbereitung</span>
</h1>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Als nächstes bereiten wir die Build-Umgebung vor. Wir laden Apache, PHP, passende vc_redist (17 und 13), Microsoft ODBC Treiber 13 und 17, SQLSRV5.3, und einen Oracle Instantclient herunter.
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Ich überspringe an dieser Stelle einige Schritte und zeige nur die endgültige Version. Ihr verpasst aber nichts Dramatisches, der Buildprozess wurde nur einige Male verändert und die Verzeichnisstruktur entsprechend angepasst. Der Sinn oder Unsinn wird dann vermutlich klar, wenn wir uns die Dockerfiles ansehen.
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Also legen wir erstmal folgende Struktur an:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">Build
├───install
├───instantclient
├───webapp
│   ├───Apache24
│   └───docroot
└───php
    └───php</span></pre>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	In <span style="font-family:'Courier New', Courier, monospace;">install</span> legen wir die VC Redist Installer und die ODBC Treiber MSI-Pakete ab. Ich habe die umbenannt um sie leichter unterscheiden zu können.
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Den Instantclient kann man einfach entpacken und den Inhalt des <span style="font-family:'Courier New', Courier, monospace;">instantclient_18_3-</span>Verzeichnisses in <span style="font-family:'Courier New', Courier, monospace;">instantclient</span> ablegen.
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	In <span style="font-family:'Courier New', Courier, monospace;">php/php</span> wird das heruntergeladene PHP entpackt und in <span style="font-family:'Courier New', Courier, monospace;">webapp/Apache24</span> der Webserver. Die <span style="font-family:'Courier New', Courier, monospace;">httpd.conf</span> nach Belieben anpassen, darauf achten das das DocumentRoot <span style="font-family:'Courier New', Courier, monospace;">webapp/docroot</span> sein soll und noch eine <span style="font-family:'Courier New', Courier, monospace;">webapp/Apache/conf/extra/php.conf</span> includieren. Die gibt es zwar nicht, das erledigt dann der Buildprozess.
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Die <span style="font-family:'Courier New', Courier, monospace;">php.conf</span> kommt nach <span style="font-family:'Courier New', Courier, monospace;">/php</span> und sieht etwa so aus:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">LoadModule php7_module "C:\webapp\php\php7apache2_4.dll"
AddType application/x-httpd-php .php
PHPIniDir "C:\webapp\php"
DirectoryIndex index.php</span></pre>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Nun noch PHP konfigurieren und dann sind die Vorbereitungen abgeschlossen.
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Eigentlich ... also quasi schon ...
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Aus irgendeinem Grund werden die Registry-Einträge für die ODBC-Treiber nicht geschrieben. Weder beim Build noch im laufenden Container. Also erstellen wir noch eine <span style="font-family:'Courier New', Courier, monospace;"><a class="ipsAttachLink" href="https://www.fachinformatiker.de/applications/core/interface/file/attachment.php?id=7463" data-fileid="7463" rel="">odbc.reg</a></span> und legen die mit nach <span style="font-family:'Courier New', Courier, monospace;">/install</span>. Die Datei kann man erzeugen, indem man den Schlüssel exportiert. Dazu kann man kurzzeitig die ODBC Treiber auf dem Host installieren.
</p>
]]></description><guid isPermaLink="false">36</guid><pubDate>Thu, 13 Dec 2018 10:16:26 +0000</pubDate></item><item><title>Windows Server Container und Docker I</title><link>https://www.fachinformatiker.de/blogs/entry/35-windows-server-container-und-docker-i/</link><description><![CDATA[
<h1 style="background-color:#ffffff;color:#555555;font-size:1.425em;">
	Einleitung
</h1>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Die grundlegende Frage gleich vornweg: Warum sollte man Docker auf einem Windows Server betreiben?
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Nunja, weil man es kann. Außerdem besteht die Infrastruktur bei den meisten unserer Kunden aus MS SQL-Server und Windows Servern auf denen unsere Software installiert wird. Hier könnte man nun argumentieren, dass unsere Software "nur" PHP und Apache benötigt und das zusammen mit PostGreSQL oder ORACLE durchaus auf Linux laufen könnte. Ja, ist richtig, wir möchten aber nicht auch noch irgendwelche Linux Installationen bei unseren Kunden pflegen.
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Sucht man, naiv wie man ist, einfach mal nach "docker windows", landet man früher oder später bei "Docker CE for Window". Hat man das installiert und den ersten Container gestartet, wird einem auffallen das die Container nicht beim Booten starten. Da ist auch nichts falsch konfiguriert, das soll so sein. Dafür gibt es sicherlich Gründe. Diese Version ist für Entwickler gedacht, die Docker auf ihrem Windows 10 PC betreiben wollen. Wollen wir aber gar nicht …
</p>

<h1 style="background-color:#ffffff;color:#555555;font-size:1.425em;">
	Installation
</h1>

<p style="background-color:#ffffff;border:0px;color:#616161;font-size:15px;padding:0px;vertical-align:baseline;">
	Also installieren wir mal das richtige
</p>

<pre style="border:1px solid #888888;color:#353c41;font-size:14px;padding:2px;">
<span style="color:#000000;">PS</span><span style="color:#666600;">&gt;</span><span style="color:#000000;"> </span><span>Install</span><span style="color:#666600;">-</span><span>PackageProvider</span><span style="color:#000000;"> </span><span style="color:#666600;">-</span><span>Name</span><span style="color:#000000;"> </span><span>NuGet</span><span style="color:#000000;"> </span><span style="color:#666600;">-</span><span>MinimumVersion</span><span style="color:#000000;"> </span><span style="color:#006666;">2.8</span><span style="color:#666600;">.</span><span style="color:#006666;">5.201</span><span style="color:#000000;"> </span><span style="color:#666600;">-</span><span>Force</span><span style="color:#000000;">
PS</span><span style="color:#666600;">&gt;</span><span style="color:#000000;"> </span><span>Install</span><span style="color:#666600;">-</span><span>Module</span><span style="color:#000000;"> </span><span style="color:#666600;">-</span><span>Name</span><span style="color:#000000;"> </span><span>DockerMsftProvider</span><span style="color:#000000;"> </span><span style="color:#666600;">-</span><span>Force</span><span style="color:#000000;">
PS</span><span style="color:#666600;">&gt;</span><span style="color:#000000;"> </span><span>Install</span><span style="color:#666600;">-</span><span>Package</span><span style="color:#000000;"> </span><span style="color:#666600;">-</span><span>Name</span><span style="color:#000000;"> docker </span><span style="color:#666600;">-</span><span>ProviderName</span><span style="color:#000000;"> </span><span>DockerMsftProvider</span><span style="color:#000000;"> </span><span style="color:#666600;">-</span><span>Force</span></pre>

<p style="background-color:#ffffff;border:0px;color:#616161;font-size:15px;padding:0px;vertical-align:baseline;">
	Danach möchte der Server einmal neu starten und wir können mit<span> </span><span style="font-family:'Courier New', Courier, monospace;">docker version</span><span> </span>schauen ob das funktioniert hat.
</p>

<pre style="border:1px solid #888888;color:#353c41;font-size:14px;padding:2px;">
<span style="color:#000000;">PS C</span><span style="color:#666600;">:</span><span style="color:#000000;">\&gt; docker version
</span><span>Client</span><span style="color:#666600;">:</span><span style="color:#000000;">
 </span><span>Version</span><span style="color:#666600;">:</span><span style="color:#000000;">           </span><span style="color:#006666;">18.09</span><span style="color:#666600;">.</span><span style="color:#006666;">0</span><span style="color:#000000;">
 API version</span><span style="color:#666600;">:</span><span style="color:#000000;">       </span><span style="color:#006666;">1.39</span><span style="color:#000000;">
 </span><span>Go</span><span style="color:#000000;"> version</span><span style="color:#666600;">:</span><span style="color:#000000;">        go1</span><span style="color:#666600;">.</span><span style="color:#006666;">10.3</span><span style="color:#000000;">
 </span><span>Git</span><span style="color:#000000;"> commit</span><span style="color:#666600;">:</span><span style="color:#000000;">        </span><span style="color:#006666;">33a45cd0a2</span><span style="color:#000000;">
 </span><span>Built</span><span style="color:#666600;">:</span><span style="color:#000000;">             unknown</span><span style="color:#666600;">-</span><span style="color:#000000;">buildtime
 OS</span><span style="color:#666600;">/</span><span>Arch</span><span style="color:#666600;">:</span><span style="color:#000000;">           windows</span><span style="color:#666600;">/</span><span style="color:#000000;">amd64
 </span><span>Experimental</span><span style="color:#666600;">:</span><span style="color:#000000;">      false

</span><span>Server</span><span style="color:#666600;">:</span><span style="color:#000000;">
 </span><span>Engine</span><span style="color:#666600;">:</span><span style="color:#000000;">
  </span><span>Version</span><span style="color:#666600;">:</span><span style="color:#000000;">          </span><span style="color:#006666;">18.09</span><span style="color:#666600;">.</span><span style="color:#006666;">0</span><span style="color:#000000;">
  API version</span><span style="color:#666600;">:</span><span style="color:#000000;">      </span><span style="color:#006666;">1.39</span><span style="color:#000000;"> </span><span style="color:#666600;">(</span><span style="color:#000000;">minimum version </span><span style="color:#006666;">1.24</span><span style="color:#666600;">)</span><span style="color:#000000;">
  </span><span>Go</span><span style="color:#000000;"> version</span><span style="color:#666600;">:</span><span style="color:#000000;">       go1</span><span style="color:#666600;">.</span><span style="color:#006666;">10.3</span><span style="color:#000000;">
  </span><span>Git</span><span style="color:#000000;"> commit</span><span style="color:#666600;">:</span><span style="color:#000000;">       </span><span style="color:#006666;">33a45cd0a2</span><span style="color:#000000;">
  </span><span>Built</span><span style="color:#666600;">:</span><span style="color:#000000;">            </span><span style="color:#006666;">11</span><span style="color:#666600;">/</span><span style="color:#006666;">07</span><span style="color:#666600;">/</span><span style="color:#006666;">2018</span><span style="color:#000000;"> </span><span style="color:#006666;">00</span><span style="color:#666600;">:</span><span style="color:#006666;">24</span><span style="color:#666600;">:</span><span style="color:#006666;">12</span><span style="color:#000000;">
  OS</span><span style="color:#666600;">/</span><span>Arch</span><span style="color:#666600;">:</span><span style="color:#000000;">          windows</span><span style="color:#666600;">/</span><span style="color:#000000;">amd64
  </span><span>Experimental</span><span style="color:#666600;">:</span><span style="color:#000000;">     true</span></pre>

<p style="background-color:#ffffff;border:0px;color:#616161;font-size:15px;padding:0px;text-align:justify;vertical-align:baseline;">
	An der Stelle konfigurieren wir den Dienst erstmal ein wenig. Das kann man prinzipiell auch über eine json-Datei erledigen. Anleitungen dazu findet man genug. Man kann die Parameter aber auch direkt dem Dienst übergeben.
</p>

<pre style="border:1px solid #888888;color:#353c41;font-size:14px;padding:2px;">
<span style="color:#000000;">PS E:\&gt; Stop-Service Docker
PS E:\&gt; Remove-Service Docker
PS E:\&gt; New-Service -Name Docker -DisplayName "Docker Engine" -StartupType Boot -BinaryPathName "C:\Program Files\Docker\dockerd.exe --run-service -H npipe:// -H 0.0.0.0:2375 --data-root=E:\docker --experimental"
PS E:\&gt; Start-Service Docker</span></pre>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Für Remove-Service benötigt man allerdings PowerShell Version 6. Die gibt es zwar seit August 2018, ist dennoch nicht im Server 2019 enthalten. Nach dem Neustart des Dienstes legt Docker nun seine benötigte Verzeichnisstruktur unter E:\docker an. Und durch <span style="font-family:'Courier New', Courier, monospace;">–experimental</span> können wir später <span style="font-family:'Courier New', Courier, monospace;">–plattform=linux</span> nutzen.
</p>

<p style="background-color:#ffffff;color:#616161;font-size:15px;text-align:justify;">
	Nun ist es endlich soweit, wir holen unser erstes Image. Normalerweise würde man das einfach mit
</p>

<pre style="border:1px solid #888888;color:#353c41;font-size:14px;padding:2px;">
<span style="color:#000000;">PS&gt; docker pull microsoft/nanoserver</span></pre>

<p style="background-color:#ffffff;color:#353c41;font-size:14px;">
	erledigen. Das funktioniert zwar, aber ...
</p>

<p style="background-color:#ffffff;color:#353c41;font-size:14px;">
	Das was man dann bekommt ist ein Server 2016 SAC Image. Was per se zwar nicht verkehrt ist, aber im ersten Moment auf einem Server 2019 nicht funktioniert. Hier müsste man dem <span style="font-family:'Courier New', Courier, monospace;">docker run</span> noch ein <span style="font-family:'Courier New', Courier, monospace;">--isolation=hyperv</span> mitgeben oder man holt ein neues Image. Für Images die zum Server 2019 passen benötigt man spezifische Tags und kann sich nicht auf den Standard <span style="font-family:'Courier New', Courier, monospace;">:latest</span> verlassen. Images vom Nanoserver und Windows Server Core holen wir mit.
</p>

<pre style="border:1px solid #888888;color:#353c41;font-size:14px;padding:2px;">
<span style="color:#000000;">PS&gt; docker pull mcr.microsoft.com/windows/nanoserver:1809
PS&gt; docker pull mcr.microsoft.com/windows/servercore:ltsc2019</span></pre>

<p style="background-color:#ffffff;color:#353c41;font-size:14px;">
	Anschließend verpassen wir den Images noch neue Tags
</p>

<pre style="border:1px solid #888888;color:#353c41;font-size:14px;padding:2px;">
<span style="color:#000000;">PS&gt; docker image tag mcr.microsoft.com/windows/nanoserver:1809 nanoserver:1809</span></pre>

<p>
	An dieser Stelle können wir auch schon mal einen Container mit einem der Images starten.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">PS&gt; docker run -it --name testdings microsoft/nanoserver powershell</span></pre>

<p>
	Damit bekommen wir eine PowerShell Instanz in dem laufenden Container und können Dinge tun. Updates installieren, wäre eines dieser Dinge. Das erledigt man normalerweise mit <span style="font-family:'Courier New', Courier, monospace;">sconfig </span>auf der geöffneten PowerShell.
</p>

<p>
	In den nächsten Teilen bereiten wir die Build-Umgebung vor, basteln uns ein Dockerfile und bewundern das Ergebnis <img alt=";)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_wink.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/wink@2x.png 2x" title=";)" width="20" loading="lazy">
</p>
]]></description><guid isPermaLink="false">35</guid><pubDate>Wed, 12 Dec 2018 11:25:07 +0000</pubDate></item><item><title>Hardware-RAIDs</title><link>https://www.fachinformatiker.de/blogs/entry/33-hardware-raids/</link><description><![CDATA[
<p>
	Hallöööchen mit 3 öchen,
</p>

<p>
	und willkommen zurück zum Azubi-Wissen - wie immer versucht in relativ einfachen Worten zu erklären <span><img alt=":)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_smile.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/smile@2x.png 2x" title=":)" width="20" loading="lazy"> </span>
</p>

<p>
	jetzt geht alles um Hardware-RAIDs (<span>Redundant Array of Independent Disks</span>). Ein RAID ist ein Zusammenschluss von 2 oder mehr Festplatten mit dem Ziel bei einem Ausfall einer Platte (gerade in Server-Umgebungen) nicht gleich einen Totalausfall zu haben.
</p>

<p>
	<span style="color:#999999;"><em>Was wird dazu benötigt?</em></span>
</p>

<p>
	Ein <u>Hardware</u>-RAID lässt sich nicht einfach so in jedem System erstellen. Selbst wenn ich mir 2 Festplatten an den privaten PC hänge habe ich normalerweise keine Möglichkeit daraus einen <u>Hardware</u>-RAID zu machen - ein <u>Software</u>-RAID dagegen wird mittlerweile von vielen Chipsätzen unterstützt, dabei wird allerdings die Prozessorleistung beansprucht und auch die internen Bussysteme deutlich mehr belastet. Für unseren Hardware-RAID braucht es einen sogenannten RAID-Controller.
</p>

<p>
	Statt also die Festplatten direkt mit dem Mainboard zu verbinden, werden sie direkt (oder indirekt mit Zwischenschritt) mit einem Controller verbunden. Der Controller bringt meist eine BIOS-ähnliche Möglichkeit beim Starten des PCs in ein Menü zu gelangen in dem der RAID dann konfiguriert werden kann.
</p>

<p>
	<span style="color:#999999;"><em>Aber jetzt an das EIngemachte. Welche RAIDs gibt es?</em></span>
</p>

<p>
	Ich sage dem PC nicht "Ich will einen RAID" und klicke "weiter", "weiter", "weiter", "Fertig". Naja fast nicht. Als IT-ler müssen wir uns überlegen welche Art von RAID wir haben wollen, davon gibt es nämlich ein paar - und die haben Nummern, sie werden auch tatsächlich im Sprachgebrauch so benannt.
</p>

<p>
	<strong>RAID 0</strong>
</p>

<p>
	<u>Striping</u>. RAID 0 ist tatsächlich ein Sonderfall und viele behaupten, dass sich diese Nummer nicht als RAID schimpfen kann - es hat nämlich nichts mit Redundanz (= Ausfallsicherheit) zu tun. Es ist sogar das Gegenteil der Fall, aber schauen wir uns mal an was es überhaupt macht.
</p>

<p>
	Nehmen wir mal an wir haben 2 Menschen (das sind unsere Platten^^), der ein schreibt "Hallo Welt" auf einen Zettel und braucht dafür 2 Sekunden. Verbinden wir unsere Menschen (Platten) jetzt, sagen wir dem einen er soll "Hallo" schreiben, während der andere <u>gleichzeitig</u> einfach nur "Welt" schreibt. Es dauert 1 Sekunden bis "Hallo Welt" auf dem Papier steht, wir waren also schneller.
</p>

<p>
	Bei diesem RAID werden Daten also <u>gleichzeitig</u> auf die verschiedenen Platten <u>verteilt</u> (Blockweise), wir bekommen also einen <span style="color:#27ae60;">Performance-Boost</span> und haben <span style="color:#27ae60;">mehr Speicherplatz</span> zum beschreiben. Der Nachteil natürlich: <span style="color:#c0392b;">Wenn eine Platte ausfällt sind unsere Daten weg</span>, PC ist nicht mehr bootbar (ähnlich wie wenn man bei der Programmierung einfach mal die Hälfte aller Buchstaben löscht, dann bleibt nur noch etwas stehen das das System nicht versteht). Dadurch, dass wir auch nicht eine Festplatte haben sondern 2 ist die <span style="color:#c0392b;">Ausfallrate höher</span>. Oder in einer anderen Dimension gesprochen: Wenn wir darauf warten, dass 1 Festplatte ausfällt können Jahre vergehen, aber wenn man 1000 Festplatten hat ist die Chance groß, dass hier und da mal welche ausfallen. Also je mehr Platten, desto höher die Ausfallrate.
</p>

<p>
	<strong>RAID 1</strong>
</p>

<p>
	<u>Mirroring.</u> Jetzt kommen wir zum ersten 'echten' RAID - und der ist sogar noch recht einfach erklärt. Die Platten sind gespiegelt, heißt was auf die eine geschrieben wird, wird <u>gleichzeitig</u> auch auf die andere geschrieben - keine unterschiedlichen Daten wie beim RAID 0, sondern <u>dieselben Daten</u>. Würde wir unseren Menschen also hier auftragen "Hallo Welt" zu schreiben würden beide "Hallo Welt" auf ihren zettel schreiben.
</p>

<p>
	Vielleicht kann man das auch ohne einen RAID machen, indem man einfach eine Festplatte klont, aber hier kommt der Controller zum EInsatz: Lässt sich eine Platte nicht mehr lesen oder fällt aus (oder jemand ist so mutig und zieht eine Platte mitten im Betrieb raus - einmal gemacht, aber ich würde es natürlich nicht empfehlen), wird <u>automatisch</u> die andere angesprochen, es entsteht <span style="color:#27ae60;">kein Ausfall</span>. Steckt man dann eine neue Festplatte an wird der RAID 'im Hintergrund' neu aufgebaut. Nachteil ist, dass uns <span style="color:#c0392b;">weniger Speicherplatz</span> zur Verfügung steht. Wir können nur den Speicherplatz einer Platte benutzen - die andere ist schließlich nur als "Klon" da, wir können keine extra Daten auf sie schreiben.
</p>

<p>
	Achja, logisch ergibt sich, dass beide Festplatten hier dieselbe größe haben sollten, sonst gibt es entweder Fehler oder wir verschenken Speicherplatz.
</p>

<p>
	<strong>RAID 5</strong>
</p>

<p>
	<u>Block-Level Striping mit verteilter Paritätsinformation</u>. Wer hat sich solche Wörter nur ausgedacht? Respekt an diejenigen die den Wikipedia-Eintrag verstehen. Tatsächlich ist RAID 5 komplizierter als die anderen beiden. Wir sind auch nicht mehr bei 'mindestens 2 Festplatten', sondern hier brauchen wir mindestens 3 - oft sind es aber 5 Festplatten die man hier verwendet.
</p>

<p>
	Ich erkläre es erst einfach, um es verständlich zu machen, dann mit etwas mehr Fachbegriffen.
</p>

<p>
	Also: nehmen wir an wir haben diesmal unsere 3 Menschen (Platten), aber zum Verständnis lassen wir sie diesmal Zahlen schreiben. Einer schreibt eine "1" auf seinen zettel, der nächste eine "2" und der dritte - wer hätte es gedacht - eine "3". Vorneweg: Wir haben unsere Daten wieder blockweise verteilt, haben also den Vorteil von RAID 0, dass wir <span style="color:#27ae60;">mehr Geschwindigkeit</span> sowohl beim Schreiben als auch beim Lesen haben. Allerdings werden unsere Daten nicht auf alle Festplatten aufgeteilt, sondern es wird eine frei gelassen. Wir wollten nie eine "3" schreiben, aber unser RAID macht das automatisch - das muss es auch. Ich wollte das ähnlich einer Rechenaufgabe aufbauen: 1 + 2 = 3. Fällt eine Festplatte nun aus hätten wir zum Beispiel 1 + x = 3 (x ist unsere ausgefallene Platte) - unser RAID kann die fehlenden Daten während der Laufzeit errechnen, es braucht die Platte nicht. Allerdings sollten wir sie trotzdem ersetzen, denn jetzt büßen wir massiv an Performance ein, unser PC rechnet sich zu tode - aber er funktioniert. Wir erleiden trotzdem einen kleinen <span style="color:#c0392b;">Verlust an Kapazität.</span>
</p>

<p>
	Gehen wir nochmal genauer darauf ein: Die Daten die wir auf unsere Platten schreiben wollen werden auf alle Platten bis auf eine verteilt. Erst wenn diese geschrieben wurden ließt unser Controller die Daten aus und auf die übrige Platte wird dann die sogenannte Parität geschrieben - eine XOR-Veknüpfung der Daten die berechnet wird. Wichtig zu wissen: Diese Parität wird nicht immer auf dieselbe Platte geschrieben sondern es 'rotiert', wird also mit jedem neuen Block auf eine andere Platte geschrieben
</p>

<p>
	<strong>RAID 6</strong>
</p>

<p>
	Ist eher unbekannt, wird aber minimum in Baden Württemberg als Prüfungswissen vorrausgesetzt. Raid 6 wird eher seltener eingesetzt, meist von Systemen die super-mega-ultra-wichtig sind und unter keinen Umständen ausfallen dürfen. Der größte Vorteil ist, das nicht nur 1 sondern gleich <span style="color:#27ae60;">2 Festplatten gleichzeitig ausfallen dürfen</span> ohne das System lahm zu legen. Minimum brauchen wir hier 4 Festplatten - 2 für unsere Daten und 2 die wir bei RAID 5 eine Parität schreiben. Wir haben also ein RAID 5, der einzige unterschied ist wir haben noch eine Parität. Und dadurch das wir hier wieder einen Bereich weg nehmen haben wir natürlich <span style="color:#c0392b;">noch weniger frei verfügbaren Speicher</span> als bei einem RAID 5. Wird ein RAID 6 aufgrund der Ausfallsicherheit eingesetzt wird oft dazu geraten Festplatten unterschiedlicher Hersteller oder Produktions-Daten zu nehmen um das Risiko von 2 gleichzeitig ausfallenden Festplatten weiter zu verrigern.
</p>

<p>
	<strong>RAID 10</strong>
</p>

<p>
	<img alt="480px-RAID_10_svg.png.be93b9ddc18f063514f3b17e09f60bf9.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6396" height="247" src="https://www.fachinformatiker.de/uploads/monthly_2017_10/480px-RAID_10_svg.png.be93b9ddc18f063514f3b17e09f60bf9.png" width="247" loading="lazy">
</p>

<p>
	<em>( Von Wheart, based on image File:RAID 0.svg by Cburnett - Eigenes Werk, CC BY-SA 3.0, <a href="https://commons.wikimedia.org/w/index.php?curid=6411865" rel="external nofollow">https://commons.wikimedia.org/w/index.php?curid=6411865</a> )</em>
</p>

<p>
	Es wird wieder einfach. RAID 10 hat seinen Namen nicht einfach irgendwo her, es ist eine Kombination aus RAID 1 und RAID 0. Heißt wir nutzen jeweils immer 2 Platten im RAID 1 UND diese entstandenen RAIDs werden nochmal mit einem RAID 0 überbügelt. Dadurch haben wir sowohl eine <span style="color:#27ae60;">Ausfallsicherheit,</span> als auch eine <span style="color:#27ae60;">höhere Geschwindigkeit.</span> Aber: Es ist <span style="color:#c0392b;">teuer.</span> 4 Festplatten wovon ich nur die Hälfte an Speicher habe... lohnt sich eher selten.
</p>

<p>
	Wichtig ist hier: Man braucht immer eine gerade anzahl Festplatten (mindestens 4, vorrausgesetzt keiner geht davon aus, dass 2 Festplatten zur exakt gleichen Zeit ausfallen), weil man auf der unteren Ebene ja immer erst 2 Platten spiegelt.
</p>

<p>
	<strong>RAID 01</strong>
</p>

<p>
	<img alt="600px-RAID_01_svg.png.9ebaec990de7fe477f7dea11299e9000.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6395" height="249" src="https://www.fachinformatiker.de/uploads/monthly_2017_10/600px-RAID_01_svg.png.9ebaec990de7fe477f7dea11299e9000.png" width="249" loading="lazy">
</p>

<p>
	( <em>Von Wheart, based on image File:RAID 0.svg by Cburnett - Eigenes Werk, CC BY-SA 3.0, <a href="https://commons.wikimedia.org/w/index.php?curid=6411849" rel="external nofollow">https://commons.wikimedia.org/w/index.php?curid=6411849</a> </em>)
</p>

<p>
	Man kann es vielleicht schon vermuten... hier werden die Platen erst in mehrere RAID 0's aufgeteilt und dann wird ein RAID 1 drüber gebügelt. Manch einer stellt sich nun die Frage: Was ist der Unterschied zu RAID 10? Anhand des Bildes lässt sich kaum ein unterschied feststellen und egal wie man es dreht, man hat <span style="color:#27ae60;">RAID 0 und 1 und beide Vorteile davon</span>.
</p>

<p>
	Der Unterschied wird sichtbar wenn wir die Anzahl der Platten verändern. Für ein RAID 10 brauchen wir nämlich mindestens 4 Festplatten (wie gesagt wir spiegeln sie ja auf der unteren Ebene erst), bei einem RAID 01 brauchen wir minimum... 3! Und anders als bei einem Raid 10 kann es hier schon Sinn machen die Raid 0 auf unterster Ebene auch mal mit 3 oder mehr Festplatten zu machen - aus Performancegründen.
</p>

<p>
	<img alt="464px-RAID_01-3_svg.png.300053cbea8069875b967867d78fb587.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6397" height="257" src="https://www.fachinformatiker.de/uploads/monthly_2017_10/464px-RAID_01-3_svg.png.300053cbea8069875b967867d78fb587.png" width="248" loading="lazy">
</p>

<p>
	( <em>Von RAID_1.svg: en:User:C burnettderivative work: Nmoas (talk) - RAID_1.svg, CC BY-SA 3.0, <a href="https://commons.wikimedia.org/w/index.php?curid=11995780" rel="external nofollow">https://commons.wikimedia.org/w/index.php?curid=11995780</a></em> )
</p>

<p>
	Allerdings sind 3 Festplatten jetzt eine Ausnahme, ähnlich wie beim RAID 5 werden die Platten zusammengefügt und die Blöcke durchnummeriert. Jede ungerade Nummer bekommt Daten, jede gerade Block-Nummer nur eine Kopie des Blocks davor - alles wieder rotierend auf die Platten verteilt.
</p>

<p>
	<strong>Sonstige </strong>Es gibt noch mehr RAIDs die aber eher unbekannt sind und selten vorkommen. Da diese im Praxisgebrauch Ausnahmen bilden gehe ich hier nicht weiter auf sie ein.
</p>

<p>
	 
</p>

<p>
	<strong>Die Berechnung des verfügbaren Speichers</strong>
</p>

<p>
	Nehmen wir an wir haben 3 Festplatten mit jeweils 1TB:
</p>

<p>
	<u>RAID 0 </u>ist einfach. Beim RAID 0 können wir alle 3 Platten benutzen, wir schreiben und lesen auf allen 3 gleichzeitig, haben nichts doppelt, können also die vollen <u>3 TB</u> ausnutzen. Wir zählen also einfach alle 3 Platten zusammen.
</p>

<p>
	<u>RAID 1</u> ist ebenfalls einfach, allerdings macht es hier keinen Sinn 3 Platten als Beispiel zu haben (das würde jemand tun der davon ausgeht das 2 Platten zur exakt gleichen Zeit ausfallen). Nehmen wir also an wir haben 2. Wir spiegeln die Platten, haben also nur die <u>Hälfte des Gesamtspeichers</u> zur Verfügung - also nur die Kapazität einer Platte.
</p>

<p>
	<u>RAID 5</u> ist auch nicht sooo schwer. Mit ein wenig Hintergrundwissen und logischem Denken kriegen wir das hin. Was wir hier wissen müssen: Die Datenblöcke und die Parität haben immer dieselbe Größe. Ob ich nun (bei 5 Platten) meine Daten auf 4 verteile und die Parität auf die 5te Platte setze, oder ob ich (bei 3 Platten) meine Daten auf 2 verteile und die 3. Platte die Parität bekommt. Also trotz das die Parität immer auf einem anderen Laufwerk liegt können wir damit rechnen, dass wir immer <u>1 Platte als Speicherplatz für die Paritäten bei der Berechnung der Speicher-Kapaität abziehen</u> müssen. Bei unseren 3 Festplatten macht das 2 TB, bei 5 Platten wären es 4TB. Besonders ist hier das wir prozentual mehr Speicher zur Verfügung haben, je mehr festplatten wir benutzen. Bei 3 Platten haben wir 66% Speicher frei zur Verfügung (2 von 3). Bei 4 sind es 75% (3 von 4) und bei 5 Festplatten 80% (4 von 5),...
</p>

<p>
	<u>RAID 6</u> ist nachdem wir uns mit RAID 5 herumgeschlagen haben wieder ähnlich. Statt immer 1 Festplatte mit Parität haben wir hier immer 2 Festplattend ie Paritäten beinhalten und uns dementsprechend nicht zur Speicherung der eigentlichen Daten zur Verfügung stehen. Also immer (Anzahl Festplatten - 2). Auch hier wieder: Je mehr Festplatten desto lohnenswerter ist der zur Verfügung stehende Speicherplatz.
</p>

<p>
	<u>RAID 10/01</u> sind ebenfalls einfach. Egal wieviele Platten wir haben, wir haben immer die Hälfte vom Gesamtspeicher - wir kopieren unsere Daten ja wieder.
</p>

<p>
	 
</p>

<p>
	Schlussendlich gibt es nur noch eine Anmerkung: Viele Server bieten ein sogenanntes <u>Hot-Spare-Laufwerk</u>. Zusätzlich zu den Platten die ihr für euer RAID braucht (für welches auch immer ihr euch entscheidet) wird hier noch eine Platte angeschlossen. Die macht erstmal gar nichts, sie hängt da halt, ganz ohne Daten.
</p>

<p>
	Richtig konfiguriert sollte der Controller sobald eine Festplatte ausfällt sämtliche Daten der defekten Platte auf die spare(="ungenutzt")-Platte schreiben (deswegen haben wir ja einen RAID, die Daten lassen sich rekonstruieren, selbst wenn die ausgefallene Platte absolut kein lebenszeichen mehr von sich gibt). <span style="color:#c0392b;">Fällt in dieser Zeit der 'rekonstruktion' eine der anderen Platten aus sind die Daten weg! </span><span>(Ausnahme RAID 6) Hat man keine Spare-Platte muss man schnell handeln. Wird man darauf aufmerksam gemacht das eine Festplatte ausgefallen ist kann man diese entfernen (das geht meist auch im laufenden Betrieb) und eine neue Platte in den Server schieben, der Vorgang zur Rekonstruktion sollte automatisch erfolgen.</span>
</p>

<p>
	 
</p>

<p>
	<span>Fragen, Anregungen oder Ergänzungen? Immer her damit.</span>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">33</guid><pubDate>Wed, 06 Jun 2018 09:03:00 +0000</pubDate></item><item><title>Usability und du - Ein Seminarbericht und eine &#xDC;bersicht &#xFC;ber UI/UX</title><link>https://www.fachinformatiker.de/blogs/entry/31-usability-und-du-ein-seminarbericht-und-eine-%C3%BCbersicht-%C3%BCber-uiux/</link><description><![CDATA[<p>
	Hallo Welt!
</p>

<p>
	Nach einer längeren Zeit der Beitragsflaute mal wieder ein neuer Post. Dafür gibt es dieses mal auch etwas mehr und wieder einen Veranstaltungsbericht. Dieses mal jedoch nicht von einer Konferenz, sondern von einem Seminar mit anschließender Prüfung zur Zertifizierung.
</p>

<p>
	Vom 05.07.2016 bis zum 07.07.2016 bin ich mit einem Kollegen in Köln auf einer prüfungsvorbereitenden Schulung zum Thema "Usability Engineering and User Experience" gewesen und habe dort einiges an Wissen erworben, das ich gerne auszugsweise(da sonst jeglichen Rahmen sprengend) mit euch teilen möchte.
</p>

<h3 style="text-align:center;">
	Innovative Software braucht doch keine Kreativität "UX aus der Dose"
</h3>

<p>
	Im April 2016 habe ich mit zwei Kollegen die "<a href="http://www.infodays.de/osid2016/konferenz/konferenzprogramm.html" rel="external nofollow">OBJEKTspektrum information days</a>" in Frankfurt am Main besucht und dort einen <a href="http://www.infodays.de/osid2016/konferenz/konferenzprogramm/vortrag/fra-5/title/innovation-onhne-kreativitaet-ein-usability-engineering-how-to-guide.html" rel="external nofollow">extrem interessanten Vortrag</a> von einem mir recht sympathischen Sprecher gesehen.
</p>

<p>
	In dem Vortrag mit dem provokanten Titel "Innovative Software braucht doch keine Kreativität – Ein Usability-Engineering How-to-Guide" beschrieb der Sprecher Herr Thomas Geis, wie man mithilfe der <a href="https://de.wikipedia.org/wiki/EN_ISO_9241" rel="external nofollow">EN ISO 9241</a> und anderer Erkenntnisse aus dem Bereich "Entwicklung gebrauchstauglicher Produkte" mit rein methodischem Vorgehen sogenannte "Erfordernisse" an ein Produkt identifizieren kann, die unabhängig von bisherigen Lösungen oder Anforderungen oft exakt das beschreiben, was eigentlich vom Benutzer gewünscht wird.
</p>

<p>
	Beispiel gefällig? Heizungsventile kennt ja so ziemlich jeder. Üblicherweise sind die irgendwie zum Drehen und haben von 0-5 eine Skala drauf, wobei man eigentlich nie weiß, welche Zahl welche Temperatur bedeutet.
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_left" href="https://devopsdad.files.wordpress.com/2016/12/thermostat-250556_1920.jpg" rel="external nofollow" style="float:left;"><img alt="Ein beliebiges Standard-Thermostat" height="154" src="https://devopsdad.files.wordpress.com/2016/12/thermostat-250556_1920.jpg?w=300" style="width:232px;height:auto;" width="232" loading="lazy"></a>
</p>

<p>
	<em>&lt; Ein beliebiges Standard-Thermostat</em>
</p>

<p>
	Ein Erfordernis an ein Heizungsventil oder eine "Heizeinrichtung" allgemein lautet jedoch eher so:
</p>

<p>
	"Der Benutzer muss wissen, welchen Wert er eingeben muss um eine gewünschte Raumtemperatur zu erreichen."<br>
	Daraus ergibt sich, wenn man genau ist, nicht die Anforderung<br>
	"<em>Der Benutzer muss am System an einem Drehregler einen Wert von 0-5 einstellen können</em>", sondern eher etwas wie "<em>Der Benutzer muss am System die gewünschte Zieltemperatur eingeben können.</em>"
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_right" href="https://devopsdad.files.wordpress.com/2016/12/ventil_digital.jpg" rel="external nofollow" style="float:right;"><img alt="Heizungsventil mit Temperatureinstellung" height="185" src="https://devopsdad.files.wordpress.com/2016/12/ventil_digital.jpg?w=263" style="width:162px;height:auto;" width="162" loading="lazy"></a>
</p>

<p>
	Was passiert, wenn man so eine Anforderung konsequent zu einem sogenannten "interaktiven System" weiterentwickelt, sieht man beispielhaft <a href="https://www.amazon.de/gp/product/B000KNE738" rel="external nofollow">hier</a>. Das System ist bezüglich der Temperaturmessung im Raum zwar noch nicht zu 100% ausgereift, aber ein gefühlter Quantensprung an "Mehrkontrolle" gegenüber einem regulären Heizungsventil. Denn sind wir mal ehrlich, wer kennt die Situationen nicht, in denen man wie ein Verrückter zwischen "2.5" und "4.5" am Heizungsventil hin- und herdreht.
</p>

<p>
	Noch spannender wird es, wenn man den Nutzungskontext einer "Heizung" genauer analysiert. Dann stellt man schnell fest, dass es nicht darum geht, eine "Zieltemperatur einzustellen", sondern dass es "angenehm temperiert ist". Analysiert man diesen Gedanken weiter, könnte es z.B. mit einem "Wearable Computer" verbinden um anhand der Körpertemperatur und der Entfernung zum Haus die Heizung so anzuschalten, dass die Wunschtemperatur immer automatisch gehalten wird. Fahre ich also weg, fährt die Heizung so weit herunter, dass sie, wenn ich jetzt umdrehen würde, bei der Ankunft zu Hause wieder auf der "Wohlfühltemperatur" steht. Boom! Innovation. Etwas, das als neu oder mit "Wow"-Effekt wahrgenommen wird, weil es bestehende Prozesse drastisch vereinfacht, verbessert oder einfach völlig anders löst als bisher bekannt.
</p>

<h3 style="text-align:center;">
	Das Seminar - "Usability in a nutshell"
</h3>

<p>
	Angefixt von dem Talk auf der Konferenz haben mein Kollege und ich uns also ein gutes halbes Jahr später im Mietwagen nach Richtung Köln auf den Weg gemacht. Dadurch, dass der Talk auf der Konferenz so gut war, haben wir uns auch direkt dazu entschieden, das <a href="http://www.procontext.com/seminare/cpux-certified-professional-foundation-level.html" rel="external nofollow">Training </a>ebenfalls bei Herrn Geis von der Firma ProContext durchzuführen. Bevor jemand fragt, ich kassiere hier keine Provision, ich bin einfach wirklich begeistert von den Inhalten und der Art der Vermittlung.
</p>

<p>
	<a href="https://devopsdad.files.wordpress.com/2016/12/menschzentrierter_gestaltungsprozess.png" rel="external nofollow"><img alt='"Human centered design process"' height="362" src="https://devopsdad.files.wordpress.com/2016/12/menschzentrierter_gestaltungsprozess.png?w=300" style="width:300px;height:auto;" width="483" loading="lazy"></a>
</p>

<p>
	<em>"Human centered design process"</em>
</p>

<p>
	Nach dem Check-In im B&amp;B-Hotel Köln/Messe und einem sehr geschmeidigen Abendessen in einem mexikanischen Restaurant ging es am nächsten Morgen ausgeschlafen und frisch gestärkt mit dem Zug Richtung Innenstadt zum Konferenzhotel direkt am Kölner Dom.
</p>

<h4 style="text-align:center;">
	Tag 1 -  Usability-Basics
</h4>

<p>
	Bevor in tatsächliche Übungen eingestiegen werden konnte, gab es erstmal eine ordentliche Portion Theorie. Denn bei der Herstellung gebrauchstauglicher Produkte gibt es eine Menge Dinge, die einem begegnen können, die sehr präzise eingeordnet werden müssen, um sie richtig zu deuten. Die ISO-9241 und die Seminarinhalte vermitteln uns genau diese Sprache, diese Begriffe mit denen es möglich ist, solche Themen und diffusen Konzepte konkret zu benennen und damit zu arbeiten.
</p>

<p>
	<a href="https://devopsdad.files.wordpress.com/2017/08/ux_agenda_tag_1.jpg" rel="external nofollow"><img alt="ux_agenda_tag_1.jpg" height="214" src="https://devopsdad.files.wordpress.com/2017/08/ux_agenda_tag_1.jpg?w=300" style="width:300px;height:auto;" width="380" loading="lazy"></a>
</p>

<p>
	<em>Programmübersicht Tag 1</em>
</p>

<p>
	Themen waren unter anderem "Erfordernisse", "Anforderungen" und was deren Unterschied ist. Ein Erfordernis z.B. ist oft unbewusst, ein sogenanntes "implied need" und muss systematisch im Nutzungskontext erhoben werden. Eine Anforderung wiederum befriedigt bei Erfüllung ein Erfordernis und basiert auf diesem. An 2 Beispielen möchte ich das kurz exemplarisch für andere erläuterte Begriffe darlegen. Alles ausführen kann und möchte ich hier nicht, das würde a) den Rahmen sprengen und <img alt="B)" data-emoticon="" src="https://www.fachinformatiker.de/uploads/emoticons/default_cool.png" title="B)" loading="lazy"> müsste ich euch das vermutlich beim Lesen in Rechnung stellen. <img alt=";)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_wink.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/wink@2x.png 2x" title=";)" width="20" loading="lazy"></p>

<h5>
	Erfordernis
</h5>

<p>
	<strong>Syntax</strong>: Die <strong>&lt;Benutzergruppe&gt;</strong>, muss <span style="color:#ff6600;">XXX wissen / verfügbar haben,</span> um <span style="color:#0000ff;">YYY entscheiden / tun zu können</span>.
</p>

<p>
	Es gibt also immer eine <span style="color:#ff6600;">Voraussetzung</span> und einen <span style="color:#0000ff;">Zweck</span>, die im Erfordernis festgehalten sind, welches wiederum im Nutzungskontext verankert sein muss.
</p>

<p>
	Ein Beispiel für eine Vorrichtung zum Garen von Eiern:
</p>

<blockquote>
	<p>
		Der Benutzer muss <span style="color:#ff6600;">den Garzustand des Eis kennen</span>, um <span style="color:#0000ff;">entscheiden zu können, ob er es im Garvorgang belässt oder nicht</span>.
	</p>
</blockquote>

<h5>
	Anforderung
</h5>

<p>
	<strong>Syntax</strong>: Der Benutzer muss am System ZZZ
</p>

<ul><li>
		<span style="color:#0000ff;">erkennen</span>/<span style="color:#0000ff;">überblicken</span> können
	</li>
	<li>
		<span style="color:#0000ff;">auswählen</span> können
	</li>
	<li>
		<span style="color:#0000ff;">eingeben</span> können
	</li>
</ul><p>
	Daraus ergäbe sich für unsere Garvorrichtung folgende beispielhafte Anforderung:
</p>

<blockquote>
	<p>
		Der Benutzer muss am System den Garzustand der darin befindlichen Eier <span style="color:#0000ff;">erkennen</span> können.
	</p>
</blockquote>

<p>
	Wie diese Anforderung jetzt technisch umgesetzt wird, ist an dieser Stelle bewusst offen gehalten. Ob eine grafische Anzeige, eine Push-Mitteilung auf das Smartphone (IoT ist ja in aller Munde momentan), eine Melodie oder was auch immer das "Beste" ist, wird im Anschluss im Test überprüft.
</p>

<p>
	Des weiteren wurden die <a href="https://devopsdad.wordpress.com/2017/07/13/die-7-dialogprinzipien/" rel="external nofollow">7 Dialogprinzipien</a> und ihren Auswirkungen auf die Gestaltung von Nutzungsschnittstellen thematisiert.
</p>

<p>
	Am Ende des ersten Workshop-Tages wurden gemeinsam in Übungen aus Nutzungskontextbeschreibungen Erfordernisse und aufbauend darauf Anforderungen her- bzw. abgeleitet. Interviews und Nutzerbeobachtungen spielen dabei im Vorfeld eine entscheidende Rolle.
</p>

<p>
	Der Tag war also schon gefüllt mit ordentlich Inhalt, sowohl qualitativ als auch quantitativ. Und es zeichnete sich nicht ab, dass das weniger werden sollte. Im Gegenteil.
</p>

<p>
	Um die Inhalte gebührend zu verarbeiten und Platz für Neues zu machen, gönnten wir uns mit einem Teil der Truppe nach einem Besuch des Weihnachtsmarktes am Kölner Dom gemeinsam im "Früh am Dom" noch das ein oder andere Kölsch.
</p>

<h4 style="text-align:center;">
	Tag 2 - Entwickeln und Testen von UI/UX-Lösungen
</h4>

<blockquote>
	<p style="text-align:center;">
		“If the user can’t use it, it doesn’t work” –Susan Dray
	</p>
</blockquote>

<p>
	Noch leicht schwammig im Kopf vom Kölsch ging es mit der Bahn zurück zum Hauptbahnhof und von da aus ins Schulungshotel.
</p>

<p>
	Wenn Tag 1 den Fokus darauf legte, die Basis zu legen und Erfordernisse und Anforderungen zu sammeln, war der Hauptinhalt von Tag 2, zu erkunden, wie man dieses Wissen jetzt in ein Produkt, oder besser, einen Prototypen bzw. eine evaluierbare Geschäftsidee überführt.
</p>

<p>
	Der oben schon verlinkte "Menschzentrierte Prozess zur Gestaltung gebrauchstauglicher interaktiver Systeme" war die Basis, auf der der zweite Tag basierte. 
</p>

<p>
	Nachdem man Erfordernisse identifiziert und Anforderungen hergeleitet hat, ist der nächste Schritt im Prozess, eine Designlösung zur Evaluierung zu erarbeiten. Auf gut deutsch: "Einen Prototypen zum Testen bauen."
</p>

<p>
	Dafür gibt es natürlich verschiedene Dinge, die man beachten muss. Ein paar Begriffe, Konzepte und Informationen, die dazu gehören, will ich hier exemplarisch auflisten.
</p>

<p>
	<a href="https://devopsdad.files.wordpress.com/2017/08/plug-adapter-978607_1920.jpg" rel="external nofollow"><img alt="plug-adapter-978607_1920.jpg?w=300" height="175" src="https://devopsdad.files.wordpress.com/2017/08/plug-adapter-978607_1920.jpg?w=300" width="263" loading="lazy"></a>
</p>

<p>
	<em>Kippschalter - Benutzung offensichtlich</em>
</p>

<p>
	<strong>Affordance -Aufforderungscharakter</strong> Der Grad der Affordance beschreibt, wie sehr ein Element in einer Nutzungsschnittstelle zu seinem korrekten Gebrauch auffordert. Einem Schalter ist z.B. recht deutlich anzusehen, dass man ihn umlegen kann. Ich habe allerdings auch schon Dimmschalter gesehen, die man zum Anschalten nach unten "streicheln" musste und zum Abschalten bzw. dimmen nach oben. Aus Usability-Sicht ein ziemlicher Griff ins Klo.
</p>

<p>
	<strong>Intuitiv</strong>
</p>

<p>
	Im Usability-Sprech spricht man von Intuitivität, wenn die Benutzung eines interaktiven Systems unabhängig von der Erfahrung, vom Wissen, von den Sprachkenntnissen und dem momentanten Konzentrationsgrad des Benutzers unmittelbar verständlich ist.
</p>

<p>
	Das heißt in der Praxis, dass ein Geldautomat dann intuitiv ist, wenn man ihn am Ballermann als 16-Jähriger, der zum zweiten mal in seinem Leben Geld abhebt, grade bierbedingt 2,5 Promille intus hat trotzdem bedienen kann. Obwohl der Automat grade in "Spanisch" eingestellt ist. Leichter gesagt als getan also.
</p>

<p>
	<strong>Mentales Modell</strong>
</p>

<p>
	Unter einem "Mentalen Modell" versteht man die Vorstellung, die ein Mensch von der Umgebung, den Menschen und Dingen hat, mit denen er interagiert. 
</p>

<p>
	<a href="https://devopsdad.files.wordpress.com/2017/08/tap-1937219_1920.jpg" rel="external nofollow"><img alt="tap-1937219_1920.jpg?w=300" height="169" src="https://devopsdad.files.wordpress.com/2017/08/tap-1937219_1920.jpg?w=300" width="300" loading="lazy"></a>
</p>

<p>
	<em>Wasserhahn mit klassischer "blau - kalt, rot - warm"-Färbung</em>
</p>

<p>
	Das Mentale Modell von einem Wasserhahn ist bei den meisten Menschen so konzipiert, dass es einen Griff zum Starten des Wasserflusses und einen Schieberegler zum Einstellen der Temperatur gibt. Das wäre das "Systemmodell". Ein Mensch, der zum ersten mal einen Wasserhahn mit Berührungssensor benutzen möchte, wird vermutlich Probleme damit haben, wenn er bis dahin noch keinen Kontakt zu dieser Technik hatte.
</p>

<p>
	Ein paar Jahre vorher gab es z.B. noch nicht mal den stufenloser Schieberegler am Mischer. So musste man noch manuell heißes bzw. kaltes Wasser aufdrehen, bis man die gewünschte Zieltemperatur erreicht hat. Moderne Systeme bieten hier (zumindest in der Dusche) oft schon eine  auf den Regelmechanismus geätzte Temperaturskala an, die die Benutzung erleichtert. 
</p>

<p>
	Wichtig ist für das mentale Modell jedoch diese Aussage.
</p>

<blockquote>
	<p>
		Passen mentales Modell und Systemmodell nicht zusammen, sind Nutzungsprobleme vorprogrammiert.
	</p>
</blockquote>

<p>
	Joel Spolsky, Gründer von Trello und Mitgründer von Stack Exchange, hat dazu vor 17 Jahren(!) einen <a href="https://www.joelonsoftware.com/2000/04/11/figuring-out-what-they-expected/" rel="external nofollow">Blogpost </a>geschrieben, der immer noch Relevanz hat. 
</p>

<p>
	Neben diesen Konzepten wurde den "7 Dialogprinzipien" an diesem Tag erneut verstärkt Zeit gewidmet. Dazu habe ich in meinem <a href="https://devopsdad.wordpress.com/2017/07/13/die-7-dialogprinzipien/" rel="external nofollow">letzten Blogbeitrag </a>aber schon ausführlich etwas geschrieben.
</p>

<p>
	Ein weiteres Thema waren verschiedene Gestaltungsrichtlinien, sogenannte "Styleguides" oder "Design Patterns". Hierbei handelt es sich um Vorgaben, wie z.B. ein Button, eine Tabelle oder der gesamte Checkout Vorgang in einer Webseite (das wäre ein Design Pattern) aussehen sollte. Die meisten großen Hersteller von Software bieten so etwas übrigens an. Auf der <a href="http://procontext.de/standards/ui-hersteller-styleguides.html" rel="external nofollow">Homepage unseres Trainingsanbieters</a> findet ihr dazu einer super Übersicht.
</p>

<p>
	Nach einer kurzen Exkursion zur Gestaltung verschiedener Prototypen (z.B. Papierskizze, Storyboard, Wireframe, etc.) ging es zum Ende hin dann zum großen Thema "Evaluierung der Designlösungen", also dem Test der Prototypen. Diesem Kapitel, das unter anderem Fokusgruppen, Benutzerbefragungen und Usability Tests beinhaltet, werde ich mich aber aufgrund des Umfangs in einem gesonderten Blogbeitrag widmen.
</p>

<p>
	Wir schlossen den Tag mit einer Übersicht über die verschiedenen Rollen im Usability Engineering Prozess, ein paar Übungsaufgaben und einem prall gefüllten Kopf für den morgigen Prüfungstag.
</p>

<h4 style="text-align:center;">
	Tag 3 - Prüfung zur Zertifizierung zum "UXQB® Certified Professional for Usability and User Experience – Foundation Level (CPUX-F)"
</h4>

<p>
	Den Vormittag und den ersten Teil des Nachmittags wendeten wir am Mittwoch zur Aufarbeitung der Inhalte zum Überprüfen der Gestaltungslösungen (also Usability Testing und co.) auf. 
</p>

<p>
	Am Nachmittag wurde es dann spannend. Die Prüfung stand an. Dazu folgende Rahmenbedingungen.
</p>

<ul><li>
		40 Fragen
		<ul><li>
				Zum Bestehen müssen 28 von 40 Punkten erreicht werden (70%)
			</li>
		</ul></li>
	<li>
		75 Minuten
	</li>
	<li>
		Keine Hilfsmittel erlaubt
	</li>
	<li>
		Jede Frage hat 6 Antwortmöglichkeiten, bei denen eine "signifikant richtiger" ist als die anderen
		<ul><li>
				Gibt es nur eine richtige Antwort, gibt es einen Punkt für eine richtige und null Punkte für eine falsche Antwort
			</li>
		</ul></li>
	<li>
		Manche Fragen haben 2 oder 3 "signifikant richtigere" Antworten, wenn dies der Fall ist, geht es aber aus der Aufgabe deutlich hervor
		<ul><li>
				Gibt es mehrere richtige Antwortmöglichkeiten, gibt es für jede richtige Antwort 1/AnzahlMöglichkeiten Punkte. Für jede falsche Antwort gibt es 1/AnzahlMöglichkeiten Punkte Abzug. Die Gesamtpunktzahl kann aber nie negativ sein.
			</li>
		</ul></li>
</ul><p>
	Die Fragen wurden, soweit ich das beurteilen kann allesamt durch die Übungen und Beispiele im Training im Vorfeld abgedeckt. So habe ich es dann auch geschafft, stolze 87,50% zu erreichen. Die Schwierigkeit der Fragen war allerdings stark gemischt. So gab es von relativ einfachen Fragen wie "Bei welchen der folgenden Begriffe handelt es sich um Dialogprinzipien?", wo die Lösung einfach aufgrund der Namen recht simpel war bis hin zu sehr schwierigen Fragen, wo mehrere Lösungen tatsächlich richtig waren, aber eine eben ein "Stückchen richtiger" als die anderen eine große Durchmischung. Da ging es z.B. um eine Fehlermeldung in Form eines Fehlercodes nach einer Datumseingabe in einer Webseite und einen Vorschlag zur Verbesserung. Gegeben waren von der ausführlicheren Fehlermeldung hin zum "Tutorial" verschiedene Möglichkeiten. Die richtige war jedoch, die Datumseingabe durch eine Datumsauswahl zu ersetzen, um Tippfehler, die erst validiert werden müssen überflüssig zu machen. So einfach kann's gehen.
</p>

<p>
	Alles in allem machbar, aber knackig.
</p>

<h4>
	Fazit
</h4>

<p>
	Meiner Meinung nach waren das drei sehr gelungene Tage und wohl investiertes Geld. Geld heißt hier 1.500€ zzgl. MwSt. für das Training und 300€ zzgl. MwSt. für die Prüfung. Eine Rückerstattung bei Nicht Bestehen gibt es hier selbstverständlich nicht.
</p>

<p>
	Obwohl die Möglichkeit besteht, sich extern auf die Prüfung vorzubereiten und die Unterlagen dafür im<a href="http://uxqb.org/de/dokumente/" rel="external nofollow"> Internet frei verfügbar</a> sind, halte ich ein vorbereitendes Training für sehr wertvoll, um das Wissen im Kontext richtig einordnen zu können. Darüberhinaus hat man durch den Kontakt mit anderen Teilnehmern die Möglichkeit, sich über Praxiswissen und echte Anwendungsfälle direkt austauschen zu können, was in der Gruppe sehr wichtig war.
</p>

<p>
	Ich gucke heute noch regelmäßig in meine Schulungsmappe und das im Training bzw. für die Prüfung erworbene Seminar hilft mir tatsächlich, im Alltag bessere Entscheidungen zu treffen, wenn es um Produkt- oder Prozessgestaltung geht. Und da ist egal, ob es sich um digitale Produkte handelt oder "welche zum Anfassen".
</p>

<p>
	Wenn ihr Fragen habt, zögert nicht, hier zu kommentieren oder mir zu schreiben.
</p>

<p>
	Gruß, euer "devopsdad" Patrick
</p>
]]></description><guid isPermaLink="false">31</guid><pubDate>Mon, 21 Aug 2017 09:44:00 +0000</pubDate></item><item><title>Praktikumssuche w&#xE4;hrend der Umschulung - Teil 2</title><link>https://www.fachinformatiker.de/blogs/entry/30-praktikumssuche-w%C3%A4hrend-der-umschulung-teil-2/</link><description><![CDATA[
<p>
	Hier geht es nun weiter mit dem Thema Praktikumssuche während der Umschulung. Diesmal geht es zuerst um die Suche nach passenden Betrieben. Mit dem richtigen Betrieb, könnt ihr bereits den Grundstein für eure spätere Karriererichtung legen.
</p>

<p>
	Anschließend gebe ich einige Tipps, extrahiert aus eigenen Erfahrungen, wodurch Bewerber um einen Praktikumsplatz, aber auch um einen Ausbildungsplatz negativ aufgefallen sind.
</p>

<p>
	Beachtet bitte auch hier: Dies stellt nur einen Leitfaden aus Erfahrungen dar, der euch keinen Erfolg garantiert, aber es euch hoffentlich ein gutes Stück leichter macht euer Praktikum und damit eure Umschulung erfolgreich zu absolvieren
</p>

<p>
	<span style="font-size:14px;"><strong>Die Suche nach passenden Betrieben</strong></span>:
</p>

<p>
	Viele Umschüler unterschätzen die Suche nach einem geeigneten Praktikum gewaltig, geraten unter Zeitdruck und müssen dann jedes Angebot annehmen, ob es ihnen nun zu ihnen passt oder nicht. Wer in solch eine Situation kommt, verliert den Einfluss darauf eine praktische Ausbildung zu erhalten, die zu den zukünftigen Karriereplänen passt. Ihr solltet euch daher bereits 5-8 Monate vor dem Praktikumsstart um einen Praktikumsplatz kümmern
</p>

<p>
	Zuerst solltet Ihr eine Liste von potenziellen Praktikumsbetrieben erstellen. Voraussetzung hierfür ist normalerweise, dass dieser Betrieb in dem Beruf bereits ausbildet und auch in der Lage ist einen Praktikanten zu beschäftigen. Solche Firmen könnt Ihr über Eure IHK, diverse Lehrstellenbörsen oder Praktikumssuchmaschinen finden. Universitäten, Hochschulen und wissenschaftliche Institute bilden inzwischen auch oft aus und nehmen auch immer mal wieder Praktikanten aller Fachrichtungen.
</p>

<p>
	Einer der sichersten und besten Möglichkeiten solche Firmen zu finden ist übrigens ein guter Umgang mit euren Mitumschülern der vorangegangenen Semester. Diese haben entweder bereits ein Praktikum hinter sich gebracht und können euch auch eine gute Einschätzung der dortigen Verhältnisse geben oder starten demnächst in ein Praktikum und haben dort dann bereits eine Zusage. Es lohnt sich hier eine weitere Liste anzulegen und alle diese Firmen separat zu sammeln. Eventuell mit einer kurzen Einschätzung der bisherigen Praktikanten. Frag doch auch einmal bei euren Dozenten nach, in welchen Firmen eure Vorgänger so waren. Gerade der Dozent, der für die Vorbereitung auf die Präsentationen zuständig ist, wird in den Übungen wohl den Namen des jeweiligen Praktikumsbetriebs mehrfach hören und sehen.
</p>

<p>
	Beim Anlegen Eurer Adressenliste solltet ihr darauf achten, wenn möglich, E-Mail-Adressen und Ansprechpartner mit zu erfassen. Wenn ihr so vorgeht, könnt ihr in wenigen Stunden eine beachtliche Liste von 50 – 500 Adressen zusammentragen. Ich rate euch zudem die Adressen an den Anfang zu stellen, von denen ihr wisst, dass sie bereits Praktikanten genommen haben.
</p>

<p>
	Auch solltet ihr hier bedenken, dass die meisten Firmen einfach keine Ressourcen für einen Umschüler haben, selbst wenn sie ausbilden. Hier kann bereits die zuständige IHK eine Grenze gesetzt haben. Die hiesige IHK sagt hierzu es sollte mindestens eine ausgebildete Fachkraft pro Azubi oder Umschüler vorhanden sein und einer der Fachkräfte muss zusätzlich Ausbilder im Betrieb sein. Ausnahmen bestätigen hier, wie immer, die Regel und letztendlich entscheidet eure IHK.
</p>

<p>
	 Es kann daher sehr wohl vorkommen, dass ihr 40 Bewerbungen fertigmacht und 40 Absagen bekommt die nur der einfachen Tatsache geschuldet sind, dass es keine solche Stelle im Unternehmen gibt. Davon erfahrt ihr natürlich nichts und der Frust ist groß, da man sich die Mühe gemacht hat 40 Bewerbungen und Anschreiben anzupassen.  Um euch eine Menge Arbeit und Frust zu ersparen, rate ich euch die Bewerbungen in 2 Schritten anzugehen.
</p>

<p>
	Statt jeder Adresse eine angepasste Bewerbung zukommen zu lassen, könnt ihr im 1. Schritt einen kleinen Text verfassen, indem ihr erklärt für welchen Zeitraum, warum und für welchen Beruf ihr einen Praktikumsplatz sucht. Und bei Interesse werdet ihr ihnen gerne eure kompletten Bewerbungsunterlagen zusenden. In dem Text könntet ihr beispielsweise ebenfalls unterbringen, dass ihr während des Praktikums über den Bildungsträger versichert seid, dieses Praktikum als Ausbildungspraktikum gilt und daher auch nicht unter das Mindestlohngesetz fällt und die Firma aufgrund anderweitiger Förderung auch ansonsten zu keinem finanziellen Ausgleich verpflichtet wäre. Diesen Text sendet ihr dann an alle Empfänger aus eurer Adressliste.
</p>

<p>
	Ihr könnt dies übrigens auch gleich als Übung für eure Skriptkünste nutzen und ein kleines Skript schreiben, mit dem aus eurer Liste die Ansprechpartner und Mailadressen ausgelesen und passend in der Mail eingetragen werden.  Es gibt auch eine einfache Möglichkeit über Thunderbird mithilfe von Addons Mails zu personalisieren.
</p>

<p>
	Alternativ könnt ihr die Liste natürlich auch einfach telefonisch durchgehen. Ihr erhaltet in so einem Fall die Antwort schneller und der Ansprechpartner bekommt einen ersten persönlichen Eindruck von euch. Andererseits kommt es auch sehr oft vor, dass ihr den Anprechpartner telefonisch nicht erreichen werdet. Dies kann ziemlich schnell frustrieren.
</p>

<p>
	Wenn nun eine positive Antwort eintrifft, verfasst ihr im 2. Schritt eine persönliche und auf das Unternehmen zurechtgeschnittene Bewerbungen
</p>

<p>
	<strong>Die Bewerbung</strong>
</p>

<p>
	Als Ausbilder habe ich eine Menge Bewerbungen von Azubis und später von Umschülern auf der Suche nach einem Praktikum gelesen. Daher hier ein paar Ratschläge daraus:
</p>

<p>
	Achtet darauf eine vernünftige E-Mailadresse zu verwenden. Mailadressen ohne Namensbezug oder Mails von der Domain einer anderen Firma machen oft einen schlechten ersten Eindruck. Legt euch lieber eine kostenlose Adresse an, die ihr nur für Bewerbungen benutzt. Signaturen mit witzigen Sprüchen oder der eigenen Firma haben in solchen Mails nichts zu suchen. Einige kostenlose E-Mailanbietern binden nach dem Versenden ihre eigene Werbesignatur in die Mail ein. Dies könnt ihr meist verhindern, indem ihr einen E-Mail-Client wie z.B. Thunderbird oder Outlook benutzt, anstatt der Weboberfläche. Ihr solltet euch erst einmal selber eine Mail senden, um zu sehen wie die Mail beim Empfänger ankommt.
</p>

<p>
	Bitte legt euch auf einem Dateityp fest. Es hinterlässt einen schlechten Nachgeschmack beim Empfänger, wenn ihr ein Sammelsurium an diversen Dateiformaten versendet, für die er mehrere Programme benötigt oder die er eventuell gar nicht lesen kann ohne ein weiteres Programm zu installieren. Bedenkt dabei, ein Personaler hat eventuell nur ein modernes Microsoft Word installiert und kann im schlimmsten Fall eure Bewerbung als .doc oder .odt überhaupt nicht öffnen. Vorzugsweise schickt ihr eine einzelne Pfd. Dies wird jeder Ansprechpartner öffnen können und es sieht immer gleich aus.
</p>

<p>
	Danach heißt es warten auf eine positive Antwort und auf den Start des Praktikums.
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">30</guid><pubDate>Thu, 17 Aug 2017 09:31:37 +0000</pubDate></item><item><title>Praktikumssuche w&#xE4;hrend der Umschulung - Teil 1</title><link>https://www.fachinformatiker.de/blogs/entry/29-praktikumssuche-w%C3%A4hrend-der-umschulung-teil-1/</link><description><![CDATA[
<p>
	Hallo, mein Username ist Sullidor, ich bin bereits einige Jahre in diesem Forum aktiv und bin nun gerne der Einladung gefolgt, mich doch am Blog zu beteiligen.
</p>

<p>
	Ich möchte mich hier zuerst mit dem Thema<em> „Praktikum während der Umschulung“</em> befassen. <span> </span>Hierbei fließen einmal meine eigenen Erfahrungen ein, da ich beide Seiten des Prozesses kenne. Ich habe dieses Praktikum und seine Phasen zuerst als Umschüler und später mehrfach als Ausbilder durchlaufen.<span>  </span>Zusätzlich habe ich mich für diesen Artikel mit einigen weiteren ehemaligen Umschülern ausgetauscht. Einige davon haben ähnlich positive Erfahrungen gemacht und arbeiten seitdem durchgehend in der IT. Andere wiederum versuchen seit Jahren erfolglos in der IT Fuß zu fassen.
</p>

<p>
	Dabei zeichnete sich bereits ein Muster ab, zwischen der grundsätzlichen Einstellung zur Umschulung, dem Praktikum, dem daraus resultierenden Verhalten und einer anschließenden positiven Karriere.
</p>

<p>
	Ich habe daraus einen kleinen Leitfaden entwickelt, der euch zwar keinen Erfolg garantiert, aber es euch ein gutes Stück leichter machen sollte euer Praktikum und damit eure Umschulung erfolgreich zu absolvieren. Ich habe diesen Leitfaden in verschiedene Teile unterteilt. Das erste Thema betrifft die Praktikumssuche und wurde vom mir in 2 Teile unterteilt.
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<b> 1. Teil </b><strong>Praktikumssuche</strong><b>: </b>
</p>

<p>
	<b>Grundsätzliches</b>
</p>

<p>
	Ein Praktikant während einer Umschulung muss zwar nicht von dem Praktikumsunternehmen bezahlt werden, kostet diesen Betrieb jedoch trotzdem Geld und bindet bezahlte Fachkräfte, die sich um den Umschüler kümmern, diesen beaufsichtigen und kontrollieren müssen. Im Normalfall ist es so, dass Praktikanten, nicht oder sehr selten produktiv eingesetzt werden können. <span> </span>Dazu kommen Kosten für die Bereitstellung eines Arbeitsplatzes, Arbeitsmaterialien, Soft- und Hardware inklusive Lizenzen sowie eventueller Arbeitskleidung.
</p>

<p>
	Ein Unternehmen muss auch beim Einsatz eines Praktikanten das ökonomische und das erwerbswirtschaftliche Prinzip beachten. Dieser Umstand wird gerne von Umschülern und gelegentlich auch von Firmen übersehen.
</p>

<p>
	Einige IT-Firmen haben nicht bewusst vor einen Umschüler als Praktikanten zu nehmen oder wissen über diese Möglichkeit nicht Bescheid.<span>  </span>Es lohnt sich also eventuell seinen Wunschbetreib davon zu überzeugen. Es ist auch nicht unbedingt in jedem Fall nötig, dass der Betrieb bereits ausbildet. Selbst wenn dort noch kein ADA-Schein vorhanden ist, so ist dies noch kein endgültiger <span> </span>Grund aufzugeben.
</p>

<p>
	In meinem Fall hat der IT-Teamleiter, in Absprache mit der IHK, erst zum Ende meines Praktikums seinen Ada- Schein erworben und das Institut bildet nun schon mehrere Jahre erfolgreich aus. Zusätzlich nimmt das Institut seitdem auch regelmäßig Umschüler als Praktikanten.
</p>

<p>
	Unternehmen, die einen Umschüler als Praktikanten aufnehmen, lassen sich, unserer Erfahrung nach, hinsichtlich Ihrer Motivation meist in 3 grobe Bereiche einteilen:
</p>

<p>
	In der <span> </span><em>1. Gruppe</em> sind die Firmen zu finden, die über die Praktikanten zukünftige Mitarbeiter suchen. Diese Firmen nutzen solche Praktika um einen potenziellen zukünftigen Mitarbeiter über eine längere Zeitspanne in der eigenen Produktivumgebung einzuarbeiten. Unternehmen dieser Gruppe übernehmen einen guten Praktikanten nach Ende seiner Umschulung für gewöhnlich. In dieser Gruppe befinden sich erfahrungsgemäß eher mehr mittelständische und große Unternehmen als kleine Firmen.
</p>

<p>
	Die <em>2. Gruppe</em> von Unternehmen sieht es als ihre Pflicht an, ihren Teil zu Ausbildung und Weiterbildung, inklusive Umschulung, zu leisten. Diese Unternehmen wollen den Umschüler zwar möglich gut ausbilden, haben aber keine Intention diesen später zu übernehmen. Hier finden sich besonders häufig Institutionen wieder, die sowieso bereits im Bereich Lehre sowie der Vermittlung und Schaffung von Wissen tätig sind, wie z.B. Universitäten, Hochschulen und wissenschaftliche Institute.
</p>

<p>
	Die <em>3. Gruppe</em> setzt sich aus Firmen zusammen, die in dem Praktikanten nur eine billige Arbeitskraft sehen und diesen auch so einsetzen. Diese Unternehmen sind meist kleine, inhabergeführte Firmen, die u.a. dadurch auffallen, dass sie versuchen mehrere Praktikanten auf einmal zu nehmen und die Praktikanten ohne Einarbeitungszeit oder Ansprechpartner produktiv eingesetzt werden. Diese Unternehmen haben weder ein Interesse daran den Umschüler später einzustellen, noch diesen aktiv auszubilden.<span>  </span>Da die Umschüler aber zu diesem Zeitpunkt noch keine ausgebildeten Fachkräfte sind und eigentlich in solch einem Praktikum das praktische Handwerkszeug erlernen sollen, kommt es oft irgendwann innerhalb der Praktikumszeiten zu Vorwürfen, der Praktikant würde nicht die nötigen Fachkenntnisse besitzen und sich nicht genug einbringen. Gelegentlich landen diese Firmen und der Umschüler dann im Streit um Arbeitszeugnisse oder Verleumdung gar vor Gericht. Mir ist übrigens bisher noch kein Fall zu Ohren gekommen, bei dem die Firma in solch einem Fall gewonnen hat.
</p>

<p>
	Soweit zu Teil 1 des Themas Praktikumssuche. Im 2. Teil werde ich mich mit der Suche nach passenden Betrieben beschäftigen und einige kleinere Anmerkungen zu eigentlichen Bewerbung machen.
</p>
]]></description><guid isPermaLink="false">29</guid><pubDate>Wed, 16 Aug 2017 11:00:00 +0000</pubDate></item><item><title>Die 7 Dialogprinzipen</title><link>https://www.fachinformatiker.de/blogs/entry/28-die-7-dialogprinzipen/</link><description><![CDATA[
<p>
	Hallo Welt!
</p>

<p>
	Jetzt gab es eine ganze Weile lang keine neuen Inhalte hier aber inspiriert durch einen interessanten Thread im Fachinformatiker.de-Forum habe ich mich entschlossen, einen Beitrag zu einem allgemein gültigen Thema zu schreiben, das mir seit einer Weile sehr am Herzen liegt.
</p>

<h1>
	Den 7 Dialogprinzipien - Intro
</h1>

<p>
	Die 7 Dialogprinzipien, in <a href="https://de.wikipedia.org/wiki/EN_ISO_9241" rel="external nofollow">ISO 9241</a>-110 als "Grundsätze der Dialoggestaltung" beschrieben, beschreiben, wie Nutzer mit interaktiven Systemen interagieren und welche Prinzipien dieser Interaktion allgemein zu Grunde liegen.
</p>

<p>
	Sie können positiv besetzt und erfüllt werden, oder verletzt. Werden sie verletzt, entstehen "Nutzungsfehler".
</p>

<p>
	<img alt="image.png.98d9655befba4d1e33ee121cc4d2065a.png" class="ipsImage ipsImage_thumbnailed ipsAttachLink_image" data-fileid="6218" src="https://www.fachinformatiker.de/uploads/monthly_2017_07/image.png.98d9655befba4d1e33ee121cc4d2065a.png" style="width:300px;height:auto;" loading="lazy"></p>

<p>
	 Nicht so, Eierlegende Wollmilchsau, CC-BY-SA 2.5, Autor: Georg Mittendecker, Entnommen aus: <a href="https://commons.wikimedia.org/wiki/File:Wollmilchsau.jpg" rel="external nofollow">https://commons.wikimedia.org/wiki/File:Wollmilchsau.jpg</a>
</p>

<p>
	Wichtig ist hier die feine Unterscheidung der Begrifflichkeiten. Ich spreche von "Nutzungsfehlern" nicht von "Nutzerfehlern". Interaktive Systeme, deren Benutzungsschnittstellen(User Interfaces) so gebaut sind, dass sie zum Nutzungskontext der angepeilten Benutzergruppe passen, sind wesentlich weniger fehleranfällig als Systeme, die versuchen, die eierlegende Wollmilchsau für "alle Benutzer jemals" zu sein. Eine nicht vollständige oder fehlerhafte Benutzergruppenanalyse ist einer der Hauptgründe für viele Usability-Probleme und unzufriedene Benutzer.
</p>

<p>
	Aber genug Einführung. Hier kommen sie.
</p>

<h2>
	Die 7 Dialogprinzipien - Übersicht
</h2>

<p>
	<em>Vorweg</em>: Die Großzahl auftretender Nutzungsfehler entsteht aus Verletzungen der ersten 3 hier genannten Dialogprinzipien.
</p>

<p>
	Zur Illustrierung der Dialogprinzipien halten wir uns an die folgende Aufgabe: "<strong>Einen Mietwagen buchen</strong>".
</p>

<h3>
	Aufgabenangemessenheit
</h3>

<p>
	Ein interaktives System ist aufgabenangemessen, wenn es den Benutzer unterstützt, seine Arbeitsaufgabe zu erledigen, d. h., wenn Funktionalität und Dialog auf den charakteristischen Eigenschaften der Arbeitsaufgabe basieren, anstatt auf der zur Aufgabenerledigung eingesetzten Technologie. Es kommen keine unnötigen oder nicht zur Lösung der Aufgabe benötigten Schritte vor.
</p>

<p>
	<img alt="image.png.273d64ead3550732570a3d25783ae811.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6217" src="https://www.fachinformatiker.de/uploads/monthly_2017_07/image.png.273d64ead3550732570a3d25783ae811.png" loading="lazy"></p>

<p>
	<em>Standort-Buchung hertz.de, Screenshot, aufgenommen am 13.07.2017</em>
</p>

<p>
	<em>Beispiel: Wenn ich bei hertz.de als Standort "Kassel" auswähle, kann ich die Standortgruppe "Kassel DE (4 locations)" anwählen. Erst wenn ich alle anderen Eingaben getätigt habe und im Formular weitergehen möchte, muss ich einen spezifischen Standort auswählen. Ein unnötiger Schritt, den man direkt im ersten Formular bearbeiten können sollte.</em>
</p>

<p>
	 
</p>

<h3>
	Selbstbeschreibungsfähigkeit
</h3>

<p>
	Ein Dialog ist in dem Maße selbstbeschreibungsfähig, in dem für den Benutzer zu jeder Zeit offensichtlich ist, in welchem Dialog, an welcher Stelle im Dialog er sich befindet, welche Handlungen unternommen werden können und wie diese ausgeführt werden können.
</p>

<p>
	<em>Beispiel: In einem weißen Suchfeld zur Fahrzeugsuche steht neben einer Lupe der Text "Hier können Sie durch Texteingabe Fahrzeugtypen suchen"</em>
</p>

<h3>
	Erwartungskonformität
</h3>

<p>
	Ein Dialog ist erwartungskonform, wenn er den aus dem Nutzungskontext heraus vorhersehbaren Benutzerbelangen sowie allgemein anerkannten Konventionen entspricht.
</p>

<p>
	<em>Beispiel: Ein Klick auf ein kleines Kalender-Icon in einem Auswahlbereich zur Abholung des Fahrzeugs öffnet ein Datepicker-Steuerelement.</em>
</p>

<h4>
	Erlernbarkeit / Lernförderlichkeit
</h4>

<p>
	Ein Dialog ist lernförderlich, wenn er den Benutzer beim Erlernen der Nutzung des interaktiven Systems unterstützt und anleitet.
</p>

<p>
	<em>Beispiel: Wenn erkannt wird, dass der Benutzer die Webseite zum ersten mal besucht, wird er durch ein Assistenzprogramm und verschiedene Highlights durch den Buchungsprozess geleitet. (Abdunkeln von zum momentanen Zeitpunkt nicht benötigten Steuerelementen) </em>
</p>

<h4>
	Steuerbarkeit
</h4>

<p>
	Ein Dialog ist steuerbar, wenn der Benutzer in der Lage ist, den Dialogablauf zu starten sowie seine Richtung und Geschwindigkeit zu beeinflussen, bis das Ziel erreicht ist.
</p>

<p>
	<em>Negativbeispiel: Eine fehlerhafte Eingabe in einem Kontaktformular führt dazu, dass der Nutzer das gesamte Formular erneut ausfüllen muss, anstatt an den Punkt zu springen, in dem die Falscheingabe liegt.</em>
</p>

<h4>
	Fehlertoleranz
</h4>

<p>
	Ein Dialog ist fehlertolerant, wenn das beabsichtigte Arbeitsergebnis trotz erkennbar fehlerhafter Eingaben entweder mit keinem oder mit minimalem Korrekturaufwand seitens des Benutzers erreicht werden kann.
</p>

<p>
	<em>Beispiel 1: Der Benutzer gibt im Texteingabefeld das Datum "23.12.2017" ein. Das System gibt einen Fehler aus und weist ihn darauf hin, dass das Datumsformat dem folgenden Schema genügen muss. "MM-DD-YYYY". Noch besser wäre hier allerdings, statt einer Benutzereingabe eine Auswahl durch z.B. ein Datepicker-Element zu ermöglichen.</em><em>Beispiel 2: Der Benutzer gibt eine E-Mail Adresse im <a href="http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx/" rel="external nofollow">falschen Format </a> an und erhält eine Fehlermeldung, die als Beispiel ein korrektes Format anzeigt.</em>
</p>

<h4>
	Individualisierbarkeit
</h4>

<p>
	Ein Dialog ist individualisierbar, wenn Benutzer die Mensch-System-Interaktion und die Darstellung von Informationen ändern können, um diese an ihre individuellen Fähigkeiten und Bedürfnisse anzupassen.
</p>

<p>
	<em>Beispiel 1: Ein Benutzer kann dauerhaft speichern, in welchem Format Zahlen und in welcher Sprache Texte in einer Anwendung dargestellt werden sollen.</em><em>Beispiel 2: Ein Benutzer hat die Möglichkeit, ein Benutzerkonto anzulegen und dort Informationen zu speichern, die er beim nächsten Lösen der Aufgabe nicht mehr manuell eingeben muss.</em>
</p>

<h2>
	Die 7 Dialogprinzipien - Fazit
</h2>

<p>
	So viel zu merken ist es eigentlich gar nicht. Und wenn man die ersten 3 Prinzipien verinnerlicht hat und weiß, worauf es beim Entwickeln von Benutzungsschnittstellen ankommt, kann man das Fehlerpotential seiner interaktiven Systeme drastisch senken.
</p>

<p>
	In diesem Sinne, viel Spaß beim Überarbeiten und Entschuldigung im Voraus für all die Verletzungen der Dialogprinzipien, die ihr nach dem Lesen dieses Beitrags wahrnehmen werdet. <img alt=";)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_wink.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/wink@2x.png 2x" title=";)" width="20" loading="lazy"></p>

<p>
	Gruß, euer "devopsdad" Patrick
</p>
]]></description><guid isPermaLink="false">28</guid><pubDate>Thu, 13 Jul 2017 07:04:00 +0000</pubDate></item><item><title>Powershell - Teil 2</title><link>https://www.fachinformatiker.de/blogs/entry/27-powershell-teil-2/</link><description><![CDATA[
<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Es gibt wohl zwei Dinge beim Skripten die gerade am Anfang sehr stiefmütterlich behandelt werden. </span>
</p>

<ol start="1" type="1">
<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Dokumentation </span>
	</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Versionierung </span>
	</li>
</ol>
<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Dies liegt vor allem daran, dass man am Anfang des Skriptens viel Spaß am Experimentieren hat und bestimmt auch viel im Code springt oder ein paar Skripte parallel schreibt. Da kommt einem am Anfang gar nicht der Gedanke, dass man ja doch recht häufig speichert, aber immer unter dem gleichen Dateinamen. Vielleicht ab und zu mal eine -test oder eine-2 dranhängt. Aber mit einer ordentlichen Versionierung hat das eher nichts zu tun. </span>
</p>

<p>
	<br><strong>Dokumentation/Kommentierung</strong>
</p>

<p style="line-height:normal;">
	<br><span style="font-size:12pt;font-family:'Times New Roman', serif;">Bei mir hat sich bewährt, dass ich am Anfang eines Skriptes erst einmal als Kommentar das Ziel des Skriptes definiere. Dieser kann sich ja immer wieder verändern, aber später spart man sich auch diese Arbeit, wenn man das Skript einmal in andere Hände geben möchte, denn dann gehört so ein Text einfach dazu. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Wenn ihr Funktionen schreibt, dann sollten folgende Punkte aufgeführt sein: </span>
</p>

<ul type="disc">
<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">SYNOPSIS </span>

		<ul type="circle">
<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Hier sollte in 1-2 Sätzen die Bestimmung der Funktion stehen </span>
			</li>
		</ul>
</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">DESCRIPTION </span>
		<ul type="circle">
<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Eine ausführlichere Beschreibung was diese Funktion macht </span>
			</li>
		</ul>
</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">PARAMETER param1 </span>
		<ul type="circle">
<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Beschreibung des param1 </span>
			</li>
		</ul>
</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">PARAMETER param2 </span>
		<ul type="circle">
<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Beschreibung des param2 </span>
			</li>
		</ul>
</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Notes </span>
		<ul type="circle">
<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Zusätzliche Notizen </span>
			</li>
		</ul>
</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">LINK </span>
		<ul type="circle">
<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Zugehörige URLs </span>
			</li>
			<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Die erste URL wird aufgerufen wenn das CDMlet Get-Help -Online &lt;Funktionsname&gt; aufgerufen wird </span>
			</li>
		</ul>
</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">INPUTS </span>
		<ul type="circle">
<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Typen der Datenübergabe die erlaubt sind </span>
			</li>
		</ul>
</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">OUTPUTS </span>
		<ul type="circle">
<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Typen der Datenausgabe die von dieser Funktion ausgegeben werden können </span>
			</li>
		</ul>
</li>
</ul>
<p style="line-height:normal;">
	<strong><span style="font-size:12pt;font-family:'Times New Roman', serif;">Funktionen benennen </span></strong>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Bei der Wahl des Funktionsnamens sollte man sich an die offizielle Nomenklatur halten. Das bedeutet, dass der Name mit einem Verb und einem Substantiv durch ein "-" getrennt aufgebaut sein sollte. Get-Verb gibt euch eine offizielle Liste der Verben und in welchem Kontext diese stehen.</span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Wenn ihr allerdings eine Funktion nur für euch schreibt die nur lokal eingesetzt wird, schreibt vor den Funktionsnamen "private:" oder „script:“</span>
</p>

<p style="line-height:normal;">
	<span style="font-size:20px;"><strong><span style="font-family:'Times New Roman', serif;">Versionierung</span></strong></span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Beim Versionieren habe ich früher bei größeren Änderungen einfach den Versionszähler hochgesetzt und nebenbei eine Liste der Änderungen in einem Onenote Dokument gepflegt.</span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Ihr könnt natürlich auch die Änderungen in einem Textdokument oder direkt im Skript kommentieren.</span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Auch hier bieten die ISESteroids wieder eine sehr komfortable Lösung des Versionierens.</span>
</p>

<p style="line-height:normal;">
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="6179" href="https://www.fachinformatiker.de/uploads/monthly_2017_06/Versionskontrolle.png.1498728e9561d307ba70947a4c38d354.png" rel=""><img alt="Versionskontrolle.thumb.png.b7c8c9e3ea16ce49d2c975c8d021afd8.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6179" src="https://www.fachinformatiker.de/uploads/monthly_2017_06/Versionskontrolle.thumb.png.b7c8c9e3ea16ce49d2c975c8d021afd8.png" loading="lazy"></a>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Der Pfeil im Bild zeigt euch, wie ihr den Reiter der Versionierung aufrufen könnt. Auf der rechten Seite seht ihr Die File Version History. Links ein Button „Ad New Version“ und auf der rechten Seite eine Checkbox „Auto Mode“. Wenn bei Auto Mode der Haken gesetzt ist, wird automatisch eine neue Version angelegt sobald man Änderungen durchgeführt hat und darauf folgend speichert.</span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">In dem Reiter der einzelnen Versionen seht ihr links eine Klassifikationsmöglichkeit, wie zum Beispiel Stable, Alpha Release und weitere. Über den Knopf Compare öffnet sich das Programm WinMerge und zeigt die Veränderungen zur Vorgängerversion. Hier nutze ich den Button Notes um, wie der Name schon sagt, mir Notizen zu den Versionsunterschieden zu kommentieren.</span>
</p>

<p style="line-height:normal;">
	 
</p>

<p>
	Falls ihr noch Anregungen, Fragen oder Hinweise habt, gerne her damit.
</p>
]]></description><guid isPermaLink="false">27</guid><pubDate>Wed, 21 Jun 2017 14:44:00 +0000</pubDate></item><item><title>Powershell - Allgemeines</title><link>https://www.fachinformatiker.de/blogs/entry/25-powershell-allgemeines/</link><description><![CDATA[
<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">In diesem Beitrag soll es um die Powershell im Allgemeinen gehen und sich an Benutzer mit grundlegenden Skriptingkenntnissen wenden.</span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Meine Erfahrungen im Umgang und dem ein oder anderen Tool. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Ich bin ein Freund der Powershell geworden, da man mit dieser Scripting Engine viele sich wiederholende Aufgaben schnell und vor allem dann auch fehlerfrei immer wieder erledigen kann. Sei es ein Passwort nach bestimmten Kriterien automatisiert erstellen, dem AD Account hinzufügen, das Flag für "Bei der nächsten Anmeldung Passwort ändern" setzen und einen vorgefertigten Passwortbrief ausdrucken. Oder Gruppenmitgliedschaften zwischen zwei AD Accounts übertragen. Alles was über viel Klickerei zu erreichen ist, kann man durch die Powershell eleganter lösen. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Im Grunde genommen bin ich nun so weit, dass ich alles, was ich auf Dateiebene oder im Bereich AD oder Exchange mehr als zwei Mal mache, versuche in der Powershell zu lösen. Im besten Fall wiederhole ich irgendwann noch einmal die Tätigkeit, oder führe eine ähnliche aus und muss das Skript nur ein wenig anpassen, oder im schlechtesten Fall habe ich wieder ein wenig mehr Übung im Skripten und das hilft natürlich bei den kommenden Aufgaben. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">  </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Erstmal ein paar allgemeine Überlegungen </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">  </span>
</p>

<p style="line-height:normal;">
	<b><span style="font-size:12pt;font-family:'Times New Roman', serif;">ISE - <i>Integrated Scripting Environment</i></span></b><span style="font-size:12pt;font-family:'Times New Roman', serif;"> <b>oder nicht ISE (Konsole) - das ist hier die Frage</b> </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">  </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Es gibt für mich keinen Grund der Konsole den Vorzug zu geben. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Hier ein paar Gründe: </span>
</p>

<ul type="disc"><li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Kopieren und Einfügen </span>

		<ul type="circle"><li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Dies ist in der Konsole nur mit der Maus und nicht mit Tastaturbefehlen möglich </span>
			</li>
			<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Bei mehrzeiligen Befehlen werden der Prompt und der Zeilenumbruch mit kopiert </span>
			</li>
		</ul></li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Ich kann durch das Kopieren und Einfügen der gleichen Zeile untereinander mit anschließenden editieren der einzelnen Zeilen mehrere ähnliche Syntax erstellen und dann einzeln testen und somit gut experimentieren </span>
	</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Wenn ich bemerke, dass eine lange gepipte Verkettung von Befehlen zu komplex wird, kann ich diese recht einfach wieder zerpflücken und in z.B. eine Funktion wandeln </span>
	</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">IntelliSense </span>
		<ul type="circle"><li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Autovervollständigen mit einem kleinen Fenster neben dem Cursor </span>
			</li>
			<li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">In der Konsole nur CMDlets und Parameter mit Tab durchschaltbar </span>
			</li>
		</ul></li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Einfärbung der Codeelemente erhöht die Übersichtlichkeit </span>
		<ul type="circle"><li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Tippfehler werden schneller erkannt </span>
			</li>
		</ul></li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Befehls Add-on Reiter </span>
		<ul type="circle"><li style="line-height:normal;">
				<span style="font-size:12pt;font-family:'Times New Roman', serif;">Ermöglicht schnellere und einfache Erstellung eines CMDlets mit den benötigten Parametern </span>
			</li>
		</ul></li>
</ul><p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">  </span>
</p>

<p style="line-height:normal;">
	<b><span style="font-size:12pt;font-family:'Times New Roman', serif;">Add-Ons</span></b><span style="font-size:12pt;font-family:'Times New Roman', serif;"> </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Ein sehr schönes CMDlet ist für die Arbeit im AD ist NTFSAccess. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;"><a href="https://blogs.technet.microsoft.com/heyscriptingguy/2014/11/22/weekend-scripter-use-powershell-to-get-add-and-remove-ntfs-permissions/" rel="external nofollow"><span style="color:#0000FF;">https://blogs.technet.microsoft.com/heyscriptingguy/2014/11/22/weekend-scripter-use-powershell-to-get-add-and-remove-ntfs-permissions/</span></a> </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">ist von The Scripting Guys </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Bei den Downloads die man aus dem Internet lädt, müsst ihr daran denken, vor dem kopieren, ausführen etc. die Eigenschaften des Downloads aufzurufen und ganz unten im allgemeinen Reiter bei dem Punkt Sicherheit den Button "Zulassen" zu drücken. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Ein besonderes Bonbon sind die <b>Powershell ISESteroids</b> von Powertheshell.com </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Eins vorweg, die ISESteroids sind nicht kostenlos. Preise findet ihr auf Dr. Tobias Weltners Webseite <a href="http://www.powertheshell.com/isesteroids2-2/ordering-isesteroids/" rel="external nofollow"><span style="color:#0000FF;">http://www.powertheshell.com/isesteroids2-2/ordering-isesteroids/</span></a> </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Dr. Tobias Weltner ist ein Experte aus dem Team von IT-Visions (Dr. Holger Schwichtenberg). Dr, Schwichtenberg ist durch zahlreiche Publikationen, auch rund um die Powershell, bekannt. Es lohnt sich auf jeden Fall eins seiner Bücher zur Hand zu haben, sobald man mit der Powershell anfängt zu Skripten. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Aber nun zurück zu den Steroiden. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Um diese immer beim Start zu laden, müssen diese in die Profildatei geladen werden. Diese findet ihr unter dem Userverzeichnis\Dokumente\WindowsPowershell. Hier ändere ich noch die Farbe der Fehleranzeige von dem Blau in Weiß, da dies generell besser lesbar ist. Das macht ihr mit dem Eintrag (get-host).PrivateData.errorbackgroundcolor = "White" </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Oder, sofern ihr die Steroids mit start-steroids schon geladen habt über die neue Leiste aufrufen. </span>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="6154" href="https://www.fachinformatiker.de/uploads/monthly_2017_06/Profile.png.67c94211d4a9919929ab4d7b563136aa.png" rel=""><img alt="Profile.thumb.png.fbd298a5aa4cff37d87b3b29f3355f2e.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6154" src="https://www.fachinformatiker.de/uploads/monthly_2017_06/Profile.thumb.png.fbd298a5aa4cff37d87b3b29f3355f2e.png" loading="lazy"></a>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Was die Steroids für mich mittlerweile unverzichtbar machen sind </span>
</p>

<ul type="disc"><li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Gaaaanz wichtig Eine Versionierung </span>
	</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Einen Simulationsmode - hier muss man nicht nach jeder ausführbaren Zeile ein -Whatif kommen </span>
	</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Die Möglichkeit aus dem Skript eine eigenständig laufende EXE zu machen </span>
	</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Der Variablen Explorer - Dieser zeigt alle verfügbaren Variablen und deren Inhalt an </span>
	</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">Win Merge File Compare - Ist im Zusammenarbeit mit der Versioncontrol einfach gut um Unterschiede in den Skripten zu finden </span>
	</li>
	<li style="line-height:normal;">
		<span style="font-size:12pt;font-family:'Times New Roman', serif;">PSShaper - Zeigt was in dem Skript nicht den "best practice" entspricht </span>
	</li>
</ul><p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">  </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Schon während des Skriptens erscheinen zahlreiche Hinweise, wenn man dabei ist einen Bock zu schießen und geben einem Möglichkeiten vor es zu verbessern. Diese Möglichkeiten werden dann bei Wunsch auch direkt umgesetzt, </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Wenn man eine Klammer, egal welcher Art auch immer öffnet, erscheint gleich auch das entsprechende Gegenstück. Wem ging es noch nie so, dass man später die Klammern zählt und sucht ;-) </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Ein paar Zeilen Code geschrieben und dann gedacht...das wäre auch eine gute Funktion. Hier ist nach dem Markieren des Codes mit einem Rechtsklick sofort alles erledigt sobald man sich für einen Namen für die Funktion entschieden hat und welche Variablen als Parameter übergeben werden sollen. </span>
</p>

<p style="line-height:normal;">
	<span style="font-size:12pt;font-family:'Times New Roman', serif;">Vorher </span>
</p>

<p>
	<img alt="Zeilen_Code.png.ce0fb9a7b43f4e9e9b21dbf79875c3dd.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6155" height="69" src="https://www.fachinformatiker.de/uploads/monthly_2017_06/Zeilen_Code.png.ce0fb9a7b43f4e9e9b21dbf79875c3dd.png" width="262" loading="lazy"></p>

<p>
	Nachher
</p>

<p>
	<img alt="Zeilen_Code_function.png.8d12c98704ab5e3c27e50c32b82e69a9.png" class="ipsImage ipsImage_thumbnailed" data-fileid="6156" height="453" src="https://www.fachinformatiker.de/uploads/monthly_2017_06/Zeilen_Code_function.png.8d12c98704ab5e3c27e50c32b82e69a9.png" width="396" loading="lazy"></p>

<p>
	Durch einen weiteren Klick auf einem Knopf wird diese Funktion in ein Modul geschrieben oder einem Modul hinzugefügt.
</p>

<p>
	Dies nur mal als einen kleinen Appetizer. In den kommenden Blogeinträgen kommt zu den Steroids bestimmt noch mehr.
</p>

<p>
	<br>
	 
</p>
]]></description><guid isPermaLink="false">25</guid><pubDate>Fri, 16 Jun 2017 08:34:00 +0000</pubDate></item><item><title>Kurze Vorstellung + Ausblick V-Blog</title><link>https://www.fachinformatiker.de/blogs/entry/23-kurze-vorstellung-ausblick-v-blog/</link><description><![CDATA[
<p>
	<span>Hallo Fachinformatiker.de Community,</span>
</p>

<p>
	<span>auch ich möchte mich hier eben kurz vorstellen.</span>
</p>

<p>
	<span>Ich bin der Marcel, 39 Jahre alt, verheiratet und komme aus Langenhagen bei Hannover.</span>
</p>

<p>
	<span>Ich bin gelernter KFZ-Mechaniker und habe 2002, während meiner 12-jährigen Bundeswehrzeit, meinen KFZ-Meister im FBZ Garbsen absolviert. Zum Ende meiner Dienstzeit im Jahr 2008 entschied ich mich dann dazu, im Rahmen der Berufsförderung eine IHK-Ausbildung zum IT Administrator durchzuführen. Diese absolvierte ich an einer Privatschule in Hannover.</span>
</p>

<p>
	<span>Ich arbeite mittlerweile seit 2011 als IT Administrator Fachrichtung Netzwerktechnik in einem sehr großen Konzern mit Hauptsitz in Wolfsburg, wobei ich aber in einem Werk in Hannover tätig bin. Hier verwalte ich mehrere hundert Router, Switches etc.</span>
</p>

<p>
	<span>Ihr fragt euch nun evtl., was ich hier auf Fachinformatiker.de suche. Nun, ich suche eigentlich nichts sondern möchte viel eher helfen.</span>
</p>

<p>
	<span>Während meiner gesamten beruflichen Laufbahn war ich, egal in welchem Bereich ich tätig war, immer viel mit dem Bereich Aus- und Weiterbildung beschäftigt. Sei es das Ausbilden von Lehrlingen selbst oder natürlich die eigenen Ausbildungen. Ich vermute mal das ich mittlerweile so eine Art Helfersyndrom entwickelt habe </span><span style="font-family:Wingdings;"><span>J</span></span><span>.</span>
</p>

<p>
	<span>Ich vertrete den Grundsatz: „Man hat erst ausgelernt, wenn alle Finger gleich lang sind“.</span>
</p>

<p>
	<span>Während meiner IHK-Ausbildungszeit habe ich sogar ein Bildungsportal gegründet, welches ich dann aber mangels Zeit wieder auf Eis gelegt habe.</span>
</p>

<p>
	<span>Mittlerweile habe ich es mir zum Hobby gemacht, kleine Videos zu bestimmten Themen zu erstellen. Hierbei setze ich den Focus auf Videos zum Thema Netzwerktechnik und genau hier möchte ich anknüpfen.<span>  </span></span>
</p>

<p>
	<span>Ich könnte mir gut vorstellen, dass FiSi oder ähnliche Ausbildungszweige vermehrt auf Videoinformation setzen. Natürlich sind Bücher und das darin enthaltene Wissen dem nicht gleichzusetzen, allerdings ist bekannt, dass das Lernen umso leichter fällt, je mehr Sinne angesprochen werden und Lehrvideos durchaus einen Beitrag zum besseren Verständnis liefern können. Ich möchte mein Wissen durch diese Art, auch wenn es vielleicht nicht so detailliert wie in den erwähnten Nachschlagewerken geschieht, weitergeben. Bisher habe ich zu meinen Videos sehr gute Rückmeldung in Sachen Verständlichkeit erhalten.</span>
</p>

<p>
	<span>Nun schließt sich der Kreis. Ich werde hier also einen Videoblog starten. In diesem werde ich bereits gedrehte Videos zeigen, versuchen Fragen zu beantworten und natürlich auf Themenwünsche eingehen.</span>
</p>

<p>
	<span>In diesem Sinne, danke für die Aufnahme und auf gutes Gelingen,</span>
</p>

<p>
	<span>Euer Marcel.</span>
</p>
]]></description><guid isPermaLink="false">23</guid><pubDate>Tue, 23 May 2017 10:18:57 +0000</pubDate></item><item><title>Die Windows Registry</title><link>https://www.fachinformatiker.de/blogs/entry/22-die-windows-registry/</link><description><![CDATA[
<p>
	<span style="font-size:18px;"><strong>Windows-Registry</strong></span>
</p>

<p>
	Da dies mein erster Blog ist möchte ich mich kurz vorstellen: Ich bin Tician, 26 Jahre jung und im 2. Ausbildungsjahr zur Systemintegration (Stand 2017). Privat bin ich im Malware-Bereich aktiv - ich helfe Menschen bei der Bereinigung - und ich zocke gerne <img alt=":)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_smile.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/smile@2x.png 2x" title=":)" width="20" loading="lazy"></p>

<p>
	Mein <u>Ziel</u> ist es alles so anfängerfreundlich wie möglich zu schreiben. Es soll also auch jemand verstehen der sich am Anfang der Ausbildung befindet und noch keine bis wenig Erfahrungenen hat.
</p>

<p>
	 
</p>

<p>
	Legen wir los!
</p>

<p>
	<strong>Was ist die Registry?</strong>
</p>

<p>
	Die Meisten haben vermutlich schon davon gehört, aber vielleicht noch nie damit zu tun gehabt - und genau so sollte es auch sein, denn die Registry ist seit Windows NT ein fester, sehr wichtiger und empfindlicher Bestandteil von Windows. Sämtliche Einstellungen von Windows (und den meisten installierten Programmen) werden dort gespeichert.
</p>

<p>
	<span style="color:#7f8c8d;"><em>Einstellungen? Welche Einstellungen denn zum Beispiel?</em></span>
</p>

<p>
	Welche Dienste sind auf auto-start gestellt? Welches Hintergrundbild benutze ich für meinen Desktop? Ist die Firewall an oder aus? Werden die Windows-Updates automatisch gemacht oder sind sie deaktiviert? Welches Programm soll benutzt werden wenn ich eine *.txt Datei öffnen möchte (Editor, Notepad++ oder doch etwas ganz anderes)? Das und vieles mehr sind Beispiele die in der Registry zu finden sind.
</p>

<p>
	Kommen wir auch kurz zu einem anderen Beispiel: <u>Gruppenrichtlinien</u>! Was passiert wenn wir auf vielen PCs Einstellungen setzen möchten ohne an jeden PC einzeln zu rennen (z.B. wollen wir nicht das Benutzer die Registry verändern dürfen <img alt=";)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_wink.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/wink@2x.png 2x" title=";)" width="20" loading="lazy"> )? Wir benutzen Gruppenrichtlinien und die (meisten) machen auch nichts anderes als Registry-Einträge zu verändern.
</p>

<p>
	<strong>Wo ist die Registry?</strong>
</p>

<p>
	Jetzt wird es interessant. Die Registry lässt sich durch ein Windows-eigenes Tool öffnen. In unserem Fall die <u>Regedit.exe</u> die sich (wie manch andere Windows-Tools) standardmäßig unter C:\Windows befindet. Jetzt ist uns das aber zu mühselig jedesmal dort hin zu navigieren (das machen wir ja mit dem Editor oder der Kommandozeile auch nicht) und diese exe-Datei anzuklicken. Wir drücken einmal gekonnt die Windows-Taste+R (r für das englische 'run' also 'ausführen') und haben ein kleines Fensterchen offen mit dem wir die Windows-Tools aufrufen können. Wir geben 'regedit' ein und drücken einmal auf OK.
</p>

<p>
	<span style="color:#7f8c8d;"><em>Und woher weiß Windows jetzt wo es nach der Regedit.exe suchen soll wenn ich das da eingebe?</em></span>
</p>

<p>
	Ich gebe euch einen Tipp: Das steht auch in der Registry <img alt=";)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_wink.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/wink@2x.png 2x" title=";)" width="20" loading="lazy"> (* siehe Bonus-Wissen ganz unten!)
</p>

<p>
	Bis hierhin kann man nichts falsch machen, reinschauen kostet also nichts! Was wir links sehen sollte einem Windows-Benutzer doch recht vertraut sein. Wir haben 'Ordner' die wir auf und zu klappen können und davon (meistens) ganze 5 Stück!
</p>

<p>
	<span style="color:#7f8c8d;"><em>'Ordner'?</em></span>
</p>

<p>
	Vom aussehen her könnte man sie als 'Ordner' bezeichnen, aber wir lernen es gleich richtig. Alles was hier als 'Ordner' dargestellt wird nennt sich <u>Schlüssel</u>. Und wenn wir schon bei Begrifflichkeiten sind erkläre ich euch gleich auch was ein 'Hive' ist.
</p>

<p>
	Aber gehen wir mal kurz einen Schritt zurück.
</p>

<p>
	<span style="color:#000000;"><em>Habt ihr euch schonmal gefragt wo man das ganze Zeug auf der Festplatte überhaupt findet?</em></span>
</p>

<p>
	Da ist eine rießengroße Struktur mit vielen, vielen Schlüsseln ('Ordnern'), das kann ja nicht einfach so aus dem nichts auftauchen. Und genau darum findet man die Registry in folgenden Dateien:
</p>

<pre class="ipsCode">
C:\Windows\system32\config\System 	(HKEY_CURRENT_CONFIG)
C:\Windows\system32\config\SAM		(HKEY_LOCAL_MACHINE\SAM)
C:\Windows\system32\config\Security	(HKEY_LOCAL_MACHINE\Security)
C:\Windows\system32\config\Software	(HKEY_LOCAL_MACHINE\Software)
C:\Windows\system32\config\System 	(HKEY_LOCAL_MACHINE\System)
C:\Windows\system32\config\Default	(HKEY_USERS\.DEFAULT)
C:\Users\Benutzername\ntuser.dat	(HKEY_CURRENT_USER)</pre>

<p>
	Hier mal ein Bild:
</p>

<p>
	<img alt="registry.PNG.b8f50b4f7a9e5f04e5e35f474412b9df.PNG" class="ipsImage ipsImage_thumbnailed" data-extension="core_Attachment" data-fileid="5829" src="https://www.fachinformatiker.de/uploads/monthly_2017_03/registry.PNG.b8f50b4f7a9e5f04e5e35f474412b9df.PNG" loading="lazy"></p>

<p>
	Diese 7 oben genannten Schlüssel nennen sich Hives und sind alles woraus die Registry besteht.
</p>

<p>
	<span style="color:#7f8c8d;"><em>Moment mal, ich sehe doch noch andere Schlüssel! Wo ist denn zum Beispiel HKEY_CLASSES_ROOT?</em></span>
</p>

<p>
	Die simple (und vermutlich erstmal verwirrende) Antwort ist: Den Schlüssel selbst gibt es nicht.
</p>

<p>
	<span style="color:#7f8c8d;"><em>... ?</em></span>
</p>

<p>
	Wir schauen uns das natürlich an:
</p>

<p>
	<strong>Der Aufbau der Registry</strong>
</p>

<p>
	Was wir sehen wenn wir die Registry öffnen (also diese 5 großen Schlüssel) ist eine von Windows benutzerfreundlich gemachte Ansicht.
</p>

<p>
	Nehmen wir mal an wir haben ein x-beliebiges Stück Software. Dessen Standard-Einstellungen werden unter diesem Schlüssel gespeichert:
</p>

<p>
	HKEY<b>_</b><span style="color:#2E75B6;">LOCAL_MACHINE</span></p>
<p></p>\<p></p>Software\Classes


<p>
	und gelten erstmal für alle Benutzer des PCs. Wenn ich mich nun am PC anmelde, die Software öffne und irgendwelche Einstellungen mache (die natürlich nur mich betreffen sollen und nicht alle anderen user, z.B. einen blauen Hintergrund haben möchte), dann befinden sich diese Einstellungen hier:
</p>

<p>
	HKEY_<span style="color:#2E75B6;">CURRENT_USER</span></p>
<p></p>\Software\Classes


<p>
	Der Schlüssel HKEY_CLASSES_ROOT führt diese 2 oben genannten Schlüssel visuell zusammen, damit wir nicht rumsuchen müssen. Nach demselben Schema bilden sich auch die übrigen Schlüssel die nicht zu den Hives gehören. Ich zeig euch das mal anhand dieses Beispiels:
</p>

<p>
	Ich habe hier einen Schlüssel (den Pfad könnt ihr im unteren Bereich des Bildes sehen) und einen x-beliebigen Eintrag erstellt:
</p>

<p>
	<img alt="Registry1.PNG.c70e2b4fcaaefa82cdb0e07cbf1e432b.PNG" class="ipsImage ipsImage_thumbnailed" data-extension="core_Attachment" data-fileid="5826" src="https://www.fachinformatiker.de/uploads/monthly_2017_03/Registry1.PNG.c70e2b4fcaaefa82cdb0e07cbf1e432b.PNG" loading="lazy"></p>

<p>
	Ich habe nochmal einen gleichnamigen Schlüssel für den Benutzer erstellt und dem ebenfalls einen Eintrag verpasst:
</p>

<p>
	<img alt="registry2.PNG.8c9454c28268b9d2848eb8e610469e2b.PNG" class="ipsImage ipsImage_thumbnailed" data-extension="core_Attachment" data-fileid="5827" src="https://www.fachinformatiker.de/uploads/monthly_2017_03/registry2.PNG.8c9454c28268b9d2848eb8e610469e2b.PNG" loading="lazy"></p>

<p>
	Ich habe die oben genannten Schlüssel benutzt. Ohne mein weiteres Zutun sieht es in dem HKEY_CLASSES_ROOT Schlüssel nun so aus:
</p>

<p>
	<img alt="Registry3.PNG.c28f541ac8f655c6e627c685d42c2159.PNG" class="ipsImage ipsImage_thumbnailed" data-extension="core_Attachment" data-fileid="5828" src="https://www.fachinformatiker.de/uploads/monthly_2017_03/Registry3.PNG.c28f541ac8f655c6e627c685d42c2159.PNG" loading="lazy"></p>

<p>
	Seht ihr wie beide Einträge angezeigt werden? Windows hat die 2 gleich benannten Schlüssel (in HKLM und HKCU - die Kurzschreibweise)  zusammen gelegt.
</p>

<p>
	Und das war schon das ganze Hexenwerk für heute! <img alt=":)" data-emoticon="" height="20" src="https://www.fachinformatiker.de/uploads/emoticons/default_smile.png" srcset="https://www.fachinformatiker.de/uploads/emoticons/smile@2x.png 2x" title=":)" width="20" loading="lazy"></p>

<p>
	Ich wollte es kurz halten, es würde so viel mehr zu erzählen geben! Ich wollte euch aber nicht mit der Entstehungsgeschichte langweilen, es sollte wirklich nur mal ein leichtes Kratzen der Oberfläche sein, da die Meisten vermutlich eh nie direkt in die Registry gehen müssen.
</p>

<p>
	Wenn ihr also Fragen, Anmerkungen, Lob und Kritik habt immer her damit - am Besten in die Kommentare.
</p>

<p>
	 
</p>

<p>
	_____________________________________________________
</p>

<p>
	<strong>Bonus-Wissen:</strong>
</p>

<p>
	(*)Hier geht es um die sogenannte <u>Path-Umgebungsvariable</u>.
</p>

<p>
	<span style="color:#7f8c8d;"><em>Bitte was? </em></span>
</p>

<p>
	Ja, das 'Ding' schimpft sich so, ist aber auch wichtig und vorallem nützlich!
</p>

<p>
	Folgendes Szenario: Ich öffne ein Konsolenfenster (ganz ohne Administrator-Rechte) und befinde mich standardmäßig in meinem Benutzer-Verzeichnis (C:\Users\Tician). Gebe ich jetzt ein 'notepad.exe' und drücke die Eingabe-taste öffnet sich ein Editor. Das läuft für viele schon automatisch. Aber denkt mal über folgendes: Muss man nicht eigentlich erst in das Verzeichnis navigieren oder den ganzen Pfad angeben um eine Datei darin auszuführen?
</p>

<p>
	<span style="color:#7f8c8d;"><em>Ja... Aber dabei befindet sich die 'notepad.exe' doch gar nicht in meinem Verzeichnis! </em></span>
</p>

<p>
	Jupp, richtig und trotzdem öffnet es sich. Zum Verständnis müssen wir etwas weiter gehen. Geben wir also mal 'putty.exe' ein. Wir werden mit der Meldung "Der Befehl 'putty.exe' ist entweder falsch geschrieben oder konnte nicht gefunden werden" begrüßt. 'Konnte nicht gefunden werden' trifft es in unserem Fall auf den Punkt.
</p>

<p>
	<span style="color:#7f8c8d;"><em>Aber ich hab putty! Liegt doch direkt auf meinem Desktop!</em></span>
</p>

<p>
	Auch korrekt. Was ist also passiert? Windows (und übrigens auch Linux) haben diese Path-Variable. Wir finden sie unter Windows in der Registry in diesem Schlüssel:
</p>

<pre class="ipsCode">
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment</pre>

<p>
	Hier gibt es den Eintrag '<u>Path</u>'. Wenn ich nun also einen Befehl oder eine Datei zum öffnen/ausführen in die Kommandozeile eingebe sucht Windows erstmal in dem Verzeichnis in dem ich mich befinde danach. In unserem Beispiel das Benutzerverzeichnis (keine Unterordner!). Wenn Windows den Befehl dort nicht findet greift es auf diese PATH-Variable zu. Da stehen einige Pfade durch Semikolon getrennt drin und Windows geht sie alle nacheinander von links nach rechts durch und sucht in den Ordnern nach meinem Befehl, also 'putty.exe'.
</p>

<p>
	<span style="color:#7f8c8d;"><em>Das heißt also...?</em></span>
</p>

<p>
	Wenn ich jetzt diesen Path-Eintrag veränder und ';C:\Users\Tician\Desktop\' anhänge kann ich auch mein Putty jederzeit - und unabhängig davon in welchem Pfad ich mich in der Konsole befinde - aufrufen!
</p>
]]></description><guid isPermaLink="false">22</guid><pubDate>Mon, 13 Mar 2017 06:07:38 +0000</pubDate></item><item><title>Mathematische Grundlagen der Wirtschaftsinformatik</title><link>https://www.fachinformatiker.de/blogs/entry/21-mathematische-grundlagen-der-wirtschaftsinformatik/</link><description><![CDATA[
<p>
	<strong>Mathe... </strong>
</p>

<p>
	Ich spare mir mal die übliche Anrede und komme direkt zur Sache. Mathematik, mit allem was man sich so vorstellt. Ich gebe zu, vor dieser Klausur hatte ich die größte Angst. Eine Woche Urlaub davor konnten mir die auch nicht nehmen. Aber nun zum Modul: Es gliederte sich in drei große Bereiche:
</p>

<p>
	<strong>I. Grundlagen</strong>
</p>

<ol><li>
		Aussagenlogik
	</li>
	<li>
		Mengenlehre
	</li>
	<li>
		Stellenwertsysteme
	</li>
	<li>
		Folgen und Reihen
	</li>
</ol><p>
	<strong>II. Lineare Algebra</strong>
</p>

<ol><li>
		Matrizen und Vektoren
	</li>
	<li>
		Lineare Gleichungssysteme
	</li>
	<li>
		Inverse Matrizen
	</li>
	<li>
		Determinenten
	</li>
	<li>
		Leontief Model
	</li>
</ol><p>
	<strong>III. Analysis</strong>
</p>

<ol><li>
		Funktionen
	</li>
	<li>
		Wichtige Punkte
	</li>
	<li>
		Differential-Rechnung
	</li>
	<li>
		Integral-Rechnung
	</li>
</ol><p>
	An sich war alles nicht so schwer wie gedacht. Wenn ich auch Probleme hatte, der Vorlesung zu folgen, so war in der Vorbereitungsphase eigentlich alles halb so wild. Mit Matrizen hatte ich immer meine Probleme, aber im Endeffekt waren auch die machbar. Für viele ist ja Mathe so der große Blocker zum Studium, der große dunkle Endgegner, der einen gleich im ersten Semester auf die Intensivstation schickt. Diese Angst kann ich euch nehmen. Ich bin sicherlich keine Mathe-Genie, aber ein gesundes logisches Verständnis kann einem da ganze Welten an Arbeit ersparen. So bin ich auch in die Klausur, nach einer Woche intensiver Vorbereitung gab es kein Feld mehr, dass ich nicht bearbeiten konnte. Nur die Zeit, die war mir etwas zu knapp. Aber als dann die Mail mit den Ergebnissen kam, da war ich zufrieden und freue mich nun auf Statistik. <img alt=":wub:" data-emoticon="" src="https://www.fachinformatiker.de/uploads/emoticons/default_wub.png" title=":wub:" loading="lazy"> Das kommende Semester wird eh der Wahnsinn, viele spannende Module, wo ich sicher auch als Fachinformatiker noch das eine oder andere neue hören werde. Aber dazu komme ich in einem anderen Eintrag.
</p>

<p>
	 
</p>

<p>
	Wie seht ihr das? Ist Mathematik wirklich der Nemesis aller Studenten, oder ist es längst nicht mehr der große Blocker? Gerne können wir das in den Kommentaren diskutieren.
</p>

<p>
	 
</p>

<p>
	Bis dahin grüßt euch
</p>

<p>
	SebastianB.
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">21</guid><pubDate>Mon, 30 Jan 2017 13:21:00 +0000</pubDate></item><item><title>Eure Themenw&#xFC;nsche f&#xFC;r Blog-Beitr&#xE4;ge oder Podcast-Episoden</title><link>https://www.fachinformatiker.de/blogs/entry/20-eure-themenw%C3%BCnsche-f%C3%BCr-blog-beitr%C3%A4ge-oder-podcast-episoden/</link><description><![CDATA[
<p>
	Hallo zusammen,
</p>

<p>
	um den Fachinformatiker-Blog mit etwas mehr Leben zu füllen, würde ich gerne wissen, welche Themen <strong>euch</strong> interessieren.
</p>

<p>
	Womit können wir euch am besten helfen? Eher technische Themen oder Tipps zur Prüfungsvorbereitung? Lieber Projektdokumentation oder Fachgespräch? Besser Blog-Beiträge oder Podcast-Episoden? Oder, oder, oder...
</p>

<p>
	Ich freue mich über euer Feedback! Schreibt mir gerne eure <strong>Wunschthemen</strong> oder Vorschläge für deren Gestaltung! Und auch Kritik an den bisherigen Blog- und Podcastinhalten nehme ich gerne an. Dadurch könnten wir im nächsten Jahr diese Seite mit noch mehr <strong>relevanten Inhalten</strong> für alle Azubis und Prüflinge da draußen füllen.
</p>

<p>
	Viele Grüße!<br />
	Stefan
</p>
]]></description><guid isPermaLink="false">20</guid><pubDate>Tue, 13 Dec 2016 05:26:21 +0000</pubDate></item><item><title>Das ISO/OSI-Modell (Teil 4: Sitzungs-, Darstellungs- und Anwendungsschicht) - Fachinformatiker-Podcast #7</title><link>https://www.fachinformatiker.de/blogs/entry/19-das-isoosi-modell-teil-4-sitzungs-darstellungs-und-anwendungsschicht-fachinformatiker-podcast-7/</link><description><![CDATA[<div>
	<div>
		<p>
			Diese Woche beenden wir das ISO/OSI-Modell mit den Schichten 5 bis 7: Sitzungs-, Darstellungs- und Anwendungsschicht.
		</p>

		<p>
			 
		</p>

		<hr style="clear:both;margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;height:0px;border-top-style:none;border-right-style:none;border-bottom-style:solid;border-left-style:none;background-color:transparent;border-bottom-width:4px;border-bottom-color:rgb(221,221,221);padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;" /><p style="margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
			<a href="https://s3.eu-central-1.amazonaws.com/fiae/Podcast/FI-Podcast_007_ISO_OSI-Modell_Teil_4.mp3" rel="external nofollow">Fachinformatiker-Podcast #7: Das ISO/OSI-Modell (Teil 4)</a> (Länge ca. 35 Minuten, Größe ca. 12 MB)
		</p>

		<hr style="clear:both;margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;height:0px;border-top-style:none;border-right-style:none;border-bottom-style:solid;border-left-style:none;background-color:transparent;border-bottom-width:4px;border-bottom-color:rgb(221,221,221);padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;" /><p style="margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
			 
		</p>

		<p style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
			<strong>Sitzungsschicht (Session Layer)</strong>
		</p>

		<ul style="margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:30px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;"><li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Wie wird eine dauerhafte Kommunikation von Netzwerkteilnehmern aus unterschiedlichen Anfragen und Antworten (Dialog) ermöglicht?</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Einheit: Daten</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Zusätzliche Informationen: Zuordnung von Anfragen und Antworten zueinander, Wiederaufsetzpunkte bei Ausfall der Kommunikation</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Hardware: siehe Anwendungsschicht</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Protokolle:<span> </span><a href="https://de.wikipedia.org/wiki/Remote_Procedure_Call" rel="external nofollow">RPC</a>, siehe Anwendungsschicht</span></span>
			</li>
		</ul><p>
			<strong>Darstellungsschicht (Presentation Layer)</strong>
		</p>

		<ul style="margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:30px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;"><li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Wie können Daten unabhängig von der konkreten Repräsentation auf den beteiligten Systemen verständlich ausgetauscht werden?</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Einheit: Daten</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Zusätzliche Informationen: Syntax der Daten, Encoding, Verschlüsselung, Kompression</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Hardware: siehe Anwendungsschicht</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Protokolle:<span> </span><a href="https://de.wikipedia.org/wiki/Abstract_Syntax_Notation_One" rel="external nofollow">ASN.1</a>, siehe Anwendungsschicht</span></span>
			</li>
		</ul><p>
			<strong>Anwendungsschicht (Application Layer)</strong>
		</p>

		<ul style="margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:30px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;"><li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Wie können anwendungsspezifische Daten und Befehle ein- und ausgegeben werden?</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Einheit: Daten</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Zusätzliche Informationen: Semantik der Daten</span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Hardware:<span> </span><a href="https://de.wikipedia.org/wiki/Gateway_(Informatik)" rel="external nofollow">Gateway</a>,<span> </span><a href="https://de.wikipedia.org/wiki/Lastverteilung_(Informatik)" rel="external nofollow">Load Balancer</a>,<span> </span><a href="https://de.wikipedia.org/wiki/Proxy_(Rechnernetz)" rel="external nofollow">Proxy</a>,<span> </span><a href="https://de.wikipedia.org/wiki/Firewall" rel="external nofollow">Firewall</a></span></span>
			</li>
			<li style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
				<span style="border-collapse:separate;color:rgb(0,0,0);font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium;"><span style="color:rgb(51,51,51);font-family:Helvetica, arial, freesans, clean, sans-serif;font-size:14px;line-height:22px;">Protokolle:<span> </span><a href="https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol" rel="external nofollow">HTTP</a>,<span> </span><a href="https://de.wikipedia.org/wiki/File_Transfer_Protocol" rel="external nofollow">FTP</a>,<span> </span><a href="https://de.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol" rel="external nofollow">SMTP</a></span></span>
			</li>
		</ul><p>
			Alle bisherigen und auch die zukünftigen Episoden des Podcasts bekommst du über den RSS-Feed auch im Podcatcher deiner Wahl: <a href="http://fiae.link/FIPodcastRSS" rel="external nofollow">http://fiae.link/FIPodcastRSS</a>
		</p>

		<hr style="clear:both;margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;height:0px;border-top-style:none;border-right-style:none;border-bottom-style:solid;border-left-style:none;background-color:transparent;border-bottom-width:4px;border-bottom-color:rgb(221,221,221);padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;" /><p style="margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;">
			Hast du Ideen für Themen weiterer Podcast-Episoden? Dann schreib gerne einen Kommentar!
		</p>

		<hr style="clear:both;margin-top:15px;margin-right:0px;margin-bottom:15px;margin-left:0px;height:0px;border-top-style:none;border-right-style:none;border-bottom-style:solid;border-left-style:none;background-color:transparent;border-bottom-width:4px;border-bottom-color:rgb(221,221,221);padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;" /></div>
</div>]]></description><guid isPermaLink="false">19</guid><pubDate>Mon, 12 Dec 2016 04:06:34 +0000</pubDate></item></channel></rss>
