SlideShare a Scribd company logo
1 of 26
FOSS-SEA 2013
JavaScript & modern scala backend
Ruslan Shevchenko
<ruslan@shevchenko.kiev.ua>
@rssh1
(gradsoft, gosave)
Есть ли у нас план ?
●

- обзор архитектур web приложений
–

●

- scala-frameworks
–

●

90, MVC, ROR-Like, one-page ..
lift, play, spray.io, scalatra

- использование и генерация javascript
–

jscala, scala-js
90-е

Запрос / Страничка html
(JavaScript испрользуется только локально)
Структризация обработки

C

M

V
MVC
Разделение на блоки контроллера, модели и
представления
Конфигурация по умолчанию

C

M

V
MVC
Раутер, контроллер и модель структрируются
автоматически на основе соглашений
Появление Ajax

C

M

V
MVC
Javascript может делать запросы к серверу и
Подгружать информацию
Rich client

C

M

V
REST
Presentation Layer переезжает на клиент
Rich client/ backbone style

C
V

M
REST

Взаимодействие = синхронизация моделей
Rich client / Angular style

C
V

M
RPC

Клиент - самостоятельно приложение
(обращается по RPC)
Тенденции

M

C
V

RPC

Если persistence умеет REST — зачем нам
application ?
Тенденции

C

M

V

Возможность интеракций
инициированных сервером
(websockets, comet)
Scala
●
●

Почему не javascript ?
- static typing.

●
●
●

●

●

<troll-mode-on>
[99, 100, 101].sort()
</troll-mode-off>
Scala
●

Почему javascript ?

●

- описание структур

●

- передача на клиент поведения

●
Main frameworks:
●

Lift
–

●

Play
–

●

(mainstream, ROR analog)

Spray.io
–

●

(old-style, presentation first)

(ligthweight, RPC style)

Scalatra
–

(servlet compatible)
Lift
def render = {
"type=submit" #>
SHtml.submit("Register", process,
"onclick" ->
JsIf(JsEq(ValById("first_name"), ""),
Alert("alert") & JsReturn(false)).toJsCmd)
}

Работа фреймворка –
преобразование XML (свои теги)
Play
– раутер — конфигурация
- контроллер — синхронная или
Асинхронаая функция из
Request в response
- view – compile-time шаблоны
(мы не используем)
Netty, в будущем — миграция на spray.ioo
Play / Example
def index = Action.async {
val futureInt =

Future { intensiveComputation() }

val timeoutFuture = Promise.timeout("Oops", 1.second)
Future.firstCompletedOf(Seq(futureInt, timeoutFuture)).map
{
case i: Int => Ok("Got result: " + i)
case t: String => InternalServerError(t)
}
}
Play/JSON
case class Person(
name: String, age: Int)

object Person{
implicit val personFmt =
Json.format[Person]
}
JavaScript / scala
●

Write in scala, produce javascriot
–

Jscala http://www.jscala.org
●

–

(lightweight, macros, from Alexander Nemish, Kiev)

Scala-js http://www.scala-js.org
●

(fully functional scala-to-js compiler, EPFL institute)
jscala
import org.jscala._
@JavaScript class Test {
def hello() {
print("Hello")
}
}
val testJs = Test.javaScript.as[JsStmt] // Get class Test JsAst
val main = javascript {
val t = new Test()
t.hello()
}
jscala
import org.jscala._
@JavaScript class Test {
def hello() {
print("Hello")
}
}
jscala
val testJs = Test.javaScript.as[JsStmt]
val main = javascript {
val t = new Test()
t.hello()
}
jscala
●

Исполнение – макросы
–

●

@JavaScript, javascript{ .. }

Подмножество scala
–
–

Урезанные управляющие структуры,

–
●

нет стандартные scala-lib
DOM API динамическое(пока)

Компактный читаемый javascript без runtime
scala-js
●

Полноценный компилятор

●

Все фичи скалы,

●

Полноценная библиотека

●

Порядка 10 Mb рантайма / стандартных
бибилиотек (js)
–

Используется google closure дл я минимизации
Scala/javascript
●

●

- API

- спецификация API пишется на

●

●

(thrift)

- генерация (jscala, scala-js)

●

●

- асинхронность
●
●

Scala – Akka
Erlang, RxJava
Спасибо за внимание
●
●

Вопросы ?

●
●
●
●
●

- Руслан Шевченко
@rssh1
​<ruslan@shevchenko.kiev.ua>

More Related Content

Similar to Javascript in modern scala backend. [russian]

06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...
06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...
06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...HappyDev-lite
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1Eduard Antsupov
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Dotnet development
Dotnet developmentDotnet development
Dotnet developmentMageCloud
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.jsОмские ИТ-субботники
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''DneprCiklumEvents
 
Dotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingDotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingCiklum Ukraine
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015Timur Safin
 
Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsMax Klymyshyn
 
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Арсений Заречнев и Федор Шумов - Одностраничные приложенияАрсений Заречнев и Федор Шумов - Одностраничные приложения
Арсений Заречнев и Федор Шумов - Одностраничные приложенияArseny Zarechnev
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java scriptNoveo
 

Similar to Javascript in modern scala backend. [russian] (20)

06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...
06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...
06 HappyDev-lite-2015 autumn. Андрей Юдин. JavaScript. Аспекты применения в с...
 
Devcamp nodejs-2010
Devcamp nodejs-2010Devcamp nodejs-2010
Devcamp nodejs-2010
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1
 
Scala On Rest
Scala On RestScala On Rest
Scala On Rest
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Dotnet development
Dotnet developmentDotnet development
Dotnet development
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
01 net saturday alex krakovetskiy ''asp.net scaffolding''
01 net saturday alex  krakovetskiy ''asp.net scaffolding''01 net saturday alex  krakovetskiy ''asp.net scaffolding''
01 net saturday alex krakovetskiy ''asp.net scaffolding''
 
Dotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffoldingDotnet saturday mvc_scaffolding
Dotnet saturday mvc_scaffolding
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
 
Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.js
 
Арсений Заречнев и Федор Шумов - Одностраничные приложения
Арсений Заречнев и Федор Шумов - Одностраничные приложенияАрсений Заречнев и Федор Шумов - Одностраничные приложения
Арсений Заречнев и Федор Шумов - Одностраничные приложения
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
 

More from Ruslan Shevchenko

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]Ruslan Shevchenko
 
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 )Ruslan Shevchenko
 
Scala / Technology evolution
Scala  / Technology evolutionScala  / Technology evolution
Scala / Technology evolutionRuslan Shevchenko
 
{co/contr} variance from LSP
{co/contr} variance  from LSP{co/contr} variance  from LSP
{co/contr} variance from LSPRuslan Shevchenko
 
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
 
SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.Ruslan Shevchenko
 
Few simple-type-tricks in scala
Few simple-type-tricks in scalaFew simple-type-tricks in scala
Few simple-type-tricks in scalaRuslan Shevchenko
 
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 thisRuslan Shevchenko
 
Java & low latency applications
Java & low latency applicationsJava & low latency applications
Java & low latency applicationsRuslan Shevchenko
 
Jslab rssh: JS as language platform
Jslab rssh:  JS as language platformJslab rssh:  JS as language platform
Jslab rssh: JS as language platformRuslan Shevchenko
 
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.Ruslan Shevchenko
 
scala-gopher: async implementation of CSP for scala
scala-gopher:  async implementation of CSP  for  scalascala-gopher:  async implementation of CSP  for  scala
scala-gopher: async implementation of CSP for scalaRuslan Shevchenko
 
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 yearsRuslan Shevchenko
 

More from 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
 
N flavors of streaming
N flavors of streamingN flavors of streaming
N flavors of streaming
 
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.
 
SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.SE 20016 - programming languages landscape.
SE 20016 - programming languages landscape.
 
Few simple-type-tricks in scala
Few simple-type-tricks in scalaFew simple-type-tricks in scala
Few simple-type-tricks in scala
 
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
 
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
 
Csp scala wixmeetup2016
Csp scala wixmeetup2016Csp scala wixmeetup2016
Csp scala wixmeetup2016
 
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.
 
scala-gopher: async implementation of CSP for scala
scala-gopher:  async implementation of CSP  for  scalascala-gopher:  async implementation of CSP  for  scala
scala-gopher: async implementation of CSP for scala
 
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
 

Javascript in modern scala backend. [russian]