ScalaDays

June 16th - 18th, Berlin

Ivan Yatskevich
Sergey Krauchenia

Scala: The Simple Parts

Video

Slides

Scala: The Simple Parts
"Martin Odersky created Scala, a language that unifies constructs from both object oriented and functional languages. This pisses off both groups and each promptly declares jihad."
  1. ~14 simple parts of Scala which Martin uses and is happy about
  2. Addressed several issues like CanBuildFrom
  3. Abstractions
  4. dotty

The Lost Art of Denotational Semantics

Video

Slides

The Lost Art of Denotational Semantics
  1. Learning it will help you become better functional programmer
  2. Executable spec - converts syntax to semantics, semantics to almost executable code. Written interpreter and compiler in 40 minutes
  3. Teasing us, would be happy if 10-20 out of 800 people will understand the talk and learn more later.

Quote or be quoted

Video

Slides

Code

Quote or be quoted
  1. Joy language implemented using quasiquotes
  2. A lot of code examples

Slick in the field, learning to forget ORM

Video

Slides

Code

Slick in the field, learning to forget ORM
  1. Generic DAO for slick
  2. Separate model from tables
  3. Separate queries from tables
  4. Id vs Object in relations
  5. In-Memory DB - bad choice for testing

Reactive Streams: And why you should care.

Video

Reactive Streams: And why you should care.
  1. Motivation behind reactive streams initiative
  2. Code examples, live coding
  3. Backpressure
  4. Streams are not collections - "like a river"

Without Past and Present

Video

Learn you an sbt for fun and profit!

Video

Slides

Code

Learn you an sbt for fun and profit!
  1. Intro to sbt
  2. Functional style - immutable, transformations
  3. keys, task keys, settings, autoplugins
  4. sbt-git, sbt-revolver

Play Framework - from 2.2 to 2.3 and Beyond

Video

Play Framework - from 2.2 to 2.3 and Beyond
  1. Performance improvements
  2. Last version in 2.x will be 2.4
  3. Play 3: DI, more Akka stuff inside, modularization

Resilient Applications with Akka Persistence

Video

Slides

Resilient Applications with Akka Persistence
  1. Event Sourcing
  2. CQRS
  3. Clustering problem solving

Lightning-Fast Standard Collections With ScalaBlitz

Video

Slides

Lightning-Fast Standard Collections With ScalaBlitz
  1. Standard collections with primitive types perf boost
  2. par.view != view.par
  3. foldLeft, foldRight cannot be truly parallel
  4. Operation fusion
  5. Deforestation

Simplifying Scala — The Past, Present and Future

Video

Slides

Simplifying Scala — The Past, Present and Future
  1. Deprecations of procedure syntax, view bounds
  2. Unit value insertion deprecated, will be removed
  3. Proposed to simplify partial function syntax, remove braces and case
  4. Avian VM - http://oss.readytalk.com/avian/
  5. Idea from audience - experimental features can be implemented in Avian, and then proposed to Oracle

Easy Metaprogramming For Everyone!

Video

Slides

Easy Metaprogramming For Everyone!
  1. scala.reflect: AST, Types, Symbols, Annotations and so on.
  2. New scala.meta, everything is represented with a tree
  3. No desugaring
  4. No need to place macro definition in another project
  5. IDE support for in-place macro expansion
  6. Store the whole program AST with bytecode, 20% overhead in size
  7. Better compilation support, more rigid
  8. Live coding, just quasiqoutes, easy as 1-2-3
  9. Coming this fall!

The no-framework Scala Dependency Injection Framework

Video

The no-framework Scala Dependency Injection Framework
  1. MacWire by example
  2. Play example
  3. Play team will work together with Adam on DI features in Play

DOT calculus

Video

Slides

Paper

DOT calculus
  1. Dependent Object Types
  2. Simplify Scala type system
  3. Simplify Scala type inference
  4. Type parameters => type members
  5. DRY

Building a Reactive Application

Video

Slides

Building a Reactive Application
  1. DDD / CQRS / ES
  2. Immutable domain model
  3. Book promotion

Futures and Async: When to Use Which?

Video

Slides

Futures and Async: When to Use Which?
  1. Future vs Promise -> Use Future (most of the time)
  2. Futures in for-comprehension (sequential execution)
  3. Better control flow - async/await
  4. async/await limitations (Q&A)

RESTTest: exploring DSL design in Scala

Video

Slides

RESTTest: exploring DSL design in Scala
  1. Start with a narration of a sentence
  2. Do not overuse syntactic extensions
  3. Techniques
    • Implicit conversions
    • Implicit parameters
    • Custom extractors
  4. Documentation is essential

Effective APIs

Video

Effective APIs
  1. Use meaningful types, not Long, Double, etc.
  2. Error handling
    • Null-object
    • Either/Validation/Custom error
    • Try/Future, Actors, System.exit()
  3. Binary-compatibility, backward-compatibility
  4. Java interop

Monitoring Akka

Video

Slides

Monitoring Akka
  1. Don't wait until 500 errors appear
  2. Typesafe Console failed under load :(
  3. "Reactive" Monitor
  4. AOP-based
  5. Various outputs

Resources

Pizza time!