Scaladays 2014 in Berlin

Ein kurzer Rückblick

Da die Scaladays dieses Jahr in Berlin stattfanden, war dies meine erste Gelegenheit, eine reine Scala-Konferenz zu besuchen. Die Scaladays fanden heuer zum fünften Mal statt und waren mit über 800 Besuchern die größte Veranstaltung bisher. Limit war letztendlich der Veranstaltungsort, die Tickets waren einige Wochen vor der Konferenz bereits komplett ausgebucht.

Mein Gesamteindruck? Ich glaube, ich hab’s hiermit recht treffend auf zusammengefaßt:

Eine sehr coole Mischung aus Praktikern, die aber nicht nur nach „Schema X“ arbeiten, sondern querdenken, sich umsehen und – nicht zuletzt – auch gelegentlich einen Blick in die wissenschaftliche (Parallel)Welt werfen, um zu sehen, was die Theorie für die Praxis zu bieten hat.

Allgemein hatte man den starken Eindruck, daß sich mit der Verbreitung, Akzeptanz und Nachfrage von Scala ordentlich etwas tut: Die meisten der Teilnehmer setzen Scala bereits produktiv in der Arbeit ein, immer häufiger werden die Geschichten von Firmen, die Anwendungen in Scala entwickeln oder zu Scala migrieren.

Das Vortragsprogramm klang rundrum spannend, oft hätte ich in drei Talks parallel gehen wollen. Ich hoffe auf die Videoaufzeichnungen und werde dann „nacharbeiten“ :-) Immerhin sind bereits viele der Folien online, hier gibt es eine Linkliste, und im Blog von Typesafe sind ebenfalls Links und Referenzen zusammengetragen.

Vorträge

Scala: The simple parts

Die Keynote von Martin Odersky. „Simple“ bedeutet nicht zwingend „Easy“. Martin stellte die (simplen) Prinzipien hinter der Idee und dem Sprachentwurf von Scala vor und versuchte deutlich zu machen, wie diese ineinandergreifen. Inhaltlich interessant, aber man hört Martin einfach den Professoren-Vorlesungs-Tonfall an :-)

Contravariance is the Dual of Covariance

Die nächste Keynote war ein Apell, sich nicht immer nur mit dem einfachen Ergebnis zufrieden zu geben, sondern sich gelegentlich auch die Mühe zu machen und dem „warum“ nachzugehen. Aufhänger war die Fragestellung, welcher Rückgabewert bei einem try..finally-Statement letztendlich verwendet wird. Erik Meijer tauchte dabei einmal ein gutes Stückweit in den Lambda-Calculus – sicher mal amüsant (und auch durchaus unterhaltsam präsentiert), allerdings hatte ich den Eindruck, daß er mehr als die Hälfte seines Publikums damit abgehängt hatte.

Pitching Scala: An Interactive Session on Creating Change in your Organization

Kein Vortrag im klassischen Sinn, sondern tatsächlich eine interaktive Gesprächsrunde: Die Macher von go.typesafe.com, einer Seite mit Argumentationslinien für die Verwendung von Scala, gingen über übliche Fragestellungen bei der Wahl von Technologien. Jeder Teilnehmer war mit einer grünen und einer roten Karte ausgestattet, die er im Falle von „erfolgreich für Scala entschieden“ bzw. „Probleme mit Vorbehalten o.ä.“ im eigenen Projekt hob.

Die häufigsten Hemmnisse waren (fast kontextunabhängig) konservative Entscheider und umstiegsunwillige Kollegen. Umgekehrt gab es bei denjenigen, die sich für Scala entschieden hatten, faktisch keine Stimmen, die die Entscheidung bereut hatten. Ein Besucher berichtete von einem internen Projekt, bei dem das Team in zwei Hälften geteilt wurde – die einen entwickelten eine Fragestellung mit Java, die andere mit Scala. Nach vier Wochen hatten zwar beide Teams das Problem gelöst, das Scalateam war trotz der Lernphase (die meisten Mitarbeiter mußten zunächst Scala erlernen) 30% schneller fertig, hatte eine höhere Testabdeckung und weniger Probleme mit irgendwelchen Bugs.

Den Besuchern der Session wurde versprochen, die Ergebnisse der Diskussion zuzumailen - ich bin gespannt. Die Folien sowie einige markante Zitate gibt es bereits im Blog von Blodradius.

Reactive Streams: And why you should care

Reactive Streams sind eine Abstraktion von Datenströmen, die sich unter der Haube auf die Aktoren von Akka herunterbricht. Zwei Dinge bekommt man als Entwickler hierbei „spendiert“: Durchgängige Typensicherheit sowie Datenflußkontrolle „von hinten nach vorn“ (Back Pressure). Ein meiner Meinung nach sehr elegantes Konzept, von dem wir u.a. in der nächsten Version des Play Frameworks mehr sehen werden.

Learn you an sbt for fun and profit

Eine Einführung in sbt abseits der „copy-and-paste-Konfiguration“. Der Talk führte von den Ideen und Prinzipien hinter sbt (die erstaunlich simpel sind) bis zum Erstellen eines eigenen Plugins. Jedem, der sbt benutzt, lege ich die Durchsicht der Vortragsfolien ans Herz, sie fassen das Erzählte sehr gut zusammen.

akka-http: (un)REST for your Actors

Die nächste große Version von Spray wird als akka-http-Modul ins Akka-Projekt mit einziehen. Der Vortrag gab einen Ausblick, auf das, was da kommen wird.

Macros for the Rest of Us

Ein schöner Walk-Through durch die Makroprogrammierung mit Scala. Der Talk zeigte an Beispielen, wie Makros in verschiedenen Kontexten (Funktionen, Typen, etc.) eingesetzt werden können. Die Folien sind leider noch nicht online, aber der Beispielcode ist einen Blick wert.

Fazit des Talks (den ich unterschreibe): Ein mächtiges Tool, das aber durch das „einmal über Bande“-Spiel zu mitunter überraschenden Effekten führen kann. Faustregel: Designe Deine API so, daß sie zwar mit Makros angehübscht ist, aber auch ohne sie vernünftig benutzbar ist.

Introduction to Reactive: A Hands-on Workshop with Play and Akka

Der Talk war eigentlich als Workshop geplant – es hätte ein geführter Walkthrough durch die Tweetmap-Beispielsanwendung werden sollen. Leider half selbst das auf USB-Sticks verteilte activator-Image und das vollständige Template nichts, durch die langsame Netzverbindung war es kaum einem Teilnehmer möglich, die Sache im Code zu verfolgen. Schade.

Delicious Play recipes for real world

Drei Rezepte hätten (stilecht in Kochschürze) vorgestellt werden sollen, die Zeit erlaubte letztendlich nur zwei.

Das erste Rezept ging der Frage nach, wie man mit user- bzw. sessionabhängigen Aktoren umgeht. Play ist ja per Definition stateless, ein Loadbalancer mit „Sticky Sessions“ ist also nicht nötig. Aber wie findet man nun den passenden Aktor? Der Hinweis zielte auf das Modul Akka Actor Sharding, mit dessen Hilfe eine nicht lokal beantwortbare Anfrage an den richtigen Remote Actor weitergeleitet werden kann.

Rezept nummer Zwei behandelte das Problem, eine Seite möglichst schnell im Browser darzustellen. Zwar lassen sich einzelne Seitenteile parallel berechnen, jedoch muß bei der Auslieferung serialisiert werden. Die Idee, die Seitenteile per AJAX nachladen zu lassen, stellt sich als suboptimale Lösung heraus: Zwar kann der Browser das Seitengerüst rendern, jedoch werden die AJAX-Requests vom Browser mit niedrigster Priorität, also sozusagen ganz zum Schluß ausgeführt. Idee des Rezepts war, das Seitengerüst als Chunked Response auszuliefern, die Seitenteile ganz am Ende des Request auszuliefern und per Javascript „einzubauen“. Meiner Meinung nach ist das zwar ein netter Performance-Trick, macht die Seite allerdings ohne Javascript unbenutzbar und auch ein Parsen durch Suchmaschinen eher problematisch.

Community Party

Den Sonnenuntergang des ersten Konferenztags durften wir auf dem Dach eines Hochhauses genießen:

Viel Möglichkeit für Gespräche und Plaudern, nach einem Shake-Hands mit Viktor Klang darf ich mir wohl nun die Hände das nächste Jahr nicht mehr waschen ;-)

Legacy

Die Keynote des zweiten Konferenztags. Chad Fowler ging der Frage nach, was Code ausmacht, bei dem die Bezeichnung „Legacy“ nicht „alter Zopf“, sondern ein Erbe im positiven Sinne ist. Letzendlich brach es sich auf die Idee herunter, kleine Systemteile mit einfachen, möglichst universell ansprechbaren Interfaces zu haben. Eine großartige Präsentation, eine verschärfte Anseh-Empfehlung, hier das Video bei Parleys.

Serious Fun With Scala

Der jüngste Referent (14 Jahre!) berichtete in seinem dritten(!) Talk auf einer Scaladays über seine letzten Scala-Projekte. Vielleicht kein Vortrag mit technischer Innovation, aber dennoch ein schönes Beispiel, wie viel Spaß man mit der Sprache haben kann.

Scala.js: what has it become and how is it used in the wild?

scala.js ist ein Scala-zu-Javascript-Kompiler. Der Vortrag berichtete von den Änderungen beim letzten Versionssprung und gab einen Überblick über verschiedene Projekte rund um scala.js. Persönlich hätte ich mehr Informationen über die praktische Einsetzbarkeit, Integration mit Play, etc. gewünscht – schade.

Futures and Async: When to Use Which?

async ist ein schönes Tool zum Modellieren von Ablauf-Parallelität. Der Vortrag verglich async mit Composable Futures (also Datenparallelität). Fazit des Vortrags war, daß man gegenüber async inzwischen keinerlei Vorbehalte mehr haben muß; in manchen Situationen ist async sogar etwas performanter, da intern weniger anonyme Klassen erzeugt werden müssen.

A whirlwind tour of specs2 2.x

Der Vortragstitel war keine Untertreibung, in Windeseile ging es von den Grundlagen zu den verschiedenen Einsatzzwecken und Kombinationsmöglichkeiten. specs2 ist ein Testframework, das von den Beschreibungsmöglichkeiten mächtiger als ScalaTest/ScalaCheck sein möchte und so die Tests etwas näher an „parsbare Beschreibungen“ wie z.B. bei Cucumber rücken will. specs2 macht einen durchaus geeigneten Eindruck, die Integration mit ScalaCheck ist eines von vielen coolen Features. Auch hier ist eine Durchsicht der Vortragsfolien sehr aufschlußreich.

Fazit zur Konferenz

Eine sehr schöne Konferenz, die mit der wachsenden Popularität von Scala mitwächst. Lediglich die extrem enge Taktung der Vorträge fand ich etwas nachteilig: Die Vorträge begannen zur vollen Stunde, nach 45 Minuten Vortrag plus Q+A blieb also selten mehr als 5 Minuten Zeit, vom einen Saal in den anderen zu kommen. Wegen der langen Schlangen bei den Getränken und den Toiletten war das nicht zu schaffen, wenn man eine der beiden Optionen wahrnehmen wollte/mußte.

Möglicherweise wird es in Zukunft sowohl in USA als auch in Europa jährlich eine ScalaDays geben. Ich hoffe, daß so ein erneuter Besuch in Bälde machbar sein wird.