SlideShare a Scribd company logo
Roberto Casadei
Aggregate Programming in Scala:

a Core Library and Actor-based Platform 

for Distributed Computational Fields
Presentation Summary
Part I — Introduction
Part II — Background: Aggregate Programming
• Spatial computing and space-time programming
• Computational fields and field calculus
• Aggregate programming
Part III — Background: Scala for Library Development
• Advanced features
• Advanced techniques
Part IV — Development of scafi
• Project
• Design
• Implementation
Part V — Evaluation
• Evaluation
• Demo
• Conclusion and contributions
Context
Context: development of complex artificial systems
• Scenarios: pervasive computing, IoT, smart-*
• Characteristics: large-scale, complex dynamics, situatedness
• Challenges: unpredictability, scalability, robustness, …
Inadequacy of traditional approaches
• Centralisations, open-loop, fully bottom-up, device-centric …
Requirements
• Decentralised design
• Self-adaptativeness
• Balance of top-down and bottom-up problem solving
Introduction
Spatial Computing
Space-oriented computation — Thematic areas:
A. Intensive computing
B. Computation embedded in space
C. Space computation
Computing “somewhere” [Duckham13]
• Location-related information
• Spatial constraints to communication
Space-time programming [PTRSL-15]
• Computation expressed in terms of properties 

of the physical time and space in which it occurs
• Spatial abstractions
Discrete system vs. continuous space-time
The Computational Field CalculusComputing with fields
Local vs Global viewpoint
Globally, input fields are manipulated and produce output
Locally, nodes compute a “program” to globally achieve t
source destination
gradient distancegradient
<=
+
dilate
width
37
10
Mirko Viroli (Universit`a di Bologna) ISAC10 – SpatialComputing a.a.
Computational fields
• Mapping space-time to computational objects


Field calculus [ESOCC-13]
• Basis set of operators
• Minimal expressive model
• Space-time universal


Higher-order field calculus [SIP-15]
• First-class distributed functions
• Code mobility
Aggregate Programming [IEEEComp-15]
Programming the collective behaviour of aggregates
Viewpoints
• Local viewpoint (device-centric view)
• Global viewpoint (aggregate view)
Global-to-local mapping
• The code running on each device is generated from the aggregate-level
specification
Prominent approach founded on field calculus and self-org patterns
Composable self-organisation
• Self-stabilisation
• Building blocks for resilient coordination
Aggregate Programming Stack
Picture
from [IEEEComp-15]
Aggregate Programming Toolchain
State-of-art: Protelis + Alchemist
• External DSL
• Focus on simulation














Technological gap: there is no aggregate programming framework
aimed at the construction of real-world applications integrated in a
mainstream language
➡ scafi (scala with computational fields)
• Initial design and logic of the field calculus interpreter by prof. Viroli
Towards a tool-chain for aggregate computing
Field Calculus
Protelis
Xtext parsing
Static analysis Interpreter
Alchemist
Platforms
Formal
foundation
Programming
Language
Language
tools
Simulation
Execution
Properties
Proto Lang
Proto Sim
Libraries
Mirko Viroli (UNIBO) Aggregate Programming for VLS Ubicomp VLSUbicomp 2015
The Scala programming language
Scala as general-purpose, multi-paradigm JVM language
• Java integration
• Smooth integration of OOP and FP
• Expressive type system (with type inference)
Scala in the real world
• Increasing adoption in the industry
• Used by: Twitter, Amazon, LinkedIn, Netflix, Coursera, …
• Killer apps: Akka, Apache Spark, Play…
Scala for Library Development — Features
• Typical FP features
• First-class functions, lambdas, closures, HOFs, laziness, …
• Traits and mix-in composition
• Advanced typing
• Self-types, abstract types, …
• Generic programming support
• Implicit system
• Syntactic sugar
Scala for Library Development — Techniques
• “Pimp-my-library” pattern
• Type classes
• Components and dependency injection
• Cake pattern
• Family polymorphism
• Fluent API / Internal DSL development
context("Collections") {

describe("properties on lists") {

List(1, 2, 2, 3, 3, 3) should contain inOrderOnly (1, 2, 3)

List(1, 2, 3) should contain theSameElementsInOrderAs TreeSet(3, 2, 1)

List("a","b","c") should (contain oneOf("b","d")

and not contain value (7))

List(1, 2, 3) shouldBe sorted

List(1, 2, 3) should have size 3

}

}
scafi: Requirements and Goals
Scala-based framework for aggregate programming
• Project consolidation
• Version control, project automation
• Unit and functional tests
• Internal DSL and related VM for field calculus
• Correct, complete, reasonably performant
• Reuse of Scala typing
• Aggregate functions
• Aggregate programming platform
• Distributed
• Code mobility
• Non-functional requirements
• Ease of use
• Flexibility
scafi: Problem Analysis and Abstraction gap
DSL — Issues
• Implementation of field calculus constructs as method calls
• Integration with the Scala type system
Distributed platform — Issues
• Fault-tolerance
• Naming
• Concurrency
• Communication
• Synchronisation
scafi: Design
Language
trait Language { self: Core =>



trait Constructs {

def nbr[A](expr: => A): A

def rep[A](init: A)

(fun: (A) => A): A

def branch[A](cond: => Boolean)

(th: => A)

(el: => A): A

def foldhood[A](init: => A)

(aggr: (A,A)=>A)

(expr: => A): A

def aggregate[A](f: => A): A


def sense[A](name: LSNS): A

def nbrvar[A](name: NSNS): A
def mid(): ID

def neighbour(): Option[ID]

}


}
trait MyLib { self: Constructs with Builtins =>
def nbrRange: Double = nbrvar[Double](NBR_RANGE_NAME)



def G[V: OrderingFoldable](src: Boolean, field: V, 

acc: V => V, metric: => Double): V = 

rep( (Double.MaxValue, field) ){

dv => mux(src) { (0.0, field) } {

minHoodPlus { 

val (d, v) = nbr { (dv._1, dv._2) }

(d + metric, acc(v)) }

}

}._2



def distTo(source:Boolean): Double = 

G[Double](source,0, _ + nbrRange, nbrRange)



def broadcast[V: OrderingFoldable](src:Boolean, field: V): V =

G[V](src,field, x=>x , nbrRange)



def distBetween(src:Boolean, target:Boolean): Double =

broadcast(src, distanceTo(target))



def channel(src:Boolean, target:Boolean, width:Double): Boolean =

distTo(src) + distTo(target) <= distBetween(src,target) + width

}
Channel and self-stabilisation
scafi: three points on implementation
Component-based design
• Implemented via traits and family polymorphism
Actor-based distributed platform
• Akka (core + remoting)
• Composition of reactive behaviour 

+ trait stacking
Code mobility (proof of concept)
• Missing classes detected on message deserialisation
trait ComputationDeviceActor
extends BaseDeviceActor

with BasicActorBehavior

with SensingBehavior

with SensorManagementBehavior

with ActuatorManagementBehavior

with BaseNbrManagementBehavior { … }
Example: p2p, ad-hoc net


// STEP 1: CHOOSE INCARNATION

import it.unibo.scafi.incarnations.{ BasicActorP2P => Platform }



// STEP 2: DEFINE AGGREGATE PROGRAM SCHEMA

class Demo_AggregateProgram extends Platform.AggregateProgram {

override def main(): Any = foldhood(0){_ + _}(1)

}



// STEP 3: DEFINE MAIN PROGRAM

object Demo_MainProgram extends Platform.CmdLineMain

1) Demo_MainProgram -h 127.0.0.1 -p 9000 

-e 1:2,4,5;2;3 --subsystems 127.0.0.1:9500:4:5

--program “demos.Demo_AggregateProgram”
2) Demo_MainProgram -h 127.0.0.1 -p 9500

-e 4;5:4

--program “demos.Demo_AggregateProgram”
Example: server-based, mobile spatial net (i)
import it.unibo.scafi.distrib.actor.server.{SpatialPlatform => SpatialServerBasedActorPlatform}

import it.unibo.scafi.incarnations.BasicAbstractActorIncarnation

import it.unibo.scafi.space.{Point2D, BasicSpatialAbstraction}



object Demo3_Platform extends BasicAbstractActorIncarnation

with SpatialServerBasedActorPlatform

with BasicSpatialAbstraction with Serializable {

override val LocationSensorName: String = "LOCATION_SENSOR"

override type P = Point2D



override def buildNewSpace[E](elems: Iterable[(E,P)]): SPACE[E] =

new Basic3DSpace(elems.toMap) { override val proximityThreshold = 1.1 }

}



// STEP 2: DEFINE AGGREGATE PROGRAM SCHEMA

class Demo3_AggregateProgram extends Demo3_Platform.AggregateProgram {

def hopGradient(source: Boolean): Double = {

rep(Double.PositiveInfinity){

hops => { mux(source) { 0.0 } { 1+minHood(nbr { hops }) } }

}

}

def main() = hopGradient(sense("source"))

}
Example: server-based, mobile spatial net (ii)
// STEP 3: DEFINE MAIN PROGRAMS

object Demo3_ServerMain extends Demo3_Platform.ServerCmdLineMain {

override def refineSettings(s: Demo3_Platform.Settings) = {

s.copy(profile = s.profile.copy(

serverGuiActorProps = tm => Some(ServerGUIActor.props(Demo3_Platform, tm))

))

}

}
object Demo4_MainProgram extends Demo3_Platform.CmdLineMain {

override def refineSettings(s: Demo3_Platform.Settings) = {

s.copy(profile = s.profile.copy(

devGuiActorProps = ref => Some(DevGUIActor.props(Demo3_Platform, ref))

))

}



override def onDeviceStarted(dm: Demo3_Platform.DeviceManager,

sys: Demo3_Platform.SystemFacade) = {

dm.addSensorValue(Demo3_Platform.LocationSensorName, 

Point2D(dm.selfId%5,(dm.selfId/5.0).floor))

dm.addSensorValue("source", dm.selfId==4)

dm.start

}

}
Example: server-based, mobile spatial net (iii)
Evaluation
Project consolidation
Field calculus support
Complete
Correct
Higher-order FC with first-class distributed functions
Distributed platform
Flexibility, extension points
Predefined profiles
API
Usability, ease of use
Basic spatial computing support
Code mobility
Conclusion
Key goals have been achieved
Of course, there is still room for improvement
• General refactoring
• Long-run implications of the component-based design
• Code mobility — from PoC to sound implementation
• Serialisation issues related to inner classes; closure cleaning; …
• Actor-based platform testing
• Documentation
Related activities
• scafi on Alchemist
• scafi on Android
• scafi on the cloud
References
[IEEEComp-15] Jacob Beal, Danilo Pianini, and Mirko Viroli. Aggregate Programming
for the Internet of Things. IEEE Computer, 48(9):22–30, 2015
[Duckham13]  Matt Duckham. Decentralized Spatial Computing - Foundations of
Geosensor Networks. Springer, 2013.
[PTRSL-15]  Jacob Beal and Mirko Viroli. Space–Time Programming. Philosophical
Transactions of the Royal Society of London A: Mathematical, Physical and Engineering
Sciences, 373(2046), 2015.
[ESOCC-13]  Mirko Viroli, Ferruccio Damiani, and Jacob Beal. A calculus of
computational fields. In Carlos Canal and Massimo Villari, editors, ESOCC
Workshops, volume 393 of Communications in Computer and Information Science,
pages 114–128. Springer, 2013.
[SIP-15]  Ferruccio Damiani, Mirko Viroli, Danilo Pianini, and Jacob Beal. Code mobil-
ity meets self-organisation: A higher-order calculus of computational fields. In
Formal Techniques for Distributed Objects, Components, and Systems, volume 9039 of
Lecture Notes in Computer Science, pages 113–128. Springer International Publishing,
2015.

More Related Content

What's hot

20160520 what youneedtoknowaboutlambdas
20160520 what youneedtoknowaboutlambdas20160520 what youneedtoknowaboutlambdas
20160520 what youneedtoknowaboutlambdas
shinolajla
 
Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)
Omar Abdelhafith
 
Oscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simpleOscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simple
Martin Odersky
 
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Ruslan Shevchenko
 
Monadic genetic kernels in Scala
Monadic genetic kernels in ScalaMonadic genetic kernels in Scala
Monadic genetic kernels in Scala
Patrick Nicolas
 
Java 8
Java 8Java 8
Java 8
vilniusjug
 
Devoxx
DevoxxDevoxx
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky
Typesafe
 
Type Classes in Scala and Haskell
Type Classes in Scala and HaskellType Classes in Scala and Haskell
Type Classes in Scala and Haskell
Hermann Hueck
 
Knolx session
Knolx sessionKnolx session
Knolx session
Knoldus Inc.
 
Functional Programming Patterns for the Pragmatic Programmer
Functional Programming Patterns for the Pragmatic ProgrammerFunctional Programming Patterns for the Pragmatic Programmer
Functional Programming Patterns for the Pragmatic Programmer
Raúl Raja Martínez
 
Scala introduction
Scala introductionScala introduction
Scala introduction
vito jeng
 
Python Programming - IX. On Randomness
Python Programming - IX. On RandomnessPython Programming - IX. On Randomness
Python Programming - IX. On RandomnessRanel Padon
 
Kotlin
KotlinKotlin
Python Programming - VII. Customizing Classes and Operator Overloading
Python Programming - VII. Customizing Classes and Operator OverloadingPython Programming - VII. Customizing Classes and Operator Overloading
Python Programming - VII. Customizing Classes and Operator OverloadingRanel Padon
 
Functional Programming With Scala
Functional Programming With ScalaFunctional Programming With Scala
Functional Programming With Scala
Knoldus Inc.
 
Functional programming in scala
Functional programming in scalaFunctional programming in scala
Functional programming in scalaStratio
 
Introduction to Functional Programming in JavaScript
Introduction to Functional Programming in JavaScriptIntroduction to Functional Programming in JavaScript
Introduction to Functional Programming in JavaScript
tmont
 
Advance Scala - Oleg Mürk
Advance Scala - Oleg MürkAdvance Scala - Oleg Mürk
Advance Scala - Oleg Mürk
Planet OS
 

What's hot (20)

20160520 what youneedtoknowaboutlambdas
20160520 what youneedtoknowaboutlambdas20160520 what youneedtoknowaboutlambdas
20160520 what youneedtoknowaboutlambdas
 
Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)Introduction to functional programming (In Arabic)
Introduction to functional programming (In Arabic)
 
Oscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simpleOscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simple
 
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
Scala-Gopher: CSP-style programming techniques with idiomatic Scala.
 
Monadic genetic kernels in Scala
Monadic genetic kernels in ScalaMonadic genetic kernels in Scala
Monadic genetic kernels in Scala
 
Java 8
Java 8Java 8
Java 8
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Devoxx
DevoxxDevoxx
Devoxx
 
ScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin OderskyScalaDays 2013 Keynote Speech by Martin Odersky
ScalaDays 2013 Keynote Speech by Martin Odersky
 
Type Classes in Scala and Haskell
Type Classes in Scala and HaskellType Classes in Scala and Haskell
Type Classes in Scala and Haskell
 
Knolx session
Knolx sessionKnolx session
Knolx session
 
Functional Programming Patterns for the Pragmatic Programmer
Functional Programming Patterns for the Pragmatic ProgrammerFunctional Programming Patterns for the Pragmatic Programmer
Functional Programming Patterns for the Pragmatic Programmer
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Python Programming - IX. On Randomness
Python Programming - IX. On RandomnessPython Programming - IX. On Randomness
Python Programming - IX. On Randomness
 
Kotlin
KotlinKotlin
Kotlin
 
Python Programming - VII. Customizing Classes and Operator Overloading
Python Programming - VII. Customizing Classes and Operator OverloadingPython Programming - VII. Customizing Classes and Operator Overloading
Python Programming - VII. Customizing Classes and Operator Overloading
 
Functional Programming With Scala
Functional Programming With ScalaFunctional Programming With Scala
Functional Programming With Scala
 
Functional programming in scala
Functional programming in scalaFunctional programming in scala
Functional programming in scala
 
Introduction to Functional Programming in JavaScript
Introduction to Functional Programming in JavaScriptIntroduction to Functional Programming in JavaScript
Introduction to Functional Programming in JavaScript
 
Advance Scala - Oleg Mürk
Advance Scala - Oleg MürkAdvance Scala - Oleg Mürk
Advance Scala - Oleg Mürk
 

Viewers also liked

Protect Your WordPress From The Inside Out
Protect Your WordPress From The Inside OutProtect Your WordPress From The Inside Out
Protect Your WordPress From The Inside Out
SiteGround.com
 
spatialNET Tutorial - Object Creation_v0.1
spatialNET Tutorial - Object Creation_v0.1spatialNET Tutorial - Object Creation_v0.1
spatialNET Tutorial - Object Creation_v0.1Riyaz Kallumkal EIT, PMP
 
Effective unit testing
Effective unit testingEffective unit testing
Effective unit testing
Roberto Casadei
 
On Execution Platforms for Large-Scale Aggregate Computing
On Execution Platforms for Large-Scale Aggregate ComputingOn Execution Platforms for Large-Scale Aggregate Computing
On Execution Platforms for Large-Scale Aggregate Computing
Roberto Casadei
 
Haskell
HaskellHaskell
Towards Aggregate Programming in Scala
Towards Aggregate Programming in ScalaTowards Aggregate Programming in Scala
Towards Aggregate Programming in Scala
Roberto Casadei
 
Programming in Scala: Notes
Programming in Scala: NotesProgramming in Scala: Notes
Programming in Scala: Notes
Roberto Casadei
 
Programming Actor-based Collective Adaptive Systems
Programming Actor-based Collective Adaptive SystemsProgramming Actor-based Collective Adaptive Systems
Programming Actor-based Collective Adaptive Systems
Roberto Casadei
 
Scaling out logistic regression with Spark
Scaling out logistic regression with SparkScaling out logistic regression with Spark
Scaling out logistic regression with Spark
Barak Gitsis
 

Viewers also liked (9)

Protect Your WordPress From The Inside Out
Protect Your WordPress From The Inside OutProtect Your WordPress From The Inside Out
Protect Your WordPress From The Inside Out
 
spatialNET Tutorial - Object Creation_v0.1
spatialNET Tutorial - Object Creation_v0.1spatialNET Tutorial - Object Creation_v0.1
spatialNET Tutorial - Object Creation_v0.1
 
Effective unit testing
Effective unit testingEffective unit testing
Effective unit testing
 
On Execution Platforms for Large-Scale Aggregate Computing
On Execution Platforms for Large-Scale Aggregate ComputingOn Execution Platforms for Large-Scale Aggregate Computing
On Execution Platforms for Large-Scale Aggregate Computing
 
Haskell
HaskellHaskell
Haskell
 
Towards Aggregate Programming in Scala
Towards Aggregate Programming in ScalaTowards Aggregate Programming in Scala
Towards Aggregate Programming in Scala
 
Programming in Scala: Notes
Programming in Scala: NotesProgramming in Scala: Notes
Programming in Scala: Notes
 
Programming Actor-based Collective Adaptive Systems
Programming Actor-based Collective Adaptive SystemsProgramming Actor-based Collective Adaptive Systems
Programming Actor-based Collective Adaptive Systems
 
Scaling out logistic regression with Spark
Scaling out logistic regression with SparkScaling out logistic regression with Spark
Scaling out logistic regression with Spark
 

Similar to Aggregate Programming in Scala

Java1 in mumbai
Java1 in mumbaiJava1 in mumbai
Java1 in mumbai
vibrantuser
 
Cassandra Summit 2014: Apache Spark - The SDK for All Big Data Platforms
Cassandra Summit 2014: Apache Spark - The SDK for All Big Data PlatformsCassandra Summit 2014: Apache Spark - The SDK for All Big Data Platforms
Cassandra Summit 2014: Apache Spark - The SDK for All Big Data Platforms
DataStax Academy
 
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
Srijan Technologies
 
C++ Windows Forms L01 - Intro
C++ Windows Forms L01 - IntroC++ Windows Forms L01 - Intro
C++ Windows Forms L01 - Intro
Mohammad Shaker
 
Apache Spark™ + IBM Watson + Twitter DataPalooza SF 2015
Apache Spark™ + IBM Watson + Twitter DataPalooza SF 2015Apache Spark™ + IBM Watson + Twitter DataPalooza SF 2015
Apache Spark™ + IBM Watson + Twitter DataPalooza SF 2015
Mike Broberg
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and Xitrum
Ngoc Dao
 
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
Jose Quesada (hiring)
 
Ph.D. Defense
Ph.D. DefensePh.D. Defense
Ph.D. Defense
Chris Bunch
 
Cluster-as-code. The Many Ways towards Kubernetes
Cluster-as-code. The Many Ways towards KubernetesCluster-as-code. The Many Ways towards Kubernetes
Cluster-as-code. The Many Ways towards Kubernetes
QAware GmbH
 
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
InfluxData
 
SubScript: A Process Algebra extension progress and perspectives
SubScript: A Process Algebra extension progress and perspectivesSubScript: A Process Algebra extension progress and perspectives
SubScript: A Process Algebra extension progress and perspectives
Anatolii Kmetiuk
 
Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)
Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)
Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)
Eric Shupps
 
PyData Boston 2013
PyData Boston 2013PyData Boston 2013
PyData Boston 2013
Travis Oliphant
 
Apache Arrow at DataEngConf Barcelona 2018
Apache Arrow at DataEngConf Barcelona 2018Apache Arrow at DataEngConf Barcelona 2018
Apache Arrow at DataEngConf Barcelona 2018
Wes McKinney
 
Basic info on java intro
Basic info on java introBasic info on java intro
Basic info on java intro
kabirmahlotra
 
Basic info on java intro
Basic info on java introBasic info on java intro
Basic info on java intro
kabirmahlotra
 
Graphql usage
Graphql usageGraphql usage
Graphql usage
Valentin Buryakov
 
Spark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin OderskySpark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin Odersky
Spark Summit
 
Seattle Spark Meetup Mobius CSharp API
Seattle Spark Meetup Mobius CSharp APISeattle Spark Meetup Mobius CSharp API
Seattle Spark Meetup Mobius CSharp API
shareddatamsft
 
GraphQL - The new "Lingua Franca" for API-Development
GraphQL - The new "Lingua Franca" for API-DevelopmentGraphQL - The new "Lingua Franca" for API-Development
GraphQL - The new "Lingua Franca" for API-Development
jexp
 

Similar to Aggregate Programming in Scala (20)

Java1 in mumbai
Java1 in mumbaiJava1 in mumbai
Java1 in mumbai
 
Cassandra Summit 2014: Apache Spark - The SDK for All Big Data Platforms
Cassandra Summit 2014: Apache Spark - The SDK for All Big Data PlatformsCassandra Summit 2014: Apache Spark - The SDK for All Big Data Platforms
Cassandra Summit 2014: Apache Spark - The SDK for All Big Data Platforms
 
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
[Srijan Wednesday Webinars] How to Build a Cloud Native Platform for Enterpri...
 
C++ Windows Forms L01 - Intro
C++ Windows Forms L01 - IntroC++ Windows Forms L01 - Intro
C++ Windows Forms L01 - Intro
 
Apache Spark™ + IBM Watson + Twitter DataPalooza SF 2015
Apache Spark™ + IBM Watson + Twitter DataPalooza SF 2015Apache Spark™ + IBM Watson + Twitter DataPalooza SF 2015
Apache Spark™ + IBM Watson + Twitter DataPalooza SF 2015
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and Xitrum
 
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and ...
 
Ph.D. Defense
Ph.D. DefensePh.D. Defense
Ph.D. Defense
 
Cluster-as-code. The Many Ways towards Kubernetes
Cluster-as-code. The Many Ways towards KubernetesCluster-as-code. The Many Ways towards Kubernetes
Cluster-as-code. The Many Ways towards Kubernetes
 
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
Michael Hall [InfluxData] | Become an InfluxDB Pro in 20 Minutes | InfluxDays...
 
SubScript: A Process Algebra extension progress and perspectives
SubScript: A Process Algebra extension progress and perspectivesSubScript: A Process Algebra extension progress and perspectives
SubScript: A Process Algebra extension progress and perspectives
 
Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)
Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)
Developing SharePoint Framework Solutions for the Enterprise (SPC 2019)
 
PyData Boston 2013
PyData Boston 2013PyData Boston 2013
PyData Boston 2013
 
Apache Arrow at DataEngConf Barcelona 2018
Apache Arrow at DataEngConf Barcelona 2018Apache Arrow at DataEngConf Barcelona 2018
Apache Arrow at DataEngConf Barcelona 2018
 
Basic info on java intro
Basic info on java introBasic info on java intro
Basic info on java intro
 
Basic info on java intro
Basic info on java introBasic info on java intro
Basic info on java intro
 
Graphql usage
Graphql usageGraphql usage
Graphql usage
 
Spark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin OderskySpark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin Odersky
 
Seattle Spark Meetup Mobius CSharp API
Seattle Spark Meetup Mobius CSharp APISeattle Spark Meetup Mobius CSharp API
Seattle Spark Meetup Mobius CSharp API
 
GraphQL - The new "Lingua Franca" for API-Development
GraphQL - The new "Lingua Franca" for API-DevelopmentGraphQL - The new "Lingua Franca" for API-Development
GraphQL - The new "Lingua Franca" for API-Development
 

More from Roberto Casadei

Programming (and Learning) Self-Adaptive & Self-Organising Behaviour with Sca...
Programming (and Learning) Self-Adaptive & Self-Organising Behaviour with Sca...Programming (and Learning) Self-Adaptive & Self-Organising Behaviour with Sca...
Programming (and Learning) Self-Adaptive & Self-Organising Behaviour with Sca...
Roberto Casadei
 
A Presentation of My Research Activity
A Presentation of My Research ActivityA Presentation of My Research Activity
A Presentation of My Research Activity
Roberto Casadei
 
Self-Organisation Programming: a Functional Reactive Macro Approach (FRASP) [...
Self-Organisation Programming: a Functional Reactive Macro Approach (FRASP) [...Self-Organisation Programming: a Functional Reactive Macro Approach (FRASP) [...
Self-Organisation Programming: a Functional Reactive Macro Approach (FRASP) [...
Roberto Casadei
 
Programming Distributed Collective Processes for Dynamic Ensembles and Collec...
Programming Distributed Collective Processes for Dynamic Ensembles and Collec...Programming Distributed Collective Processes for Dynamic Ensembles and Collec...
Programming Distributed Collective Processes for Dynamic Ensembles and Collec...
Roberto Casadei
 
Towards Automated Engineering for Collective Adaptive Systems: Vision and Res...
Towards Automated Engineering for Collective Adaptive Systems: Vision and Res...Towards Automated Engineering for Collective Adaptive Systems: Vision and Res...
Towards Automated Engineering for Collective Adaptive Systems: Vision and Res...
Roberto Casadei
 
Aggregate Computing Research: an Overview
Aggregate Computing Research: an OverviewAggregate Computing Research: an Overview
Aggregate Computing Research: an Overview
Roberto Casadei
 
Introduction to the 1st DISCOLI workshop on distributed collective intelligence
Introduction to the 1st DISCOLI workshop on distributed collective intelligenceIntroduction to the 1st DISCOLI workshop on distributed collective intelligence
Introduction to the 1st DISCOLI workshop on distributed collective intelligence
Roberto Casadei
 
Digital Twins, Virtual Devices, and Augmentations for Self-Organising Cyber-P...
Digital Twins, Virtual Devices, and Augmentations for Self-Organising Cyber-P...Digital Twins, Virtual Devices, and Augmentations for Self-Organising Cyber-P...
Digital Twins, Virtual Devices, and Augmentations for Self-Organising Cyber-P...
Roberto Casadei
 
FScaFi: A Core Calculus for Collective Adaptive Systems Programming
FScaFi: A Core Calculus for Collective Adaptive Systems ProgrammingFScaFi: A Core Calculus for Collective Adaptive Systems Programming
FScaFi: A Core Calculus for Collective Adaptive Systems Programming
Roberto Casadei
 
6th eCAS workshop on Engineering Collective Adaptive Systems
6th eCAS workshop on Engineering Collective Adaptive Systems6th eCAS workshop on Engineering Collective Adaptive Systems
6th eCAS workshop on Engineering Collective Adaptive Systems
Roberto Casadei
 
Augmented Collective Digital Twins for Self-Organising Cyber-Physical Systems
Augmented Collective Digital Twins for Self-Organising Cyber-Physical SystemsAugmented Collective Digital Twins for Self-Organising Cyber-Physical Systems
Augmented Collective Digital Twins for Self-Organising Cyber-Physical Systems
Roberto Casadei
 
Tuple-Based Coordination in Large-Scale Situated Systems
Tuple-Based Coordination in Large-Scale Situated SystemsTuple-Based Coordination in Large-Scale Situated Systems
Tuple-Based Coordination in Large-Scale Situated Systems
Roberto Casadei
 
Pulverisation in Cyber-Physical Systems: Engineering the Self-Organising Logi...
Pulverisation in Cyber-Physical Systems: Engineering the Self-Organising Logi...Pulverisation in Cyber-Physical Systems: Engineering the Self-Organising Logi...
Pulverisation in Cyber-Physical Systems: Engineering the Self-Organising Logi...
Roberto Casadei
 
Collective Adaptive Systems as Coordination Media: The Case of Tuples in Spac...
Collective Adaptive Systems as Coordination Media: The Case of Tuples in Spac...Collective Adaptive Systems as Coordination Media: The Case of Tuples in Spac...
Collective Adaptive Systems as Coordination Media: The Case of Tuples in Spac...
Roberto Casadei
 
Testing: an Introduction and Panorama
Testing: an Introduction and PanoramaTesting: an Introduction and Panorama
Testing: an Introduction and Panorama
Roberto Casadei
 
On Context-Orientation in Aggregate Programming
On Context-Orientation in Aggregate ProgrammingOn Context-Orientation in Aggregate Programming
On Context-Orientation in Aggregate Programming
Roberto Casadei
 
Engineering Resilient Collaborative Edge-enabled IoT
Engineering Resilient Collaborative Edge-enabled IoTEngineering Resilient Collaborative Edge-enabled IoT
Engineering Resilient Collaborative Edge-enabled IoT
Roberto Casadei
 
Aggregate Processes in Field Calculus
Aggregate Processes in Field CalculusAggregate Processes in Field Calculus
Aggregate Processes in Field Calculus
Roberto Casadei
 
AWS and Serverless Computing
AWS and Serverless ComputingAWS and Serverless Computing
AWS and Serverless Computing
Roberto Casadei
 
Coordinating Computation at the Edge: a Decentralized, Self-organizing, Spati...
Coordinating Computation at the Edge: a Decentralized, Self-organizing, Spati...Coordinating Computation at the Edge: a Decentralized, Self-organizing, Spati...
Coordinating Computation at the Edge: a Decentralized, Self-organizing, Spati...
Roberto Casadei
 

More from Roberto Casadei (20)

Programming (and Learning) Self-Adaptive & Self-Organising Behaviour with Sca...
Programming (and Learning) Self-Adaptive & Self-Organising Behaviour with Sca...Programming (and Learning) Self-Adaptive & Self-Organising Behaviour with Sca...
Programming (and Learning) Self-Adaptive & Self-Organising Behaviour with Sca...
 
A Presentation of My Research Activity
A Presentation of My Research ActivityA Presentation of My Research Activity
A Presentation of My Research Activity
 
Self-Organisation Programming: a Functional Reactive Macro Approach (FRASP) [...
Self-Organisation Programming: a Functional Reactive Macro Approach (FRASP) [...Self-Organisation Programming: a Functional Reactive Macro Approach (FRASP) [...
Self-Organisation Programming: a Functional Reactive Macro Approach (FRASP) [...
 
Programming Distributed Collective Processes for Dynamic Ensembles and Collec...
Programming Distributed Collective Processes for Dynamic Ensembles and Collec...Programming Distributed Collective Processes for Dynamic Ensembles and Collec...
Programming Distributed Collective Processes for Dynamic Ensembles and Collec...
 
Towards Automated Engineering for Collective Adaptive Systems: Vision and Res...
Towards Automated Engineering for Collective Adaptive Systems: Vision and Res...Towards Automated Engineering for Collective Adaptive Systems: Vision and Res...
Towards Automated Engineering for Collective Adaptive Systems: Vision and Res...
 
Aggregate Computing Research: an Overview
Aggregate Computing Research: an OverviewAggregate Computing Research: an Overview
Aggregate Computing Research: an Overview
 
Introduction to the 1st DISCOLI workshop on distributed collective intelligence
Introduction to the 1st DISCOLI workshop on distributed collective intelligenceIntroduction to the 1st DISCOLI workshop on distributed collective intelligence
Introduction to the 1st DISCOLI workshop on distributed collective intelligence
 
Digital Twins, Virtual Devices, and Augmentations for Self-Organising Cyber-P...
Digital Twins, Virtual Devices, and Augmentations for Self-Organising Cyber-P...Digital Twins, Virtual Devices, and Augmentations for Self-Organising Cyber-P...
Digital Twins, Virtual Devices, and Augmentations for Self-Organising Cyber-P...
 
FScaFi: A Core Calculus for Collective Adaptive Systems Programming
FScaFi: A Core Calculus for Collective Adaptive Systems ProgrammingFScaFi: A Core Calculus for Collective Adaptive Systems Programming
FScaFi: A Core Calculus for Collective Adaptive Systems Programming
 
6th eCAS workshop on Engineering Collective Adaptive Systems
6th eCAS workshop on Engineering Collective Adaptive Systems6th eCAS workshop on Engineering Collective Adaptive Systems
6th eCAS workshop on Engineering Collective Adaptive Systems
 
Augmented Collective Digital Twins for Self-Organising Cyber-Physical Systems
Augmented Collective Digital Twins for Self-Organising Cyber-Physical SystemsAugmented Collective Digital Twins for Self-Organising Cyber-Physical Systems
Augmented Collective Digital Twins for Self-Organising Cyber-Physical Systems
 
Tuple-Based Coordination in Large-Scale Situated Systems
Tuple-Based Coordination in Large-Scale Situated SystemsTuple-Based Coordination in Large-Scale Situated Systems
Tuple-Based Coordination in Large-Scale Situated Systems
 
Pulverisation in Cyber-Physical Systems: Engineering the Self-Organising Logi...
Pulverisation in Cyber-Physical Systems: Engineering the Self-Organising Logi...Pulverisation in Cyber-Physical Systems: Engineering the Self-Organising Logi...
Pulverisation in Cyber-Physical Systems: Engineering the Self-Organising Logi...
 
Collective Adaptive Systems as Coordination Media: The Case of Tuples in Spac...
Collective Adaptive Systems as Coordination Media: The Case of Tuples in Spac...Collective Adaptive Systems as Coordination Media: The Case of Tuples in Spac...
Collective Adaptive Systems as Coordination Media: The Case of Tuples in Spac...
 
Testing: an Introduction and Panorama
Testing: an Introduction and PanoramaTesting: an Introduction and Panorama
Testing: an Introduction and Panorama
 
On Context-Orientation in Aggregate Programming
On Context-Orientation in Aggregate ProgrammingOn Context-Orientation in Aggregate Programming
On Context-Orientation in Aggregate Programming
 
Engineering Resilient Collaborative Edge-enabled IoT
Engineering Resilient Collaborative Edge-enabled IoTEngineering Resilient Collaborative Edge-enabled IoT
Engineering Resilient Collaborative Edge-enabled IoT
 
Aggregate Processes in Field Calculus
Aggregate Processes in Field CalculusAggregate Processes in Field Calculus
Aggregate Processes in Field Calculus
 
AWS and Serverless Computing
AWS and Serverless ComputingAWS and Serverless Computing
AWS and Serverless Computing
 
Coordinating Computation at the Edge: a Decentralized, Self-organizing, Spati...
Coordinating Computation at the Edge: a Decentralized, Self-organizing, Spati...Coordinating Computation at the Edge: a Decentralized, Self-organizing, Spati...
Coordinating Computation at the Edge: a Decentralized, Self-organizing, Spati...
 

Recently uploaded

2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
Boni García
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 

Recently uploaded (20)

2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)APIs for Browser Automation (MoT Meetup 2024)
APIs for Browser Automation (MoT Meetup 2024)
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 

Aggregate Programming in Scala

  • 1. Roberto Casadei Aggregate Programming in Scala:
 a Core Library and Actor-based Platform 
 for Distributed Computational Fields
  • 2. Presentation Summary Part I — Introduction Part II — Background: Aggregate Programming • Spatial computing and space-time programming • Computational fields and field calculus • Aggregate programming Part III — Background: Scala for Library Development • Advanced features • Advanced techniques Part IV — Development of scafi • Project • Design • Implementation Part V — Evaluation • Evaluation • Demo • Conclusion and contributions
  • 4. Context: development of complex artificial systems • Scenarios: pervasive computing, IoT, smart-* • Characteristics: large-scale, complex dynamics, situatedness • Challenges: unpredictability, scalability, robustness, … Inadequacy of traditional approaches • Centralisations, open-loop, fully bottom-up, device-centric … Requirements • Decentralised design • Self-adaptativeness • Balance of top-down and bottom-up problem solving Introduction
  • 5. Spatial Computing Space-oriented computation — Thematic areas: A. Intensive computing B. Computation embedded in space C. Space computation Computing “somewhere” [Duckham13] • Location-related information • Spatial constraints to communication Space-time programming [PTRSL-15] • Computation expressed in terms of properties 
 of the physical time and space in which it occurs • Spatial abstractions Discrete system vs. continuous space-time
  • 6. The Computational Field CalculusComputing with fields Local vs Global viewpoint Globally, input fields are manipulated and produce output Locally, nodes compute a “program” to globally achieve t source destination gradient distancegradient <= + dilate width 37 10 Mirko Viroli (Universit`a di Bologna) ISAC10 – SpatialComputing a.a. Computational fields • Mapping space-time to computational objects 
 Field calculus [ESOCC-13] • Basis set of operators • Minimal expressive model • Space-time universal 
 Higher-order field calculus [SIP-15] • First-class distributed functions • Code mobility
  • 7. Aggregate Programming [IEEEComp-15] Programming the collective behaviour of aggregates Viewpoints • Local viewpoint (device-centric view) • Global viewpoint (aggregate view) Global-to-local mapping • The code running on each device is generated from the aggregate-level specification Prominent approach founded on field calculus and self-org patterns Composable self-organisation • Self-stabilisation • Building blocks for resilient coordination
  • 9. Aggregate Programming Toolchain State-of-art: Protelis + Alchemist • External DSL • Focus on simulation 
 
 
 
 
 
 
 Technological gap: there is no aggregate programming framework aimed at the construction of real-world applications integrated in a mainstream language ➡ scafi (scala with computational fields) • Initial design and logic of the field calculus interpreter by prof. Viroli Towards a tool-chain for aggregate computing Field Calculus Protelis Xtext parsing Static analysis Interpreter Alchemist Platforms Formal foundation Programming Language Language tools Simulation Execution Properties Proto Lang Proto Sim Libraries Mirko Viroli (UNIBO) Aggregate Programming for VLS Ubicomp VLSUbicomp 2015
  • 10. The Scala programming language Scala as general-purpose, multi-paradigm JVM language • Java integration • Smooth integration of OOP and FP • Expressive type system (with type inference) Scala in the real world • Increasing adoption in the industry • Used by: Twitter, Amazon, LinkedIn, Netflix, Coursera, … • Killer apps: Akka, Apache Spark, Play…
  • 11. Scala for Library Development — Features • Typical FP features • First-class functions, lambdas, closures, HOFs, laziness, … • Traits and mix-in composition • Advanced typing • Self-types, abstract types, … • Generic programming support • Implicit system • Syntactic sugar
  • 12. Scala for Library Development — Techniques • “Pimp-my-library” pattern • Type classes • Components and dependency injection • Cake pattern • Family polymorphism • Fluent API / Internal DSL development context("Collections") {
 describe("properties on lists") {
 List(1, 2, 2, 3, 3, 3) should contain inOrderOnly (1, 2, 3)
 List(1, 2, 3) should contain theSameElementsInOrderAs TreeSet(3, 2, 1)
 List("a","b","c") should (contain oneOf("b","d")
 and not contain value (7))
 List(1, 2, 3) shouldBe sorted
 List(1, 2, 3) should have size 3
 }
 }
  • 13. scafi: Requirements and Goals Scala-based framework for aggregate programming • Project consolidation • Version control, project automation • Unit and functional tests • Internal DSL and related VM for field calculus • Correct, complete, reasonably performant • Reuse of Scala typing • Aggregate functions • Aggregate programming platform • Distributed • Code mobility • Non-functional requirements • Ease of use • Flexibility
  • 14. scafi: Problem Analysis and Abstraction gap DSL — Issues • Implementation of field calculus constructs as method calls • Integration with the Scala type system Distributed platform — Issues • Fault-tolerance • Naming • Concurrency • Communication • Synchronisation
  • 16.
  • 17. Language trait Language { self: Core =>
 
 trait Constructs {
 def nbr[A](expr: => A): A
 def rep[A](init: A)
 (fun: (A) => A): A
 def branch[A](cond: => Boolean)
 (th: => A)
 (el: => A): A
 def foldhood[A](init: => A)
 (aggr: (A,A)=>A)
 (expr: => A): A
 def aggregate[A](f: => A): A 
 def sense[A](name: LSNS): A
 def nbrvar[A](name: NSNS): A def mid(): ID
 def neighbour(): Option[ID]
 } 
 } trait MyLib { self: Constructs with Builtins => def nbrRange: Double = nbrvar[Double](NBR_RANGE_NAME)
 
 def G[V: OrderingFoldable](src: Boolean, field: V, 
 acc: V => V, metric: => Double): V = 
 rep( (Double.MaxValue, field) ){
 dv => mux(src) { (0.0, field) } {
 minHoodPlus { 
 val (d, v) = nbr { (dv._1, dv._2) }
 (d + metric, acc(v)) }
 }
 }._2
 
 def distTo(source:Boolean): Double = 
 G[Double](source,0, _ + nbrRange, nbrRange)
 
 def broadcast[V: OrderingFoldable](src:Boolean, field: V): V =
 G[V](src,field, x=>x , nbrRange)
 
 def distBetween(src:Boolean, target:Boolean): Double =
 broadcast(src, distanceTo(target))
 
 def channel(src:Boolean, target:Boolean, width:Double): Boolean =
 distTo(src) + distTo(target) <= distBetween(src,target) + width
 }
  • 19.
  • 20. scafi: three points on implementation Component-based design • Implemented via traits and family polymorphism Actor-based distributed platform • Akka (core + remoting) • Composition of reactive behaviour 
 + trait stacking Code mobility (proof of concept) • Missing classes detected on message deserialisation trait ComputationDeviceActor extends BaseDeviceActor
 with BasicActorBehavior
 with SensingBehavior
 with SensorManagementBehavior
 with ActuatorManagementBehavior
 with BaseNbrManagementBehavior { … }
  • 21. Example: p2p, ad-hoc net 
 // STEP 1: CHOOSE INCARNATION
 import it.unibo.scafi.incarnations.{ BasicActorP2P => Platform }
 
 // STEP 2: DEFINE AGGREGATE PROGRAM SCHEMA
 class Demo_AggregateProgram extends Platform.AggregateProgram {
 override def main(): Any = foldhood(0){_ + _}(1)
 }
 
 // STEP 3: DEFINE MAIN PROGRAM
 object Demo_MainProgram extends Platform.CmdLineMain
 1) Demo_MainProgram -h 127.0.0.1 -p 9000 
 -e 1:2,4,5;2;3 --subsystems 127.0.0.1:9500:4:5
 --program “demos.Demo_AggregateProgram” 2) Demo_MainProgram -h 127.0.0.1 -p 9500
 -e 4;5:4
 --program “demos.Demo_AggregateProgram”
  • 22. Example: server-based, mobile spatial net (i) import it.unibo.scafi.distrib.actor.server.{SpatialPlatform => SpatialServerBasedActorPlatform}
 import it.unibo.scafi.incarnations.BasicAbstractActorIncarnation
 import it.unibo.scafi.space.{Point2D, BasicSpatialAbstraction}
 
 object Demo3_Platform extends BasicAbstractActorIncarnation
 with SpatialServerBasedActorPlatform
 with BasicSpatialAbstraction with Serializable {
 override val LocationSensorName: String = "LOCATION_SENSOR"
 override type P = Point2D
 
 override def buildNewSpace[E](elems: Iterable[(E,P)]): SPACE[E] =
 new Basic3DSpace(elems.toMap) { override val proximityThreshold = 1.1 }
 }
 
 // STEP 2: DEFINE AGGREGATE PROGRAM SCHEMA
 class Demo3_AggregateProgram extends Demo3_Platform.AggregateProgram {
 def hopGradient(source: Boolean): Double = {
 rep(Double.PositiveInfinity){
 hops => { mux(source) { 0.0 } { 1+minHood(nbr { hops }) } }
 }
 }
 def main() = hopGradient(sense("source"))
 }
  • 23. Example: server-based, mobile spatial net (ii) // STEP 3: DEFINE MAIN PROGRAMS
 object Demo3_ServerMain extends Demo3_Platform.ServerCmdLineMain {
 override def refineSettings(s: Demo3_Platform.Settings) = {
 s.copy(profile = s.profile.copy(
 serverGuiActorProps = tm => Some(ServerGUIActor.props(Demo3_Platform, tm))
 ))
 }
 } object Demo4_MainProgram extends Demo3_Platform.CmdLineMain {
 override def refineSettings(s: Demo3_Platform.Settings) = {
 s.copy(profile = s.profile.copy(
 devGuiActorProps = ref => Some(DevGUIActor.props(Demo3_Platform, ref))
 ))
 }
 
 override def onDeviceStarted(dm: Demo3_Platform.DeviceManager,
 sys: Demo3_Platform.SystemFacade) = {
 dm.addSensorValue(Demo3_Platform.LocationSensorName, 
 Point2D(dm.selfId%5,(dm.selfId/5.0).floor))
 dm.addSensorValue("source", dm.selfId==4)
 dm.start
 }
 }
  • 24. Example: server-based, mobile spatial net (iii)
  • 25. Evaluation Project consolidation Field calculus support Complete Correct Higher-order FC with first-class distributed functions Distributed platform Flexibility, extension points Predefined profiles API Usability, ease of use Basic spatial computing support Code mobility
  • 26. Conclusion Key goals have been achieved Of course, there is still room for improvement • General refactoring • Long-run implications of the component-based design • Code mobility — from PoC to sound implementation • Serialisation issues related to inner classes; closure cleaning; … • Actor-based platform testing • Documentation Related activities • scafi on Alchemist • scafi on Android • scafi on the cloud
  • 27. References [IEEEComp-15] Jacob Beal, Danilo Pianini, and Mirko Viroli. Aggregate Programming for the Internet of Things. IEEE Computer, 48(9):22–30, 2015 [Duckham13]  Matt Duckham. Decentralized Spatial Computing - Foundations of Geosensor Networks. Springer, 2013. [PTRSL-15]  Jacob Beal and Mirko Viroli. Space–Time Programming. Philosophical Transactions of the Royal Society of London A: Mathematical, Physical and Engineering Sciences, 373(2046), 2015. [ESOCC-13]  Mirko Viroli, Ferruccio Damiani, and Jacob Beal. A calculus of computational fields. In Carlos Canal and Massimo Villari, editors, ESOCC Workshops, volume 393 of Communications in Computer and Information Science, pages 114–128. Springer, 2013. [SIP-15]  Ferruccio Damiani, Mirko Viroli, Danilo Pianini, and Jacob Beal. Code mobil- ity meets self-organisation: A higher-order calculus of computational fields. In Formal Techniques for Distributed Objects, Components, and Systems, volume 9039 of Lecture Notes in Computer Science, pages 113–128. Springer International Publishing, 2015.