Want to dive even deeper?

Take the course Hibernate Programming by Sang Shin and become an expert!
Hibernate Programming
by Sang Shin

Check it out!
You're watching a preview of this video, click the button on the left to puchase the full version from Atomikos ExtremeTransactions Certification.

On Pickles and Spores: Improving Scala's Support for Distributed Programming

Despite unifying frameworks like Akka, distributed systems often look like a patchwork of special-purpose tools, libraries, and frameworks. For example, the essential task of persisting objects by pickling (or serializing) them to a binary or text representation is typically outsourced to a third-party serialization framework. Many of these frameworks, like Google's Protocol Buffers, lack support by the Scala compiler or integration with the Scala standard library, resulting in suboptimal performance, unsatisfying Scala support, or both. Furthermore, to obtain good performance using one of these frameworks, it's often necessary to roll your own type-specialized custom serializers, requiring significant boilerplate. This talk presents a new pickling framework designed for Scala with a few attractive properties: (1) using the framework requires little to no boilerplate, (2) using Scala's implicit parameters, users can add their own easily-swappable pickle format enabling users to persist

Published on
  • 6.863
  • 20
  • 0
  • 19
  • 0
  • On pICKLES & sPORES IMPROVING SCALA’S SUPPORT FOR DISTRIBUTED PROGRAMMING HEATHER MILLER Wednesday, June 12, 13
  • with: PHILIPP HALLER TYPESAFE EUGENE BURMAKO EPFL MARTIN ODERSKY EPFL/TYPESAFE Wednesday, June 12, 13
  • wHAT IS THIS TALK ABOUT? Wednesday, June 12, 13
  • wHAT IS THIS TALK ABOUT? tributed Making dis gramming pro r in scala easie Wednesday, June 12, 13
  • This kind of distributed syst Wednesday, June 12, 13 em
  • ALso! This kind of distributed syst insert social network of your choice here Wednesday, June 12, 13 em
  • Machines Communicating Bottomline: Wednesday, June 12, 13
  • Machines Communicating Bottomline: How can we simplify di stribution at the language-level? Wednesday, June 12, 13
  • Agenda sCALA pICKLING macros & typeclasses Spores Wednesday, June 12, 13
  • Agenda sCALA pICKLING Spores Wednesday, June 12, 13
  • scala.pickling Pickles! https://github.com/scala/pickling Wednesday, June 12, 13
  • What is it? PICKLING == SERIALIZATION == MARSHALLING https://github.com/scala/pickling Wednesday, June 12, 13
  • What is it? PICKLING == SERIALIZATION == MARSHALLING very differe nt from java seriali zation https://github.com/scala/pickling Wednesday, June 12, 13
  • wait, why do we care? https://github.com/scala/pickling Wednesday, June 12, 13
  • wait, why do we care? Slow! https://github.com/scala/pickling Wednesday, June 12, 13
  • wait, why do we care? Slow! Closed! https://github.com/scala/pickling Wednesday, June 12, 13
  • wait, why do we care? Slow! Closed! not serializable exceptions at runtime https://github.com/scala/pickling Wednesday, June 12, 13
  • wait, why do we care? Slow! Closed! ely make t retroactiv can’ not serializable exceptions at runtime serializable classes https://github.com/scala/pickling Wednesday, June 12, 13
  • Enter: Scala Pickling https://github.com/scala/pickling Wednesday, June 12, 13
  • Enter: Scala Pickling fast: Serialization code generated at compiletime and inlined at the use-site. https://github.com/scala/pickling Wednesday, June 12, 13
  • Enter: Scala Pickling fast: Serialization code generated at compiletime and inlined at the use-site. Flexible: Using typeclass pattern, retroactively make types serializable https://github.com/scala/pickling Wednesday, June 12, 13
  • Enter: Scala Pickling fast: Serialization code generated at compiletime and inlined at the use-site. Flexible: Using typeclass pattern, retroactively make types serializable NO BOILERPLATE: Typeclass instances generated at compile-time https://github.com/scala/pickling Wednesday, June 12, 13
  • Enter: Scala Pickling fast: Serialization code generated at compiletime and inlined at the use-site. Flexible: Using typeclass pattern, retroactively make types serializable NO BOILERPLATE: Typeclass instances generated at compile-time pluggable formats: Effortlessly change format of serialized data: binary, JSON, invent your own! https://github.com/scala/pickling Wednesday, June 12, 13
  • Enter: Scala Pickling fast: Serialization code generated at compiletime and inlined at the use-site. Flexible: Using typeclass pattern, retroactively make types serializable NO BOILERPLATE: Typeclass instances generated at compile-time pluggable formats: Effortlessly change format of serialized data: binary, JSON, invent your own! typesafe: Picklers are type-specialized. Catch errors at compile-time! https://github.com/scala/pickling Wednesday, June 12, 13
  • What does it look like? https://github.com/scala/pickling Wednesday, June 12, 13
  • What does it look like? scala>  import  scala.pickling._ import  scala.pickling._ https://github.com/scala/pickling Wednesday, June 12, 13
  • What does it look like? scala>  import  scala.pickling._ import  scala.pickling._ scala>  import  json._ import  json._ https://github.com/scala/pickling Wednesday, June 12, 13
  • What does it look like? scala>  import  scala.pickling._ import  scala.pickling._ scala>  import  json._ import  json._ scala>  case  class  Person(name:  String,  age:  Int) defined  class  Person scala>  Person("John  Oliver",  36) res0:  Person  =  Person(John  Oliver,36) https://github.com/scala/pickling Wednesday, June 12, 13
  • What does it look like? scala>  import  scala.pickling._ import  scala.pickling._ scala>  import  json._ import  json._ scala>  case  class  Person(name:  String,  age:  Int) defined  class  Person scala>  Person("John  Oliver",  36) res0:  Person  =  Person(John  Oliver,36) scala>  res0.pickle res1:  scala.pickling.json.JSONPickle  =   JSONPickle({    "tpe":  "Person",    "name":  "John  Oliver",    "age":  36 }) https://github.com/scala/pickling Wednesday, June 12, 13
  • it’s pretty fast and... https://github.com/scala/pickling Wednesday, June 12, 13
  • collections: Time Wednesday, June 12, 13 Benchmarks
  • Benchmarks collections: free Mem ory (more is better) Wednesday, June 12, 13
  • collections: size Wednesday, June 12, 13 Benchmarks
  • geotrellis: time Wednesday, June 12, 13 Benchmarks
  • evactor: time Benchmarks Java runs out of memory Wednesday, June 12, 13
  • Benchmarks evactor: time (no java, m ore events) Wednesday, June 12, 13
  • btw, that’s just the default behavior... https://github.com/scala/pickling Wednesday, June 12, 13
  • btw, that’s just the default behavior... you can really customi ze scala pickling too. https://github.com/scala/pickling Wednesday, June 12, 13
  • Customizing Pickling Previous examples used default behavior Generated picklers Standard pickle format Pickling is very customizable Custom picklers for specific types Custom pickle format Before we can show these things,let's have a look at the building block of the framework... Wednesday, June 12, 13
  • Pickler Combinators Elegant programming pearl that comes from functional programming. A composable and "constructive" way to think about persisting data. Compose picklers for simple types to build picklers for more complicated types What is a pickler? simplified ver sion of what’s actually used in scalapickling trait  Pickler[T]  {    //  returns  next  write  position    def  pickle(arr:  Array[Byte],  i:  Int,  x:  T):  Int    //  returns  result  plus  next  read  position    def  unpickle(arr:  Array[Byte],  i:  Int):  (T,  Int) } https://github.com/scala/pickling Wednesday, June 12, 13
  • Pickler Combinators 1 2 We need 2 things: Picklers for base types fully-implemen ted picklers for some basic types like primitives Functions that combine existing picklers to build compound picklers example: combi nator that takes a Pickler[ T] and returns a Pickler[List[T]] https://github.com/scala/pickling Wednesday, June 12, 13
  • Pickler Combinators Goal: Build a pickler for pairs (Int, String), combine an Int pickler and a String pickler val  myPairPickler  =  tuple2Pickler(intPickler,  stringPickler) What’s the type? Pickler[T], can pickle objects of type T Can we combine them automatically? Can take intPickler and stringPickler as implicit parameters tuple2Pickler can be an implicit def def pickle(implicit pickler: Pickler[(Int, String)]) = { pickler.pickle((32, “yay!”)) } https://github.com/scala/pickling Wednesday, June 12, 13
  • Implicit Picklers customize what you pic kle! case  class  Person(name:  String,  age:  Int,  salary:  Int) class  CustomPersonPickler(implicit  val  format:  PickleFormat)  extends  SPickler[Person]  {    def  pickle(picklee:  Person,  builder:  PBuilder):  Unit  =  {        builder.beginEntry(picklee)        builder.putField("name",  b  =>            b.hintTag(FastTypeTag.ScalaString).beginEntry(picklee.name).endEntry())        builder.putField("age",  b  =>            b.hintTag(FastTypeTag.Int).beginEntry(picklee.age).endEntry())        builder.endEntry()    } } implicit  def  genCustomPersonPickler(implicit  format:  PickleFormat)  =    new  CustomPersonPickler https://github.com/scala/pickling Wednesday, June 12, 13
  • Pickle Format        trait  PickleFormat  {                type  PickleType  <:  Pickle                def  createBuilder():  PBuilder                def  createReader(pickle:  PickleType,  mirror:  Mirror):  PReader            }        trait  PBuilder  extends  Hintable  {            def  beginEntry(picklee:  Any):  this.type            def  putField(name:  String,  pickler:  this.type  =>  Unit):  this.type            def  endEntry():  Unit            def  beginCollection(length:  Int):  this.type            def  putElement(pickler:  this.type  =>  Unit):  this.type            def  endCollection(length:  Int):  Unit            def  result():  Pickle        } https://github.com/scala/pickling Wednesday, June 12, 13
  • Pickle Format output any format!        trait  PickleFormat  {                type  PickleType  <:  Pickle                def  createBuilder():  PBuilder                def  createReader(pickle:  PickleType,  mirror:  Mirror):  PReader            }        trait  PBuilder  extends  Hintable  {            def  beginEntry(picklee:  Any):  this.type            def  putField(name:  String,  pickler:  this.type  =>  Unit):  this.type            def  endEntry():  Unit            def  beginCollection(length:  Int):  this.type            def  putElement(pickler:  this.type  =>  Unit):  this.type            def  endCollection(length:  Int):  Unit            def  result():  Pickle        } https://github.com/scala/pickling Wednesday, June 12, 13
  • Pickle Format example talk to a clojure app Output edn, Clojure’s data transfer format. scala>  import  scala.pickling._ import  scala.pickling._ scala>  import  edn._ import  edn._ scala>  case  class  Person(name:  String,  kidsAges:  Array[Int]) defined  class  Person scala>  val  joe  =  Person("Joe",  Array(3,  4,  13)) joe:  Person  =  Person(Joe,[I@3d925789) scala>  joe.pickle.value res0:  String  =  #pickling/Person  {  :name  "Joe"  :kidsAges  [3,  4,  13]  } toy builder implementation: https://gist.github.com/heathermiller/5760171 Wednesday, June 12, 13
  • What can be pickled? types for which an implicit pickler is in scope if there is an implicit of type Pickler[Foo] in scope, you can pickle instances of it types for which our framework can generate picklers classes case classes generic classes singleton objects primitives & primitive arrays ... can’t (yet): instances of inner classes, Types https://github.com/scala/pickling Wednesday, June 12, 13
  • What can be pickled? types for which an implicit pickler is in scope if there is an implicit of type Pickler[Foo] in scope, you can pickle instances of it types for which our framework can generate picklers classes IMPORTANT: The implicit case classes picklers are used in the generat generic classes ion! singleton objects primitives & primitive arrays ... can’t (yet): instances of inner classes, Types https://github.com/scala/pickling Wednesday, June 12, 13
  • Status Release 0.8.0 for Scala 2.10.2 https://github.com/scala/pickling ScalaCheck tests Very soon: support for cyclic object graphs (for release 0.9.0) No support for inner classes, yet Wednesday, June 12, 13
  • Status Release 0.8.0 for Scala 2.10.2 https://github.com/scala/pickling ScalaCheck tests Very soon: support for cyclic object graphs (for release 0.9.0) No support for inner classes, yet Goal: Wednesday, June 12, 13 Scala 2.11 as target
  • Status Release 0.8.0 for Scala 2.10.2 https://github.com/scala/pickling ScalaCheck tests Very soon: support for cyclic object graphs (for release 0.9.0) No support for inner classes, yet Goal: Plan: Scala 2.11 as target 1.0 release within the next few months Integration with sbt, Spark, and Akka, ... SIP for Scala 2.11 Experiment: use Scala-pickling to speed up Scala compiler Wednesday, June 12, 13
  • And now onto something completely different. Wednesday, June 12, 13
  • Status Release 0.8.0 for Scala 2.10.2 https://github.com/scala/pickling ScalaCheck tests Very soon: support for cyclic object graphs (for release 0.9.0) No support for inner classes, yet Goal: Plan: Scala 2.11 as target 1.0 release within the next few months Integration with sbt, Spark, and Akka, ... SIP for Scala 2.11 Experiment: use Scala-pickling to speed up Scala compiler Wednesday, June 12, 13
  • Status Release 0.8.0 for Scala 2.10.2 https://github.com/scala/pickling ScalaCheck tests Very soon: support for cyclic object graphs (for release 0.9.0) No support for inner classes, yet Wednesday, June 12, 13
  • Status Release 0.8.0 for Scala 2.10.2 https://github.com/scala/pickling ScalaCheck tests Very soon: support for cyclic object graphs (for release 0.9.0) No support for inner classes, yet Goal: Plan: Scala 2.11 as target 1.0 release within the next few months Integration with sbt, Spark, and Akka, ... SIP for Scala 2.11 Experiment: use Scala-pickling to speed up Scala compiler Wednesday, June 12, 13
  • And now onto something completely different. Wednesday, June 12, 13
  • scala spores! http://docs.scala-lang.org/sips/pending/spores.html Wednesday, June 12, 13
  • What are they? Wednesday, June 12, 13
  • What are they? small units of mobile functional behavior Wednesday, June 12, 13
  • What are they? small units of mobile functional behavior proposed for inclusion in scala 2.11 http://docs.scala-lang.org/sips/pending/spores.html Wednesday, June 12, 13
  • Motivation First, some http://docs.scala-lang.org/sips/pending/spores.html Wednesday, June 12, 13
  • Motivation Potential hazards when using closures incorrectly: • Memory leaks • Race conditions, due to capturing mutable references • Runtime serialization errors, due to unintended capture of references def  receive  =  {    case  Request(data)  =>        future  {            val  result  =  transform(data)            sender  !  Response(result)        } } not a stable va lue! actor spawns a akka o concurrently future t ss incoming reqs proce http://docs.scala-lang.org/sips/pending/spores.html Wednesday, June 12, 13
  • Serialization doesn’t extend serializable case  class  Helper(name:  String) class  Main  {    val  helper  =  Helper("the  helper")    val  fun:  Int  =>  Unit  =  (x:  Int)  =>  {        val  result  =  x  +  "  "  +  helper.toString        println("The  result  is:  "  +  result)    } } Serialization of fun throws a NotSerializableException. Why? http://docs.scala-lang.org/sips/pending/spores.html Wednesday, June 12, 13
  • Spores an alternative way to create closure-like objects, in a way where the environment is controlled val s = spore { val h = helper (x: Int) => { val result = x + " " + h.toString println("The result is: " + result) } } Wednesday, June 12, 13
  • Spores an alternative way to create closure-like objects, in a way where the environment is controlled val s = spore { val h = helper (x: Int) => { val result = x + " " + h.toString println("The result is: " + result) } } The body of a spore consists of two parts: 1. a sequence of local value (val) declarations only, and 2. a closure. Wednesday, June 12, 13
  • Serialization doesn’t extend serializable case  class  Helper(name:  String) class  Main  {    val  helper  =  Helper("the  helper")    val  fun:  Int  =>  Unit  =  (x:  Int)  =>  {        val  result  =  x  +  "  "  +  helper.toString        println("The  result  is:  "  +  result)    } } Serialization of fun throws a NotSerializableException. Why? http://docs.scala-lang.org/sips/pending/spores.html Wednesday, June 12, 13
  • Spores an alternative way to create closure-like objects, in a way where the environment is controlled val s = spore { val h = helper (x: Int) => { val result = x + " " + h.toString println("The result is: " + result) } } Wednesday, June 12, 13
  • Spores an alternative way to create closure-like objects, in a way where the environment is controlled val s = spore { val h = helper (x: Int) => { val result = x + " " + h.toString println("The result is: " + result) } } The body of a spore consists of two parts: 1. a sequence of local value (val) declarations only, and 2. a closure. Wednesday, June 12, 13
  • Spores an alternative way to create closure-like objects, in a way where the environment is controlled val s = spore { val h = helper (x: Int) => { val result = x + " " + h.toString println("The result is: " + result) } } The body of a spore consists of two parts: 1. a sequence of local value (val) declarations only, and 2. a closure. The closure of a spore has to satisfy the following rule. All free variables of the closure body have to be either 1. parameters of the closure, or 2. declared in the preceding sequence of local value declarations. Wednesday, June 12, 13
  • Inspiration Spores are not limited to distributed programming do you have state & asynchrony? Make your APIs safer by expecting a Spore instead of a function By requiring spores in your public APIs you can prevent users from introducing hazards, like race conditions. Make your users more happy by preventing them from shooting themselves in the foot! http://docs.scala-lang.org/sips/pending/spores.html Wednesday, June 12, 13
  • Status SIP-21 Spores: on docs.scala-lang.org/sips now! Get involved in the discussion! Pull request for Scala 2.11 and Akka 2.2.1 in preparation Integration with Scala-pickling planned http://docs.scala-lang.org/sips/pending/spores.html Wednesday, June 12, 13
  • ? qUESTIONS Contact heather.miller@epfl.ch @heathercmiller Wednesday, June 12, 13

Comments

Be the first one to add a comment

Thumbnail for: Busy Java Developer’s Guide to Three REST API Frameworks

Busy Java Developer’s Guide to Three REST API Frameworks

Ted Neward

subscription
Thumbnail for: Corporate startup and Scala

Corporate startup and Scala

Filip Rogaczewski

subscription
Thumbnail for: Co było pierwsze: kod czy architektura?

Co było pierwsze: kod czy architektura?

Slawomir Sobotka

subscription
Thumbnail for: Preventing Analytics and Ads from polluting your codebase (no slides)

Preventing Analytics and Ads from polluting your codebase (no slides)

Savvas Dalkitsis

subscription
Thumbnail for: From Docker To Kubernetes: A Developer's Guide To Containers

From Docker To Kubernetes: A Developer's Guide To Containers

Marek Grabowski

subscription
Thumbnail for: Ścisły przewodnik po aspektach miękkich - część II: Jesteś ekspertem i co dalej?

Ścisły przewodnik po aspektach miękkich - część II: Jesteś ekspertem i co dalej?

Slawomir Sobotka

free
Thumbnail for: Designing software with security in mind?

Designing software with security in mind?

Daniel Deogun

subscription
Thumbnail for: OAuth2 for native apps and beyond

OAuth2 for native apps and beyond

Erik Jan de Wit

subscription
Thumbnail for: Using JavaScript/HTML5 Rich Clients with Java EE 7

Using JavaScript/HTML5 Rich Clients with Java EE 7

Reza Rahman

subscription
Thumbnail for: Why I love Logstash and you should too

Why I love Logstash and you should too

João Duarte

subscription
Thumbnail for: Java Bytecode Explained

Java Bytecode Explained

OLEG ŠELAJEV

subscription
Thumbnail for: Agile Project Management Anti-Patterns

Agile Project Management Anti-Patterns

Kasia Mrowca

subscription
Thumbnail for: Applications secure by default

Applications secure by default

Sławomir Jasek

subscription
Thumbnail for: From spaghetti with no src/test to green CI, good coverage and well-sleeping developers

From spaghetti with no src/test to green CI, good coverage and well-sleeping developers

Michał Matłoka , Jacek Kunicki

subscription
Thumbnail for: Failing Continuous Delivery

Failing Continuous Delivery

Daniel Sawano , Daniel Deogun

subscription
Thumbnail for: Tips and tricks for clean relational db schemas (slides only)

Tips and tricks for clean relational db schemas (slides only)

Clément Delafargue

subscription
Thumbnail for: Production Lessons (slides only)

Production Lessons (slides only)

Greg Young

subscription

The Spring BOF (no slides)

Juergen Hoeller , Josh Long

subscription

BigData on Azure for architects – Machine Learning, HDInsight (Hadoop), Event Hub – what to use when (and – how) (slides only)

Tomasz Kopacz

subscription
Thumbnail for: "Bootiful" Applications with Spring Boot

"Bootiful" Applications with Spring Boot

Josh Long

subscription
Thumbnail for: 5-10-15 years with Java - from junior to master and back again (slides only)

5-10-15 years with Java - from junior to master and back again (slides only)

Wojciech Seliga

subscription
Thumbnail for: Everything Works In Java EE?--Then Try Microservices :-) (slides only)

Everything Works In Java EE?--Then Try Microservices :-) (slides only)

Adam Bien

subscription
Thumbnail for: Supler: complex web forms, not so complex

Supler: complex web forms, not so complex

Adam Warski , Tomasz Szymanski

subscription
Thumbnail for: Functional Data Storage (slides only)

Functional Data Storage (slides only)

Greg Young

subscription
Thumbnail for: The Go Language (slides only)

The Go Language (slides only)

Brad Fitzpatrick

subscription
Thumbnail for: The Silver Bullet Syndrome (slides only)

The Silver Bullet Syndrome (slides only)

Hadi Hariri

subscription
Thumbnail for: What's Coming in Java EE 8

What's Coming in Java EE 8

Reza Rahman

subscription
Thumbnail for: From API to protocol (slides only)

From API to protocol (slides only)

Quentin ADAM

subscription
Thumbnail for: Babun - a Windows shell you will love, finally! (slides only)

Babun - a Windows shell you will love, finally! (slides only)

Tom Bujok , Lukasz Pielak

subscription
Thumbnail for: IDE Wizard? CLI Command? Get both for the price of one! (slides only)

IDE Wizard? CLI Command? Get both for the price of one! (slides only)

Koen Aers

subscription
Thumbnail for: Event Sourcing & Functional Programming - a pair made in heaven

Event Sourcing & Functional Programming - a pair made in heaven

Paweł Szulc

subscription
Thumbnail for: Everybody lies

Everybody lies

Tomasz Kowalczewski

free
Thumbnail for: Scala and Clojure: Playing well together

Scala and Clojure: Playing well together

David Pollak

subscription
Thumbnail for: Groovier BDD with Spock (slides only)

Groovier BDD with Spock (slides only)

Michał Kordas

subscription
Thumbnail for: Clean JavaScript code - only dream or reality (slides only)

Clean JavaScript code - only dream or reality (slides only)

Sebastian Łaciak

subscription
Thumbnail for: Wykorzystanie podejścia Domain-Driven Design w systemach legacy (slides only)

Wykorzystanie podejścia Domain-Driven Design w systemach legacy (slides only)

Piotr Wyczesany

subscription
Thumbnail for: Case Study: Agile @gov.pl (slides only)

Case Study: Agile @gov.pl (slides only)

Matt Harasymczuk

subscription
Thumbnail for: Functional patterns for scala beginners (slides only)

Functional patterns for scala beginners (slides only)

Clément Delafargue

subscription
Thumbnail for: Vagrant up your enviroment (slides only)

Vagrant up your enviroment (slides only)

Yann Larrivee

subscription
Thumbnail for: Running Micro-Services with Spring Boot in Kubernetes (slides only)

Running Micro-Services with Spring Boot in Kubernetes (slides only)

Ray Tsang

subscription
Thumbnail for: Scalable Is Awesome, Literally! (slides only)

Scalable Is Awesome, Literally! (slides only)

Garrett Smith

subscription
Thumbnail for: Apache Spark - when things go wrong (slides only)

Apache Spark - when things go wrong (slides only)

Paweł Szulc

subscription
Thumbnail for: Functional Programming: Technical Reasons to Adapt (screen only)

Functional Programming: Technical Reasons to Adapt (screen only)

Venkat Subramaniam

subscription
Thumbnail for: PubSub++ - few tips that make your life with kafka easier. (slides only)

PubSub++ - few tips that make your life with kafka easier. (slides only)

Krzysztof Debski

subscription
Thumbnail for: Effective SCRUM in distributed teams (slides only)

Effective SCRUM in distributed teams (slides only)

Rafał Udziela

subscription
Thumbnail for: React.js: Super-fast Single Page Web Applications (slides only)

React.js: Super-fast Single Page Web Applications (slides only)

Pratik Patel

subscription
Thumbnail for: The Smartwatch Revolution begins: Developing for Android Wear (slides only)

The Smartwatch Revolution begins: Developing for Android Wear (slides only)

Pratik Patel

subscription
Thumbnail for: Apache Cassandra 101 (slides only)

Apache Cassandra 101 (slides only)

Christopher Batey

subscription
Thumbnail for: Distributed algorithms for Big Data (slides only)

Distributed algorithms for Big Data (slides only)

DuyHai DOAN

subscription
Thumbnail for: What's new in Spring Data? (slides only)

What's new in Spring Data? (slides only)

Thomas Darimont

subscription
Thumbnail for: User Acceptance Testing - Looking for the Holly Grail (slides only)

User Acceptance Testing - Looking for the Holly Grail (slides only)

Boguslaw Osuch

subscription
Thumbnail for: Is your profiler speaking the same language as you? (slides only)

Is your profiler speaking the same language as you? (slides only)

Simon Maple

subscription
Thumbnail for: Microservices and Conversion Hunting - How to build software architectures for changeableness (slides only)

Microservices and Conversion Hunting - How to build software architectures for changeableness (slides only)

Bernd Zuther

subscription
Thumbnail for: JRebel under the covers - how is it even possible? (slides only)

JRebel under the covers - how is it even possible? (slides only)

Simon Maple

subscription
Thumbnail for: Core Software Design Principles for Programmers (slides only)

Core Software Design Principles for Programmers (slides only)

Venkat Subramaniam

subscription
Thumbnail for: Microservices - enough with theory, let's code some (slides only)

Microservices - enough with theory, let's code some (slides only)

Marcin Grzejszczak , Tomasz Szymanski

subscription
Thumbnail for: A Gentle and useful introduction to Reactive Extensions (slides only)

A Gentle and useful introduction to Reactive Extensions (slides only)

Hadi Hariri

subscription
Thumbnail for: Caching reboot: javax.cache & Ehcache 3 (slides only)

Caching reboot: javax.cache & Ehcache 3 (slides only)

Louis Jacomet

subscription
Thumbnail for: Lazy Evaluations (screen only)

Lazy Evaluations (screen only)

Venkat Subramaniam

subscription
Thumbnail for: Make sense of your (BIG) data! (slides only)

Make sense of your (BIG) data! (slides only)

David Pilato

subscription
Thumbnail for: The end of server management : hosting have to become a commodity (slides only)

The end of server management : hosting have to become a commodity (slides only)

Quentin ADAM

subscription
Thumbnail for: Refactoring to Functional (slides only)

Refactoring to Functional (slides only)

Hadi Hariri

subscription
Thumbnail for: HTTP/2 : why upgrading the web? (slides only)

HTTP/2 : why upgrading the web? (slides only)

Quentin ADAM

subscription
Thumbnail for: Hystrix – managing failures in distributed systems (slides only)

Hystrix – managing failures in distributed systems (slides only)

Tomasz Nurkiewicz

subscription
Thumbnail for: Building systems that are #neverdone

Building systems that are #neverdone

James Lewis

subscription
Thumbnail for: Need for Async: In hot pursuit of internet-scale app architectures

Need for Async: In hot pursuit of internet-scale app architectures

Konrad Malawski

subscription
Thumbnail for: Level up your dev skills with static analysis

Level up your dev skills with static analysis

David Lindsay

subscription
Thumbnail for: Modularity in post microservice world

Modularity in post microservice world

Michal Gruca

subscription
Thumbnail for: Modern Java Component Design with Spring 4.2

Modern Java Component Design with Spring 4.2

Juergen Hoeller

subscription
Thumbnail for: The Creative Networker

The Creative Networker

Jurgen Appelo

subscription
Thumbnail for: Technical leadership – from an expert to a leader

Technical leadership – from an expert to a leader

Mariusz Sieraczkiewicz

subscription
Thumbnail for: JCP, Adopt-a-JSR & You

JCP, Adopt-a-JSR & You

Reza Rahman

subscription
Thumbnail for: Lessons learned from scaling software

Lessons learned from scaling software

Bartek Nowakowski

subscription
Thumbnail for: Building fault tolerant microservices

Building fault tolerant microservices

Christopher Batey

subscription
Thumbnail for: High Performance JavaScript Web Apps

High Performance JavaScript Web Apps

Pratik Patel

subscription
Thumbnail for: WebVR - democracy in Virtual Reality

WebVR - democracy in Virtual Reality

Marcin Lichwala

subscription
Thumbnail for: Social Coding - tools and techniques

Social Coding - tools and techniques

Maciej Pleśnar

subscription
Thumbnail for: Why software developers should care about deployment and monitoring

Why software developers should care about deployment and monitoring

Michał Kosmulski

subscription
Thumbnail for: Building an Asynchronous Reactive NoSQL SDK with RxJava

Building an Asynchronous Reactive NoSQL SDK with RxJava

Simon Baslé

subscription
Thumbnail for: OnConnectionLost: The life of an offline web application

OnConnectionLost: The life of an offline web application

Stefanie Grewenig , Johannes Thönes

subscription
Thumbnail for: Deploying Microservice Architectures with Spring Cloud on Cloud Foundry

Deploying Microservice Architectures with Spring Cloud on Cloud Foundry

Pieter Humphrey

subscription
Thumbnail for: Agile Development Meets Connected Devices - Lessons Learned

Agile Development Meets Connected Devices - Lessons Learned

subscription
Thumbnail for: Ansible to rule them all – o provisioningu i deploymencie aplikacji Java

Ansible to rule them all – o provisioningu i deploymencie aplikacji Java

Wojciech Podgorski , Rafal Piotrowski

subscription
Thumbnail for: You're an Architect...Now What?

You're an Architect...Now What?

Nathaniel Schutta

subscription
Thumbnail for: Deep dive into Reactive Java

Deep dive into Reactive Java

Tomasz Kowalczewski

subscription
Thumbnail for: Nashorn, what is the whole buzz about

Nashorn, what is the whole buzz about

Michal Gruca

subscription
Thumbnail for: Things about microservices you wish you never knew

Things about microservices you wish you never knew

Marek Ko-w

subscription
Thumbnail for: "Bootiful" Microservices with Spring Cloud

"Bootiful" Microservices with Spring Cloud

Josh Long

subscription
Thumbnail for: Refactoring meets big money

Refactoring meets big money

Michal Gruca

subscription
Thumbnail for: Security Platform as a Service with Docker and Weave

Security Platform as a Service with Docker and Weave

David Pollak

subscription
Thumbnail for: Clean Architecture - how to improve your system architecture

Clean Architecture - how to improve your system architecture

Andrzej Bednarz

subscription
Thumbnail for: Principles Of Microservices

Principles Of Microservices

Sam Newman

subscription
Thumbnail for: Painfree Object-Document Mapping for MongoDB

Painfree Object-Document Mapping for MongoDB

Philipp Krenn

subscription
Thumbnail for: Reviewing Architectures

Reviewing Architectures

Nathaniel Schutta

subscription
Thumbnail for: Unlocking the magic of monads in Java 8

Unlocking the magic of monads in Java 8

OLEG ŠELAJEV

subscription
Thumbnail for: Kill the mutants, test your tests

Kill the mutants, test your tests

Roy van Rijn

subscription
Thumbnail for: Vaadin Designer, the visual design tool for modern web apps

Vaadin Designer, the visual design tool for modern web apps

Maciej Przepióra

subscription
Thumbnail for: My running shoes - Continuous Delivery

My running shoes - Continuous Delivery

Grzegorz Krumpholz

free
Thumbnail for: Get Past the Syntax, The Real Scare is in the Semantics

Get Past the Syntax, The Real Scare is in the Semantics

Venkat Subramaniam

free
Thumbnail for: Coding Culture

Coding Culture

Sven Peters

free
Thumbnail for: Software architecture as code

Software architecture as code

Simon Brown

subscription
Thumbnail for: Flavors of Concurrency in Java

Flavors of Concurrency in Java

OLEG ŠELAJEV

free
Thumbnail for: Modern Web Architecture

Modern Web Architecture

Ted Neward

subscription
Thumbnail for: 10 NoSQL databases you have to know

10 NoSQL databases you have to know

Tom Bujok

subscription
Thumbnail for: What's New in WildFly 9

What's New in WildFly 9

Tomasz Adamski

subscription