A Business Case for Ajax with Google Web Toolkit Bruce ...

unalaskaweepingInternet και Εφαρμογές Web

19 Ιουλ 2012 (πριν από 5 χρόνια και 1 μήνα)

394 εμφανίσεις

A

B
u
s
in
e
s
s

C
a
s
e

f
o
r

A
j
a
x
w
it
h

G
o
o
g
l
e

W
e
b

T
o
o
l
k
it
B
r
u
c
e

J
o
h
n
s
o
n
G
o
o
g
l
e
D
e
f
in
in
g

o
u
r

g
o
a
l

D
e
l
i
v
e
r

g
r
e
a
t

p
r
o
d
u
c
t
s

t
o

u
s
e
r
s

T
o
n
s

o
f

d
e
b
a
t
e

a
b
o
u
t

w
e
b

t
e
c
h
n
o
l
o
g
y

J
a
v
a
S
c
r
i
p
t
o
n
t
h
e
s
e
r
v
e
r
!

L
i
s
p
o
n
t
h
e
c
l
i
e
n
t
!
R
u
b
y
e
v
e
r
y
w
h
e
r
e
!
B
r
o
w
s
e
r
s
s
u
c
k
!
B
r
o
w
s
e
r
s
r
o
c
k
!

Y
e
t

u
s
e
r

h
a
p
p
i
n
e
s
s

n
e
v
e
r

s
e
e
m
s

t
o

f
i
g
u
r
e
i
n

a
s

a

p
r
i
m
a
r
y

d
e
c
i
s
i
o
n

c
r
i
t
e
r
i
o
n
H
o
w

w
e

r
e

g
o
n
n
a

r
o
l
l

t
o
d
a
y

A
j
a
x

i
s

v
e
r
y

b
u
z
z
w
o
r
d
-
i
s
h

a
t

t
h
e

m
o
m
e
n
t

E
a
s
y

t
o

g
e
t

c
a
u
g
h
t

u
p

i
n

f
a
d
s

a
n
d

F
U
D

T
h
e

o
n
l
y

s
o
l
u
t
i
o
n
:
j
u
s
t

s
a
y

n
o

t
o

t
h
e

n
o
i
s
e

T
h
i
n
k

f
o
r

y
o
u
r
s
e
l
f
,
q
u
e
s
t
i
o
n

a
u
t
h
o
r
i
t
y

(
E
s
p
e
c
i
a
l
l
y
s
e
l
f
-
p
r
o
c
l
a
i
m
e
d
a
u
t
h
o
r
i
t
i
e
s
)
D
o
n

t

b
e
l
ie
v
e

e
v
e
r
y
t
h
in
g

y
o
u

t
h
in
k

W
e

c
a
n

t

t
r
u
s
t

o
u
r
s
e
l
v
e
s
,
e
i
t
h
e
r

S
o
f
t
w
a
r
e

i
s

p
a
r
t

l
o
g
i
c

a
n
d

e
n
g
i
n
e
e
r
i
n
g



a
n
d

p
a
r
t

z
e
a
l
o
u
s

c
h
e
s
t
-
t
h
u
m
p
i
n
g

D
e
c
i
s
i
o
n
s

a
r
e

a
l
l

t
o
o

o
f
t
e
n

i
n
f
l
u
e
n
c
e
d

b
y
i
n
t
e
l
l
e
c
t
u
a
l

b
u
l
l
y
i
n
g
,
j
u
m
p
i
n
g

t
o
c
o
n
c
l
u
s
i
o
n
s
,
p
r
o
f
i
t

m
o
t
i
v
e
s
,
e
x
p
e
d
i
e
n
c
y
,
i
n
e
r
t
i
a
,
a
n
d

f
e
a
r
E
x
a
m
p
l
e
:

T
h
e

s
l
ip
p
e
r
y

s
l
o
p
e

W
e

n
e
e
d

W
e
b

2
.0

f
e
a
t
u
r
e
s

t
o

c
o
m
p
e
t
e
!

W
h
e
r
e

a
r
e

p
l
a
c
e
s

w
e

c
a
n

p
u
t

s
o
m
e

s
c
r
i
p
t
?

L
e
t

s

m
a
k
e

i
t

r
e
a
l
l
y

c
o
o
l

a
n
d

d
y
n
a
m
i
c
!

W
h
y

a
r
e

o
u
r

p
a
g
e
s

s
o

s
l
o
w

t
o

l
o
a
d

n
o
w
?

W
h
y

d
o
n

t

f
o
n
t
s

r
e
s
i
z
e

c
o
r
r
e
c
t
l
y

n
o
w
?

O
u
r

u
s
e
r
s

a
r
e

c
o
m
p
l
a
i
n
i
n
g


O
h
,
w
e

l
l

j
u
s
t

o
p
t
i
m
i
z
e

i
t

w
a
i
t

u
h

W
o
r
k
in
g

b
a
c
k
w
a
r
d
s

L
e
t

s

s
t
a
r
t

f
r
o
m

o
u
r

g
o
a
l

N
o

p
r
e
s
u
p
p
o
s
e
d

s
o
l
u
t
i
o
n

L
e
t

s

t
a
k
e

a

w
a
l
k

f
r
o
m

Z

t
o

A

Y
e
l
l
i
f
w
e

m
i
s
-
s
t
e
p

D
e
l
i
v
e
r

g
r
e
a
t

p
r
o
d
u
c
t
s

t
o

u
s
e
r
s
W
h
a
t

m
a
k
e
s

a

p
r
o
d
u
c
t

g
r
e
a
t
?

W
e

d
e
v
e
l
o
p
e
r
s

c
a
n

t

a
s
s
e
r
t

i
t

G
r
e
a
t
:
u
s
e
r
s

l
o
v
e

u
s
i
n
g

i
t

S
o
m
e

k
e
y

a
t
t
r
i
b
u
t
e
s
:

E
a
s
y
t
o
l
e
a
r
n

t
h
r
o
u
g
h
e
x
p
e
r
i
m
e
n
t
a
t
i
o
n

P
o
w
e
r
f
u
l
e
n
o
u
g
h
t
o
r
e
w
a
r
d
y
o
u
f
o
r
l
e
a
r
n
i
n
g
i
t

U
s
e
r
s
r
e
m
e
m
b
e
r
e
x
t
r
e
m
e
s
,
b
a
d
a
n
d
g
o
o
d

I
t

s e
a
s
i
e
r
t
o
r
e
m
e
m
b
e
r
t
h
e
b
a
d
t
h
i
n
g
s
W
h
a
t

d
o
e
s
n

t

m
a
k
e

a

p
r
o
d
u
c
t

g
r
e
a
t

I
t

h
a
s

n
o
t
h
i
n
g

t
o

d
o

w
i
t
h

y
o
u
r

s
o
u
r
c
e

c
o
d
e

E
l
e
g
a
n
c
e
,
m
a
i
n
t
a
i
n
a
b
i
l
i
t
y
?
I
r
r
e
l
e
v
a
n
t

H
o
w
m
u
c
h
f
u
n
i
t
i
s
t
o
d
e
v
e
l
o
p
?
I
r
r
e
l
e
v
a
n
t

C
h
o
i
c
e
o
f
p
r
o
g
r
a
m
m
i
n
g
l
a
n
g
u
a
g
e
s
?
I
r
r
e
l
e
v
a
n
t

D
o

y
o
u

b
u
y

a

c
a
r

b
a
s
e
d

o
n

t
h
e

C
A
D

s
y
s
t
e
m
u
s
e
d

t
o

d
e
s
i
g
n

i
t
?

I
f
i
t
g
e
t
s
7
M
P
G
,
d
o
e
s
t
h
e
m
a
n
u
f
a
c
t
u
r
e
r
s
a
y
,

B
u
t

o
u
r
C
A
D
s
y
s
t
e
m
m
a
k
e
s

u
s

e
f
f
i
c
i
e
n
t
!

E
x
a
c
t
l
y

w
h
o

a
r
e

t
h
e
s
e

u
s
e
r
s
,

a
n
y
w
a
y
?

F
o
r

w
e
b

a
p
p
s
,

l
o
t
s

o
f

t
h
i
n
g
s

v
a
r
y


L
a
n
g
u
a
g
e
,
g
r
a
m
m
a
r
,
R
T
L
,
c
h
a
r
a
c
t
e
r

s
e
t
s
,


C
u
l
t
u
r
a
l

n
o
r
m
s

f
o
r

i
c
o
n
s
,
c
o
l
o
r
s
,



I
n
t
e
r
a
c
t
i
o
n

a
i
d
s

(
I
M
E
s
,

s
c
r
e
e
n

r
e
a
d
e
r
s
,

)

H
a
r
d
w
a
r
e
/
O
S

(
M
a
c
,
W
i
n
d
o
w
s
,
L
i
n
u
x
,

)

R
A
M

a
n
d

C
P
U

s
p
e
e
d

(
+
m
o
b
i
l
e
)

S
c
r
e
e
n

r
e
s
o
l
u
t
i
o
n

(
+
m
o
b
i
l
e
)
E
x
a
c
t
l
y

w
h
o

a
r
e

t
h
e
s
e

u
s
e
r
s
,

a
n
y
w
a
y
?

T
h
i
n
g
s

t
h
a
t

v
a
r
y

b
y

u
s
e
r
,
c
o
n
t
i
n
u
e
d


N
e
t
w
o
r
k

c
h
a
r
a
c
t
e
r
i
s
t
i
c
s

(
d
i
a
l
-
u
p
,
D
S
L
,
c
a
b
l
e
,
s
a
t
e
l
l
i
t
e
,
c
e
l
l
,

)

T
o
l
e
r
a
n
c
e

f
o
r

r
e
s
p
o
n
s
i
v
e
n
e
s
s
,
r
e
l
i
a
b
i
l
i
t
y
,
a
n
d
U
I

c
o
m
p
l
e
x
i
t
y

B
r
o
w
s
e
r
s

(
F
F
,
I
E
,
S
a
f
a
r
i
,
W
e
b
K
i
t
,

+
m
o
b
i
l
e
)

A
n
d

t
h
e
n

t
h
e
r
e

a
r
e

t
h
e

c
o
m
m
o
n
a
l
it
ie
s

S
l
o
w

a
p
p
s

a
r
e

a
n
n
o
y
i
n
g

C
r
a
s
h
y

a
p
p
s

a
r
e

a
n
n
o
y
i
n
g

S
l
o
w
,
c
r
a
s
h
y

a
p
p
s

a
r
e

n
o
t

w
o
r
t
h

u
s
i
n
g

T
r
u
l
y

g
r
e
a
t

a
p
p
s

s
h
o
u
l
d

a
t

l
e
a
s
t

k
n
o
w

w
h
e
r
e
t
h
e
y

s
t
a
n
d

o
n

a
l
l

o
f

t
h
e

a
b
o
v
e

i
s
s
u
e
s

I
t

s e
x
h
a
u
s
t
i
n
g
j
u
s
t
t
h
i
n
k
i
n
g
a
b
o
u
t
i
t

E
a
s
y
t
o
f
i
x
a
t
e
o
n
t
h
e
a
s
p
e
c
t
s
y
o
u

ca
n

w
r
a
p
y
o
u
r
h
e
a
d
a
r
o
u
n
d
:

s
t
a
r
i
n
g
a
t
c
o
d
e
i
n
a
v
a
c
u
u
m
S
im
p
l
if
y
in
g

p
r
in
c
ip
l
e
s

T
h
e
n
e
e
d
f
o
r
a
p
p
l
i
c
a
t
i
o
n
s
c
r
o
s
s
e
s
a
l
l
b
o
r
d
e
r
s

Y
o
u
d
o
n
't
n
e
e
d
t
o
b
e
a
t
y
o
u
r
d
e
s
k
t
o
n
e
e
d
a
c
c
e
s
s
t
o
a
n
a
p
p
l
i
c
a
t
i
o
n

M
i
n
i
m
i
z
e
u
s
a
b
i
l
i
t
y
c
o
m
p
r
o
m
i
s
e
s
d
u
e
t
o
i
m
p
l
e
m
e
n
t
a
t
i
o
n
c
h
a
l
l
e
n
g
e
s


F
a
s
t
i
s
b
e
t
t
e
r
t
h
a
n
s
l
o
w


i
s
a
n
u
n
d
e
r
s
t
a
t
e
m
e
n
t
w
h
e
n
s
w
i
t
c
h
i
n
g
c
o
s
t
s
a
r
e
l
o
w
T
h
e

G
W
T

M
is
s
io
n

S
t
a
t
e
m
e
n
t
To
r
adically

improve
the
w
eb

experience
f
or users
by
e
nabling

developers
to use
e
xisting

Java
tools
to build
n
o-compromise

Ajax
for
a
ny

modern browser
T
e
c
h

p
r
e
r
e
q
:

W
h
y

a

c
o
m
p
il
e
r
?

V
i
t
a
l
t
o
s
e
p
a
r
a
t
e
t
h
e
m
a
i
n
t
a
i
n
a
b
i
l
i
t
y
o
f
t
h
e
s
o
u
r
c
e
c
o
d
e
f
r
o
m
t
h
e
e
f
f
e
c
t
i
v
e
n
e
s
s
o
f
t
h
e
e
x
e
c
u
t
a
b
l
e

H
a
n
d
w
r
i
t
t
e
n
J
a
v
a
S
c
r
i
p
t
h
a
s
a
c
o
n
f
l
i
c
t
o
f
i
n
t
e
r
e
s
t

Long, useful identifiers = bigger, slower apps

Nice formatting = bigger, slower apps

Comments = bigger, slower apps

T
h
e
s
o
l
u
t
i
o
n
i
s
n

t
t
o
t
r
y
t
o
s
t
r
i
k
e
a
b
a
l
a
n
c
e
i
n
h
a
n
d
w
r
i
t
t
e
n
J
a
v
a
S
c
r
i
p
t
,
i
t

s
t
o
c
r
e
a
t
e
a
l
e
v
e
l
o
f
i
n
d
i
r
e
c
t
i
o
n
,
s
o
t
h
a
t
y
o
u
c
o
m
p
r
o
m
i
s
e
n
e
i
t
h
e
r
E
x
a
m
p
l
e
:

T
y
p
e

t
ig
h
t
e
n
in
g

E
lim
in
a
tin
g r
u
n
tim
e c
o
sts o
f p
o
lym
o
r
p
h
ism
S
h
a
p
e

s

=

n
e
w

S
q
u
a
r
e
(
2
)
;

/
/

s
i
d
e

l
e
n
g
t
h

o
f

2
i
n
t

a

=

s
.
g
e
t
A
r
e
a
(
)
;

can become
S
q
u
a
r
e

s

=

n
e
w

S
q
u
a
r
e
(
2
)
;
i
n
t

a

=

(
s
.
l
e
n
g
t
h

*

s
.
l
e
n
g
t
h
)
;

which, if the constructor has no side effects, can become
i
n
t

a

=

4
;

U
ses typ
e in
fo
r
m
a
tio
n
a
c
r
o
ss th
e en
tir
e a
p
p

S
m
a
ller
sc
r
ip
t/
fa
ster
ex
ec
u
tio
n
a
r
e o
ften
c
o
m
p
lem
en
ta
r
y,
w
h
ic
h
is r
ea
lly fu
n
T
e
c
h

p
r
e
r
e
q
:

D
e
f
e
r
r
e
d

b
in
d
in
g


N
o
-
c
o
m
p
r
o
m
i
s
e


m
e
a
n
s
w
e
m
u
s
t
u
s
e
a
l
l
c
o
n
c
e
i
v
a
b
l
e
o
p
t
i
m
i
z
a
t
i
o
n
s


P
o
r
t
a
b
l
e


i
s
t
h
e
o
p
p
o
s
i
t
e
o
f
o
p
t
i
m
i
z
e
d

Must avoid least-common-denominator syndrome

Yet,

a
bstractions are vital to

e
ffective development

S
o
l
u
t
i
o
n
:
G
W
T
d
e
f
e
r
r
e
d
b
i
n
d
i
n
g

U
s
i
n
g
p
o
l
y
m
o
r
p
h
i
s
m
a
s
a
p
e
r
m
u
t
a
t
i
o
n
a
x
i
s

F
u
l
l
y
o
p
t
i
m
i
z
e
e
a
c
h
p
e
r
m
u
t
a
t
i
o
n
s
e
p
a
r
a
t
e
l
y
Single Java
Code Base
D
o
w
n
l
o
a
d

e
x
a
c
t
l
y

w
h
a
t

y
o
u

n
e
e
d

i
n
a

s
i
n
g
l
e
,

o
p
t
i
m
i
z
e
d
,
c
a
n
'
t
-
g
o
-
w
r
o
n
g

c
h
u
n
k
T
h
e
n

c
a
c
h
e

i
t

o
n

t
h
e

c
l
i
e
n
t
u
n
t
i
l

t
h
e

s
u
n

e
x
p
l
o
d
e
s

F
i
r
e
F
o
x

1
.
0
.
x
Y
o
u
r

C
o
d
e
e
n
_
U
S
1
D
0
4
A
D
D
A
.
c
a
c
h
e
.
h
t
m
l
S
a
f
a
r
i

2
.
0
.
x
Y
o
u
r

C
o
d
e
f
r
_
F
R

7
E
F
E
4
D
2
4
.
c
a
c
h
e
.
h
t
m
l
I
E

6
Y
o
u
r

C
o
d
e
e
n
_
U
K

1
5
F
3
6
1
B
B
.
c
a
c
h
e
.
h
t
m
l
O
p
e
r
a

9
Y
o
u
r

C
o
d
e
f
r
_
C
A

D
4
1
5
D
9
1
7
.
c
a
c
h
e
.
h
t
m
l
Java
i
m
plementation
i
n GWT source
:
class Button {
public void
s
etText
(
String text) {

D
OM.
s
etInnerText
(
g
etElement
(
), text);
}

}
S
a
f
a
r
i

v
e
r
s
i
o
n
:
c
l
a
s
s

D
O
M
I
m
p
l

{


p
u
b
l
i
c

n
a
t
i
v
e

v
o
i
d

s
e
t
I
n
n
e
r
T
e
x
t
(
E
l
e
m
e
n
t

e
l
e
m
,

S
t
r
i
n
g

t
e
x
t
)

/
*
-
{




/
/

R
e
m
o
v
e

a
l
l

c
h
i
l
d
r
e
n

f
i
r
s
t
.




w
h
i
l
e

(
e
l
e
m
.
f
i
r
s
t
C
h
i
l
d
)

{






e
l
e
m
.
r
e
m
o
v
e
C
h
i
l
d
(
e
l
e
m
.
f
i
r
s
t
C
h
i
l
d
)
;




}




/
/

A
d
d

a

n
e
w

t
e
x
t

n
o
d
e
.




i
f

(
t
e
x
t

!
=

n
u
l
l
)

{






e
l
e
m
.
a
p
p
e
n
d
C
h
i
l
d
(
$
d
o
c
.
c
r
e
a
t
e
T
e
x
t
N
o
d
e
(
t
e
x
t
)
)
;




}


}
-
*
/
;
}
I
n
t
e
r
n
e
t

E
x
p
l
o
r
e
r

v
e
r
s
i
o
n
:
c
l
a
s
s

D
O
M
I
m
p
l
I
E
6

{


p
u
b
l
i
c

n
a
t
i
v
e

v
o
i
d

s
e
t
I
n
n
e
r
T
e
x
t
(
E
l
e
m
e
n
t

e
l
e
m
,






S
t
r
i
n
g

t
e
x
t
)

/
*
-
{




e
l
e
m
.
i
n
n
e
r
T
e
x
t

=

t
e
x
t

|
|

'
'
;


}
-
*
/
;
}
J
a
v
a

c
a
l
l

s
i
t
e

i
n

G
W
T

s
o
u
r
c
e
:
b
.
s
e
t
T
e
x
t
(

C
l
i
c
k

M
e
!
"
)
;
Compiled
J
avascript
(
IE):
b.element.
i
nnerText
=


C
lick Me!';
Compiled
J
avascript
(
Safari):
$
s
e
t
I
n
n
e
r
T
e
x
t
(
b
.
e
l
e
m
e
n
t
,

'
C
l
i
c
k

M
e
!

)
;
f
u
n
c
t
i
o
n

$
s
e
t
I
n
n
e
r
T
e
x
t
(
e
l
e
m
,

t
e
x
t
)

{


w
h
i
l
e

(
e
l
e
m
.
f
i
r
s
t
C
h
i
l
d
)

{




e
l
e
m
.
r
e
m
o
v
e
C
h
i
l
d
(
e
l
e
m
.
f
i
r
s
t
C
h
i
l
d
)
;


}


i
f

(
t
e
x
t

!
=

n
u
l
l
)

{




e
l
e
m
.
a
p
p
e
n
d
C
h
i
l
d
(
$
d
o
c
.
c
r
e
a
t
e
T
e
x
t
N
o
d
e
(
t
e
x
t
)
)
;


}
}
2469
1520
918
2477
innerText
-
1386
908
-
textContent
4078 ms
2053 ms
1276 ms
2876 ms
Typical

p
ortable
setInnerText
(
)
IE
Opera
Safari
Firefox
3
9
%
3
2
%
2
9
%
1
4
%
Speedup
B
o
t
t
o
m
-
l
in
e
:

F
a
s
t
e
r
-
t
h
a
n
-
p
o
s
s
ib
l
e
T
h
e

n
e
e
d

f
o
r

a
p
p
l
i
c
a
t
i
o
n
s

c
r
o
s
s
e
s

a
l
l

b
o
r
d
e
r
s

I
n
t
e
r
n
a
t
i
o
n
a
l
i
z
a
t
i
o
n
(
i
1
8
n
)
i
s
n

t
j
u
s
t
s
t
r
i
n
g
s


C
o
n
s
t
a
n
t
s


f
o
r
l
o
c
a
l
e
-
s
p
e
c
i
f
i
c
v
a
l
u
e
s
a
n
d
s
e
t
t
i
n
g
s


M
e
s
s
a
g
e
s


f
o
r
l
o
c
a
l
i
z
e
d
s
t
r
i
n
g
s
w
i
t
h
a
r
g
u
m
e
n
t
s


L
o
c
a
l
i
z
a
b
l
e

f
o
r
l
o
c
a
l
e
-
s
e
n
s
i
t
i
v
e
a
l
g
o
r
i
t
h
m
s


D
a
t
e
T
i
m
e
F
o
r
m
a
t


f
o
r
p
a
r
s
i
n
g
/
f
o
r
m
a
t
t
i
n
g


N
u
m
b
e
r
F
o
r
m
a
t

f
o
r
p
a
r
s
i
n
g
/
f
o
r
m
a
t
t
i
n
g

A
l
l
c
l
i
e
n
t
-
s
i
d
e
,
n
o
r
o
u
n
d
-
t
r
i
p
s
(
f
o
r
s
p
e
e
d
)

S
t
a
t
i
c
a
l
l
y
c
h
e
c
k
a
b
l
e
(
f
o
r
c
o
r
r
e
c
t
n
e
s
s
)
M
e
s
s
a
g
e
s
:

M
a
x
i
m
a
l
l
y
-
e
f
f
i
c
i
e
n
t

I
1
8
N

I
n
ter
fa
c
es d
efin
e typ
e-sa
fe tem
p
la
te m
eth
o
d
s
interface
E
rrorMessages
e
xtends Messages
{ String
a
ccessDenied
(
i
nt errorCode
,
String username); }

C
o
r
r
esp
o
n
d
in
g lo
c
a
liz
ed
p
r
o
p
er
ties files
accessDenied=Error
{
0}:{1} cannot access {2}

C
o
n
n
ec
ted
v
ia
c
o
m
p
ile-tim
e c
o
d
e gen
er
a
tio
n
Window.alert(
m
sgs
.
a
ccessDenied
(
515, user))

T
h
e a
b
o
v
e w
o
u
ld
n

t
c
o
m
p
ile :
-)
M
e
s
s
a
g
e
s
:

T
h
e

c
o
d
e

t
h
a
t

e
x
e
c
u
t
e
s

M
essa
ge r
efer
en
c
es get
i
n
lin
ed

T
h
is J
a
v
a
so
u
r
c
e
String s =
m
sgs
.
a
ccessDenied
(
42, user,
f
tr
)
)

C
o
m
p
iles in
to
th
is J
a
v
a
S
c
r
ip
t so
u
r
c
e (
p
er
lo
c
a
le)
var
s = "
E
rror 42:" + user
+

" cannot access

"
+

f
tr

Z
er
o
-c
o
st a
b
str
a
c
tio
n
s m
a
k
e I
1
8
N
ea
sier
to
u
se
a
n
d
p
er
fec
tly a
ffo
r
d
a
b
le a
t r
u
n
tim
e
I
1
8
N

W
r
a
p
-
u
p

G
o
o
d
I
1
8
N

m
u
st b
e in
fu
sed
th
r
o
u
gh
o
u
t yo
u
r
a
p
p

M
u
st b
e

e
a
sy en
o
u
gh
to
b
e a
p
p
r
o
a
c
h
a
b
le



a
n
d
effic
ien
t en
o
u
gh
to
b
e a
ffo
r
d
a
b
le

C
o
m
in
g so
o
n
:
R
T
L
la
yo
u
t,
A
R
I
A
a
c
c
essib
ility,
m
o
r
e k
eyb
o
a
r
d
su
p
p
o
r
t
O
n
w
a
rd
!
Y
o
u

d
o
n
'
t

n
e
e
d

t
o

b
e

a
t

y
o
u
r

d
e
s
k


T
h
is fa
c
t a
lo
n
e ju
stifies th
e c
h
o
ic
e o
f w
eb
a
p
p
s
v
s
.
lo
c
a
lly-in
sta
lled
a
p
p
s

L
o
ts o
f o
th
er
im
p
lic
a
tio
n
s o
f w
eb
a
p
p
s

D
ir
ec
t c
o
lla
b
o
r
a
tio
n

F
a
r
b
e
t
t
e
r
t
h
a
n

e
m
a
il
in
g

a
p
p
l
ic
a
t
io
n

d
a
t
a

f
il
e
s

a
ro
u
n
d

H
a
rd

t
o

d
e
s
ig
n

a
p
p
s

t
h
a
t

s
u
p
p
o
rt

l
ive

c
o
l
l
a
b
o
ra
t
io
n

N
e
e
d

M
V
C
-
l
ike

a
rc
h
it
e
c
t
u
re

a
n
d

g
o
o
d

R
P
C

O
n

t
h
e

w
e
b
,
y
o
u

c
a
n

t

n
o
t

t
h
in
k
a
b
o
u
t

it
A
d
d
i
t
i
o
n
a
l

i
m
p
l
i
c
a
t
i
o
n
s

o
f

w
e
b

a
p
p
s

M
u
ltip
le b
r
o
w
ser
s u
sed
,
ev
en
b
y th
e sa
m
e u
ser

M
o
b
il
e

o
n
l
y

a
d
d
s

c
o
m
p
l
e
x
it
y

M
o
b
il
e

is

h
a
p
p
e
n
in
g

D
o
yo
u
r
ea
lly w
a
n
t to
d
ep
en
d
o
n
p
lu
g-in
s?

A
t

t
h
e

l
e
a
s
t
,
a
p
p
s

s
h
o
u
l
d

g
ra
c
e
f
u
l
l
y

d
e
g
ra
d
e

S
p
eed
m
a
tter
s ev
en
h
er
e

U
s
e
rs

n
e
e
d

t
o

t
h
in
k

o
f

y
o
u
r
a
p
p

a
s

a
t
-
t
h
e
-
re
a
d
y


N
o
t

s
o
m
e
t
h
in
g

w
it
h

a


h
ig
h

a
c
t
iva
t
io
n

e
n
e
rg
y

D
i
d

I

m
e
n
t
i
o
n

m
o
b
i
l
e
?

V
er
y c
o
m
p
lic
a
tin
g

S
c
r
een
r
eso
lu
tio
n
s

T
o
u
c
h
sc
r
een
v
s
.
n
o
t

C
r
a
z
y-d
iffer
en
t n
etw
o
r
k
c
h
a
r
a
c
ter
istic
s

N
et:

N
eed

f
a
st,
sm
a
ll c
o
d
e ta
ilo
r
ed
fo
r
ea
c
h
d
ev
ic
e

s
fo
r
m
-fa
c
to
r
a
n
d
c
a
p
a
b
ilities

G
W
T
c
a
n
h
elp
h
er
e
O
n
l
y

p
a
y

f
o
r

w
h
a
t

y
o
u

u
s
e
R
e
u
s
e

w
it
h
o
u
t

s
a
c
r
if
ic
in
g

e
f
f
ic
ie
n
c
y
Shared client-side
application logic
Desktop UI
Mobile UI #1
Mobile UI #2
M
i
n
i
m
i
z
e

u
s
a
b
i
l
i
t
y

c
o
m
p
r
o
m
i
s
e
s


E
a
sy to

m
a
k
e little c
o
n
c
essio
n
s

t
o
im
p
lem
en
ta
tio
n
c
o
n
c
er
n
s th
r
o
u
gh
o
u
t

A
t a
tec
h
n
ic
a
l lev
el,
d
efer
r
ed
b
in
d
in
g lets yo
u
c
r
ea
te sp
ec
ia
liz
a
tio
n
s ea
sily

B
u
t th
e m
o
r
e su
b
tle p
o
in
t is h
o
w
yo
u
d
esign
yo
u
r
a
p
p
in
th
e fir
st p
la
c
e

A
n
d
,
o
f c
o
u
r
se,
th
is a
ll c
o
sts tim
e a
n
d
m
o
n
ey
M
i
n
i
m
i
z
e

u
s
a
b
i
l
i
t
y

c
o
m
p
r
o
m
i
s
e
s

H
i
st
o
ry
&
B
a
c
k
i
s h
a
rd
M
i
n
i
m
i
z
e

u
s
a
b
i
l
i
t
y

c
o
m
p
r
o
m
i
s
e
s

D
o
n

t

re
fre
sh

!
w
e

l
l
c
h
a
rg
e
y
o
u
t
w
i
c
e
U
s
a
b
il
it
y

f
u
n
d
a
m
e
n
t
a
l
s

F
o
c
u
s

o
n

t
h
e

b
a
s
i
c
s

P
r
e
f
e
r

n
a
t
i
v
e

U
I

e
l
e
m
e
n
t
s

S
u
p
p
o
r
t

k
e
y
b
o
a
r
d
-
o
n
l
y

u
s
e

H
o
n
o
r

f
o
n
t

s
i
z
e

p
r
e
f
e
r
e
n
c
e
s

U
s
e
r

i
n

c
o
n
t
r
o
l

o
f

b
r
o
w
s
e
r

a
t

a
l
l

t
i
m
e
s

S
p
e
e
d

i
s

v
i
t
a
l
,
e
s
p
e
c
i
a
l
l
y

a
t

s
t
a
r
t
u
p

T
h
e

i
d
e
a
l
:
f
e
e
l
s

l
i
k
e

a

t
r
a
d
i
t
i
o
n
a
l
w
e
b

a
p
p
,
j
u
s
t

b
e
t
t
e
r
A
s
k

u
s
e
r
s

U
ser
feed
b
a
c
k
a
n
d
u
sa
b
ility testin
g

a
r
e v
ita
l

Y
o
u
w
ill n
ev
er
get it r
igh
t th
e fir
st N
tim
es

B
ein
g a
b
le to
iter
a
te q
u
ic
k
ly is k
ey

D
ev
elo
p
er
s n
eed
to
o
ls a
n
d
lib
r
a
r
ies

w
ith
lo
ts
o
f lev
er
a
ge
Things developers shouldn

t
have to worry about early

J
a
v
a
S
c
r
ip
t fu
n
k
in
ess

s
p
e
l
l
in
g

b
u
g
s


n
u
l
l


v
s
.


u
n
d
e
f
in
e
d


v
s
.


f
a
l
s
e


v
s
.




(
e
m
p
t
y
)

s
p
e
e
d

C
r
o
ss-b
r
o
w
ser
su
p
p
o
r
t

M
em
o
r
y lea
k
s

A
n
d

F
r
a
m
e
w
o
r
k
-
i
t
i
s

N
ic
e a
b
str
a
c
tio
n
s a
r
e fo
r
la
ter

J
a
v
a
S
c
r
ip
t =
>
d
iffic
u
lty in

r
efa
c
to
r
in
g

R
efa
c
to
r
in
g
diffic
u
lty =
>
m
a
in
ten
a
n
c
e w
o
r
r
y

M
a
in
ten
a
n
c
e w
o
r
r
y =
>
th
e n
eed
to


g
et it
r
igh
t

fr
o
m
th
e b
egin
n
in
g:

f
r
a
m
ew
o
r
k
-itis

B
u
t yo
u
d
o
n

t
k
n
o
w
w
h
a
t

i
t


is u
n
til yo
u

v
e
d
o
n
e sev
er
a
l iter
a
tio
n
s o
f u
ser
testin
g

W
o
r
se th
a
n
w
a
stefu
l:
c
r
ea
tes

b
a
d
in
er
tia
G
e
t

r
e
s
i
d
u
a
l

v
a
l
u
e

f
r
o
m

p
r
o
t
o
t
y
p
e

c
o
d
e

U
ser
testin
g im
p
lies lo
ts o
f p
r
o
to
typ
e c
o
d
e

F
a
c
e it:
yo
u

r
e go
in
g to
tr
y to
r
eu
se it a
n
yw
a
y

G
W
T

g
iv
es yo
u
en
o
u
gh
lev
er
a
ge to
b
u
ild
r
ea
l,
w
o
r
k
in
g p
r
o
to
typ
es fo
r
u
sa
b
ility testin
g

R
e
d
u
c
e
s

t
h
e

d
is
t
a
n
c
e

b
e
t
w
e
e
n


m
o
c
k


a
n
d


r
e
a
l


P
re
ve
n
t
s

p
a
p
e
r
f
e
a
t
u
re
s

t
h
a
t

u
s
e
rs

l
o
ve

b
u
t

c
a
n

t

b
e
im
p
l
e
m
e
n
t
e
d

in

re
a
l
it
y

A
b
ility to

r
efa
c
to
r

m
a
k
es a
ll th
e d
iffer
en
c
e
M
o
d
u
l
a
r
i
z
i
n
g

y
o
u
r

A
j
a
x

c
o
d
e


O
b
v
io
u
sly

yo
u
fa
c
to
r
o
u
t J
S
lib
r
a
r
y sc
r
ip
ts

In
c
l
u
d
e

o
n
l
y

t
h
e

o
n
e
s

y
o
u

n
e
e
d

u
s
in
g

<
s
c
rip
t
>

T
h
e o
n
ly p
r
o
b
lem

t
h
e p
er
fo
r
m
a
n
c
e su
c
k
s

W
h
y?
T
w
o
r
ea
so
n
s yo
u
c
a
n

t
get a
r
o
u
n
d

H
T
T
P

ro
u
n
d
-
t
rip
s

d
o
m
in
a
t
e

s
p
e
e
d
,
e
s
p
.
s
t
a
rt
u
p

<
s
c
rip
t
>

t
a
g
s

b
l
o
c
k
p
a
ra
l
l
e
l

d
o
w
n
l
o
a
d
s

B
a
d
d
ec
isio
n
s b
eget m
o
r
e b
a
d
d
ec
isio
n
s

Y
o
u

s
t
a
rt

w
a
s
t
in
g

t
im
e

in
ve
n
t
in
g

JS

c
o
n
c
a
t

t
o
o
l
s

A
n
o
th
er
ex
a
m
p
le o
f

w
h
y

y
o
u

w
a
n
t

a
c
o
m
p
iler
B
e
f
o
r
e

w
e

g
e
t

t
o

#
1


O
f c
o
u
r
se,
th
er
e a
r
e o
th
er
b
u
sin
ess
c
o
n
sid
er
a
tio
n
s b
esid
es a
p
p
gr
ea
tn
ess

M
in
im
iz
in
g d
ev
elo
p
m
en
t c
o
sts a
n
d
m
a
x
im
iz
in
g
p
r
o
d
u
c
tiv
ity

M
in
im
iz
in
g ser
v
er
h
a
r
d
w
a
r
e a
n
d
m
a
n
a
gem
en
t
c
o
sts

M
a
x
im
iz
in
g c
o
m
p
etitiv
e a
d
v
a
n
ta
ge

I
n
ter
o
p
er
a
b
ility w
ith
ex
istin
g

c
o
d
e
H
T
M
L
A
j
a
x
S
t
a
t
e
l
e
s
s
H
T
M
L
B
r
o
w
s
e
r
E
v
e
r
y

u
s
e
r

a
c
t
i
o
n
T
o
t
a
l
l
y

n
e
w

p
a
g
e
0
1
1
0
0
1
1
0
0
1
1
1
1
0
0
1
0
1
1
0
1
0
1
1
0
1
1
0
0
1
1
0
1
1
0
1
1
1
1
1
1
0
0
1
0
1
0
0
0
1
1
0
1
0
1
1
1
1
0
1
1
1
0
0
1
1
0
1
0
1
1
0
S
t
a
t
e
f
u
l
S
e
r
v
e
r
E
v
e
n
t
s
h
a
n
d
l
e
d
l
o
c
a
l
l
y
0
1
1
0
0
1
1
1
0
1
1
0
1
0
0
1
1
0
1
1
S
t
a
t
e
f
u
l
J
S

a
n
d

D
H
T
M
L
B
r
o
w
s
e
r
S
t
a
t
e
l
e
s
s
(
i
.
e
.

a
n
y
)
S
e
r
v
e
r
D
a
t
a

o
n
l
y
,

n
o
t

H
T
M
L
R
e
m
o
t
e

p
r
o
c
e
d
u
r
e

c
a
l
l
s
R
e
s
p
o
n
s
i
v
e
n
e
s
s

a
n
d

e
f
f
i
c
i
e
n
t

n
e
t
w
o
r
k

u
s
a
g
e
1
.
0
1
.
0
1
.
4
1
.
4
0
5
1
0
1
5
2
0
2
5
F
i
r
s
t

R
u
n
S
u
b
s
e
q
u
e
n
t

R
u
n
s
#

H
T
T
P

R
e
q
u
e
s
t
s
W
e

c
o
u
n
t

H
T
T
P

r
e
q
u
e
s
t
s

f
o
r

y
o
u
U
p
g
r
a
d
e

+

r
e
c
o
m
p
i
l
e

=

s
m
a
l
l
e
r

c
o
d
e
1
.
0
1
.
0
1
.
4
1
.
4
0
2
0
,
0
0
0
4
0
,
0
0
0
6
0
,
0
0
0
8
0
,
0
0
0
1
0
0
,
0
0
0
1
2
0
,
0
0
0
U
n
c
o
m
p
r
e
s
s
e
d
C
o
m
p
r
e
s
s
e
d
S
c
r
i
p
t

S
i
z
e

(
b
y
t
e
s
)
U
p
g
r
a
d
e

+

r
e
c
o
m
p
i
l
e

=

f
a
s
t
e
r

c
o
d
e
1
.
0
1
.
0
1
.
0
1
.
0
1
.
4
1
.
4
1
.
4
1
.
4
0
1
0
0
2
0
0
3
0
0
4
0
0
5
0
0
6
0
0
7
0
0
F
i
r
e
F
o
x

1
.
0
.
7
I
n
t
e
r
n
e
t

E
x
p
l
o
r
e
r

6
O
p
e
r
a

9
.
2
S
a
f
a
r
i

2
.
0
R
P
C

R
o
u
n
d

T
r
i
p

T
i
m
e

(
m
s
)
U
s
e
r

I
n
t
e
r
f
a
c
e
D
O
M
,

A
b
s
o
l
u
t
e
P
a
n
e
l
,

A
b
s
t
r
a
c
t
I
m
a
g
e
P
a
n
e
l
,

A
b
s
t
r
a
c
t
I
m
a
g
e
P
r
o
t
o
t
y
p
e
,

B
u
t
t
o
n
,

B
u
t
t
o
n
B
a
s
e
,

C
e
l
l
P
a
n
e
l
,

C
h
a
n
g
e
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,
C
h
e
c
k
B
o
x
,

C
l
i
c
k
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,

C
l
i
p
p
e
d
I
m
a
g
e
P
r
o
t
o
t
y
p
e
,

C
o
m
p
l
e
x
P
a
n
e
l
,

C
o
m
p
o
s
i
t
e
,

D
e
c
k
P
a
n
e
l
,

D
i
a
l
o
g
B
o
x
,

D
i
s
c
l
o
s
u
r
e
P
a
n
e
l
,
D
o
c
k
P
a
n
e
l
,

F
i
l
e
U
p
l
o
a
d
,

F
l
e
x
T
a
b
l
e
,

F
l
o
w
P
a
n
e
l
,

F
o
c
u
s
L
i
s
t
e
n
e
r
A
d
a
p
t
e
r
,

F
o
c
u
s
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,

F
o
c
u
s
P
a
n
e
l
,

F
o
c
u
s
W
i
d
g
e
t
,
F
o
r
m
H
a
n
d
l
e
r
C
o
l
l
e
c
t
i
o
n
,

F
o
r
m
P
a
n
e
l
,

F
o
r
m
S
u
b
m
i
t
C
o
m
p
l
e
t
e
E
v
e
n
t
,

F
o
r
m
S
u
b
m
i
t
E
v
e
n
t
,

F
r
a
m
e
,

G
r
i
d
,

H
o
r
i
z
o
n
t
a
l
P
a
n
e
l
,
H
o
r
i
z
o
n
t
a
l
S
p
l
i
t
P
a
n
e
l
,

H
T
M
L
,

H
T
M
L
P
a
n
e
l
,

H
T
M
L
T
a
b
l
e
,

H
y
p
e
r
l
i
n
k
,

I
m
a
g
e
,

K
e
y
b
o
a
r
d
L
i
s
t
e
n
e
r
A
d
a
p
t
e
r
,

K
e
y
b
o
a
r
d
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,
L
a
b
e
l
,

L
i
s
t
B
o
x
,

L
o
a
d
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,

M
e
n
u
B
a
r
,

M
e
n
u
I
t
e
m
,

P
u
s
h
B
u
t
t
o
n
,

M
o
u
s
e
L
i
s
t
e
n
e
r
A
d
a
p
t
e
r
,

M
o
u
s
e
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,
N
a
m
e
d
F
r
a
m
e
,

P
a
n
e
l
,

P
a
s
s
w
o
r
d
T
e
x
t
B
o
x
,

P
o
p
u
p
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,

P
o
p
u
p
P
a
n
e
l
,

R
a
d
i
o
B
u
t
t
o
n
,

R
i
c
h
T
e
x
t
A
r
e
a
,

R
o
o
t
P
a
n
e
l
,
S
c
r
o
l
l
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,

S
c
r
o
l
l
P
a
n
e
l
,

S
i
m
p
l
e
P
a
n
e
l
,

S
t
a
c
k
P
a
n
e
l
,

S
u
g
g
e
s
t
B
o
x
,

T
a
b
B
a
r
,

T
a
b
l
e
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,

T
a
b
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,
T
a
b
P
a
n
e
l
,

T
e
x
t
A
r
e
a
,

T
e
x
t
B
o
x
,

T
e
x
t
B
o
x
B
a
s
e
,

T
o
g
g
l
e
B
u
t
t
o
n
,

T
r
e
e
,

T
r
e
e
I
t
e
m
,

T
r
e
e
L
i
s
t
e
n
e
r
C
o
l
l
e
c
t
i
o
n
,

U
I
O
b
j
e
c
t
,

V
e
r
t
i
c
a
l
P
a
n
e
l
,
V
e
r
t
i
c
a
l
S
p
l
i
t
P
a
n
e
l
,

W
i
d
g
e
t
,

W
i
d
g
e
t
C
o
l
l
e
c
t
i
o
n
C
l
i
e
n
t
/
S
e
r
v
e
r

D
a
t
a

E
x
c
h
a
n
g
e

(
R
P
C
,

H
T
T
P
,

J
S
O
N
,

X
M
L
)
D
O
M
E
x
c
e
p
t
i
o
n
,

X
M
L
P
a
r
s
e
r
,

A
t
t
r
,

C
D
A
T
A
S
e
c
t
i
o
n
,

C
h
a
r
a
c
t
e
r
D
a
t
a
,

C
o
m
m
e
n
t
,

D
o
c
u
m
e
n
t
,

D
o
c
u
m
e
n
t
F
r
a
g
m
e
n
t
,

E
l
e
m
e
n
t
,
E
n
t
i
t
y
R
e
f
e
r
e
n
c
e
,

N
a
m
e
d
N
o
d
e
M
a
p
,

N
o
d
e
,

N
o
d
e
L
i
s
t
,

P
r
o
c
e
s
s
i
n
g
I
n
s
t
r
u
c
t
i
o
n
,

T
e
x
t
,

A
s
y
n
c
C
a
l
l
b
a
c
k
,

I
s
S
e
r
i
a
l
i
z
a
b
l
e
,

R
e
m
o
t
e
S
e
r
v
i
c
e
,
R
e
m
o
t
e
S
e
r
v
i
c
e
S
e
r
v
l
e
t
,

R
P
C
,

S
e
r
v
i
c
e
D
e
f
T
a
r
g
e
t
,

J
S
O
N
A
r
r
a
y
,

J
S
O
N
B
o
o
l
e
a
n
,

J
S
O
N
E
x
c
e
p
t
i
o
n
,

J
S
O
N
N
u
l
l
,

J
S
O
N
N
u
m
b
e
r
,

J
S
O
N
O
b
j
e
c
t
,
J
S
O
N
P
a
r
s
e
r
,

J
S
O
N
S
t
r
i
n
g
,

J
S
O
N
V
a
l
u
e
,

H
e
a
d
e
r
,

R
e
q
u
e
s
t
,

R
e
q
u
e
s
t
B
u
i
l
d
e
r
,

R
e
q
u
e
s
t
C
a
l
l
b
a
c
k
,

R
e
q
u
e
s
t
E
x
c
e
p
t
i
o
n
,

R
e
s
p
o
n
s
e
,

U
R
L
Q
u
a
l
i
t
y

a
n
d

U
s
a
b
i
l
i
t
y

(
J
U
n
i
t
,

B
e
n
c
h
m
a
r
k
i
n
g
,

H
i
s
t
o
r
y
,

B
u
n
d
l
i
n
g
,

I
1
8
N
)
G
W
T
T
e
s
t
C
a
s
e
,

B
e
n
c
h
m
a
r
k
,

C
o
m
m
a
n
d
,

D
e
f
e
r
r
e
d
C
o
m
m
a
n
d
,

I
n
c
r
e
m
e
n
t
a
l
C
o
m
m
a
n
d
,

H
i
s
t
o
r
y
,

T
i
m
e
r
,

L
o
c
a
l
i
z
a
b
l
e
,

C
o
n
s
t
a
n
t
s
,
D
a
t
e
T
i
m
e
F
o
r
m
a
t
,

D
i
c
t
i
o
n
a
r
y
,

C
o
n
s
t
a
n
t
s
W
i
t
h
L
o
o
k
u
p
,

M
e
s
s
a
g
e
s
,

N
u
m
b
e
r
F
o
r
m
a
t
,

I
m
a
g
e
B
u
n
d
l
e
J
R
E

E
m
u
l
a
t
i
o
n
B
o
o
l
e
a
n
,

B
y
t
e
,

C
h
a
r
a
c
t
e
r
,

D
o
u
b
l
e
,

F
l
o
a
t
,

I
n
t
e
g
e
r
,

L
o
n
g
,

M
a
t
h
,

N
u
m
b
e
r
,

O
b
j
e
c
t
,

S
h
o
r
t
,

S
t
r
i
n
g
,

S
t
r
i
n
g
B
u
f
f
e
r
,

S
y
s
t
e
m
,

C
h
a
r
S
e
q
u
e
n
c
e
,
C
o
m
p
a
r
a
b
l
e
,

A
b
s
t
r
a
c
t
C
o
l
l
e
c
t
i
o
n
,

A
b
s
t
r
a
c
t
L
i
s
t
,

A
b
s
t
r
a
c
t
M
a
p
,

A
b
s
t
r
a
c
t
S
e
t
,

A
r
r
a
y
L
i
s
t
,

A
r
r
a
y
s
,

C
o
l
l
e
c
t
i
o
n
s
,

D
a
t
e
,

E
v
e
n
t
O
b
j
e
c
t
,

H
a
s
h
M
a
p
,
H
a
s
h
S
e
t
,

S
t
a
c
k
,

V
e
c
t
o
r
,

C
o
l
l
e
c
t
i
o
n
,

I
t
e
r
a
t
o
r
,

L
i
s
t
,

L
i
s
t
I
t
e
r
a
t
o
r
,

M
a
p
,

S
e
t
I
n
t
e
r
o
p
e
r
a
t
io
n

w
it
h

e
x
is
t
in
g

c
o
d
e

n
a
t
i
v
e

m
e
t
h
o
d
s

u
s
i
n
g

J
a
v
a
S
c
r
i
p
t
// This is Java source
private native String
f
lipName
(
String
name) /*-{

// This is JavaScript source

var
r
e = /(
\
w
+
)
\
s
(
\
w
+
)/;
return name.replace(re, "$2, $1");
}-*/;

C
a
l
l

b
a
c
k

a
n
d

f
o
r
t
h

f
r
o
m

J
a
v
a

s
o
u
r
c
e

t
o

J
S

I
n
t
e
r
o
p

o
r

h
a
n
d
-
t
w
e
a
k
i
n
g

s
c
r
i
p
t
S
h
a
r
e

c
o
d
e

b
e
t
w
e
e
n

c
l
ie
n
t

a
n
d

s
e
r
v
e
r

J
a
v
a

s
o
u
r
c
e

(
s
o
r
t

o
f
)

o
n

b
o
t
h

s
i
d
e
s

o
f

t
h
e
w
i
r
e

I
f

y
o
u

r
e

c
a
r
e
f
u
l
,
y
o
u

c
a
n

s
h
a
r
e

s
o
u
r
c
e
c
o
d
e

t
h
a
t

r
i
g
h
t
f
u
l
l
y

s
h
o
u
l
d

b
e

i
n

b
o
t
h
p
l
a
c
e
s

(
e
.g
.
v
a
l
i
d
a
t
i
o
n

c
o
d
e
)

M
i
g
r
a
t
e

l
o
g
i
c

f
r
o
m

c
l
i
e
n
t
-
t
o
-
s
e
r
v
e
r
w
i
t
h
o
u
t

t
o
t
a
l

r
e
w
r
i
t
e
Getting Started Guide
Widget Gallery
Developer Guide
Class Reference
W
e

r
e
c
o
v
e
r
i
n
g
so
m
e
su
b
sta
n
ti
v
e
g
r
o
u
n
d
h
e
r
e

N
o
t
i
c
e
w
h
a
t
w
e
h
a
v
e
n

t
t
a
l
k
e
d
a
b
o
u
t



S
o
-a
n
d
-so
sa
i
d
o
n
h
i
s
b
l
o
g

t
h
i
s w
a
s a
re
a
l
l
y
n
e
a
t
w
a
y
t
o
b
u
i
l
d
A
j
a
x
a
p
p
s


"T
h
e
R
i
g
h
t
W
a
y
t
o
b
u
i
l
d
A
j
a
x
a
p
p
s i
s t
o
u
se
o
n
l
y
D
O
M
L
e
v
e
l
1
-c
o
m
p
l
i
a
n
t
A
P
Is


(E
v
e
n
i
f i
t

s
w
o
rse
fo
r t
h
e
u
se
r?
)


B
u
t
I l
o
v
e
L
i
sp
!


(
o
r
R
u
b
y
, P
y
th
o
n
, J
a
v
a
S
c
r
ip
t, C
+
+
, o
r
w
h
a
te
v
e
r
)
F
a
s
t

i
s

b
e
t
t
e
r

t
h
a
n

s
l
o
w

M
a
y
b
e
w
e

v
e
c
o
v
e
re
d
t
h
i
s o
n
e
a
l
re
a
d
y
a
ft
e
r a
l
l
:
-)

U
p
c
o
m
i
n
g
G
W
T
1
.5
b
u
i
l
d
s o
n
t
h
e
sp
e
e
d
i
m
p
ro
v
e
m
e
n
t
s i
n
G
W
T
1
.4
b
u
t
g
o
e
s fu
rt
h
e
r st
i
l
l

O
u
r sp
e
e
d
g
o
a
l
:
p
ro
d
u
c
e
fa
st
e
r a
p
p
s t
h
a
n
a
n
y
o
n
e
c
o
u
l
d
w
ri
t
e
b
y
h
a
n
d

I
n
a
ll o
u
r
la
te
s
t te
s
ts
, w
e

r
e
th
e
r
e

Y
e
t w
e
c
a
n
s
till th
in
k
o
f
a
lo
t m
o
r
e
o
p
tim
iz
a
tio
n
s

W
e
a
ls
o
w
a
n
t to
o
p
tim
iz
e
a
n
d
e
n
h
a
n
c
e

t
h
e
G
W
T
w
id
g
e
ts
T
h
in
g
s

w
e

d
id
n

t

c
o
v
e
r

U
n
i
t

t
e
s
t
i
n
g

J
a
v
a
d
o
c

R
P
C

B
e
n
c
h
m
a
r
k
i
n
g

D
e
s
i
g
n

p
a
t
t
e
r
n
s

T
r
a
i
n
i
n
g

(
a
s

i
n
,
y
o
u

d
o
n

t

n
e
e
d

m
u
c
h
)

T
o
o
l
s
!
R
e
f
e
r
e
n
c
e

c
h
e
c
k
s

G
W
T
i
s o
p
e
n
so
u
rc
e
;
c
o
d
e
/
d
e
si
g
n
i
s sc
ru
t
i
n
i
z
e
d

N
o
c
h
e
c
k
-i
n
s w
i
t
h
o
u
t
p
u
b
l
i
c
c
o
d
e
re
v
i
e
w

5
0
0
+
m
e
m
b
e
rs o
n
t
h
e
C
o
n
t
ri
b
u
t
o
rs F
o
ru
m

1
0
,0
0
0
+
m
e
m
b
e
rs o
n
t
h
e
D
e
v
e
l
o
p
e
r F
o
ru
m

M
i
l
l
i
o
n
s o
f d
o
w
n
l
o
a
d
s

H
a
p
p
y
d
e
v
e
l
o
p
e
rs (se
e
G
W
T

B
l
o
g

a
n
d
G
ro
u
p
s)

M
o
st
i
m
p
o
rt
a
n
t
l
y
, h
a
p
p
y
e
n
d
u
se
rs

I
f
e
n
d
u
s
e
r
s
d
o
n

t
k
n
o
w
a
n
a
p
p
is
G
W
T
-
b
a
s
e
d
,
b
u
t th
e
y


j
u
s
t r
e
a
lly
lik
e
it

,
th
e
n
w
e
h
a
v
e
s
u
c
c
e
e
d
e
d
T
h
e

m
o
s
t

i
m
p
o
r
t
a
n
t

m
e
t
r
i
c

H
a
p
p
y
e
n
d
u
se
rs

If e
n
d
u
se
rs d
o
n

t
k
n
o
w
a
n
a
p
p
i
s G
W
T
-b
a
se
d
,
b
u
t
t
h
e
y


j
u
st
re
a
l
l
y
l
i
k
e
i
t

,
t
h
e
n
w
e
h
a
v
e
su
c
c
e
e
d
e
d
F
r
o
m

t
h
e

r
e
a
l

w
o
r
l
d
And we've seen great success, with
th
ousands of
users in Fortune 500 companies around th
e world.
And opposite th
e Web 2.0 / Enterprise 2.0 concern,
users actually pay for our app!
A
l
e
x

M
o
f
f
a
t
E
n
g
i
n
e
e
r
i
n
g

M
a
n
a
g
e
r
,

L
o
m
b
a
r
d
i