Vorwort???????????????????????????? | 5 |
Inhalt?????????????????????????? | 11 |
1 Was ist Informatik????????????????????????????????????????????????????????? | 15 |
2 Unix/Linux und Shell-Programmierung???????????????????????????????????????????????????????????????????????????????????????? | 22 |
2.1 Grundlegendes???????????????????????????????????????????????? | 22 |
2.1.1 Wozu dient ein Betriebssystem??????????????????????????????????????????????????????????????????????????????????????? | 22 |
2.1.2 Unix vs. Linux?????????????????????????????????????????????????????? | 24 |
2.1.3 Der Aufbau von Linux?????????????????????????????????????????????????????????????????? | 24 |
2.1.4 Die Shell???????????????????????????????????????????? | 25 |
2.1.5 Multitasking?????????????????????????????????????????????????? | 26 |
2.1.6 Das Dateisystem von Unix?????????????????????????????????????????????????????????????????????????? | 27 |
2.2 Erste wichtige Kommandos?????????????????????????????????????????????????????????????????????? | 28 |
2.2.1 Aufbau von Shell-Kommandos?????????????????????????????????????????????????????????????????????????????? | 29 |
2.2.2 Befehle für Verzeichnisse???????????????????????????????????????????????????????????????????????????? | 30 |
2.2.3 Befehle für Dateien???????????????????????????????????????????????????????????????? | 31 |
2.2.4 Befehle für die Benutzerverwaltung?????????????????????????????????????????????????????????????????????????????????????????????? | 33 |
2.2.5 Befehle des Prozesssystems?????????????????????????????????????????????????????????????????????????????? | 34 |
2.2.6 Sonstige Befehle?????????????????????????????????????????????????????????? | 35 |
2.3 Textdateien erstellen und editieren mit vi?????????????????????????????????????????????????????????????????????????????????????????????????????????? | 36 |
2.4 Features der Shell?????????????????????????????????????????????????????????? | 38 |
2.4.1 Eingabe???????????????????????????????????????? | 38 |
2.4.2 Wildcards???????????????????????????????????????????? | 39 |
2.4.3 Umleitungen und Pipes???????????????????????????????????????????????????????????????????? | 40 |
2.4.4 Shellvariablen?????????????????????????????????????????????????????? | 43 |
2.4.5 Ausblendung von Sonderbedeutungen???????????????????????????????????????????????????????????????????????????????????????????? | 45 |
2.4.6 Verknüpfungen von Kommandos???????????????????????????????????????????????????????????????????????????????? | 46 |
2.5 Weitere Kommandos???????????????????????????????????????????????????????? | 48 |
2.5.1 Das find-Kommando???????????????????????????????????????????????????????????? | 48 |
2.5.2 Das grep-Kommando???????????????????????????????????????????????????????????? | 50 |
2.5.3 Der cut-Befehl?????????????????????????????????????????????????????? | 53 |
2.5.4 Das sort-Kommando???????????????????????????????????????????????????????????? | 54 |
2.5.5 Die head- und tail-Kommandos?????????????????????????????????????????????????????????????????????????????????? | 55 |
2.6 Shell-Programmierung?????????????????????????????????????????????????????????????? | 55 |
2.6.1 Dateneingabe?????????????????????????????????????????????????? | 56 |
2.6.2 Kommandozeilenparameter???????????????????????????????????????????????????????????????????????? | 57 |
2.6.3 Bedingungen testen?????????????????????????????????????????????????????????????? | 58 |
2.6.4 Programmschleifen???????????????????????????????????????????????????????????? | 61 |
3 Python-Programmierung???????????????????????????????????????????????????????????? | 65 |
3.1 Arbeiten mit Python???????????????????????????????????????????????????????????? | 66 |
3.1.1 Python 3 vs. Python 2???????????????????????????????????????????????????????????????????? | 66 |
3.1.2 Installation?????????????????????????????????????????????????? | 67 |
3.1.3 Ein erstes Python-Programm?????????????????????????????????????????????????????????????????????????????? | 67 |
3.1.4 Die Python-Shell?????????????????????????????????????????????????????????? | 68 |
3.1.5 Python Notebooks?????????????????????????????????????????????????????????? | 68 |
3.2 Einfache Datentypen???????????????????????????????????????????????????????????? | 70 |
3.2.1 Zahlen?????????????????????????????????????? | 70 |
3.2.2 Boolesche Werte???????????????????????????????????????????????????????? | 70 |
3.2.3 Strings???????????????????????????????????????? | 71 |
3.2.4 Variablen???????????????????????????????????????????? | 71 |
3.2.5 Operatoren?????????????????????????????????????????????? | 72 |
3.3 Grundlegende Konzepte???????????????????????????????????????????????????????????????? | 74 |
3.3.1 Einrücktiefe?????????????????????????????????????????????????? | 74 |
3.3.2 Kontrollfluss???????????????????????????????????????????????????? | 75 |
3.3.3 Schleifenabbruch?????????????????????????????????????????????????????????? | 79 |
3.3.4 Anweisungen vs. Ausdrücke???????????????????????????????????????????????????????????????????????????? | 79 |
3.3.5 Funktionen?????????????????????????????????????????????? | 81 |
3.4 Zusammengesetzte Datentypen???????????????????????????????????????????????????????????????????????????? | 84 |
3.4.1 Listen und Sequenzen?????????????????????????????????????????????????????????????????? | 84 |
3.4.2 Allgemeine Sequenzoperationen???????????????????????????????????????????????????????????????????????????????????? | 86 |
3.4.3 Wichtige Operationen auf Listen???????????????????????????????????????????????????????????????????????????????????????? | 88 |
3.4.4 Referenzen?????????????????????????????????????????????? | 90 |
3.4.5 Tupel???????????????????????????????????? | 91 |
3.4.6 Dictionaries?????????????????????????????????????????????????? | 91 |
3.4.7 Strings (Fortsetzung)???????????????????????????????????????????????????????????????????? | 94 |
3.5 Funktionale Programmierung?????????????????????????????????????????????????????????????????????????? | 97 |
3.5.1 Listenkomprehensionen???????????????????????????????????????????????????????????????????? | 98 |
3.5.2 Die map-Funktion?????????????????????????????????????????????????????????? | 103 |
3.5.3 Die filter-Funktion???????????????????????????????????????????????????????????????? | 105 |
3.5.4 Die reduce-Funktion???????????????????????????????????????????????????????????????? | 107 |
3.6 Dateien und Verzeichnisse???????????????????????????????????????????????????????????????????????? | 110 |
3.6.1 Datei-Objekte???????????????????????????????????????????????????? | 111 |
3.6.2 Dateimanipulation mit Listenkomprehensionen???????????????????????????????????????????????????????????????????????????????????????????????????????????????? | 114 |
3.6.3 Verzeichnisse???????????????????????????????????????????????????? | 117 |
3.7 Objektorientierte Programmierung?????????????????????????????????????????????????????????????????????????????????????? | 119 |
3.7.1 Definition und Verwendung einer Klasse?????????????????????????????????????????????????????????????????????????????????????????????????????? | 120 |
4 Programmierung mit regulären Ausdrücken???????????????????????????????????????????????????????????????????????????????????????????????? | 125 |
4.1 Verwendung Regulärer Ausdrücke in Python?????????????????????????????????????????????????????????????????????????????????????????????????????? | 125 |
4.1.1 Das Kommando re.findall???????????????????????????????????????????????????????????????????????? | 126 |
4.1.2 Das Kommando re.sub???????????????????????????????????????????????????????????????? | 127 |
4.1.3 Das Kommando re.search?????????????????????????????????????????????????????????????????????? | 130 |
4.2 Komponenten Regulärer Ausdrücke???????????????????????????????????????????????????????????????????????????????????? | 131 |
4.2.1 Einfache Konstrukte???????????????????????????????????????????????????????????????? | 132 |
4.2.2 Rückwärtsreferenzen (Backreferences)?????????????????????????????????????????????????????????????????????????????????????????????????? | 138 |
4.2.3 Greedy vs. Non-Greedy???????????????????????????????????????????????????????????????????? | 140 |
4.2.4 Lookahead???????????????????????????????????????????? | 141 |
4.3 Reguläre Ausdrücke vs. Suchausdrücke mit Listenkomprehensionen?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? | 144 |
5 Datenbanken und Datenbankprogrammierung???????????????????????????????????????????????????????????????????????????????????????????????? | 149 |
5.1 Wozu Datenbanken????????????????????????????????????????????????????????? | 149 |
5.1.1 Daten-Persistenz?????????????????????????????????????????????????????????? | 149 |
5.1.2 Dateisystem als Datenspeicher???????????????????????????????????????????????????????????????????????????????????? | 149 |
5.1.3 Anforderungen an Persistenzmechanismen?????????????????????????????????????????????????????????????????????????????????????????????????????? | 150 |
5.2 Datenbankmanagementsysteme (DBMS)???????????????????????????????????????????????????????????????????????????????????????? | 151 |
5.2.1 Transaktionskonzept???????????????????????????????????????????????????????????????? | 151 |
5.2.2 Funktionsweise eines DBMS???????????????????????????????????????????????????????????????????????????? | 152 |
5.2.3 Einsatz von DBMS?????????????????????????????????????????????????????????? | 153 |
5.3 Relationale DBMS?????????????????????????????????????????????????????? | 153 |
5.3.1 Tabellen, Schemata, Zeilen, Spalten???????????????????????????????????????????????????????????????????????????????????????????????? | 153 |
5.3.2 Erstellen einer Tabelle in MySQL mit Python???????????????????????????????????????????????????????????????????????????????????????????????????????????????? | 154 |
5.4 SQL-Abfragen?????????????????????????????????????????????? | 158 |
5.4.1 Relationenalgebra???????????????????????????????????????????????????????????? | 158 |
5.4.2 Das SELECT-Kommando???????????????????????????????????????????????????????????????? | 159 |
5.4.3 Zählen und Statistiken?????????????????????????????????????????????????????????????????????? | 162 |
5.4.4 Joins: Verknüpfung von Tabellen???????????????????????????????????????????????????????????????????????????????????????? | 163 |
5.5 Entwurf relationaler DBMS???????????????????????????????????????????????????????????????????????? | 164 |
5.5.1 Entity-Relationship-Diagramme???????????????????????????????????????????????????????????????????????????????????? | 164 |
5.5.2 Umsetzung in ein relationales Modell?????????????????????????????????????????????????????????????????????????????????????????????????? | 167 |
5.5.3 Normalisierung?????????????????????????????????????????????????????? | 169 |
5.6 Nicht-Relationale DBMS?????????????????????????????????????????????????????????????????? | 172 |
5.6.1 CouchDB: Datenverfügbarkeit vs. Datenkonsistenz???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? | 172 |
5.6.2 Funktionsprinzipien???????????????????????????????????????????????????????????????? | 173 |
5.6.3 JSON?????????????????????????????????? | 176 |
5.6.4 Erzeugen einer CouchDB-Datenbank mit Python???????????????????????????????????????????????????????????????????????????????????????????????????????????????? | 177 |
5.6.5 Benutzerdefinierte Views mit MapReduce?????????????????????????????????????????????????????????????????????????????????????????????????????? | 179 |
6 Internet und Internetprogrammierung???????????????????????????????????????????????????????????????????????????????????????? | 184 |
6.1 Einführung in die Funktionsweise des Internet???????????????????????????????????????????????????????????????????????????????????????????????????????????????? | 184 |
6.1.1 Geschichtliches???????????????????????????????????????????????????????? | 184 |
6.1.2 Netzwerk-Protokolle???????????????????????????????????????????????????????????????? | 185 |
6.1.3 Das TCP/IP-Referenzmodell???????????????????????????????????????????????????????????????????????????? | 185 |
6.1.4 Internetworking???????????????????????????????????????????????????????? | 187 |
6.1.5 Sockets???????????????????????????????????????? | 188 |
6.1.6 Host, Server, Client?????????????????????????????????????????????????????????????????? | 189 |
6.2 Socketprogrammierung?????????????????????????????????????????????????????????????? | 190 |
6.3 Dateitransfer mit FTP???????????????????????????????????????????????????????????????? | 193 |
6.4 HTML und Datentransfer von URLs???????????????????????????????????????????????????????????????????????????????????? | 195 |
6.4.1 HTML?????????????????????????????????? | 195 |
6.4.2 Datentransfer von URLs?????????????????????????????????????????????????????????????????????? | 196 |
6.5 Dynamische Web-Seiten???????????????????????????????????????????????????????????????? | 198 |
6.5.1 htmlgen: Generierung von HTML-Code?????????????????????????????????????????????????????????????????????????????????????????????? | 198 |
6.5.2 Ein einfacher Web-Server?????????????????????????????????????????????????????????????????????????? | 200 |
6.5.3 Ein erstes CGI-Skript???????????????????????????????????????????????????????????????????? | 201 |
6.5.4 Komplexere CGI-Skripte?????????????????????????????????????????????????????????????????????? | 202 |
7 Nebenläufige und Parallele Programmierung???????????????????????????????????????????????????????????????????????????????????????????????????? | 205 |
7.1 Grundlegendes???????????????????????????????????????????????? | 205 |
7.1.1 Prozesse, Tasks und Threads???????????????????????????????????????????????????????????????????????????????? | 205 |
7.1.2 Nebenläufigkeit vs. Parallelität?????????????????????????????????????????????????????????????????????????????????????????? | 206 |
7.1.3 Multithreading, Time-Sharing und Threadzustände???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? | 207 |
7.1.4 Programmierung mit Threads vs. Multi-Core-Programmierung?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? | 208 |
7.2 Parallele Rechnerarchitekturen?????????????????????????????????????????????????????????????????????????????????? | 208 |
7.2.1 NOWs?????????????????????????????????? | 209 |
7.2.2 SMPs und Mehrkern-Prozessoren???????????????????????????????????????????????????????????????????????????????????? | 209 |
7.2.3 GPUs?????????????????????????????????? | 210 |
7.2.4 Hardware-seitiges Multithreading?????????????????????????????????????????????????????????????????????????????????????????? | 212 |
7.3 Techniken Paralleler Programmierung???????????????????????????????????????????????????????????????????????????????????????????? | 212 |
7.3.1 Locks???????????????????????????????????? | 212 |
7.3.2 Message-Passing???????????????????????????????????????????????????????? | 213 |
7.3.3 Bulk Synchronous Parallel Model (BSP)???????????????????????????????????????????????????????????????????????????????????????????????????? | 213 |
7.4 Multithread-Programmierung in Python?????????????????????????????????????????????????????????????????????????????????????????????? | 214 |
7.4.1 Das threading-Modul???????????????????????????????????????????????????????????????? | 215 |
7.4.2 Verwendung von Locks?????????????????????????????????????????????????????????????????? | 216 |
7.4.3 Das queue-Modul???????????????????????????????????????????????????????? | 219 |
7.5 Multicore-Programmierung in Python?????????????????????????????????????????????????????????????????????????????????????????? | 222 |
7.5.1 Das multiprocessing-Modul???????????????????????????????????????????????????????????????????????????? | 222 |
7.5.2 Das mpi4py-Modul?????????????????????????????????????????????????????????? | 225 |
Literatur???????????????????????????????? | 233 |
Stichwortverzeichnis?????????????????????????????????????????????????????? | 234 |