SlideShare a Scribd company logo
Introducing Scala to your
     Java/Ruby Shop
      My experiences at IGN



                           Manish Pandit
                   Silicon Valley Code Camp ‘12
                            Oct 7th, 2012
About me

             Manish Pandit
      Director of Engineering, IGN
             @lobster1234

       linkedin.com/in/mpandit
About IGN
We are a leading online media and services
company
obsessed with gaming and entertainment.

56MM Monthly Unique Views
737MM Monthly Page Views
20MM Monthly Video Views
My Objective
Is:
To share my story of introducing Scala to IGN, and
(hopefully) show you the path to enlightenment.


Isn't:
To incite a functional vs. imperative, or Scala vs. ____
debate.
The IGN Tech Stack
Best tool for the job
• Front End : JS, CSS3, HTML5, backbone,
  Coffeescript, jQuery
• Middle Tier : ZF2 (PHP), Rails
• APIs : Scala, some Java
• Persistence : MongoDB, MySQL, Redis
• Search : ElasticSearch
• Caching : Memcached, Varnish
APIs at IGN : Numbers
• ~5 Billion requests a month
• Average Response time of under
  20ms on cache misses
• 17 APIs between Social, OAuth,
  and Content
• Hardest hit APIs doing about
  25K RPM at peak
The Kitchen Sink
• CMS – JSPs talking to Oracle DB and some Java
  services
• V1 API : Java Services using Oracle DB with
  Memcached
• V2 API : Rails based API layer using MongoDB and a
  Java/Memcached front cache
• Lots of duct tape like messaging and cron jobs for
  simple tasks
• Too diverse of a stack in the API infrastructure
The API Evolution : V3 [2012]
• A fresh look at the APIs and IGN’s direction
• First attempt to
  – Integrate all content types
  – Open up the APIs to external consumers
  – Evolve the CMS, traditionally a monolithic system
  – ElasticSearch
  – Varnish Response Caching
• A learning opportunity for traditional Java
  stack engineers
Roadblocks
• Resistance to change
  – Culture
  – Willingness and commitment
• Too many choices – making the right pick
  – Involve every one
  – Do not decide by committee, decide by learning
  – Time box and measure everything
  – Be accountable, as you’re looked upon as the
    expert
The hunt for…
•   A runtime as fast, if not faster than Java
•   Concise, yet expressive
•   Less boilerplate
•   Smooth learning curve and ramp up
•   Re-use ecosystem of libraries
•   Growing adoption and developer velocity
•   Built in support for concurrency
•   Fast and fun development
•   Next level of programming – disrupt!
Why Scala : Strategic Reasons
• Evolve the talent brand along side evolving
  the platform
• Establish an API platform by replacing
  “rewrite” with learning instead of porting
• Start thinking functional
• Align with the leaders in the APIs
• Get involved with a technology as it is evolving
  (vs. established). Helps with influence.
Why Scala : Tactical Reasons
• Performance tied to cores than processor
  speed, i.e. concurrency
• Ideal for API development – (relatively) simple
  to handle concurrency and immutability
• JVM based = Performance
• Re-use Java toolkits and libraries
• Concise, yet expressive code
• Actor model makes the difficult parts easy
Why Scala : Tactical Reasons
•   Richer Collections API
•   Traits enabling Mix-Ins and behavior re-use
•   Statically Typed w/Type inference
•   Functional, but not alien (it can be!)
•   REPL
Yes, Virginia, Scala is hard : DPP
So, how can you figure out if Scala will be "easy" or "hard" for your
organization:
•Your company has speakers at JavaOne, OSCON, Strangle Loop, QCon: Scala
will be easy
•Lunch-time discussions involve the criteria for moving from a developer to a
senior developer: Scala will be hard
•Your developers can write code in NotePad if they have to: Easy
•Your developers stare blankly or say 3 "Hail Marys" when they hear the
name "Zed Shaw": Scala == Hard
•Developers all follow Dean Wampler on Twitter: Scala Easy
•Your developers come in at 9:15 and leave before 6 and don't check work
email at night: Hard

   http://blog.goodstuff.im/yes-virginia-scala-is-hard
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Picking up Scala : Week 1
• Scala for Java Developers fast-tracked the
  learning
• Syntax Familiarity
• Java without semicolons?
     def total(nums: List[Int]) :Int = {
       var sum:Int=0
       for(num<-nums) {
         sum+=num
       }
       sum
     }
Picking up Scala : Week 4
• Reduce the lines of code, embrace
  immutability, use the functional paradigms
  built into the language
• Unmystrify the implicits magic
    nums.foldLeft(0)((n,c) => n+c)
Picking up Scala : Today
• Focus on immutability
• Think functional – with the knowledge gained
  from using the functional aspects of the
  language, build control abstractions
• Explore and implement ScalaZ
• Keep learning, and applying
• Move all the Actor processing to Akka
Less Boilerplate
  public class HelloWorld{
     public static void main(String... args){
           System.out.println("Hello, World!");
     }
  }

  object HelloWorld extends App{
     println("Hello, World!")
  }

  scala> println("Hello, World!")
Expressive, yet concise
  val x = if(n%2==0) "Even" else "Odd"

  val x = for(i <- 1 to 10) yield i*2

  val x = for(i <- 1 to 10; if(i%2==0)) yield i*2

  val y = 20 match{
     case p if(p%2==0) => "Even"
     case _ => "Odd"
  }

  val largest = List(1,5,2,6).foldLeft(0)((a,b)=> if(a>b)
  a else b)
Less pain points
  No more dreaded null or throwing unwanted exceptions :
  Use Option[T]

  def thisMayReturnNull[T](x:T):Option[T]={
     if(true) Some(x) else None
  }


  No more creating classes only to return more than 1 value :
  Use Tuples

  def doublePair(x:Int)= (x,x*2)
Try-catch mess
try{
       //Construct a URL which can throw a MalformedURLException
       //do something with a URL which can throw IOException
       //do something with string encoding which can throw
       // UnsupportedEncodingException
 } catch{
   case mal:MalformedURLException => //something
   case ioe: IOException => //something
   case e: Exception => //something
 }
Type Inference
scala> val x = "Sunday"
x: java.lang.String = Sunday

scala> def x(n:Int) = n*3
x: (n: Int)Int

scala> 1 to 5
res2: scala.collection.immutable.Range.Inclusive =
Range(1, 2, 3, 4, 5)

scala> def x = if(true) Left("Yes!") else Right(new
Exception("Didn’t work out!"))
x: Product with Serializable with
Either[java.lang.String,java.lang.Exception]
Dynamic Mix-ins
class Home(bedrooms:Int=3,bathrooms:Double=2.5)

trait Garage{
  def park(n:Int) = println("Parking " + n + "cars")
}

val someHome = new Home

val someHomeWithGarage = new Home with Garage

someHomeWithGarage.park(2)
Concurrency
• Actors make concurrency so much easier
  – Messaging vs. Blocking
  – Lightweight, 300-500 bytes per instance
  – Isolated
Scala API Components
•   Scalatra
•   Lift-MongoRecord for MongoDB
•   Casbah for MongoDB
•   PlayFramework 2
•   Actors for tasks like syndication
•   sbt and Maven for Builds
•   MongoDB for persistence
Other API Components
•   Varnish Cache
•   Elasticsearch
•   Yammer Metrics (ping, healthcheck)
•   Swagger (self-documenting RESTful APIs)
•   3Scale for Partner APIs
•   IntelliJ IDEA and Eclipse with ScalaIDE
•   PlayFramework 2.0 (New!)
•   ScalaTest for Testing
Challenges with Scala                             *


• Steepness of the Learning curve depends
  entirely on your org culture
• Scala is what you make of it
   • http://scalaz.github.com/scalaz/scalaz-2.9.1-
     6.0.4/doc.sxr/scalaz/BKTree.scala.html

   • Middle Ground between Simplicity and,
     well..elegance



* None of these challenges outweigh the benefits. They’re just something to
be aware of.
Challenges with Scala
• Slow compilation based on the source
• No (binary) compatibility of dependencies for
  the major releases (2.8, 2.9, 2.10(?))
• Tooling not as rich as Java
  – Changing (rapidly) with Typesafe investing in
    ScalaIDE
  – ScalaIDE comes with a Scala Worksheet, which is
    like REPL but richer
Lessons Learned : Culture
• Culture of Meetups, Hack
  Nights and Code Jams
• Being able to connect with
  the contributors and
  language creators
• Willingness to invest in
  learning, evolving vs.
  maintaining
Lessons Learned : Team
•   Small team (~5 engineers)
•   Java background helped a lot
•   10% time set aside for skill building
•   Learn and share
•   It is a commitment
•   Communication!
Lessons Learned : Material
• Books that have exercises, so you
  can quantify your learning.
• Online tutorials
• StackOverflow
• Coursera : A course on Functional
  Programming by Martin Odersky
Resources
• Books
   – Programming in Scala by Odersky
   – Scala for the Impatient by Horstmann
• Interwebz
   – http://debasishg.blogspot.com
   – http://www.reddit.com/r/scala
   – http://stackoverflow.com/tags/scala/info
   – http://twitter.github.com/scala_school
   – https://www.coursera.org/course/progfun
scala> case class Me(name:String="Manish
Pandit",twitter:String="@lobster1234")
defined class Me

scala> val me = new Me
me: Me = Me(Manish Pandit,@lobster1234)

scala> println(“Questions!”)
Questions!
Ad

More Related Content

What's hot (20)

Scala for android
Scala for androidScala for android
Scala for android
Tack Mobile
 
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to Scala
Derek Chen-Becker
 
From Java to Ruby...and Back
From Java to Ruby...and BackFrom Java to Ruby...and Back
From Java to Ruby...and Back
Anil Hemrajani
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updates
Vinay H G
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
elliando dias
 
The Economies of Scaling Software
The Economies of Scaling SoftwareThe Economies of Scaling Software
The Economies of Scaling Software
Abdelmonaim Remani
 
Java 101 intro to programming with java
Java 101  intro to programming with javaJava 101  intro to programming with java
Java 101 intro to programming with java
Hawkman Academy
 
Java unit1 a- History of Java to string
Java unit1 a- History of Java to stringJava unit1 a- History of Java to string
Java unit1 a- History of Java to string
SivaSankari36
 
Scala's evolving ecosystem- Introduction to Scala.js
Scala's evolving ecosystem- Introduction to Scala.jsScala's evolving ecosystem- Introduction to Scala.js
Scala's evolving ecosystem- Introduction to Scala.js
Knoldus Inc.
 
PROGRAMMING IN JAVA- unit 4-part II
PROGRAMMING IN JAVA- unit 4-part IIPROGRAMMING IN JAVA- unit 4-part II
PROGRAMMING IN JAVA- unit 4-part II
SivaSankari36
 
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
Ngoc Dao
 
Java 101 Intro to Java Programming
Java 101 Intro to Java ProgrammingJava 101 Intro to Java Programming
Java 101 Intro to Java Programming
agorolabs
 
Java basics at Lara Technologies
Java basics at Lara TechnologiesJava basics at Lara Technologies
Java basics at Lara Technologies
laratechnologies
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
jistr
 
The Dark Art of Rails Plugins (2008)
The Dark Art of Rails Plugins (2008)The Dark Art of Rails Plugins (2008)
The Dark Art of Rails Plugins (2008)
lazyatom
 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6
Rob Eisenberg
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
Atlassian
 
JScala. Write your JavaScript in Scala
JScala. Write your JavaScript in ScalaJScala. Write your JavaScript in Scala
JScala. Write your JavaScript in Scala
Alexander Nemish
 
PROGRAMMING IN JAVA- unit 5-part II
PROGRAMMING IN JAVA- unit 5-part IIPROGRAMMING IN JAVA- unit 5-part II
PROGRAMMING IN JAVA- unit 5-part II
SivaSankari36
 
Scala: An OO Surprise
Scala: An OO SurpriseScala: An OO Surprise
Scala: An OO Surprise
Apostolos Syropoulos
 
Scala for android
Scala for androidScala for android
Scala for android
Tack Mobile
 
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to Scala
Derek Chen-Becker
 
From Java to Ruby...and Back
From Java to Ruby...and BackFrom Java to Ruby...and Back
From Java to Ruby...and Back
Anil Hemrajani
 
Java 8 selected updates
Java 8 selected updatesJava 8 selected updates
Java 8 selected updates
Vinay H G
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
elliando dias
 
The Economies of Scaling Software
The Economies of Scaling SoftwareThe Economies of Scaling Software
The Economies of Scaling Software
Abdelmonaim Remani
 
Java 101 intro to programming with java
Java 101  intro to programming with javaJava 101  intro to programming with java
Java 101 intro to programming with java
Hawkman Academy
 
Java unit1 a- History of Java to string
Java unit1 a- History of Java to stringJava unit1 a- History of Java to string
Java unit1 a- History of Java to string
SivaSankari36
 
Scala's evolving ecosystem- Introduction to Scala.js
Scala's evolving ecosystem- Introduction to Scala.jsScala's evolving ecosystem- Introduction to Scala.js
Scala's evolving ecosystem- Introduction to Scala.js
Knoldus Inc.
 
PROGRAMMING IN JAVA- unit 4-part II
PROGRAMMING IN JAVA- unit 4-part IIPROGRAMMING IN JAVA- unit 4-part II
PROGRAMMING IN JAVA- unit 4-part II
SivaSankari36
 
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
Ngoc Dao
 
Java 101 Intro to Java Programming
Java 101 Intro to Java ProgrammingJava 101 Intro to Java Programming
Java 101 Intro to Java Programming
agorolabs
 
Java basics at Lara Technologies
Java basics at Lara TechnologiesJava basics at Lara Technologies
Java basics at Lara Technologies
laratechnologies
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
jistr
 
The Dark Art of Rails Plugins (2008)
The Dark Art of Rails Plugins (2008)The Dark Art of Rails Plugins (2008)
The Dark Art of Rails Plugins (2008)
lazyatom
 
The New JavaScript: ES6
The New JavaScript: ES6The New JavaScript: ES6
The New JavaScript: ES6
Rob Eisenberg
 
Polyglot Plugin Programming
Polyglot Plugin ProgrammingPolyglot Plugin Programming
Polyglot Plugin Programming
Atlassian
 
JScala. Write your JavaScript in Scala
JScala. Write your JavaScript in ScalaJScala. Write your JavaScript in Scala
JScala. Write your JavaScript in Scala
Alexander Nemish
 
PROGRAMMING IN JAVA- unit 5-part II
PROGRAMMING IN JAVA- unit 5-part IIPROGRAMMING IN JAVA- unit 5-part II
PROGRAMMING IN JAVA- unit 5-part II
SivaSankari36
 

Viewers also liked (20)

Acacia Research and Learning Forum Tutorial 2
Acacia Research and Learning Forum Tutorial 2Acacia Research and Learning Forum Tutorial 2
Acacia Research and Learning Forum Tutorial 2
Acacia Research & Learning Forum 2009
 
πώςθα δημιουργήσετε ένα σενάριο διδασκαλίας
πώςθα δημιουργήσετε ένα  σενάριο διδασκαλίαςπώςθα δημιουργήσετε ένα  σενάριο διδασκαλίας
πώςθα δημιουργήσετε ένα σενάριο διδασκαλίας
Christos Gotzaridis
 
ΦΕΚ ΔΙΔΑΣΚΑΛΙΑΣ ΤΗΣ ΦΥΣΙΚΗΣ Α ΛΥΚΕΙΟΥ 2011-12 διδασκαλιασ τησ φυσικησ α λυκειου
ΦΕΚ ΔΙΔΑΣΚΑΛΙΑΣ ΤΗΣ ΦΥΣΙΚΗΣ Α ΛΥΚΕΙΟΥ 2011-12 διδασκαλιασ τησ φυσικησ α λυκειουΦΕΚ ΔΙΔΑΣΚΑΛΙΑΣ ΤΗΣ ΦΥΣΙΚΗΣ Α ΛΥΚΕΙΟΥ 2011-12 διδασκαλιασ τησ φυσικησ α λυκειου
ΦΕΚ ΔΙΔΑΣΚΑΛΙΑΣ ΤΗΣ ΦΥΣΙΚΗΣ Α ΛΥΚΕΙΟΥ 2011-12 διδασκαλιασ τησ φυσικησ α λυκειου
Christos Gotzaridis
 
Political Cartoons
Political CartoonsPolitical Cartoons
Political Cartoons
Amy
 
Katechismus 11 - 12 jarigen - De Tien Geboden
Katechismus 11 - 12 jarigen - De Tien GebodenKatechismus 11 - 12 jarigen - De Tien Geboden
Katechismus 11 - 12 jarigen - De Tien Geboden
N Couperus
 
Onlinetools&amp;Job Search2010
Onlinetools&amp;Job Search2010Onlinetools&amp;Job Search2010
Onlinetools&amp;Job Search2010
Cindy Edwards
 
Programming Ruby On Rails
Programming Ruby On RailsProgramming Ruby On Rails
Programming Ruby On Rails
Eiji Sakai
 
Knowwi Intro 2010
Knowwi Intro 2010Knowwi Intro 2010
Knowwi Intro 2010
marklaszlo
 
Katechismus 11 - 12 jarigen - De Geloofsbelijdenis
Katechismus 11 - 12 jarigen - De GeloofsbelijdenisKatechismus 11 - 12 jarigen - De Geloofsbelijdenis
Katechismus 11 - 12 jarigen - De Geloofsbelijdenis
N Couperus
 
Research
ResearchResearch
Research
boulder75tomahawk
 
Pp Kee Dome Web
Pp Kee Dome WebPp Kee Dome Web
Pp Kee Dome Web
Kee Safety
 
Future Agenda Future Of Energy
Future Agenda   Future Of EnergyFuture Agenda   Future Of Energy
Future Agenda Future Of Energy
Future Agenda
 
Evolving IGN’s New APIs with Scala
 Evolving IGN’s New APIs with Scala Evolving IGN’s New APIs with Scala
Evolving IGN’s New APIs with Scala
Manish Pandit
 
Photo Album
Photo AlbumPhoto Album
Photo Album
cchannasch
 
Research writing introduction
Research writing  introductionResearch writing  introduction
Research writing introduction
Angelina Merritt
 
Makeup Consultations & Professional Makeup: A Beautiful Education
Makeup Consultations & Professional Makeup: A Beautiful EducationMakeup Consultations & Professional Makeup: A Beautiful Education
Makeup Consultations & Professional Makeup: A Beautiful Education
Lillybeth: A Beautiful Education
 
Danish mediaassoc conf 2014 (condenast)
Danish mediaassoc conf 2014 (condenast)Danish mediaassoc conf 2014 (condenast)
Danish mediaassoc conf 2014 (condenast)
Rick (Richard) Welch
 
ThirdSpace: orchestrating collaborative activities in PLEs for formal learning
ThirdSpace: orchestrating collaborative activities in PLEs for formal learningThirdSpace: orchestrating collaborative activities in PLEs for formal learning
ThirdSpace: orchestrating collaborative activities in PLEs for formal learning
Yvan Peter
 
1 3
1 31 3
1 3
Angelina Merritt
 
πώςθα δημιουργήσετε ένα σενάριο διδασκαλίας
πώςθα δημιουργήσετε ένα  σενάριο διδασκαλίαςπώςθα δημιουργήσετε ένα  σενάριο διδασκαλίας
πώςθα δημιουργήσετε ένα σενάριο διδασκαλίας
Christos Gotzaridis
 
ΦΕΚ ΔΙΔΑΣΚΑΛΙΑΣ ΤΗΣ ΦΥΣΙΚΗΣ Α ΛΥΚΕΙΟΥ 2011-12 διδασκαλιασ τησ φυσικησ α λυκειου
ΦΕΚ ΔΙΔΑΣΚΑΛΙΑΣ ΤΗΣ ΦΥΣΙΚΗΣ Α ΛΥΚΕΙΟΥ 2011-12 διδασκαλιασ τησ φυσικησ α λυκειουΦΕΚ ΔΙΔΑΣΚΑΛΙΑΣ ΤΗΣ ΦΥΣΙΚΗΣ Α ΛΥΚΕΙΟΥ 2011-12 διδασκαλιασ τησ φυσικησ α λυκειου
ΦΕΚ ΔΙΔΑΣΚΑΛΙΑΣ ΤΗΣ ΦΥΣΙΚΗΣ Α ΛΥΚΕΙΟΥ 2011-12 διδασκαλιασ τησ φυσικησ α λυκειου
Christos Gotzaridis
 
Political Cartoons
Political CartoonsPolitical Cartoons
Political Cartoons
Amy
 
Katechismus 11 - 12 jarigen - De Tien Geboden
Katechismus 11 - 12 jarigen - De Tien GebodenKatechismus 11 - 12 jarigen - De Tien Geboden
Katechismus 11 - 12 jarigen - De Tien Geboden
N Couperus
 
Onlinetools&amp;Job Search2010
Onlinetools&amp;Job Search2010Onlinetools&amp;Job Search2010
Onlinetools&amp;Job Search2010
Cindy Edwards
 
Programming Ruby On Rails
Programming Ruby On RailsProgramming Ruby On Rails
Programming Ruby On Rails
Eiji Sakai
 
Knowwi Intro 2010
Knowwi Intro 2010Knowwi Intro 2010
Knowwi Intro 2010
marklaszlo
 
Katechismus 11 - 12 jarigen - De Geloofsbelijdenis
Katechismus 11 - 12 jarigen - De GeloofsbelijdenisKatechismus 11 - 12 jarigen - De Geloofsbelijdenis
Katechismus 11 - 12 jarigen - De Geloofsbelijdenis
N Couperus
 
Pp Kee Dome Web
Pp Kee Dome WebPp Kee Dome Web
Pp Kee Dome Web
Kee Safety
 
Future Agenda Future Of Energy
Future Agenda   Future Of EnergyFuture Agenda   Future Of Energy
Future Agenda Future Of Energy
Future Agenda
 
Evolving IGN’s New APIs with Scala
 Evolving IGN’s New APIs with Scala Evolving IGN’s New APIs with Scala
Evolving IGN’s New APIs with Scala
Manish Pandit
 
Research writing introduction
Research writing  introductionResearch writing  introduction
Research writing introduction
Angelina Merritt
 
Makeup Consultations & Professional Makeup: A Beautiful Education
Makeup Consultations & Professional Makeup: A Beautiful EducationMakeup Consultations & Professional Makeup: A Beautiful Education
Makeup Consultations & Professional Makeup: A Beautiful Education
Lillybeth: A Beautiful Education
 
Danish mediaassoc conf 2014 (condenast)
Danish mediaassoc conf 2014 (condenast)Danish mediaassoc conf 2014 (condenast)
Danish mediaassoc conf 2014 (condenast)
Rick (Richard) Welch
 
ThirdSpace: orchestrating collaborative activities in PLEs for formal learning
ThirdSpace: orchestrating collaborative activities in PLEs for formal learningThirdSpace: orchestrating collaborative activities in PLEs for formal learning
ThirdSpace: orchestrating collaborative activities in PLEs for formal learning
Yvan Peter
 
Ad

Similar to Introducing Scala to your Ruby/Java Shop : My experiences at IGN (20)

Scala final ppt vinay
Scala final ppt vinayScala final ppt vinay
Scala final ppt vinay
Viplav Jain
 
Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologist
pmanvi
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
Tomer Gabel
 
Spark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin OderskySpark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin Odersky
Spark Summit
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
Mohammad Hossein Rimaz
 
Scala-Ls1
Scala-Ls1Scala-Ls1
Scala-Ls1
Aniket Joshi
 
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
Marakana Inc.
 
An Introduction to Scala
An Introduction to ScalaAn Introduction to Scala
An Introduction to Scala
Brent Lemons
 
Scala in the Wild
Scala in the WildScala in the Wild
Scala in the Wild
Tomer Gabel
 
Scala Introduction
Scala IntroductionScala Introduction
Scala Introduction
Adrian Spender
 
Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)
Martijn Verburg
 
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
Alex Payne
 
Quick introduction to scala
Quick introduction to scalaQuick introduction to scala
Quick introduction to scala
Mohammad Hossein Rimaz
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
Oleg Tsal-Tsalko
 
Building DSLs with Scala
Building DSLs with ScalaBuilding DSLs with Scala
Building DSLs with Scala
Mohit Jaggi
 
Alberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsAlberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.js
Scala Italy
 
Scala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJS
Alberto Paro
 
Functional Scala 2022 - scalajs Alexis.pdf
Functional Scala 2022 - scalajs Alexis.pdfFunctional Scala 2022 - scalajs Alexis.pdf
Functional Scala 2022 - scalajs Alexis.pdf
ssusercd195b
 
JavaOne 2017 - Collections.compare:JDK, Eclipse, Guava, Apache... [CON1754]
JavaOne 2017 - Collections.compare:JDK, Eclipse, Guava, Apache... [CON1754]JavaOne 2017 - Collections.compare:JDK, Eclipse, Guava, Apache... [CON1754]
JavaOne 2017 - Collections.compare:JDK, Eclipse, Guava, Apache... [CON1754]
Leonardo De Moura Rocha Lima
 
Scala adoption by enterprises
Scala adoption by enterprisesScala adoption by enterprises
Scala adoption by enterprises
Mike Slinn
 
Scala final ppt vinay
Scala final ppt vinayScala final ppt vinay
Scala final ppt vinay
Viplav Jain
 
Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologist
pmanvi
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
Tomer Gabel
 
Spark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin OderskySpark - The Ultimate Scala Collections by Martin Odersky
Spark - The Ultimate Scala Collections by Martin Odersky
Spark Summit
 
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
Marakana Inc.
 
An Introduction to Scala
An Introduction to ScalaAn Introduction to Scala
An Introduction to Scala
Brent Lemons
 
Scala in the Wild
Scala in the WildScala in the Wild
Scala in the Wild
Tomer Gabel
 
Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)Polyglot and Functional Programming (OSCON 2012)
Polyglot and Functional Programming (OSCON 2012)
Martijn Verburg
 
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
Alex Payne
 
Building DSLs with Scala
Building DSLs with ScalaBuilding DSLs with Scala
Building DSLs with Scala
Mohit Jaggi
 
Alberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.jsAlberto Paro - Hands on Scala.js
Alberto Paro - Hands on Scala.js
Scala Italy
 
Scala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJSScala Italy 2015 - Hands On ScalaJS
Scala Italy 2015 - Hands On ScalaJS
Alberto Paro
 
Functional Scala 2022 - scalajs Alexis.pdf
Functional Scala 2022 - scalajs Alexis.pdfFunctional Scala 2022 - scalajs Alexis.pdf
Functional Scala 2022 - scalajs Alexis.pdf
ssusercd195b
 
JavaOne 2017 - Collections.compare:JDK, Eclipse, Guava, Apache... [CON1754]
JavaOne 2017 - Collections.compare:JDK, Eclipse, Guava, Apache... [CON1754]JavaOne 2017 - Collections.compare:JDK, Eclipse, Guava, Apache... [CON1754]
JavaOne 2017 - Collections.compare:JDK, Eclipse, Guava, Apache... [CON1754]
Leonardo De Moura Rocha Lima
 
Scala adoption by enterprises
Scala adoption by enterprisesScala adoption by enterprises
Scala adoption by enterprises
Mike Slinn
 
Ad

More from Manish Pandit (20)

Disaster recovery - What, Why, and How
Disaster recovery - What, Why, and HowDisaster recovery - What, Why, and How
Disaster recovery - What, Why, and How
Manish Pandit
 
Serverless Architectures on AWS in practice - OSCON 2018
Serverless Architectures on AWS in practice - OSCON 2018Serverless Architectures on AWS in practice - OSCON 2018
Serverless Architectures on AWS in practice - OSCON 2018
Manish Pandit
 
Disaster Recovery and Reliability
Disaster Recovery and ReliabilityDisaster Recovery and Reliability
Disaster Recovery and Reliability
Manish Pandit
 
OAuth2 primer
OAuth2 primerOAuth2 primer
OAuth2 primer
Manish Pandit
 
Immutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and JenkinsImmutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and Jenkins
Manish Pandit
 
AWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and JavaAWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and Java
Manish Pandit
 
AWS Primer and Quickstart
AWS Primer and QuickstartAWS Primer and Quickstart
AWS Primer and Quickstart
Manish Pandit
 
Securing your APIs with OAuth, OpenID, and OpenID Connect
Securing your APIs with OAuth, OpenID, and OpenID ConnectSecuring your APIs with OAuth, OpenID, and OpenID Connect
Securing your APIs with OAuth, OpenID, and OpenID Connect
Manish Pandit
 
Silicon Valley 2014 - API Antipatterns
Silicon Valley 2014 - API AntipatternsSilicon Valley 2014 - API Antipatterns
Silicon Valley 2014 - API Antipatterns
Manish Pandit
 
Scalabay - API Design Antipatterns
Scalabay - API Design AntipatternsScalabay - API Design Antipatterns
Scalabay - API Design Antipatterns
Manish Pandit
 
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at NetflixOSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
Manish Pandit
 
API Design Antipatterns - APICon SF
API Design Antipatterns - APICon SFAPI Design Antipatterns - APICon SF
API Design Antipatterns - APICon SF
Manish Pandit
 
Motivation : it Matters
Motivation : it MattersMotivation : it Matters
Motivation : it Matters
Manish Pandit
 
Building Apis in Scala with Playframework2
Building Apis in Scala with Playframework2Building Apis in Scala with Playframework2
Building Apis in Scala with Playframework2
Manish Pandit
 
Scala at Netflix
Scala at NetflixScala at Netflix
Scala at Netflix
Manish Pandit
 
IGN's V3 API
IGN's V3 APIIGN's V3 API
IGN's V3 API
Manish Pandit
 
Java and the JVM
Java and the JVMJava and the JVM
Java and the JVM
Manish Pandit
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
Manish Pandit
 
Silicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp 2011: Play! as you RESTSilicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp 2011: Play! as you REST
Manish Pandit
 
Silicon Valley Code Camp: 2011 Introduction to MongoDB
Silicon Valley Code Camp: 2011 Introduction to MongoDBSilicon Valley Code Camp: 2011 Introduction to MongoDB
Silicon Valley Code Camp: 2011 Introduction to MongoDB
Manish Pandit
 
Disaster recovery - What, Why, and How
Disaster recovery - What, Why, and HowDisaster recovery - What, Why, and How
Disaster recovery - What, Why, and How
Manish Pandit
 
Serverless Architectures on AWS in practice - OSCON 2018
Serverless Architectures on AWS in practice - OSCON 2018Serverless Architectures on AWS in practice - OSCON 2018
Serverless Architectures on AWS in practice - OSCON 2018
Manish Pandit
 
Disaster Recovery and Reliability
Disaster Recovery and ReliabilityDisaster Recovery and Reliability
Disaster Recovery and Reliability
Manish Pandit
 
Immutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and JenkinsImmutable AWS Deployments with Packer and Jenkins
Immutable AWS Deployments with Packer and Jenkins
Manish Pandit
 
AWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and JavaAWS Lambda with Serverless Framework and Java
AWS Lambda with Serverless Framework and Java
Manish Pandit
 
AWS Primer and Quickstart
AWS Primer and QuickstartAWS Primer and Quickstart
AWS Primer and Quickstart
Manish Pandit
 
Securing your APIs with OAuth, OpenID, and OpenID Connect
Securing your APIs with OAuth, OpenID, and OpenID ConnectSecuring your APIs with OAuth, OpenID, and OpenID Connect
Securing your APIs with OAuth, OpenID, and OpenID Connect
Manish Pandit
 
Silicon Valley 2014 - API Antipatterns
Silicon Valley 2014 - API AntipatternsSilicon Valley 2014 - API Antipatterns
Silicon Valley 2014 - API Antipatterns
Manish Pandit
 
Scalabay - API Design Antipatterns
Scalabay - API Design AntipatternsScalabay - API Design Antipatterns
Scalabay - API Design Antipatterns
Manish Pandit
 
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at NetflixOSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
OSCON 2014 - API Ecosystem with Scala, Scalatra, and Swagger at Netflix
Manish Pandit
 
API Design Antipatterns - APICon SF
API Design Antipatterns - APICon SFAPI Design Antipatterns - APICon SF
API Design Antipatterns - APICon SF
Manish Pandit
 
Motivation : it Matters
Motivation : it MattersMotivation : it Matters
Motivation : it Matters
Manish Pandit
 
Building Apis in Scala with Playframework2
Building Apis in Scala with Playframework2Building Apis in Scala with Playframework2
Building Apis in Scala with Playframework2
Manish Pandit
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
Manish Pandit
 
Silicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp 2011: Play! as you RESTSilicon Valley Code Camp 2011: Play! as you REST
Silicon Valley Code Camp 2011: Play! as you REST
Manish Pandit
 
Silicon Valley Code Camp: 2011 Introduction to MongoDB
Silicon Valley Code Camp: 2011 Introduction to MongoDBSilicon Valley Code Camp: 2011 Introduction to MongoDB
Silicon Valley Code Camp: 2011 Introduction to MongoDB
Manish Pandit
 

Recently uploaded (20)

SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical DebtBuckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Lynda Kane
 
Salesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docxSalesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docx
José Enrique López Rivera
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Automation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From AnywhereAutomation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From Anywhere
Lynda Kane
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Leading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael JidaelLeading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael Jidael
Michael Jidael
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Asthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdfAsthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdf
VanessaRaudez
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical DebtBuckeye Dreamin 2024: Assessing and Resolving Technical Debt
Buckeye Dreamin 2024: Assessing and Resolving Technical Debt
Lynda Kane
 
Salesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docxSalesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docx
José Enrique López Rivera
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Automation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From AnywhereAutomation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From Anywhere
Lynda Kane
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Leading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael JidaelLeading AI Innovation As A Product Manager - Michael Jidael
Leading AI Innovation As A Product Manager - Michael Jidael
Michael Jidael
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Asthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdfAsthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdf
VanessaRaudez
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 

Introducing Scala to your Ruby/Java Shop : My experiences at IGN

  • 1. Introducing Scala to your Java/Ruby Shop My experiences at IGN Manish Pandit Silicon Valley Code Camp ‘12 Oct 7th, 2012
  • 2. About me Manish Pandit Director of Engineering, IGN @lobster1234 linkedin.com/in/mpandit
  • 3. About IGN We are a leading online media and services company obsessed with gaming and entertainment. 56MM Monthly Unique Views 737MM Monthly Page Views 20MM Monthly Video Views
  • 4. My Objective Is: To share my story of introducing Scala to IGN, and (hopefully) show you the path to enlightenment. Isn't: To incite a functional vs. imperative, or Scala vs. ____ debate.
  • 5. The IGN Tech Stack
  • 6. Best tool for the job • Front End : JS, CSS3, HTML5, backbone, Coffeescript, jQuery • Middle Tier : ZF2 (PHP), Rails • APIs : Scala, some Java • Persistence : MongoDB, MySQL, Redis • Search : ElasticSearch • Caching : Memcached, Varnish
  • 7. APIs at IGN : Numbers • ~5 Billion requests a month • Average Response time of under 20ms on cache misses • 17 APIs between Social, OAuth, and Content • Hardest hit APIs doing about 25K RPM at peak
  • 8. The Kitchen Sink • CMS – JSPs talking to Oracle DB and some Java services • V1 API : Java Services using Oracle DB with Memcached • V2 API : Rails based API layer using MongoDB and a Java/Memcached front cache • Lots of duct tape like messaging and cron jobs for simple tasks • Too diverse of a stack in the API infrastructure
  • 9. The API Evolution : V3 [2012] • A fresh look at the APIs and IGN’s direction • First attempt to – Integrate all content types – Open up the APIs to external consumers – Evolve the CMS, traditionally a monolithic system – ElasticSearch – Varnish Response Caching • A learning opportunity for traditional Java stack engineers
  • 10. Roadblocks • Resistance to change – Culture – Willingness and commitment • Too many choices – making the right pick – Involve every one – Do not decide by committee, decide by learning – Time box and measure everything – Be accountable, as you’re looked upon as the expert
  • 11. The hunt for… • A runtime as fast, if not faster than Java • Concise, yet expressive • Less boilerplate • Smooth learning curve and ramp up • Re-use ecosystem of libraries • Growing adoption and developer velocity • Built in support for concurrency • Fast and fun development • Next level of programming – disrupt!
  • 12. Why Scala : Strategic Reasons • Evolve the talent brand along side evolving the platform • Establish an API platform by replacing “rewrite” with learning instead of porting • Start thinking functional • Align with the leaders in the APIs • Get involved with a technology as it is evolving (vs. established). Helps with influence.
  • 13. Why Scala : Tactical Reasons • Performance tied to cores than processor speed, i.e. concurrency • Ideal for API development – (relatively) simple to handle concurrency and immutability • JVM based = Performance • Re-use Java toolkits and libraries • Concise, yet expressive code • Actor model makes the difficult parts easy
  • 14. Why Scala : Tactical Reasons • Richer Collections API • Traits enabling Mix-Ins and behavior re-use • Statically Typed w/Type inference • Functional, but not alien (it can be!) • REPL
  • 15. Yes, Virginia, Scala is hard : DPP So, how can you figure out if Scala will be "easy" or "hard" for your organization: •Your company has speakers at JavaOne, OSCON, Strangle Loop, QCon: Scala will be easy •Lunch-time discussions involve the criteria for moving from a developer to a senior developer: Scala will be hard •Your developers can write code in NotePad if they have to: Easy •Your developers stare blankly or say 3 "Hail Marys" when they hear the name "Zed Shaw": Scala == Hard •Developers all follow Dean Wampler on Twitter: Scala Easy •Your developers come in at 9:15 and leave before 6 and don't check work email at night: Hard http://blog.goodstuff.im/yes-virginia-scala-is-hard
  • 17. Picking up Scala : Week 1 • Scala for Java Developers fast-tracked the learning • Syntax Familiarity • Java without semicolons? def total(nums: List[Int]) :Int = { var sum:Int=0 for(num<-nums) { sum+=num } sum }
  • 18. Picking up Scala : Week 4 • Reduce the lines of code, embrace immutability, use the functional paradigms built into the language • Unmystrify the implicits magic nums.foldLeft(0)((n,c) => n+c)
  • 19. Picking up Scala : Today • Focus on immutability • Think functional – with the knowledge gained from using the functional aspects of the language, build control abstractions • Explore and implement ScalaZ • Keep learning, and applying • Move all the Actor processing to Akka
  • 20. Less Boilerplate public class HelloWorld{ public static void main(String... args){ System.out.println("Hello, World!"); } } object HelloWorld extends App{ println("Hello, World!") } scala> println("Hello, World!")
  • 21. Expressive, yet concise val x = if(n%2==0) "Even" else "Odd" val x = for(i <- 1 to 10) yield i*2 val x = for(i <- 1 to 10; if(i%2==0)) yield i*2 val y = 20 match{ case p if(p%2==0) => "Even" case _ => "Odd" } val largest = List(1,5,2,6).foldLeft(0)((a,b)=> if(a>b) a else b)
  • 22. Less pain points No more dreaded null or throwing unwanted exceptions : Use Option[T] def thisMayReturnNull[T](x:T):Option[T]={ if(true) Some(x) else None } No more creating classes only to return more than 1 value : Use Tuples def doublePair(x:Int)= (x,x*2)
  • 23. Try-catch mess try{ //Construct a URL which can throw a MalformedURLException //do something with a URL which can throw IOException //do something with string encoding which can throw // UnsupportedEncodingException } catch{ case mal:MalformedURLException => //something case ioe: IOException => //something case e: Exception => //something }
  • 24. Type Inference scala> val x = "Sunday" x: java.lang.String = Sunday scala> def x(n:Int) = n*3 x: (n: Int)Int scala> 1 to 5 res2: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5) scala> def x = if(true) Left("Yes!") else Right(new Exception("Didn’t work out!")) x: Product with Serializable with Either[java.lang.String,java.lang.Exception]
  • 25. Dynamic Mix-ins class Home(bedrooms:Int=3,bathrooms:Double=2.5) trait Garage{ def park(n:Int) = println("Parking " + n + "cars") } val someHome = new Home val someHomeWithGarage = new Home with Garage someHomeWithGarage.park(2)
  • 26. Concurrency • Actors make concurrency so much easier – Messaging vs. Blocking – Lightweight, 300-500 bytes per instance – Isolated
  • 27. Scala API Components • Scalatra • Lift-MongoRecord for MongoDB • Casbah for MongoDB • PlayFramework 2 • Actors for tasks like syndication • sbt and Maven for Builds • MongoDB for persistence
  • 28. Other API Components • Varnish Cache • Elasticsearch • Yammer Metrics (ping, healthcheck) • Swagger (self-documenting RESTful APIs) • 3Scale for Partner APIs • IntelliJ IDEA and Eclipse with ScalaIDE • PlayFramework 2.0 (New!) • ScalaTest for Testing
  • 29. Challenges with Scala * • Steepness of the Learning curve depends entirely on your org culture • Scala is what you make of it • http://scalaz.github.com/scalaz/scalaz-2.9.1- 6.0.4/doc.sxr/scalaz/BKTree.scala.html • Middle Ground between Simplicity and, well..elegance * None of these challenges outweigh the benefits. They’re just something to be aware of.
  • 30. Challenges with Scala • Slow compilation based on the source • No (binary) compatibility of dependencies for the major releases (2.8, 2.9, 2.10(?)) • Tooling not as rich as Java – Changing (rapidly) with Typesafe investing in ScalaIDE – ScalaIDE comes with a Scala Worksheet, which is like REPL but richer
  • 31. Lessons Learned : Culture • Culture of Meetups, Hack Nights and Code Jams • Being able to connect with the contributors and language creators • Willingness to invest in learning, evolving vs. maintaining
  • 32. Lessons Learned : Team • Small team (~5 engineers) • Java background helped a lot • 10% time set aside for skill building • Learn and share • It is a commitment • Communication!
  • 33. Lessons Learned : Material • Books that have exercises, so you can quantify your learning. • Online tutorials • StackOverflow • Coursera : A course on Functional Programming by Martin Odersky
  • 34. Resources • Books – Programming in Scala by Odersky – Scala for the Impatient by Horstmann • Interwebz – http://debasishg.blogspot.com – http://www.reddit.com/r/scala – http://stackoverflow.com/tags/scala/info – http://twitter.github.com/scala_school – https://www.coursera.org/course/progfun
  • 35. scala> case class Me(name:String="Manish Pandit",twitter:String="@lobster1234") defined class Me scala> val me = new Me me: Me = Me(Manish Pandit,@lobster1234) scala> println(“Questions!”) Questions!

Editor's Notes

  • #2: ----- Meeting Notes (10/4/12 16:32) ----- Scala in production? Playing around with Scala?