Come out and Play!
VorwortImpressumEinleitungAufbau des BuchesKonventionen für den QuelltextSchutzmarken und CopyrightsLogos und BilderQuelltext zum BuchEinrichtung der Werkzeuge und Einführung in ScalaWerkzeugeJavaSBTInstallationNützliches für SBTEntwicklungsumgebungProgrammierung in ScalaInteraktive Programmierung via REPLHinweise zu Datenstrukturen (var, val)Schnelleinstieg in die funktionale ProgrammierungAuswertungsstrategien (evaluation strategies)Scopes und BlöckeSemikolons und Infix-OperatorenTail-RekursionFunktionen höherer Ordnung (Higher Order Functions)CurryingPolymorphismusPattern-MatchingImplizite ParameterHilfsmittel zur UnterstützungReduzierung von “Boilerplate” CodeEinführung und Grundlagen zu den verwendeten TechnologienPlay FrameworkErstellen einer Play AnwendungPlay Anwendung über Schablonen erstellenPlay Anwendung von Hand erstellenProjektstrukturVerzeichnisse, SBT-Einstellungen und AbhängigkeitenUnterprojekteRequests, Routing und ControllerRequestsRoutingControllerTemplates (Twirl)Wiederverwendung von TemplatesMehrsprachigkeit (Internationalisierung)Messages ObjektFormulareFormdefinitionForm-Objekte und ihre TypenBeispiele für FormulareVerarbeitung von FormularenFormulardarstellung in Template ViewBeispiel mit sich wiederholenden ElementenDatenbankkonfigurationKonfiguration von Slick für PlayDatenbankzugriffAsynchrone Programmierung mit PlayWebsocketsWebservicesMigration von Play 2.5 auf 2.6Was hat sich geändertSBT 0.13.15 erforderlichGuice und OpenId Unterstützung ausgelagertBereitstellung neuer Controller KlassenAssetsPlay WSAnpassungen bei i18nCacheVeränderungen an der Scala Configuration APIEntfernung diverser APIs und Bibliothekenplay.api.libs.concurrent.Execution ist nun veraltetNeue StandardfilterKonfiguration von EhcacheAusführen mit IntelliJ IDEA und DebuggenAkkaEinrichten einer Akka AnwendungAkka GrundlagenAktorsystem und AktorenSupervisionAktorreferenzenNachrichten und deren AuslieferungKonfigurationAktorenDeathWatchNachrichtenAktoren beendenFSMPersistenzTestsAktorenhilfsmittelEvent-BusLoggingSchedulerZeitdauer (Duration)Unterbrecher (Circuit Breaker)StreamsScala.jsErstellen einer Scala.js AnwendungAbhängigkeitenModule exportierenCross-CompileTestenAnwendungsszenarioDas FrontendDas Online-SpielDas FrontendErstellung und Konfiguration einer Basis-Play-AnwendungEinbindung von Silhouette als Authentifikations-FrameworkAnmeldung der Nutzer am SystemKonfiguration des Backend Store (PostgreSQL)Definition des NutzermodellsErstellen einer Datenbank-EvolutionTabellendefinition innerhalb der AnwendungDAOs für den Zugriff auf die NutzerdatenSilhouette Konfiguration auf eigene DAOs umstellenKonfiguration der Social-ProviderFunktionalität für das Löschen eines AccountsSuchen und Verwalten von FreundenErweiterung des Nutzermodells um einen NutzernamenRegistrierung der Nutzer mit Nutzernamen und E-MailEvolution und Tabellendefinitionen für FreundeslistenFunktionalitäten für Freundeslisten in einem DAOErstellen von WebSockets zur dynamischen InteraktionErstellen des WebSocket auf Basis eines ActorsController als Endpunkt für das WebSocketVerbinden der Action innerhalb des RoutingErstellen von Funktionen innerhalb des Javascript, welche mit dem WebSocket zusammen arbeitenErweiterung des CSR für WebSocketsVisualisierung der FreundeslistenErweiterung der Views zur Übergabe von Skripten und CSSMigration auf Play 2.6 und Silhouette 5Upgrade der benötigten AbhängigkeitenAnpassungen für das Upgrade von SilhouetteÄnderungen im CustomPostgresDriverNeue Controller-KlassenVon WebJarAssets zu AssetsFinderAnpassungen für die Änderungen in i18nImpliziter ExecutionContextRefactoring (Compiler-Warnungen)Das SpielRegeln und SpielverlaufUmsetzungGrundlegende DatentypenOperationen auf einem SpielstandOperationen auf einem SpielfeldNutzung von Eq (Cats)Datenbank (Repository)Zeichnen von Spielfeldern im ClientHilfsfunktionenWebsocket-URL berechnenFeldgröße zum Zeichnen berechnenBerechnen der Klickposition in einem SpielfeldLoggingSpielvorbereitung (Preparation)Globale VariablenStruktur der HTML-DateiFunktionenWebsocketAufruf und InitialisierungSpielablauf (Game)Globale VariablenStruktur der HTML-DateiFunktionenWebsocketAufruf und InitialisierungIntegration ins FrontendVerzeichnisstrukturAktoren, Controller, DAO und ModelleView-TemplatesDatenbankschicht (Repository) als DAOWebsocketEine Websocket-AlgebraKomposition zum fertigen WebsocketController und RoutingÜbersichtsseiteSpielerstellungLöschen eines SpielstandesDem Spiel beitretenDas SpielSpielvorbereitungWebsocketViewsDeployment (Auslieferung)Konfiguration für den ProduktivbetriebErstellen eines Artefakts mit allen AbhängigkeitenErstellen von Paketen für DebianSystemstart-SkripteAuslieferung zu einem Cloud ServiceDeployment via Remote RepositoryDeployment mittels des Plugins sbt-herokuDatenbankzugriff bei HerokuErkenntnisseSilhouetteAbhängigkeiten von anderen BibliothekenAufwand durch inkompatible ÄnderungenCirceErstellung von CodecsVollautomatische AbleitungHalbautomatische AbleitungManuelle ImplementierungGeschwindigkeit des CompilersFehlerhäufigkeitWTFM - Write that fucking manual!Vorteile für bereits involvierte EntwicklerVorteile für neue EntwicklerDankehttps://clojure.org/↩︎
https://www.haskell.org/↩︎
https://de.wikipedia.org/wiki/Lisp↩︎
https://www.scala-lang.org/↩︎
Einrichtung der Werkzeuge und Einführung in Scala
Dieses Kapitel beschreibt grundlegende Arbeitsweisen und Werkzeuge und kann dementsprechend übersprungen werden, wenn diese Kenntnisse bereits vorliegen. Wir beginnen mit einem kurzen Exkurs durch das Ökosystem der Programmiersprache Scala hinsichtlich der zur Verfügung stehenden Werkzeuge. Diese umfassen Java, SBT und diverse Entwicklungsumgebungen.
Danach erfolgt eine kurze Einführung in die Programmierung in Scala, welche einen grundlegenden Überblick über die Möglichkeiten und Vorgehensweisen in dieser Programmiersprache geben soll. Dazu zählen u.a. die interaktive Programmierung mit einer REPL, Hinweise zu vorhandenen Datenstrukturen, ein Schnelleinstieg in die funktionale Programmierung, Hilfsmittel, welche man zur Unterstützung nutzen kann und ein Überblick, wie man “Boilerplate” Code reduziert.
Einführung und Grundlagen zu den verwendeten Technologien
Dieses Kapitel beschreibt die grundlegenden Technologien, welche bei der Implementierung der späteren Beispielanwendung verwendet werden.
Logos: Play, Akka, Scala.js
Play Framework
Das Play Framework (im Folgenden oft auch nur einfach
Play genannt) ist ein Web-Framework, welches die Erstellung einer Oberfläche zur Interaktion zwischen der Anwendung und dem Nutzer erleichtert.
Akka
Akka ist ein Toolkit, welches die Erstellung verteilter, asynchroner und paralleler Anwendungen ermöglicht, die zudem hochperformante Aufgabenstellungen mittels einfacher Skalierung bereitstellt.
Scala.js
Scala.js kombiniert die Typisierung von Scala Code mit den vielfältigen Möglichkeiten und vorhandenen Bibliotheken von JavaScript. Dadurch wird die Erstellung von Frontend-Anwendungen erleichtert und in eine vorhandene Scala Umgebung fließend integriert.
Je nach vorhandenen Vorkenntnissen kann das folgende Kapitel oder Teile davon übersprungen werden.
---ENDE DER LESEPROBE---