SlideShare a Scribd company logo
1 of 33
How to START using




                     Ngoc Dao
This talk is not about Scala syntax

(You can learn 80% of it in 2 days, Sat & Sun)
Source code:
https://github.com/ngocdaothanh/sclart
Why I use Scala
●   Syntax is similar to Ruby (human oriented)
●   Faster than Ruby (= Java, ~C)
●   Can reuse all Java libs (Java has lots of libs!)
●   Easy to program for multicores (like Erlang)
Agenda
1. “scala” and “scalac” commands
2. SBT (Scala Build Tool)
3. Some useful frameworks
Part 1: scala & scalac
Install Scala
1. Download from scala-lang.org
2. Config PATH
  .bash_profile:
  PATH=~/opt/scala-2.9.2/bin:$PATH
~/opt/scala-2.9.2:
Interactive console
●   For trying out code snippets
●   Like “irb” of Ruby
$ scala
Welcome to Scala version 2.9.2
Type :help for more information.

scala> 1 + 2
res0: Int = 3

scala> "hello".length
res1: Int = 5

scala> :q

$
Scripting Scala
●   Can run a script right away, no compile step is
    needed
●   To run, “scala” command is needed; it will
    compile on the fly then run
●   For simple one-file programs
$ cat Hello1.scala
println(1 + 2)
println("hello".length)

$ scala Hello.scala
3
5
Compile Scala
●   Compile .scala file to .class file
●   Can use “scala” or normal “java” command to
    run .class file
●   Simple programs: scalac (like javac)
●   Bigger programs: SBT (see next slides)
$ scalac Hello1.scala
Hello1.scala:1: error: expected
class or object definition
println(1 + 2)
^
Hello1.scala:2: error: expected
class or object definition
println("hello".length)
^
two errors found


        Need to wrap the script with “main”
$ cat Hello2.scala
object Hello2 {
  // Similar to normal Java/C programs
  def main(args: Array[String]) {
    println(1 + 2)
    println("hello".length)
  }
}
Run with “scala” command

$ scalac Hello2.scala

$ ls
Hello2$.class    Hello2.class Hello2.scala

$ scala Hello2
3
5
Run with “java” command


$ java Hello2
Exception in thread "main"
java.lang.NoClassDefFoundError:
scala/ScalaObject

$ java -cp
~/opt/scala-2.9.2/lib/scala-library.jar:.
Hello2
Part 2: SBT
SBT (Scala Build Tool)
●   Dependency library manager
●   Build tool
●   Like “gem” + “rake” of Ruby
●   Like Maven of Java
Install SBT
There are several ways to install:
https://github.com/harrah/xsbt/wiki/Getting-
Started-Setup


I prefer installing SBT manually
Install SBT manually
~/opt/sbt:




sbt:
java -Xmx512M -XX:MaxPermSize=128M 
-jar `dirname $0`/sbt-launch-0.12.0.jar "$@"

.bash_profile:
PATH=~/opt/sbt:$PATH
Project structure
hello
  build.sbt
  src
    main
      scala
        should_be_under_a_package
          Hello2.scala
      java
        (Java source files, if any)
    test
      (Scala/Java test source files, if any)
      scala
      java
  target
    scala-2.9.2
      classes
        (Compiled .class files)
build.sbt
organization := "com.kayac"

name              := "hello"                           Like Gemfile of Ruby

version           := "1.0-SNAPSHOT"

scalaVersion := "2.9.2"

scalacOptions ++= Seq(                       Packaged .jar file:
  "-deprecation",                      hello_2.9.2-1.0-SNAPSHOT.jar
  "-unchecked"
)




       (Management of dependency libraries will be talked at part 3)
SBT tasks
$ sbt tasks

console         Starts the Scala interpreter

compile         Compiles sources
clean           Deletes files produced by the build
run             Runs a main class

package         Produces project jar file
publish         Publishes project jar file to a repository
publish-local   Copies project jar file to ~/.ivy2

test            Executes all tests
test-only       Executes the tests provided as arguments
test-quick      Executes the tests that either failed before
Demo
●   https://github.com/ngocdaothanh/sclart/tree/master/sbt/hello
●   sbt console, run, package etc.
SBT plugins

https://github.com/harrah/xsbt/wiki/sbt-0.10-plugins-list

Some useful plugins:

* Create Eclipse project file (with library paths):
https://github.com/typesafehub/sbteclipse

* One jar plugins
Install SBT plugins
1. Install plugins at global level
~/.sbt/plugins/build.sbt

Ex:
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.0")




2. Install plugins at project level
project/plugins.sbt

Ex:
https://github.com/ngocdaothanh/xitrum-demos/blob/master/project/plugins.sbt
Demo
●   Use sbt eclipse to create Eclipse project and
    see lib paths
Part3: Some useful frameworks



https://wiki.scala-lang.org/display/SW/Tools+and+Libraries
Xitrum
 ● Combine web server + web framework
 ● https://github.com/ngocdaothanh/xitrum




+------------------+          Scalable: session, realtime data etc.
|     Your app     |
+------------------+
|      Xitrum      |
|+----------------+|
|| Web framework ||      <-- Hazelcast --> Other instances
||----------------||
|| HTTP(S) Server ||
|+----------------+|
+------------------+

                       Fast static file serving: https://gist.github.com/3293596
                       WebSocket
Demo
●   https://github.com/ngocdaothanh/xitrum-demos
●   Routes
●   WebSocket
●   xitrum-package
Akka
●   http://akka.io/
●   Better than Scala's default actor library
●   Has power of Erlang:
    concurrency
    distribution
    failure supervisor
    FSM (Finite State Machine, very good for
    realtime multiplayer games, to manage states
    of game sessions and inter-player interactions)
FSM Demo




https://github.com/ngocdaothanh/code-lock-fsm-akka

More Related Content

What's hot

What's hot (20)

Advanced Reflection in Pharo
Advanced Reflection in PharoAdvanced Reflection in Pharo
Advanced Reflection in Pharo
 
JS Event Loop
JS Event LoopJS Event Loop
JS Event Loop
 
Ruby, the language of devops
Ruby, the language of devopsRuby, the language of devops
Ruby, the language of devops
 
Web development basics (Part-6)
Web development basics (Part-6)Web development basics (Part-6)
Web development basics (Part-6)
 
Functional Programming in Clojure
Functional Programming in ClojureFunctional Programming in Clojure
Functional Programming in Clojure
 
jQuery (intermediate)
jQuery (intermediate)jQuery (intermediate)
jQuery (intermediate)
 
Functional Programming in JavaScript
Functional Programming in JavaScriptFunctional Programming in JavaScript
Functional Programming in JavaScript
 
A Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and UnderstandingA Type-level Ruby Interpreter for Testing and Understanding
A Type-level Ruby Interpreter for Testing and Understanding
 
JavaScript Good Practices
JavaScript Good PracticesJavaScript Good Practices
JavaScript Good Practices
 
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
 
Actor model : A Different Concurrency Approach
Actor model : A Different Concurrency ApproachActor model : A Different Concurrency Approach
Actor model : A Different Concurrency Approach
 
What's a macro?: Learning by Examples / Scalaのマクロに実用例から触れてみよう!
What's a macro?: Learning by Examples / Scalaのマクロに実用例から触れてみよう!What's a macro?: Learning by Examples / Scalaのマクロに実用例から触れてみよう!
What's a macro?: Learning by Examples / Scalaのマクロに実用例から触れてみよう!
 
Hybrid concurrency patterns
Hybrid concurrency patternsHybrid concurrency patterns
Hybrid concurrency patterns
 
TypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without AnnotationsTypeProf for IDE: Enrich Development Experience without Annotations
TypeProf for IDE: Enrich Development Experience without Annotations
 
Reflection in Pharo: Beyond Smalltak
Reflection in Pharo: Beyond SmalltakReflection in Pharo: Beyond Smalltak
Reflection in Pharo: Beyond Smalltak
 
Upgrading to rails3
Upgrading to rails3Upgrading to rails3
Upgrading to rails3
 
PHP Basics
PHP BasicsPHP Basics
PHP Basics
 
Dynamically Composing Collection Operations through Collection Promises
Dynamically Composing Collection Operations through Collection PromisesDynamically Composing Collection Operations through Collection Promises
Dynamically Composing Collection Operations through Collection Promises
 
From Ruby to Scala
From Ruby to ScalaFrom Ruby to Scala
From Ruby to Scala
 
Reflection in Pharo: Beyond Smalltak
Reflection in Pharo: Beyond SmalltakReflection in Pharo: Beyond Smalltak
Reflection in Pharo: Beyond Smalltak
 

Similar to How to start using Scala

SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius Valatka
Vasil Remeniuk
 
Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01
Tino Isnich
 

Similar to How to start using Scala (20)

Sbt, idea and eclipse
Sbt, idea and eclipseSbt, idea and eclipse
Sbt, idea and eclipse
 
Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012Buildr In Action @devoxx france 2012
Buildr In Action @devoxx france 2012
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
 
Introduction to Apache Ant
Introduction to Apache AntIntroduction to Apache Ant
Introduction to Apache Ant
 
Gradle
GradleGradle
Gradle
 
What's New in LuaRocks - Lua Workshop 2014 - Hisham Muhammad
What's New in LuaRocks - Lua Workshop 2014 - Hisham MuhammadWhat's New in LuaRocks - Lua Workshop 2014 - Hisham Muhammad
What's New in LuaRocks - Lua Workshop 2014 - Hisham Muhammad
 
Boost your productivity with Scala tooling!
Boost your productivity  with Scala tooling!Boost your productivity  with Scala tooling!
Boost your productivity with Scala tooling!
 
Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
 
Build application using sbt
Build application using sbtBuild application using sbt
Build application using sbt
 
SBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius ValatkaSBT by Aform Research, Saulius Valatka
SBT by Aform Research, Saulius Valatka
 
Simple build tool
Simple build toolSimple build tool
Simple build tool
 
Road to sbt 1.0 paved with server
Road to sbt 1.0   paved with serverRoad to sbt 1.0   paved with server
Road to sbt 1.0 paved with server
 
SBT Concepts, part 2
SBT Concepts, part 2SBT Concepts, part 2
SBT Concepts, part 2
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
 
Postgres the hardway
Postgres the hardwayPostgres the hardway
Postgres the hardway
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01
 
Play framework
Play frameworkPlay framework
Play framework
 

More from Ngoc Dao

Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOs
Ngoc Dao
 
Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013
Ngoc Dao
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
Ngoc Dao
 
Easy distributed load test with Tsung
Easy distributed load test with TsungEasy distributed load test with Tsung
Easy distributed load test with Tsung
Ngoc Dao
 
Xitrum internals
Xitrum internalsXitrum internals
Xitrum internals
Ngoc Dao
 
Camellia General
Camellia GeneralCamellia General
Camellia General
Ngoc Dao
 
Nhập môn BDD
Nhập môn BDDNhập môn BDD
Nhập môn BDD
Ngoc Dao
 

More from Ngoc Dao (20)

BIG DATA サービス と ツール
BIG DATA サービス と ツールBIG DATA サービス と ツール
BIG DATA サービス と ツール
 
How to write a web framework
How to write a web frameworkHow to write a web framework
How to write a web framework
 
Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014Xitrum @ Scala Matsuri Tokyo 2014
Xitrum @ Scala Matsuri Tokyo 2014
 
Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOs
 
Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013Xitrum @ Scala Conference in Japan 2013
Xitrum @ Scala Conference in Japan 2013
 
SockJS Intro
SockJS IntroSockJS Intro
SockJS Intro
 
Easy distributed load test with Tsung
Easy distributed load test with TsungEasy distributed load test with Tsung
Easy distributed load test with Tsung
 
Cloud Erlang
Cloud ErlangCloud Erlang
Cloud Erlang
 
Xitrum internals
Xitrum internalsXitrum internals
Xitrum internals
 
Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần application
 
Erlang Web
Erlang WebErlang Web
Erlang Web
 
Nitrogen Web Framework
Nitrogen Web FrameworkNitrogen Web Framework
Nitrogen Web Framework
 
スポイトができるまで
スポイトができるまでスポイトができるまで
スポイトができるまで
 
Camellia General
Camellia GeneralCamellia General
Camellia General
 
Nhập môn BDD
Nhập môn BDDNhập môn BDD
Nhập môn BDD
 
何でRuby
何でRuby何でRuby
何でRuby
 
Sinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua Ngoc
Sinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua NgocSinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua Ngoc
Sinh hoat CLB tin hoc Komaba lan 2 - Phat bieu cua Ngoc
 
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua G
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua GSinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua G
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua G
 
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Ngoc
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua NgocSinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Ngoc
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Ngoc
 
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Hung
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua HungSinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Hung
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua Hung
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 

How to start using Scala

  • 1. How to START using Ngoc Dao
  • 2. This talk is not about Scala syntax (You can learn 80% of it in 2 days, Sat & Sun)
  • 4. Why I use Scala ● Syntax is similar to Ruby (human oriented) ● Faster than Ruby (= Java, ~C) ● Can reuse all Java libs (Java has lots of libs!) ● Easy to program for multicores (like Erlang)
  • 5. Agenda 1. “scala” and “scalac” commands 2. SBT (Scala Build Tool) 3. Some useful frameworks
  • 6. Part 1: scala & scalac
  • 7. Install Scala 1. Download from scala-lang.org 2. Config PATH .bash_profile: PATH=~/opt/scala-2.9.2/bin:$PATH
  • 9. Interactive console ● For trying out code snippets ● Like “irb” of Ruby
  • 10. $ scala Welcome to Scala version 2.9.2 Type :help for more information. scala> 1 + 2 res0: Int = 3 scala> "hello".length res1: Int = 5 scala> :q $
  • 11. Scripting Scala ● Can run a script right away, no compile step is needed ● To run, “scala” command is needed; it will compile on the fly then run ● For simple one-file programs
  • 12. $ cat Hello1.scala println(1 + 2) println("hello".length) $ scala Hello.scala 3 5
  • 13. Compile Scala ● Compile .scala file to .class file ● Can use “scala” or normal “java” command to run .class file ● Simple programs: scalac (like javac) ● Bigger programs: SBT (see next slides)
  • 14. $ scalac Hello1.scala Hello1.scala:1: error: expected class or object definition println(1 + 2) ^ Hello1.scala:2: error: expected class or object definition println("hello".length) ^ two errors found Need to wrap the script with “main”
  • 15. $ cat Hello2.scala object Hello2 { // Similar to normal Java/C programs def main(args: Array[String]) { println(1 + 2) println("hello".length) } }
  • 16. Run with “scala” command $ scalac Hello2.scala $ ls Hello2$.class Hello2.class Hello2.scala $ scala Hello2 3 5
  • 17. Run with “java” command $ java Hello2 Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject $ java -cp ~/opt/scala-2.9.2/lib/scala-library.jar:. Hello2
  • 19. SBT (Scala Build Tool) ● Dependency library manager ● Build tool ● Like “gem” + “rake” of Ruby ● Like Maven of Java
  • 20. Install SBT There are several ways to install: https://github.com/harrah/xsbt/wiki/Getting- Started-Setup I prefer installing SBT manually
  • 21. Install SBT manually ~/opt/sbt: sbt: java -Xmx512M -XX:MaxPermSize=128M -jar `dirname $0`/sbt-launch-0.12.0.jar "$@" .bash_profile: PATH=~/opt/sbt:$PATH
  • 22. Project structure hello build.sbt src main scala should_be_under_a_package Hello2.scala java (Java source files, if any) test (Scala/Java test source files, if any) scala java target scala-2.9.2 classes (Compiled .class files)
  • 23. build.sbt organization := "com.kayac" name := "hello" Like Gemfile of Ruby version := "1.0-SNAPSHOT" scalaVersion := "2.9.2" scalacOptions ++= Seq( Packaged .jar file: "-deprecation", hello_2.9.2-1.0-SNAPSHOT.jar "-unchecked" ) (Management of dependency libraries will be talked at part 3)
  • 24. SBT tasks $ sbt tasks console Starts the Scala interpreter compile Compiles sources clean Deletes files produced by the build run Runs a main class package Produces project jar file publish Publishes project jar file to a repository publish-local Copies project jar file to ~/.ivy2 test Executes all tests test-only Executes the tests provided as arguments test-quick Executes the tests that either failed before
  • 25. Demo ● https://github.com/ngocdaothanh/sclart/tree/master/sbt/hello ● sbt console, run, package etc.
  • 26. SBT plugins https://github.com/harrah/xsbt/wiki/sbt-0.10-plugins-list Some useful plugins: * Create Eclipse project file (with library paths): https://github.com/typesafehub/sbteclipse * One jar plugins
  • 27. Install SBT plugins 1. Install plugins at global level ~/.sbt/plugins/build.sbt Ex: addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.1.0") 2. Install plugins at project level project/plugins.sbt Ex: https://github.com/ngocdaothanh/xitrum-demos/blob/master/project/plugins.sbt
  • 28. Demo ● Use sbt eclipse to create Eclipse project and see lib paths
  • 29. Part3: Some useful frameworks https://wiki.scala-lang.org/display/SW/Tools+and+Libraries
  • 30. Xitrum ● Combine web server + web framework ● https://github.com/ngocdaothanh/xitrum +------------------+ Scalable: session, realtime data etc. | Your app | +------------------+ | Xitrum | |+----------------+| || Web framework || <-- Hazelcast --> Other instances ||----------------|| || HTTP(S) Server || |+----------------+| +------------------+ Fast static file serving: https://gist.github.com/3293596 WebSocket
  • 31. Demo ● https://github.com/ngocdaothanh/xitrum-demos ● Routes ● WebSocket ● xitrum-package
  • 32. Akka ● http://akka.io/ ● Better than Scala's default actor library ● Has power of Erlang: concurrency distribution failure supervisor FSM (Finite State Machine, very good for realtime multiplayer games, to manage states of game sessions and inter-player interactions)