SlideShare una empresa de Scribd logo
1 de 76
Descargar para leer sin conexión
The Kotlin
Programming Language


             Svetlana Isakova
What? Who? Why?
   A modern language
       Statically typed
       Object-oriented
       General-purpose

   Compiler
       JVM byte code
       JavaScript (not GWT)
                               2
What? Who? Why?
   A modern language
       Statically typed
       Object-oriented
       General-purpose

   Developed by JetBrains
       Open source
       Intended for industrial use
                                      3
Dynamic vs static typing

   Dynamically typed languages
       Easier to learn
       Easier to write small programs

   Statically typed languages
       Programs run much faster
       More powerful IDE
       Easier to support huge projects

                                          4
Scala as a candidate

   Goal
       statically typed
       JVM-targeted
       concise language

   Scala
       too complicated
       too implicit
       too difficult to create a good IDE
                                             5
Era of new industrial languages

   Ceylon   Red Hat / Jboss    (April 2011)
   Scala    Typesafe           (May 2011)
   Kotlin   JetBrains          (July 2011)
   xTend    Eclipse / itemis   (November 2011)




                                                  6
Kotlin “Hello, world”
 fun main(args : Array<String>) {
     Greeter().greet()
 }


 class Greeter(name : String = "world") {
     val greeting = "Hello, $name!"
     fun greet() {
         println(greeting)
     }
 }                                          7
Problems and Solutions

   Extending Existing APIs
   Handling Absent Values
   Case Analysis
   Multiple Implementation Inheritance
   Collection transformation
   Variance of Generic Types
   Builders

                                          8
Extending Existing APIs



                          9
Regular expression example
   Java
    Pattern p = Pattern.compile("d*");
    Matcher m = p.matcher("123");
    if (m.find())
        String result = m.group();


   Scala
    val r = "d*".r
    val result = r.findFirstIn("123")
                                        10
Scala: implicit conversions
val r = "d*".r
 

trait StringOps { 
  ...
  def r: Regex = new Regex(toString)
}
 

implicit def augmentString(x: String)
                    = new StringOps(x)
                                       11
Scala: implicit conversions
val r = augmentString("d*").r
 

trait StringOps { 
  ...
  def r: Regex = new Regex(toString)
}
 

implicit def augmentString(x: String)
                    = new StringOps(x)
                                       12
Scala: implicit conversions

    val r = "d*".r


   Conversion to 'StringOps' class:
       implicit
       requires a wrapper for each invocation




                                                 13
Functionality extension

   Java
    Collections.sort(list, comparator)


   Scala / Kotlin
    list.sort(comparator)


       'sort' is not declared in java.util.List
       'sort' can be autocompleted
                                                   14
Kotlin: extension functions

   list.sort(comparator)



   fun <T> List<T>.sort(c: Comparator<T>) {
        ...
    }



                                         15
Iterator for String

for (c in “abc”) {
    println(c)
}




 
                      16
Iterator for String

for (c in “abc”) {
    println(c)
}


class StringIterator(val s: String) :
                         Iterator<Char> {
    private var i = 0
    override fun next() = s[i++]
    override fun hasNext() = i < s.size
}
                                       17
Iterator for String

for (c in “abc”) {
    println(c)
}


fun String.iterator() =
                  StringIterator(this)



 
                                    18
Extension functions

   fun <T> List<T>.sort(c:
                   Comparator<T>) {...}
   fun String.iterator() =
                   StringIterator(this)

       non-virtual
       compile to a static function

                                       19
Extending APIs

   Scala
       implicit
       overhead on wrappers

   Kotlin
       functionality cannot be inherited




                                            20
Handling Absent Values



                         21
Java NPE problem

   if (order.getCustomer().       //NPE
          getInfo().getAge() >
              limits.getMinLegalAge()) {
     ... 
    }




                                      22
Java: @Nullable, @NotNull

   @NotNull Customer getCustomer() {
       ...
       return null; //warning, assertion
    }


   @Nullable Customer getCustomer() {...}


    getCustomer().getInfo() //warning, NPE
                                        23
Scala: Option type
   def getCustomer() : Option[Customer] 
    {…}
     

   order.getCustomer match {
       case Some(customer) =>
                    Some(customer.getInfo)
       case None => None
    }
     

                                         24
Scala: Option type
   def getCustomer() : Option[Customer] 
    {…}
     

   order.getCustomer match {
       case Some(customer) =>
                    Some(customer.getInfo)
       case None => None
    }
     

   order.getCustomer.map(_.getInfo)     25
Scala: Option type

   def getCustomer() : Option[Customer] {
      ...
      return null //no error
    }




                                        26
Scala: Option type

   def getCustomer() : Option[Customer] 
   order.getCustomer.map(_.getInfo).
                             map(_.getAge)
     

       extra objects, classes are created:
               Some(customer), Some(info), Some(age)
               classes for function literals
               objects for function literals
         


       inconvenient for debugging                 27
Kotlin: nullable types
   fun getCustomer() : Customer? { 
        ...
        return null
    }


   fun getCustomer() : Customer {
        ...
        return null //error
    }                                  28
Kotlin: nullable types
   fun getCustomer() : Customer? 


   getCustomer().getInfo()   error
     




   getCustomer()?.getInfo()   ok
     




     




                                      29
Kotlin: nullable types
   fun getCustomer() : Customer? 


   getCustomer().getInfo()   error
     




   getCustomer()?.getInfo()   // Info?
     







                                          30
Kotlin: nullable types
   fun getCustomer() : Customer? 



     




   getCustomer()?.getInfo()   // Info?
     







   val customer = getCustomer()
    if (customer != null) 
     




      customer.getInfo()       // Info
                                          31
Call chains

   Java
    order.getCustomer().getInfo().getAge()
     

   Scala
    order.getCustomer.map(_.getInfo).
                             map(_.getAge)
   Kotlin
    order.getCustomer()?.getInfo()?.getAge()
                                         32
“If not null” check
   Scala
    opt foreach { value =>
       operate(value)
    }


   Kotlin
    if (value != null) {
       operate(value)
    }                        33
Java Interop

   Scala
    val files = new File("test").listFiles()
    println(files.length) //NPE


   Kotlin
    val files = File("test").listFiles()
    println(files.length) //doesn't compile
    println(files?.size ?: "no files")
    println(files!!.size) //NPE
                                              34
Kotlin & Java interop

   @NotNull, @Nullable annotations

   “alternative headers”
    package java.util
    public trait List<E> :                   
                   java.util.Collection<E> {
      ...
      fun listIterator() :                   
           java.util.ListIterator<E>
    }                                      35
Handling absent values

   Scala
       overhead



   Kotlin
       inconvenient Java interop without alternative
        headers or annotations



                                                        36
Case Analysis



                37
Scala: pattern matching

 
 sealed trait Expr
 
 case class Num(value: Int) extends Expr
 case class Sum(left: Expr, right: Expr)       
                                 extends Expr


 
    def eval(e: Expr) : Int = 
 
      e match {
●

 

 
         case Num(v) => v
         case Sum(l, r) => eval(l) + eval(r)
      }
            




                                               38
Kotlin: smart casts
 
     trait Expr
 
     class Number(val value: Int) : Expr
     class Sum(val left: Expr, val right: Expr):
                                              Expr
 
     fun eval(e: Expr) : Int {
  
       if (e is Number) 
         return e.value     //smart cast
     
  if (e is Sum) 
 




    return eval(e.left) + eval(e.right)
 
 




       throw IllegalArgumentException(
                          “Unknown expression $e”)
     }                                         39
Kotlin: smart casts

 
     trait Expr
 
     class Num(val value: Int) : Expr
     class Sum(val left: Expr, val right: Expr):
                                              Expr
 
     fun eval(e: Expr) : Int =
  
       when (e) {
 
         is Num ­> e.value 
 
         is Sum ­> eval(e.left) + eval(e.right)
         else ­> throw IllegalArgumentException(
                          “Unknown expression $e”)
       }
                                               40
Multiple
Implementation
Inheritance

                 41
Scala traits

trait A {
  val a = print("A")
}

trait B {
  val b = print("B")
}

class C extends B with A {}

new C() 
                              42
Scala traits

trait A {
  val a = print("A")
}

trait B {
  val b = print("B")
}

class C extends B with A {}

new C() // prints BA
                              43
Scala traits

trait A {
  val a = print("A")
}

trait B extends A {
  val b = print("B")
}

class C extends B with A {}

new C() 
                              44
Scala traits

trait A {
  val a = print("A")
}

trait B extends A {
  val b = print("B")
}

class C extends B with A {}

new C() // prints AB
                              45
Scala traits

trait A {
  def foo()
}

trait B extends A {
  override def foo() = "B"
}

class C extends B {}

new C().foo()  //"B"

                             46
Scala traits
trait A {
  def foo()
}

trait B extends A {
  override def foo() = "B"
}

trait D extends A {
  override def foo() = "D"
}

class C extends B with D {}

new C().foo()  //"D"          47
Kotlin traits

   are more like Java interfaces
   methods can have bodies

   no state
   no linearization




                                    48
Kotlin traits
trait A {
    fun foo() = println("A")
}
 

trait B {
    fun foo() = println("B")
}
 


class C : B, A {} //doesn't compile
    
    
    
    
                                      49
Kotlin traits
trait A {
    fun foo() = println("A")
}
 

trait B {
    fun foo() = println("B")
}
 

class C : B, A {
    override fun foo() {
        super<B>.foo()
        super<A>.foo()
    }
}                              50
Collection
transformation


                 51
Scala collections

   Set(1, 2, 3).map(_ * 0) →  Set(0)


   "abc".map(_.toUpper)   →    "ABC"




                                        52
Scala collections

   Set(1, 2, 3).map(_ * 0) →  Set(0)


   "abc".map(_.toUpper)   →    "ABC"

   trait TraversableLike[+A, +Repr] {
    def map[B, That](f: A => B)(implicit bf: 
          CanBuildFrom[Repr, B, That]): That 
    }

                                           53
Kotlin approach


   'map', 'filter' always return immutable list




                                               54
Kotlin approach


   'map', 'filter' always return immutable list


   hashSet(1, 2, 3).map                
         {(i: Int) ­> i * 0}            
                      → List(0, 0, 0)



                                               55
Kotlin approach


   "abc".map {(c: Char) ­>             
                c.toUpper}   →     "ABC"



   fun String.map(                     
           f : (Char) ­> Char) : String


                                      56
Lazy computations

   Iterators are lazy
   set.iterator().map { … }.filter { … }




                                       57
Lazy computations

   Iterators are lazy
   set.iterator().map { … }.filter { … }


   Iterables are not lazy
   val lazySet = set.lazyMap { … }
    lazySet().filter { … }
    lazySet().filter { … }

                                       58
Variance
of Generic Types


                   59
Scala. Declaration site variance
   class List[+T] { 
      //only produces T
      def head() : T 
      def tail() : List[T]
    }
   class Comparable[­T] { 
      //only consumes T
      def compare(t1 : T, t2: T)
    }                              60
Kotlin. Declaration site variance
   class List<out T> { 
      //only produces T
      fun head() : T 
      fun tail() : List[T]
    }
   class Comparable<in T> { 
      //only consumes T
      fun compare(t1 : T, t2: T)
    }                               61
Use-site variance

fun <T> copy(from: Set<T>,           
                     to: Set<T>) {


  ...
}


copy(numbers, objects)

                                    62
Kotlin. Use-site variance

fun <T> copy(from: List<out T>,      
                      to: List<T>) {


  ...
}


copy(numbers, objects)

                                    63
Kotlin. Use-site variance

fun <T> copy(from: List<out T>,      
                      to: List<T>) {
  from.add(t) //error
  ...
}


copy(numbers, objects) 

                                    64
Scala. Use-site variance


def copy[T](from: Set[_ <: T],       
                       to: Set[T]) {
  ...
}


copy(numbers, objects)

                                    65
Scala. Existential types


def copy[T](from:
     Set[X] forSome { type X <: T }, 
                     to: Set[T]) {
  ...
}


copy(numbers, objects)
                                    66
Builders



           67
Builders in Groovy

html {
   head {
      title "XML encoding with Groovy"
   }

   body {
      h1 "XML encoding with Groovy"
      p "this format can be used as an
                alternative markup to XML"
      /* an element with attributes and text content */
      ahref:'http://groovy.codehaus.org'["Groovy"]
   }
}

                                                      68
Builders in Kotlin

html {
   head {
      title { + "XML encoding with Kotlin" }
   }

   body {
      h1 { + "XML encoding with Kotlin" }
      p { + "this format this format is now type­safe" }

      /* an element with attributes and text content */
      a(href = "http://kotlin.jetbrains.org")["Kotlin"]
   }
}

                                                      69
Builders: Implementation
   Function definition
    fun html(init : HTML.() ­> Unit) : HTML {
        val html = HTML()
        html.init()
        return html
    }
   Usage
    html {
        this.head { ... }
    }                                       70
Builders: Implementation
   Function definition
    fun html(init : HTML.() ­> Unit) : HTML {
        val html = HTML()
        html.init()
        return html
    }
   Usage
    html {
        head { ... }
    }                                       71
Builders: Implementation
class Tag(val name : String) : Element {
   val children = ArrayList<Element>()
   val attributes = HashMap<String, String>()
}
 
class TagWithText(name : String) : Tag(name) {
   fun String.plus() {
       children.add(TextElement(this))
   }
}
 
class HTML() : Tag("html") {
   fun head(init : Head.() ­> Unit) { }
   fun body(init : Body.() ­> Unit) { }
                                             72
}
Builders in Kotlin

html {
   head {
      title { + "XML encoding with Kotlin" }
   }

   body {
      h1 { + "XML encoding with Kotlin" }
      p { + "this format this format is now type­safe" }

      /* an element with attributes and text content */
      a(href = "http://kotlin.jetbrains.org")["Kotlin"]
   }
}

                                                      73
Resources
   Home page
      http://kotlin.jetbrains.org

   Web Demo
      http://kotlin­demo.jetbrains.com

   Blog
      http://blog.jetbrains.com/kotlin

   Forum
      Kotlin at http://devnet.jetbrains.com   74
Interesting links

   Marius Eriksen “Effective Scala”
      http://twitter.github.com/effectivescala/


   Yang Zhang “True Scala complexity”
      http://yz.mit.edu/wp/true­scala­complexity/



   Joshua Suereth D. “Scala in Depth”
      http://www.amazon.com/Scala­Depth­Joshua­Suereth­
      D/dp/1935182706

                                                          75
Thank you!

Más contenido relacionado

La actualidad más candente

A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
Garth Gilmour
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developers
Bartosz Kosarzycki
 
Scala 2013 review
Scala 2013 reviewScala 2013 review
Scala 2013 review
Sagie Davidovich
 

La actualidad más candente (18)

Scala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldScala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 World
 
Scala fundamentals
Scala fundamentalsScala fundamentals
Scala fundamentals
 
Scala - brief intro
Scala - brief introScala - brief intro
Scala - brief intro
 
Scaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with ScalaScaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with Scala
 
Scala categorytheory
Scala categorytheoryScala categorytheory
Scala categorytheory
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developers
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
 
JavaScript Web Development
JavaScript Web DevelopmentJavaScript Web Development
JavaScript Web Development
 
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
Scala traits training by Sanjeev Kumar @Kick Start Scala traits & Play, organ...
 
Kotlin in action
Kotlin in actionKotlin in action
Kotlin in action
 
Scala 2013 review
Scala 2013 reviewScala 2013 review
Scala 2013 review
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
JDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation streamJDays Lviv 2014:  Java8 vs Scala:  Difference points & innovation stream
JDays Lviv 2014: Java8 vs Scala: Difference points & innovation stream
 
Coding in Style
Coding in StyleCoding in Style
Coding in Style
 

Similar a The Kotlin Programming Language, Svetlana Isakova

ADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developersADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developers
Bartosz Kosarzycki
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
wpgreenway
 

Similar a The Kotlin Programming Language, Svetlana Isakova (20)

ADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developersADG Poznań - Kotlin for Android developers
ADG Poznań - Kotlin for Android developers
 
Introduction to scala
Introduction to scalaIntroduction to scala
Introduction to scala
 
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
 
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
 
Programmation fonctionnelle Scala
Programmation fonctionnelle ScalaProgrammation fonctionnelle Scala
Programmation fonctionnelle Scala
 
Scala for curious
Scala for curiousScala for curious
Scala for curious
 
2 kotlin vs. java: what java has that kotlin does not
2  kotlin vs. java: what java has that kotlin does not2  kotlin vs. java: what java has that kotlin does not
2 kotlin vs. java: what java has that kotlin does not
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for Kotlin
 
Introduction to Kotlin
Introduction to KotlinIntroduction to Kotlin
Introduction to Kotlin
 
Scala to assembly
Scala to assemblyScala to assembly
Scala to assembly
 
Scala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian DragosScala at GenevaJUG by Iulian Dragos
Scala at GenevaJUG by Iulian Dragos
 
Kotlin, smarter development for the jvm
Kotlin, smarter development for the jvmKotlin, smarter development for the jvm
Kotlin, smarter development for the jvm
 
Scala in Places API
Scala in Places APIScala in Places API
Scala in Places API
 
1.2 scala basics
1.2 scala basics1.2 scala basics
1.2 scala basics
 
Functional Programming in Scala
Functional Programming in ScalaFunctional Programming in Scala
Functional Programming in Scala
 
Comparing JVM languages
Comparing JVM languagesComparing JVM languages
Comparing JVM languages
 
Type Driven Development @ Confitura 2014
Type Driven Development @ Confitura 2014Type Driven Development @ Confitura 2014
Type Driven Development @ Confitura 2014
 
Scala in a nutshell by venkat
Scala in a nutshell by venkatScala in a nutshell by venkat
Scala in a nutshell by venkat
 
Qcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scalaQcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scala
 
Programming Android Application in Scala.
Programming Android Application in Scala.Programming Android Application in Scala.
Programming Android Application in Scala.
 

Más de Vasil Remeniuk

Spark Intro by Adform Research
Spark Intro by Adform ResearchSpark Intro by Adform Research
Spark Intro by Adform Research
Vasil Remeniuk
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius Valatka
Vasil Remeniuk
 
Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform Research
Vasil Remeniuk
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
Vasil Remeniuk
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
Vasil Remeniuk
 
Spark by Adform Research, Paulius
Spark by Adform Research, PauliusSpark by Adform Research, Paulius
Spark by Adform Research, Paulius
Vasil Remeniuk
 
Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)
Vasil Remeniuk
 
Spark intro by Adform Research
Spark intro by Adform ResearchSpark intro by Adform Research
Spark intro by Adform Research
Vasil Remeniuk
 
SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius Valatka
Vasil Remeniuk
 

Más de Vasil Remeniuk (20)

Product Minsk - РТБ и Программатик
Product Minsk - РТБ и ПрограмматикProduct Minsk - РТБ и Программатик
Product Minsk - РТБ и Программатик
 
Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14Работа с Akka Сluster, @afiskon, scalaby#14
Работа с Akka Сluster, @afiskon, scalaby#14
 
Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14Cake pattern. Presentation by Alex Famin at scalaby#14
Cake pattern. Presentation by Alex Famin at scalaby#14
 
Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3Scala laboratory: Globus. iteration #3
Scala laboratory: Globus. iteration #3
 
Testing in Scala by Adform research
Testing in Scala by Adform researchTesting in Scala by Adform research
Testing in Scala by Adform research
 
Spark Intro by Adform Research
Spark Intro by Adform ResearchSpark Intro by Adform Research
Spark Intro by Adform Research
 
Types by Adform Research, Saulius Valatka
Types by Adform Research, Saulius ValatkaTypes by Adform Research, Saulius Valatka
Types by Adform Research, Saulius Valatka
 
Types by Adform Research
Types by Adform ResearchTypes by Adform Research
Types by Adform Research
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
 
Scalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex GryzlovScalding by Adform Research, Alex Gryzlov
Scalding by Adform Research, Alex Gryzlov
 
Spark by Adform Research, Paulius
Spark by Adform Research, PauliusSpark by Adform Research, Paulius
Spark by Adform Research, Paulius
 
Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)Scala Style by Adform Research (Saulius Valatka)
Scala Style by Adform Research (Saulius Valatka)
 
Spark intro by Adform Research
Spark intro by Adform ResearchSpark intro by Adform Research
Spark intro by Adform Research
 
SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius Valatka
 
Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2Scala laboratory: Globus. iteration #2
Scala laboratory: Globus. iteration #2
 
Testing in Scala. Adform Research
Testing in Scala. Adform ResearchTesting in Scala. Adform Research
Testing in Scala. Adform Research
 
Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1Scala laboratory. Globus. iteration #1
Scala laboratory. Globus. iteration #1
 
Cassandra + Spark + Elk
Cassandra + Spark + ElkCassandra + Spark + Elk
Cassandra + Spark + Elk
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
ETL со Spark
ETL со SparkETL со Spark
ETL со Spark
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

The Kotlin Programming Language, Svetlana Isakova