SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Scala at MindCandy

  Sean Parsons & Mark Baker

 @seanparsons @markltbaker
Who are we?
Who are we?
Why we chose Scala
Familiarity with the JVM.
Transforming collections, Guava is still a bit of
a blunt tool.
Static types are cool.
Of the non-Java JVM languages seemed to
have the bigger community.
Commercial Support
How we used Scala - Services (1)
How we used Scala - Services (1)
How we used Scala - Services (2)
How we used Scala - Services (2)


User: 1
How we used Scala - Services (2)


User: 1   Game
How we used Scala - Services (2)


User: 1   Game     News
How we used Scala - Services (2)


User: 1   Game     News




                   BFFs
How we used Scala - Services (2)


User: 1   Game     News




                   BFFs




                  GameDB
How we used Scala - Services (2)
                            Feed: 7


User: 1   Game     News     Feed: 8


                            Feed: 9

                   BFFs




                  GameDB
How we used Scala - Services (3)
How we used Scala - Services (3)


User: 7
How we used Scala - Services (3)


User: 7   News
How we used Scala - Services (3)

                  Feed: 7

User: 7   News
How we used Scala - Services (3)

                  Feed: 7

User: 7   News

                  Users
How we used Scala - Services (3)

                   Feed: 7

User: 7    News

                   Users

          GameDB
How we used Scala - Services (4)
Simpler design

Unfiltered & Akka

Scalacheck is a lifesaver

Used the appropriate paradigm
Scala at Mind Candy
Now the story from Tools...
Why Scala for Tools
Fewer dependencies

Easy to distribute tools
Lots of useful Java libs
Move from Python "felt good"
XML / Pattern match features

Language Scalability
How we used Scala - Tools (1)
REPL investigations

Quick Scripts

Setup Tool 

Play-based websites
How we used Scala - Tools (2)
private val HudsonColorRegex = new Regex(""".*"color":"(w+)".*""")

private def jenkinsBuildStatus(build:models.AutomatedBuild):String = {

    val hudsonUrl = build.url + "/api/json"
    val result = scala.io.Source.fromURL(hudsonUrl).getLines().mkString
    val HudsonColorRegex(color) = result

    color match {
      case "blue" => GOOD
      case "red" => BAD
      case "aborted" => BAD
      case "disabled" => DISABLED
      case "grey_anime" => UNKNOWN // build has not run yet...
      case _ => unknownStatus("can't match jenkins build status color of: " + color)
    }
}
How we used Scala - Tools (3)
getCachedFileSizes(path, revision)
  .groupBy{ _.size / groupByBytes }
  .map { case (group,files) => group -> files.size }
  .toList
  .sorted
  .foreach {
    case (group, count) => data.addRowFromValues(
      humanGroupSize(group * groupByBytes,
                        groupByBytes),
      new Integer(count))
  }
Our Scala Experience
Our Scala Experience
Migration from dynamic languages
Clean expression of algorithms
 – What, not How
Immutability and Actors = Scale!
The REPL
Our Scala Experience
Our Scala Experience
Training - lots of syntax to learn
New language & New paradigms
Tools maturity
Compiler errors
Our Scala Experience
Training - lots of syntax to learn
New language & New paradigms
Tools maturity
Compiler errors



Still learning about maintenance
behaviour
Future of Scala at Mind Candy
Future of Scala at Mind Candy
                  Tools

                  Scripts

                  Services

                  Training
We're hiring!
tech.mindcandy.com

Email:
markb@mindcandy.com
sean@mindcandy.com

Twitter:
@markltbaker
@seanparsons

Contenu connexe

Tendances

Scala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuScala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuHavoc Pennington
 
Java to scala
Java to scalaJava to scala
Java to scalaGiltTech
 
Scala Past, Present & Future
Scala Past, Present & FutureScala Past, Present & Future
Scala Past, Present & Futuremircodotta
 
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLabIntroduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLabCloudxLab
 
I18nize Scala programs à la gettext
I18nize Scala programs à la gettextI18nize Scala programs à la gettext
I18nize Scala programs à la gettextNgoc Dao
 
Akka lsug skills matter
Akka lsug skills matterAkka lsug skills matter
Akka lsug skills matterSkills Matter
 
VJUG24 - Reactive Integrations with Akka Streams
VJUG24  - Reactive Integrations with Akka StreamsVJUG24  - Reactive Integrations with Akka Streams
VJUG24 - Reactive Integrations with Akka StreamsJohan Andrén
 
Building Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesBuilding Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesRahul Singh
 
Javawug bof 57 scala why now
Javawug bof 57 scala why nowJavawug bof 57 scala why now
Javawug bof 57 scala why nowSkills Matter
 
"Walk in a distributed systems park with Orleans" Евгений Бобров
"Walk in a distributed systems park with Orleans" Евгений Бобров"Walk in a distributed systems park with Orleans" Евгений Бобров
"Walk in a distributed systems park with Orleans" Евгений БобровFwdays
 
An Introduction to Scala
An Introduction to ScalaAn Introduction to Scala
An Introduction to ScalaBrent Lemons
 
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...Reactivesummit
 
ITSubbotik - как скрестить ежа с ужом или подводные камни внедрения функциона...
ITSubbotik - как скрестить ежа с ужом или подводные камни внедрения функциона...ITSubbotik - как скрестить ежа с ужом или подводные камни внедрения функциона...
ITSubbotik - как скрестить ежа с ужом или подводные камни внедрения функциона...Vyacheslav Lapin
 
Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaScala Italy
 
Introduction to Actor Model and Akka
Introduction to Actor Model and AkkaIntroduction to Actor Model and Akka
Introduction to Actor Model and AkkaYung-Lin Ho
 
Why Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldWhy Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldDean Wampler
 
Day 2 - Intro to Rails
Day 2 - Intro to RailsDay 2 - Intro to Rails
Day 2 - Intro to RailsBarry Jones
 

Tendances (20)

Scala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuScala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on Heroku
 
Java to scala
Java to scalaJava to scala
Java to scala
 
Scala Days NYC 2016
Scala Days NYC 2016Scala Days NYC 2016
Scala Days NYC 2016
 
Scala Past, Present & Future
Scala Past, Present & FutureScala Past, Present & Future
Scala Past, Present & Future
 
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLabIntroduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
Introduction to Scala | Big Data Hadoop Spark Tutorial | CloudxLab
 
I18nize Scala programs à la gettext
I18nize Scala programs à la gettextI18nize Scala programs à la gettext
I18nize Scala programs à la gettext
 
Akka lsug skills matter
Akka lsug skills matterAkka lsug skills matter
Akka lsug skills matter
 
Akkurate Akka
Akkurate AkkaAkkurate Akka
Akkurate Akka
 
VJUG24 - Reactive Integrations with Akka Streams
VJUG24  - Reactive Integrations with Akka StreamsVJUG24  - Reactive Integrations with Akka Streams
VJUG24 - Reactive Integrations with Akka Streams
 
Building Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source TechnologiesBuilding Enterprise Search Engines using Open Source Technologies
Building Enterprise Search Engines using Open Source Technologies
 
Javawug bof 57 scala why now
Javawug bof 57 scala why nowJavawug bof 57 scala why now
Javawug bof 57 scala why now
 
"Walk in a distributed systems park with Orleans" Евгений Бобров
"Walk in a distributed systems park with Orleans" Евгений Бобров"Walk in a distributed systems park with Orleans" Евгений Бобров
"Walk in a distributed systems park with Orleans" Евгений Бобров
 
An Introduction to Scala
An Introduction to ScalaAn Introduction to Scala
An Introduction to Scala
 
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...
Back-Pressure in Action: Handling High-Burst Workloads with Akka Streams & Ka...
 
ITSubbotik - как скрестить ежа с ужом или подводные камни внедрения функциона...
ITSubbotik - как скрестить ежа с ужом или подводные камни внедрения функциона...ITSubbotik - как скрестить ежа с ужом или подводные камни внедрения функциона...
ITSubbotik - как скрестить ежа с ужом или подводные камни внедрения функциона...
 
Martin Odersky - Evolution of Scala
Martin Odersky - Evolution of ScalaMartin Odersky - Evolution of Scala
Martin Odersky - Evolution of Scala
 
Introduction to Actor Model and Akka
Introduction to Actor Model and AkkaIntroduction to Actor Model and Akka
Introduction to Actor Model and Akka
 
Why Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data WorldWhy Scala Is Taking Over the Big Data World
Why Scala Is Taking Over the Big Data World
 
Introducing Akka
Introducing AkkaIntroducing Akka
Introducing Akka
 
Day 2 - Intro to Rails
Day 2 - Intro to RailsDay 2 - Intro to Rails
Day 2 - Intro to Rails
 

En vedette

The wildebeests are feeling frisky 2 10-12
The wildebeests are feeling frisky 2 10-12The wildebeests are feeling frisky 2 10-12
The wildebeests are feeling frisky 2 10-12Jeb Terry Sr
 
Roda + Fields Business System Presentation 041511 Copy
Roda + Fields Business System Presentation 041511 CopyRoda + Fields Business System Presentation 041511 Copy
Roda + Fields Business System Presentation 041511 CopyRodan + Fields Dermatologists
 
โครงงานครั้งที่........
โครงงานครั้งที่........โครงงานครั้งที่........
โครงงานครั้งที่........NattAA
 
25 nucleo celular
25 nucleo celular25 nucleo celular
25 nucleo celularjuanapardo
 
Pbl lesson plan a
Pbl lesson plan aPbl lesson plan a
Pbl lesson plan aMayci Neal
 
THE POWER PRINCIPLES OF TEAM BUILDING
THE POWER PRINCIPLES OF TEAM BUILDINGTHE POWER PRINCIPLES OF TEAM BUILDING
THE POWER PRINCIPLES OF TEAM BUILDINGJohn Kennedy Akotia
 
Tax exemption (17 oct 2011)
Tax exemption (17 oct 2011)Tax exemption (17 oct 2011)
Tax exemption (17 oct 2011)Em Peerapong
 
Rèdais & IED_Ozturk
Rèdais & IED_OzturkRèdais & IED_Ozturk
Rèdais & IED_OzturkRèdais
 
Collection Development a la Carte v.2
Collection Development a la Carte v.2Collection Development a la Carte v.2
Collection Development a la Carte v.2Mary Wilkes Towner
 
Dam31303 dti2143 lab sheet 7
Dam31303 dti2143 lab sheet 7Dam31303 dti2143 lab sheet 7
Dam31303 dti2143 lab sheet 7alish sha
 
PBL Lesson Plan C
PBL Lesson Plan CPBL Lesson Plan C
PBL Lesson Plan CMayci Neal
 
Get your city ready for #GivingTuesday 2014 - lessons from Baltimore
Get your city ready for #GivingTuesday 2014 - lessons from BaltimoreGet your city ready for #GivingTuesday 2014 - lessons from Baltimore
Get your city ready for #GivingTuesday 2014 - lessons from BaltimoreHeather Fields
 
Brochure talleres Lizandra Barbuto y Jhon Croft - Quito Ecuador Abril de 2016
Brochure talleres Lizandra Barbuto y Jhon Croft - Quito Ecuador Abril de 2016Brochure talleres Lizandra Barbuto y Jhon Croft - Quito Ecuador Abril de 2016
Brochure talleres Lizandra Barbuto y Jhon Croft - Quito Ecuador Abril de 2016Corporación Dijoma
 
Intercepting the strategic vector
Intercepting the strategic vectorIntercepting the strategic vector
Intercepting the strategic vectoramandakane1
 
Ance_ProgrammaJESSICA_24052011
Ance_ProgrammaJESSICA_24052011Ance_ProgrammaJESSICA_24052011
Ance_ProgrammaJESSICA_24052011Rèdais
 
How to turn Facebook 'likes' into leads and customers on auto-pilot.
How to turn Facebook 'likes' into leads and customers on auto-pilot.How to turn Facebook 'likes' into leads and customers on auto-pilot.
How to turn Facebook 'likes' into leads and customers on auto-pilot.Julia Bramble
 
Situación actual de las relaciones entre docentes y estudiantes.
Situación actual de las relaciones entre docentes y estudiantes.Situación actual de las relaciones entre docentes y estudiantes.
Situación actual de las relaciones entre docentes y estudiantes.Leonardo Eras
 

En vedette (20)

ΠΑΡΟΥΣΙΑΣΗ ECOMOBILITY 2014
ΠΑΡΟΥΣΙΑΣΗ  ECOMOBILITY  2014ΠΑΡΟΥΣΙΑΣΗ  ECOMOBILITY  2014
ΠΑΡΟΥΣΙΑΣΗ ECOMOBILITY 2014
 
The wildebeests are feeling frisky 2 10-12
The wildebeests are feeling frisky 2 10-12The wildebeests are feeling frisky 2 10-12
The wildebeests are feeling frisky 2 10-12
 
Roda + Fields Business System Presentation 041511 Copy
Roda + Fields Business System Presentation 041511 CopyRoda + Fields Business System Presentation 041511 Copy
Roda + Fields Business System Presentation 041511 Copy
 
โครงงานครั้งที่........
โครงงานครั้งที่........โครงงานครั้งที่........
โครงงานครั้งที่........
 
25 nucleo celular
25 nucleo celular25 nucleo celular
25 nucleo celular
 
08 proteinas
08 proteinas08 proteinas
08 proteinas
 
Pbl lesson plan a
Pbl lesson plan aPbl lesson plan a
Pbl lesson plan a
 
THE POWER PRINCIPLES OF TEAM BUILDING
THE POWER PRINCIPLES OF TEAM BUILDINGTHE POWER PRINCIPLES OF TEAM BUILDING
THE POWER PRINCIPLES OF TEAM BUILDING
 
FASHION SHOW
FASHION SHOWFASHION SHOW
FASHION SHOW
 
Tax exemption (17 oct 2011)
Tax exemption (17 oct 2011)Tax exemption (17 oct 2011)
Tax exemption (17 oct 2011)
 
Rèdais & IED_Ozturk
Rèdais & IED_OzturkRèdais & IED_Ozturk
Rèdais & IED_Ozturk
 
Collection Development a la Carte v.2
Collection Development a la Carte v.2Collection Development a la Carte v.2
Collection Development a la Carte v.2
 
Dam31303 dti2143 lab sheet 7
Dam31303 dti2143 lab sheet 7Dam31303 dti2143 lab sheet 7
Dam31303 dti2143 lab sheet 7
 
PBL Lesson Plan C
PBL Lesson Plan CPBL Lesson Plan C
PBL Lesson Plan C
 
Get your city ready for #GivingTuesday 2014 - lessons from Baltimore
Get your city ready for #GivingTuesday 2014 - lessons from BaltimoreGet your city ready for #GivingTuesday 2014 - lessons from Baltimore
Get your city ready for #GivingTuesday 2014 - lessons from Baltimore
 
Brochure talleres Lizandra Barbuto y Jhon Croft - Quito Ecuador Abril de 2016
Brochure talleres Lizandra Barbuto y Jhon Croft - Quito Ecuador Abril de 2016Brochure talleres Lizandra Barbuto y Jhon Croft - Quito Ecuador Abril de 2016
Brochure talleres Lizandra Barbuto y Jhon Croft - Quito Ecuador Abril de 2016
 
Intercepting the strategic vector
Intercepting the strategic vectorIntercepting the strategic vector
Intercepting the strategic vector
 
Ance_ProgrammaJESSICA_24052011
Ance_ProgrammaJESSICA_24052011Ance_ProgrammaJESSICA_24052011
Ance_ProgrammaJESSICA_24052011
 
How to turn Facebook 'likes' into leads and customers on auto-pilot.
How to turn Facebook 'likes' into leads and customers on auto-pilot.How to turn Facebook 'likes' into leads and customers on auto-pilot.
How to turn Facebook 'likes' into leads and customers on auto-pilot.
 
Situación actual de las relaciones entre docentes y estudiantes.
Situación actual de las relaciones entre docentes y estudiantes.Situación actual de las relaciones entre docentes y estudiantes.
Situación actual de las relaciones entre docentes y estudiantes.
 

Similaire à Scala at Mind Candy

Nexthink Library - replacing a ruby on rails application with Scala and Spray
Nexthink Library - replacing a ruby on rails application with Scala and SprayNexthink Library - replacing a ruby on rails application with Scala and Spray
Nexthink Library - replacing a ruby on rails application with Scala and SprayMatthew Farwell
 
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMarakana Inc.
 
Scala lens: An introduction
Scala lens: An introductionScala lens: An introduction
Scala lens: An introductionKnoldus Inc.
 
From Pandas to Koalas: Reducing Time-To-Insight for Virgin Hyperloop's Data
From Pandas to Koalas: Reducing Time-To-Insight for Virgin Hyperloop's DataFrom Pandas to Koalas: Reducing Time-To-Insight for Virgin Hyperloop's Data
From Pandas to Koalas: Reducing Time-To-Insight for Virgin Hyperloop's DataDatabricks
 
Learn you some Ansible for great good!
Learn you some Ansible for great good!Learn you some Ansible for great good!
Learn you some Ansible for great good!David Lapsley
 
Deploying MLlib for Scoring in Structured Streaming with Joseph Bradley
Deploying MLlib for Scoring in Structured Streaming with Joseph BradleyDeploying MLlib for Scoring in Structured Streaming with Joseph Bradley
Deploying MLlib for Scoring in Structured Streaming with Joseph BradleyDatabricks
 
The Why and How of Scala at Twitter
The Why and How of Scala at TwitterThe Why and How of Scala at Twitter
The Why and How of Scala at TwitterAlex Payne
 
Scala Frustrations
Scala FrustrationsScala Frustrations
Scala Frustrationstakezoe
 
Scala clojure techday_2011
Scala clojure techday_2011Scala clojure techday_2011
Scala clojure techday_2011Thadeu Russo
 
Infographic on Scala Programming Language
Infographic on Scala Programming LanguageInfographic on Scala Programming Language
Infographic on Scala Programming LanguagePaddy Lock
 
Rafael Bagmanov «Scala in a wild enterprise»
Rafael Bagmanov «Scala in a wild enterprise»Rafael Bagmanov «Scala in a wild enterprise»
Rafael Bagmanov «Scala in a wild enterprise»e-Legion
 
Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)Michael Rys
 
Building Distributed Systems in Scala
Building Distributed Systems in ScalaBuilding Distributed Systems in Scala
Building Distributed Systems in ScalaAlex Payne
 
Introduction to Scala JS
Introduction to Scala JSIntroduction to Scala JS
Introduction to Scala JSKnoldus Inc.
 
Scala final ppt vinay
Scala final ppt vinayScala final ppt vinay
Scala final ppt vinayViplav Jain
 
Scala in a wild enterprise
Scala in a wild enterpriseScala in a wild enterprise
Scala in a wild enterpriseRafael Bagmanov
 
5分で説明する Play! scala
5分で説明する Play! scala5分で説明する Play! scala
5分で説明する Play! scalamasahitojp
 

Similaire à Scala at Mind Candy (20)

Nexthink Library - replacing a ruby on rails application with Scala and Spray
Nexthink Library - replacing a ruby on rails application with Scala and SprayNexthink Library - replacing a ruby on rails application with Scala and Spray
Nexthink Library - replacing a ruby on rails application with Scala and Spray
 
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for Scala
 
Scala lens: An introduction
Scala lens: An introductionScala lens: An introduction
Scala lens: An introduction
 
From Pandas to Koalas: Reducing Time-To-Insight for Virgin Hyperloop's Data
From Pandas to Koalas: Reducing Time-To-Insight for Virgin Hyperloop's DataFrom Pandas to Koalas: Reducing Time-To-Insight for Virgin Hyperloop's Data
From Pandas to Koalas: Reducing Time-To-Insight for Virgin Hyperloop's Data
 
Learn you some Ansible for great good!
Learn you some Ansible for great good!Learn you some Ansible for great good!
Learn you some Ansible for great good!
 
Deploying MLlib for Scoring in Structured Streaming with Joseph Bradley
Deploying MLlib for Scoring in Structured Streaming with Joseph BradleyDeploying MLlib for Scoring in Structured Streaming with Joseph Bradley
Deploying MLlib for Scoring in Structured Streaming with Joseph Bradley
 
Quick introduction to scala
Quick introduction to scalaQuick introduction to scala
Quick introduction to scala
 
The Why and How of Scala at Twitter
The Why and How of Scala at TwitterThe Why and How of Scala at Twitter
The Why and How of Scala at Twitter
 
Scala Frustrations
Scala FrustrationsScala Frustrations
Scala Frustrations
 
Devoxx
DevoxxDevoxx
Devoxx
 
Scala clojure techday_2011
Scala clojure techday_2011Scala clojure techday_2011
Scala clojure techday_2011
 
Infographic on Scala Programming Language
Infographic on Scala Programming LanguageInfographic on Scala Programming Language
Infographic on Scala Programming Language
 
Rafael Bagmanov «Scala in a wild enterprise»
Rafael Bagmanov «Scala in a wild enterprise»Rafael Bagmanov «Scala in a wild enterprise»
Rafael Bagmanov «Scala in a wild enterprise»
 
Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)Big Data Processing with .NET and Spark (SQLBits 2020)
Big Data Processing with .NET and Spark (SQLBits 2020)
 
Building Distributed Systems in Scala
Building Distributed Systems in ScalaBuilding Distributed Systems in Scala
Building Distributed Systems in Scala
 
Introduction to Scala JS
Introduction to Scala JSIntroduction to Scala JS
Introduction to Scala JS
 
Scala final ppt vinay
Scala final ppt vinayScala final ppt vinay
Scala final ppt vinay
 
Scala in a wild enterprise
Scala in a wild enterpriseScala in a wild enterprise
Scala in a wild enterprise
 
js.pptx
js.pptxjs.pptx
js.pptx
 
5分で説明する Play! scala
5分で説明する Play! scala5分で説明する Play! scala
5分で説明する Play! scala
 

Dernier

LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0DanBrown980551
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightSafe Software
 
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTSIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTxtailishbaloch
 
How to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxHow to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxKaustubhBhavsar6
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInThousandEyes
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)codyslingerland1
 
Patch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updatePatch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updateadam112203
 
Where developers are challenged, what developers want and where DevEx is going
Where developers are challenged, what developers want and where DevEx is goingWhere developers are challenged, what developers want and where DevEx is going
Where developers are challenged, what developers want and where DevEx is goingFrancesco Corti
 
IT Service Management (ITSM) Best Practices for Advanced Computing
IT Service Management (ITSM) Best Practices for Advanced ComputingIT Service Management (ITSM) Best Practices for Advanced Computing
IT Service Management (ITSM) Best Practices for Advanced ComputingMAGNIntelligence
 
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechWebinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechProduct School
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNeo4j
 
From the origin to the future of Open Source model and business
From the origin to the future of  Open Source model and businessFrom the origin to the future of  Open Source model and business
From the origin to the future of Open Source model and businessFrancesco Corti
 
UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4DianaGray10
 
Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Muhammad Tiham Siddiqui
 
Technical SEO for Improved Accessibility WTS FEST
Technical SEO for Improved Accessibility  WTS FESTTechnical SEO for Improved Accessibility  WTS FEST
Technical SEO for Improved Accessibility WTS FESTBillieHyde
 
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox
 
CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024Brian Pichman
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1DianaGray10
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameKapil Thakar
 
Introduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationIntroduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationKnoldus Inc.
 

Dernier (20)

LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0LF Energy Webinar - Unveiling OpenEEMeter 4.0
LF Energy Webinar - Unveiling OpenEEMeter 4.0
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTSIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
 
How to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptxHow to become a GDSC Lead GDSC MI AOE.pptx
How to become a GDSC Lead GDSC MI AOE.pptx
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
 
The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)The New Cloud World Order Is FinOps (Slideshow)
The New Cloud World Order Is FinOps (Slideshow)
 
Patch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 updatePatch notes explaining DISARM Version 1.4 update
Patch notes explaining DISARM Version 1.4 update
 
Where developers are challenged, what developers want and where DevEx is going
Where developers are challenged, what developers want and where DevEx is goingWhere developers are challenged, what developers want and where DevEx is going
Where developers are challenged, what developers want and where DevEx is going
 
IT Service Management (ITSM) Best Practices for Advanced Computing
IT Service Management (ITSM) Best Practices for Advanced ComputingIT Service Management (ITSM) Best Practices for Advanced Computing
IT Service Management (ITSM) Best Practices for Advanced Computing
 
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechWebinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
 
Novo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4jNovo Nordisk's journey in developing an open-source application on Neo4j
Novo Nordisk's journey in developing an open-source application on Neo4j
 
From the origin to the future of Open Source model and business
From the origin to the future of  Open Source model and businessFrom the origin to the future of  Open Source model and business
From the origin to the future of Open Source model and business
 
UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4UiPath Studio Web workshop series - Day 4
UiPath Studio Web workshop series - Day 4
 
Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)
 
Technical SEO for Improved Accessibility WTS FEST
Technical SEO for Improved Accessibility  WTS FESTTechnical SEO for Improved Accessibility  WTS FEST
Technical SEO for Improved Accessibility WTS FEST
 
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through TokenizationStobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
Stobox 4: Revolutionizing Investment in Real-World Assets Through Tokenization
 
CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024
 
UiPath Studio Web workshop series - Day 1
UiPath Studio Web workshop series  - Day 1UiPath Studio Web workshop series  - Day 1
UiPath Studio Web workshop series - Day 1
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First Frame
 
Introduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationIntroduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its application
 

Scala at Mind Candy

  • 1. Scala at MindCandy Sean Parsons & Mark Baker @seanparsons @markltbaker
  • 4. Why we chose Scala Familiarity with the JVM. Transforming collections, Guava is still a bit of a blunt tool. Static types are cool. Of the non-Java JVM languages seemed to have the bigger community. Commercial Support
  • 5. How we used Scala - Services (1)
  • 6. How we used Scala - Services (1)
  • 7. How we used Scala - Services (2)
  • 8. How we used Scala - Services (2) User: 1
  • 9. How we used Scala - Services (2) User: 1 Game
  • 10. How we used Scala - Services (2) User: 1 Game News
  • 11. How we used Scala - Services (2) User: 1 Game News BFFs
  • 12. How we used Scala - Services (2) User: 1 Game News BFFs GameDB
  • 13. How we used Scala - Services (2) Feed: 7 User: 1 Game News Feed: 8 Feed: 9 BFFs GameDB
  • 14. How we used Scala - Services (3)
  • 15. How we used Scala - Services (3) User: 7
  • 16. How we used Scala - Services (3) User: 7 News
  • 17. How we used Scala - Services (3) Feed: 7 User: 7 News
  • 18. How we used Scala - Services (3) Feed: 7 User: 7 News Users
  • 19. How we used Scala - Services (3) Feed: 7 User: 7 News Users GameDB
  • 20. How we used Scala - Services (4) Simpler design Unfiltered & Akka Scalacheck is a lifesaver Used the appropriate paradigm
  • 22. Now the story from Tools...
  • 23. Why Scala for Tools Fewer dependencies Easy to distribute tools Lots of useful Java libs Move from Python "felt good" XML / Pattern match features Language Scalability
  • 24. How we used Scala - Tools (1) REPL investigations Quick Scripts Setup Tool  Play-based websites
  • 25. How we used Scala - Tools (2) private val HudsonColorRegex = new Regex(""".*"color":"(w+)".*""") private def jenkinsBuildStatus(build:models.AutomatedBuild):String = { val hudsonUrl = build.url + "/api/json" val result = scala.io.Source.fromURL(hudsonUrl).getLines().mkString val HudsonColorRegex(color) = result color match { case "blue" => GOOD case "red" => BAD case "aborted" => BAD case "disabled" => DISABLED case "grey_anime" => UNKNOWN // build has not run yet... case _ => unknownStatus("can't match jenkins build status color of: " + color) } }
  • 26. How we used Scala - Tools (3) getCachedFileSizes(path, revision) .groupBy{ _.size / groupByBytes } .map { case (group,files) => group -> files.size } .toList .sorted .foreach { case (group, count) => data.addRowFromValues( humanGroupSize(group * groupByBytes, groupByBytes), new Integer(count)) }
  • 28. Our Scala Experience Migration from dynamic languages Clean expression of algorithms – What, not How Immutability and Actors = Scale! The REPL
  • 30. Our Scala Experience Training - lots of syntax to learn New language & New paradigms Tools maturity Compiler errors
  • 31. Our Scala Experience Training - lots of syntax to learn New language & New paradigms Tools maturity Compiler errors Still learning about maintenance behaviour
  • 32. Future of Scala at Mind Candy
  • 33. Future of Scala at Mind Candy Tools Scripts Services Training

Notes de l'éditeur

  1. Who we areWhat is scalaWhy we chose itHow we use itWhy you should use it\n\naim for 25 mins tops\n
  2. http://mindcandy.com/\n\nLet’s see a show of hands... and who has actually played?Mindcandy - we make Moshi Monsters, have millions of users and digital entertainment is heart of our company\n\nSean - "Back end" developer\nMark - "Tools" developer\n \n
  3. http://mindcandy.com/\n\nLet’s see a show of hands... and who has actually played?Mindcandy - we make Moshi Monsters, have millions of users and digital entertainment is heart of our company\n\nSean - "Back end" developer\nMark - "Tools" developer\n \n
  4. (not needed for Scala Days)\n\nIMPORTANT HIGHLIGHTS ONLY\n\nWhat are the most relevant bits to us - 5 mins total\n\nStandard blurb is\nScala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.\n\nso what does that mean?\n\nit's functional AND object oriented\n\nit's type safe and uses static typing with compile-time type checks\n\nit compiles to Java Bytecode, runs on the Java Virtual Machine and can call any Java library / be called by java libraries very easily\n\nit can infer types at compile time so you don't have to write them again and again (and again)\n\nit has a REPL console\n\nfocus on productivity / not repeating boilerplate\n\n\nhttp://www.scala-lang.org/node/104 is good reference\nLanguage features of scala\nTraits and Type parameters\nthough you don't need to use (generics) often, they are convenient for library writers\n\nNO MACROS OR TEMPLATES!\n
  5. \n
  6. News feed for the best friends of users.\n\nWhen a best friend does something of note, it should appear in here.\n\nPolled from the client.\n
  7. News feed for the best friends of users.\n\nWhen a best friend does something of note, it should appear in here.\n\nPolled from the client.\n
  8. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  9. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  10. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  11. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  12. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  13. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  14. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  15. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  16. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  17. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  18. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  19. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  20. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  21. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  22. Write phase.\n\n- User 1 performs some action that has a news item associated with it.\n- News item pushed through HTTP to the news service, service returns immediately once the request has been parsed.\n- News service looks up users that have marked user 1 as a best friend from Cassandra.\n- If necessary populates Cassandra from the game database.\n- Performs a fanout of the news item to individual feeds for each user.\n
  23. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  24. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  25. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  26. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  27. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  28. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  29. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  30. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  31. Read phase.\n\n- Front-end polls news service.\n- News service performs a read against the feed for said user.\n- User information for the users mentioned in those news items are looked up from Cassandra.\n- Users who are not populated in the cache are eliminated from the response and a message is fired to populate that user cache asynchronously.\n\nDesigned to be overly cautious and easy on the infrastructure as it was the first project at Mind Candy to use Scala/Cassandra/Akka.\n
  32. Wanted to avoid the monolithic WAR file accompanied by Tomcat, wired up with Spring.\n\nUsed implicit constructor arguments to perform a simple form of dependency injection, which avoids circular dependencies. However be careful of SI-5618 as specifying types can cause things to be wired with nulls out of order.\n\nUnfiltered provides a clean way to do REST like services that can be easily separated to use elsewhere. Wanted to make components.\n\nAkka allowed us to build a primitive CQRS system internally to the application, creating read and write paths.\n\nIf you're not using Scalacheck, you should be. Helpful to catch the issues you don't think about. Allows me to assume that I'm stupid and that I wont think of everything.\n\nMore a general point, we can write OO/functional/actor based code where it fits most appropriately.\n
  33. \n
  34. From a Tools/Infrastructure POV\n\nPreviously had used Python\n\nlots of 'pure java' libraries I can use e.g. talk to Subversion so few BINARY dependencies\n\nwe already have a JVM on every machine - desktop and server\n\nMakes for very easy deployment of tools to users -- it's just a (big) .jar file\n\nFewer platform differences between Mac/Linux/Win compared to, say, Python\n\nComing from Python, code feels very familiar - terse but can understand it later!\n\nLanguage scalability - from REPL tests / scripts up to big apps - Tools/Infrastructure covers a LOT of different code sizes so having one language that works everywhere is really useful for me\n
  35. Testing pattern matching / parsing with REPL\n\nQuick scripts - e.g. migration of DB update scripts from folder-of-folders to a flat list. -> clean when done functionally\n\nsetup tool using Swing UI\n\nPlay based websites - migrating to play 2\n\n\ntalking to RESTful web services using XML pattern matching\n\nbuilt in regexes make it cleaner\n
  36. PLAY based site\ngood if migrating from Django I think\n\ntwitter for JSON parsing - similar to python's json parse/dump\n\npattern matching / regex parsing make life easier\n\neverything returning a value = cleaner code\n
  37. populating a data table \nties together Java subversion lib, \njava google data visualisation lib, scala logic!\n\nI'm not saying its good Scala, but I found it quite easy to write / understand\n
  38. Game developers especially - great migration path from dynamic scripting languages (Python, Ruby, Lua) that you may already be using.\n\n Looks like a dynamic language, scales up like a static language.\n\nFunctional programming can give very clean, well expressed algorithms so you can focus on that, not on boilerplate.\n\nStrong focus on immutability and message passing means its easier to build scalable/reliable services -- which will strongly interest Game Devs these days!\ne.g. twitter moved from Ruby -> Scala\n\nScala books/docs great!\n\n
  39. Game developers especially - great migration path from dynamic scripting languages (Python, Ruby, Lua) that you may already be using.\n\n Looks like a dynamic language, scales up like a static language.\n\nFunctional programming can give very clean, well expressed algorithms so you can focus on that, not on boilerplate.\n\nStrong focus on immutability and message passing means its easier to build scalable/reliable services -- which will strongly interest Game Devs these days!\ne.g. twitter moved from Ruby -> Scala\n\nScala books/docs great!\n\n
  40. large amount of syntax to learn\nfeatures better for library writers than code authors sometimes?\nBackwards compatibility - e.g. play 2 lack of Magic[T]\n\nObviously, you can write bad code in it, but no worse (I would argue) than C++ with macros/templates etc. \noperator overloading is still scary\n\n\n
  41. large amount of syntax to learn\nfeatures better for library writers than code authors sometimes?\nBackwards compatibility - e.g. play 2 lack of Magic[T]\n\nObviously, you can write bad code in it, but no worse (I would argue) than C++ with macros/templates etc. \noperator overloading is still scary\n\n\n
  42. large amount of syntax to learn\nfeatures better for library writers than code authors sometimes?\nBackwards compatibility - e.g. play 2 lack of Magic[T]\n\nObviously, you can write bad code in it, but no worse (I would argue) than C++ with macros/templates etc. \noperator overloading is still scary\n\n\n
  43. large amount of syntax to learn\nfeatures better for library writers than code authors sometimes?\nBackwards compatibility - e.g. play 2 lack of Magic[T]\n\nObviously, you can write bad code in it, but no worse (I would argue) than C++ with macros/templates etc. \noperator overloading is still scary\n\n\n
  44. currently using it in 2 production services & as standard language for Tools/Infrastructure\n(alongside Java/Python)\nWill continue to train people up in Scala and use it more\nStill learning what  best "coding standards" will be for Scala to allow people to understand each other's code\n
  45. currently using it in 2 production services & as standard language for Tools/Infrastructure\n(alongside Java/Python)\nWill continue to train people up in Scala and use it more\nStill learning what  best "coding standards" will be for Scala to allow people to understand each other's code\n
  46. \n