Presentation HTML5 with Play/Scala, CoffeeScript and Jade
This session shows you how to use some of the hottest technologies today to build a webapp, an API and a mobile application to track fitness workouts. Using HTML5 technologies (specifically geo and local storage), I’ll show you how you can track the time, distance and music you listened to while exercising. Play with Scala is used for the backend and services, while CoffeeScript and Jade are used for the front-end templating and Ajax communication.
Published on: 2011-12-20T07:25:38.000Z
Channel: Devoxx'11 (all )
Tags: Play! Framework scala HTML5
Speakers:
Matt Raible
Matt Raible has been building web applications for most of his adult life. He started tinkering with the web before Netscape 1.0 was even released. For the last 11 years, Matt has helped companies adopt open source technologies (Spring, Hibernate, Apache, Struts, Tapestry, Grails) and use them effectively. Matt has been a speaker at many conferences worldwide, including ApacheCon, JavaZone, Colorado Software Summit, No Fluff Just Stuff, and a host of others.
Matt is an author (Spring Live and Pro JSP), and an active "kick-ass technology" evangelist on http://raibledesigns.com. He is the founder of AppFuse, a project which allows you to get started quickly with Java frameworks, as well as a committer on the Apache Roller and Apache Struts projects.
For the last few years, Matt has served as the UI Architect for high-traffic web sites such as LinkedIn and Evite. He currently serves as the Chief Architect of Web Development at Time Warner Cable.
Slides:
HTML5 w/ Play Scala, CoffeeScript and Jade
HTML5 w/ Play Scala, CoffeeScript and Jade
Matt Raible matt@raibledesigns.com @mraible
Photos by Trish McGinity - http://mcginityphoto.com
Introductions
Introductions
How many of you like beer? Have you used HTML5? Have you used Play Framework? Have you used Scala? Tried CoffeeScript? Scalate or Jade?
© 2011 Raible Designs
2
Matt Raible
Matt Raible
© 2011 Raible Designs
My Work
© 2011 Raible Designs
Good old days
© 2011 Raible Designs
Cottage
© 2011 Raible Designs
Belgian Beer
© 2011 Raible Designs
Parleys.com
© 2011 Raible Designs
Feedback
© 2011 Raible Designs
Belgian Beer
© 2011 Raible Designs
Technologies
© 2011 Raible Designs
Agenda
Agenda
Introductions Why am I doing this talk? What are these technologies? My Development Experience Demo Q and A Conclusion
© 2011 Raible Designs
12
Why am I doing this talk?
Why am I doing this talk?
© 2011 Raible Designs
13
Why am I doing this talk?
Why am I doing this talk?
© 2011 Raible Designs
14
Why am I doing this talk?
Why am I doing this talk?
© 2011 Raible Designs
15
Why am I doing this talk?
Why am I doing this talk?
I like a Challenge to...
-
Learn Scala Via Play! And Jade is cool too! So is CoffeeScript!
© 2011 Raible Designs
16
Why am I doing this talk?
Why am I doing this talk?
Honestly, it's because of James Strachan...
© 2011 Raible Designs
17
Why am I doing this talk?
Why am I doing this talk?
Who likes beer too!
© 2011 Raible Designs
18
Why am I doing this talk?
Why am I doing this talk?
© 2011 Raible Designs
19
What are these technologies?
What are these technologies?
© 2011 Raible Designs
20
HTML5
HTML5
http://on.wsj.com/tEGIJL
© 2011 Raible Designs
21
How do you write HTML5?
How do you write HTML5?
http://www.w3schools.com/html5/html5_reference.asp
© 2011 Raible Designs
22
CSS3
CSS3
Animated Transitions
transform: rotateY(180deg);
Rounded Corners
border-radius: 8px 8px 0 0;
Drop Shadows
box-shadow: 2px 2px 4px 4px;
Gradient Colors Styling based on sibling count More cursors for better usability Custom Checkboxes and Radio Buttons
http://lea.verou.me/css3-secrets
© 2011 Raible Designs
23
Play Framework
Play Framework
A full-stack Java Web Framework made by Web Developers Compile on-the-fly Stateless Architecture Breaks web framework norms
-
Uses static methods Doesn't use Servlet API
© 2011 Raible Designs
24
Matrix Results
Matrix Results
18
17.5 17 17 17
13.5
9
15.5 15 15 14.5 14 14 13.513.5 11.5
4.5
0
2
din
ry
g
s
ails
Ra ils
ck et
Pla
ipe
Fle
Sp rin
GW
est
Va a
Gr
uts
Tap
Str
Str
Wi
JS
Lift
x
T
F
y
© 2011 Raible Designs
25
Weighted Results
Weighted Results
Grails (90) Spring MVC (85) Ruby on Rails (82.5) Vaadin (82.5) Play (82.5) GWT (80)
© 2011 Raible Designs
26
Mailing List Traffic
Mailing List Traffic
Wicket GWT Grails Rails Tapestry Play 0 475 950
1841 1753 1635 1604 1538 1451
1425 1900
July 2011
* Spring MVC and Vaadin use Forums, which don't provide this data.
© 2011 Raible Designs
27
Play Scala
Play Scala
But really, it's more like this
© 2011 Raible Designs
28
Play Scala
Play Scala
© 2011 Raible Designs
29
Scala
Scala
"Scala is like the dragon in Avatar. It will try to kill you, but if you master it, you can fly great distances with it and have a wonderful time." -- Venkat Subramaniam
© 2011 Raible Designs
30
Scala Basics
Scala Basics
def starts a method variables are started with var or val variables are defined with name:type semicolons are not required
© 2011 Raible Designs
31
Scala vs. Java
Scala vs. Java
© 2011 Raible Designs
32
Play with Scala
Play with Scala
© 2011 Raible Designs
33
Demo
© 2011 Raible Designs
Learning Scala
Learning Scala
Venkat's Scala for the Intrigued
PragPub Magazine, starting in Sep 2011
Scala for the Impatient - Cay Horstmann Programming in Scala, 2nd Edition - Martin Odersky, Lex Spoon, and Bill Venners Twitter's Scala School
© 2011 Raible Designs
34
CoffeeScript
CoffeeScript
© 2011 Raible Designs
35
JavaScript: The Good Parts
JavaScript: The Good Parts
© 2011 Raible Designs
36
Jade
Jade
© 2011 Raible Designs
37
Jade Example
Jade Example
© 2011 Raible Designs
38
CoffeeBar
CoffeeBar
© 2011 Raible Designs
39
My Development Experience
My Development Experience
© 2011 Raible Designs
40
Getting Started
Getting Started
© 2011 Raible Designs
41
Developing with Play Scala
Developing with Play Scala
© 2011 Raible Designs
42
Tools I started with...
Tools I started with...
© 2011 Raible Designs
43
Scalate Module
Scalate Module
© 2011 Raible Designs
44
Scalate Integration Solution
Scalate Integration Solution
© 2011 Raible Designs
45
Integrating Scalate with Play
Integrating Scalate with Play
play deps --sync
© 2011 Raible Designs
46
Integrating Scalate with Play
Integrating Scalate with Play
© 2011 Raible Designs
47
Integrating Scalate with Play
Integrating Scalate with Play
© 2011 Raible Designs
48
Cannot start in PROD mode with errors Template compilation error (In /app/views/Application/index.jade around line 2) The template /app/views/Application/index.jade does not compile : #{user.name} is not closed. play.exceptions.TemplateCompilationExcepti
Cannot start in PROD mode with errors Template compilation error (In /app/views/Application/index.jade around line 2) The template /app/views/Application/index.jade does not compile : #{user.name} is not closed. play.exceptions.TemplateCompilationException: #{user.name} is not closed. at play.templates.TemplateCompiler.generate(TemplateCompiler.java:102) at play.templates.TemplateCompiler.compile(TemplateCompiler.java:15) at play.templates.GroovyTemplateCompiler.compile(GroovyTemplateCompiler.java:4 1)
© 2011 Raible Designs
Integrating Scalate with Play
Integrating Scalate with Play
http://raibledesigns.com/rd/entry/integrating_scalate_and_jade_with
© 2011 Raible Designs
50
Play 2.0
Play 2.0
© 2011 Raible Designs
51
Play 2.0
Play 2.0
© 2011 Raible Designs
52
Play 2.0 Beta
Play 2.0 Beta
© 2011 Raible Designs
53
A Nice Break ...
A Nice Break ...
© 2011 Raible Designs
54
CoffeeScript with Play
CoffeeScript with Play
© 2011 Raible Designs
55
CoffeeScript with Play
CoffeeScript with Play
http://raibledesigns.com/rd/entry/trying_to_make_coffeescript_work
© 2011 Raible Designs
56
My Development Experience
My Development Experience
© 2011 Raible Designs
57
© 2011 Raible Designs
© 2011 Raible Designs
H5BP and Play
H5BP and Play
cd cp cp cp cp cp cp cp cp $boilerplate-download 404.html ~/dev/play-more/app/views/errors/404.html *.png ~/dev/play-more/public/. crossdomain.xml ~/dev/play-more/public/. -r css ~/dev/play-more/public/stylesheets/. favicon.ico ~/dev/play-more/public/. humans.txt ~/dev/play-more/public/. -r js/libs ~/dev/play-more/public/javascripts/. robots.txt ~/dev/play-more/public/.
© 2011 Raible Designs
59
Scalate Layouts
Scalate Layouts
© 2011 Raible Designs
60
HTML5 Boilerplate
HTML5 Boilerplate
http://raibledesigns.com/rd/entry/integrating_html5_boilerplate_with_scalate
© 2011 Raible Designs
61
HTML5 Development
HTML5 Development
© 2011 Raible Designs
62
StopWatch with Coffee
StopWatch with Coffee
© 2011 Raible Designs
63
Jade Template for Watch
Jade Template for Watch
© 2011 Raible Designs
64
HTML5 Development
HTML5 Development
© 2011 Raible Designs
65
HTML5 Geo API
HTML5 Geo API
© 2011 Raible Designs
66
Google Maps JS API
Google Maps JS API
© 2011 Raible Designs
67
Jade View for Map
Jade View for Map
© 2011 Raible Designs
68
HTML5 Development
HTML5 Development
© 2011 Raible Designs
69
Odometer
Odometer
© 2011 Raible Designs
70
Testing
Testing
Tried Trip Meter on a bike ride Said I'd traveled 5 km, when I knew I'd gone 10
Was calculating start to end w/o waypoints
To Visualize: integrated odometer with maps using Google Maps Polylines
© 2011 Raible Designs
71
Discovered
Discovered
HTML5 Geolocation was highly inaccurate
-
Fixed by passing {enableHighAccuracy: true} to navigator.geolocation.watchPosition()
© 2011 Raible Designs
72
Discovered
Discovered
© 2011 Raible Designs
73
Show Stopper?
Show Stopper?
Geolocation doesn't run in the background
© 2011 Raible Designs
74
Making it look good
Making it look good
© 2011 Raible Designs
75
Twitter's Bootstrap
Twitter's Bootstrap
© 2011 Raible Designs
76
Bootstrap
Bootstrap
© 2011 Raible Designs
77
LESS
LESS
© 2011 Raible Designs
78
LESS
LESS
© 2011 Raible Designs
79
CSS3 Media Queries
CSS3 Media Queries
© 2011 Raible Designs
80
HTML5 Features
HTML5 Features
Geolocation CSS 3 Audio History Local Storage Canvas
© 2011 Raible Designs
81
HTML5 and Bootstrap
HTML5 and Bootstrap
http://raibledesigns.com/rd/entry/developing_with_html5_coffeescript_and
© 2011 Raible Designs
82
Anorm and PostgreSQL
Anorm and PostgreSQL
I'm a big fan of ORMs like Hibernate and JPA
Learn a new JDBC abstraction? Really!?
Anorm is and will be the default for Play Scala Chose PostgreSQL since that's what Heroku uses
© 2011 Raible Designs
83
Data Model
Data Model
© 2011 Raible Designs
84
ScalaTest
ScalaTest
© 2011 Raible Designs
85
Anorm in Action
Anorm in Action
© 2011 Raible Designs
86
Controller and View
Controller and View
© 2011 Raible Designs
87
Anorm, Dates & PostgreSQL
Anorm, Dates & PostgreSQL
© 2011 Raible Designs
88
Anorm, Dates & PostgreSQL
Anorm, Dates & PostgreSQL
Discovered "support of Date for insertion" was added to Anorm in August 2011 Cloned play-scala, built locally and uploaded Modified dependencies.yml to use new version
© 2011 Raible Designs
89
Anorm and PostgreSQL
Anorm and PostgreSQL
http://raibledesigns.com/rd/entry/play_scala_s_anorm_heroku
© 2011 Raible Designs
90
More Scalate Goodness
More Scalate Goodness
© 2011 Raible Designs
91
More Scalate Goodness
More Scalate Goodness
© 2011 Raible Designs
92
Scalate as a Play Module
Scalate as a Play Module
http://raibledesigns.com/rd/entry/more_scalate_goodness_for_play
© 2011 Raible Designs
94
App was still unusable
App was still unusable
I still hadn't solved the fundamental problem The app couldn't run in the background on a mobile phone
© 2011 Raible Designs
95
PhoneGap to the Rescue!
PhoneGap to the Rescue!
© 2011 Raible Designs
96
Requirements
Requirements
Intel-based computer with Mac OS X Snow Leopard (10.6) Xcode PhoneGap Necessary for Installation:
-
An Apple iOS Device iOS Developer Certification
97
© 2011 Raible Designs
Icons and Splash Screen
Icons and Splash Screen
© 2011 Raible Designs
98
Background Modes
Background Modes
© 2011 Raible Designs
99
Success!
Success!
© 2011 Raible Designs
100
PhoneGap Writeup
PhoneGap Writeup
http://raibledesigns.com/rd/entry/phonegap_to_the_rescue
101
© 2011 Raible Designs
Was it worth it?
Was it worth it?
Development Hours: $$$ play-more.com domain: $180 GoPro Helmet Cam: $239 iOS Certified Developer: $100 Free Trip to Devoxx: Priceless
© 2011 Raible Designs
102
Developing Play More
Developing Play More
http://www.youtube.com/watch?v=bBqtPPfM2xQ
© 2011 Raible Designs
103
Movie
Developing Play More
Developing Play More
http://www.youtube.com/watch?v=bBqtPPfM2xQ
© 2011 Raible Designs
103
Tools
Tools
© 2011 Raible Designs
104
HTML5 vs. Native
HTML5 vs. Native
If you need background services like geolocation or audio, native is necessary Can still write your apps in HTML5
Bridge the Gap with PhoneGap or Titanium
If mobile is important, consider fully native with WebViews for common features - a.k.a. Hybrid
© 2011 Raible Designs
105
Questions?
Questions?
Contact
-
http://raibledesigns.com http://twitter.com/mraible
Download
-
http://slideshare.net/mraible
© 2011 Raible Designs
106