SlideShare une entreprise Scribd logo
1  sur  84
GWT Deep Dive
Part 1: UiBinder, CellWidgets, Activities&Places

                                           Andrey Mormysh

                                            Java Developer
                                      a.mormysh@gmail.com


November 02, 2011                    www.ExigenServices.com
GWT
Google Web Toolkit




                2    www.ExigenServices.com
GWT /ˈɡwɪt /
Google Web Toolkit




                3    www.ExigenServices.com
GWT-based projects




                     4   www.ExigenServices.com
GWT-based projects
 Google Wave (http://wave.google.com/) - an online tool for real-time communication
and collaboration




                                                               5      www.ExigenServices.com
GWT-based projects
 Google Wave (http://wave.google.com/) - an online tool for real-time communication
and collaboration
 Odnoklassniki (http://www.odnoklassniki.ru) - social network




                                                               6      www.ExigenServices.com
GWT-based projects
 Google Wave (http://wave.google.com/) - an online tool for real-time communication
and collaboration
 Odnoklassniki (http://www.odnoklassniki.ru) - social network
 Google Moderator (http://www.google.com/moderator) - a tool that allows
distributed communities to submit and vote on questions for talks, presentations and
events




                                                               7      www.ExigenServices.com
GWT-based projects
 Google Wave (http://wave.google.com/) - an online tool for real-time communication
and collaboration
 Odnoklassniki (http://www.odnoklassniki.ru) - social network
 Google Moderator (http://www.google.com/moderator) - a tool that allows
distributed communities to submit and vote on questions for talks, presentations and
events
 Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider
which enables you to deploy and scale load-balanced cloud server networks via a
unique multi-server control panel.




                                                               8      www.ExigenServices.com
GWT-based projects
 Google Wave (http://wave.google.com/) - an online tool for real-time communication
and collaboration
 Odnoklassniki (http://www.odnoklassniki.ru) - social network
 Google Moderator (http://www.google.com/moderator) - a tool that allows
distributed communities to submit and vote on questions for talks, presentations and
events
 Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider
which enables you to deploy and scale load-balanced cloud server networks via a
unique multi-server control panel.
 Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping
tool




                                                               9      www.ExigenServices.com
GWT-based projects
 Google Wave (http://wave.google.com/) - an online tool for real-time communication
and collaboration
 Odnoklassniki (http://www.odnoklassniki.ru) - social network
 Google Moderator (http://www.google.com/moderator) - a tool that allows
distributed communities to submit and vote on questions for talks, presentations and
events
 Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider
which enables you to deploy and scale load-balanced cloud server networks via a
unique multi-server control panel.
 Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping
tool
 Scenechronize (https://www.scenechronize.com/) - a production management web
application for film, television and commercials




                                                              10      www.ExigenServices.com
GWT-based projects
 Google Wave (http://wave.google.com/) - an online tool for real-time communication
and collaboration
 Odnoklassniki (http://www.odnoklassniki.ru) - social network
 Google Moderator (http://www.google.com/moderator) - a tool that allows
distributed communities to submit and vote on questions for talks, presentations and
events
 Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider
which enables you to deploy and scale load-balanced cloud server networks via a
unique multi-server control panel.
 Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping
tool
 Scenechronize (https://www.scenechronize.com/) - a production management web
application for film, television and commercials
 Whirled (http://www.whirled.com/) - social virtual world website which includes
multi-player games
etc…




                                                              11      www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              12   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              13   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              14   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              15   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              16   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              17   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              18   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              19   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              20   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              21   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              22   www.ExigenServices.com
Features

Cross-browser
Object-oriented programming
Dev-mode
GUI debugging
Wigets and declarative UI
Client Bundle
Simple localization
Code optimization
Code splitting
RPC, JSON/XML
UI Designer
HTML5
…
                              23   www.ExigenServices.com
?




    24   www.ExigenServices.com
25   www.ExigenServices.com
26   www.ExigenServices.com
JSNI
Java Script Native Interface

Access JS code from Java code and vice versa




                                           27   www.ExigenServices.com
JSNI
Java Script Native Interface

Access JS code from Java code and vice versa

Wrap your own or third-party JS-widgets with JSNI:
• Google Maps
• Flash objects
• etc.




                                              28     www.ExigenServices.com
JSNI
Java Script Native Interface

Access JS code from Java code and vice versa

Wrap your own or third-party JS-widgets with JSNI:
• Google Maps
• Flash objects
• etc.

Example 1:

    public static native void alert(String msg)
    /*-{
      $wnd.alert(msg);
    }-*/;
                                              29     www.ExigenServices.com
JSNI

Example 2:

    package mypackage;
    public MyClass{

        public static int foo()
        { ... }

        public static native void exportStaticMethod()
        /*-{
              $wnd.foo = $entry(@mypackage.MyClass::foo());
        }-*/;
    }




                                                      30      www.ExigenServices.com
Deferred binding

It is a pluggable compile-time type substitution and code generation
mechanism.




                                               31    www.ExigenServices.com
Deferred binding

It is a pluggable compile-time type substitution and code generation
mechanism.
Example:

   Static binding
       Foo f = new Foo();

   Dynamic Binding
      Class c = Class.forName(fooImplName);
      Foo f = (Foo) c.newInstance();

   Deferred Binding
       Foo f = (Foo) GWT.create(Foo.class);




                                               32    www.ExigenServices.com
Deferred binding

Goal - send exactly the right code to client, depending on

    •   User‟s browser
    •   Locale
    •   Mode (debug / production)
    •   Network characteristics
    •   etc.




                                                             33   www.ExigenServices.com
Deferred binding

Goal - send exactly the right code to client, depending on

    •   User‟s browser
    •   Locale
    •   Mode (debug / production)
    •   Network characteristics
    •   etc.

Facilities

    •   Make fewer Http Requests
    •   Eliminate dead code
    •   Avoid polymorphic dispatch
    •   Avoid synchronous XHR
    •   Avoid spaghetti code (if-s in JS-code)
    •   Try to use only inline code “elem.innerText = str”
    •   etc.

                                                             34   www.ExigenServices.com
Permutations




               35   www.ExigenServices.com
Permutations

Example:

   Input:

      DOMImpl dom = GWT.create(DOMImpl.class);




                                                 36   www.ExigenServices.com
Permutations

Example:

   Input:

      DOMImpl dom = GWT.create(DOMImpl.class);

      Implementations:
        DOMImplInternetExplorer
        DOMImplMozilla
        DOMImplOpera
      Property:
        user_agent = “IE”




                                                 37   www.ExigenServices.com
Permutations

Example:

   Input:

      DOMImpl dom = GWT.create(DOMImpl.class);

      Implementations:
        DOMImplInternetExplorer
        DOMImplMozilla
        DOMImplOpera
      Property:
        user_agent = “IE”

   Output:

      DOM dom = new DOMImplInternetExplorer();



                                                 38   www.ExigenServices.com
Permutations

Example:




               39   www.ExigenServices.com
Perfect Caching




                  40   www.ExigenServices.com
Perfect Caching
Bootstrap selection script loads Javascript „executable‟ containing correct set of bindings
for given request.

    <module>.nocache.js - small
    <md5>.cache.js – big




                                                                41       www.ExigenServices.com
Perfect Caching
Bootstrap selection script loads Javascript „executable‟ containing correct set of bindings
for given request.

    <module>.nocache.js - small
    <md5>.cache.js – big

Apache HTTP server .htaccess configuration:

    <Files *.nocache.*>
          ExpiresActive on
          ExpiresDefault "now"
          Header merge Cache-Control "public, max-age=0, must-revalidate"
    </Files>

    <Files *.cache.*>
          ExpiresActive on
          ExpiresDefault "now plus 1 year"
    </Files>
                                                                42       www.ExigenServices.com
Monilithic Compilation




                         43   www.ExigenServices.com
Monilithic Compilation

“The fastest code that which does not run”,
           --Joel Webber, GWT co-creator




                                              44   www.ExigenServices.com
Monilithic Compilation

“The fastest code that which does not run”,
           --Joel Webber, GWT co-creator

Example:

   Shape shape = new Square(4);

      1) int area = shape.getArea();




                                              45   www.ExigenServices.com
Monilithic Compilation

“The fastest code that which does not run”,
           --Joel Webber, GWT co-creator

Example:

   Shape shape = new Square(4);

      1) int area = shape.getArea();

      2) int area = Shape_getArea(shape);




                                              46   www.ExigenServices.com
Monilithic Compilation

“The fastest code that which does not run”,
           --Joel Webber, GWT co-creator

Example:

   Shape shape = new Square(4);

      1) int area = shape.getArea();

      2) int area = Shape_getArea(shape);

      3) int area = shape.len * shape.len;




                                              47   www.ExigenServices.com
Monilithic Compilation

“The fastest code that which does not run”,
           --Joel Webber, GWT co-creator

Example:

   Shape shape = new Square(4);

      1) int area = shape.getArea();

      2) int area = Shape_getArea(shape);

      3) int area = shape.len * shape.len;

      4) int area = 16;




                                              48   www.ExigenServices.com
Client Bundle




                49   www.ExigenServices.com
Client Bundle
Problem:

1) HTTP 1.1 limit: 2 outgoing connections per domain/port




                                                            50   www.ExigenServices.com
Client Bundle
Problem:

1) HTTP 1.1 limit: 2 outgoing connections per domain/port

2) HTTP request has to be sent to the server for each resource (e.g. image)




                                                             51      www.ExigenServices.com
Client Bundle
Problem:

1) HTTP 1.1 limit: 2 outgoing connections per domain/port

2) HTTP request has to be sent to the server for each resource (e.g. image)

3) Request for status 304 ("Not Modified")




                                                             52      www.ExigenServices.com
Client Bundle
Solution:

    interface Resources extends ClientBundle {
       @Source("logo.png")
       ImageResource logo();

        @Source("arrow.png")
        @ImageOptions(flipRtl = true)
        ImageResource pointer();
    }




                                                 53   www.ExigenServices.com
Client Bundle
Solution:

    interface Resources extends ClientBundle {
       @Source("logo.png")
       ImageResource logo();

        @Source("arrow.png")
        @ImageOptions(flipRtl = true)
        ImageResource pointer();
    }

    Resources resources = GWT.create(Resources.class);

    Image img = new Image(resources.logo());




                                                         54   www.ExigenServices.com
Code Splitting
   public class Hello implements EntryPoint {
    public void onModuleLoad() {
     Button b = new Button("Click me", new ClickHandler() {
       public void onClick(ClickEvent event) {
         Window.alert("Hello, AJAX");
       }
     });

           RootPanel.get().add(b);
       }
   }




                                                      55      www.ExigenServices.com
Code Splitting
   public class Hello implements EntryPoint {
    public void onModuleLoad() {
     Button b = new Button("Click me", new ClickHandler() {
       public void onClick(ClickEvent event) {
         Window.alert("Hello, AJAX");
       }
     });

           RootPanel.get().add(b);
       }
   }




                                                      56      www.ExigenServices.com
Code Splitting
   public class Hello implements EntryPoint {
     public void onModuleLoad() {
       Button b = new Button("Click me", new ClickHandler() {
         public void onClick(ClickEvent event) {
           GWT.runAsync(new RunAsyncCallback() {
                public void onFailure(Throwable caught) {
                  Window.alert("Code download failed");
                }
                public void onSuccess() {
                  Window.alert("Hello, AJAX");
                }
           });
         }
       });
       RootPanel.get().add(b);
     }
   }
                                                       57       www.ExigenServices.com
GWT – it is a set of tools

…
N+1) UiBinder
N+2) CellWidgets
N+3) Activities & Places
…




                             58   www.ExigenServices.com
UiBinder

Introduced in 2.0 (2010)

GWT app is a Web Page
Web page is HTML+CSS

The best way to do is the easy one:
1) build your apps as HTML pages with GWT widgets sprinkled
throughout them
2) do it more efficient (uses innerHTML, not DOM API calls)




                                            59   www.ExigenServices.com
UiBinder

1) Widgets have overhead


2) Use UiBinder to replace Widgets with HTML

   2.1) when don‟t need to respond to events

   2.2) or when events can be caught by a parent Widget

   2.3) caution: can‟t add Widgets to HTML elements, so leaf
   Widgets require a parent Widget hierarchy to the top



                                               60   www.ExigenServices.com
UiBinder – “IS”

1) helps productivity and maintainability
2) collaboration with UI designers on theis language
3) mocking;
4) separation UI from its behavior
5) compile-time checking
6) direct support for internationalization
7) encourages more efficient use of browser‟s power




                                              61       www.ExigenServices.com
UiBinder – “IS NOT”

1) it is not a renderer
2) there are no loops, no conditionals, no if statements in its
markup, and only a very limited expression language
3) UiBinder allows you to lay out your user interface. It's still up to
the widgets or other controllers themselves to convert rows of data
into rows of HTML




                                                  62    www.ExigenServices.com
UiBinder – “Hello” example

1) Template (Hello.ui.xml)
    1.1) For this example – it is pure HTML
    1.2) Associate fields: ui:field='name'

2) Owner class (Hello.java)
   2.1) Declare root (DivElement) and owner (Hello)
interface MyUiBinder extends UiBinder<DivElement, Hello>

  2.2) Use deffered binding to instanciate it:
MyUiBinder uiBinder = GWT.create(MyUiBinder.class)

    2.3) Create Element: uiBinder.createAndBindUi(this);
(todo: show generated code)
                                              63   www.ExigenServices.com
UiBinder – “Hello” example

Namespaces
xmlns:s=“urn:import:com.nimbleteam.gwt.client.mvp.view.uibinder”
<s:HelloWidget/>

Method access
Every one of the widget's methods that follow JavaBean-style
conventions for setting a property can be used this way.

1) public void setName(String name)
   public void setValues(String values)

2) <s:HelloWidget name="default text"
                  values="Andrew,Nikita,Yura"/>
                                              64    www.ExigenServices.com
UiBinder – Panels

New LayoutPanels more efficient

1) Layout mostly delegated to browser

2) Less use of tables (except TabLayoutPanel)

3) Any panel (or anything that implements HasWidgets) can be
   used in a template file, and can have other panels inside of it.

4) Can contain only widgets (the restriction may be removed at
     2.4+, workaround: enclose in HTML or HTMLPanel widgets)



                                                65     www.ExigenServices.com
UiBinder – Panels

<g:DockLayoutPanel unit='EM'>
 <g:north size='5'>
  <g:Label>Top</g:Label>
 </g:north>
 <g:center>
  <g:Label>Body</g:Label>
 </g:center>
 <g:west size='10'>
  <g:HTML>
    <ul>
     <li>Sidebar</li>
     <li>Sidebar</li>
    </ul>
  </g:HTML>
 </g:west>
</g:DockLayoutPanel>


                                66   www.ExigenServices.com
UiBinder – Event Handling

Old style:
    titleListBox.addChangeHandler( new ChangeHandler()
        {
           public void onChange( ChangeEvent event )
           {
             Window.alert( "Old style" );
           }
        }
    );

New style:
     @UiHandler( "titleListBox" )
     void titleListBoxValueChanged(ChangeEvent e)
     {
        Window.alert( "New style" );
     }

(you can only use @UiHandler with events thrown by widget objects, not DOM elements)
                                                           67      www.ExigenServices.com
UiBinder – ClientBundle

It is a way to minimize trips for images, CSS
Takes all other stuff that makes up your app and inject it into the
code:
     Images
     CSS
     Text
     or anyhing you need

Fewer roundtrips
Built in image spriting
Name spaces (no global name issues)
Utilize CSS as engineering tool


                                                 68    www.ExigenServices.com
UiBinder – Resources

CssResource (see example)

• ImageResource
    Options:
       1) separate cacheable files
       2) inline base64-encoded data
       3) monolith image (will be sprited)

• TextResource/ExternalTextResource

• DataResource (non-text, with provided MIME type)



                                             69      www.ExigenServices.com
UiBinder – I18n

Before:
   <div>Hello, world.</div>

After:
   <div><ui:msg description="Greeting">Hello</ui:msg></div>

Properties:
   ui:generateFormat, ui:generateKeys, ui:generateLocales

Result:
  # Description: Greeting
  8B1A9953C4611296A827ABF8C47804D7=Bonjour

*Some widgets are i18n-ed out of the box (DatePicker)
                                                        70   www.ExigenServices.com
CellWidgets

Objective:
   In general, all widgets are slow (too much JavaScript)
   Old layout widgets are too static




                                               71    www.ExigenServices.com
CellWidgets - Features

High-performance and lightweight (flyweight pattern)
Renders interface as an HTML string (uses innerHTML, not DOM)
Can handle events (fewer events == faster)
Editable (Text, Number, Date-picker, etc.)
Dataproviders support (sync and async)




                                           72    www.ExigenServices.com
CellWidgets - Showcase

CellList, CellTable, DataGrid, CellTree, CellBrowser, …

CellTable Features:
   Can render large amounts of data efficiently
   Pagination
   Multiple selection
   Sorting
   Keyboard navigation
   Editable cells




                                               73    www.ExigenServices.com
Activities&Places

Browser‟s history management approach
Natural place for using code-splitting for UI optimization




                                                 74    www.ExigenServices.com
Activities&Places - Place

Represents particular state that can be bookmarked

Provides a way for bidirectional serialization of URL
(PlaceTokenizer)

Managed by PlaceController (listens eventBus)




                                                75      www.ExigenServices.com
Activities&Places - PlaceHistoryMapper

Declares all the Places available in application

GWT compiler will link PlaceHistoryHandler with PlaceTokenizer-s

Example: SamplePlaceHistoryMapper




                                                   76   www.ExigenServices.com
Activities&Places – Use case 1: goTo()

Program calls to change place -> new place created and
remembers it‟s token




                                            77    www.ExigenServices.com
Activities&Places – Use case 2: history event

User navigates to some URL -> Controller changes the place




                                            78    www.ExigenServices.com
Activities&Places - Activity

• Represents something the user is doing
• Contains no Widgets or UI code
• As some level it can be a “Presenter” in MVP pattern
• Typical responsibility:
    • restore state ("wake up")
    • perform initialization ("set up")
    • load a corresponding UI ("show up")
• Started and stopped by an ActivityManager (each per container)
• May warn user before leaving




                                              79    www.ExigenServices.com
Activities&Places - ActivityMapper

Maps each Place to its corresponding Activity
"if (place instanceof SomePlace) return new SomeActivity(place)"

Use case 1 – Provides brand new Activity for each call

Use case 2 – Refreshes previous (singleton) activity




                                               80      www.ExigenServices.com
Activities&Places - View

   •   Part of the UI associated with an Activity
   •   Is a Widget (e.g. implements IsWidget interface)
   •   Is a View in MVP pattern
   •   Has 1 interface and >=1 implementations
   •   Support for different views (e.g. desktop/mobile)
   •   Easy JUnit testing (mocking)
   •   Can be reused (recommended)




                                                 81    www.ExigenServices.com
Activities&Places - Design




                             82   www.ExigenServices.com
Sources
GoogleIO videos:
http://www.youtube.com/watch?v=g2XclEOJdIc&feature=player_embedded
http://www.youtube.com/watch?v=0F5zc1UAt2Y&cc=1#t=554s
http://www.youtube.com/watch?v=qT6ZsQBM7kY&cc=1#t=2084s
http://www.youtube.com/watch?v=oiNfPjV72lg&feature=related

Documents:
http://code.google.com/webtoolkit/doc/latest/DevGuideUi.html
http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html
http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellWidgets.html
http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html




                                                            83      www.ExigenServices.com
To be continued…




          http://www.exigenservices.by/webinars

                                        84   www.ExigenServices.com

Contenu connexe

En vedette

Windows Azure Kick Start - Get Started in Cloud Computing
Windows Azure Kick Start - Get Started in Cloud ComputingWindows Azure Kick Start - Get Started in Cloud Computing
Windows Azure Kick Start - Get Started in Cloud ComputingEric D. Boyd
 
Rock, Paper, Scissors: Winning Big with Game Playing Cloud Bots
Rock, Paper, Scissors: Winning Big with Game Playing Cloud BotsRock, Paper, Scissors: Winning Big with Game Playing Cloud Bots
Rock, Paper, Scissors: Winning Big with Game Playing Cloud BotsEric D. Boyd
 

En vedette (7)

Windows Azure Kick Start - Get Started in Cloud Computing
Windows Azure Kick Start - Get Started in Cloud ComputingWindows Azure Kick Start - Get Started in Cloud Computing
Windows Azure Kick Start - Get Started in Cloud Computing
 
Azure webinar kolkata
Azure webinar kolkata Azure webinar kolkata
Azure webinar kolkata
 
Kickstart to Windows azure
Kickstart to Windows azureKickstart to Windows azure
Kickstart to Windows azure
 
Rock, Paper, Scissors: Winning Big with Game Playing Cloud Bots
Rock, Paper, Scissors: Winning Big with Game Playing Cloud BotsRock, Paper, Scissors: Winning Big with Game Playing Cloud Bots
Rock, Paper, Scissors: Winning Big with Game Playing Cloud Bots
 
Windows Azure: Quick start
Windows Azure: Quick startWindows Azure: Quick start
Windows Azure: Quick start
 
Windows azurequickstart
Windows azurequickstartWindows azurequickstart
Windows azurequickstart
 
Agile Project Grows
Agile Project GrowsAgile Project Grows
Agile Project Grows
 

Similaire à Gwt 2,3 Deep dive

CiklumJavaSat15112011:Andrew Mormysh-GWT features overview
CiklumJavaSat15112011:Andrew Mormysh-GWT features overviewCiklumJavaSat15112011:Andrew Mormysh-GWT features overview
CiklumJavaSat15112011:Andrew Mormysh-GWT features overviewCiklum Ukraine
 
Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2JooinK
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitIgalia
 
The WebKit project (LinuxCon North America 2012)
The WebKit project (LinuxCon North America 2012)The WebKit project (LinuxCon North America 2012)
The WebKit project (LinuxCon North America 2012)Igalia
 
DIY: Computer Vision with GWT.
DIY: Computer Vision with GWT.DIY: Computer Vision with GWT.
DIY: Computer Vision with GWT.JooinK
 
DIY- computer vision with GWT
DIY- computer vision with GWTDIY- computer vision with GWT
DIY- computer vision with GWTFrancesca Tosi
 
Gwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca TosiGwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca Tosifirenze-gtug
 
GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)firenze-gtug
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWTArnaud Tournier
 
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...Igalia
 
Crosswalk and the Intel XDK
Crosswalk and the Intel XDKCrosswalk and the Intel XDK
Crosswalk and the Intel XDKIntel® Software
 
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...Igalia
 
A164 enterprise javascript ibm node sdk
A164 enterprise javascript ibm node sdkA164 enterprise javascript ibm node sdk
A164 enterprise javascript ibm node sdkToby Corbin
 
2011 08-24 mobile web app
2011 08-24  mobile web app2011 08-24  mobile web app
2011 08-24 mobile web appSholto Maud
 
Web 2.0 and LiveQuotes Presentation
Web 2.0 and LiveQuotes PresentationWeb 2.0 and LiveQuotes Presentation
Web 2.0 and LiveQuotes PresentationJamie Thingelstad
 
Micro-Frontends JSVidCon
Micro-Frontends JSVidConMicro-Frontends JSVidCon
Micro-Frontends JSVidConAmir Zuker
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material designSrinadh Kanugala
 

Similaire à Gwt 2,3 Deep dive (20)

Gwt Deep Dive
Gwt Deep DiveGwt Deep Dive
Gwt Deep Dive
 
CiklumJavaSat15112011:Andrew Mormysh-GWT features overview
CiklumJavaSat15112011:Andrew Mormysh-GWT features overviewCiklumJavaSat15112011:Andrew Mormysh-GWT features overview
CiklumJavaSat15112011:Andrew Mormysh-GWT features overview
 
The WebKit project
The WebKit projectThe WebKit project
The WebKit project
 
Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
 
The WebKit project (LinuxCon North America 2012)
The WebKit project (LinuxCon North America 2012)The WebKit project (LinuxCon North America 2012)
The WebKit project (LinuxCon North America 2012)
 
DIY: Computer Vision with GWT.
DIY: Computer Vision with GWT.DIY: Computer Vision with GWT.
DIY: Computer Vision with GWT.
 
DIY- computer vision with GWT
DIY- computer vision with GWTDIY- computer vision with GWT
DIY- computer vision with GWT
 
Gwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca TosiGwt kickoff - Alberto Mancini & Francesca Tosi
Gwt kickoff - Alberto Mancini & Francesca Tosi
 
GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)GWT - AppDays - (25 aprile 2014, pordenone)
GWT - AppDays - (25 aprile 2014, pordenone)
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWT
 
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
 
Crosswalk and the Intel XDK
Crosswalk and the Intel XDKCrosswalk and the Intel XDK
Crosswalk and the Intel XDK
 
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
 
A164 enterprise javascript ibm node sdk
A164 enterprise javascript ibm node sdkA164 enterprise javascript ibm node sdk
A164 enterprise javascript ibm node sdk
 
2011 08-24 mobile web app
2011 08-24  mobile web app2011 08-24  mobile web app
2011 08-24 mobile web app
 
Web 2.0 and LiveQuotes Presentation
Web 2.0 and LiveQuotes PresentationWeb 2.0 and LiveQuotes Presentation
Web 2.0 and LiveQuotes Presentation
 
Micro-Frontends JSVidCon
Micro-Frontends JSVidConMicro-Frontends JSVidCon
Micro-Frontends JSVidCon
 
Kunal bhatia resume mass
Kunal bhatia   resume massKunal bhatia   resume mass
Kunal bhatia resume mass
 
Phonegap android angualr material design
Phonegap android angualr material designPhonegap android angualr material design
Phonegap android angualr material design
 

Plus de Return on Intelligence

Profsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by PavelchukProfsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by PavelchukReturn on Intelligence
 
Types of testing and their classification
Types of testing and their classificationTypes of testing and their classification
Types of testing and their classificationReturn on Intelligence
 
Service design principles and patterns
Service design principles and patternsService design principles and patterns
Service design principles and patternsReturn on Intelligence
 
Differences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and AgileDifferences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and AgileReturn on Intelligence
 
Организация внутренней системы обучения
Организация внутренней системы обученияОрганизация внутренней системы обучения
Организация внутренней системы обученияReturn on Intelligence
 
Shared position in a project: testing and analysis
Shared position in a project: testing and analysisShared position in a project: testing and analysis
Shared position in a project: testing and analysisReturn on Intelligence
 
Оценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработкеОценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработкеReturn on Intelligence
 
Successful interview for a young IT specialist
Successful interview for a young IT specialistSuccessful interview for a young IT specialist
Successful interview for a young IT specialistReturn on Intelligence
 

Plus de Return on Intelligence (20)

Profsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by PavelchukProfsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by Pavelchuk
 
Types of testing and their classification
Types of testing and their classificationTypes of testing and their classification
Types of testing and their classification
 
Time Management
Time ManagementTime Management
Time Management
 
Service design principles and patterns
Service design principles and patternsService design principles and patterns
Service design principles and patterns
 
Differences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and AgileDifferences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and Agile
 
Организация внутренней системы обучения
Организация внутренней системы обученияОрганизация внутренней системы обучения
Организация внутренней системы обучения
 
Shared position in a project: testing and analysis
Shared position in a project: testing and analysisShared position in a project: testing and analysis
Shared position in a project: testing and analysis
 
Introduction to Business Etiquette
Introduction to Business EtiquetteIntroduction to Business Etiquette
Introduction to Business Etiquette
 
Agile Testing Process
Agile Testing ProcessAgile Testing Process
Agile Testing Process
 
Оценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработкеОценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработке
 
Meetings arranging
Meetings arrangingMeetings arranging
Meetings arranging
 
How to develop your creativity
How to develop your creativityHow to develop your creativity
How to develop your creativity
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
The art of project estimation
The art of project estimationThe art of project estimation
The art of project estimation
 
Successful interview for a young IT specialist
Successful interview for a young IT specialistSuccessful interview for a young IT specialist
Successful interview for a young IT specialist
 
Risk Management
Risk ManagementRisk Management
Risk Management
 
Resolving conflicts
Resolving conflictsResolving conflicts
Resolving conflicts
 
Introduction to XML
Introduction to XMLIntroduction to XML
Introduction to XML
 
Principles of personal effectiveness
Principles of personal effectivenessPrinciples of personal effectiveness
Principles of personal effectiveness
 
English for E-mails
English for E-mailsEnglish for E-mails
English for E-mails
 

Dernier

(KAVYA) Call Girls Humayun Nagar ✔️Just Call 7001035870✔️ HI-Fi Hyderabad Esc...
(KAVYA) Call Girls Humayun Nagar ✔️Just Call 7001035870✔️ HI-Fi Hyderabad Esc...(KAVYA) Call Girls Humayun Nagar ✔️Just Call 7001035870✔️ HI-Fi Hyderabad Esc...
(KAVYA) Call Girls Humayun Nagar ✔️Just Call 7001035870✔️ HI-Fi Hyderabad Esc...Sanjna Singh
 
CALL ON ➥8923113531 🔝Call Girls Rajajipuram Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Rajajipuram Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Rajajipuram Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Rajajipuram Lucknow best sexual serviceanilsa9823
 
文凭办理《原版美国USU学位证书》犹他州立大学毕业证制作成绩单修改
文凭办理《原版美国USU学位证书》犹他州立大学毕业证制作成绩单修改文凭办理《原版美国USU学位证书》犹他州立大学毕业证制作成绩单修改
文凭办理《原版美国USU学位证书》犹他州立大学毕业证制作成绩单修改atducpo
 
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girlsPooja Nehwal
 
LC_YouSaidYes_NewBelieverBookletDone.pdf
LC_YouSaidYes_NewBelieverBookletDone.pdfLC_YouSaidYes_NewBelieverBookletDone.pdf
LC_YouSaidYes_NewBelieverBookletDone.pdfpastor83
 
call girls in candolim beach 9870370636] NORTH GOA ..
call girls in candolim beach 9870370636] NORTH GOA ..call girls in candolim beach 9870370636] NORTH GOA ..
call girls in candolim beach 9870370636] NORTH GOA ..nishakur201
 
The Selfspace Journal Preview by Mindbrush
The Selfspace Journal Preview by MindbrushThe Selfspace Journal Preview by Mindbrush
The Selfspace Journal Preview by MindbrushShivain97
 
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,dollysharma2066
 
Lucknow 💋 High Class Call Girls Lucknow 10k @ I'm VIP Independent Escorts Gir...
Lucknow 💋 High Class Call Girls Lucknow 10k @ I'm VIP Independent Escorts Gir...Lucknow 💋 High Class Call Girls Lucknow 10k @ I'm VIP Independent Escorts Gir...
Lucknow 💋 High Class Call Girls Lucknow 10k @ I'm VIP Independent Escorts Gir...anilsa9823
 
Independent Escorts in Lucknow (Adult Only) 👩🏽‍❤️‍💋‍👩🏼 8923113531 ♛ Escort S...
Independent Escorts in Lucknow  (Adult Only) 👩🏽‍❤️‍💋‍👩🏼 8923113531 ♛ Escort S...Independent Escorts in Lucknow  (Adult Only) 👩🏽‍❤️‍💋‍👩🏼 8923113531 ♛ Escort S...
Independent Escorts in Lucknow (Adult Only) 👩🏽‍❤️‍💋‍👩🏼 8923113531 ♛ Escort S...gurkirankumar98700
 
Pokemon Go... Unraveling the Conspiracy Theory
Pokemon Go... Unraveling the Conspiracy TheoryPokemon Go... Unraveling the Conspiracy Theory
Pokemon Go... Unraveling the Conspiracy Theorydrae5
 
Introducing to billionaire brain wave.pdf
Introducing to billionaire brain wave.pdfIntroducing to billionaire brain wave.pdf
Introducing to billionaire brain wave.pdfnoumannajam04
 
CALL ON ➥8923113531 🔝Call Girls Mahanagar Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Mahanagar Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Mahanagar Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Mahanagar Lucknow best sexual serviceanilsa9823
 
Lilac Illustrated Social Psychology Presentation.pptx
Lilac Illustrated Social Psychology Presentation.pptxLilac Illustrated Social Psychology Presentation.pptx
Lilac Illustrated Social Psychology Presentation.pptxABMWeaklings
 
CALL ON ➥8923113531 🔝Call Girls Aliganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Aliganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Aliganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Aliganj Lucknow best sexual serviceanilsa9823
 
Call Girls In Andheri East Call US Pooja📞 9892124323 Book Hot And
Call Girls In Andheri East Call US Pooja📞 9892124323 Book Hot AndCall Girls In Andheri East Call US Pooja📞 9892124323 Book Hot And
Call Girls In Andheri East Call US Pooja📞 9892124323 Book Hot AndPooja Nehwal
 
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...PsychicRuben LoveSpells
 
Top Rated Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...Call Girls in Nagpur High Profile
 
Breath, Brain & Beyond_A Holistic Approach to Peak Performance.pdf
Breath, Brain & Beyond_A Holistic Approach to Peak Performance.pdfBreath, Brain & Beyond_A Holistic Approach to Peak Performance.pdf
Breath, Brain & Beyond_A Holistic Approach to Peak Performance.pdfJess Walker
 

Dernier (20)

(KAVYA) Call Girls Humayun Nagar ✔️Just Call 7001035870✔️ HI-Fi Hyderabad Esc...
(KAVYA) Call Girls Humayun Nagar ✔️Just Call 7001035870✔️ HI-Fi Hyderabad Esc...(KAVYA) Call Girls Humayun Nagar ✔️Just Call 7001035870✔️ HI-Fi Hyderabad Esc...
(KAVYA) Call Girls Humayun Nagar ✔️Just Call 7001035870✔️ HI-Fi Hyderabad Esc...
 
CALL ON ➥8923113531 🔝Call Girls Rajajipuram Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Rajajipuram Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Rajajipuram Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Rajajipuram Lucknow best sexual service
 
escort service sasti (*~Call Girls in Paschim Vihar Metro❤️9953056974
escort service  sasti (*~Call Girls in Paschim Vihar Metro❤️9953056974escort service  sasti (*~Call Girls in Paschim Vihar Metro❤️9953056974
escort service sasti (*~Call Girls in Paschim Vihar Metro❤️9953056974
 
文凭办理《原版美国USU学位证书》犹他州立大学毕业证制作成绩单修改
文凭办理《原版美国USU学位证书》犹他州立大学毕业证制作成绩单修改文凭办理《原版美国USU学位证书》犹他州立大学毕业证制作成绩单修改
文凭办理《原版美国USU学位证书》犹他州立大学毕业证制作成绩单修改
 
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
9892124323, Call Girls in mumbai, Vashi Call Girls , Kurla Call girls
 
LC_YouSaidYes_NewBelieverBookletDone.pdf
LC_YouSaidYes_NewBelieverBookletDone.pdfLC_YouSaidYes_NewBelieverBookletDone.pdf
LC_YouSaidYes_NewBelieverBookletDone.pdf
 
call girls in candolim beach 9870370636] NORTH GOA ..
call girls in candolim beach 9870370636] NORTH GOA ..call girls in candolim beach 9870370636] NORTH GOA ..
call girls in candolim beach 9870370636] NORTH GOA ..
 
The Selfspace Journal Preview by Mindbrush
The Selfspace Journal Preview by MindbrushThe Selfspace Journal Preview by Mindbrush
The Selfspace Journal Preview by Mindbrush
 
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
8377087607 Full Enjoy @24/7-CLEAN-Call Girls In Chhatarpur,
 
Lucknow 💋 High Class Call Girls Lucknow 10k @ I'm VIP Independent Escorts Gir...
Lucknow 💋 High Class Call Girls Lucknow 10k @ I'm VIP Independent Escorts Gir...Lucknow 💋 High Class Call Girls Lucknow 10k @ I'm VIP Independent Escorts Gir...
Lucknow 💋 High Class Call Girls Lucknow 10k @ I'm VIP Independent Escorts Gir...
 
Independent Escorts in Lucknow (Adult Only) 👩🏽‍❤️‍💋‍👩🏼 8923113531 ♛ Escort S...
Independent Escorts in Lucknow  (Adult Only) 👩🏽‍❤️‍💋‍👩🏼 8923113531 ♛ Escort S...Independent Escorts in Lucknow  (Adult Only) 👩🏽‍❤️‍💋‍👩🏼 8923113531 ♛ Escort S...
Independent Escorts in Lucknow (Adult Only) 👩🏽‍❤️‍💋‍👩🏼 8923113531 ♛ Escort S...
 
Pokemon Go... Unraveling the Conspiracy Theory
Pokemon Go... Unraveling the Conspiracy TheoryPokemon Go... Unraveling the Conspiracy Theory
Pokemon Go... Unraveling the Conspiracy Theory
 
Introducing to billionaire brain wave.pdf
Introducing to billionaire brain wave.pdfIntroducing to billionaire brain wave.pdf
Introducing to billionaire brain wave.pdf
 
CALL ON ➥8923113531 🔝Call Girls Mahanagar Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Mahanagar Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Mahanagar Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Mahanagar Lucknow best sexual service
 
Lilac Illustrated Social Psychology Presentation.pptx
Lilac Illustrated Social Psychology Presentation.pptxLilac Illustrated Social Psychology Presentation.pptx
Lilac Illustrated Social Psychology Presentation.pptx
 
CALL ON ➥8923113531 🔝Call Girls Aliganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Aliganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Aliganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Aliganj Lucknow best sexual service
 
Call Girls In Andheri East Call US Pooja📞 9892124323 Book Hot And
Call Girls In Andheri East Call US Pooja📞 9892124323 Book Hot AndCall Girls In Andheri East Call US Pooja📞 9892124323 Book Hot And
Call Girls In Andheri East Call US Pooja📞 9892124323 Book Hot And
 
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
$ Love Spells^ 💎 (310) 882-6330 in West Virginia, WV | Psychic Reading Best B...
 
Top Rated Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated  Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...Top Rated  Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
Top Rated Pune Call Girls Tingre Nagar ⟟ 6297143586 ⟟ Call Me For Genuine Se...
 
Breath, Brain & Beyond_A Holistic Approach to Peak Performance.pdf
Breath, Brain & Beyond_A Holistic Approach to Peak Performance.pdfBreath, Brain & Beyond_A Holistic Approach to Peak Performance.pdf
Breath, Brain & Beyond_A Holistic Approach to Peak Performance.pdf
 

Gwt 2,3 Deep dive

  • 1. GWT Deep Dive Part 1: UiBinder, CellWidgets, Activities&Places Andrey Mormysh Java Developer a.mormysh@gmail.com November 02, 2011 www.ExigenServices.com
  • 2. GWT Google Web Toolkit 2 www.ExigenServices.com
  • 3. GWT /ˈɡwɪt / Google Web Toolkit 3 www.ExigenServices.com
  • 4. GWT-based projects 4 www.ExigenServices.com
  • 5. GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration 5 www.ExigenServices.com
  • 6. GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network 6 www.ExigenServices.com
  • 7. GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events 7 www.ExigenServices.com
  • 8. GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events  Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel. 8 www.ExigenServices.com
  • 9. GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events  Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.  Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping tool 9 www.ExigenServices.com
  • 10. GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events  Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.  Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping tool  Scenechronize (https://www.scenechronize.com/) - a production management web application for film, television and commercials 10 www.ExigenServices.com
  • 11. GWT-based projects  Google Wave (http://wave.google.com/) - an online tool for real-time communication and collaboration  Odnoklassniki (http://www.odnoklassniki.ru) - social network  Google Moderator (http://www.google.com/moderator) - a tool that allows distributed communities to submit and vote on questions for talks, presentations and events  Go Grid (http://www.gogrid.com/) - cloud computing infrastructure service provider which enables you to deploy and scale load-balanced cloud server networks via a unique multi-server control panel.  Blueprint (https://blueprint.lombardi.com/index.html) - business process mapping tool  Scenechronize (https://www.scenechronize.com/) - a production management web application for film, television and commercials  Whirled (http://www.whirled.com/) - social virtual world website which includes multi-player games etc… 11 www.ExigenServices.com
  • 12. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 12 www.ExigenServices.com
  • 13. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 13 www.ExigenServices.com
  • 14. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 14 www.ExigenServices.com
  • 15. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 15 www.ExigenServices.com
  • 16. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 16 www.ExigenServices.com
  • 17. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 17 www.ExigenServices.com
  • 18. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 18 www.ExigenServices.com
  • 19. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 19 www.ExigenServices.com
  • 20. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 20 www.ExigenServices.com
  • 21. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 21 www.ExigenServices.com
  • 22. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 22 www.ExigenServices.com
  • 23. Features Cross-browser Object-oriented programming Dev-mode GUI debugging Wigets and declarative UI Client Bundle Simple localization Code optimization Code splitting RPC, JSON/XML UI Designer HTML5 … 23 www.ExigenServices.com
  • 24. ? 24 www.ExigenServices.com
  • 25. 25 www.ExigenServices.com
  • 26. 26 www.ExigenServices.com
  • 27. JSNI Java Script Native Interface Access JS code from Java code and vice versa 27 www.ExigenServices.com
  • 28. JSNI Java Script Native Interface Access JS code from Java code and vice versa Wrap your own or third-party JS-widgets with JSNI: • Google Maps • Flash objects • etc. 28 www.ExigenServices.com
  • 29. JSNI Java Script Native Interface Access JS code from Java code and vice versa Wrap your own or third-party JS-widgets with JSNI: • Google Maps • Flash objects • etc. Example 1: public static native void alert(String msg) /*-{ $wnd.alert(msg); }-*/; 29 www.ExigenServices.com
  • 30. JSNI Example 2: package mypackage; public MyClass{ public static int foo() { ... } public static native void exportStaticMethod() /*-{ $wnd.foo = $entry(@mypackage.MyClass::foo()); }-*/; } 30 www.ExigenServices.com
  • 31. Deferred binding It is a pluggable compile-time type substitution and code generation mechanism. 31 www.ExigenServices.com
  • 32. Deferred binding It is a pluggable compile-time type substitution and code generation mechanism. Example: Static binding Foo f = new Foo(); Dynamic Binding Class c = Class.forName(fooImplName); Foo f = (Foo) c.newInstance(); Deferred Binding Foo f = (Foo) GWT.create(Foo.class); 32 www.ExigenServices.com
  • 33. Deferred binding Goal - send exactly the right code to client, depending on • User‟s browser • Locale • Mode (debug / production) • Network characteristics • etc. 33 www.ExigenServices.com
  • 34. Deferred binding Goal - send exactly the right code to client, depending on • User‟s browser • Locale • Mode (debug / production) • Network characteristics • etc. Facilities • Make fewer Http Requests • Eliminate dead code • Avoid polymorphic dispatch • Avoid synchronous XHR • Avoid spaghetti code (if-s in JS-code) • Try to use only inline code “elem.innerText = str” • etc. 34 www.ExigenServices.com
  • 35. Permutations 35 www.ExigenServices.com
  • 36. Permutations Example: Input: DOMImpl dom = GWT.create(DOMImpl.class); 36 www.ExigenServices.com
  • 37. Permutations Example: Input: DOMImpl dom = GWT.create(DOMImpl.class); Implementations: DOMImplInternetExplorer DOMImplMozilla DOMImplOpera Property: user_agent = “IE” 37 www.ExigenServices.com
  • 38. Permutations Example: Input: DOMImpl dom = GWT.create(DOMImpl.class); Implementations: DOMImplInternetExplorer DOMImplMozilla DOMImplOpera Property: user_agent = “IE” Output: DOM dom = new DOMImplInternetExplorer(); 38 www.ExigenServices.com
  • 39. Permutations Example: 39 www.ExigenServices.com
  • 40. Perfect Caching 40 www.ExigenServices.com
  • 41. Perfect Caching Bootstrap selection script loads Javascript „executable‟ containing correct set of bindings for given request. <module>.nocache.js - small <md5>.cache.js – big 41 www.ExigenServices.com
  • 42. Perfect Caching Bootstrap selection script loads Javascript „executable‟ containing correct set of bindings for given request. <module>.nocache.js - small <md5>.cache.js – big Apache HTTP server .htaccess configuration: <Files *.nocache.*> ExpiresActive on ExpiresDefault "now" Header merge Cache-Control "public, max-age=0, must-revalidate" </Files> <Files *.cache.*> ExpiresActive on ExpiresDefault "now plus 1 year" </Files> 42 www.ExigenServices.com
  • 43. Monilithic Compilation 43 www.ExigenServices.com
  • 44. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator 44 www.ExigenServices.com
  • 45. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 45 www.ExigenServices.com
  • 46. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape); 46 www.ExigenServices.com
  • 47. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape); 3) int area = shape.len * shape.len; 47 www.ExigenServices.com
  • 48. Monilithic Compilation “The fastest code that which does not run”, --Joel Webber, GWT co-creator Example: Shape shape = new Square(4); 1) int area = shape.getArea(); 2) int area = Shape_getArea(shape); 3) int area = shape.len * shape.len; 4) int area = 16; 48 www.ExigenServices.com
  • 49. Client Bundle 49 www.ExigenServices.com
  • 50. Client Bundle Problem: 1) HTTP 1.1 limit: 2 outgoing connections per domain/port 50 www.ExigenServices.com
  • 51. Client Bundle Problem: 1) HTTP 1.1 limit: 2 outgoing connections per domain/port 2) HTTP request has to be sent to the server for each resource (e.g. image) 51 www.ExigenServices.com
  • 52. Client Bundle Problem: 1) HTTP 1.1 limit: 2 outgoing connections per domain/port 2) HTTP request has to be sent to the server for each resource (e.g. image) 3) Request for status 304 ("Not Modified") 52 www.ExigenServices.com
  • 53. Client Bundle Solution: interface Resources extends ClientBundle { @Source("logo.png") ImageResource logo(); @Source("arrow.png") @ImageOptions(flipRtl = true) ImageResource pointer(); } 53 www.ExigenServices.com
  • 54. Client Bundle Solution: interface Resources extends ClientBundle { @Source("logo.png") ImageResource logo(); @Source("arrow.png") @ImageOptions(flipRtl = true) ImageResource pointer(); } Resources resources = GWT.create(Resources.class); Image img = new Image(resources.logo()); 54 www.ExigenServices.com
  • 55. Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { Window.alert("Hello, AJAX"); } }); RootPanel.get().add(b); } } 55 www.ExigenServices.com
  • 56. Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { Window.alert("Hello, AJAX"); } }); RootPanel.get().add(b); } } 56 www.ExigenServices.com
  • 57. Code Splitting public class Hello implements EntryPoint { public void onModuleLoad() { Button b = new Button("Click me", new ClickHandler() { public void onClick(ClickEvent event) { GWT.runAsync(new RunAsyncCallback() { public void onFailure(Throwable caught) { Window.alert("Code download failed"); } public void onSuccess() { Window.alert("Hello, AJAX"); } }); } }); RootPanel.get().add(b); } } 57 www.ExigenServices.com
  • 58. GWT – it is a set of tools … N+1) UiBinder N+2) CellWidgets N+3) Activities & Places … 58 www.ExigenServices.com
  • 59. UiBinder Introduced in 2.0 (2010) GWT app is a Web Page Web page is HTML+CSS The best way to do is the easy one: 1) build your apps as HTML pages with GWT widgets sprinkled throughout them 2) do it more efficient (uses innerHTML, not DOM API calls) 59 www.ExigenServices.com
  • 60. UiBinder 1) Widgets have overhead 2) Use UiBinder to replace Widgets with HTML 2.1) when don‟t need to respond to events 2.2) or when events can be caught by a parent Widget 2.3) caution: can‟t add Widgets to HTML elements, so leaf Widgets require a parent Widget hierarchy to the top 60 www.ExigenServices.com
  • 61. UiBinder – “IS” 1) helps productivity and maintainability 2) collaboration with UI designers on theis language 3) mocking; 4) separation UI from its behavior 5) compile-time checking 6) direct support for internationalization 7) encourages more efficient use of browser‟s power 61 www.ExigenServices.com
  • 62. UiBinder – “IS NOT” 1) it is not a renderer 2) there are no loops, no conditionals, no if statements in its markup, and only a very limited expression language 3) UiBinder allows you to lay out your user interface. It's still up to the widgets or other controllers themselves to convert rows of data into rows of HTML 62 www.ExigenServices.com
  • 63. UiBinder – “Hello” example 1) Template (Hello.ui.xml) 1.1) For this example – it is pure HTML 1.2) Associate fields: ui:field='name' 2) Owner class (Hello.java) 2.1) Declare root (DivElement) and owner (Hello) interface MyUiBinder extends UiBinder<DivElement, Hello> 2.2) Use deffered binding to instanciate it: MyUiBinder uiBinder = GWT.create(MyUiBinder.class) 2.3) Create Element: uiBinder.createAndBindUi(this); (todo: show generated code) 63 www.ExigenServices.com
  • 64. UiBinder – “Hello” example Namespaces xmlns:s=“urn:import:com.nimbleteam.gwt.client.mvp.view.uibinder” <s:HelloWidget/> Method access Every one of the widget's methods that follow JavaBean-style conventions for setting a property can be used this way. 1) public void setName(String name) public void setValues(String values) 2) <s:HelloWidget name="default text" values="Andrew,Nikita,Yura"/> 64 www.ExigenServices.com
  • 65. UiBinder – Panels New LayoutPanels more efficient 1) Layout mostly delegated to browser 2) Less use of tables (except TabLayoutPanel) 3) Any panel (or anything that implements HasWidgets) can be used in a template file, and can have other panels inside of it. 4) Can contain only widgets (the restriction may be removed at 2.4+, workaround: enclose in HTML or HTMLPanel widgets) 65 www.ExigenServices.com
  • 66. UiBinder – Panels <g:DockLayoutPanel unit='EM'> <g:north size='5'> <g:Label>Top</g:Label> </g:north> <g:center> <g:Label>Body</g:Label> </g:center> <g:west size='10'> <g:HTML> <ul> <li>Sidebar</li> <li>Sidebar</li> </ul> </g:HTML> </g:west> </g:DockLayoutPanel> 66 www.ExigenServices.com
  • 67. UiBinder – Event Handling Old style: titleListBox.addChangeHandler( new ChangeHandler() { public void onChange( ChangeEvent event ) { Window.alert( "Old style" ); } } ); New style: @UiHandler( "titleListBox" ) void titleListBoxValueChanged(ChangeEvent e) { Window.alert( "New style" ); } (you can only use @UiHandler with events thrown by widget objects, not DOM elements) 67 www.ExigenServices.com
  • 68. UiBinder – ClientBundle It is a way to minimize trips for images, CSS Takes all other stuff that makes up your app and inject it into the code: Images CSS Text or anyhing you need Fewer roundtrips Built in image spriting Name spaces (no global name issues) Utilize CSS as engineering tool 68 www.ExigenServices.com
  • 69. UiBinder – Resources CssResource (see example) • ImageResource Options: 1) separate cacheable files 2) inline base64-encoded data 3) monolith image (will be sprited) • TextResource/ExternalTextResource • DataResource (non-text, with provided MIME type) 69 www.ExigenServices.com
  • 70. UiBinder – I18n Before: <div>Hello, world.</div> After: <div><ui:msg description="Greeting">Hello</ui:msg></div> Properties: ui:generateFormat, ui:generateKeys, ui:generateLocales Result: # Description: Greeting 8B1A9953C4611296A827ABF8C47804D7=Bonjour *Some widgets are i18n-ed out of the box (DatePicker) 70 www.ExigenServices.com
  • 71. CellWidgets Objective: In general, all widgets are slow (too much JavaScript) Old layout widgets are too static 71 www.ExigenServices.com
  • 72. CellWidgets - Features High-performance and lightweight (flyweight pattern) Renders interface as an HTML string (uses innerHTML, not DOM) Can handle events (fewer events == faster) Editable (Text, Number, Date-picker, etc.) Dataproviders support (sync and async) 72 www.ExigenServices.com
  • 73. CellWidgets - Showcase CellList, CellTable, DataGrid, CellTree, CellBrowser, … CellTable Features: Can render large amounts of data efficiently Pagination Multiple selection Sorting Keyboard navigation Editable cells 73 www.ExigenServices.com
  • 74. Activities&Places Browser‟s history management approach Natural place for using code-splitting for UI optimization 74 www.ExigenServices.com
  • 75. Activities&Places - Place Represents particular state that can be bookmarked Provides a way for bidirectional serialization of URL (PlaceTokenizer) Managed by PlaceController (listens eventBus) 75 www.ExigenServices.com
  • 76. Activities&Places - PlaceHistoryMapper Declares all the Places available in application GWT compiler will link PlaceHistoryHandler with PlaceTokenizer-s Example: SamplePlaceHistoryMapper 76 www.ExigenServices.com
  • 77. Activities&Places – Use case 1: goTo() Program calls to change place -> new place created and remembers it‟s token 77 www.ExigenServices.com
  • 78. Activities&Places – Use case 2: history event User navigates to some URL -> Controller changes the place 78 www.ExigenServices.com
  • 79. Activities&Places - Activity • Represents something the user is doing • Contains no Widgets or UI code • As some level it can be a “Presenter” in MVP pattern • Typical responsibility: • restore state ("wake up") • perform initialization ("set up") • load a corresponding UI ("show up") • Started and stopped by an ActivityManager (each per container) • May warn user before leaving 79 www.ExigenServices.com
  • 80. Activities&Places - ActivityMapper Maps each Place to its corresponding Activity "if (place instanceof SomePlace) return new SomeActivity(place)" Use case 1 – Provides brand new Activity for each call Use case 2 – Refreshes previous (singleton) activity 80 www.ExigenServices.com
  • 81. Activities&Places - View • Part of the UI associated with an Activity • Is a Widget (e.g. implements IsWidget interface) • Is a View in MVP pattern • Has 1 interface and >=1 implementations • Support for different views (e.g. desktop/mobile) • Easy JUnit testing (mocking) • Can be reused (recommended) 81 www.ExigenServices.com
  • 82. Activities&Places - Design 82 www.ExigenServices.com
  • 84. To be continued… http://www.exigenservices.by/webinars 84 www.ExigenServices.com