SlideShare a Scribd company logo
1 of 67
Download to read offline
Letgo chat
From polling to real time
Scala, Akka, and WebSockets from scratch
@SergiGP
@GVico46

@JavierCane#scbcn16 - Software Craftsmanship Barcelona 2016
@JavierCane@SergiGP
Welcome!
@GVico46
Contents
Context

(not Bounded)
Legacy
Getting
started
Pain
Points
From PHP
to Scala
1.
Context (not Bounded)
App downloads
Messages sent monthly growth
Messages sent every day
30M
20 - 40%
~4M
Context (not Bounded)
Where do we come
! Mobile first
◕ Internal REST API
! Startup with less than 2 years
◕ Externalize services (Parse, Kahuna…)
! Funding: $200M
◕ Ads in TV in USA and Turkey
2.
Legacy
Legacy
! PHP
! No test
! New Features
Legacy
REST API in PHP
Do I have new messages? No
And now?
And now?
And now?
And now?
No
No!!
NO!!
😑 🔫 💣
Legacy
No test
! Rebuild a system without tests => 🦄💩💣💀
! Coupled system => Acceptance tests
◕ Learning what the system does
◕ Find existing weird behaviors
Background:

Given there are test users:

| user_object_id | user_name | user_token |

| 19fd3160-8643-11e6-ae22-56b6b6499611 | seller | sellerToken |

| 120291b2-8643-11e6-ae22-56b6b6499611 | buyer | buyerToken |

And user "seller" has a product with:

| id | objectId |

| 120291b2-8643-11e6-ae22-56b6b6499611 | SuperProductId |



Scenario: A user can get messages from another user associated to product

Given user "seller" has a conversation related to product "SuperProductId" with user "buyer"

When user "seller" asks for messages related to product "SuperProductId" from user "buyer"

Then the response status code should be 200

And the response should be in JSON

And the JSON should be valid according to the schema "messages.schema"
Acceptance test with Behat
Legacy
Taking advantage of backwards compatibility
Leaving The Monolith thanks to #EventSourcing @ #scpna
Legacy
New Features
! Product always want more features
! Negotiation:
◕ Archive conversations
◕ Mute interlocutor
◕ Stickers
3.
Getting started
Getting started
! Why and how to switch to Scala
! Scala and Akka crash course
! Takeaways
Why and how to switch
to Scala
We want a
WhatsApp inside
Letgo
LOL
I’ve payed $22 Billion
for WhatsApp
Getting started
Why and how to switch to Scala
! Realtime (WebSockets)
! Akka
! Scale!
Why How
! Learning a lot
! External consultancy
! Akka :)
! Backwards Compatible
Scala quick start
Getting started
Scala quick start
! Case classes
! Functional
! Optionals
! Futures
! OOP
class User {



private $id;



private $name;



public function __construct(Uuid $id, string $name)

{

$this!→id = $id;

$this!→name = $name;

}



public function id() : Uuid

{

return $this!→id;

}



Case Class
{

return $this!→id;

}



public function name() : string

{

return $this!→name;

}



public function setId(Uuid $id) : self

{

return new static($id, $this!→name);

}



public function setName(string $name) : self

{

return new static($this!→id, $name);

}

}
Case Class
rafa.name = "Santi"



val santi = rafa.copy(name = "Santi")

println(santi.name) #$ Santi
val rafa = User(UUID.randomUUID(), "Rafa")

println(rafa.name) #$ Rafa
case class User(id: UUID, name: String)
Case classes
Does not compile
Usage
Immutability
val users = List(

User(UUID.randomUUID(), "Rafa"),

User(UUID.randomUUID(), "Santi"),

User(UUID.randomUUID(), "Jaime"),

User(UUID.randomUUID(), "Diyan")

)

Functional
Mutable state
val names = users.map(user %& user.name)

val names = users.map(_.name)
List[String] names = new ArrayList();



for (User user: users) {

names.add(user.name)

}
Procedural
Option
Option[A]
Some(x: A) None
def searchUser(id: UUID): Option[User] =
{

#$ …search user in database (blocking)

Some(rafa)

}
Option
searchUser(userId) match {

case Some(user) %& #$ do stuff

case None %& #$ user not found

}
Usage (pattern matching)
Option usage (functional)
searchUser(userId) match {

case Some(user) %& #$ do stuff

case None %& #$ user not found

}
searchUser(userId).map { userFound %&

#$ do stuff

}
Futures


def searchUser(id: UUID): Future[Option[User]] = {

Future {

Thread.sleep(1000)

Some(rafa)

}
}
Futures usage


searchUser(userId).onComplete {

case Success(Some(user)) %& #$ do stuff

case Success(None) %& #$ user not found

case Failure(exception) %& #$ future has crashed

}



searchUser(userId).map {

case Some(user) %& #$ do stuff

case None %& #$ user not found

}



searchUser(userId).map(_.map(_.name))



trait UserRepository {

def search(id: UUID): Future[Option[User]]

}



trait ConsoleLogger {

def warning(message: String) = {
println(message)
}

}
OOP - DIP
OOP - DIP




class MysqlUserRepository
extends UserRepository with ConsoleLogger {



def search(id: UUID): Future[Option[User]] = {

#$ implementation

warning("user not found")



Future(Some(rafa))

}

}
OOP - Companion object
object UserId {

def random: UserId = {
UserId(UUID.randomUUID())
}

}



case class UserId(id: UUID)
val userId = UserId.random

println(userId.id)


case class User(id: UserId, name: String)
Usage
Akka (actor model)
Scala quick start
Akka (actor model)
! Concept
! Introductory examples
! Chat actors architecture
Scala quick start
Akka (actor model) - Concept
! Mailbox (1 each time)
! receive to handle incoming messages
! ActorRef
! Tell or ask methods to interact with the ActorRef
! Location transparency
final class ConnectionActor extends Actor {
}
object ConnectionActor {

def props: Props =
Props(new ConnectionActor)

}
Building our first actor
Instantiation
val connection: ActorRef =
context.actorOf(ConnectionActor.props)
object ConnectionActor {

def props: Props =
Props(new ConnectionActor)

}
final class ConnectionActor extends Actor {
override def receive: Receive = {

case PingQuery %&

}
}
Building our first actor
Instantiation
val connection: ActorRef =
context.actorOf(ConnectionActor.props)
final class ConnectionActor(webSocket: ActorRef)

extends Actor {
override def receive: Receive = {

case PingQuery %& webSocket ! PongResponse

}
}
Tell (Fire & forget)
object ConnectionActor {

def props(webSocket: ActorRef): Props =
Props(new ConnectionActor(webSocket))
}
Building our first actor
Instantiation
val connection: ActorRef =
context.actorOf(ConnectionActor.props(webSocket))
case class ConnectionActorState(

lastRequestSentAt: Option[DateTime]

) {

def requestSent: ConnectionActorState =

copy(lastRequestSentAt = Some(DateTime.now))

}
Dealing with state
case class ConnectionActorState(

lastRequestSentAt: Option[DateTime]

) {

def requestSent: ConnectionActorState =

copy(lastRequestSentAt = Some(DateTime.now))

}
final class ConnectionActor(webSocket: ActorRef)
extends Actor {



var state =
ConnectionActorState(lastRequestSentAt = None)



override def receive: Receive = {

case PingQuery(requestId) %&

state = state.requestSent

webSocket.actorRef ! PongResponse

}
Dealing with state
State model
Akka: 1 message at a time
(no race conditions)
final class ConnectionActor(webSocket: ActorRef)
extends Actor {



var state =
ConnectionActorState(lastRequestSentAt = None)



override def preStart(): Unit = {

context.system.scheduler.schedule(

initialDelay = 1.minute,

interval = 1.minute,

receiver = self,

message = CheckWebSocketTimeout

)

}



override def receive: Receive = {

case PingQuery(requestId) %&

Lifecycle
override def preStart(): Unit = {

context.system.scheduler.schedule(

initialDelay = 1.minute,

interval = 1.minute,

receiver = self,

message = CheckWebSocketTimeout

)

}



override def receive: Receive = {

case PingQuery(requestId) %&

state = state.requestSent

webSocket ! PongResponse()



case CheckWebSocketTimeout %&

if (state.hasBeenIdleFor(5.minutes)) {
self ! PoisonPill
}

Lifecycle
override def receive: Receive = {

case PingQuery %&

Future {

Thread.sleep(1000)

sender() ! PongResponse

}

}
Akka and Futures - SHIT HAPPENS
sender() could have changed
Be careful dealing with futures - sender()
override def receive: Receive = {

case PingQuery %&

Future {

Thread.sleep(1000)

PongResponse

}.pipeTo(sender())

}
sender() outside Future
Same happens with self
Chat actors architecture
TalkerS
ConversationSJ
TalkerJ
ConnectionS1 ConnectionJ1
Maintains consistency between
2 talkers : 1 conversation
Kill connections
if shit happens
Chat actors architecture
TalkerS
ConversationSJ
ConnectionS1
CS2CS3
Connection
Supervisor
Talker
Provider
Conversation
Provider
Maintains consistency between
N connections : 1 talker
“Singleton” actor
Non “singleton” actor
Takeaways
Scala quick start
Takeaways
! Neophyte guide for scala
! Raúl Raja
! Akka Concurrency book
! Scala for the impatient
! Lightbend webinars
! Lightbend activator
4.
Pain Points
Pain Points
! MaxScale
! Slick
! Deploy
! Dependency Injection
! Sync between chats
Chat protocol
SERVER TO CLIENT
Events
Commands
Queries
ACK
RESPONSE
Events
CLIENT TO SERVER
SERVER TO CLIENT
Commands
typing_started
typing_stopped
interlocutor_typing_started
interlocutor_typing_stopped
interlocutor_message_sent
interlocutor_reception_confirmed
interlocutor_read_confirmed
Events
Queries
Events
fetch_conversations
fetch_conversation_details
fetch_messages
fetch_messages_newer_than_id
fetch_messages_older_than_id
confirm_reception
confirm_read
archive_conversations
unarchive_conversations
CLIENT TO SERVER
Chat protocol
authenticate
create_conversation
send_message
DB initial import
DB initial import
Legacy
events
workerN
Legacy
events
worker…
Legacy
events
worker2
Scaling domain events workers
Legacy
events
worker1
Auto scaling
supervisor actor
SQS
Scaling domain events workers
Legacy
events
worker1
Legacy
events
worker2
Legacy
events
worker…
Legacy
events
workerN
Auto scaling
supervisor actor
SQS
5.
From PHP to Scala
From PHP to Scala
! Language community
! Composer vs SBT
◕ Semantic Versioning (scalaz, play…)
! Developer eXperience
◕ Not descriptive errors
◕ Scala and IntelliJ
! Learning Curve
! Loving and hating the compiler
! Another set of problems
Questions?
Thanks!
Contact
@JavierCane
@SergiGP
@GVico46
Credits
! Presentation base template by SlidesCarnival
! Graphics generated using draw.io

More Related Content

What's hot

Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"Konrad Malawski
 
The things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaThe things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaKonrad Malawski
 
Introduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanIntroduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanJimin Hsieh
 
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...Donny Wals
 
Akka Futures and Akka Remoting
Akka Futures  and Akka RemotingAkka Futures  and Akka Remoting
Akka Futures and Akka RemotingKnoldus Inc.
 
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in'tScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in'tKonrad Malawski
 
Art of Javascript
Art of JavascriptArt of Javascript
Art of JavascriptTarek Yehia
 
Scala 3camp 2011
Scala   3camp 2011Scala   3camp 2011
Scala 3camp 2011Scalac
 
Scala and Lift presentation
Scala and Lift presentationScala and Lift presentation
Scala and Lift presentationScalac
 
Scala == Effective Java
Scala == Effective JavaScala == Effective Java
Scala == Effective JavaScalac
 
Scaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with ScalaScaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with ScalaOstap Andrusiv
 
Scala For Java Programmers
Scala For Java ProgrammersScala For Java Programmers
Scala For Java ProgrammersEnno Runne
 
Javascript And J Query
Javascript And J QueryJavascript And J Query
Javascript And J Queryitsarsalan
 
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...Edureka!
 
Clojure for Java developers
Clojure for Java developersClojure for Java developers
Clojure for Java developersJohn Stevenson
 

What's hot (20)

Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"
 
The things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaThe things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and Akka
 
Introduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanIntroduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf Taiwan
 
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
Using Combine, SwiftUI and callAsFunction to build an experimental localizati...
 
Akka Futures and Akka Remoting
Akka Futures  and Akka RemotingAkka Futures  and Akka Remoting
Akka Futures and Akka Remoting
 
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in'tScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
 
Art of Javascript
Art of JavascriptArt of Javascript
Art of Javascript
 
Scala 3camp 2011
Scala   3camp 2011Scala   3camp 2011
Scala 3camp 2011
 
Scala on Android
Scala on AndroidScala on Android
Scala on Android
 
Scala and Lift presentation
Scala and Lift presentationScala and Lift presentation
Scala and Lift presentation
 
Scala == Effective Java
Scala == Effective JavaScala == Effective Java
Scala == Effective Java
 
Scaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with ScalaScaladroids: Developing Android Apps with Scala
Scaladroids: Developing Android Apps with Scala
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
 
Zen of Akka
Zen of AkkaZen of Akka
Zen of Akka
 
Scala For Java Programmers
Scala For Java ProgrammersScala For Java Programmers
Scala For Java Programmers
 
Javascript And J Query
Javascript And J QueryJavascript And J Query
Javascript And J Query
 
Meetup slides
Meetup slidesMeetup slides
Meetup slides
 
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
 
Pg py-and-squid-pypgday
Pg py-and-squid-pypgdayPg py-and-squid-pypgday
Pg py-and-squid-pypgday
 
Clojure for Java developers
Clojure for Java developersClojure for Java developers
Clojure for Java developers
 

Similar to From polling to real time: Scala, Akka, and Websockets from scratch

Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationAjax Experience 2009
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every dayVadym Khondar
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsFrancois Zaninotto
 
Akka with Scala
Akka with ScalaAkka with Scala
Akka with ScalaOto Brglez
 
SystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummarySystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummaryAmal Khailtash
 
Golang slidesaudrey
Golang slidesaudreyGolang slidesaudrey
Golang slidesaudreyAudrey Lim
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングscalaconfjp
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Ngoc Dao
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomyDongmin Yu
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기NAVER D2
 
React & The Art of Managing Complexity
React &  The Art of Managing ComplexityReact &  The Art of Managing Complexity
React & The Art of Managing ComplexityRyan Anklam
 
WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений...
WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений...WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений...
WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений...GeeksLab Odessa
 
"Scala in Goozy", Alexey Zlobin
"Scala in Goozy", Alexey Zlobin "Scala in Goozy", Alexey Zlobin
"Scala in Goozy", Alexey Zlobin Vasil Remeniuk
 
3 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 20153 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 2015Manuel Bernhardt
 
Concurrency on the JVM
Concurrency on the JVMConcurrency on the JVM
Concurrency on the JVMVaclav Pech
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryTatsuhiko Miyagawa
 
Modeling Patterns for JavaScript Browser-Based Games
Modeling Patterns for JavaScript Browser-Based GamesModeling Patterns for JavaScript Browser-Based Games
Modeling Patterns for JavaScript Browser-Based GamesRay Toal
 
Akka lsug skills matter
Akka lsug skills matterAkka lsug skills matter
Akka lsug skills matterSkills Matter
 

Similar to From polling to real time: Scala, Akka, and Websockets from scratch (20)

Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
 
Reactive programming every day
Reactive programming every dayReactive programming every day
Reactive programming every day
 
JS everywhere 2011
JS everywhere 2011JS everywhere 2011
JS everywhere 2011
 
Bonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node jsBonnes pratiques de développement avec Node js
Bonnes pratiques de développement avec Node js
 
Akka with Scala
Akka with ScalaAkka with Scala
Akka with Scala
 
SystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features SummarySystemVerilog OOP Ovm Features Summary
SystemVerilog OOP Ovm Features Summary
 
Golang slidesaudrey
Golang slidesaudreyGolang slidesaudrey
Golang slidesaudrey
 
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディングXitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
React & The Art of Managing Complexity
React &  The Art of Managing ComplexityReact &  The Art of Managing Complexity
React & The Art of Managing Complexity
 
WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений...
WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений...WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений...
WebCamp: Developer Day: Архитектура Web-приложений: обзор современных решений...
 
"Scala in Goozy", Alexey Zlobin
"Scala in Goozy", Alexey Zlobin "Scala in Goozy", Alexey Zlobin
"Scala in Goozy", Alexey Zlobin
 
3 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 20153 things you must know to think reactive - Geecon Kraków 2015
3 things you must know to think reactive - Geecon Kraków 2015
 
Concurrency on the JVM
Concurrency on the JVMConcurrency on the JVM
Concurrency on the JVM
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
 
Modeling Patterns for JavaScript Browser-Based Games
Modeling Patterns for JavaScript Browser-Based GamesModeling Patterns for JavaScript Browser-Based Games
Modeling Patterns for JavaScript Browser-Based Games
 
Akka lsug skills matter
Akka lsug skills matterAkka lsug skills matter
Akka lsug skills matter
 

Recently uploaded

Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxAsutosh Ranjan
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Call Girls in Nagpur High Profile
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduitsrknatarajan
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfKamal Acharya
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)simmis5
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Dr.Costas Sachpazis
 
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations120cr0395
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Christo Ananth
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdfKamal Acharya
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSISrknatarajan
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...ranjana rawat
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college projectTonystark477637
 
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...Call Girls in Nagpur High Profile
 

Recently uploaded (20)

Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptx
 
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Budhwar Peth ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduits
 
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdfONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
ONLINE FOOD ORDER SYSTEM PROJECT REPORT.pdf
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)
 
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
Structural Analysis and Design of Foundations: A Comprehensive Handbook for S...
 
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
(INDIRA) Call Girl Aurangabad Call Now 8617697112 Aurangabad Escorts 24x7
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college project
 
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
 

From polling to real time: Scala, Akka, and Websockets from scratch