Top Banner
Konrad Malawski / @ktosopl GDG / PJUG / KSUG / SCKRK ScalaCamp 23.01.2012 Scala DSLs Dissecting Rogue Saturday, January 26, 13
65

Scala DSLs Dissecting Rogue

Sep 12, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Scala DSLs Dissecting Rogue

Konrad Malawski / @ktosoplGDG / PJUG / KSUG / SCKRK

ScalaCamp 23.01.2012

Scala DSLsDissecting Rogue

Łukasz Dubiel@bambuchaAdm

Hackerspace KrakówSaturday, January 26, 13

Page 3: Scala DSLs Dissecting Rogue

Saturday, January 26, 13

Page 4: Scala DSLs Dissecting Rogue

DSL

Saturday, January 26, 13

Page 5: Scala DSLs Dissecting Rogue

DSL

Saturday, January 26, 13

Page 6: Scala DSLs Dissecting Rogue

DSL

Saturday, January 26, 13

Page 7: Scala DSLs Dissecting Rogue

omainDSL

Saturday, January 26, 13

Page 8: Scala DSLs Dissecting Rogue

omainpecific

DSL

Saturday, January 26, 13

Page 9: Scala DSLs Dissecting Rogue

omainpecificanguage

DSL

Saturday, January 26, 13

Page 10: Scala DSLs Dissecting Rogue

Domain Specific Language(internal)

list should contain (1)pet should equal ("Kapibara")

( ScalaTest )Saturday, January 26, 13

Page 11: Scala DSLs Dissecting Rogue

create random Client

create Client from Poland having PremiumSubscription

Domain Specific Language(internal? external?)

Saturday, January 26, 13

Page 12: Scala DSLs Dissecting Rogue

find all clients withMore than one negative comments

Domain Specific Language(internal? external?)

Saturday, January 26, 13

Page 13: Scala DSLs Dissecting Rogue

Domain Specific Language=

Saturday, January 26, 13

Page 14: Scala DSLs Dissecting Rogue

Domain Specific Language=

def internal = "defined within our programming language"

Saturday, January 26, 13

Page 15: Scala DSLs Dissecting Rogue

Domain Specific Language=

define External = /* AKA */ "let's write a parser"

def internal = "defined within our programming language"

Saturday, January 26, 13

Page 16: Scala DSLs Dissecting Rogue

Querying Mongo

Saturday, January 26, 13

Page 17: Scala DSLs Dissecting Rogue

Querying Mongo

Saturday, January 26, 13

Page 18: Scala DSLs Dissecting Rogue

Querying Mongo

Saturday, January 26, 13

Page 19: Scala DSLs Dissecting Rogue

QL = Plain JSON

Querying Mongo

Saturday, January 26, 13

Page 20: Scala DSLs Dissecting Rogue

QL = Plain JSONJavaScript Console

Querying Mongo

Saturday, January 26, 13

Page 21: Scala DSLs Dissecting Rogue

QL = Plain JSONJavaScript Console

Java Driver

Querying Mongo

Saturday, January 26, 13

Page 22: Scala DSLs Dissecting Rogue

QL = Plain JSONJavaScript Console

Java DriverCasbah = Scala Driver

Querying Mongo

Saturday, January 26, 13

Page 23: Scala DSLs Dissecting Rogue

QL = Plain JSONJavaScript Console

Java DriverCasbah = Scala Driver

... used by Rogue

Querying Mongo

Saturday, January 26, 13

Page 24: Scala DSLs Dissecting Rogue

Querying Mongo: JS

Console API

Saturday, January 26, 13

Page 25: Scala DSLs Dissecting Rogue

Querying Mongo: JS

db.inventory.find( {} )

Saturday, January 26, 13

Page 26: Scala DSLs Dissecting Rogue

Querying Mongo: JS

db.inventory.find( {} )

“find all”

Saturday, January 26, 13

Page 27: Scala DSLs Dissecting Rogue

Querying Mongo: JS

db.inventory.find( { qty: 20 } )

Saturday, January 26, 13

Page 28: Scala DSLs Dissecting Rogue

Querying Mongo: JS

db.inventory.find( { qty: 20 } )

"where qty = 20"

Saturday, January 26, 13

Page 29: Scala DSLs Dissecting Rogue

Querying Mongo: JS

db.inventory.find( { qty: { $gt: 20 } } )

Saturday, January 26, 13

Page 30: Scala DSLs Dissecting Rogue

Querying Mongo: JS

db.inventory.find( { qty: { $gt: 20 } } )

gt means >=

Saturday, January 26, 13

Page 31: Scala DSLs Dissecting Rogue

Querying Mongo: JS

db.pople.find( { age: { $gte: 20 }, $or: [ { name: “Ken” }, { name: “Kenshiro” }, { city: “Tokyo” }, ... ] } )

Saturday, January 26, 13

Page 32: Scala DSLs Dissecting Rogue

Querying Mongo: JS

db.pople.find( { age: { $gte: 20 }, $or: [ { name: “Ken” }, { name: “Kenshiro” }, { city: “Tokyo” }, ... ] } )

$or may contain any clause

Saturday, January 26, 13

Page 33: Scala DSLs Dissecting Rogue

Querying Mongo: Java

Java API(Morhpia)

Saturday, January 26, 13

Page 34: Scala DSLs Dissecting Rogue

Querying Mongo: Java

ds.find(Employee.class).field("manager").equal(null).get();

(morphia)Saturday, January 26, 13

Page 35: Scala DSLs Dissecting Rogue

Querying Mongo: Java

ds.find(Employee.class).field("manager").equal(null).get();

You call this typesafe!?

(morphia)Saturday, January 26, 13

Page 36: Scala DSLs Dissecting Rogue

Mongo with Rogue

Saturday, January 26, 13

Page 37: Scala DSLs Dissecting Rogue

Rogue in Action

import com.foursquare.rogue.Rogue._

Saturday, January 26, 13

Page 38: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age gte 18) limit(100) fetch()

Saturday, January 26, 13

Page 39: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age gte 18) limit(100) fetch()

Code Completion

Code Completion

Code Completion

Code Completion

Saturday, January 26, 13

Page 40: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age eqs “Bazinga”) fetch()

Saturday, January 26, 13

Page 41: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age eqs “Bazinga”) fetch()

Won’t compile - age is IntField

eqs means ==

Saturday, January 26, 13

Page 42: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age gte 18) fetch()

Saturday, January 26, 13

Page 43: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age gte 18) fetch()

OK!

Saturday, January 26, 13

Page 44: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age gte 18) limit() fetch()

Saturday, January 26, 13

Page 45: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age gte 18) limit() fetch()

Limit

Saturday, January 26, 13

Page 46: Scala DSLs Dissecting Rogue

Rogue in Action

val _: List[String] = Person where(_.age gte 18) select(_.name) fetch()

Saturday, January 26, 13

Page 47: Scala DSLs Dissecting Rogue

Rogue in Action

val _: List[String] = Person where(_.age gte 18) select(_.name) fetch()

Type Safe!Type Safe!

Saturday, January 26, 13

Page 48: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age gte 18) limit(100) foreach { p => println(s”Name: ${p.firstName}”)}

Saturday, January 26, 13

Page 49: Scala DSLs Dissecting Rogue

Rogue in Action

Person where(_.age gte 18) limit(100) foreach { p => println(s”Name: ${p.firstName}”)}

foreach found person

Saturday, January 26, 13

Page 50: Scala DSLs Dissecting Rogue

people foreach { }

Saturday, January 26, 13

Page 51: Scala DSLs Dissecting Rogue

Rogue in Action

Person or( _.where(_.name eqs "Ken"), _.where(_.name eqs "ken") _.whereOpt(Option("Kenshiro")(_.name eqs _))) get()

Saturday, January 26, 13

Page 52: Scala DSLs Dissecting Rogue

Rogue in Action

Person or( _.where(_.name eqs "Ken"), _.where(_.name eqs "ken") _.whereOpt(Option("Kenshiro")(_.name eqs _))) get()

Get me one Person.

Saturday, January 26, 13

Page 53: Scala DSLs Dissecting Rogue

Rogue in Action

Person or( _.where(_.name eqs "Ken"), _.where(_.name eqs "ken") _.whereOpt(Option("Kenshiro")(_.name eqs _))) get()

Get me one Person.

Issue #69: fix in my pull req

Saturday, January 26, 13

Page 54: Scala DSLs Dissecting Rogue

Live Hacking

Saturday, January 26, 13

Page 55: Scala DSLs Dissecting Rogue

Live Hacking

Saturday, January 26, 13

Page 56: Scala DSLs Dissecting Rogue

Live Hacking

Saturday, January 26, 13

Page 57: Scala DSLs Dissecting Rogue

Live Hacking with ŁukaszDubiel

Saturday, January 26, 13

Page 58: Scala DSLs Dissecting Rogue

Advanced Stuff.

Live Hacking with ŁukaszDubiel

Saturday, January 26, 13

Page 59: Scala DSLs Dissecting Rogue

Advanced Stuff.Fast.

Live Hacking with ŁukaszDubiel

Saturday, January 26, 13

Page 60: Scala DSLs Dissecting Rogue

Advanced Stuff.Fast.

Ask Questions!

Live Hacking with ŁukaszDubiel

Saturday, January 26, 13

Page 61: Scala DSLs Dissecting Rogue

Saturday, January 26, 13

Page 62: Scala DSLs Dissecting Rogue

def links = • Scala Lang http://www.scala-lang.org/

• Scala Koans http://www.scalakoans.org

• Blog.Project13.pl - http://www.blog.project13.pl

•MongoDB ref - docs.mongodb.org/manual/reference/operators/

• Foursquare Rogue - https://github.com/foursquare/rogue

• Java Morphia - http://code.google.com/p/morphia/

• Kraków Scala UG - http://krakowscala.pl / http://scalacamp.pl

Saturday, January 26, 13

Page 63: Scala DSLs Dissecting Rogue

def links = • Scala Lang http://www.scala-lang.org/

• Scala Koans http://www.scalakoans.org

• Blog.Project13.pl - http://www.blog.project13.pl

•MongoDB ref - docs.mongodb.org/manual/reference/operators/

• Foursquare Rogue - https://github.com/foursquare/rogue

• Java Morphia - http://code.google.com/p/morphia/

• Kraków Scala UG - http://krakowscala.pl / http://scalacamp.pl

Mailing lists rock!

Saturday, January 26, 13