Vorwort
- Einleitung
- Aufbau des Buches
- Konventionen für den Quelltext
- Schutzmarken und Copyrights
- Logos und Bilder
- Quelltext zum Buch
- IEinrichtung der Werkzeuge und Einführung in Scala
1Werkzeuge
- 1.1Java
- 1.2SBT
- 1.2.1Installation
- 1.2.2Nützliches für SBT
- 1.3Entwicklungsumgebung
2Programmierung in Scala
- 2.1Interaktive Programmierung via REPL
- 2.2Hinweise zu Datenstrukturen (var, val)
- 2.3Schnelleinstieg in die funktionale Programmierung
- 2.3.1Auswertungsstrategien (evaluation strategies)
- 2.3.2Scopes und Blöcke
- 2.3.3Semikolons und Infix-Operatoren
- 2.3.4Tail-Rekursion
- 2.3.5Funktionen höherer Ordnung (Higher Order Functions)
- 2.3.6Currying
- 2.3.7Polymorphismus
- 2.3.8Pattern-Matching
- 2.3.9Implizite Parameter
- 2.4Hilfsmittel zur Unterstützung
- 2.5Reduzierung von “Boilerplate” Code
- IIEinführung und Grundlagen zu den verwendeten Technologien
3Play Framework
- 3.1Erstellen einer Play Anwendung
- 3.1.1Play Anwendung über Schablonen erstellen
- 3.1.2Play Anwendung von Hand erstellen
- 3.2Projektstruktur
- 3.2.1Verzeichnisse, SBT-Einstellungen und Abhängigkeiten
- 3.2.2Unterprojekte
- 3.3Requests, Routing und Controller
- 3.3.1Requests
- 3.3.2Routing
- 3.3.3Controller
- 3.4Templates (Twirl)
- 3.4.1Wiederverwendung von Templates
- 3.5Mehrsprachigkeit (Internationalisierung)
- 3.5.1Messages Objekt
- 3.6Formulare
- 3.6.1Formdefinition
- 3.6.2Form-Objekte und ihre Typen
- 3.6.3Beispiele für Formulare
- 3.6.4Verarbeitung von Formularen
- 3.6.5Formulardarstellung in Template View
- 3.6.6Beispiel mit sich wiederholenden Elementen
- 3.7Datenbankkonfiguration
- 3.7.1Konfiguration von Slick für Play
- 3.8Datenbankzugriff
- 3.9Asynchrone Programmierung mit Play
- 3.9.1Websockets
- 3.10Webservices
- 3.11Migration von Play 2.5 auf 2.6
- 3.11.1Was hat sich geändert
- 3.11.2SBT 0.13.15 erforderlich
- 3.11.3
GuiceundOpenIdUnterstützung ausgelagert - 3.11.4Bereitstellung neuer
ControllerKlassen - 3.11.5Assets
- 3.11.6Play WS
- 3.11.7Anpassungen bei
i18n - 3.11.8Cache
- 3.11.9Veränderungen an der
Scala Configuration API - 3.11.10Entfernung diverser APIs und Bibliotheken
- 3.11.11
play.api.libs.concurrent.Executionist nun veraltet - 3.11.12Neue
Standardfilter - 3.12Konfiguration von Ehcache
- 3.13Ausführen mit IntelliJ IDEA und Debuggen
4Akka
- 4.1Einrichten einer Akka Anwendung
- 4.2Akka Grundlagen
- 4.2.1Aktorsystem und Aktoren
- 4.2.2Supervision
- 4.2.3Aktorreferenzen
- 4.2.4Nachrichten und deren Auslieferung
- 4.2.5Konfiguration
- 4.3Aktoren
- 4.3.1DeathWatch
- 4.3.2Nachrichten
- 4.3.3Aktoren beenden
- 4.3.4FSM
- 4.3.5Persistenz
- 4.3.6Tests
- 4.4Aktorenhilfsmittel
- 4.4.1Event-Bus
- 4.4.2Logging
- 4.4.3Scheduler
- 4.4.4Zeitdauer (Duration)
- 4.4.5Unterbrecher (Circuit Breaker)
- 4.5Streams
5Scala.js
- 5.1Erstellen einer Scala.js Anwendung
- 5.2Abhängigkeiten
- 5.3Module exportieren
- 5.4Cross-Compile
- 5.5Testen
- IIIAnwendungsszenario
6Das Frontend
7Das Online-Spiel
- IVDas Frontend
8Erstellung und Konfiguration einer Basis-Play-Anwendung
9Einbindung von Silhouette als Authentifikations-Framework
10Anmeldung der Nutzer am System
- 10.1Konfiguration des Backend Store (PostgreSQL)
- 10.2Definition des Nutzermodells
- 10.3Erstellen einer Datenbank-Evolution
- 10.4Tabellendefinition innerhalb der Anwendung
- 10.5DAOs für den Zugriff auf die Nutzerdaten
- 10.6Silhouette Konfiguration auf eigene DAOs umstellen
- 10.7Konfiguration der Social-Provider
- 10.8Funktionalität für das Löschen eines Accounts
11Suchen und Verwalten von Freunden
- 11.1Erweiterung des Nutzermodells um einen Nutzernamen
- 11.2Registrierung der Nutzer mit Nutzernamen und E-Mail
- 11.3Evolution und Tabellendefinitionen für Freundeslisten
- 11.4Funktionalitäten für Freundeslisten in einem DAO
- 11.5Erstellen von WebSockets zur dynamischen Interaktion
- 11.5.1Erstellen des WebSocket auf Basis eines Actors
- 11.5.2Controller als Endpunkt für das WebSocket
- 11.5.3Verbinden der Action innerhalb des Routing
- 11.5.4Erstellen von Funktionen innerhalb des Javascript, welche mit dem WebSocket zusammen arbeiten
- 11.6Erweiterung des CSR für WebSockets
- 11.7Visualisierung der Freundeslisten
- 11.8Erweiterung der Views zur Übergabe von Skripten und CSS
12Migration auf Play 2.6 und Silhouette 5
- 12.1Upgrade der benötigten Abhängigkeiten
- 12.2Anpassungen für das Upgrade von Silhouette
- 12.3Änderungen im CustomPostgresDriver
- 12.4Neue Controller-Klassen
- 12.5Von WebJarAssets zu AssetsFinder
- 12.6Anpassungen für die Änderungen in i18n
- 12.7Impliziter ExecutionContext
- 12.8Refactoring (Compiler-Warnungen)
- VDas Spiel
13Regeln und Spielverlauf
14Umsetzung
- 14.1Grundlegende Datentypen
- 14.2Operationen auf einem Spielstand
- 14.3Operationen auf einem Spielfeld
- 14.4Nutzung von Eq (Cats)
- 14.5Datenbank (Repository)
- 14.6Zeichnen von Spielfeldern im Client
- 14.7Hilfsfunktionen
- 14.7.1Websocket-URL berechnen
- 14.7.2Feldgröße zum Zeichnen berechnen
- 14.7.3Berechnen der Klickposition in einem Spielfeld
- 14.7.4Logging
- 14.8Spielvorbereitung (
Preparation) - 14.8.1Globale Variablen
- 14.8.2Struktur der HTML-Datei
- 14.8.3Funktionen
- 14.8.4Websocket
- 14.8.5Aufruf und Initialisierung
- 14.9Spielablauf (
Game) - 14.9.1Globale Variablen
- 14.9.2Struktur der HTML-Datei
- 14.9.3Funktionen
- 14.9.4Websocket
- 14.9.5Aufruf und Initialisierung
15Integration ins Frontend
- 15.1Verzeichnisstruktur
- 15.1.1Aktoren, Controller, DAO und Modelle
- 15.1.2View-Templates
- 15.2Datenbankschicht (Repository) als DAO
- 15.3Websocket
- 15.3.1Eine Websocket-Algebra
- 15.3.2Komposition zum fertigen Websocket
- 15.4Controller und Routing
- 15.4.1Übersichtsseite
- 15.4.2Spielerstellung
- 15.4.3Löschen eines Spielstandes
- 15.4.4Dem Spiel beitreten
- 15.4.5Das Spiel
- 15.4.6Spielvorbereitung
- 15.4.7Websocket
- 15.5Views
- VIDeployment (Auslieferung)
16Konfiguration für den Produktivbetrieb
17Erstellen eines Artefakts mit allen Abhängigkeiten
18Erstellen von Paketen für Debian
- 18.1Systemstart-Skripte
19Auslieferung zu einem Cloud Service
- 19.1Deployment via Remote Repository
- 19.2Deployment mittels des Plugins sbt-heroku
- 19.3Datenbankzugriff bei Heroku
- VIIErkenntnisse
20Silhouette
- 20.1Abhängigkeiten von anderen Bibliotheken
- 20.2Aufwand durch inkompatible Änderungen
21Circe
- 21.1Erstellung von Codecs
- 21.1.1Vollautomatische Ableitung
- 21.1.2Halbautomatische Ableitung
- 21.1.3Manuelle Implementierung
- 21.2Geschwindigkeit des Compilers
- 21.3Fehlerhäufigkeit
WTFM - Write that fucking manual!
- Vorteile für bereits involvierte Entwickler
- Vorteile für neue Entwickler