SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
https://github.com/rssh/scala-gopher 
. 
Ruslan Shevchenko <ruslan@shevchenko.kiev.ua> 
@rssh1
https://github.com/rssh/scala-gopher 
• CSP = Communicating Sequential Processes. 
• Tony Hoar. 
• classical paper from 1978 
• book: http://www.usingcsp.com/ (1985) 
• Languages 
• Occam (1983) for specialized hardware [transputers] 
• Go (2007) - got popular: 
• Rob Pike (C, Plan9) 
• in Google
https://github.com/rssh/scala-gopher 
Write (“blocked”) Read (“blocked”) 
Channel (buffered) 
Channel (unbuffered) 
Computation blocks 
are connected 
by channels 
// in INMOS transputers - physically
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
Flow A Flow B
https://github.com/rssh/scala-gopher 
❖ Simple mental model 
❖ Ability to “coordinate” between input/output sinks 
go func(){ 
for { select { 
case x <- inX: 
var y <- inY 
if (x == y) { 
fmt.fprintf(“Bingo!”) 
} 
case q <- inQuit: 
break; 
} }() 
} 
// Go
https://github.com/rssh/scala-gopher 
❖ Simple mental model 
❖ Ability to “coordinate” between import 
go func(){ 
for { select { 
case x <- inX: 
var y <- inY 
if (x == y) { 
fmt.fprintf(“Bingo!”) 
} 
case q <- inQuit: 
break; 
} }() 
} 
waits 
// Go
https://github.com/rssh/scala-gopher
https://github.com/rssh/scala-gopher 
scala-gopher: 
• Not ‘emulation of go in scala’ but 
• ‘CSP constructs in scala-way' 
• Asynchronous 
• build on top of Akka and SIP 22 - async 
// ‘block’ is not block 
// ‘wait’ is not wait
https://github.com/rssh/scala-gopher 
go func(){ 
for { select { 
case x <- inX: 
var y <- inY 
if (x == y) { 
fmt.fprintf(“Bingo!”) 
} 
case q <- inQuit: 
break; 
} }() 
} 
select.forever { 
case x: inX.read => 
val y = inY.read 
if (x == y) { 
Console.println(“Bingo!”) 
} 
case q: inQuit.read => 
currentFlow.exit(()) 
} 
Go Scala
https://github.com/rssh/scala-gopher 
go func(){ 
for { select { 
case x <- inX: 
var y <- inY 
if (x == y) { 
fmt.fprintf(“Bingo!”) 
} 
case q <- inQuit: 
break; 
} }() 
} 
select.forever { 
case x: inX.read => 
val y = inY.read 
if (x == y) { 
Console.println(“Bingo!”) 
} 
case q: inQuit.read => 
currentFlow.exit(()) 
} 
Go Scala 
3 constructions (common combination)
https://github.com/rssh/scala-gopher 
select.forever { 
case x: inX.read => 
val y = inY.read 
if (x == y) { 
Console.println(“Bingo!”) 
} 
case q: inQuit.read => 
currentFlow.exit(()) 
} 
// select.forever: basic construct 
Scala
https://github.com/rssh/scala-gopher 
select.forever { 
case x: String if (x==(inX|1inX2).read) => 
val y = inY.read 
if (x == y) { 
Console.println(“Bingo!”) 
} 
case q: Boolean if (q==inQuit.read) => 
currentFlow.exit(()) 
} 
Scala
https://github.com/rssh/scala-gopher 
Unblocked: 
selector: 
forever: apply(choice: PartialFunction[Any,Unit]): Future[Unit] 
once: apply[T](choice: PartialFunction[Any,T]): Future[T] 
go[T]: Future[T] 
“Blocked”: (must be inside ‘go’ or ‘async’ ): 
forever: foreach(choice: PartialFunction[Any,Unit]): Unit 
once: foreach[T](choice: PartialFunction[Any,T]): T
https://github.com/rssh/scala-gopher 
Inside Partial Function: 
❖ reading from Input[A] and do something 
❖ Channel[A], Future[A], user input 
❖ writing to Output[A] and do something 
❖ Channel[A], user output 
❖ do something on idle. 
“ do something” wrapped in async block, 
so we can ‘block’ there
https://github.com/rssh/scala-gopher 
Input[A]: 
❖ unblocked: 
❖ aread, atake, aforeach 
❖ ‘blocked:’ 
❖ read, take, foreach …. 
❖ composition 
❖ map, filter, zip, or, dup 
❖ construction 
open: ‘wait’ 
closed: throw exception on 
reading after ‘last’ element 
❖ channel, future, collection, own implementation
https://github.com/rssh/scala-gopher 
Output[A]: 
❖ unblocked: 
❖ awrite, awriteAll, 
❖ ‘blocked:’ 
❖ write, writeAll …. 
❖ composition 
❖ — (?) 
❖ construction 
open: ‘wait’ 
closed: throw exception on 
writing element 
❖ channel, actor, own implementation
https://github.com/rssh/scala-gopher 
Channel[A]: 
❖ Input[A] + Output[A] 
❖ garbage-collected. 
❖ gopherApi.makeChannel 
❖ can be buffered
https://github.com/rssh/scala-gopher 
Timeouts: 
val (inReady, inTimeouts) = in.withInputTimeouts(30 seconds) 
for(s <- selector.forever) { 
case a:inReady.read => 
Console.println(s“received ${a}”) 
case t:inTimeouts.read => 
Console.println(“timeout occurred”) 
} 
Input => withInputTimeouts 
Output => withOutputTimeouts
https://github.com/rssh/scala-gopher 
go[T](T :=> Future[T]) 
❖ async + defer/recover 
❖ defer(callback: =>Unit): Unit 
[finally] 
❖ recover(handler: PartialFunction[Throwable,T]):Boolean 
go { 
val source = fetchSource(url) 
val csv = parseCsv(source) 
val svFile = new FileOutputStream(csv.name, append=true) 
defer{ 
val r = recover{ 
case FileNotFoundException => signal(“file not found”) 
} 
if (!r) svFile.close() 
} 
for(s <- csv.data) svFile.print(s) 
} 
[catch]
https://github.com/rssh/scala-gopher 
go[T](T :=> Future[T]) 
go { 
val source = fetchSource(url) 
val csv = parseCsv(source) 
val svFile = new FileOutputStream(csv.name, append=true) 
defer{ 
val r = recover{ 
case FileNotFoundException => signal(“file not found”) 
} 
if (!r) svFile.close() 
} 
for(s <- csv.data) svFile.print(s) 
}
https://github.com/rssh/scala-gopher 
goScope[T](T :=> T) 
goScope { 
val in = new FileInputStream(inf) 
defer { in.close() } 
val out = new FileOutputStream(outf) 
defer{ out.close() } 
out.getChannel().transferFrom(in.getChannel, 
0,Long.MaxValue) 
}
https://github.com/rssh/scala-gopher 
❖ All “essential” functionality of CSP model 
❖ Fully asynchronous implementation 
❖ In normal language, with generic, typing, .. 
❖ …. more: scala is object-oriented.
https://github.com/rssh/scala-gopher 
Reusable block: 
❖ Set of input and output ports. 
❖ Some internal state 
❖ Functionality for signal transformations 
Transputer:
https://github.com/rssh/scala-gopher 
trait Bingo extends SelectTransputer { 
val inX = InPort[Int]() 
val inY = InPort[Int]() 
val out = OutPort[Boolean]() 
loop { 
case x: inX.read => 
val y = inY.read 
Console.println(s"Bingo checker, received ${x}, ${y}”) 
out.write(x==y) 
} 
}
https://github.com/rssh/scala-gopher 
trait Acceptor extends SelectTransputer { 
val inA = InPort[Boolean]() 
@volatile var (nBingos, nPairs) = (0,0) 
loop { 
case x: inA.read => 
Console.println(s"acceptor: ${nPairs} ${nBingos} ${x}") 
if (x) { 
nBingos += 1 
} 
nPairs += 1 
} 
}
https://github.com/rssh/scala-gopher 
val inX = gopherApi.makeChannel[Int]() 
val inY = gopherApi.makeChannel[Int]() 
val bingo = gopherApi.makeTransputer[Bingo] 
val acceptor = gopherApi.makeTransputer[Acceptor] 
bingo.inX connect inX 
bingo.inY connect inY 
bingo.out connect acceptor.inA 
(bingo + acceptor).start()
https://github.com/rssh/scala-gopher 
Transputers 
❖ Like ‘actors’ but works with ports 
❖ We can ‘wait’ inside 
❖ Connected via channels. 
❖ Restartable 
// in remind of INMOS transputers
Select 
select.foreach { 
…………… 
}
Par 
P1 
P2 P3 
P1 + P2 + P3
Replicate 
Mapping 
gopherApi.replicate[X](5)
Replicate 
gopherApi.replicate[X](5).in.distribute(_ % 10) 
Mapping 
Element e from in will be directed to (e%10) instance of X
https://github.com/rssh/scala-gopher 
❖ Select: [handle one transformation] 
❖ Parallel[ transputers are run in parallel] 
❖ Replicated 
❖ [ run in parallel N instances.] 
❖ [ custom logic for port shuffling ] 
Transputer Supervisor => ActorSystem 
Transputers
Implementation
Implementation 
sealed trait Continuated[T] 
case class ContRead[A,T]( callback , input, flow) extends Continuated[T] 
case class ContWrite[A,T]( callback , output, flow) .. 
case class ContSkip[T](callback, flow) … 
case class Done[T]( value , flow) …….. 
case object Never ………. 
// simular to Iteratee
Implementation 
sealed trait Continuated[T] 
case class ContRead[A,T]( callback , input, flow) extends Continuated[T]
Implementation 
sealed trait Continuated[T] 
case class ContRead[A,T]( 
function: ContRead[A,B] => Option[ 
ContRead.In[A] => 
Future[Continuated[T]] 
] , 
input, 
flow) extends Continuated[T]
Implementation 
sealed trait Continuated[T] 
case class ContRead[A,T]( 
function: ContRead[A,B] => Option[ 
ContRead.In[A] => 
Future[Continuated[T]] 
] , 
input, 
flow) extends Continuated[T] 
Value, Skip, Failure 
Read as Protocol: 
(check, if available, read, return next step)
Implementation 
Flow 
Dispatch Actor 
wait in channel read/write 
Flow 
wait in select
scala-gopher 
❖ CSP within scala ecosystem 
❖ Channels complementary to RxStreams 
❖ ‘async rw/async callback’ 
❖ Transducers complementary to Actors 
❖ ‘transform streams/event reactions’ 
❖ Can be used together.
scala-gopher 
❖ https://github.com/rssh/scala-gopher 
❖ Ruslan Shevchenko 
❖ @rssh1 
❖ Questions ?

Contenu connexe

Tendances

LINQ Inside
LINQ InsideLINQ Inside
LINQ Inside
jeffz
 
Javascript engine performance
Javascript engine performanceJavascript engine performance
Javascript engine performance
Duoyi Wu
 

Tendances (20)

The Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemThe Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect System
 
Halogen: Past, Present, and Future
Halogen: Past, Present, and FutureHalogen: Past, Present, and Future
Halogen: Past, Present, and Future
 
Triton and symbolic execution on gdb
Triton and symbolic execution on gdbTriton and symbolic execution on gdb
Triton and symbolic execution on gdb
 
Virtual machine and javascript engine
Virtual machine and javascript engineVirtual machine and javascript engine
Virtual machine and javascript engine
 
Triton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON ChinaTriton and Symbolic execution on GDB@DEF CON China
Triton and Symbolic execution on GDB@DEF CON China
 
An introduction to ROP
An introduction to ROPAn introduction to ROP
An introduction to ROP
 
C# for Java Developers
C# for Java DevelopersC# for Java Developers
C# for Java Developers
 
Redesigning Common Lisp
Redesigning Common LispRedesigning Common Lisp
Redesigning Common Lisp
 
Advance ROP Attacks
Advance ROP AttacksAdvance ROP Attacks
Advance ROP Attacks
 
Rcpp11
Rcpp11Rcpp11
Rcpp11
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
 
Introduction to Rust language programming
Introduction to Rust language programmingIntroduction to Rust language programming
Introduction to Rust language programming
 
LINQ Inside
LINQ InsideLINQ Inside
LINQ Inside
 
Incremental Development with Lisp: Building a Game and a Website
Incremental Development with Lisp: Building a Game and a WebsiteIncremental Development with Lisp: Building a Game and a Website
Incremental Development with Lisp: Building a Game and a Website
 
Go concurrency
Go concurrencyGo concurrency
Go concurrency
 
How Functions Work
How Functions WorkHow Functions Work
How Functions Work
 
A CTF Hackers Toolbox
A CTF Hackers ToolboxA CTF Hackers Toolbox
A CTF Hackers Toolbox
 
Javascript engine performance
Javascript engine performanceJavascript engine performance
Javascript engine performance
 
Modern C++ Lunch and Learn
Modern C++ Lunch and LearnModern C++ Lunch and Learn
Modern C++ Lunch and Learn
 
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
Java/Scala Lab: Анатолий Кметюк - Scala SubScript: Алгебра для реактивного пр...
 

En vedette

Happy birthday to Prof. Yunus - you change foundation
Happy birthday to Prof.  Yunus - you change foundationHappy birthday to Prof.  Yunus - you change foundation
Happy birthday to Prof. Yunus - you change foundation
The Grameen Creative Lab
 
Making first impression in business writing dl
Making first impression in business writing dlMaking first impression in business writing dl
Making first impression in business writing dl
Debbie Lahav
 
Kessan 1708682945115077
Kessan 1708682945115077Kessan 1708682945115077
Kessan 1708682945115077
yoshikawa0521
 
X2 t08 04 inequality techniques (2012)
X2 t08 04 inequality techniques (2012)X2 t08 04 inequality techniques (2012)
X2 t08 04 inequality techniques (2012)
Nigel Simmons
 
Web Security Programming I I
Web  Security  Programming  I IWeb  Security  Programming  I I
Web Security Programming I I
Pavu Jas
 

En vedette (20)

Why scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with thisWhy scala is not my ideal language and what I can do with this
Why scala is not my ideal language and what I can do with this
 
Few simple-type-tricks in scala
Few simple-type-tricks in scalaFew simple-type-tricks in scala
Few simple-type-tricks in scala
 
SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.
 
Happy birthday to Prof. Yunus - you change foundation
Happy birthday to Prof.  Yunus - you change foundationHappy birthday to Prof.  Yunus - you change foundation
Happy birthday to Prof. Yunus - you change foundation
 
D11jl
D11jlD11jl
D11jl
 
The Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKAThe Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKA
 
Oppa (33)
Oppa (33)Oppa (33)
Oppa (33)
 
Making first impression in business writing dl
Making first impression in business writing dlMaking first impression in business writing dl
Making first impression in business writing dl
 
Notating pop music
Notating pop musicNotating pop music
Notating pop music
 
The most incredible shopping malls
The most incredible shopping mallsThe most incredible shopping malls
The most incredible shopping malls
 
Kessan 1708682945115077
Kessan 1708682945115077Kessan 1708682945115077
Kessan 1708682945115077
 
Team nova news c22 and c23 2014
Team nova news c22 and c23 2014Team nova news c22 and c23 2014
Team nova news c22 and c23 2014
 
Palestra cheng nutrition
Palestra cheng nutritionPalestra cheng nutrition
Palestra cheng nutrition
 
Trigical for Trigeminal Neuralgia Treatment
Trigical for Trigeminal Neuralgia TreatmentTrigical for Trigeminal Neuralgia Treatment
Trigical for Trigeminal Neuralgia Treatment
 
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries Limited
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries LimitedKankroli Tyre Plant(KTP), A unit of JK Tyre & Industries Limited
Kankroli Tyre Plant(KTP), A unit of JK Tyre & Industries Limited
 
X2 t08 04 inequality techniques (2012)
X2 t08 04 inequality techniques (2012)X2 t08 04 inequality techniques (2012)
X2 t08 04 inequality techniques (2012)
 
Web Security Programming I I
Web  Security  Programming  I IWeb  Security  Programming  I I
Web Security Programming I I
 
Java PU solution
Java PU solution Java PU solution
Java PU solution
 
Al Fazl International 21st October 2016 - Weekly
Al Fazl International 21st October  2016 - WeeklyAl Fazl International 21st October  2016 - Weekly
Al Fazl International 21st October 2016 - Weekly
 
Getting Started with Splunk Breakout Session
Getting Started with Splunk Breakout SessionGetting Started with Splunk Breakout Session
Getting Started with Splunk Breakout Session
 

Similaire à scala-gopher: async implementation of CSP for scala

Lego: A brick system build by scala
Lego: A brick system build by scalaLego: A brick system build by scala
Lego: A brick system build by scala
lunfu zhong
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospective
chenge2k
 

Similaire à scala-gopher: async implementation of CSP for scala (20)

Using Flow-based programming to write tools and workflows for Scientific Comp...
Using Flow-based programming to write tools and workflows for Scientific Comp...Using Flow-based programming to write tools and workflows for Scientific Comp...
Using Flow-based programming to write tools and workflows for Scientific Comp...
 
Implementation of 'go-like' language constructions in scala [english version]
Implementation of 'go-like' language constructions in scala [english version] Implementation of 'go-like' language constructions in scala [english version]
Implementation of 'go-like' language constructions in scala [english version]
 
Diving into HHVM Extensions (php[tek] 2016)
Diving into HHVM Extensions (php[tek] 2016)Diving into HHVM Extensions (php[tek] 2016)
Diving into HHVM Extensions (php[tek] 2016)
 
Lego: A brick system build by scala
Lego: A brick system build by scalaLego: A brick system build by scala
Lego: A brick system build by scala
 
A Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospective
 
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
Apache Gobblin: Bridging Batch and Streaming Data Integration. Big Data Meetu...
 
Stream or not to Stream?

Stream or not to Stream?
Stream or not to Stream?

Stream or not to Stream?

 
Ruslan.shevchenko: most functional-day-kiev 2014
Ruslan.shevchenko: most functional-day-kiev 2014Ruslan.shevchenko: most functional-day-kiev 2014
Ruslan.shevchenko: most functional-day-kiev 2014
 
Python1
Python1Python1
Python1
 
Go lang introduction
Go lang introductionGo lang introduction
Go lang introduction
 
Twig Templating
Twig TemplatingTwig Templating
Twig Templating
 
Writing Docker monitoring agent with Go
Writing Docker monitoring agent with GoWriting Docker monitoring agent with Go
Writing Docker monitoring agent with Go
 
Communicating Sequential Processes (CSP) in JavaScript
Communicating Sequential Processes (CSP) in JavaScriptCommunicating Sequential Processes (CSP) in JavaScript
Communicating Sequential Processes (CSP) in JavaScript
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
 
Building Go Web Apps
Building Go Web AppsBuilding Go Web Apps
Building Go Web Apps
 
Containerd Project Update: FOSDEM 2018
Containerd Project Update: FOSDEM 2018Containerd Project Update: FOSDEM 2018
Containerd Project Update: FOSDEM 2018
 
2015-GopherCon-Talk-Uptime.pdf
2015-GopherCon-Talk-Uptime.pdf2015-GopherCon-Talk-Uptime.pdf
2015-GopherCon-Talk-Uptime.pdf
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()
 
Debugging node in prod
Debugging node in prodDebugging node in prod
Debugging node in prod
 

Plus de Ruslan Shevchenko

Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platform
Ruslan Shevchenko
 
Javascript in modern scala backend. [russian]
Javascript in modern scala backend.  [russian]  Javascript in modern scala backend.  [russian]
Javascript in modern scala backend. [russian]
Ruslan Shevchenko
 

Plus de Ruslan Shevchenko (20)

Embedding Generic Monadic Transformer into Scala. [Tfp2022]
Embedding Generic Monadic Transformer into Scala. [Tfp2022]Embedding Generic Monadic Transformer into Scala. [Tfp2022]
Embedding Generic Monadic Transformer into Scala. [Tfp2022]
 
Svitla talks 2021_03_25
Svitla talks 2021_03_25Svitla talks 2021_03_25
Svitla talks 2021_03_25
 
Akka / Lts behavior
Akka / Lts behaviorAkka / Lts behavior
Akka / Lts behavior
 
Papers We Love / Kyiv : PAXOS (and little about other consensuses )
Papers We Love / Kyiv :  PAXOS (and little about other consensuses )Papers We Love / Kyiv :  PAXOS (and little about other consensuses )
Papers We Love / Kyiv : PAXOS (and little about other consensuses )
 
Scala / Technology evolution
Scala  / Technology evolutionScala  / Technology evolution
Scala / Technology evolution
 
{co/contr} variance from LSP
{co/contr} variance  from LSP{co/contr} variance  from LSP
{co/contr} variance from LSP
 
Scala jargon cheatsheet
Scala jargon cheatsheetScala jargon cheatsheet
Scala jargon cheatsheet
 
Java & low latency applications
Java & low latency applicationsJava & low latency applications
Java & low latency applications
 
IDLs
IDLsIDLs
IDLs
 
R ext world/ useR! Kiev
R ext world/ useR!  KievR ext world/ useR!  Kiev
R ext world/ useR! Kiev
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platform
 
Behind OOD: domain modelling in post-OO world.
Behind OOD:  domain modelling in post-OO world.Behind OOD:  domain modelling in post-OO world.
Behind OOD: domain modelling in post-OO world.
 
Programming Languages: some news for the last N years
Programming Languages: some news for the last N yearsProgramming Languages: some news for the last N years
Programming Languages: some news for the last N years
 
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
 
Web architecture - overview of techniques.
Web architecture - overview of  techniques.Web architecture - overview of  techniques.
Web architecture - overview of techniques.
 
R scala 17_05_2014
R scala 17_05_2014R scala 17_05_2014
R scala 17_05_2014
 
Javascript in modern scala backend. [russian]
Javascript in modern scala backend.  [russian]  Javascript in modern scala backend.  [russian]
Javascript in modern scala backend. [russian]
 
Osdn2013 rssh
Osdn2013 rsshOsdn2013 rssh
Osdn2013 rssh
 
implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)
 
Play/Scala as application platform (for http://wbcamp.in.ua 2013)
Play/Scala as application platform  (for http://wbcamp.in.ua 2013)Play/Scala as application platform  (for http://wbcamp.in.ua 2013)
Play/Scala as application platform (for http://wbcamp.in.ua 2013)
 

Dernier

%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 

Dernier (20)

%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 

scala-gopher: async implementation of CSP for scala