Schlüsseltechnologie

Schlüsseltechnologie

By Xyrillian NoisesTechnology
Download on the App Store

Schlüsseltechnologie episodes

  • STP068: Literatur: Vom Mythos des Mann-Monats

    In dieser Episode wird ein lang gehegter Traum wahr. Xyrill hat ein Buch gelesen und spricht darüber. Obwohl es nicht sehr dick ist, ist es doch sehr gehaltvoll und so entscheiden wir uns kurz vor Ende der Sendung für eine spontane Planänderung.

    ShownotesWir lesen die englische Erstausgabe von 1975, die im Internet Archive digitalisiert wurde.

    • zum Autor: Frederick P. Brooks, Jr. (US-amerikanischer Informatiker, 1931-2022)
      • in den 60ern Entwicklungsleiter bei IBM für das Betriebssystem OS/360 (eines der ersten Systeme mit Unterstützung für persistente Massenspeicher mit Wahlzugriff, sprich: Festplatten)
      • gilt als Erfinder des Bytes mit 8 Bit; Wikipedia zitiert Brooks aus einem Interview von 2010:
      • „Die wichtigste Entscheidung, die ich je getroffen habe, war, die IBM-360-Serie von einem 6-Bit-Byte auf ein 8-Bit-Byte umzustellen und damit die Verwendung von Kleinbuchstaben zu ermöglichen. Diese Veränderung verbreitete sich überall.“

        • zum Buch: "Vom Mythos des Mann-Monats" ("The Mythical Man-Month") dokumentiert Brooks' Erfahrungen als Projekt-Manager in einem der frühen großen Software-Projekte

          • nicht als Lehrbuch angelegt, weil es dafür "noch zu früh" gewesen sei, sondern als Serie persönlicher Eindrücke und Lektionen
          • fast jedes Kapitel ist ein alleinstehendes Essay
          • wir wollen schauen, ob diese Lektionen auch heute noch Bestand haben
          • in der ersten Hälfte des Buches (Kapitel 2-7) ist das übergreifende Motiv, wie sich die Arbeit in großen Teams von kleinen Teams unterscheidet
          • Hörempfehlung: Pentaradio vom Dezember 2022

            • anlässlich Brooks' Tod hatten wir über seinen anderen wichtigen Text "No Silver Bullet" und das Thema Komplexität gesprochen
            • Kapitel 1: Die Teergrube
              • Teergruben-Analogie: steckt ein Tier mit einem Bein in der Teergrube, kann es das Bein meist aus eigener Kraft herausziehen; alle Beine in der Teergrube sind hingegen meist ein Todesurteil

                • analog hierzu: Zähheit/Trägheit in der Software-Entwicklung nicht aus einem bestimmten Grund, sondern aufgrund mehrerer parallel wirkender Gründe
                • Programme können von Einzelpersonen oder Zweierteams erschaffen werden

                  • These: aber nicht "Programmsystemprodukte"
                  • vom Programm zum Programmprodukt: Generalisierung (Nützlichkeit für eine ganze Klasse von Situationen), Testabdeckung (siehe STP038), Dokumentation, fortlaufende Wartung -> heute sagt man "Produktisierung" dazu

                    • Brooks schätzt hier dreimal mehr Aufwand als für das reine Programm
                    • Xyrill würde heute sogar einen größeren Faktor schätzen, vllt. 4 oder 5: im Bereich der Programmierproduktivität gab es mehr Innovationen beim initialen Schreiben als bei Maintenance (siehe Xyrills Kritik an Ruby als einzeilerorientiert; siehe auch LLMs, aber das verschiebt sich eventuell gerade)
                    • Parallele zu "warum setzt sich Open Source nicht durch", siehe Besprechnung von "Open Source on its own is no alternative to Big Tech" im Pentaradio vom Dezember 2024
                    • vom Programm zum Programmsystem: Einbettung in ein Netzwerk anderer Programme mit konsistentem Stil und definierten Schnittstellen untereinander

                      • Brooks legt hier auch Wert auf ein vordefiniertes Ressourcenbudget (CPU-Zeit, Speicher, Datenverkehr) für jedes Teilprogramm -> heute überholt; Effizienz der Belegschaft geht über Effizienz des Produktes
                      • Brooks schätzt hier mindestens dreimal mehr Aufwand als für die reinen Programme
                      • Xyrill stimmt im Großen und Ganzen zu: heute zwar öfter von Anfang an wohlgeformte Schnittstellen (vgl. Unix-Philosophie in STP006, JSON in STP071), aber andererseits gestiegene Gesamtkomplexität
                      • Programmsystemprodukt: ein produktisiertes Programmsystem

                        • somit laut Brooks' Schätzung 3 x 3 = 9 Mal mehr Aufwand als für die einzelnen Programme
                        • Kapitel 2: Vom Mythos des Mann-Monats
                          • Problem 1: Programmierer sind schlecht im Schätzen von Zeitaufwand

                            • inhärenter Optimismus: für jede Teilaufgabe schätzt man den Aufwand im Fall, dass alles gut geht
                            • These: das Programm entsteht erst im Kopf und dann in der Realität; letzteres dauert länger, aber ein Programm, dass im Kopf fertig ist, fühlt sich schon fertig an
                            • Programme sind kristallisierte Gedanken auf eine sehr viel direktere Art und Weise als z.B. Handwerksstücke, die kategorisch in ein physisches Artefakt umgesetzt werden müssen
                            • Testphasen sind von diesem Optimismus am stärksten betroffen
                              • Xyrill stimmt im Prinzip zu; allerdings wird heute versucht, Tests bei der Entwicklung einzugliedern (siehe Besprechung von TDD in STP038)
                              • Problem 2: konventielle Planungsmethoden funktionieren nur, wenn "Personen und Monate austauschbar sind"

                                • Basiseinheit: Mann-Monat (heute sagt man Personenmonat); die Menge Arbeit, die eine Person in einem Monat verrichten kann
                                • Messung von Aufwand in Personenmonaten impliziert, dass eine Aufgabe unter mehreren Personen aufgeteilt werden kann und keine Kommunikation zwischen diesen Personen erforderlich ist
                                  • kommt hin für z.B. Spargelstechen oder Zimmerreinigung im Hotel, aber: "Das Austragen eines Kindes dauert neun Monate, egal, wieviele Frauen der Aufgabe zugewiesen werden."
                                  • zwei Komplikationen: Einarbeitungszeit (linear in der Größe des Personals) und fortwährender Kommunikationsaufwand (quadratisch in der Größe des Personals)
                                    • Xyrill kann das 100-%-ig bestätigen; in großen Teams verbringen die hochrangigen Techniker signifikant mehr Zeit mit Meetings/Mails/Chat als mit ihrer nominalen Tätigkeit
                                    • quadratisches Wachstum kann teilweise begrenzt werden durch Einführung von Unterteams mit strikten Rollenverteilungen; dann tritt das Gesetz von Conway in Kraft
                                    • Problem 3: der Zeitplan wird durch die Bedürfnisse des Kunden bestimmt, nicht durch die Bedürfnisse der Programmierer

                                      • Restaurant-Analogie: wenn man das langsam gegarte Steak in nur 5 Minuten haben will, wird der Koch sich dem entgegenstellen... oder er dreht halt die Hitze hoch und man kriegt ein schlechteres Produkt
                                      • Programmierprojekte richten sich aber oft dem vom Kunden und/oder Management vorgegebenen Liefertermin: "Es ist sehr schwierig, eine Schätzung energisch, plausibel und arbeitsplatzgefährdend zu verteidigen, die auf keiner quantitativen Methode beruht, durch wenig Daten gestützt und hauptsächlich durch das Bauchgefühl der Manager getragen wird."
                                      • wenn dann beim Testen am Ende eine Verspätung eintritt, ist die Versuchung groß, halb fertige Produkte zu liefern (vgl. "Bananaware")
                                      • Problem 4: Was macht man, wenn dann das Kind in den Brunnen gefallen ist und man zu spät dran ist?

                                        • Option 1: Lieferdatum nach hinten verschieben
                                        • Option 2: Umfang reduzieren
                                          • passiert eventuell auch unter der Hand, zum Beispiel indem beim Design und beim Testen Arbeitstempo gegen Sorgfalt abgewogen wird
                                          • Xyrill schielt auf sein ständig wachsendes Backlog an "müsste man mal machen"-Aufgaben
                                          • Option 3: weitere Leute hinzufügen
                                            • Brooks'sches Gesetz: "Das Hinzufügen weiteren Personals zu einem verspäteten Softwareprojekt verspätet es weiter."
                                            • siehe Problem 2: neue Mitarbeiter müssen von den bestehenden Teammitgliedern eingearbeitet werden und erhöhen dann permanent den Kommunikationsaufwand
                                            • Vorschlag von Brooks: Planung basierend auf sequentiellen Teilschritten mit jeweils voneinander unabhängigen Teilaufgaben
                                              • Personalgröße ergibt sich aus der Anzahl jeweils unabhängiger Teilaufgaben
                                              • Zeitaufwand ergibt sich aus der längsten Kette von sequentiellen Teilschritten
                                              • Parallele zum Gantt-Diagramm, dass zu Brooks' Zeit bekannt gewesen sein sollte
                                              • Kapitel 3: Das OP-Team ("The Surgical Team")
                                                • Beobachtung: sehr weite Spannbreite im Produktivitätsspektrum der Software-Entwickler; die besten sind 10x so produktiv wie die schlechtesten

                                                  • Xyrill war überrascht, dass diese Beobachtung schon so alt ist; in den 2010ern gab es einen Hype darum und man hat die produktivsten Entwickler als "Rock Stars" gehandelt
                                                  • naive Schlussfolgerung: statt einem großen Team lieber ein kleines Team der absolut Besten
                                                    • kleine Teams kommunizieren ja auch besser, also weniger Overhead
                                                    • Problem: skaliert irgendwann nicht mehr
                                                      • 10 Leute können nicht z.B. ein modernes Betriebssystem bauen (vielleicht als Programm, aber definitiv nicht als fortlaufend gewartetes Programmsystemprodukt)
                                                      • Alternativvorschlag: Teamstruktur analog zu Operations-Teams in der Chirurgie

                                                        • ein Spezialist in der Mitte, der die Schnitte macht
                                                        • viele Unterstützer drumherum, die die Werkzeuge anreichen und Instrumente überwachen
                                                        • genaue Rollenverteilung in diesem Vorschlag

                                                          • Chirurg/Chefprogrammierer: erarbeitet die Design-Spezifikation und schreibt Programm, Dokumentation und Tests
                                                          • Copilot: berät den Chirurgen in allen Design- und Implementations-Entscheidungen; fungiert als Stellvertreter des Chirurgen
                                                          • Administrator: kümmert sich für den Chirugen um alle administrativen Aufgaben (Geldmittel, Personal, Räumlichkeiten, Inventar); bei kleineren Teams teilen sich evtl. mehrere Teams einen Administrator
                                                          • Editor: bringt die vom Chirurgen ins Unreine geschriebene oder diktierte Dokumentation in Reinform
                                                          • außerdem werden Sekretariatsrollen beschrieben; z.B. ein Schreiber, der Code auf Lochkarten bringt und Programmausgaben sammelt und archiviert
                                                          • weitere Randrollen, die von mehreren Teams geteilt werden können: Werkzeugmacher, Tester, Language Lawyer (jemand, der die jeweilige Programmiersprache in- und auswendig kennt und hochspezialisierte Optimierungen oder besonders leichtgängige Strukturen finden kann)
                                                          • großer Fokus auf den unterstützenden Sekretärs- und Schreiberrollen, um den Chirurgen und Copilot von Schreibarbeiten zu entlasten

                                                            • Xyrill stellt sich das heute schwierig vor; Digitalisierung hat zwar viele Schreibarbeiten vereinfacht, aber auf eine Art und Weise, die das Delegieren schwierig macht
                                                            • hier könnte der Kern liegen, warum verschiedene Leute so unterschiedlich starken Nutzen aus LLMs ziehen
                                                            • Skalierungsfrage ist hierdurch vereinfacht: ein Projekt mit 2000 Mitarbeitern kann damit in 200 Zehnerteams geteilt werden, sodass nur die 200 Chirurgen miteinander reden müssen

                                                              • aber nicht gelöst: 200 Chirurgen können immer noch ganz schön viel Kakophonie erzeugen
                                                              • 1 hr 21 min
                                                              • STP067: Linux auf dem Desktop

                                                                Endlich ist die Hardware geliefert und montiert; Zeit, der Elektronik Leben einzuhauchen. Was könnte da besser passen als die Linux-Distribution der Wahl.

                                                                ShownotesWir haben Feedback bekommen, siehe unten. Zuerst die Shownotes zum eigentlichen Thema:

                                                                • Rückbezüge: STP065/066, Gamespodcast

                                                                • Unterschiede zu Windows und macOS

                                                                  • Pro: keine Werbung, kein Tracking, keine nervtötenden Virenscanner oder Abzockereien (achtung Ubuntu)
                                                                    • im Gespräch erwähnt: OOBE\BYPASSNRO, Debloating-Tool für Windows
                                                                    • Pro: nicht der Enshittification durch Microsoft und Apple ausgesetzt (siehe: warum Steam Linux unterstützt)
                                                                    • Pro: Langlebigkeit (siehe Xyrills Schiff des Theseus)
                                                                    • Pro: unendliche Variabilität -> Distributionen (vgl. distrowatch.com, /r/UnixPorn)
                                                                    • Contra: unendliche Variablität :) -> neben verschiedenen Distributionen zum Beispiel auch verschiedene Desktop-Umgebungen usw.
                                                                    • Wie wählt man eine Distribution?

                                                                      • Empfehlung für den ersten Kontakt: z.B. Linux Mint
                                                                      • evtl. je nach speziellen Anforderungen: z.B. für Gaming RegataOS
                                                                      • als Live-System ausprobieren (unter Windows braucht man dafür einen leeren USB-Stick und Rufus oder Ventoy)
                                                                      • als VM unter Windows ausprobieren (VirtualBox)
                                                                      • für weiteren Überblick: auf YouTube nach Distro-Vorstellungen suchen
                                                                      • Feedback I

                                                                        Auf dem Kongress gab es eine Postkarte.

                                                                        Feedback II zu STP066
                                                                        • für deutschsprachige Kaufberatung zu PC-Hardware wurde https://forum.worldofplayers.de/forum/forums/504-Kaufberatung empfohlen
                                                                        • Xyrill hat 80 PLUS falsch erklärt: es geht dort um einen Wirkungsgrad über 80% bei Lasten von 20/50/100%
                                                                        • 59 min
                                                                        • STP066: Desktop-PC basteln, Teil 2

                                                                          Nachdem es sich als eine gute Entscheidung erwiesen hat, die ursprünglich geplante Episode zu teilen, geht es heute nun konkreter um die Auswahl der Komponenten und deren Montage in den Selbstbau-PC.

                                                                          Shownotes
                                                                          • fortgesetzt aus STP065: Wie wählt man Komponenten so, dass alles zusammenpasst?

                                                                            • CPU wählen (Intel oder AMD; übertaktbar oder nicht; Boxed-Lüfter oder Aftermarket-Kühlung, etc.)
                                                                            • Mainboard wählen (passend zum CPU-Sockel und dem benötigten Chipsatz; im gewünschten Formfaktor, z.B. ATX vs. Mini-ITX; mit gewünschten Funktionen, z.B. WLAN oder Toslink-Audio oder viele USB-Steckplätze)
                                                                            • RAM wählen (passend zum RAM-Sockel auf dem Mainboard und den unterstützten RAM-Frequenzen)
                                                                            • GPU wählen (relativ unabhängig von den vorherigen Schritten)
                                                                            • SSD/HDD wählen (unabhängig von den vorherigen Schritten außer: Mainboard muss genügend Steckplätze für NVMe bzw. SATA haben)
                                                                            • Gehäuse wählen (GPU und Mainboard muss passen, bei großen CPUs mit extravaganten Lüftern muss auch die Lüfterhöhe passen)
                                                                            • Netzteil wählen (TDP von allen bisher genannten Sachen aufsummieren -> Netzteil so wählen, dass bei Volllast 80% verwendet werden)
                                                                            • je nach Prioritätensetzung kann auch eine andere Planungsreihenfolge sinnvoll sein (z.B. wenn man ein ganz bestimmtes Gehäuse füllen will)
                                                                            • Webempfehlungen:

                                                                              • https://www.logicalincrements.com
                                                                              • https://reddit.com/r/BuildAPC
                                                                              • https://www.geizhals.de
                                                                              • Mitternachtstarif bei Mindfactory :)
                                                                              • gerade neu: Systembuilding-Guide von Ars Technica für 2024
                                                                              • Wie baut man es zusammen?

                                                                                • Werkzeug: PH1/PH2-Schraubendreher, evtl. Wärmeleitpaste (beim Boxed-Kühler schon voraufgetragen), evtl. Kabelbinder
                                                                                • allgemeine Arbeitsplatzregeln: Zeit nehmen, genügend Platz, gute Beleuchtung
                                                                                • für die Zusammenbaureihenfolge dem Handbuch zum Gehäuse folgen (allgemein: Gehäuse -> Netzteil -> Mainboard -> CPU -> RAM -> Lüfter -> SSD/HDD -> GPU)
                                                                                • Platinen nur an den Kanten anfassen, nicht auf die Leiterbahnen patschen
                                                                                • Steckverbindungen sollten immer ohne Gewalt funktionieren
                                                                                • weitere Empfehlungen

                                                                                  • Spiralschlauch zum Organisieren der Kabel sowohl innerhalb als auch außerhalb des Gehäuses
                                                                                  • zum Reinigen: Staubsauger und Pinsel, Druckluftdose (bitte ohne Treibmittel)
                                                                                  • 1 hr 10 min
                                                                                  • STP065: Desktop-PC basteln

                                                                                    Da wir hier ja alle stilechte Nerds sind, gehört auch der Bau des eigenen PC zu den Standardaufgaben. Wie wir das anfangen, darum soll es diesmal gehen.

                                                                                    Shownotes
                                                                                    • Warum sollte man das tun wollen?

                                                                                      • Gründe für den PC im Allgemeinen
                                                                                        • mehr Leistung als ein Notebook
                                                                                        • vielseitiger als eine Spielekonsole
                                                                                        • ortsfester als ein Smartphone (kann man z.B. im Arbeitszimmer zurücklassen, um von der Arbeit Abstand zu gewinnen)
                                                                                        • Gründe für den Selbstbau-PC im Speziellen
                                                                                          • spezifische Anforderungen (z.B. besonders leistungsstark, besonders leise, besonders kompakt)
                                                                                          • Nachhaltigkeit (Austauschen einzelner Komponenten möglich -> Schiff des Theseus)
                                                                                          • konsistente Qualität (bei Fertig-PCs oft ein, zwei tolle Komponenten und der Rest Billigschrott)
                                                                                          • Wie stellt man die Einkaufsliste zusammen?

                                                                                            • Schritt 1: Welche Komponenten brauche ich grundsätzlich?
                                                                                              • auf jeden Fall: CPU, Mainboard, RAM, SSD, Gehäuse, Netzteil
                                                                                              • nach Bedarf: dedizierte GPU (sonst CPU mit integrierter GPU), HDD, zusätzliche Lüfter und/oder Wasserkühlung (Bilder)
                                                                                              • wenn noch nicht vorhanden: Tastatur, Maus, Monitor(e), Lautsprecher bzw. Kopfhörer, Webcam
                                                                                              • Schritt 2: Passt alles zusammen?
                                                                                                • das und noch mehr beim nächsten Mal
                                                                                                • 52 min
                                                                                                • STP064: Cursed Computer Iceberg Meme, Runde 2

                                                                                                  Heute geht es ein weiteres Mal um Eisberge und Memes. Entweder ttimeless ist gut aufgelegt oder diese Dinge sind nur mit Humor zu ertragen… oder beides.

                                                                                                  ShownotesWir setzen unsere Betrachtung des Cursed Computer Iceberg Meme aus STP042 fort. Das letzte Mal waren wir bis "Below the Water" gekommen. Xyrill hat aber noch ein paar Sachen in den oberen Ebenen gesehen, die besprechenswert sind.

                                                                                                  • "Above the Iceberg" - Oberhalb des Eisberges

                                                                                                    • Little Bobby Tables: das Mem-Beispiel einer SQL-Injektion; dieses wiederum eine klassische Art von Sicherheitslücken (siehe STP049)
                                                                                                    • "On the Iceberg" - Auf dem Eisberg

                                                                                                      • Quine: ein Programm, dass seinen eigenen Programmcode ausdruckt (Beispiele siehe Link)
                                                                                                        • siehe auch: quine-relay
                                                                                                        • Intel Management Engine
                                                                                                        • "Below the Water" - Unterhalb der Wasserlinie

                                                                                                          • rm -rf "$STEAM_ROOT"/*: wie eine einzige uninitialisierte Variable unzählige Computer außer Gefecht setzt (heutzutage würde man sagen, diese Computer wurden ge-crowdstriket)
                                                                                                          • "lp0 on fire": heute eher ein Mem als alles andere, aber wie im Artikel beschrieben gab es früher Drucker mit Heizelementen, die bei Papierstau in Flammen aufgingen (und trotzdem weiter Papier nachschoben); Xyrill fühlt sich an die Szene aus "Fantasia" mit den belebten Besen erinnert
                                                                                                          • Illegale Zahlen: eine konkrete Art, wie Redefreiheit in der Praxis durch Urheberrecht etc. eingeschränkt werden kann
                                                                                                            • siehe auch "Welche Farbe haben deine Bits?"
                                                                                                            • Economics of everyday things - Happy birthday to you
                                                                                                            • Kaltstartattacke: ein sehr handfester Seitenkanalangriff
                                                                                                              • Es gibt auch die Möglichkeit, RAM einzufrieren, damit darin enthaltene Schlüssel forensisch ausgelesen werden können.
                                                                                                              • Manchmal sieht man auch Hausdurchsuchungen, bei denen die Polizei eine USV und Werkzeug zum Kabelspleißen mitbringt.
                                                                                                              • "Middle of the Iceberg" - Mitte des Eisbergs

                                                                                                                • 42.zip: gepackt nur 42 KiB; "beim Entpacken wächst das Datenvolumen allerdings um das Hundertmilliardenfache auf [4 PiB]"
                                                                                                                  • Rückbezug zu Quines: Zip Files All The Way Down
                                                                                                                  • "OpenOffice kann dienstags nicht drucken": ein legendärer Fehlerbericht, fast so gut wie die 500-Meilen-Mail aus STP042
                                                                                                                  • "Bottom of the Iceberg" - Unterseite des Eisbergs

                                                                                                                    • "You fool. You absolute, unmitigated, unadulterated, complete and utter, fool.": Manöverkritik zum Keypair-Spam-Angriff auf das GPG-Keyserver-Netzwerk (GPG hatten wir bereits am Rande in STP048 erwähnt)
                                                                                                                    • Es gibt noch jede Menge im tiefen Wasser. Wir sehen uns wieder in STP084.

                                                                                                                      1 hr 8 min
                                                                                                                    • STP063: Fleißige Biber

                                                                                                                      Wie auch schon in der Vergangenheit nehmen wir es mit der Aktualität unserer "Berichterstattung" nicht ganz so genau. Und so liegt das entsprechende Ereignis etwa 2¹/₂ Monate in der Vergangenheit. Der fünfte fleißige Biber wurde gefunden.

                                                                                                                      ShownotesWir haben Feedback bekommen, siehe unten. Zuerst die Shownotes zum eigentlichen Thema:

                                                                                                                      • aktueller Anlass: Der fünfte fleißige Biber wurde gefunden

                                                                                                                        • Rückbezug zu STP000: theoretische Informatik ist ein Teilgebiet der Mathematik, dass Xyrill lieber "Berechnungstheorie" nennen würde
                                                                                                                        • hierin insbesondere "Berechenbarkeitstheorie": Welche Probleme lassen sich mit Rechenmaschinen lösen?
                                                                                                                        • Church-Turing-These: Berechenbarkeit ist eine intrinsische Eigenschaft eines Problems und nicht abhängig davon, welchen Computer ich zur Lösung einsetze
                                                                                                                          • "Die Klasse der Turing-berechenbaren Funktionen stimmt mit der Klasse der intuitiv berechenbaren Funktionen überein."
                                                                                                                          • Analyse der Berechenbarkeit eines Problems anhand von einfachen Modellmaschinen, z.B. der Turing-Maschine (daher "Turing-berechenbar")
                                                                                                                          • Turing-Vollständigkeit: die Eigenschaft einer Rechenmaschine, alle Probleme lösen zu können, die auch eine Turing-Maschine lösen kann (mal abgesehen von weltlichen Einschränkungen wie Speicherplatz und Rechenzeit)
                                                                                                                          • Rückbezug zu STP021 (Reguläre Ausdrücke): dort hatten wir stärker limitierte Maschinenmodelle erwähnt (endliche Zustandsautomaten, Kellerautomaten)
                                                                                                                          • Aufbau einer Turing-Maschine (Beispielbild aus Wikipedia)

                                                                                                                            • unendlich langes Speicherband mit Feldern, auf denen entweder 0 oder 1 stehen kann
                                                                                                                            • Lese-/Schreibkopf, der das aktuelle Feld lesen und schreiben kann sowie sich in Einzelschritten entlang des Bandes bewegen kann
                                                                                                                            • Programm: endliche Menge von Zuständen, und eine Zustandsübergangsfunktion, die auf Basis der gelesenen Zeichen entscheidet und Zeichen überschreibt sowie den Lesekopf bewegt
                                                                                                                            • Xyrill hat ein Beispiel mitgebracht: ein Programm, dass zwei positive Ganzzahlen subtrahiert; die Zahlen sind als Folgen von 1 gegeben, getrennt von einer 0; zum Beispiel "3-2" wird eingegeben als "111011" und der Lesekopf startet am Anfang der ersten Zahl
                                                                                                                            • Warnung: Wir haben während der Aufzeichnung bemerkt, dass diese Maschine inkorrekt ist. Damit keine Verwirrung entsteht, haben wir die Notizen nicht angepasst.
                                                                                                                            • Zustandsvorrat (durchbuchstabiert in der Reihenfolge der Benutzung, Startzustand ist A):

                                                                                                                              • A: suche nach rechts in der ersten Zahl
                                                                                                                              • B: suche nach rechts in der zweiten Zahl
                                                                                                                              • C: auf dem Ende der zweiten Zahl
                                                                                                                              • D: suche nach links in der zweiten Zahl
                                                                                                                              • E: suche nach links nach der ersten Zahl
                                                                                                                              • Übergangstabelle:

                                                                                                                                • Zustand A, lese 0 -> schreibe 0, gehe nach rechts, neuer Zustand B
                                                                                                                                • Zustand A, lese 1 -> schreibe 1, gehe nach rechts, neuer Zustand A
                                                                                                                                • Zustand B, lese 0 -> schreibe 0, gehe nach links, neuer Zustand C
                                                                                                                                • Zustand B, lese 1 -> schreibe 1, gehe nach rechts, neuer Zustand B
                                                                                                                                • Zustand C, lese 0 -> schreibe 0, gehe nach links, neuer Zustand HALT
                                                                                                                                • Zustand C, lese 1 -> schreibe 0, gehe nach links, neuer Zustand D
                                                                                                                                • Zustand D, lese 0 -> schreibe 0, gehe nach links, neuer Zustand E
                                                                                                                                • Zustand D, lese 1 -> schreibe 1, gehe nach links, neuer Zustand D
                                                                                                                                • Zustand E, lese 0 -> schreibe 0, gehe nach links, neuer Zustand E
                                                                                                                                • Zustand E, lese 1 -> schreibe 0, gehe nach rechts, neuer Zustand A
                                                                                                                                • Beispielausführung für die Aufgabe "3-2"

                                                                                                                                  ... 0 [1] 1 1 0 1 1 0 ... Zustand A
                                                                                                                                  ... 0 1 [1] 1 0 1 1 0 ... Zustand A
                                                                                                                                  ... 0 1 1 [1] 0 1 1 0 ... Zustand A
                                                                                                                                  ... 0 1 1 1 [0] 1 1 0 ... Zustand A
                                                                                                                                  ... 0 1 1 1 0 [1] 1 0 ... Zustand B
                                                                                                                                  ... 0 1 1 1 0 1 [1] 0 ... Zustand B
                                                                                                                                  ... 0 1 1 1 0 1 1 [0]... Zustand B
                                                                                                                                  ... 0 1 1 1 0 1 [1] 0 ... Zustand C
                                                                                                                                  ... 0 1 1 1 0 [1] 0 0 ... Zustand D
                                                                                                                                  ... 0 1 1 1 [0] 1 0 0 ... Zustand D
                                                                                                                                  ... 0 1 1 [1] 0 1 0 0 ... Zustand E
                                                                                                                                  ... 0 1 1 0 [0] 1 0 0 ... Zustand A
                                                                                                                                  ... 0 1 1 0 0 [1] 0 0 ... Zustand B
                                                                                                                                  ... 0 1 1 0 0 1 [0] 0 ... Zustand B
                                                                                                                                  ... 0 1 1 0 0 [1] 0 0 ... Zustand C
                                                                                                                                  ... 0 1 1 0 [0] 0 0 0 ... Zustand D
                                                                                                                                  ... 0 1 1 [0] 0 0 0 0 ... Zustand E
                                                                                                                                  ... 0 1 [1] 0 0 0 0 0 ... Zustand E
                                                                                                                                  ... 0 1 0 [0] 0 0 0 0 ... Zustand A
                                                                                                                                  ... 0 1 0 0 [0] 0 0 0 ... Zustand B
                                                                                                                                  ... 0 1 0 [0] 0 0 0 0 ... Zustand C
                                                                                                                                  ... 0 1 [0] 0 0 0 0 0 ... Zustand HALT
                                                                                                                                • Anmerkungen hierzu

                                                                                                                                  • man kann Turing-Maschinen auch auf viele andere Weisen modellieren, etwa mit größeren Zeichensatz (z.B. alle Dezimalziffern sowie mathematische Symbole, um eine Eingabe wie 127*(3+6/2) zu ermöglichen) oder mehreren Bändern; an der Berechenbarkeit ändert das nichts
                                                                                                                                  • Xyrill belässt es bei obigem Beispiel, dass noch einigermaßen kompakt ist
                                                                                                                                  • Übungsaufgabe: Füge weitere Zustände ein, mit denen der Lesekopf am Ende in die Startposition zurückbewegt wird.
                                                                                                                                  • Aber was ist jetzt mit den Bibern?
                                                                                                                                  • N-ter fleißiger Biber: diejenige Turingmaschine mit N Zuständen, die auf ein initial leeres Band (alles voller Nullen) die meistmöglichen Einsen schreiben kann, bevor sie anhält

                                                                                                                                    • Die Haltebedingung ist wichtig! Sonst können wir mit nur einem Zustand unendlich viele Einsen schreiben ("Zustand A, lese irgendwas -> schreibe 1, gehe nach rechts, neuer Zustand A")
                                                                                                                                    • Problem: Man kann einer Turingmaschine nicht ohne weiteres ansehen, ob sie terminiert oder nicht. -> Das Halteproblem ist eines der klassischen unberechenbaren Probleme.
                                                                                                                                    • Jetzt gefunden wurde BB(5,2) = 47176870; sprich: Der längstmögliche endliche Lauf einer Turingmaschine mit 5 Zuständen und 2 Zeichen auf initial leerem Band ist 47176870 Schritte. (Das ist die gleiche Maschinengröße wie unser Beispiel oben.)
                                                                                                                                    • Bei der Gelegenheit erwähnen wir auch mal die OEIS. Die fleißigen Biber sind zum Beispiel A060843.
                                                                                                                                    • Feedback zu STP038

                                                                                                                                      laalsaas schreibt:

                                                                                                                                      In Minute 32 spricht xyrill von 1,6 Terabit und sagt, dass wären 1,6 Millionen Bit. Ich nehme an, dass es sich hierbei um einen Versprecher im Eifer des Gefechts handelt, sind doch 1 Terabit eine Billion Bit.

                                                                                                                                      Anmerkung: Im Englischen sogar "a trillion bit". :)

                                                                                                                                      Etwas früher ging es um USB und darum, dass man den Stecker nie beim ersten Versuch richtig herum reinbekommt. Dazu möchte ich hier einen „Lifehack“ teilen. Ich hoffe, es gelingt mir, ihn in Textform verständlich zu beschreiben. Ein USB-Stecker ist meist folgendermaßen aufgebaut: Wenn man von vorne daraufguckt, ist der äußere Rand ein rechteckig gebogenes Metallblech. Innen ist eine Hälfte des Rechtecks eine Plastik-„Zunge“, auf der die Kontakte sitzen, in der anderen Hälfte ist Luft. Eine USB-Buchse wiederum besteht aus einem Rechteck, in dem die Hälfte ebenfalls aus einer „Zunge” besteht, die andere aus Luft. Damit nun ein Stecker in die Buchse passt, müssen sich die „Zungen“ gegenüberliegen, damit sie die Luft in der jeweils anderen Komponente ausfüllen. Nun ist es so, dass bei über 90% der horizontal fest verbauten USB-buchsen in Laptops, PCs, usw die „Zunge“ oben ist. Das heißt, man muss einfach die „Zunge“ des USB-steckers nach unten orientieren. Wer immer noch zu faul ist, jedes mal frontal auf seinen USB-Stecker draufzugucken, der sei darauf hingewiesen, dass man auch einfach herausfinden kann, auf welcher Seite die Zunge ist, indem man durch die seitlichen Löcher im Blech des USB-Steckers schaut und darauf achtet, ob da direkt Plastik ist (Zungenseite, die muss nach unten) oder erst etwas Luft und dann Kontakte, wenn man das sieht, hält man den Stecker richtig herum. Seitdem ich diesen Trick kenne, habe ich wesentlich weniger Probleme damit, USB-Stecker richtigherum reinzustecken. Das funktioniert natürlich nicht bei freifliegenden Hubs und auch bei seitlich oder „nach unten“ montierten Buchsen habe ich noch keine Konvention erkennen können, das kann aber auch daran liegen, dass ich zu selten mit denen zu tun habe. Ich hoffe trotzdem, dass ich manchem mit diesem Trick das Leben einfacher machen konnte :)

                                                                                                                                      Zu guter Letzt möchte ich noch anmerken, dass die in Minute 39 von timeless gewählte Formulierung „Der LaTeX-Bruder“ eine (vermutlich ungewollte) Doppelbödigkeit hat. Erfahrene STP-Hörer wissen natürlich, dass es sich hier um Xyrills Bruder handelt, der seine Abschlussarbeit in LaTeX geschrieben hat, aber ich finde, es klingt auch so, wie ein Mitglied des LaTeX-Klosters oder der LaTeX-Sekte, was mich sehr zum Schmunzeln gebracht hat.

                                                                                                                                      Noch mehr Feedback

                                                                                                                                      Weiterhin schreibt Matthias:

                                                                                                                                      Statt Postkarte: Liebe Hörergrüße aus dem Urlaub in Allgäu sendet Matthias.

                                                                                                                                      Anbei ein Bild eines Gedenksteins für Konrad Zuse.

                                                                                                                                      1 hr 1 min
                                                                                                                                    • STP062: Selfhosting

                                                                                                                                      Nachdem unser aller Heimnetzwerk voll funktionsfähig ist, wollen wir nun von daheim aus die ganze Welt mit unseren Online-Diensten beglücken... oder zumindest bestimmte Dinge selbst an den Start rollen.

                                                                                                                                      Shownotes
                                                                                                                                      • Rückbezug STP061: wir haben unser Heimnetzwerk von Schicht 1 bis 3 aufgebaut

                                                                                                                                        • Schicht 3 hatte uns einen Zustellweg durchs Internet gegeben
                                                                                                                                        • Schicht 4 ergänzt Sitzungsverwaltung (z.B. Flusskontrolle und Fehlerkorrektur; hierfür siehe STP005) und Ports
                                                                                                                                        • Warum braucht man Ports? Gedankenexperiment:
                                                                                                                                          • Annahme: Datenpakete werden nur anhand von Quelladresse und Zieladresse zugestellt
                                                                                                                                          • Situation: zwei Prozesse auf demselben PC wollen mit wikipedia.de reden
                                                                                                                                          • Abschicken der Anfragen klappt eventuell noch, da gleiches Ziel
                                                                                                                                          • Problem: Antwortpaket kommt -> Welcher Prozess kriegt das Paket?
                                                                                                                                          • Technisch formuliert: Wie kann man über diese Netzwerkleitung mehrere unabhängige Verbindungen multiplexen?
                                                                                                                                          • Ports: Identifikationsnummer für offene Netzwerkverbindungen; 16 Bit groß (0-65535)

                                                                                                                                            • vgl. Briefkästen/Wohnungsnummern in Mehrparteienhäusern
                                                                                                                                            • Datenpakete auf Schicht 4 werden anhand der Gesamtheit aus Quelladresse, Quellport, Zieladresse, Zielport einer Verbindung zugeordnet
                                                                                                                                            • damit eindeutige Endzustellung an einen Prozess möglich
                                                                                                                                            • auf Server-Seite im Allgemeinen "wohlbekannte" Ports (z.B. 25 für SMTP, 80 für HTTP, 443 für HTTPS), damit Clients ein definiertes Ziel für neue Verbindungen haben
                                                                                                                                            • auf Client-Seite für gewöhnlich automatisch vergebene Ports (meist zwischen 32768-65535)
                                                                                                                                            • Praxisbeispiel: im Browser eine Webseite aufmachen, dann in der Konsole aktive Verbindungen auflisten mit ss -utpn -o state connected
                                                                                                                                            • Wie kann ich zuhause einen Server-Prozess betreiben?

                                                                                                                                              • Außenwelt muss meine IP-Adresse finden können und den entsprechenden Port erreichen können
                                                                                                                                              • Problem 1: IP-Adresse wird durch den Internetanbieter bestimmt und ändert sich -> Dynamisches DNS (nicht zu verwechseln mit der Firma "DynDNS", die nur ein möglicher Anbieter ist)
                                                                                                                                              • Problem 2: Router hat für gewöhnlich einen Paketfilter (Firewall), der nur ausgehende sowie bekannte Verbindungen durchlässt -> Ausnahmeregel ("Port Opening") muss konfiguriert werden; je nach Betriebssystem auch dasselbe auf dem Server selbst erforderlich
                                                                                                                                              • Problem 3: IPv4 mit NAT, lokaler Rechner mit Server-Prozess hat nur eine lokale IP-Adresse -> Portweiterleitung muss konfiguriert werden (damit dann meist auch eine Ausnahmeregel in der Firewall verbunden)
                                                                                                                                              • Was kann ich zuhause betreiben?

                                                                                                                                                • E-Mail definitiv nicht, MTAs aus Endkunden-IP-Bereichen werden von den großen Betreibern als Spam-Schleudern interpretiert und blockiert
                                                                                                                                                • Videotelefonie auch eher nicht, weil da NAT-Durchdringung noch problematischer ist
                                                                                                                                                • Faustregel: fast alles mit HTTP sollte gehen, sofern man nicht durch den oft dünnen Upstream von Endkunden-Internetanschlüssen begrenzt ist
                                                                                                                                                • Xyrill betreibt (teils zuhause, teils auf gemieteten Servern im Rechenzentrum): Gitea, Jitsi Meet, Matrix, NextCloud, nginx (siehe STP022), Prometheus (siehe STP032)
                                                                                                                                                • andere Vorschläge: Bitwarden, Kodi, Mastodon oder andere ActivityPub-Server (siehe STP057), Paperless-NGX, Pi-Hole
                                                                                                                                                • im Gespräch erwähnt

                                                                                                                                                  • Pentaradio zu Quellcode-Verwaltung mit Git: https://c3d2.de/news/pentaradio24-20210727.html
                                                                                                                                                  • Audio-Streaming-Software: https://www.navidrome.org/
                                                                                                                                                  • 1 hr 4 min
                                                                                                                                                  • STP061: Heimnetzwerk

                                                                                                                                                    In dieser Episode soll es etwas detaillierter um die unteren Schichten im Netzwerkstapel gehen. Außerdem: ttimeless fordert biologische Lösungen für Verknöcherungsprobleme und Xyrill räumt mit falschen Werbeversprechen auf.

                                                                                                                                                    Shownotes
                                                                                                                                                    • Rückbezug: STP005 (Netzwerk-Schichtenmodell)

                                                                                                                                                      • seither haben wir über die unteren Schichten des Netzwerks nicht allzu viel gesprochen, sondern eher über Anwendungen darauf (siehe STP018 zu DNS, STP022 zu dem Web, STP052/STP054 zu TLS, STP057 zu ActivityPub/Mastodon)
                                                                                                                                                      • heute mal wieder mehr die Infrastruktursicht (Layer 1 bis 4), vor allem aus praktischer Endanwendersicht
                                                                                                                                                      • Layer 1/2 kabelgebunden: über achtadrige Twisted-Pair-Kabel mit üblicherweise vorkonfektionierten RJ45-Steckern (8P8C) nach IEEE 802.3 "Ethernet"

                                                                                                                                                        • Twisted Pair: Kabel mit verdrillten Doppeladern und einer (je nach Kategorie) zunehmenden Menge an Abschirmungen, damit das Kabel nicht z.B. unbeabsichtigt zur Antenne wird :) – Wikipedia hat eine schöne Visualisierung, wie besser geschirmte Kabel für mehr Bandbreite sorgen
                                                                                                                                                        • vorkonfektionierte Stecker: man kann auch selber konfektionieren (sprich: Kabel auf die richtige Länge zuschneiden und Modularstecker anbringen)
                                                                                                                                                        • im Rechenzentrum findet man auch Ethernet, aber oberhalb der 10 Gbit/s dann nur noch auf Basis von Glasfasern und SFP-Modulen
                                                                                                                                                        • Kabel alleine reichen nicht, man braucht mindestens noch einen Switch, um tatsächlich ein Kabelnetzwerk zu erhalten
                                                                                                                                                        • der Switch ist oft auch ein Router, der das lokale Kabelnetzwerk mit dem Internet verbindet
                                                                                                                                                        • Wir empfehlen: Beim Hausbau oder -umbau am besten gleich Cat7 verlegen (oder zumindest Leerrohre), damit man sich nicht mit WLAN-Signalstärken rumärgern muss.
                                                                                                                                                          • im Gespräch erwähnt: Keystone-Modul
                                                                                                                                                          • Layer 1/2 kabellos: über Radiowellen im 2,4-GHz-Band oder im 5-GHz-Band nach IEEE 802.11 "WLAN bzw. Wi-Fi"

                                                                                                                                                            • was bei Ethernet der Switch, ist bei WLAN der Access Point (AP)
                                                                                                                                                            • übliches Setup zuhause: der zentrale Router macht sowohl LAN (Ethernet) als auch WLAN
                                                                                                                                                            • Xyrills Setup: ein Server agiert als Router, aber macht nur LAN; am LAN hängt ein WLAN-AP (kein WLAN-Router, somit nur ein lokales Netz für alle Endgeräte)
                                                                                                                                                            • Layer 3 mit IPv4 (1981)

                                                                                                                                                              • auf dem Router läuft mindestens ein DHCP-Server, um die lokalen Adressen zu vergeben; oft auch ein DNS-Resolver (siehe STP018)
                                                                                                                                                              • an und für sich sind Netzwerke ineinander verschachtelt, z.B. kann ein Netzwerk 10.11.0.0/16 ein Teilnetzwerk 10.11.12.0/24 enthalten (Analogie: Telefonanlage in einem Firmengebäude mit Verbindung ins weite Telefonnetz); damit fast beliebig feine Unterteilungen des Netzwerks möglich
                                                                                                                                                              • Problem: insgesamt etwa 4,3 Mrd. unterschiedliche IP-Adressen, aber davon nur etwa 3,7 Mrd. "weltweit gültige" Adressen
                                                                                                                                                              • in der Praxis sehr viel NAT: ein Heimnetzwerk kriegt nur eine IP-Adresse für den Router; innerhalb des lokalen Netzwerkes private Adressen (z.B. 192.168.x.y), die nicht direkt aus dem Internet erreichbar sind
                                                                                                                                                              • Layer 3 mit IPv6 (1998)

                                                                                                                                                                • IPv6-Adressen haben sehr viel mehr Ziffern und sind damit extrem viel zahlreicher, aber auch unhandlicher
                                                                                                                                                                • noch sehr viele andere Unterschiede zu IPv4, die mit dazu führten, dass sich IPv6 nur sehr langsam verbreitet hat bzw. immer noch verbreitet
                                                                                                                                                                • Endanwender kriegen bei IPv6 nicht nur einzelne Adressen, sondern wie ursprünglich vorgesehen ganze Netze, die ihr Router frei verwalten kann
                                                                                                                                                                • statt DHCP meist nur SLAAC (Stateless Address Auto-Configuration; zustandslose Adressen-Autokonfiguration): Router teilt den Netzwerkbereich mit und Endgeräte würfeln selbsttätig gültige Adressen
                                                                                                                                                                • Umfangreichere Infos im RFC-Podcast zu IPv6
                                                                                                                                                                • Problem: Wenn jedes Gerät vom Computer bis zur smarten Glühbirne eine global eindeutige IPv6-Adresse hat, ist das nicht ein Traum für jeden Überwachungskapitalisten?
                                                                                                                                                                • Layer 3 mit VPN (Virtual Private Network)

                                                                                                                                                                  • Idee: Netzwerkverkehr ist zumindest auf Layer 2 und darüber auch nur Bits und Bytes; die kann man als Nutzdaten behandeln und in eine andere Netzwerkverbindung zu einem VPN-Server einpacken (meist auch mit Verschlüsselung drumherum, z.B. TLS)
                                                                                                                                                                  • Xyrills Setup: ein Server im Rechenzentrum fungiert als VPN-Server, mit dem Xyrills Endgeräte alle verbunden sind; aus Sicht der Endgeräte sind alle im selben lokalen Netzwerk; damit auch z.B. vom Notebook von unterwegs "direkter" Zugriff auf den Heimserver möglich (trotz NAT im Plaste-Router)
                                                                                                                                                                  • das häufigere Setup beim Endanwender: aller Datenverkehr nach außen geht durch einen VPN-Tunnel und erst ab dem Server des VPN-Anbieters weiter ins weite Internet
                                                                                                                                                                  • tatsächlicher Nutzen: es sieht so aus, als ob man in einer anderen geografischen Region sitzt, was z.B. für Streaming-Dienste relevant sein kann (aber Vorsicht: das verstößt oft gegen die Geschäftsbedingungen des Streamers; das hier ist keine Rechtsberatung)
                                                                                                                                                                  • fragwürdiger Nutzen: man muss nicht mehr dem Internetanbieter vertrauen, dass der nicht den eigenen Datenverkehr mitliest (Problem 1: in Zeiten von allgegenwärtigem TLS sieht der ISP sowieso nur die Domain-Namen und IP-Adressen, nicht die Inhalte; Problem 2: man verschiebt die Vertrauensfrage nur vom Internetanbieter zum VPN-Anbieter)
                                                                                                                                                                  • Layer 4 bis 7 dann beim nächsten Mal

                                                                                                                                                                    1 hr 18 min
                                                                                                                                                                  • STP060: Praxisbeispiel: Datenauswertung auf der Kommandozeile

                                                                                                                                                                    Nachdem die beiden sich gegenseitig ihr Leid geklagt haben, geht es dann doch noch um Technik. Oder eher um deren Anwendung. Diesmal wieder mit einer Hands-on-Folge, denn es ist wichtig, vor Kunden und bei Präsentationen einen professionellen Eindruck zu machen.

                                                                                                                                                                    Shownotes
                                                                                                                                                                    • Rückblick: STP006 "Kommandozeilen und Unixphilosophie"

                                                                                                                                                                      • ttimeless hat gerade eine Gelegenheit, Daten zu analysieren, an der man das praktische Vorgehen mit Kommandozeilen-Werkzeugen gut demonstrieren kann
                                                                                                                                                                      • Ausgangssituation: Klimasensor-Datenlogger in verschiedenen Räumen messen einmal pro Minute Temperatur und Luftfeuchtigkeit
                                                                                                                                                                      • mitgelieferte Software bietet eine rudimentäre Visualisierung sowie einen Datenexport als CSV
                                                                                                                                                                      • die hier besprochenen CSV-Dateien können zum Nachvollziehen heruntergeladen werden
                                                                                                                                                                      • Ziel: eigene Datenvisualisierung mit gnuplot
                                                                                                                                                                      • erste Sichtprüfung:

                                                                                                                                                                        • acht Kopfzeilen mit Metadaten und Auswertungen (Berichtszeitraum, Maximum/Minimum/Durchschnitt)
                                                                                                                                                                        • diesen Header brauchen wir nicht, wir wollen die Rohdaten
                                                                                                                                                                        • Option 1: sofern immer acht Zeilen, z.B. tail -n +9 oder sed 1,8d
                                                                                                                                                                        • Option 2: Suchmuster auf den Zeileninhalt der letzten Kopfzeile, z.B. sed 1,/^Aufnahmezeit/d
                                                                                                                                                                        • Option 3: nur Zeilen auswählen, die nach Daten aussehen, z.B. grep '^"[0-9]'
                                                                                                                                                                        • Kopfzeilen entfernt:

                                                                                                                                                                          • nächstes Problem: die Anführungszeichen um die einzelnen Werte werden gnuplot verwirren -> würden wir mit tr -d \" wegbekommen
                                                                                                                                                                          • Problem: dann wären die Dezimalkommas nicht von den wertetrennenden Kommas zu unterscheiden
                                                                                                                                                                          • unsere Lösung: während wir Anführungszeichen entfernen, werden dazwischenliegende Kommas gleichzeitig durch ein anderes Trennzeichen (hier einen Tabulator) ersetzt -> sed 's/^"//; s/","/\t/g; s/"\s*$//'
                                                                                                                                                                          • hierin ist Trickserei erforderlich, weil die erzeugten Dateien Windows-Zeilenenden haben (CR+LF), nicht Unix-Zeilenenden (nur LF) -> könnte man auch vorher mit dos2unix beheben, dann ist statt s/"\s*$// nur s/"$// erforderlich
                                                                                                                                                                          • Alternative (erfordert csvkit): csvformat -d , -q \" -U 3 -D $'\t'
                                                                                                                                                                          • Anführungszeichen entfernt: Balkon.dat

                                                                                                                                                                            • zu Xyrills Überraschung ist das schon ausreichend, den Rest können wir in gnuplot machen
                                                                                                                                                                            • Anzeige in gnuplot: das untenstehende Programm als Balkon.gp abspeichern, gnuplot aufrufen und load 'Balkon.gp' eingeben)

                                                                                                                                                                              set xdata time
                                                                                                                                                                              set timefmt '%d-%m-%Y %H:%M:%S'
                                                                                                                                                                              set format x '%d.%m.%Y %H:%M:%S'
                                                                                                                                                                              set decimalsign ','
                                                                                                                                                                              set datafile separator "\t"
                                                                                                                                                                              set ylabel "Temperatur °C"
                                                                                                                                                                              set y2label "Luftfeuchte %"
                                                                                                                                                                              set y2tics
                                                                                                                                                                              plot 'Balkon.dat' using 1:2 title 'Temperatur' with lines axes x1y1, 'Balkon.dat' using 1:3 title 'Luftfeuchtigkeit' with lines axes x1y2
                                                                                                                                                                            • Für die Ausgabe in eine Datei können noch diese beiden Zeilen vorangestellt werden:

                                                                                                                                                                              set terminal svg background "white" dashed size 1920,1080
                                                                                                                                                                              set output "Balkon.svg"
                                                                                                                                                                            • Was, wenn gnuplot nicht so clever wäre?

                                                                                                                                                                              • Dezimaltrennzeichen von Komma in Punkt ändern:
                                                                                                                                                                              • Datumsformat in ISO ändern:
                                                                                                                                                                              • Xyrill hatte auch geschaut, wie man die Zeitangaben in date -d bekommen könnte, um sie damit umzuwandeln, und wurde von einem wunderschönen Zitat begrüßt (nachfolgende deutsche Übersetzung mittels DeepL):
                                                                                                                                                                              • Unsere zeitlichen Maßeinheiten, von Sekunden bis hin zu Monaten, sind so kompliziert, asymmetrisch und disjunkt, dass ein kohärentes mentales Rechnen in der Zeit nahezu unmöglich ist. In der Tat, hätte sich ein tyrannischer Gott ausgedacht, unseren Geist an die Zeit zu versklaven, um es uns nahezu unmöglich zu machen, der Unterwerfung unter durchweichte Routinen und unangenehme Überraschungen zu entkommen, hätte er kaum etwas Besseres tun können, als uns unser gegenwärtiges System zu überliefern. Es ist wie ein Satz trapezförmiger Bauklötze, ohne vertikale oder horizontale Flächen, wie eine Sprache, in der der einfachste Gedanke verschnörkelte Konstruktionen, nutzlose Partikel und langatmige Umschreibungen erfordert. Im Gegensatz zu den erfolgreicheren Mustern der Sprache und der Wissenschaft, die es uns ermöglichen, Eindrücken kühn oder zumindest nüchtern zu begegnen, fördert unser System der zeitlichen Berechnung stillschweigend und beharrlich unseren Terror vor der Zeit.

                                                                                                                                                                                ... Es ist, als ob Architekten die Länge in Fuß, die Breite in Metern und die Höhe in Ellen messen müssten; als ob grundlegende Bedienungsanleitungen die Kenntnis von fünf verschiedenen Sprachen erfordern würden. Kein Wunder also, dass wir in unsere eigene unmittelbare Vergangenheit oder Zukunft, auf den letzten Dienstag oder den Sonntag in einer Woche, oft mit einem Gefühl hilfloser Verwirrung blicken. ...

                                                                                                                                                                              • im Gespräch erwähnt: ASCII-Folge von Request for Comments

                                                                                                                                                                                1 hr 6 min
                                                                                                                                                                              • STP059: Nebenläufigkeit

                                                                                                                                                                                Nachdem es in STP015 (Multitasking) bereits um die nacheinanderfolgende Verteilung von Resourcen an verschiedene Prozesse ging, kommt heute echtes "gleichzeitig Arbeiten" dran.

                                                                                                                                                                                Shownotes
                                                                                                                                                                                • Rückbezug und Abgrenzung zu STP015 (Multitasking in Betriebssystemen)

                                                                                                                                                                                  • Definition von Nebenläufigkeit: "in der Informatik die Eigenschaft eines Systems, mehrere Aufgaben, Berechnungen, Anweisungen oder Befehle gleichzeitig ausführen zu können"
                                                                                                                                                                                  • Definition von Multitasking: "die Fähigkeit eines Betriebssystems, mehrere Aufgaben [...] (quasi-)nebenläufig auszuführen"
                                                                                                                                                                                  • eins definiert das andere \o/ -> wir schauen auf den Begriffsgebrauch in der Praxis
                                                                                                                                                                                  • Multitasking: die funktionale Umsetzung einer Multiprozess-Architektur in Hardware und Software (auf Betriebssystem-Ebene)
                                                                                                                                                                                  • Nebenläufigkeit: die Ertüchtigung von Userspace-Programmen zur Ausnutzung dieser Möglichkeiten unter Wahrung des korrekten Verhaltens
                                                                                                                                                                                  • Grundproblem: Wie vermeidet man Konflikte und Verwirrung beim Umgang mit geteilten Ressourcen?

                                                                                                                                                                                    • "Ressource" bedeutet vor allem: Speicherstellen, Dateisystem-Einträge (Dateien und Verzeichnisse), Geräte, (Aufmerksamkeit der Benutzerin)
                                                                                                                                                                                    • explizit nicht Zeit; darum kümmert sich bereits die Multitasking-Unterstützung des Betriebssystems
                                                                                                                                                                                    • Race: eine Situation, bei der das Ergebnis (und insbesondere die Korrektheit) mehrerer nebenläufiger Prozesse davon abhängt, in welcher Reihenfolge die einzelnen Rechenschritte verschiedener Prozesse zufälligerweise ausgeführt werden

                                                                                                                                                                                      • allgemein bekannt als Race Condition (Wettlaufsituation) oder beim Speicherzugriff insbesondere Data Race
                                                                                                                                                                                      • Beispielsituation: im Arbeitsspeicher liegt ein Zähler mit aktuellem Wert 40; zwei Prozesse A und B wollen diesen Zähler gleichzeitig um 1 erhöhen -> erwarteter Endwert 42
                                                                                                                                                                                      • Problem: "Zahl im Arbeitsspeicher verändern" ist nicht, wie Speicherzugriff in CPUs funktioniert (siehe STP007); tatsächlich sind jeweils drei Schritte erforderlich (Einlesen in CPU-Register, Erhöhen um 1, Zurückschreiben in den RAM)
                                                                                                                                                                                      • möglicher Ausgang: beide Prozesse laufen auf verschiedenen CPUs, lesen gleichzeitig den Wert 40 in ihre CPU-Register, erhöhen gleichzeitig auf 41, schreiben dies zurück -> Ergebnis 41 statt 42
                                                                                                                                                                                      • "auf verschiedenen CPUs" ist hier nicht erforderlich: z.B. A liest ein und erhöht, wird unterbrochen, B liest ein und erhöht, B schreibt zurück, wird unterbrochen, A schreibt zurück
                                                                                                                                                                                      • "zwei Prozesse" ist auch nicht erforderlich: Prozesse können auch in Threads (parallele Ausführungsstränge) unterteilt sein, die nebenläufig Code ausführen, aber ansonsten fast alle Ressourcen (Speicherseiten, offene Dateien, etc.) teilen
                                                                                                                                                                                      • wir brauchen ein Mutex: einen Mechanismus zum wechselseitigen Ausschluss ("Mutual Exclusion")

                                                                                                                                                                                        • Problem: Wie implementiert man sowas?
                                                                                                                                                                                        • Idee: bevor wir den Zähler anfassen, fragen wir bei einem zentralen Prozess nach einer Sperre für diesen Zähler an; dieser Prozess vermerkt Sperr- und Entsperrvorgänge in seinem internen Speicher

                                                                                                                                                                                          • dieser Kontrollprozess könnte auch einfach ein Teil des Betriebssystems sein und der Sperr-/Entsperrvorgang ein Syscall (siehe STP019)
                                                                                                                                                                                          • Vorteil: innerhalb dieses Kontrollprozesses keine Nebenläufigkeit und damit keine Gefahr eines Data Race
                                                                                                                                                                                          • Nachteil: Interprozess-Kommunikation ist vergleichsweise grauenhaft langsam (Millisekunden vs. Mikrosekunden)
                                                                                                                                                                                          • Idee: in der kritischen Region (von Auslesen des Zählers bis Zurückschreiben) verbieten wir dem Betriebssystem, unseren Prozess zu unterbrechen

                                                                                                                                                                                            • Problem 1: hilft nur bei nebenläufigen Prozessen auf demselben CPU-Kern
                                                                                                                                                                                            • Problem 2: immer noch ein teurer Syscall
                                                                                                                                                                                            • Problem 3: böswillige Prozesse könnten einfach ihre gesamte Laufzeit als kritische Region markieren und die Rechenzeit blockieren
                                                                                                                                                                                            • praktische Umsetzung von Mutexen mittels Atomics: spezielle CPU-Instruktionen, die nicht unterbrochen werden können

                                                                                                                                                                                              • Beispiel für Mutex: "Fetch and Add" liest einen Wert aus dem Speicher aus, erhöht ihn um das Argument, und schreibt den erhöhten Wert zurück
                                                                                                                                                                                              • schneller als ein Kontextwechsel zu einem Kontrollprozess oder ein Syscall
                                                                                                                                                                                              • langsamer als ein normaler Speicherzugriff, da eventuell Caches ignoriert oder aktiv geleert werden müssen
                                                                                                                                                                                              • in der Praxis evtl. Kombination mit Syscalls, um bei blockiertem Mutex den Prozess zu unterbrechen (z.B. unter Linux das "Fast Userspace Mutex" bzw. Futex)
                                                                                                                                                                                              • andere Perspektive, hier zitiert aus der Programmiersprache Go: "Do not communicate by sharing memory; instead, share memory by communicating."

                                                                                                                                                                                                • statt Zugriffssicherungen für geteilten Speicher dort eher Nutzung von "Kanälen" (Channels) zur Nachrichtenübermittlung zwischen Threads
                                                                                                                                                                                                • Beispiel "Worker Pool": mehrere gleichartige und voneinander unabhängige Teilaufgaben sind abzuarbeiten (z.B. 100 Bilder in ein anderes Dateiformat umwandeln)
                                                                                                                                                                                                • Idee: ein Worker (Arbeits-Prozess oder Arbeits-Thread) pro CPU-Kern; außerdem ein zentraler Prozess, der die Aufgaben verteilt; Zentrale stellt alle Dateinamen in einen Kanal, Arbeiter greifen nacheinander aus dem Kanal die Dateinamen heraus
                                                                                                                                                                                                • unter der Haube nutzt der Kanal Atomics, um sich vor Data Races zu schützen
                                                                                                                                                                                                • Rückbezug zu STP027: sobald man mehrere Threads untereinander koordinieren muss, hat man das ganze Problemfeld "Verteilte Systeme", was nach Xyrills Erfahrung nochmal wesentlich nerviger ist als Data Races
                                                                                                                                                                                                • Abendgedanken: Amdahl'sches Gesetz

                                                                                                                                                                                                  • mehr CPU-Kerne machen nur Dinge schneller, die wahrhaft nebenläufig sind
                                                                                                                                                                                                  • 51 min

                                                                                                                                                                                                  About Schlüsseltechnologie

                                                                                                                                                                                                  From the publisher's feed

                                                                                                                                                                                                  Die IT hat unser Leben in den letzten Jahrzehnten von Grund auf verändert. Aber wie funktioniert sie wirklich? Das möchte ttimeless mal erklärt bekommen. Zum Glück hat Xyrill Antworten.

                                                                                                                                                                                                  More shows like Schlüsseltechnologie

                                                                                                                                                                                                  Freak Show by Metaebene Personal Media - Tim Pritlove

                                                                                                                                                                                                  Freak Show

                                                                                                                                                                                                  9 Listeners

                                                                                                                                                                                                  Lage der Nation - der Politik-Podcast aus Berlin by Philip Banse & Ulf Buermeyer

                                                                                                                                                                                                  Lage der Nation - der Politik-Podcast aus Berlin

                                                                                                                                                                                                  219 Listeners

                                                                                                                                                                                                  Logbuch:Netzpolitik by Metaebene Personal Media - Tim Pritlove

                                                                                                                                                                                                  Logbuch:Netzpolitik

                                                                                                                                                                                                  5 Listeners