the modern java web developer bootcamp - devoxx 2013
DESCRIPTION
HTML5, CSS3, JavaScript, jQuery, Angular JS, Bootstrap, Mobile, CoffeeScript, GitHub, functional programming, Page Speed, Apache, JSON with Jackson, caching, REST, Security, load testing, profiling, Wro4j, Heroku, Cloudbees, AWS. These are just some of the buzzwords that a Java web developer hears on a daily basis. This talk is designed to expose you to a plethora of technologies that you might've heard about, but haven't learned yet. We'll concentrate on the most important web developer skills, as well as UI tips and tricks to make you a better front-end engineer. Some of the most valuable engineers these days have front-end JS/CSS skills, as well as backend Java skills. This presentation is from the University session I delivered at Devoxx 2013, in Antwerp. http://devoxx.be/dv13-matt-raible.html?presId=3648TRANSCRIPT
![Page 1: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/1.jpg)
The Modern Java Web Developer BootcampMatt Raible • http://raibledesigns.com
Photos by The Amazing Trish McGinity
![Page 2: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/2.jpg)
Blogger on raibledesigns.com
Founder of AppFuse
Father, Skier, Cyclist
Web Framework Connoisseur
Who is Matt Raible?
Bus Lover
![Page 3: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/3.jpg)
@mraible#DV13 @mraible#DV13
How about You?Have you developed a Struts 1 application? Used PHP?
Have you every written CSS from scratch?
Why do you hate JavaScript?
What’s your favorite JavaScript framework?
What do you want to learn from this talk?
![Page 4: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/4.jpg)
@mraible#DV13 @mraible#DV13
Topic InspirationInspired by Ben Evan’s and Martijn Verburg’s The Well-Grounded Java Developer
Developing with Java 7
Vital techniques
Polyglot programming on the JVM
Crafting the polyglot project
![Page 5: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/5.jpg)
Purpose
![Page 6: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/6.jpg)
@mraible#DV13 @mraible#DV13
The Modern Java Web Developer
JVM
![Page 7: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/7.jpg)
@mraible#DV13 @mraible#DV13
The Modern JVM Web DeveloperStarts with Fast Hardware
Uses IntelliJ IDEA
Leverages HTML5, JavaScript, and CSS3
Creates High Performance Web Sites
For Mobile Devices, in the Cloud
And cares about Security
![Page 8: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/8.jpg)
@mraible#DV13 @mraible#DV13
Fast Hardware
![Page 9: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/9.jpg)
@mraible#DV13 @mraible#DV13
IntelliJ IDEA
![Page 10: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/10.jpg)
@mraible#DV13 @mraible#DV13
Supports Emmet (aka Zen Coding)div#page>div.logo+ul#navigation>li*5>a
<div id=page> ! <div class=logo></div> ! <ul id=navigation> ! <li><a href=></a></li> ! <li><a href=></a></li> ! <li><a href=></a></li> ! <li><a href=></a></li> ! <li><a href=></a></li> ! </ul> !</div>
![Page 11: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/11.jpg)
@mraible#DV13 @mraible#DV13
Java 7 and 8Strings in switch statements
Diamond Syntax
Try with resources
Improved exception handling with multi-catch
NIO.2: Path, Files and Asynchronous I/OPath path = FileSystems.getDefault().getPath(logs, access.log); !BufferReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
![Page 12: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/12.jpg)
@mraible#DV13 @mraible#DV13
Java 7 and 8Parallel Collections
JSR 310 Date and Time API
Functional Interfaces with default method
Lambda Expressions (a.k.a. Closures)
!
Nashorn JavaScript Engine
// sort a list by lastName !List<Person> persons = ...; !persons.sort((p1, p2) -> ! p1.getLastName().compareTo(p2.getLastName()));
![Page 13: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/13.jpg)
Java 8 Parallelism
![Page 14: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/14.jpg)
@mraible#DV13 @mraible#DV13
%s/Hibernate/Spring Data
Servlet 3
@WebServlet, @WebFilter, @WebListener
Asynchronous Servlets
WebApplicationInitializer (to eliminate web.xml)
REST and Functional Programming
The Modern JVM Web Developer is aware of...
![Page 15: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/15.jpg)
@mraible#DV13 @mraible#DV13
Reactive Applications“Users expect millisecond response times and 100% uptime. Data
needs are expanding into the petabytes.”
The Reactive Manifesto
![Page 16: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/16.jpg)
@mraible#DV13 @mraible#DV13
Key Building BlocksObservable Models
Event Streams
Stateful Clients
![Page 17: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/17.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Avatar? avatar.java.net
![Page 18: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/18.jpg)
@mraible#DV13 @mraible#DV13
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
![Page 19: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/19.jpg)
Scala Basicsdef starts a method
variables are started with var or val
variables are defined with name:type
semicolons are not required
![Page 20: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/20.jpg)
@mraible#dv13javaweb$ @mraible#DV13
public class Car { ! private final int year; ! private int miles; ! ! public int getYear() { return year; } ! public int getMiles() { return miles; } ! public void setMiles(int theMiles) { miles = theMiles; } ! ! public Car(int theYear, int theMiles) { ! year = theYear; ! miles = theMiles; ! } !}
Scala vs. Java
![Page 21: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/21.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Scala vs. Java
class Car(val year: Int, var miles: Int)
![Page 22: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/22.jpg)
@mraible#dv13javaweb$ @mraible#DV13
What about Groovy?
![Page 23: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/23.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Groovy is still hot...
![Page 24: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/24.jpg)
@mraible#dv13javaweb$ @mraible#DV13
But sliding to Scala
![Page 25: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/25.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Or not?
* November 12, 2013 12:00
![Page 26: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/26.jpg)
@mraible#DV13 @mraible#DV13
Groovy and Scala at Devoxx
Sessions
0
0.75
1.5
2.25
3
Scala Groovy
3
2
![Page 27: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/27.jpg)
@mraible#DV13 @mraible#DV13
Learning ScalaScala for the Impatient - Cay Horstmann
Programming in Scala, 2nd Edition - Martin Odersky, Lex Spoon, and Bill Venners
Functional Programming Principles in Scala
September 16th 2013 (7 weeks long)
Signup at https://www.coursera.org/course/progfun
![Page 28: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/28.jpg)
@mraible#dv13javaweb$ @mraible#DV13
The Java Language
“Java remains – in spite of the fragmented programming language landscape – a viable, growing language.”
http://redmonk.com/sogrady/2012/02/08/language-rankings-2-2012/
![Page 29: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/29.jpg)
@mraible#dv13javaweb$ @mraible#DV13
and ... it’s still the most popular!
![Page 30: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/30.jpg)
@mraible#DV13 @mraible#DV13
The Services Developer
![Page 31: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/31.jpg)
@mraible#DV13 @mraible#DV13
Document Your API
![Page 32: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/32.jpg)
@mraible#DV13 @mraible#DV13
Document Your API
![Page 33: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/33.jpg)
@mraible#DV13 @mraible#DV13
Fast APIs
Dropwizard
![Page 34: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/34.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Jobs on dice.comJVM API Frameworks, November 2013
0
150
300
450
600
Grails Play JAX-RS Spring MVC
564
8430
172
![Page 35: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/35.jpg)
@mraible#dv13javaweb$ @mraible#DV13
SkillsJVM API Frameworks, November 2013
0
5,000
10,000
15,000
20,000
Grails Play JAX-RS Spring MVC
19228
41325784
18128
![Page 36: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/36.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Trends
![Page 37: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/37.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Job Trends
Absolute Relative
![Page 38: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/38.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Job Trends with Spring MVC
Absolute Relative
![Page 39: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/39.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Mailing List TrafficOctober 2013
Grails
Play
Dropwizard
0 325 650 975 1300
222
1218
1125
![Page 40: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/40.jpg)
@mraible#dv13javaweb$ @mraible#DV13
0
3,500
7,000
10,500
14,000
Grails Play JAX-RS Jersey Dropwizard
Tagged Questions (November 10, 2013)
![Page 41: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/41.jpg)
@mraible#DV13 @mraible#DV13
But if want to remain a Web Developer...
![Page 42: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/42.jpg)
Modern Principles
![Page 43: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/43.jpg)
@mraible#DV13 @mraible#DV13
HTTP OverviewRequest / Response Protocol
Features:
Keep-Alive
HTTP Secure
Binary
Compression
![Page 44: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/44.jpg)
@mraible#DV13 @mraible#DV13
HTTP Methods1.0 defined GET, POST and HEAD
1.1 defined added OPTIONS, PUT, DELETE, TRACE and CONNECT
Safe methods: HEAD, GET, OPTIONS and TRACE
Idempotent: PUT and DELETE
Insecure: TRACE, TRACK and DEBUG
![Page 45: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/45.jpg)
@mraible#DV13 @mraible#DV13
SPDY and HTTP 2.0Allows client and server to compress request and response headers
Allows multiple, simultaneously multiplexed requests over a single connection
Allows the server to actively push resources to the client that it knows the client will need
The initial draft of HTTP 2.0 is based on a straight copy of SPDY
![Page 46: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/46.jpg)
![Page 48: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/48.jpg)
@mraible#DV13 @mraible#DV13
Browser ToolsFirebug for FireFox
Chrome Developer Tools
Elements & Console
Settings
PageSpeed Insights
http://www.igvita.com/slides/2012/devtools-tips-and-tricks
![Page 50: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/50.jpg)
@mraible#DV13 @mraible#DV13
https://developer.mozilla.org/en-US/docs/HTML/HTML5
<applet> <center> <font> <frame> <frameset>
How do you write HTML5?<!DOCTYPE html>
<article> <aside> <section> <header> <footer> <nav> <audio> <canvas> <video> <datalist> <details>
![Page 51: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/51.jpg)
<form> ! <input type=text required> ! <input type=submit value=Search> !</form>!
<form> ! <input type=text autofocus> ! <input type=submit value=Search> !</form>!
HTML5 Forms
http://diveintohtml5.info/forms.html
<form> ! <input type=text placeholder=Enter your search terms> ! <input type=submit value=Search> !</form>!
![Page 52: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/52.jpg)
@mraible#DV13 @mraible#DV13
<form> ! <input type=email> ! <input type=submit value=Go> !</form>
HTML5 Forms
![Page 53: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/53.jpg)
HTML5 Killer Features
Editable Text
![Page 54: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/54.jpg)
@mraible#DV13 @mraible#DV13
HTML5 Killer Features
![Page 55: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/55.jpg)
@mraible#DV13 @mraible#DV13
HTML5 StorageWeb Storage APIs: localStorage / sessionStorage
Web SQL Database
IndexedDB
Application Cache
File* APIs
![Page 56: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/56.jpg)
@mraible#DV13 @mraible#DV13
window.localStorageSimple key / value store
Persistent through page reloads
Great for storing user preferences
Avoids HTTP overhead of cookies
<script> localStorage.setItem('key', value); localStorage.getItem('key'); </script>
![Page 57: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/57.jpg)
@mraible#DV13 @mraible#DV13
window.sessionStorageSame as localStorage
Lasts for browser session
New window / tab starts new session
Great for sensitive data (e.g. banking)
Excellent use case: auto-save <textarea>
![Page 58: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/58.jpg)
@mraible#DV13 @mraible#DV13
Other Storage APIsWeb SQL Database
IndexedDB
Not supported by IE9, iOS or Safari
Application Cache
File APIs
![Page 59: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/59.jpg)
@mraible#DV13 @mraible#DV13
Browser Support
![Page 60: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/60.jpg)
@mraible#DV13 @mraible#DV13
CSS3 SecretsAnimated Transitions
Rounded Corners
Drop Shadows
Gradient Colors
Styling based on sibling count
More cursors for better usability
Custom Checkboxes and Radio Buttons http://lea.verou.me/css3-secrets
transform: rotateY(180deg);
border-radius: 8px 8px 0 0;
box-shadow: 2px 2px 4px 4px;
![Page 61: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/61.jpg)
CSS3 Media Queries/* Smartphones (portrait and landscape) ----------- */ !@media only screen and (min-device-width: 320px) !and (max-device-width: 854px) { ! body { ! padding: 10px; ! } ! ! textarea { ! width: 90%; ! } !} ! !/* iPad (portrait and landscape) ----------- */ !@media only screen and (min-device-width: 768px) !and (max-device-width: 1024px) { ! body { ! padding-top: 50px; ! } !}
![Page 62: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/62.jpg)
@mraible#DV13 @mraible#DV13
Cool HTML5 Demos http://fff.cmiscm.com
![Page 63: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/63.jpg)
@mraible#DV13 @mraible#DV13
JavaScriptThe Good Parts
Lambda
Dynamic Objects
Loose Typing
Object Literals
![Page 64: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/64.jpg)
@mraible#DV13 @mraible#DV13
JavaScript Tips
http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
![Page 65: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/65.jpg)
@mraible#DV13 @mraible#DV13
JavaScript Programming PatternsThe Old-School Way
Singleton
Module Pattern
Revealing Module Pattern
Custom Objects
Lazy Function Definition
http://www.klauskomenda.com/code/javascript-programming-patterns/
![Page 66: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/66.jpg)
Revealing Module Pattern
![Page 68: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/68.jpg)
jQueryJavaScript Distribution in Top 10,000 Sites
http://trends.builtwith.com/javascript
![Page 69: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/69.jpg)
@mraible#DV13 @mraible#DV13
jQuery CDN at http://code.jquery.com
$(document).ready
$(document).on(‘click’, ‘#selector’, function() {})
jQuery UI for Dialogs, Sliders, Calendars
$.ajax and $(‘#div’).load(url)
![Page 70: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/70.jpg)
CoffeeScript
![Page 71: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/71.jpg)
@mraible#DV13 @mraible#DV13
AngularJSA JavaScript MVW Framework
From Google, MIT Licensed
Data-binding, Controllers, Dependency Injection
Localization, Components, Testable
Angular-seed for Scaffolding
Great Documentation and Community
![Page 72: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/72.jpg)
@mraible#DV13 @mraible#DV13
AngularJS Basics
![Page 73: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/73.jpg)
@mraible#DV13 @mraible#DV13
Simplified by one man: Addy Osmani
Journey Through The JavaScript MVC Jungle
Learning JavaScript Design Patterns
Choosing a JavaScript MVC Framework
![Page 74: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/74.jpg)
Or Just Choose AngularJS
http://bit.ly/UICDZi
![Page 76: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/76.jpg)
@mraible#dv13javaweb$ @mraible#DV13
AngularJS Deep Dive
http://vimeo.com/mraible/angularjs-deep-dive
![Page 77: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/77.jpg)
@mraible#DV13 @mraible#DV13
Web ComponentsTemplates
Decorators
Custom Elements
Shadow DOM
Imports
![Page 78: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/78.jpg)
@mraible#DV13 @mraible#DV13
PolymerPolyfills
Web Application Framework
Set of UI Components
![Page 79: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/79.jpg)
Polymer Bare Bones
![Page 80: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/80.jpg)
@mraible#DV13 @mraible#DV13
BootstrapGood-looking websites by default
Layouts, navs, pagination, buttons
Mobile First (aka Responsive Design)
Awesome jQuery Plugins / Components
![Page 81: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/81.jpg)
@mraible#DV13 @mraible#DV13
Bootstrap 3 Deep Dive
http://static.raibledesigns.com/bootstrap3
![Page 82: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/82.jpg)
@mraible#DV13 @mraible#DV13
High Performance Web Sites1. Make Fewer HTTP Requests
2. Use a Content Delivery Network
3. Add Expires Headers
4. Gzip Components
5. Put Stylesheets at the Top
6. Put Scripts at the Bottom
7. Avoid CSS Expressions
![Page 83: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/83.jpg)
@mraible#DV13 @mraible#DV13
High Performance Web Sites8. Make JavaScript and CSS External
9. Reduce DNS Lookups
10. Minify JavaScript
11. Avoid Redirects
12. Remove Duplicates Scripts
13. Configure ETags
14. Make Ajax Cacheable
![Page 84: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/84.jpg)
![Page 85: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/85.jpg)
@mraible#DV13 @mraible#DV13
My Page Speed ExperienceBiggest Problem is HTTP Requests
Minify and Concatenate
GZipping has biggest score gain
Expires Headers for Browser Caching
Use Apache or Nginx
Image Sprites for CSS
http://spritecow.com is great
![Page 86: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/86.jpg)
Wro4jOpen Source Java project for optimization of web resources
Provides concatenation and minimization of JS and CSS
Gzip, YUI Compressor, JsHint, JsHint, CssLint, LESS, SASS, CoffeeScript, Dojo Shrinksafe
![Page 87: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/87.jpg)
@mraible#DV13 @mraible#DV13
WebJars and UrlRewrite FilterWebJars: client-side web libraries packages in JARs
http://webjars.org
Servlet 3, Play 2, Grails, Dropwizard, Spring MVC, Tapestry and Wicket
UrlRewriteFilter: like Apache’s mod_rewrite
http://tuckey.org/urlrewrite
Clean URLs and just about everything else
Spring MVC’s <default-servlet-handler/> is your friend
![Page 88: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/88.jpg)
@mraible#DV13 @mraible#DV13
TechniquesVersioning Static Assets with UrlRewriteFilter
http://raibledesigns.com/rd/entry/versioning_static_assets_with_urlrewritefilter
Adding web resource fingerprinting to AppFuse with wro4j
http://www.operatornew.com/2012/10/adding-web-resource-fingerprinting-to.html
![Page 89: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/89.jpg)
But what about nginx?An open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server
Powers Netflix, Wordpress.com, GitHub and Heroku
http://kevinworthington.com/nginx-for-mac-os-x-mountain-lion-in-2-minutes/
![Page 90: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/90.jpg)
@mraible#DV13 @mraible#DV13
Apache Gzip and Expires Headersmod_pagespeed - https://developers.google.com/speed/pagespeed/mod
Automatically applies web performance best practices w/o modification
Improving AppFuse’s PageSpeed with Apache
Configured mod_deflate, mod_expires and turned on KeepAlive
PageSpeed went from 24 to 96!
YSlow went from 90 to 98
![Page 91: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/91.jpg)
Page Speed Deep Dive
http://vimeo.com/mraible/page-speed-demo
![Page 92: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/92.jpg)
<IfModule mod_deflate.c>!! SetOutputFilter DEFLATE!! AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript!! DeflateCompressionLevel 9!! BrowserMatch ^Mozilla/4 gzip-only-text/html! BrowserMatch ^Mozilla/4\.0[678] no-gzip! BrowserMatch \bMSIE !no-gzip !gzip-only-text/html!! DeflateFilterNote Input instream! DeflateFilterNote Output outstream! DeflateFilterNote Ratio ratio! LogFormat '%r %{outstream}n/%{instream}n (%{ratio}n%%)' deflate!</IfModule>
/etc/httpd/conf.d/deflate.conf
![Page 93: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/93.jpg)
<IfModule mod_expires.c>! ExpiresActive On! <FilesMatch \.(jpe?g|png|gif|js|css)$>! ExpiresDefault access plus 1 week! </FilesMatch>! ExpiresByType image/jpeg access plus 1 week! ExpiresByType image/png access plus 1 week! ExpiresByType image/gif access plus 1 week! ExpiresByType text/css access plus 1 week! ExpiresByType application/javascript access plus 1 week! ExpiresByType application/x-javascript access plus 1 week!</IfModule>
/etc/httpd/conf.d/expires.conf
![Page 94: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/94.jpg)
PageSpeed with Apache
http://raibledesigns.com/rd/entry/improving_appfuse_s_pagespeed_with
![Page 95: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/95.jpg)
Load Testing
![Page 96: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/96.jpg)
@mraible#DV13 @mraible#DV13
Performance Monitoring
![Page 97: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/97.jpg)
@mraible#DV13 @mraible#DV13
Google Analytics
![Page 98: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/98.jpg)
DIY with Metrics
![Page 99: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/99.jpg)
Application ArchitectureServer to Client
Performance implications
Airbnb
Charm
Ajaxified Body with pjaxhttps://github.com/defunkt/jquery-pjax
![Page 100: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/100.jpg)
@mraible#DV13 @mraible#DV13
Mobile DevicesIf developing a mobile app with web technologies
Use PhoneGap or Sencha Touch
Otherwise, add a viewport meta tag
<meta name=viewport content=width=device-width, initial-scale=1.0>
![Page 101: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/101.jpg)
@mraible#DV13 @mraible#DV13
Mobile Devices - CSS3 Media Queries
/* Smartphones (portrait and landscape) ----------- */ !@media only screen and (min-device-width: 320px) and (max-device-width: 854px) { ! /* Smartphone rules */!} ! !/* iPad (portrait and landscape) ----------- */ !@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { ! /* Tablet rules */!}
![Page 102: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/102.jpg)
@mraible#DV13 @mraible#DV13
Mobile Devices - Hide Address Bar<script type=text/javascript> ! // Hide address bar for smartphones ! /Mobile/.test(navigator.userAgent) && !location.hash ! && setTimeout(function () { ! if (!pageYOffset) window.scrollTo(0, 1); ! }, 1000); !</script>!
![Page 103: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/103.jpg)
Mobile Devices - Disable Focus Zoom(function(doc) { ! var addEvent = 'addEventListener', ! type = 'gesturestart', ! qsa = 'querySelectorAll', ! scales = [1, 1], ! meta = qsa in doc ? doc[qsa]('meta[name=viewport]') : []; ! ! function fix() { ! meta.content = 'width=device-width,minimum-scale=' + ! scales[0] + ',maximum-scale=' + scales[1]; ! doc.removeEventListener(type, fix, true); ! } ! ! if ((meta = meta[meta.length - 1]) && addEvent in doc) { ! fix(); ! scales = [.25, 1.6]; ! doc[addEvent](type, fix, true); ! } !}(document));
![Page 104: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/104.jpg)
@mraible#DV13 @mraible#DV13
FastClickPolyfill to remove click delays on browsers with touch UIs
Mobile Safari on iOS 3+, Chrome on iOS 5+, Chrome on Android, Opera Mobile 11.5+, Android Browser since Android 2, PlayBook OS 1+
https://github.com/ftlabs/fastclick
@mraible#dv13javaweb$ @mraible#DV13
![Page 105: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/105.jpg)
@mraible#dv13javaweb$ @mraible#DV13
My Mobile App Experience
![Page 106: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/106.jpg)
@mraible#dv13javaweb$ @mraible#DV13
PhoneGap
![Page 107: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/107.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Background Modes
![Page 108: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/108.jpg)
@mraible#DV13 @mraible#DV13
Lessons LearnedDevelop Mobile Client first
Develop Web Client as a one-page app
Don’t rely on the internet for mobile
Keep static assets local for faster startup
Bleeding edge can be painful
![Page 109: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/109.jpg)
@mraible#DV13 @mraible#DV13
The Cloud
![Page 110: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/110.jpg)
@mraible#DV13 @mraible#DV13
The Cloud
Supports Ruby, Node.js, Clojure, Java, Python and Scala
![Page 111: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/111.jpg)
@mraible#DV13 @mraible#DV13
The Cloud
Supports Spring, Grails, Scala, Play, Node.js, Ruby/Rails/Sinatra
Services: MySQL, PostgreSQL, MongoDB, Redis, RabbitMQ
![Page 113: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/113.jpg)
@mraible#DV13 @mraible#DV13
Apache TomEE
![Page 114: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/114.jpg)
@mraible#DV13 @mraible#DV13
Security MattersBe aware of SQL and Content Injection
Disable Cross-Site Scripting (XSS)
Don’t give too much information in error pages and exceptions
Stop unvalidated redirects and forwards
Always use https if your application has private data
Understand what browsers have to deal with
![Page 115: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/115.jpg)
@mraible#DV13 @mraible#DV13
OWASPThe Open Web Application Security Project (OWASP) is a worldwide not-for-profit charitable organization focused on improving the security of software.
At OWASP you’ll find free and open ...
Application security tools, complete books, standard security controls and libraries, cutting edge research
http://www.owasp.org
![Page 116: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/116.jpg)
@mraible#DV13
OWASP Top 101. Injection Flaws
2. Broken Authentication
3. XSS
4. Direct Object Reference
5. Security Misconfiguration
6. Sensitive Data Exposure
7. Missing Access Controls
8. CSRF
9. Using Components with Vulnerabilities
10.Unvalidated Redirectshttps://www.owasp.org/index.php/Top_10_2013-Top_10
@mraible#DV13 @mraible#DV13
![Page 117: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/117.jpg)
@mraible#DV13 @mraible#DV13
7 Security (Mis)Configurations in web.xml1. Error pages not configured
2. Authentication & Authorization Bypass
3. SSL Not Configured
4. Not Using the Secure Flag
![Page 118: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/118.jpg)
@mraible#DV13 @mraible#DV13
7 Security (Mis)Configurations in web.xml5. Not Using the HttpOnly Flag
6. Using URL Parameters for Session Tracking
7. Not Setting a Session Timeout
http://software-security.sans.org/blog/2010/08/11/security-misconfigurations-java-webxml-files
![Page 119: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/119.jpg)
Zed Attack Proxy - ZAP
https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
![Page 120: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/120.jpg)
@mraible#DV13 @mraible#DV13
Fixing Vulnerabilities
<session-config>! <session-timeout>15</session-timeout>! <cookie-config>! <http-only>true</http-only>! <secure>true</secure>! </cookie-config>! <tracking-mode>COOKIE</tracking-mode>! </session-config>!!! <form action="${ctx}/j_security_check" id="loginForm" ! method="post" autocomplete="off">!
![Page 121: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/121.jpg)
Content Security Policy
![Page 122: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/122.jpg)
@mraible#DV13 @mraible#DV13
Content Security PolicyAn HTTP Header with whitelist of trusted content
Bans inline <script> tags, inline event handlers and javascript: URLs
No eval(), new Function(), setTimeout or setInterval
Supported in Chrome 16+, Safari 6+, and Firefox 4+, and (very) limited in IE 10
![Page 123: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/123.jpg)
@mraible#DV13 @mraible#DV13
The Modern JVM Web DeveloperStarts with Fast Hardware
Uses IntelliJ IDEA
Leverages HTML5, JavaScript, and CSS3
Creates High Performance Web Sites
For Mobile Devices, in the Cloud
And cares about Security
![Page 124: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/124.jpg)
Staying ModernRead
Attend Conferences
Submit a talk!
Write
Do
Get Paid
Open Source
![Page 125: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/125.jpg)
@mraible#dv13javaweb$ @mraible#DV13
Technology doesn’t create success…
![Page 126: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/126.jpg)
@mraible#dv13javaweb$ @mraible#DV13
People do.
![Page 127: The Modern Java Web Developer Bootcamp - Devoxx 2013](https://reader033.vdocuments.us/reader033/viewer/2022052409/540cfef67bef0a84278b8c79/html5/thumbnails/127.jpg)
Questions?Contact Me!
http://raibledesigns.com
@mraible
Presentationshttp://slideshare.net/mraible
Codehttp://github.com/mraible