Successfully reported this slideshow.
В поисках идеалаОчередная белая презентация
Про что?● Веб-фреймворки○ Scala■ Предыстория■ Язык■ Lift■ Play!■ Akka■ Netty○ Ruby■ On Rails■ On JVM
История (не ищите здесь PHP)
Что они нам дали?● REST● MVC и MVVM● ORM и ODM● Migrations● Templating● Caching● Ajax и Comet● Testing● Deployment● Compon...
А ещё● Производительность разработки● Понятность функционированияприложения● Обучаемость● Поддерживаемость продукта● Рынок...
Тренды● Browser Wars 3.0● Mobile First● SPA● Client frameworks● Cloud Infrastructure● NoSQL <-> SQL● Comet● REST API○ Внеш...
Scala● Martin Odersky● 2003 год● Erlang, Haskell, Java, Lisp, Smalltalk● .scala
Scala● Статическая строгая типизация● Смешанная парадигма (ООП+Функциональная)● JVM и .NET● Сложная система типов○ inferen...
Scala● Всё является объектами● def - начало определения метода● Определение переменных начинается с ключевыхслов var или v...
Scala - ООПclass Upper {def upper(strings: String*): Seq[String] = {strings.map((s:String) => s.toUpperCase())}}val up = n...
Scala - Functional// Функциональный литерал(s:String) => s.toUpperCase()// Пример примененияobject Upper {def upper(string...
Scala - Functionaldef factorial(i: Int): Int = {def fact(i: Int, accumulator: Int): Int = {if (i <= 1)accumulatorelsefact(...
Scala - Type Inferenceimport java.util.Map;import java.util.HashMap;...Map<Integer, String> intToStringMap = new HashMap<I...
Scala - Type InferenceКогда нужно явно указать тип1. При объявлении переменной, если при этом ей не присваиваетсязначение....
Scala - Actors/package shapes {class Point(val x: Double, val y: Double) {override def toString() = "Point(" + x + "," + y...
Scala - Actorspackage shapes {import scala.actors._import scala.actors.Actor._object ShapeDrawingActor extends Actor {def ...
Scala - Actorsimport shapes._ShapeDrawingActor.start()ShapeDrawingActor ! new Circle(new Point(0.0,0.0), 1.0)ShapeDrawingA...
Play! 2● Full-stack MVC фреймворк● Асинхронный● Событийно-ориентированный● Stateless● Type-safe● Масштабируемый● Open Sour...
Play! 2● Компиляция в реальном времени● Интерактивная консоль● Отображение ошибок в браузере и в консоли● Db Evolutions ~=...
Play! - Web Architecture
Play! - Getting startedСпособ 1:1. Скачать и распаковать Play2. Добавить местоположение в переменную окруженияexport PATH=...
Play! - Getting startedСпособ 2 (предпочтительный):1. Установить sbt (Scala Build tool) и добавить в project/plugins.sbt//...
Play! - Application layout
Play! - Конфигурация роутов
Play! - Валидация форм
Play! and Databases● Type-safe ORM○ Slick (http://slick.typesafe.com/)■ Стабильная версия■ Начиная с Play! 2.1■ Хорошая до...
Play! Templating● Scalate (http://scalate.fusesource.org/)○ Движок шаблонизатора○ Поддерживает форматы шаблонов■ Scaml (==...
Play2 - Testing● Specs○ specs2 (http://etorreborre.github.io/specs2/)● Функциональное тестирование○ Свой движок (Coco)○ Ин...
Play! - Clients libraries● Поддерживает CoffeeScript● Поддерживает LeSS● Поддерживает Bootstrap
Play! Akka● Multicore, multiple nodes message passing● Software Transactional Memory (STM)● Non-blocking IO● Remote actors...
Что дальше?● Advanced Scala○ Akka tricks● Lift framework● Play! framework examples, tips&tricks● Ruby○ Rails○ Sinatra● Итоги
Lift, play, akka, rails part1
Upcoming SlideShare
Loading in …5
×

Lift, play, akka, rails part1

498 views

Published on

  • Be the first to comment

Lift, play, akka, rails part1

  1. 1. В поисках идеалаОчередная белая презентация
  2. 2. Про что?● Веб-фреймворки○ Scala■ Предыстория■ Язык■ Lift■ Play!■ Akka■ Netty○ Ruby■ On Rails■ On JVM
  3. 3. История (не ищите здесь PHP)
  4. 4. Что они нам дали?● REST● MVC и MVVM● ORM и ODM● Migrations● Templating● Caching● Ajax и Comet● Testing● Deployment● Components● Performance● Scalability● Community
  5. 5. А ещё● Производительность разработки● Понятность функционированияприложения● Обучаемость● Поддерживаемость продукта● Рынок разработчиков
  6. 6. Тренды● Browser Wars 3.0● Mobile First● SPA● Client frameworks● Cloud Infrastructure● NoSQL <-> SQL● Comet● REST API○ Внешние API● Scalability● Performance● Big Data● HTML5
  7. 7. Scala● Martin Odersky● 2003 год● Erlang, Haskell, Java, Lisp, Smalltalk● .scala
  8. 8. Scala● Статическая строгая типизация● Смешанная парадигма (ООП+Функциональная)● JVM и .NET● Сложная система типов○ inference● Scalable○ explicit selftypes○ abstract type members and generics○ nested methods and classes○ mixin composition using traits○ dependency injection
  9. 9. Scala● Всё является объектами● def - начало определения метода● Определение переменных начинается с ключевыхслов var или val■ val array: Array[String] = new Array(5)● Переменные определяются как имя:тип● Точки с запятой необязательны
  10. 10. Scala - ООПclass Upper {def upper(strings: String*): Seq[String] = {strings.map((s:String) => s.toUpperCase())}}val up = new UpperConsole.println(up.upper("A", "First", "Scala", "Program"))
  11. 11. Scala - Functional// Функциональный литерал(s:String) => s.toUpperCase()// Пример примененияobject Upper {def upper(strings: String*) = strings.map(_.toUpperCase())}println(Upper.upper("A", "First", "Scala", "Program"))// _ - это Placeholder-индикатор, можно представить как анонимнуюпеременную, которая// принимает в качестве значения строки из mapa
  12. 12. Scala - Functionaldef factorial(i: Int): Int = {def fact(i: Int, accumulator: Int): Int = {if (i <= 1)accumulatorelsefact(i - 1, i * accumulator)}fact(i, 1)}def countTo(n: Int):Unit = {def count(i: Int): Unit = {if (i <= n) {println(i)count(i + 1)}}count(1)}countTo(5)
  13. 13. Scala - Type Inferenceimport java.util.Map;import java.util.HashMap;...Map<Integer, String> intToStringMap = new HashMap<Integer, String>();import java.util.Mapimport java.util.HashMap...val intToStringMap: Map[Integer, String] = new HashMapimport java.util.Mapimport java.util.HashMap...val intToStringMap2 = new HashMap[Integer, String]
  14. 14. Scala - Type InferenceКогда нужно явно указать тип1. При объявлении переменной, если при этом ей не присваиваетсязначение. (e.g., val name = "Programming Scala")2. Для любого параметра метода. (e.g., def deposit(amount: Money)…)3. Для возвращаемых значений метода в случае:a. Когда вы явно вызываете return.b. Когда метод рекурсивен.c. При перегрузке метода, в случае если один вызывает другой.d. В случае, когда возвращаемый тип является более общим, чемвам нужно, e.g., Any.
  15. 15. Scala - Actors/package shapes {class Point(val x: Double, val y: Double) {override def toString() = "Point(" + x + "," + y + ")"}abstract class Shape() {def draw(): Unit}class Circle(val center: Point, val radius: Double) extends Shape {def draw() = println("Circle.draw: " + this)override def toString() = "Circle(" + center + "," + radius + ")"}class Rectangle(val lowerLeft: Point, val height: Double, val width: Double)extends Shape {def draw() = println("Rectangle.draw: " + this)override def toString() ="Rectangle(" + lowerLeft + "," + height + "," + width + ")"}class Triangle(val point1: Point, val point2: Point, val point3: Point)extends Shape {def draw() = println("Triangle.draw: " + this)override def toString() ="Triangle(" + point1 + "," + point2 + "," + point3 + ")"}}
  16. 16. Scala - Actorspackage shapes {import scala.actors._import scala.actors.Actor._object ShapeDrawingActor extends Actor {def act() {loop {receive {case s: Shape => s.draw()case "exit" => println("exiting..."); exitcase x: Any => println("Error: Unknown message! " + x)}}}}}
  17. 17. Scala - Actorsimport shapes._ShapeDrawingActor.start()ShapeDrawingActor ! new Circle(new Point(0.0,0.0), 1.0)ShapeDrawingActor ! new Rectangle(new Point(0.0,0.0), 2, 5)ShapeDrawingActor ! new Triangle(new Point(0.0,0.0),new Point(1.0,0.0),new Point(0.0,1.0))ShapeDrawingActor ! 3.14159ShapeDrawingActor ! "exit"
  18. 18. Play! 2● Full-stack MVC фреймворк● Асинхронный● Событийно-ориентированный● Stateless● Type-safe● Масштабируемый● Open Source● Поддерживает Scala и Java
  19. 19. Play! 2● Компиляция в реальном времени● Интерактивная консоль● Отображение ошибок в браузере и в консоли● Db Evolutions ~= Миграции● Компиляция всего
  20. 20. Play! - Web Architecture
  21. 21. Play! - Getting startedСпособ 1:1. Скачать и распаковать Play2. Добавить местоположение в переменную окруженияexport PATH=$PATH:/relativePath/to/play3. Скомандоватьplay new myFirstApp
  22. 22. Play! - Getting startedСпособ 2 (предпочтительный):1. Установить sbt (Scala Build tool) и добавить в project/plugins.sbt// The Typesafe repositoryresolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"// Use the Play sbt plugin for Play projectsaddSbtPlugin("play" % "sbt-plugin" % "2.1.0")import sbt._import Keys._import play.Project._2. В project/Build.scala добавитьobject ApplicationBuild extends Build {val appName = "My first application"val appVersion = "1.0"val appDependencies = Nilval main = play.Project(appName, appVersion, appDependencies)}
  23. 23. Play! - Application layout
  24. 24. Play! - Конфигурация роутов
  25. 25. Play! - Валидация форм
  26. 26. Play! and Databases● Type-safe ORM○ Slick (http://slick.typesafe.com/)■ Стабильная версия■ Начиная с Play! 2.1■ Хорошая документация● ODM○ ReactiveMongo (http://reactivemongo.org/)○ Примеры приложений■ Demo app: https://github.com/sgodbillon/reactivemongo-demo-app■ Tailable cursor app: https://github.com/sgodbillon/reactivemongo-tailablecursor-demo
  27. 27. Play! Templating● Scalate (http://scalate.fusesource.org/)○ Движок шаблонизатора○ Поддерживает форматы шаблонов■ Scaml (== Haml)■ Jade (nodeJS Template engine)○ Шаблоны хорошо переносятся между разнымифреймворками○ Независим от фреймворка○ Хорошо документирован
  28. 28. Play2 - Testing● Specs○ specs2 (http://etorreborre.github.io/specs2/)● Функциональное тестирование○ Свой движок (Coco)○ Интеграция с Selenium WebDriver■ https://github.com/FluentLenium/FluentLenium
  29. 29. Play! - Clients libraries● Поддерживает CoffeeScript● Поддерживает LeSS● Поддерживает Bootstrap
  30. 30. Play! Akka● Multicore, multiple nodes message passing● Software Transactional Memory (STM)● Non-blocking IO● Remote actors● Supervisor hierarchy
  31. 31. Что дальше?● Advanced Scala○ Akka tricks● Lift framework● Play! framework examples, tips&tricks● Ruby○ Rails○ Sinatra● Итоги

×