SlideShare uma empresa Scribd logo
1 de 80
Baixar para ler offline
The Modern Java Web Developer
  Matt Raible • http://raibledesigns.com




Photos by Trish McGinity and Art Escobado   © 2013 Raible Designs
Who is Matt Raible?
                                              Father, Skier, Cyclist




                     Web Framework Connoisseur
Founder of AppFuse




  Blogger on raibledesigns.com
                      © 2013 Raible Designs
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?



                                © 2013 Raible Designs
Topic Inspiration

• Inspired 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




                                    © 2013 Raible Designs
Purpose




          © 2013 Raible Designs
The Modern Java Web Developer




                                          JVM

                  © 2013 Raible Designs
The Modern JVM Web Developer

• Starts with Fast Hardware


• Uses IntelliJ IDEA


• Leverages jQuery, HTML5, and CSS3


• Creates High Performance Web Sites


• For Mobile Devices


• In the Cloud


• And cares about Security

                               © 2013 Raible Designs
Fast Hardware




                © 2013 Raible Designs
IntelliJ




           © 2013 Raible Designs
Supports 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>



                          © 2013 Raible Designs
Java 7 and 8

• Strings in switch statements


• Improved exception handling with multi-catch


• Try with resources


• Diamond Syntax


• NIO.2: Path, Files and Asynchronous I/O


    Path path = FileSystems.getDefault().getPath(logs, access.log);
    BufferReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);




                                   © 2013 Raible Designs
Java 7 and 8

• Functional Interfaces with default method


• Lambda Expressions (a.k.a. Closures)

         // sort a list by lastName
         List<Person> persons = ...;
         persons.sort((p1, p2) ->
             p1.getLastName().compareTo(p2.getLastName()));



• JSR 310 Date and Time API


• Parallel Collections


• Nashorn JavaScript Engine

                                 © 2013 Raible Designs
The Modern JVM Web Developer is aware of...

• %s/Hibernate/Spring Data


• Servlet 3


    • @WebServlet, @WebFilter, @WebListener


    • Asynchronous Servlets


    • WebApplicationInitializer (to eliminate web.xml)


• Functional Programming


• REST

                                  © 2013 Raible Designs
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




                                    © 2013 Raible Designs
Scala Basics

• def starts a method


• variables are started with var or val


• variables are defined with name:type


• semicolons are not required




                                  © 2013 Raible Designs
Scala vs. Java

 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;
     }
 }




                           © 2013 Raible Designs
Scala vs. Java




         class Car(val year: Int, var miles: Int)




                        © 2013 Raible Designs
What about Groovy?




                     © 2013 Raible Designs
Groovy is still hot...




                         © 2013 Raible Designs
Learning Scala

• Scala for the Impatient - Cay Horstmann


• Programming in Scala, 2nd Edition - Martin Odersky, Lex Spoon, and Bill
  Venners


• Functional Programming Principles in Scala


  • Mar 25th 2013 (7 weeks long)


  • 5-7 Hours per week


  • Signup at https://www.coursera.org/course/progfun



                                © 2013 Raible Designs
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/

                             © 2013 Raible Designs
and ... it’s still the most popular!




                        © 2013 Raible Designs
The Services Developer




                    © 2013 Raible Designs
Fast APIs




        JAX-RS                       Dropwizard




             © 2013 Raible Designs
Document Your API




                    © 2013 Raible Designs
Document Your API




                    © 2013 Raible Designs
But if want to remain a Web Developer...




                     © 2013 Raible Designs
Modern Principles




                    © 2013 Raible Designs
Browser Tools

• Firebug for FireFox


• Chrome Developer Tools


   • Elements & Console


   • Settings


   • PageSpeed Insights


   • http://www.igvita.com/slides/2012/devtools-tips-and-tricks




                                 © 2013 Raible Designs
jQuery

           Websites using jQuery




         http://trends.builtwith.com/javascript/jQuery

                        © 2013 Raible Designs
jQuery

  JavaScript Distribution in Top 10,000 Sites




              http://trends.builtwith.com/javascript


                          © 2013 Raible Designs
jQuery

• 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)




                                    © 2013 Raible Designs
JavaScript

• The Good Parts


  • Lambda


  • Dynamic Objects


  • Loose Typing


  • Object Literals




                      © 2013 Raible Designs
JavaScript Tips




     http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/




                             © 2013 Raible Designs
JavaScript Programming Patterns

• The Old-School Way


• Singleton


• Module Pattern


• Revealing Module Pattern


• Custom Objects


• Lazy Function Definition


• http://www.klauskomenda.com/code/javascript-programming-patterns/

                              © 2013 Raible Designs
Revealing Module Pattern




                    © 2013 Raible Designs
CoffeeScript




               © 2013 Raible Designs
AngularJS

• A JavaScript MVW Framework


• From Google


• MIT Licensed


• Data-binding, Controllers, Dependency Injection


• Localization, Components, Testable


• Angular-seed for Scaffolding


• Great Documentation and Community

                                 © 2013 Raible Designs
AngularJS Basics




                   © 2013 Raible Designs
Choosing a JavaScript MVC Framework

• Journey Through The JavaScript MVC Jungle


• Learning JavaScript Design Patterns




                     http://addyosmani.github.com/todomvc/

                                 © 2013 Raible Designs
Or Just Choose AngularJS




                                           http://bit.ly/UICDZi



                   © 2013 Raible Designs
My Angular JS Experience




                   © 2013 Raible Designs
HTML5




        http://on.wsj.com/tEGIJL
           © 2013 Raible Designs
How do you write HTML5?

<!DOCTYPE html>

<article> <aside> <section>
<header> <footer> <nav>
<audio> <canvas> <video>
<datalist> <details>

<applet> <center> <font>
<frame> <frameset>
https://developer.mozilla.org/en-US/docs/HTML/HTML5

                                           © 2013 Raible Designs
HTML5 Forms

<form>
    <input type=text placeholder=Enter your search terms>
    <input type=submit value=Search/>
</form>


<form>
    <input type=text autofocus>
    <input type=submit value=Search/>
</form>


<form>
    <input type=text required>
    <input type=submit value=Search/>
</form>
                        http://diveintohtml5.info/forms.html
                         © 2013 Raible Designs
HTML5 Forms



        <form>
          <input type=email>
          <input type=submit value=Go>
        </form>




                    © 2013 Raible Designs
HTML5 Killer Features

                        Editable Text




                    © 2013 Raible Designs
HTML5 Killer Features




                    © 2013 Raible Designs
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

                                      © 2013 Raible Designs
CSS3 Media Queries

/* Smartphones (portrait and landscape) ----------- */
@media only screen and (min-device-width: 320px) and (max-device-width: 854px) {
    body {
        padding: 10px;
    }

    .pubbox textarea {
        width: 90%;
    }

    .width160 {
        width: 100px;
        min-width: 100px;
    }
}

/* iPad (portrait and landscape) ----------- */
@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
    body {
        padding-top: 50px;
    }
}



                                  © 2013 Raible Designs
Cool HTML5 Demos                           http://fff.cmiscm.com




                   © 2013 Raible Designs
Bootstrap

• Good-looking websites by default


• Layouts, navs, pagination, buttons


• Responsive for Mobile


• 13 Custom jQuery Plugins


• Themes


  • {wrap}bootstrap (Market)


  • Bootswatch (OSS)

                                 © 2013 Raible Designs
LESS




       © 2013 Raible Designs
LESS




       © 2013 Raible Designs
High Performance Web Sites

1. 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

                                © 2013 Raible Designs
High Performance Web Sites

8.   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

                                © 2013 Raible Designs
My Page Speed Experience

• Biggest 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

                                    © 2013 Raible Designs
Wro4j

• Open 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




                                 © 2013 Raible Designs
Sidenote: WebJars and UrlRewrite Filter

• WebJars: 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

                                    © 2013 Raible Designs
Techniques

• Versioning 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


• Improving AppFuse’s PageSpeed with Apache


   • http://raibledesigns.com/rd/entry/improving_appfuse_s_pagespeed_with


                                  © 2013 Raible Designs
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/




                                © 2013 Raible Designs
Apache Gzip and Expires Headers

• mod_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




                               © 2013 Raible Designs
/etc/httpd/conf.d/deflate.conf

<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>


                                 © 2013 Raible Designs
/etc/httpd/conf.d/expires.conf



<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>




                                 © 2013 Raible Designs
Application Architecture

• Server to Client


• Performance implications


    • Twitter


    • Airbnb


    • Charm


• Ajaxified Body with pjax

      https://github.com/defunkt/jquery-pjax

 © 2013 Raible Designs
Mobile Devices

• If 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>




                                 © 2013 Raible Designs
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 */
    }




                        © 2013 Raible Designs
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>




                          © 2013 Raible Designs
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));
                            © 2013 Raible Designs
The Cloud




            © 2013 Raible Designs
The Cloud




   • Supports Ruby, Node.js, Clojure, Java, Python and Scala


   • Java: https://devcenter.heroku.com/articles/java




                              © 2013 Raible Designs
The Cloud




   • Supports Spring, Grails, Scala, Play, Node.js, Ruby/Rails/
     Sinatra


   • Services: MySQL, PostgreSQL, MongoDB, Redis,
     RabbitMQ


   • Biggest con: no pricing yet




                               © 2013 Raible Designs
The Cloud




            © 2013 Raible Designs
Apache TomEE




               © 2013 Raible Designs
Security Matters

• Be 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




                                  © 2013 Raible Designs
The Modern JVM Web Developer

• Starts with Fast Hardware


• Uses IntelliJ IDEA


• Leverages jQuery, HTML5, and CSS3


• Creates High Performance Web Sites


• For Mobile Devices


• In the Cloud


• And cares about Security

                               © 2013 Raible Designs
Staying Modern

• Read


• Attend Conferences


   • Submit a talk!


• Write


• Do


   • Get Paid


   • Open Source

                       © 2013 Raible Designs
Learning Resources

• http://learn.shayhowe.com




• http://teamtreehouse.com




                              © 2013 Raible Designs
Cask-Strength HTML5 Training

• The Modern Web Developer's Toolkit - Scott Davis


• Advanced JavaScript: The 'What You Need To Know' Parts - Kyle Simpson


• Airplane-Mode HTML5: Mobile Web Development for Tablets and
  Smartphones - Scott Davis


• Unleash The Faster Web: Secrets of Website Performance - Kyle Simpson


• Writing HTML5 Games: 2D Game Programming Techniques - Dave Geary


• Register at http://thirstyhead.eventbrite.com; Denver in March, Austin in April



                                  © 2013 Raible Designs
Questions?

Contact Information


   http://raibledesigns.com

   @mraible

Presentations


         http://slideshare.net/mraible

Code


         http://github.com/mraible




                                     © 2013 Raible Designs

Mais conteúdo relacionado

Mais procurados

Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Matt Raible
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...Matt Raible
 
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon RitterJava Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon RitterJAX London
 
Apache Wicket Web Framework
Apache Wicket Web FrameworkApache Wicket Web Framework
Apache Wicket Web FrameworkLuther Baker
 
Play Framework vs Grails Smackdown - JavaOne 2013
Play Framework vs Grails Smackdown - JavaOne 2013Play Framework vs Grails Smackdown - JavaOne 2013
Play Framework vs Grails Smackdown - JavaOne 2013Matt Raible
 
EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?Andrew Mleczko
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016Matt Raible
 
HATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleHATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleApigee | Google Cloud
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsStefano Celentano
 
jDays2015 - JavaEE vs. Spring Smackdown
jDays2015 - JavaEE vs. Spring SmackdownjDays2015 - JavaEE vs. Spring Smackdown
jDays2015 - JavaEE vs. Spring SmackdownMert Çalışkan
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and SlingLo Ki
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance JavaVikas Goyal
 
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniIntegrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniAEM HUB
 
Java Web Application Security - Jazoon 2011
Java Web Application Security - Jazoon 2011Java Web Application Security - Jazoon 2011
Java Web Application Security - Jazoon 2011Matt Raible
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015Matt Raible
 

Mais procurados (20)

Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Rich Web Experie...
 
JavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
JavaCro'15 - Java EE 8 - An instant snapshot - David DelabasseeJavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
JavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
 
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon RitterJava Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
Java Core | JavaFX 2.0: Great User Interfaces in Java | Simon Ritter
 
Apache Wicket Web Framework
Apache Wicket Web FrameworkApache Wicket Web Framework
Apache Wicket Web Framework
 
React native
React nativeReact native
React native
 
Play Framework vs Grails Smackdown - JavaOne 2013
Play Framework vs Grails Smackdown - JavaOne 2013Play Framework vs Grails Smackdown - JavaOne 2013
Play Framework vs Grails Smackdown - JavaOne 2013
 
EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx France 2016
 
HATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleHATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API Style
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling Models
 
jDays2015 - JavaEE vs. Spring Smackdown
jDays2015 - JavaEE vs. Spring SmackdownjDays2015 - JavaEE vs. Spring Smackdown
jDays2015 - JavaEE vs. Spring Smackdown
 
AEM and Sling
AEM and SlingAEM and Sling
AEM and Sling
 
Java Modularity: the Year After
Java Modularity: the Year AfterJava Modularity: the Year After
Java Modularity: the Year After
 
Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
 
Getting started with angular js
Getting started with angular jsGetting started with angular js
Getting started with angular js
 
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit GubraniIntegrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
Integrating Apache Wookie with AEM by Rima Mittal and Ankit Gubrani
 
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
 
Java Web Application Security - Jazoon 2011
Java Web Application Security - Jazoon 2011Java Web Application Security - Jazoon 2011
Java Web Application Security - Jazoon 2011
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015
 

Destaque

Java Web Application Security - Denver JUG 2013
Java Web Application Security - Denver JUG 2013Java Web Application Security - Denver JUG 2013
Java Web Application Security - Denver JUG 2013Matt Raible
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Matt Raible
 
The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013Matt Raible
 
Comparing JVM Web Frameworks - Devoxx France 2013
Comparing JVM Web Frameworks - Devoxx France 2013Comparing JVM Web Frameworks - Devoxx France 2013
Comparing JVM Web Frameworks - Devoxx France 2013Matt Raible
 
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015Matt Raible
 
Open source Tools and Frameworks for M2M - Sierra Wireless Developer Days
Open source Tools and Frameworks for M2M - Sierra Wireless Developer DaysOpen source Tools and Frameworks for M2M - Sierra Wireless Developer Days
Open source Tools and Frameworks for M2M - Sierra Wireless Developer DaysBenjamin Cabé
 
Get Hip with JHipster - Denver JUG 2015
Get Hip with JHipster - Denver JUG 2015Get Hip with JHipster - Denver JUG 2015
Get Hip with JHipster - Denver JUG 2015Matt Raible
 
Comparing JVM Web Frameworks - February 2014
Comparing JVM Web Frameworks - February 2014Comparing JVM Web Frameworks - February 2014
Comparing JVM Web Frameworks - February 2014Matt Raible
 
Java Web Application Security - Utah JUG 2011
Java Web Application Security - Utah JUG 2011Java Web Application Security - Utah JUG 2011
Java Web Application Security - Utah JUG 2011Matt Raible
 
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015Matt Raible
 
The Art of Angular in 2016 - Devoxx UK 2016
The Art of Angular in 2016 - Devoxx UK 2016The Art of Angular in 2016 - Devoxx UK 2016
The Art of Angular in 2016 - Devoxx UK 2016Matt Raible
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016Matt Raible
 
The Art of Angular in 2016 - Devoxx France 2016
The Art of Angular in 2016 - Devoxx France 2016The Art of Angular in 2016 - Devoxx France 2016
The Art of Angular in 2016 - Devoxx France 2016Matt Raible
 
Introduction to Hardware with littleBits
Introduction to Hardware with littleBitsIntroduction to Hardware with littleBits
Introduction to Hardware with littleBitsTack Mobile
 
Introduction to Java Programming
Introduction to Java ProgrammingIntroduction to Java Programming
Introduction to Java ProgrammingRavi Kant Sahu
 
Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Duy Lê Văn
 
Google AdWords 101 (Versione Aggiornata)
Google AdWords 101 (Versione Aggiornata)Google AdWords 101 (Versione Aggiornata)
Google AdWords 101 (Versione Aggiornata)MOCA Interactive
 

Destaque (20)

Java Web Application Security - Denver JUG 2013
Java Web Application Security - Denver JUG 2013Java Web Application Security - Denver JUG 2013
Java Web Application Security - Denver JUG 2013
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
 
The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013The Modern Java Web Developer Bootcamp - Devoxx 2013
The Modern Java Web Developer Bootcamp - Devoxx 2013
 
Comparing JVM Web Frameworks - Devoxx France 2013
Comparing JVM Web Frameworks - Devoxx France 2013Comparing JVM Web Frameworks - Devoxx France 2013
Comparing JVM Web Frameworks - Devoxx France 2013
 
Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015Developing, Testing and Scaling with Apache Camel - UberConf 2015
Developing, Testing and Scaling with Apache Camel - UberConf 2015
 
Open source Tools and Frameworks for M2M - Sierra Wireless Developer Days
Open source Tools and Frameworks for M2M - Sierra Wireless Developer DaysOpen source Tools and Frameworks for M2M - Sierra Wireless Developer Days
Open source Tools and Frameworks for M2M - Sierra Wireless Developer Days
 
Get Hip with JHipster - Denver JUG 2015
Get Hip with JHipster - Denver JUG 2015Get Hip with JHipster - Denver JUG 2015
Get Hip with JHipster - Denver JUG 2015
 
Comparing JVM Web Frameworks - February 2014
Comparing JVM Web Frameworks - February 2014Comparing JVM Web Frameworks - February 2014
Comparing JVM Web Frameworks - February 2014
 
Core java complete notes - Contact at +91-814-614-5674
Core java complete notes - Contact at +91-814-614-5674Core java complete notes - Contact at +91-814-614-5674
Core java complete notes - Contact at +91-814-614-5674
 
Java Web Application Security - Utah JUG 2011
Java Web Application Security - Utah JUG 2011Java Web Application Security - Utah JUG 2011
Java Web Application Security - Utah JUG 2011
 
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015
#NoXML: Eliminating XML in Spring Projects - SpringOne 2GX 2015
 
Core java slides
Core java slidesCore java slides
Core java slides
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
 
The Art of Angular in 2016 - Devoxx UK 2016
The Art of Angular in 2016 - Devoxx UK 2016The Art of Angular in 2016 - Devoxx UK 2016
The Art of Angular in 2016 - Devoxx UK 2016
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Devoxx UK 2016
 
The Art of Angular in 2016 - Devoxx France 2016
The Art of Angular in 2016 - Devoxx France 2016The Art of Angular in 2016 - Devoxx France 2016
The Art of Angular in 2016 - Devoxx France 2016
 
Introduction to Hardware with littleBits
Introduction to Hardware with littleBitsIntroduction to Hardware with littleBits
Introduction to Hardware with littleBits
 
Introduction to Java Programming
Introduction to Java ProgrammingIntroduction to Java Programming
Introduction to Java Programming
 
Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)
 
Google AdWords 101 (Versione Aggiornata)
Google AdWords 101 (Versione Aggiornata)Google AdWords 101 (Versione Aggiornata)
Google AdWords 101 (Versione Aggiornata)
 

Semelhante a The Modern Java Web Developer - Denver JUG 2013

ACADGILD:: FRONTEND LESSON -Ruby on rails vs groovy on rails
ACADGILD:: FRONTEND LESSON -Ruby on rails vs groovy on railsACADGILD:: FRONTEND LESSON -Ruby on rails vs groovy on rails
ACADGILD:: FRONTEND LESSON -Ruby on rails vs groovy on railsPadma shree. T
 
Training presentation.pptx
Training presentation.pptxTraining presentation.pptx
Training presentation.pptxNishchaiyaBayla1
 
Responsivedesign 7-3-2012
Responsivedesign 7-3-2012Responsivedesign 7-3-2012
Responsivedesign 7-3-2012Thomas Carney
 
Comparing JVM Web Frameworks - Rich Web Experience 2010
Comparing JVM Web Frameworks - Rich Web Experience 2010Comparing JVM Web Frameworks - Rich Web Experience 2010
Comparing JVM Web Frameworks - Rich Web Experience 2010Matt Raible
 
Introduction To Groovy And Grails - SpringPeople
Introduction To Groovy And Grails - SpringPeopleIntroduction To Groovy And Grails - SpringPeople
Introduction To Groovy And Grails - SpringPeopleSpringPeople
 
An Introduction to AngularJS
An Introduction to AngularJSAn Introduction to AngularJS
An Introduction to AngularJSFalk Hartmann
 
Build (Web)VR with A-Frame (COSCUP 2019 Taipei)
Build (Web)VR with A-Frame (COSCUP 2019 Taipei)Build (Web)VR with A-Frame (COSCUP 2019 Taipei)
Build (Web)VR with A-Frame (COSCUP 2019 Taipei)Robert 'Bob' Reyes
 
Ilya Ivanov - Advanced React-Native
Ilya Ivanov - Advanced React-NativeIlya Ivanov - Advanced React-Native
Ilya Ivanov - Advanced React-NativeOdessaJS Conf
 
How You Convince Your Manager To Adopt Scala.js in Production
How You Convince Your Manager To Adopt Scala.js in ProductionHow You Convince Your Manager To Adopt Scala.js in Production
How You Convince Your Manager To Adopt Scala.js in ProductionBoldRadius Solutions
 
What's New in Spring 3.1
What's New in Spring 3.1What's New in Spring 3.1
What's New in Spring 3.1Matt Raible
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
API Description Languages: Which Is The Right One For Me?
 API Description Languages: Which Is The Right One For Me?  API Description Languages: Which Is The Right One For Me?
API Description Languages: Which Is The Right One For Me? ProgrammableWeb
 
intoduction to Grails Framework
intoduction to Grails Frameworkintoduction to Grails Framework
intoduction to Grails FrameworkHarshdeep Kaur
 
Viridians on Rails
Viridians on RailsViridians on Rails
Viridians on RailsViridians
 
Internship softwaretraining@ijse
Internship softwaretraining@ijseInternship softwaretraining@ijse
Internship softwaretraining@ijseJinadi Rashmika
 
Functional Scala 2022 - scalajs Alexis.pdf
Functional Scala 2022 - scalajs Alexis.pdfFunctional Scala 2022 - scalajs Alexis.pdf
Functional Scala 2022 - scalajs Alexis.pdfssusercd195b
 
Neoito — NativeScript Best Coding Practices
Neoito — NativeScript Best Coding PracticesNeoito — NativeScript Best Coding Practices
Neoito — NativeScript Best Coding PracticesNeoito
 

Semelhante a The Modern Java Web Developer - Denver JUG 2013 (20)

ACADGILD:: FRONTEND LESSON -Ruby on rails vs groovy on rails
ACADGILD:: FRONTEND LESSON -Ruby on rails vs groovy on railsACADGILD:: FRONTEND LESSON -Ruby on rails vs groovy on rails
ACADGILD:: FRONTEND LESSON -Ruby on rails vs groovy on rails
 
Training presentation.pptx
Training presentation.pptxTraining presentation.pptx
Training presentation.pptx
 
Responsivedesign 7-3-2012
Responsivedesign 7-3-2012Responsivedesign 7-3-2012
Responsivedesign 7-3-2012
 
Sai Sharan_UI_Resume
Sai Sharan_UI_ResumeSai Sharan_UI_Resume
Sai Sharan_UI_Resume
 
Comparing JVM Web Frameworks - Rich Web Experience 2010
Comparing JVM Web Frameworks - Rich Web Experience 2010Comparing JVM Web Frameworks - Rich Web Experience 2010
Comparing JVM Web Frameworks - Rich Web Experience 2010
 
Introduction To Groovy And Grails - SpringPeople
Introduction To Groovy And Grails - SpringPeopleIntroduction To Groovy And Grails - SpringPeople
Introduction To Groovy And Grails - SpringPeople
 
An Introduction to AngularJS
An Introduction to AngularJSAn Introduction to AngularJS
An Introduction to AngularJS
 
Build (Web)VR with A-Frame (COSCUP 2019 Taipei)
Build (Web)VR with A-Frame (COSCUP 2019 Taipei)Build (Web)VR with A-Frame (COSCUP 2019 Taipei)
Build (Web)VR with A-Frame (COSCUP 2019 Taipei)
 
Ilya Ivanov - Advanced React-Native
Ilya Ivanov - Advanced React-NativeIlya Ivanov - Advanced React-Native
Ilya Ivanov - Advanced React-Native
 
How You Convince Your Manager To Adopt Scala.js in Production
How You Convince Your Manager To Adopt Scala.js in ProductionHow You Convince Your Manager To Adopt Scala.js in Production
How You Convince Your Manager To Adopt Scala.js in Production
 
What's New in Spring 3.1
What's New in Spring 3.1What's New in Spring 3.1
What's New in Spring 3.1
 
Grails
GrailsGrails
Grails
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
API Description Languages: Which Is The Right One For Me?
 API Description Languages: Which Is The Right One For Me?  API Description Languages: Which Is The Right One For Me?
API Description Languages: Which Is The Right One For Me?
 
Oracle JET overview
Oracle JET overviewOracle JET overview
Oracle JET overview
 
intoduction to Grails Framework
intoduction to Grails Frameworkintoduction to Grails Framework
intoduction to Grails Framework
 
Viridians on Rails
Viridians on RailsViridians on Rails
Viridians on Rails
 
Internship softwaretraining@ijse
Internship softwaretraining@ijseInternship softwaretraining@ijse
Internship softwaretraining@ijse
 
Functional Scala 2022 - scalajs Alexis.pdf
Functional Scala 2022 - scalajs Alexis.pdfFunctional Scala 2022 - scalajs Alexis.pdf
Functional Scala 2022 - scalajs Alexis.pdf
 
Neoito — NativeScript Best Coding Practices
Neoito — NativeScript Best Coding PracticesNeoito — NativeScript Best Coding Practices
Neoito — NativeScript Best Coding Practices
 

Mais de Matt Raible

Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022Matt Raible
 
Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Belfast JUG 2022Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Belfast JUG 2022Matt Raible
 
Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022Matt Raible
 
Micro Frontends for Java Microservices - Cork JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022Micro Frontends for Java Microservices - Cork JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022Matt Raible
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Matt Raible
 
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022Matt Raible
 
Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Devoxx France 2022Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Devoxx France 2022Matt Raible
 
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...Matt Raible
 
Native Java with Spring Boot and JHipster - Garden State JUG 2021
Native Java with Spring Boot and JHipster - Garden State JUG 2021Native Java with Spring Boot and JHipster - Garden State JUG 2021
Native Java with Spring Boot and JHipster - Garden State JUG 2021Matt Raible
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Matt Raible
 
Web App Security for Java Developers - PWX 2021
Web App Security for Java Developers - PWX 2021Web App Security for Java Developers - PWX 2021
Web App Security for Java Developers - PWX 2021Matt Raible
 
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...Matt Raible
 
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...Matt Raible
 
Web App Security for Java Developers - UberConf 2021
Web App Security for Java Developers - UberConf 2021Web App Security for Java Developers - UberConf 2021
Web App Security for Java Developers - UberConf 2021Matt Raible
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Matt Raible
 
Native Java with Spring Boot and JHipster - SF JUG 2021
Native Java with Spring Boot and JHipster - SF JUG 2021Native Java with Spring Boot and JHipster - SF JUG 2021
Native Java with Spring Boot and JHipster - SF JUG 2021Matt Raible
 
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...Matt Raible
 
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Matt Raible
 
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Get Hip with JHipster - Colorado Springs Open Source User Group 2021Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Get Hip with JHipster - Colorado Springs Open Source User Group 2021Matt Raible
 
JHipster and Okta - JHipster Virtual Meetup December 2020
JHipster and Okta - JHipster Virtual Meetup December 2020JHipster and Okta - JHipster Virtual Meetup December 2020
JHipster and Okta - JHipster Virtual Meetup December 2020Matt Raible
 

Mais de Matt Raible (20)

Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
 
Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Belfast JUG 2022Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Belfast JUG 2022
 
Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022
 
Micro Frontends for Java Microservices - Cork JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022Micro Frontends for Java Microservices - Cork JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
 
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
 
Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Devoxx France 2022Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Devoxx France 2022
 
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
 
Native Java with Spring Boot and JHipster - Garden State JUG 2021
Native Java with Spring Boot and JHipster - Garden State JUG 2021Native Java with Spring Boot and JHipster - Garden State JUG 2021
Native Java with Spring Boot and JHipster - Garden State JUG 2021
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
 
Web App Security for Java Developers - PWX 2021
Web App Security for Java Developers - PWX 2021Web App Security for Java Developers - PWX 2021
Web App Security for Java Developers - PWX 2021
 
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
 
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
 
Web App Security for Java Developers - UberConf 2021
Web App Security for Java Developers - UberConf 2021Web App Security for Java Developers - UberConf 2021
Web App Security for Java Developers - UberConf 2021
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021
 
Native Java with Spring Boot and JHipster - SF JUG 2021
Native Java with Spring Boot and JHipster - SF JUG 2021Native Java with Spring Boot and JHipster - SF JUG 2021
Native Java with Spring Boot and JHipster - SF JUG 2021
 
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
 
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
 
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Get Hip with JHipster - Colorado Springs Open Source User Group 2021Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
 
JHipster and Okta - JHipster Virtual Meetup December 2020
JHipster and Okta - JHipster Virtual Meetup December 2020JHipster and Okta - JHipster Virtual Meetup December 2020
JHipster and Okta - JHipster Virtual Meetup December 2020
 

Último

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 

Último (20)

Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 

The Modern Java Web Developer - Denver JUG 2013

  • 1. The Modern Java Web Developer Matt Raible • http://raibledesigns.com Photos by Trish McGinity and Art Escobado © 2013 Raible Designs
  • 2. Who is Matt Raible? Father, Skier, Cyclist Web Framework Connoisseur Founder of AppFuse Blogger on raibledesigns.com © 2013 Raible Designs
  • 3. 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? © 2013 Raible Designs
  • 4. Topic Inspiration • Inspired 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 © 2013 Raible Designs
  • 5. Purpose © 2013 Raible Designs
  • 6. The Modern Java Web Developer JVM © 2013 Raible Designs
  • 7. The Modern JVM Web Developer • Starts with Fast Hardware • Uses IntelliJ IDEA • Leverages jQuery, HTML5, and CSS3 • Creates High Performance Web Sites • For Mobile Devices • In the Cloud • And cares about Security © 2013 Raible Designs
  • 8. Fast Hardware © 2013 Raible Designs
  • 9. IntelliJ © 2013 Raible Designs
  • 10. Supports 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> © 2013 Raible Designs
  • 11. Java 7 and 8 • Strings in switch statements • Improved exception handling with multi-catch • Try with resources • Diamond Syntax • NIO.2: Path, Files and Asynchronous I/O Path path = FileSystems.getDefault().getPath(logs, access.log); BufferReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8); © 2013 Raible Designs
  • 12. Java 7 and 8 • Functional Interfaces with default method • Lambda Expressions (a.k.a. Closures) // sort a list by lastName List<Person> persons = ...; persons.sort((p1, p2) -> p1.getLastName().compareTo(p2.getLastName())); • JSR 310 Date and Time API • Parallel Collections • Nashorn JavaScript Engine © 2013 Raible Designs
  • 13. The Modern JVM Web Developer is aware of... • %s/Hibernate/Spring Data • Servlet 3 • @WebServlet, @WebFilter, @WebListener • Asynchronous Servlets • WebApplicationInitializer (to eliminate web.xml) • Functional Programming • REST © 2013 Raible Designs
  • 14. 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 © 2013 Raible Designs
  • 15. Scala Basics • def starts a method • variables are started with var or val • variables are defined with name:type • semicolons are not required © 2013 Raible Designs
  • 16. Scala vs. Java 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; } } © 2013 Raible Designs
  • 17. Scala vs. Java class Car(val year: Int, var miles: Int) © 2013 Raible Designs
  • 18. What about Groovy? © 2013 Raible Designs
  • 19. Groovy is still hot... © 2013 Raible Designs
  • 20. Learning Scala • Scala for the Impatient - Cay Horstmann • Programming in Scala, 2nd Edition - Martin Odersky, Lex Spoon, and Bill Venners • Functional Programming Principles in Scala • Mar 25th 2013 (7 weeks long) • 5-7 Hours per week • Signup at https://www.coursera.org/course/progfun © 2013 Raible Designs
  • 21. 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/ © 2013 Raible Designs
  • 22. and ... it’s still the most popular! © 2013 Raible Designs
  • 23. The Services Developer © 2013 Raible Designs
  • 24. Fast APIs JAX-RS Dropwizard © 2013 Raible Designs
  • 25. Document Your API © 2013 Raible Designs
  • 26. Document Your API © 2013 Raible Designs
  • 27. But if want to remain a Web Developer... © 2013 Raible Designs
  • 28. Modern Principles © 2013 Raible Designs
  • 29. Browser Tools • Firebug for FireFox • Chrome Developer Tools • Elements & Console • Settings • PageSpeed Insights • http://www.igvita.com/slides/2012/devtools-tips-and-tricks © 2013 Raible Designs
  • 30. jQuery Websites using jQuery http://trends.builtwith.com/javascript/jQuery © 2013 Raible Designs
  • 31. jQuery JavaScript Distribution in Top 10,000 Sites http://trends.builtwith.com/javascript © 2013 Raible Designs
  • 32. jQuery • 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) © 2013 Raible Designs
  • 33. JavaScript • The Good Parts • Lambda • Dynamic Objects • Loose Typing • Object Literals © 2013 Raible Designs
  • 34. JavaScript Tips http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ © 2013 Raible Designs
  • 35. JavaScript Programming Patterns • The Old-School Way • Singleton • Module Pattern • Revealing Module Pattern • Custom Objects • Lazy Function Definition • http://www.klauskomenda.com/code/javascript-programming-patterns/ © 2013 Raible Designs
  • 36. Revealing Module Pattern © 2013 Raible Designs
  • 37. CoffeeScript © 2013 Raible Designs
  • 38. AngularJS • A JavaScript MVW Framework • From Google • MIT Licensed • Data-binding, Controllers, Dependency Injection • Localization, Components, Testable • Angular-seed for Scaffolding • Great Documentation and Community © 2013 Raible Designs
  • 39. AngularJS Basics © 2013 Raible Designs
  • 40. Choosing a JavaScript MVC Framework • Journey Through The JavaScript MVC Jungle • Learning JavaScript Design Patterns http://addyosmani.github.com/todomvc/ © 2013 Raible Designs
  • 41. Or Just Choose AngularJS http://bit.ly/UICDZi © 2013 Raible Designs
  • 42. My Angular JS Experience © 2013 Raible Designs
  • 43. HTML5 http://on.wsj.com/tEGIJL © 2013 Raible Designs
  • 44. How do you write HTML5? <!DOCTYPE html> <article> <aside> <section> <header> <footer> <nav> <audio> <canvas> <video> <datalist> <details> <applet> <center> <font> <frame> <frameset> https://developer.mozilla.org/en-US/docs/HTML/HTML5 © 2013 Raible Designs
  • 45. HTML5 Forms <form> <input type=text placeholder=Enter your search terms> <input type=submit value=Search/> </form> <form> <input type=text autofocus> <input type=submit value=Search/> </form> <form> <input type=text required> <input type=submit value=Search/> </form> http://diveintohtml5.info/forms.html © 2013 Raible Designs
  • 46. HTML5 Forms <form> <input type=email> <input type=submit value=Go> </form> © 2013 Raible Designs
  • 47. HTML5 Killer Features Editable Text © 2013 Raible Designs
  • 48. HTML5 Killer Features © 2013 Raible Designs
  • 49. 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 © 2013 Raible Designs
  • 50. CSS3 Media Queries /* Smartphones (portrait and landscape) ----------- */ @media only screen and (min-device-width: 320px) and (max-device-width: 854px) { body { padding: 10px; } .pubbox textarea { width: 90%; } .width160 { width: 100px; min-width: 100px; } } /* iPad (portrait and landscape) ----------- */ @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { body { padding-top: 50px; } } © 2013 Raible Designs
  • 51. Cool HTML5 Demos http://fff.cmiscm.com © 2013 Raible Designs
  • 52. Bootstrap • Good-looking websites by default • Layouts, navs, pagination, buttons • Responsive for Mobile • 13 Custom jQuery Plugins • Themes • {wrap}bootstrap (Market) • Bootswatch (OSS) © 2013 Raible Designs
  • 53. LESS © 2013 Raible Designs
  • 54. LESS © 2013 Raible Designs
  • 55. High Performance Web Sites 1. 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 © 2013 Raible Designs
  • 56. High Performance Web Sites 8. 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 © 2013 Raible Designs
  • 57. My Page Speed Experience • Biggest 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 © 2013 Raible Designs
  • 58. Wro4j • Open 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 © 2013 Raible Designs
  • 59. Sidenote: WebJars and UrlRewrite Filter • WebJars: 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 © 2013 Raible Designs
  • 60. Techniques • Versioning 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 • Improving AppFuse’s PageSpeed with Apache • http://raibledesigns.com/rd/entry/improving_appfuse_s_pagespeed_with © 2013 Raible Designs
  • 61. 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/ © 2013 Raible Designs
  • 62. Apache Gzip and Expires Headers • mod_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 © 2013 Raible Designs
  • 63. /etc/httpd/conf.d/deflate.conf <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> © 2013 Raible Designs
  • 64. /etc/httpd/conf.d/expires.conf <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> © 2013 Raible Designs
  • 65. Application Architecture • Server to Client • Performance implications • Twitter • Airbnb • Charm • Ajaxified Body with pjax https://github.com/defunkt/jquery-pjax © 2013 Raible Designs
  • 66. Mobile Devices • If 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> © 2013 Raible Designs
  • 67. 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 */ } © 2013 Raible Designs
  • 68. 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> © 2013 Raible Designs
  • 69. 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)); © 2013 Raible Designs
  • 70. The Cloud © 2013 Raible Designs
  • 71. The Cloud • Supports Ruby, Node.js, Clojure, Java, Python and Scala • Java: https://devcenter.heroku.com/articles/java © 2013 Raible Designs
  • 72. The Cloud • Supports Spring, Grails, Scala, Play, Node.js, Ruby/Rails/ Sinatra • Services: MySQL, PostgreSQL, MongoDB, Redis, RabbitMQ • Biggest con: no pricing yet © 2013 Raible Designs
  • 73. The Cloud © 2013 Raible Designs
  • 74. Apache TomEE © 2013 Raible Designs
  • 75. Security Matters • Be 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 © 2013 Raible Designs
  • 76. The Modern JVM Web Developer • Starts with Fast Hardware • Uses IntelliJ IDEA • Leverages jQuery, HTML5, and CSS3 • Creates High Performance Web Sites • For Mobile Devices • In the Cloud • And cares about Security © 2013 Raible Designs
  • 77. Staying Modern • Read • Attend Conferences • Submit a talk! • Write • Do • Get Paid • Open Source © 2013 Raible Designs
  • 78. Learning Resources • http://learn.shayhowe.com • http://teamtreehouse.com © 2013 Raible Designs
  • 79. Cask-Strength HTML5 Training • The Modern Web Developer's Toolkit - Scott Davis • Advanced JavaScript: The 'What You Need To Know' Parts - Kyle Simpson • Airplane-Mode HTML5: Mobile Web Development for Tablets and Smartphones - Scott Davis • Unleash The Faster Web: Secrets of Website Performance - Kyle Simpson • Writing HTML5 Games: 2D Game Programming Techniques - Dave Geary • Register at http://thirstyhead.eventbrite.com; Denver in March, Austin in April © 2013 Raible Designs
  • 80. Questions? Contact Information http://raibledesigns.com @mraible Presentations http://slideshare.net/mraible Code http://github.com/mraible © 2013 Raible Designs