Schlüsseltechnologie

Schlüsseltechnologie

By Xyrillian NoisesTechnology
Download on the App Store

Schlüsseltechnologie episodes

  • STP018: DNS im Detail

    Nachdem wir das Thema in STP002 schon einmal gestreift haben, wollen wir in dieser Episode genauer darauf eingehen.

    Woher weiß unser Computer eigentlich, welche IP-Adresse er aufrufen muss, um uns all die schönen Katzenvideos zu zeigen?

    ShownotesNicht die Desoxyribonukleinsäure, sondern das Domain Name System.

    • Rückbezüge

      • zu STP002 (Aufruf einer Webseite): Webserver haben Domain-Namen, die aufgelöst werden müssen
      • zu STP012 (Datenbanken): DNS ist eine globale, verteilte (aber nicht dezentrale!), hierarchische Datenbank
      • Grundaufgabe: Namensauflösung

        • menschenlesbare und stabile Server-Namen anstatt unlesbarer und möglicherweise wechselnder IP-Adressen
        • aber auch andere Abfragen möglich, siehe unten
        • historischer Vorgänger: /etc/hosts
        • Aufteilung des Internet in Domains (Domänen) und verschachtelte Subdomains (Unterdomänen)

          • Beispiel: Wurzeldomain "." enthält Domain "org" enthält Domain "wikipedia.org" enthält Domain "de.wikipedia.org" -> deswegen hierarchische Datenbank
          • wenn die Subdomain einer anderen Person oder Organisation gehört als die Domain darüber, hat man eine neue Zone
          • jeder Inhaber einer Zone hält auf einem (oder mehreren) Webserver(n) die Inhalte seiner Zone (also Domain-Daten und Zonenreferenzen) in einem Nameserver -> deswegen verteilte Datenbank
          • Wurzelzone ist unter der Kontrolle der ICANN -> deswegen nicht dezentrale Datenbank

            • Verteilung der Wurzelzone durch die Root-Nameserver
            • finanzieller Anreiz zum Erlauben von immer mehr Top-Level-Domains (TLD)
            • Einträge in einer DNS-Zone heißen Records (Datensätze), mehrere Record Types möglich:

              • A, AAAA: IP-Adresse zu einer Domain (A = IPv4, AAAA = IPv6)
              • CNAME: Domain-Alias (anstatt direkt eine IP zu erhalten, erhält man eine andere Domain, die man stattdessen nach der finalen IP fragen muss)
              • PTR: Rückwärtsabfrage, Domain zu einer IP-Adresse
              • MX: Mail-Server zu einer Domain
              • SRV: ähnlich wie MX, aber für beliebige Dienste (z.B. XMPP)
              • TXT: beliebige Textinformationen (wird zum Beispiel für Mail-Empfangsregeln verwendet)
              • NS: Zonendelegation, die entsprechende Domain ist der Ausgangspunkt einer Unterzone und der Record enthält den autoritativen Nameserver für diese Zone
              • Abfrage einer bestimmten Domain

                • Grundidee: zuerst Root-Nameserver fragen, der delegiert an den Nameserver der TLD, der delegiert an den Nameserver der Second-Level-Domain, etc.
                • Problem: absurd hohe Last auf die Root-Nameserver
                • Lösung 1: jeder Eintrag in einer Nameserver-Datenbank hat eine TTL ("Time to Live")
                • Lösung 2: Endnutzer reden nicht direkt mit den autoritativen Nameservern, sondern mit Vermittlern (Resolver), die sie sich mit anderen Endnutzern teilen
                • Komplexbeispiel: Abfrage von de.wikipedia.org über die Root-Nameserver mit dem Unix-Tool dig (Ausgaben stark gekürzt)

                  $ dig A de.wikipedia.org @m.root-servers.net
                  ;; QUESTION SECTION:
                  ;de.wikipedia.org. IN A
                  ;; AUTHORITY SECTION:
                  org. 172800 IN NS a0.org.afilias-nst.info.
                  ...
                  ;; ADDITIONAL SECTION:
                  a0.org.afilias-nst.info. 172800 IN A 199.19.56.1
                  ...
                  $ dig A de.wikipedia.org @199.19.56.1
                  ;; QUESTION SECTION:
                  ;de.wikipedia.org. IN A
                  ;; AUTHORITY SECTION:
                  wikipedia.org. 86400 IN NS ns0.wikimedia.org.
                  ...
                  ;; ADDITIONAL SECTION:
                  ns0.wikimedia.org. 86400 IN A 208.80.154.238
                  ...
                  $ dig A de.wikipedia.org @208.80.154.238
                  ;; QUESTION SECTION:
                  ;de.wikipedia.org. IN A
                  ;; ANSWER SECTION:
                  de.wikipedia.org. 86400 IN CNAME dyna.wikimedia.org.
                  $ dig A dyna.wikimedia.org @199.19.56.1
                  ;; QUESTION SECTION:
                  ;dyna.wikimedia.org. IN A
                  ;; AUTHORITY SECTION:
                  wikimedia.org. 86400 IN NS ns0.wikimedia.org.
                  ...
                  ;; ADDITIONAL SECTION:
                  ns0.wikimedia.org. 86400 IN A 208.80.154.238
                  ...
                  $ dig A dyna.wikimedia.org @208.80.154.238
                  ;; QUESTION SECTION:
                  ;dyna.wikimedia.org. IN A
                  ;; ANSWER SECTION:
                  dyna.wikimedia.org. 600 IN A 91.198.174.192
                  • zum Vergleich: Abfrage von de.wikipedia.org über einen öffentlichen Resolver (beachte die unterschiedlichen TTL-Werte)
                  • $ dig A de.wikipedia.org @9.9.9.9
                    ;; QUESTION SECTION:
                    ;de.wikipedia.org. IN A
                    ;; ANSWER SECTION:
                    de.wikipedia.org. 32533 IN CNAME dyna.wikimedia.org.
                    dyna.wikimedia.org. 227 IN A 91.198.174.192
                    • Beispiel: Rückwärtsabfrage der so erhaltenen IP mittels PTR-Record unter der Pseudo-Domain in-addr.arpa
                    • dig PTR 192.174.198.91.in-addr.arpa
                      ;; QUESTION SECTION:
                      ;192.174.198.91.in-addr.arpa. IN PTR
                      ;; ANSWER SECTION:
                      192.174.198.91.in-addr.arpa. 1104 IN PTR text-lb.esams.wikimedia.org.
                      • Woher kommt der Resolver?

                        • normalerweise über DHCP (auf demselben Wege, über den das eigene Gerät eine IP-Adresse vom Router bekommt; oder über den der Router eine IP-Adresse vom ISP bekommt), unter Unix siehe /etc/resolv.conf
                        • somit meist ein Resolver unter Kontrolle des ISP
                        • alternative Resolver: z.B. 1.1.1.1 (Cloudflare), 8.8.8.8 (Google), 9.9.9.{9,10,11} (Quad9), 5.9.164.112 (Digitalcourage)
                        • Resolverwahl: Implikationen für Privatsphäre und für Vertrauenswürdigkeit
                        • DNS selbst ist unverschlüsselt -> neuere Entwicklung: DNS-over-TLS und DNS-over-HTTP

                          • eigentlich würde DNS-over-TLS reichen, aber kann dann vom ISP geblockt werden; HTTP hingegen ist aus praktischen Gründen quasi unblockbar
                          • Unterstützung in Betriebssystemen noch lückenhaft, aber Browser können DoT und DoH am Betriebssystem vorbei machen (Browsereinstellungen prüfen!)
                          • alternative DNS-Roots: meist in privaten Netzen (z.B. Firmen-Intranet mit .corp-Domains), aber es gibt auch alternative Roots mit globalem Anspruch (z.B. Namecoin)

                            1 hr 25 min
                          • STP017: Lokalisierung

                            Mit den Eigenheiten verschiedener Kultur- und Sprachräume hat wohl jeder schon so seine Erfahrungen gesammelt.

                            In der aktuellen Episode soll es um die ortsbezogenen Einstellungen von Computersystemen gehen.
                            Und natürlich gibt uns das ein weiteres Mal die Möglichkeit, abschätzig über imperiale Einheiten zu sprechen.

                            ShownotesLetztes Mal hatten wir Komplikationen wegen der Zeit, diesmal wegen des Raumes. :)

                            • vergleiche: Lokalisierung bei Filmen

                              • Übersetzung als Untertitel, Voice-Over oder Synchronisation
                              • viele Schwierigkeiten der Medienlokalisierung spiegeln sich im Softwarefall
                                • Beispiel: Formulierung der Übersetzung muss sich an die verfügbare Zeit im Film anpassen
                                • in Software müssen übersetzte Beschriftungen in das ursprüngliche Layout reinpassen
                                • Softwarelokalisierung: zwei getrennte Schritte

                                  • Internationalisierung (i18n): Gestaltung des Programms derart, dass es einfach an verschiedene Sprachen und Kulturen angepasst werden kann -> Aufgabe für den Entwickler
                                  • Lokalisierung (l10n): der Akt der Anpassung an eine Zielsprache -> Aufgabe für den Übersetzer
                                  • Aspekte von Internationalisierung anhand der Locale-Einstellungen in Unix-Systemen (siehe man 7 locale)

                                    • LC_MESSAGES: Sprache für übersetzte Texte
                                    • LC_TIME, LC_DATE: Darstellung von Datums- und Zeitangaben (siehe XKCD 2562 und XKCD 1179)
                                    • LC_COLLATE: alphabetische Sortierreihenfolge (siehe Wikipedia, z.B. Deutsch sortiert "ä" wie "a", aber Dänisch sortiert "ä" hinter "z")
                                    • LC_NUMERIC, LC_MONETARY: Darstellung von Zahlen und Währungsangaben (z.B. Dezimalpunkt vs. Komma, Tausendertrennzeichen, Währungszeichen vor oder hinter dem Wert)
                                    • LC_NAME: Anreden (z.B. "Herr" und "Frau" im Deutschen)
                                    • LC_MEASUREMENT: Größenangaben in imperialen oder metrischen Einheiten
                                    • LC_PAPER: Standard-Papierformat für Dokumente (z.B. DIN A4 in Deutschland, aber Letter in USA)
                                    • LC_CTYPE (character type): Standard-Zeichensatz für Dateien
                                    • usw.
                                    • mögliche Werte für eine Locale-Wahl in Unix

                                      • klassisch: de_DE, de_AT, de_CH, en_US, en_GB usw.
                                      • mit UTF-8-Präferenz: de_DE.UTF-8, en_US.UTF-8 usw.
                                      • Spezialfall: LC_MESSAGES=C zeigt Texte, wie sie im originalen Quelltext stehen
                                      • gemischte Konfiguration möglich, z.B. Xyrill hat fast überall de_DE.UTF-8, aber LC_MESSAGES=C
                                      • Aufgaben des Softwareentwicklers bei i18n

                                        • Verwendung von internationalisierbaren Betriebssystemfunktionen oder Programmbibliotheken, wann immer Ein- und Ausgaben lokalitätsabhängig sind
                                        • Testen von grafischen Oberflächen im Right-to-Left-Modus (in Sprachen mit RTL-Schrift läuft auch das GUI-Layout von rechts nach links, siehe z.B. arabische Wikipedia)
                                        • Formulierung von übersetzbaren Texten derart, dass die Übersetzer möglichst gut arbeiten können
                                          • Angabe von Kontext (z.B. Beschriftungstext "Match" -> Ist das das Verb "Abgleichen" oder das Substantiv "Treffer"? Oder gar "Streichholz"?)
                                          • bei Textbaustein mit Zahlenparameter Berücksichtigung sprachabhängiger Pluralformen (im meist englischen Original wird ein Singulartext und ein Pluraltext bereitgestellt, z.B. 1 match und %d matches; die Übersetzer können je nach Notwendigkeit beliebig viele Formen angeben)
                                          • Arbeitsablauf für Übersetzung am Beispiel GNU gettext

                                            • Programmierer fügt Textmeldungen ("Nachrichten") im englischen Original in den Quelltext ein
                                            • Maintainer erstellt mittels Hilfsprogramm aus dem Quelltext einen Nachrichtenkatalog für jede gewünschte Zielsprache (meist automatisiert, z.B. täglich oder wöchentlich)
                                            • Übersetzer erhält den Nachrichtenkatalog und füllt die Übersetzungen ein
                                            • zukünftige Änderungen der Originalnachrichten werden mit den bestehenden Nachrichtenkatalogen zusammengeführt
                                            • Anekdote: x-test
                                            • Fundstück: Amtssprachen der Europäischen Union

                                              58 min
                                            • STP016: Zeitdarstellung

                                              Heute brechen wir das fünfte Bit an.

                                              Das tun wir mit einem Thema, das scheinbar einfach ist, sich allerdings bei genauerer Betrachtung als tückisch herausstellt.
                                              Es geht um Zeit und ihre Darstellung. Und darum, dass es nicht immer sinnvoll ist, sich seinen eigenen Kalender auzudenken.
                                              Außerdem überzeugt ttimeless duch überragende Excel-Kentnisse.

                                              Shownotes
                                              • Zeiteinteilung ist ganz schön unhandlich
                                                • Kalender orientieren sich an astronomischen Fakten, die leider keine schönen ganzzahligen Einteilungen erlauben (1 Sonnenjahr = 365,242... Tage, 1 Mondmonat = 29.530... Tage, etc.)
                                                • präzise Definition von kleinen Zeiteinheiten wie Sekunden zeigt, dass die astronomischen Fakten schwanken -> Schaltsekunden; später mehr
                                                • Zielkonflikt: möglichst gleichmäßige Zeitentwicklung oder möglichst intuitive Handhabung
                                                • Internationale Atomzeit (TAI): exakt gleichmäßig (im Rahmen der Genauigkeit der Atomuhr), berücksichtigt nicht Schwankungen in der Tageslänge durch Änderungen der Erdrotationsgeschwindigkeit
                                                • Koordinierte Weltzeit (UTC): TAI zuzüglich Schaltsekunden (zurzeit TAI = UTC + 37s), sodass der Tagesbeginn am nullten Breitengrad immer bei 00:00:00 Uhr UTC bleibt
                                                • Wie können Computer Zeit darstellen?

                                                  • Option 1: separate Zahlen für Jahr, Monat, Tag, Stunde, Minute, Sekunde

                                                    • Verwendung vor allem an Stellen, wo der Nutzer es sehen kann (Zeitanzeigen, Zeitstempel in Dateinamen etc.)
                                                    • Vorteil: sofort menschenlesbar
                                                    • Nachteil: muss für Eindeutigkeit immer mit Zeitzoneninformation verknüpft sein; Gültigkeit von zukünftigen Zeitangaben evtl. durch nicht vorhergesehene Zeitzonenänderungen beeinträchtigt
                                                    • Nachteil: textuelle Darstellung je nach Kulturkreis uneindeutig (z.B. "4/7/2021" kann entweder für den 4. Juli oder den 7. April stehen)
                                                    • Option 2: eine einzelne Zahl, die die vergangene Zeit in einer bestimmten Einheit (z.B. Sekunden oder Tage) seit einem Startzeitpunkt (der Epoche) angibt

                                                      • z.B. Unix: Sekunden seit 1. Januar 1970 00:00:00 Uhr UTC (bzw. 01:00:00 Uhr deutscher Zeit)
                                                      • z.B. julianisches Datum: Tage seit 1. Januar 4713 v.u.Z.
                                                      • z.B. Excel, LibreOffice Calc, etc.: Tage seit 1. Januar 1900, mit Nachkommastellen für Zeitpunkte innerhalb eines Tages
                                                      • Probleme durch Überlauf in Datumsfeldern

                                                        • Y2K-Problem: Überlauf in der Jahreszahl, die damals zweistellig angegeben war (z.B. "76" für 1976)
                                                        • Y2038-Problem: Überlauf in einem 32-Bit-Unix-Zeitstempel (am Dienstag, dem 19. Januar 2038 um 04:14:07 Uhr deutscher Zeit)
                                                        • GPS-Wochen-Rollover: Überlauf in der Wochenzahl des Zeitstempel-Formats von GPS; erstmals 1999, zuletzt 2019, nächstes Mal 2038
                                                        • Probleme durch astronomische/politische Fakten

                                                          • Berechnungen wie "10 Tage dazuaddieren" mühselig aufgrund Kalenderregeln (Monatswechsel, Schalttage etc.)
                                                            • Beispiel: in einer Terminserie wie "täglich um 15 Uhr" hat wegen Sommerzeitwechsel nicht jeder Termin genau 24 Stunden Abstand zueinander
                                                            • Beispiel: Sommerzeitumstellung bei der Eisenbahn (diesen Abschnitt können wir im Prinzip direkt vorlesen)
                                                            • Schaltsekunden lassen UTC springen und erzeugen unerwartete Zeitzustände wie "23:59:60"
                                                            • Zeitzonendefinitionen folgen politischen Entscheidungen
                                                              • z.B. Deutschland besteht in tzdata aus zwei Zeitzonen
                                                              • z.B. 2015 Chaos in der Türkei durch eine Änderung der Sommerzeitregel mit zu wenig Vorlauf
                                                              • Probleme durch technische Einflüsse

                                                                • Hardware-Uhren sind nicht hinreichend genau und driften mit der Zeit: in verteilten Systemen mögliche Verwirrung über die Reihenfolge von Aktionen
                                                                • Zeitsynchronisation mittels NTP (Network Time Protocol): im Moment der Richtigstellung der Uhr mögliche Verwirrung durch einen kleinen Sprung rückwärts in der Zeit
                                                                • Suspend/Standby: im Moment des Wiederanschaltens mögliche Verwirrung durch einen drastischen Sprung vorwärts in der Zeit
                                                                • monotonische Uhren: zählen die Zeit, die der Computer seit Systemstart gelaufen sind (z.B. mittels TSC; damit zuverlässige Messung von Laufzeitspannen etc.
                                                                • positiver Ausblick: Es könnte noch viel schlimmer sein!

                                                                  • gregorianischer Kalender hat sich weltweit für den Geschäftsverkehr durchgesetzt
                                                                  • Beispiel für einen alternativen Kalender: Japanische Zeitrechnung
                                                                  • kryptografisch abgesicherte Zeitstempel: RFC Podcast #15 Crypto for the Masses

                                                                    1 hr 20 min
                                                                  • STP015: Multitasking in Betriebssystemen

                                                                    Um viele Dinge gefühlt gleichzeitig tun zu können, ist die Computertechnik einen weiten Weg gegangen. In der heutigen Folge halten wir viele lose Fäden in der Hand und ständig merkt Xyrill, dass dies und jenes ja auch noch notwendig ist, um zum Ziel zu kommen: Zu Multitasking.

                                                                    Shownotes
                                                                    • Vorbemerkung: Begriffsklärung Programm vs. Prozess

                                                                      • Programm: ein bestimmtes Stück Maschinencode, das zumeist auf der Festplatte vorgehalten wird
                                                                      • Prozess: eine bestimmte Laufzeitinstanz eines Programms
                                                                      • Prozess = Programm + zugehörige Daten im Speicher + zugehörige Berechtigungen etc.
                                                                      • Multitasking: Ausführung mehrerer Aufgaben zur selben Zeit oder abwechselnd in kurzen Zeitabschnitten

                                                                        • konkurrente Ausführung: abwechselnd in kurzen Zeitabschnitten
                                                                        • parallelle Ausführung: zur selben Zeit (z.B. Parallelbearbeitung mehrerer Daten in der GPU, Parallelität in mehreren CPU-Kernen); heute nicht so sehr im Fokus
                                                                        • Analogie: Multitasking beim Menschen

                                                                          • Idee 1: tatsächlich parallele Ausführung, z.B. gehen und gleichzeitig sprechen
                                                                          • Idee 2: Teilaufgaben an einer jeweils sinnvollen Stelle unterbrechen und während der Wartezeiten etwas anderes machen, z.B. Kochen/Backen (entspricht dem kooperativen Multitasking)
                                                                          • Idee 3: Teilaufgaben nach einer bestimmten Zeit oder bei äußeren Ereignissen unterbrechen, z.B. Büroarbeit (entspricht dem präemptiven Multitasking)
                                                                          • kooperatives Multitasking: Prozesse unterbrechen sich selbst, wenn sich abzeichnet, dass sie warten müssen

                                                                            • z.B. auf das Lesen von Daten von der Festplatte oder eine Antwort aus dem Netzwerk
                                                                            • Problem 1: jedes Programm muss Unterbrechungspunkte enthalten
                                                                            • Problem 2: unkooperative Programme (z.B. fehlerhafte oder Schadsoftware) können das gesamte System blockieren
                                                                            • weit verbreitet in der Ära der frühen Heimcomputer (C64, DOS-PCs, Macs bis Mac OS 9)
                                                                            • heute nicht mehr im Einsatz, da moderne Prozessoren interruptfähig sind und somit präemptives Multitasking möglich ist
                                                                            • präemptives Multitasking: Prozesse werden nach dem Ablauf ihrer zugeteilten Zeitscheibe unterbrochen, damit jemand anderes drankommen kann

                                                                              • bevor der Prozess drankommt, stellt das Betriebssystem einen Hardware-Timer in der CPU
                                                                              • nach Ablauf des Timers löst die CPU einen Interrupt (eine Unterbrechung) aus
                                                                              • CPU unterbricht die Arbeit am Prozess und führt eine vom Betriebssystem definierte ISR (Interrupt Service Routine) aus
                                                                              • ISR speichert den Zustand des Prozesses (insb. die Inhalte aller Prozessor-Register) und gibt die Ausführung zurück an den Scheduler
                                                                              • um Prozess später wiederherzustellen, werden im Prinzip einfach alle Prozessor-Register auf die gesicherten Werte zurückgesetzt
                                                                              • Scheduler (Zeitplaner): Komponente des Betriebssystems, die den jeweils nächsten Prozess wählt, der laufen darf

                                                                                • interne Buchführung des Schedulers unterscheidet zwischen lauffähigen und nicht lauffähigen Prozessen
                                                                                • ist ein laufender Prozess nicht mehr lauffähig (weil auf I/O gewartet werden muss), kann er auch selbst einen Interrupt auslösen und wird dann im Scheduler als nicht lauffähig markiert
                                                                                • nächster Prozess wird immer aus der Liste der lauffähigen Prozesse gewählt, nach Kriterien wie Priorität (z.B. Audio-Prozesse)
                                                                                • gibt es keinen lauffähigen Prozess, kann die CPU bis zum nächsten Interrupt angehalten werden
                                                                                • Wie werden Prozesse wieder lauffähig?

                                                                                  • Eingabe von der Hardwareseite (z.B. Netzwerk, Festplatte) erzeugt ebenfalls Interrupts, auf die das Betriebssystem reagiert
                                                                                  • Eingabe von anderen Prozessen (z.B. via Pipes) landet direkt beim Betriebssystem
                                                                                  • Betriebssystem stellt die Daten dem entsprechenden Prozess bereit und markiert diesen wieder als lauffähig
                                                                                  • analog bei vollgelaufenen Ausgabepuffern
                                                                                  • 1 hr 11 min
                                                                                  • STP014: Textdarstellung

                                                                                    In dieser Folge unterhalten wir uns über allerlei Detailwissen zu verschiedenen Schriftarten, werfen mit schlecht vorbereiteten Beispielen um uns und haben starke Meinungen zu verschiedenen Dingen. Um Textdarstellung geht es dabei nebenbei auch.

                                                                                    Shownotes
                                                                                    • Nachbemerkungen zum letzten Mal: bidirektionaler Text

                                                                                      • Mischung aus LTR-Schrift (left to right) und RTL-Schrift (right to left), z.B. hebräische oder arabische Zitate in lateinischer Schrift
                                                                                      • in der Zeichenkette entsprechend der logischen Reihenfolge
                                                                                      • in der Darstellung: Zeichen können (aber müssen nicht) eine präferierte Schreibrichtung haben, explizite Umschaltung der Schreibrichtung mit Steuerzeichen möglich
                                                                                      • Grundbegriffe

                                                                                        • "Zeichen": wird im Bereich von Unicode kaum verwendet, da nicht klar definiert
                                                                                        • Graphem: die kleinste bedeutungsunterscheidende (aber nicht bedeutungstragende) Einheit eines Schriftsystems (z.B. lateinische Schrift: Buchstaben, Ziffern, Sonderzeichen, Leerzeichen); in Unicode ungefähr gleichsetzbar mit einem Codepunkt (abgesehen von Steuerzeichen)
                                                                                        • Glyphe: die grafische Darstellung eines Graphems
                                                                                        • Schriftart/Font: ein vollständiger Satz von Glyphen
                                                                                        • Unterschiede zwischen Schriftarten

                                                                                          • Serifenschriften vs. serifenlose, insb. Groteskschriften
                                                                                          • Proportionalschriften vs. Monospace-Schriften
                                                                                          • Spezialanwendungen: OCR-A, FE-Schrift, Schriften zur Unterstützung von Analphabeten (unter den bekannten Schriften insbesondere Comic Sans)
                                                                                          • Beispiel aus Asien: Ming vs. Gothic vs. Kalligrafie
                                                                                          • Phase 1: Textlayout

                                                                                            • Segmentierung in Wörter, Zeilen, Absätze, evtl. Seiten
                                                                                            • abhängig von den Regeln der verwendeten Schriftsysteme, siehe z.B. UAX 14: Unicode Line Breaking Algorithm
                                                                                            • abhängig von der Schreibrichtung, interessant insbesondere bei bidirektionalem Text
                                                                                              • Unicode beschreibt fast ausschließlich zeilenweises Layout mit LTR oder RTL
                                                                                              • im Japanischen ist auch spaltenweises Layout mit TTB (top to bottom) gängig, siehe UTR 50: Unicode Vertical Text Layout
                                                                                              • Ruby: Ausspracheannotationen an CJK-Schriftzeichen, außerhalb der eigentlichen Textzeile (in LTR darüber, in TTB rechts daneben)
                                                                                              • Phase 2: Schriftwahl

                                                                                                • kaum ein Font deckt alle Grapheme ab -> im Allgemeinen Auswahl verschiedener Fonts je nach Schriftsystem notwendig (Font Stack)
                                                                                                • in europäischen Texten früher kaum relevant, heute wichtig wegen separater Emoji-Fonts
                                                                                                • Schriftgröße früher wichtig, da manche Fonts nur als Bitmaps in festen Größen vorlagen; heute durch Vektorschriftarten kein Problem mehr
                                                                                                • Schriftwahl beeinflusst Phase 1: verschiedene Schriften laufen unterschiedlich weit und ergeben somit andere Zeilenumbruchspunkte
                                                                                                • Phase 3: Glyphenwahl

                                                                                                  • einfacher Fall: eine Glyphe für ein Graphem
                                                                                                  • allgemeiner Fall: Bildung von Graphem-Clustern
                                                                                                    • z.B. Ligaturen: "f" + "l" = "fl"
                                                                                                    • z.B. kombinierende diakritische Zeichen: "a" + "◌́" = "á"
                                                                                                    • z.B. Emoji-Hautfarben: "👨" + Fitzpatrick Modifier 1-2 = "👨🏻"
                                                                                                    • z.B. Emoji-Flaggen: "🇩" + "🇪" = "🇩🇪"
                                                                                                    • z.B. Fonts mit kreativer Verwendung von Ligaturen: Sans Bullshit Sans, Fira Code
                                                                                                    • anspruchsvollster Fall: Complex text layout, sprich: Anpassung von Glyphen an ihre Nachbarglyphen
                                                                                                      • v.a. im Arabischen und in indischen Schriften, aber auch z.B. in handschriftartigen Fonts
                                                                                                      • auch Glyphenwahl beeinflusst Phase 1, aus demselben Grund wie oben
                                                                                                      • Phase 4: Darstellung

                                                                                                        • Glyphen aus Vektorschriftarten werden in den gewünschten Schriftgrößen gerendert und vorgehalten
                                                                                                        • dann "einfach" Zusammensetzen der Glyphen zu einem Gesamtbild unter Anwendung der gewünschten Textfarbe
                                                                                                        • Ausnahme: Emoji-Glyphen folgen meist nicht der Schriftfarbe
                                                                                                        • Quelle: Spezifikationen und Reports des Unicode Consortium

                                                                                                        • Hörempfehlung: CRE080 Geschichte der Typografie

                                                                                                          1 hr 22 min
                                                                                                        • STP013: Textkodierung

                                                                                                          Dies ist ein Text. Für den Computer besteht er nur aus Zahlen. Xyrill erklärt diesmal, wie es kommt, dass wir ihn trotzdem lesen können.

                                                                                                          Und jedes andere geschriebene Wort, das je existiert hat… natürlich nur idealtypisch.

                                                                                                          ShownotesLaut Wiktionary:

                                                                                                          [Text ist eine] mündliche oder schriftliche Folge von Sätzen, die miteinander syntaktisch und semantisch verbunden sind (Kohärenz, Kohäsion), eine abgeschlossene Einheit bilden (Kompletion) und eine bestimmte kommunikative Funktion (Textfunktion) erfüllen.

                                                                                                          [Von] lateinisch textus für "Inhalt" oder "Gewebe der Rede", "Text".

                                                                                                          • zur Definition

                                                                                                            • Wiktionary geht vom linguistischen Blickwinkel aus
                                                                                                            • in der Informatik: Zeichenketten (oder synonym "Zeichenfolgen"), in Programmiersprachen meist als String bezeichnet
                                                                                                            • Problem: Computer können nur Zahlen! Wie bilden wir Zeichenketten als Zahlenfolgen ab?

                                                                                                              • Idee 1: jedes Zeichen als eine Zahl einer bestimmten Größe, z.B. 1 Byte oder 2 Byte (fixed-length code)
                                                                                                                • primitives Beispiel: alle Buchstaben des Alphabets durch ihre Position darstellen, z.B. "hallo" -> "08 01 12 12 15"
                                                                                                                • Idee 2: häufige Zeichen mit kurzen Bytefolgen darstellen, seltene Zeichen mit längeren Bytefolgen (variable-length code, siehe Entropiekodierung)
                                                                                                                • Beispiel: Morse-Code

                                                                                                                  • variable Länge: z.B. "e" ist am häufigsten und deswegen nur 1 Ton kurz, "q" ist sehr selten und deswegen 4 Töne lang
                                                                                                                  • Kodiertabelle enthält nicht nur Buchstaben und Ziffern, sondern auch Sonderzeichen (Punkt, Komma, etc.) und Spezialzeichen wie "Spruchende" oder "Fehler, Wiederholung ab letztem vollständigem Wort"
                                                                                                                  • in der frühen Informatik (bis in die 1990er Jahre): Codepages (Zeichentabellen)

                                                                                                                    • Codes mit fester Länge von meist 1 Byte (7 oder 8 Bit) pro Zeichen
                                                                                                                    • Beispiel mit 7 Bit: ASCII, unter Linux siehe man ascii (RFC 20)
                                                                                                                    • Beispiel mit 8 Bit: Codepage 437
                                                                                                                    • Standardisierung als ISO/IEC 8859
                                                                                                                    • Problem: 8 Bit (256 Zeichen) sind zu wenig für alle in europäischen Sprachen verwendeten Zeichen, insb. wegen diakritischer Zeichen -> verschiedene Codepages für verschiedene Sprachen -> Mojibake
                                                                                                                    • spätestens mit zunehmend globaler Kommunikation im Internetzeitalter musste eine bessere Lösung her
                                                                                                                    • Unicode

                                                                                                                      • keine Textkodierung im engeren Sinne, sondern erstmal nur eine durchnummerierte Liste aller möglichen Zeichen (die Nummer zu einem Zeichen heißt Codepunkt)
                                                                                                                      • Anspruch: wenn ein Zeichen in tatsächlichen Textdokumenten verwendet wird oder wurde, gehört es in Unicode (von Buchstaben über Redigierungssymbole mittelalterlicher Typografen bis zu Hieroglyphen und Keilschrift)
                                                                                                                      • Größe: 17 Ebenen (Planes) zu je 65536 Codepunkten = 1.114.112 Codepunkte; davon sind 2048 Codepunkte aus technischen Gründen (für die Kodierung von Surrogatpaaren) unbelegbar, somit maximal möglich 1.112.064 Codepunkte
                                                                                                                      • Ebenen in Unicode

                                                                                                                        • Ebene 0: Basic Multilingual Plane mit allen zeitgenössischen und weitverbreiteten Schriftsystemen (Übersichtskarte)
                                                                                                                        • Ebene 1: Supplementary Multilingual Plane mit historischen Schriftsystemen und Obskuritäten wie Domino/Mahjongg-Steinen und 😍 Emoji 😍
                                                                                                                        • Ebene 2: Supplementary Ideographic Plane mit selten benutzten CJK-Schriftzeichen
                                                                                                                        • Ebene 3-13: noch frei
                                                                                                                        • Ebene 14: Supplementary Special-purpose Plane mit Steuerzeichen zur Selektion alternativer Schriftzeichenformen
                                                                                                                        • Ebene 15/16: für private Verwendung reserviert
                                                                                                                        • Kodierungen für Unicode mit fixer Länge

                                                                                                                          • UCS-2: eine 16-Bit-Zahl pro Zeichen -> kann nur die BMP kodieren (UCS-2 stammt aus der Zeit, bevor Unicode mehrere Planes hatte)
                                                                                                                          • UCS-4/UTF-32: eine 32-Bit-Zahl pro Zeichen -> extrem verschwenderisch
                                                                                                                          • Kodierungen für Unicode mit variabler Länge

                                                                                                                            • UTF-16: BMP-Zeichen als eine 16-Bit-Zahl, andere Zeichen als zwei 16-Bit-Zahlen -> Probleme mit Endianness
                                                                                                                            • UTF-8: jedes ASCII-Zeichen als ein Byte, alle anderen Zeichen als eine Folge von 2-5 Bytes (unter Linux siehe man utf-8)
                                                                                                                            • UTF-8 ist spektakulär: sehr kompakt, selbstsynchronisierend, einfach zu implementieren (auch in Hardware), sortierungserhaltend, ASCII-abwärtskompatibel, Nicht-ASCII-Zeichen enthalten niemals ASCII-Bytes; und wurde buchstäblich in einem Abend von Ken Thompson und Rob Pike auf einer Serviette entworfen
                                                                                                                            • Probleme von Unicode

                                                                                                                              • Anspruch: jeder bestehende Kodierungsstandard soll Zeichen für Zeichen in Unicode abbildbar sein -> dadurch unnötig viele Codepunkte insb. für diakritische Zeichen und Probleme mit Normalisierung
                                                                                                                              • allgemeiner: Was ist eigentlich ein Zeichen im Sinne von "ein Codepunkt"? (mehr dazu in der nächsten Folge) -> Unicode übernimmt hier oftmals teils kontroverse Klassifikationen aus nationalen Standards z.B. für indische und thailändische Schriften
                                                                                                                              • am signifikantesten hier: Han-Vereinheitlichung (Beispiel)
                                                                                                                              • Für die historische Herleitung von Schriftkodierung empfehlen wir wieder den großartigen Podcast Request for Comments. Diesmal die Folge über RFC 20 ASCII.

                                                                                                                                Das nächste Mal geht es dann um T̪͙̪̻̹̩̠͔͑͋ͥ͘ę̥͔̝̘ͦͬx̨̜̩̜͙̦̻̗̳̒̊͆t̯̳̓ͥ͐ͣ́d͔̱̗̯̪̭́͛͜ͅa̵͕̯͕̻̜ͮ͒ͭȓ̜͚͚̯͎͓̋̎̈́͘s̥̯̠̬̆̿͡t̫̱̺͉̱̓͒͑͐͢e̸͖̮̙̺̠̗̬̅ͅl̝͉͚ͪ͋ͤ͜l̵̦̪͔͈̉͑u̴̝̲̠̳̖̘͚̔n͙̹̍̆͊̈͢g̨͍̣̝̣͇̯̮̠̏.

                                                                                                                                1 hr 11 min
                                                                                                                              • STP012: Datenbanken

                                                                                                                                Wenn Sie diese Folge sehen, dann, weil sie in der Datenbank Ihrer Podcast-App gelandet ist.

                                                                                                                                Datenbanken sind überall, denn ohne sichere und effiziente Datenhaltung kommt kein technisches System zurecht.
                                                                                                                                Deswegen erklärt Xyrill uns heute, warum Biologen sich über Excel aufregen und was gute Datenspeicher mit Säure zu tun haben.

                                                                                                                                ShownotesLaut Wikipedia:

                                                                                                                                Eine Datenbank, auch Datenbanksystem genannt, ist ein System zur elektronischen Datenverwaltung. Die wesentliche Aufgabe einer Datenbank ist es, große Datenmengen effizient, widerspruchsfrei und dauerhaft zu speichern und benötigte Teilmengen in unterschiedlichen, bedarfsgerechten Darstellungsformen für Benutzer und Anwendungsprogramme bereitzustellen.

                                                                                                                                • Beispiele für Datenbanken im weitesten Sinne: Passen diese mit der Definition oben zusammen?

                                                                                                                                  • Spreadsheets (Excel etc.)
                                                                                                                                    • was funktioniert: unterschiedliche, bedarfsgerechte Darstellungsformen
                                                                                                                                    • keine widerspruchsfreie Speicherung: Beispiel Gen-Namen-Fehlformatierung
                                                                                                                                    • keine großen Datenmengen: Beispiel verlorene Covid-Patienten aufgrund Beschränkung auf 1 Mio. Zeilen
                                                                                                                                    • Dateisystem
                                                                                                                                      • was funktioniert: große Datenmengen effizient und dauerhaft speichern
                                                                                                                                      • keine widerspruchsfreie Speicherung, da keine Beziehungen zwischen Dateiinhalten möglich
                                                                                                                                      • keine Unterstützung für bedarfsgerechte Darstellungsformen: jede Datei hat genau ein Format
                                                                                                                                      • Dateisysteme sind eine besondere Form von Key-Value-Datenbank

                                                                                                                                        • Datenbasis = ein großer Haufen von Values (Werte, im allgemeinen Fall beliebige Dateien), die alle einen Namen (Key) haben
                                                                                                                                        • keine Datenbank im engeren Sinne (keine Sicherstellung von Widerspruchsfreiheit, keine Unterstützung für bedarfsgerechte Darstellungsformen)
                                                                                                                                        • aber in der Praxis eine sinnvolle Ergänzung zu stark strukturierten Datenbanken, da die einfache Datenstruktur es ermöglicht, sehr groß zu skalieren (bis Milliarden/Billionen von individuellen Objekten)
                                                                                                                                        • Praxisbeispiel: Cache für vorgerenderte Wikipedia-Seiten
                                                                                                                                        • Datenbanken im engeren Sinne: relationale Datenbanken

                                                                                                                                          • Daten liegen in einer bestimmten Struktur vor: gleichartige Objekte sind jeweils als Zeilen in Tabellen abgelegt, deren Spalten im Voraus definiert sind (diese Grundstruktur nennt man Schema)
                                                                                                                                          • "relational": Kreuzreferenzen zwischen Tabellenspalten (Beispiel: wenn die Tabelle "Mitarbeiter" eine Spalte "Abteilungsnummer" hat, muss es für jeden Wert in dieser Spalte eine entsprechende Zeile in der Tabelle "Abteilungen" geben), unter anderem dadurch Sicherstellung der Widerspruchsfreiheit
                                                                                                                                          • strukturierte Datenhaltung ermöglicht komplexe Abfragen (z.B. "Wieviele Mitarbeiter in der Abteilung 172 haben ein Monatsgehalt über 3000€?"), typischerweise mittels SQL (Structured Query Language)
                                                                                                                                          • Grundkriterien für das Verhalten von relationalen Datenbanken: ACID am Beispiel "Überweisung zwischen zwei Bankkonten"

                                                                                                                                            • Atomarität (Abgeschlossenheit)
                                                                                                                                              • Änderungen werden entweder ganz oder gar nicht vorgenommen
                                                                                                                                              • am Beispiel: Überweisung muss immer beide Bankkonten anfassen (oder komplett fehlschlagen)
                                                                                                                                              • Konsistenzerhaltung
                                                                                                                                                • wie oben besprochen: Prüfung von Kreuzreferenzen oder Randbedingungen
                                                                                                                                                • am Beispiel: Überweisung darf nur durchgehen, wenn das Quellkonto genug Füllstand hat
                                                                                                                                                • Isolation (Abgrenzung)
                                                                                                                                                  • parallel laufende Änderungen dürfen nicht dieselbe Zeile anfassen
                                                                                                                                                  • im Zweifelsfall muss eine Änderung warten, bis die andere fertig ist
                                                                                                                                                  • am Beispiel: Deckungsprüfung im Quellkonto muss alle vorherigen Überweisungen einbeziehen
                                                                                                                                                  • Dauerhaftigkeit
                                                                                                                                                    • wird eine Änderung als abgeschlossen gemeldet, darf auch ein Systemfehler (z.B. Systemabsturz oder Stromausfall) nicht zum Verlust der Änderung führen
                                                                                                                                                    • Garantierung der Dauerhaftigkeit ist nichttrivial aufgrund der vielen Schichten der Speicherhierarchie (siehe STP007)
                                                                                                                                                    • Sicherstellung meist in der Datenbanksoftware selbst mittels Write-Ahead Log und drumherum mittels Betriebsprozeduren (Backups, Replikation)
                                                                                                                                                    • klassisches Problem mit relationalen Datenbanken: Wie klassifiziert man die Welt? Welche Attribute kann man bei Objekten voraussetzen?

                                                                                                                                                      • Welche Spalten kann man voraussetzen? z.B. Tabelle "Personen" mit Spalten "Name", "Adresse", "Geburtsdatum", "Geburtsort" -> für alle diese Attribute gibt es Menschen, bei denen dieses Attribut nicht existiert oder unbekannt ist
                                                                                                                                                      • Welche Datentypen haben Spalten? z.B. wird die Postleitzahl oft als Nummer abgelegt, sodass dann "01069 Dresden" als "1069 Dresden" fehlverarbeitet wird
                                                                                                                                                      • allgemein: Entwurf des Datenbankschemas ist einer dieser Punkte, wo man sich manchmal als Programmierer bewusst wird, wie wenig man das Problemfeld eigentlich verstanden hat
                                                                                                                                                      • abseits von relationalen Datenbanken und SQL: NoSQL

                                                                                                                                                        • großer Hype in den 2010ern vor allem aufgrund der Hoffnung, die lästige Schemaentwurf-Phase los zu werden
                                                                                                                                                        • aber: Speichern von unstruktierten oder wenig strukturierten Daten verlagert das Problem nur in die Zukunft
                                                                                                                                                        • Arten von NoSQL-Datenbanken, die tatsächlich nützlich sind:

                                                                                                                                                          • Key-Value-Datenbanken (siehe oben)
                                                                                                                                                          • Dokumentendatenbanken für Volltextsuche (z.B. Suchmaschinen)
                                                                                                                                                          • Graphdatenbanken (z.B. soziale Graphen)
                                                                                                                                                          • Datenströme (Darstellung der Welt als ein zeitlich geordneter Strom von Ereignissen)
                                                                                                                                                          • 1 hr 10 min
                                                                                                                                                          • STP011: Programmsteuerung im Prozessor

                                                                                                                                                            Die CPU ist als der zentrale Baustein praktisch aller Computer bekannt.

                                                                                                                                                            Nachdem wir schon einen kleinen Blick in ihren Speicher geworfen haben, soll es heute darum gehen, wie dieser Baustein dazu gebracht wird, das Richtige zur rechten Zeit zu tun.

                                                                                                                                                            Shownotes
                                                                                                                                                            • Rückblick: Logikgatter (STP003)

                                                                                                                                                              • aus Gattern lassen sich Schaltkreise bilden, die konkrete Einzelberechnungen anstellen
                                                                                                                                                                • hauptsächlich einfache Rechenoperationen wie "zwei 16-Bit-Zahlen addieren"
                                                                                                                                                                • aber auch teils sehr komplexe Einzeloperationen, z.B. Teilschritte einer bestimmten Hashfunktion (siehe STP004) oder eines bestimmten Audio/Video-Codecs (heißt in Produktbeschreibungen meist Hardware-Beschleunigung)
                                                                                                                                                                • Frage 1: Wie kann man mehrere Operationen nacheinander ausführen?
                                                                                                                                                                • Frage 2: Wie kann man in einem einzelnen Taktschritt aus verschiedenen möglichen Operationen wählen?
                                                                                                                                                                • Frage 3: Wie entsteht daraus ein ganzes Programm, also eine bestimmte Folge von verschiedenen Operationen?
                                                                                                                                                                • Antwort auf Frage 1: Taktgenerator

                                                                                                                                                                  • analog zum Taktgeber in einer Uhr (Unruh bei mechanischen Uhren, Quartzoszillator bei elektronischen Uhren), aber als mikroeletronische Schaltung realisiert
                                                                                                                                                                  • Geschwindigkeitsvergleich: bei Quartzuhren hat der Oszillator meist 32768 Hz
                                                                                                                                                                  • heutzutage ist die Taktfrequenz meistens regelbar
                                                                                                                                                                    • 1990er: Turbo-Schalter am Gehäuse zum Verdoppeln (bzw. in der anderen Richtung Halbieren) der Taktfrequenz
                                                                                                                                                                    • seit den 2000ern: ACPI und Co., Energiesparen durch bedarfsgerechtes Heruntertakten der CPU-Kerne
                                                                                                                                                                    • Heruntertakten als Schutz vor Überhitzung (nach Überlastung oder beim Versagen der Kühlung)
                                                                                                                                                                    • unter Linux: aktuelle Taktfrequenz auslesen mittels grep '^cpu MHz' /proc/cpuinfo
                                                                                                                                                                    • Antwort auf Frage 2: Arithmetisch-logische Einheit (ALU)

                                                                                                                                                                      • Idee: neben 2N Eingängen für zwei N-Bit-Eingabezahlen noch weitere Eingänge, die einen Opcode darstellen, also eine fortlaufende Nummer für die gewünschte Rechenoperation
                                                                                                                                                                      • Opcode bestimmt, von welchem Teilschaltkreis das Ergebnis nach außen durchgereicht wird
                                                                                                                                                                      • hierzu zusätzliche Logikschaltung am Ende: Ausgabe = ((Opcode = 1) AND Ausgabe1) OR ((Opcode = 2) AND Ausgabe2) OR ...
                                                                                                                                                                      • analog zur ALU gibt es meist noch eine FPU für Fließkommazahl-Operationen
                                                                                                                                                                      • Antwort auf Frage 3: Steuerwerk in der CPU (oder GPU)

                                                                                                                                                                        • Programmdatei besteht aus einer Folge von Befehlen, die im Arbeitsspeicher vorliegen
                                                                                                                                                                        • Steuerwerk hat einen Befehlszeiger (Instruction Pointer), der auf den jeweils nächsten Befehl zeigt
                                                                                                                                                                        • Befehle sind in Maschinensprache kodiert

                                                                                                                                                                          • meist 16/32/64 Bit groß (je nach Prozessorarchitektur)
                                                                                                                                                                          • für Rechenbefehle wie "Addition" oder "Multiplikation"
                                                                                                                                                                            • den Opcode (welche Berechnung auszuführen ist)
                                                                                                                                                                            • aus welchen Prozessorregister die Eingabe kommt (evtl. ist ein Eingabewert eine Konstante wie "0" oder "1" und steckt direkt im Befehl drin)
                                                                                                                                                                            • in welches Prozessorregister die Ausgabe geht
                                                                                                                                                                            • andere Befehlsarten:
                                                                                                                                                                              • Load: aus dem Hauptspeicher einen Wert in ein Prozessorregister holen (Parameter: Quelladresse und Zielregister)
                                                                                                                                                                              • Store: genau andersherum (Parameter: Quellregister und Zieladresse)
                                                                                                                                                                              • Compare: schickt zwei Zahlen aus Registern an die ALU, aber statt einer Ergebniszahl gibt es einen Satz von Flags wie "A ist gleich B" oder "A ist kleiner als B" zurück
                                                                                                                                                                              • Jump: aktualisiert den Befehlszeiger, evtl. nur wenn ein bestimmtes Flag gesetzt ist (zum Beispiel Gleichheits-Flag aus einem vorherigen Compare oder Überlauf-Flag aus einer vorherigen Addition)
                                                                                                                                                                              • Call/Return: Call macht einen Sprung, aber speichert vorher die aktuelle Position in einen designierten Teil des Arbeitsspeichers; Return springt an den Ursprung des letzten Call zurück (damit verschachtelbare Unterprogramme realisierbar)
                                                                                                                                                                              • Ausführung eines Befehls ist unterteilt in mehrere Schritte

                                                                                                                                                                                • grobe Skizze der Abarbeitung eines einzelnen Befehls (Schritt 2-5 jeweils nur, sofern für den entsprechenden Befehl zutreffend)
                                                                                                                                                                                  • Schritt 1: Auslesen und Dekodieren des Befehls
                                                                                                                                                                                  • Schritt 2: Laden der Eingabewerte aus den entsprechenden Registern
                                                                                                                                                                                  • Schritt 3: Ausführen des Befehls (z.B. bei Rechenbefehlen mittels der ALU oder FPU)
                                                                                                                                                                                  • Schritt 4: Speichern des Ausgabewertes im entsprechenden Zielregister
                                                                                                                                                                                  • Schritt 5: Verschieben des Befehlszeigers auf den Folgebefehl
                                                                                                                                                                                  • in der Praxis meist noch viel mehr Teilschritte (z.B. moderne x86-CPUs: über 40 Pipeline-Schritte)
                                                                                                                                                                                  • Pipelining: wenn ein Befehl einen bestimmten Schritt durchlaufen hat, kann hier meist schon mit dem nächsten Befehl begonnen werden, auch wenn der vorherige Befehl noch nicht komplett abgearbeitet war
                                                                                                                                                                                  • spekulative Ausführung (Speculative Execution): nachfolgende Befehle rechnen mit den Daten, von denen die CPU glaubt, dass sie wahrscheinlich aktuell sein werden, sobald derjenige Befehl tatsächlich an der Reihe ist
                                                                                                                                                                                  • Sprungvorhersage (Branch Prediction): bei einem Sprungbefehl mit Vorbedingung muss die CPU möglichst gut abschätzen, ob die Vorbedingung eintritt und der Sprung vollzogen wird, um die nächsten Befehle vorhersagen zu können
                                                                                                                                                                                  • Verbesserungen in spekulativer Ausführung und Sprungvorhersage sind einer der Hauptgründe, warum Desktop-CPUs auch ohne höhere Taktfrequenzen immer schneller geworden sind
                                                                                                                                                                                  • Überlegungen für schnelle Programme

                                                                                                                                                                                    • Sprungbefehle sind für schnelle Programme ein Problem: wenn die CPU einen Sprung falsch vorhersagt, muss nach dem Ausführen des Sprungs die gesamte Pipeline verworfen und neu gefüllt werden
                                                                                                                                                                                    • verschiedene Befehle dauern unterschiedlich lange in der Berechnung (z.B. Multiplikation ist langsamer als Addition ist langsamer als Bit-Shift); entsprechende Austauschungen finden in Compilern meist automatisch statt, z.B. 2 * x -> x + x oder 8 * x -> x << 3
                                                                                                                                                                                    • 1 hr 15 min
                                                                                                                                                                                    • STP010: 3D-Grafik

                                                                                                                                                                                      Heute geht es viel um Spiele. Denn anscheinend sind diese fast das Einzige, das Xyrill und ttimeless einfällt, wenn es um 3D-Grafik geht.

                                                                                                                                                                                      Allgemeiner dreht sich diese Folge darum, was es alles braucht, um Körper in virtuellen Welten darzustellen.
                                                                                                                                                                                      Der Abschluss der vierteiligen Reihe über Grafik, und was dazu notwendig ist.

                                                                                                                                                                                      Shownotes
                                                                                                                                                                                      • Vergleich zu 2D-Desktop-Grafik (STP008)

                                                                                                                                                                                        • Zeichenreihenfolge ist nicht so offensichtlich (Was ist vorne? Was ist hinten?)
                                                                                                                                                                                        • höherer Anspruch an Realismus: dynamische Beleuchtung, Texturierung, etc.
                                                                                                                                                                                        • Randbemerkung: auch 2D-Spiele werden heute meist in einer 3D-Szene aufgebaut
                                                                                                                                                                                        • Grundeinheit für 3D-Modelle: nicht der Pixel, sondern das Polygon (deswegen kommen wir um Fließkommazahlen nicht herum)
                                                                                                                                                                                        • Vorbemerkungen zu den folgenden Schritten:

                                                                                                                                                                                          • all dies passiert für jedes Einzelbild von vorne (also bei 60Hz 60-mal pro Sekunde)
                                                                                                                                                                                          • zur Illustration verlinken wir auf Beispielbilder aus den Übungsunterlagen für einen Kurs in 3D-Rendering-Grundlagen
                                                                                                                                                                                          • Schritt 1: 3D-Modell mit Polygonen

                                                                                                                                                                                            • Polygon heißt wörtlich "Vieleck", aber 3D-Modelle bestehen meist nur aus Dreiecken
                                                                                                                                                                                            • Polygone mit vier und mehr Ecken können mittels Triangulation in Dreiecke zerlegt werden
                                                                                                                                                                                            • Darstellung eines 3D-Modells als Gitternetz
                                                                                                                                                                                            • Schritt 2: Kamera

                                                                                                                                                                                              • grundsätzlich ein Paar aus Blickpunkt und Blickrichtung, aber mit einigen weiteren Parametern
                                                                                                                                                                                              • mathematische Grundlage: Quaternionen
                                                                                                                                                                                              • Sichtfeld (Field of View): beim Menschen 130°; bei Videospielen meist weniger, je nachdem, wieviel Platz der Bildschirm im Sichtfeld einnimmt (z.B. 90° am PC, 60° an Konsolen)
                                                                                                                                                                                              • Schritt 3: Ausmalen der Polygone (Rasterisierung)

                                                                                                                                                                                                • Backface Culling (Rückseiten-Auslese): wir werfen alle Polygone weg, die von uns wegzeigen
                                                                                                                                                                                                • Beispiel mit ausgemalten Polygonen nach Backface Culling
                                                                                                                                                                                                • Z-Buffer: wenn wir Polygone ausmalen, dann malen wir nur die Pixel aus, bei denen wir nicht schon Polygone gemalt haben, die näher an der Kamera dran sind
                                                                                                                                                                                                • Beispiel mit ausgemalten Polygonen unter Verwendung des Z-Buffers
                                                                                                                                                                                                • Schritt 4: Texturen

                                                                                                                                                                                                  • bis jetzt war jedes Polygon einfarbig, jetzt kleben wir Bilder auf (analog zu Modellbausätzen)
                                                                                                                                                                                                  • in der Praxis ein großes Bild für das ganze Modell
                                                                                                                                                                                                  • jede Ecke jedes Polygons wird zu einem Punkt in der Textur zugeordnet
                                                                                                                                                                                                  • Beispiel mit Polygonen, die mit ihrer Textur ausgemalt sind
                                                                                                                                                                                                  • Einwurf: Was unterscheidet einen Grafikprozessor (GPU) von einem Hauptprozessor (CPU)?

                                                                                                                                                                                                    • CPU-Kerne führen einzelne Befehle auf einzelnen Daten aus
                                                                                                                                                                                                    • GPU führt einzelne Befehle auf vielen Daten gleichzeitig aus, z.B. Rasterisierung von 10000 Polygonen gleichzeitig oder Z-Buffer-Prüfung für 10000 Pixel gleichzeitig
                                                                                                                                                                                                    • dadurch auch für andere massiv parallelisierbare Operationen interessant ("GPGPU", General Purpose GPU), z.B. wissenschaftliche Simulationen, maschinelles Lernen, Passwortknacken
                                                                                                                                                                                                    • Schritt 5: Shader

                                                                                                                                                                                                      • bis jetzt haben wir die Fixed Function Pipeline beschrieben, eine im GPU-Treiber fest vorgegebene Kette von Rendering-Schritten
                                                                                                                                                                                                      • neuere GPU (seit den frühen 2000ern) erlauben das Einbetten von eigenen Programmen (Shadern) in die Pipeline
                                                                                                                                                                                                      • Vertex Shader: wird einmal pro Vertex (Ecke eines Polygons) aufgerufen, um die 2D-Position auf dem Bildschirm zu berechnen (ansonsten normale Berechnung anhand der konfigurierten Kameraposition)
                                                                                                                                                                                                      • Fragment Shader: wird einmal pro Pixel aufgerufen, um gegebenenfalls die Farbe des Pixels zu modifizieren
                                                                                                                                                                                                      • Beispiel eines Fragment-Shaders, der eine Farbtextur auf 6 feste Farbstufen reduziert
                                                                                                                                                                                                      • Schritt 6: Beleuchtung

                                                                                                                                                                                                        • bei traditionallen 2D-Spielen mit Sprites war Beleuchtung meist global (z.B. jedes Objekt hat 2 Sprites, einmal für dunkle und einmal für helle Szenen)
                                                                                                                                                                                                        • dynamische Beleuchtung: heute meist als Teil des Fragment Shaders
                                                                                                                                                                                                        • Beispiel: Phong's Approximation einer natürlichen Beleuchtung
                                                                                                                                                                                                            1. Anteil: ambiente Beleuchtung (überall gleich stark, Grundausleuchtung wie in einem Fernsehstudio)
                                                                                                                                                                                                              1. Anteil: diffuse Beleuchtung (abhängig davon, wie sehr die beleuchtete Fläche zur Lichtquelle hingewendet ist)
                                                                                                                                                                                                                1. Anteil: spekulare Beleuchtung (Glänzen; stark überbetont auf Flächen, die fast exakt zur Lichtquelle hingewendet sind)
                                                                                                                                                                                                                2. es gibt noch so viel mehr: Kantenglättung (Antialiasing), lineares und anisotropisches Filtern, Normal Mapping, Raytracing

                                                                                                                                                                                                                  1 hr 9 min
                                                                                                                                                                                                                3. STP009: Fließkommazahlen

                                                                                                                                                                                                                  „Wir nehmen diese Ausrede Grafik, um in diesen Grundlagenfolgen Dinge zu erklären, die überhaupt nichts mit Grafik zu tun zu haben scheinen, aber dann machen wir den Bogen doch wieder zurück.“

                                                                                                                                                                                                                  Damit schafft Xyrill die passende Einleitung dieser dritten Folge unserer vierteiligen Reihe.

                                                                                                                                                                                                                  Shownotes
                                                                                                                                                                                                                  • Rückbezug zu STP001: Ganzzahlen

                                                                                                                                                                                                                    • z.B. 8-Bit-Zahlen: ohne Vorzeichen 0 bis 255 oder mit Vorzeichen -128 bis 127
                                                                                                                                                                                                                    • Problem 1: Wie stellt man Zahlen mit Nachkommastellen dar?
                                                                                                                                                                                                                    • Problem 2: Wie stellt man sehr große Zahlen effizient dar?
                                                                                                                                                                                                                    • zwei Optionen: Festkommazahlen und Fließkommazahlen
                                                                                                                                                                                                                    • Festkommazahlen

                                                                                                                                                                                                                      • im Prinzip dasselbe wie Ganzzahlen, aber zählt in Schritten von 0,1 oder 0,01 etc.
                                                                                                                                                                                                                      • Beispiel: Währungsrechnungen oft mit 4 Nachkommastellen (also auf 0,01 Eurocent genau)
                                                                                                                                                                                                                      • gegenüber Fließkommazahlen: schneller und genauer, aber nicht so flexibel (löst nur Problem 1, nicht Problem 2)
                                                                                                                                                                                                                      • Fließkommazahlen

                                                                                                                                                                                                                        • grundsätzliche Idee: analog zur wissenschaftlichen Zahlennotation
                                                                                                                                                                                                                          • z.B. "1,2 Milliarden": nicht als 1.200.000.000, sondern 1,2 x 10^9
                                                                                                                                                                                                                          • z.B. "2 Hunderttausendstel": nicht als 0,000002, sondern 2 x 10^-6
                                                                                                                                                                                                                          • Vorteil: unabhängig von der Größenordnung kann immer die gleiche Zahl an Ziffern dargestellt werden
                                                                                                                                                                                                                          • in Computern natürlich nicht zur Basis 10, sondern zur Basis 2
                                                                                                                                                                                                                          • Bestandteile einer Fließkommazahl

                                                                                                                                                                                                                            • Exponent (E): die Anzahl der Zweierpotenzen
                                                                                                                                                                                                                            • Mantisse (M): der Teil der Zahl, der nicht in der Potenz steht
                                                                                                                                                                                                                            • insgesamt also M * 2^E für positive oder -M * 2^E für negative Zahlen
                                                                                                                                                                                                                            • Rechenoperationen ungefähr analog zum Rechenschieber

                                                                                                                                                                                                                              • z.B. Addition: erst die Exponenten angleichen, dann die Mantissen addieren, dann eventuell nochmal den Exponenten anpassen, damit die finale Darstellung wieder schön kompakt ist
                                                                                                                                                                                                                              • hier kommt das Überlaufbit aus STP003 wieder ins Spiel
                                                                                                                                                                                                                              • Kodierung: fast immer gemäß IEEE-754-Standard

                                                                                                                                                                                                                                * IEEE

                                                                                                                                                                                                                                • Problem: wir wollen uns nicht merken müssen, wo in der Mantisse das Komma steht
                                                                                                                                                                                                                                • Trick: wir schieben das Komma so hin, dass die Mantisse mit 1, anfängt, und speichern dann nur den Teil dahinter (normalisierte Zahlen)
                                                                                                                                                                                                                                • Ausnahme: beim kleinsten Wert des Exponenten fängt die Mantisse mit 0, an, damit wir auch die Zahl 0 und sehr kleine Zahlen nahe 0 darstellen können (subnormale Zahlen)
                                                                                                                                                                                                                                • z.B. für 32 Bit: einfache Genauigkeit ("Single Precision")
                                                                                                                                                                                                                                  • 1 Bit Vorzeichen
                                                                                                                                                                                                                                  • 8 Bit Exponent (Ganzzahl zwischen -127 und 128)
                                                                                                                                                                                                                                  • 23 Bit Signifikand (Mantisse ohne das führende 1, oder 0,)
                                                                                                                                                                                                                                  • Werte je nach Exponent:
                                                                                                                                                                                                                                    • Exponent = -127 -> subnormale Zahlen
                                                                                                                                                                                                                                    • Exponent = 128 -> spezielle Werte
                                                                                                                                                                                                                                    • ansonsten -> normalisierte Zahlen
                                                                                                                                                                                                                                    • im Exponent 128 werden einige spezielle Werte kodiert, die man braucht, damit jede Rechenoperation immer eine gültige Fließkommazahl erzeugt:
                                                                                                                                                                                                                                      • plus Unendlich: z.B. 1 / 0 = +∞ oder ∞ + ∞ = ∞
                                                                                                                                                                                                                                      • minus Unendlich: z.B. -1 / 0 = -∞ oder log2(0) = -∞
                                                                                                                                                                                                                                      • keine Zahl (not a number, NaN): z.B. ∞ - ∞ = NaN oder 0 / 0 = NaN oder log2(-1) = NaN
                                                                                                                                                                                                                                      • Implementation von Fließkommarechnungen

                                                                                                                                                                                                                                        • initial in Software auf Basis von Ganzzahlen
                                                                                                                                                                                                                                        • seit den 1980ern zunehmend in Hardware (seit den 1990ern auch in PCs)
                                                                                                                                                                                                                                        • Fallstricke bei Fließkommarechnungen

                                                                                                                                                                                                                                          • nicht alle kompakten Dezimalzahlen sind kompakte Binärzahlen: z.B. 0.3/0.2 = 1.4999999999999998
                                                                                                                                                                                                                                          • bei komplexen Berechnungen können sich kleine Rundungsfehler zu großen Fehlern aufschaukeln, siehe zum Beispiel Kahan-Summenalgorithmus (leider in Wikipedia nur auf englisch)
                                                                                                                                                                                                                                          • Anwendungsbereiche üblicher Fließkommaformate

                                                                                                                                                                                                                                            • doppelte Genauigkeit (64 Bit): für wissenschaftliche Berechnungen
                                                                                                                                                                                                                                            • einfache Genauigkeit (32 Bit): für 3D-Grafik (siehe nächste Folge)
                                                                                                                                                                                                                                            • halbe Genauigkeit (16 Bit), Viertelgenauigkeit (8 Bit): für Training von neuronalen Netzwerken
                                                                                                                                                                                                                                            • 50 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