SlideShare une entreprise Scribd logo
1  sur  98
Télécharger pour lire hors ligne
p.g.taboada | pgt technology scouting GmbH
Google Web Toolkit
Architecture
Best Practices
Donnerstag, 25. April 13
Donnerstag, 25. April 13
http://gwtreferencelist.appspot.com
Donnerstag, 25. April 13
‣GWT Development
‣Basics
‣Structuring the UI
‣Communication
‣Scaling
Donnerstag, 25. April 13
Shift
happened
Java development,
JS deployment,
Async,
RPC,
RIA/ single page,
...
Donnerstag, 25. April 13
TextBox t = new TextBox();
RootPanel.get().add(t);
Donnerstag, 25. April 13
Browser Server
user action
full html response
full html response
full html response
user action
user action
Donnerstag, 25. April 13
Browser Server
event
first request
full html response
data
data request
data
data request
event
event
event
Donnerstag, 25. April 13
low level, generic toolkit
Donnerstag, 25. April 13
let‘s build big things
Donnerstag, 25. April 13
TextBox t0 = new TextBox();
TextBox t1 = new TextBox();
TextBox t2 = new TextBox();
TextBox t3 = new TextBox();
TextBox t4 = new TextBox();
VerticalPanel...
SplitPanel...
ScrollPanel
RootPanel.get().add(mainPanel);
Donnerstag, 25. April 13
Run, Forrest. Run!
Donnerstag, 25. April 13
Hoppla
Donnerstag, 25. April 13
framework wizardry needed
Donnerstag, 25. April 13
‣GWT Development
‣Basics
‣Structuring the UI
‣Communication
‣Scaling
Donnerstag, 25. April 13
BE CAREFUL. GWT DEVELOPMENT
IS COMPLICATED HOT NEW STUFF.
Donnerstag, 25. April 13
WELL, IT‘S NOT NEW...
Donnerstag, 25. April 13
Jan 2000 Jan 2005
XHTML 1.0
Jan 2000
HTML 4.0.1
Dez 1999
CSS 2
Mai 1998
HTML 4.0 update
April 1998
XHTML 1.1
Mai 2001
HTML 2.0
November 1995
HTML 4.0
Dezember 1997
Java EE 1.2
Dez 1999
JDK 1.1
Feb 1997
Internet Explorer 6
Aug 2001
JDK 1.0
Jan 1996
CSS 2.1
Feb 2004 – Jun 2011
CSS level 2 revision 1, often referred t
errors in CSS 2, removes poorly suppo
interoperable features and adds alread
browser extensions to the specification
with the W3C Process for standardizi
specifications, CSS 2.1 went back and
Working Draft status and Candidate R
status for many years.
J2SE 1.2
Dez 1998
J2SE 1.3
Mai 2000
CSS 1
Dez 1996
HTML 3.2
Januar 1997
Donnerstag, 25. April 13
nothing new here
Donnerstag, 25. April 13
nothing new here too
Jan 2007
Donnerstag, 25. April 13
how can I avoid this?
Donnerstag, 25. April 13
don‘t public instance the singletons
Donnerstag, 25. April 13
event bus please
http://jarrettws.blogspot.de/2010/05/public-transport.html
Donnerstag, 25. April 13
eventbus.fireEvent(
NotificationEvent.info(
"Daten wurden erfolgreich gespeichert"
)
);
Donnerstag, 25. April 13
USE MVP!
You will get
used to it
Donnerstag, 25. April 13
presenter
model
clientFactory
eventBus
panel
view
Donnerstag, 25. April 13
presenter
view interface
presenter interface
model
desktop view
tablet view mock view
Donnerstag, 25. April 13
public interface LoginView extends View {
void setPresenter(LoginView.Presenter currentPresenter);
void presetEmailFieldWith(String email);
void doShowApplicationMetadata(AppData params);
public interface Presenter extends LemniscusPresenter {
void userLoginWith(String username, String password);
void userDidAskForRegistrationPlace();
void userWantsToChangePassword(
int verificationCode, String userEmail, String
newPasswordToUse);
void userRequestedVerificationCodeForPasswordChange(String email);
}
}
Donnerstag, 25. April 13
public interface LoginView extends View {
void setPresenter(LoginView.Presenter currentP
void presetEmailFieldWith(String email);
void doShowApplicationMetadata(AppData params)
public interface Presenter extends LemniscusPr
void userLoginWith(String username, String
void userDidAskForRegistrationPlace();
void userWantsToChangePassword(
int verificationCode, String userEmail,
MyDesktopViewImpl extends Composite implements LoginView
Donnerstag, 25. April 13
public interface LoginView extends View {
void setPresenter(LoginView.Presenter currentPresenter)
void presetEmailFieldWith(String email);
void doShowApplicationMetadata(AppData params);
public interface Presenter extends LemniscusPresenter {
void userLoginWith(String username, String password
void userDidAskForRegistrationPlace();
void userWantsToChangePassword(
int verificationCode, String userEmail, String ne
void userRequestedVerificationCodeForPasswordChange
}
}
MyLoginPresenter extends AA... implements LoginView.Presenter
Donnerstag, 25. April 13
BUT ON IE 6 IT IS SO SLOW!
Donnerstag, 25. April 13
BUT ON IE 7 IT IS SO SLOW!
Donnerstag, 25. April 13
BUT ON IE 8 IT IS SO SLOW!
Donnerstag, 25. April 13
BUT ON IE 9 IT IS SO SLOW!
Donnerstag, 25. April 13
too many widgets ain‘t good
Donnerstag, 25. April 13
CREATE CUSTOM WIDGETS
don‘t extend FlextTable
don‘t extendVerticalPanel
don‘t extend SimplePanel
CREATE CUSTOM EVENTS
Donnerstag, 25. April 13
if you can, do it in CSS
@-webkit-keyframes redPulse
{
from
{
box-shadow: 0px 0px 2px #ff0033;
}
50%
{
box-shadow: 0px 0px 10px #ff0033;
}
to
{
box-shadow: 0px 0px 2px #ff0033;
}
}
Donnerstag, 25. April 13
use CSS layout
<g:LayoutPanel styleName="{B.style.mainContent}">
<g:layer left="0" right="340px" top="0" height="50%">
<g:SimpleLayoutPanel styleName="{B.style.mainWidget}" addStyleNa
<ux:DashboardTermineDataGrid ui:field="terminetable" styleName
</g:SimpleLayoutPanel>
</g:layer>
<g:layer right="0" width="340px" top="0" height="50%">
<g:SimpleLayoutPanel styleName="{B.style.mainWidget}" addStyleNa
<ux:KWStatsDataGrid ui:field="statstable" styleName="{B.style.
</g:SimpleLayoutPanel>
</g:layer>
<g:layer right="0" left="0" bottom="0" height="50%">
<g:SimpleLayoutPanel styleName="{B.style.mainWidget}" addStyleNa
<ux:WartelisteDataGrid ui:field="wartelistetable" styleName="{
</g:SimpleLayoutPanel>
</g:layer>
</g:LayoutPanel>
Donnerstag, 25. April 13
Ray Ryan - lessons learned
Donnerstag, 25. April 13
‣GWT Development
‣Basics
‣Structuring the UI
‣Communication
‣Scaling
Donnerstag, 25. April 13
„just do it“ pattern
„View A“
„View B“
mainPanel.setWiget(
aWidget );
mainPanel.setWiget(
bWidget );
some action
Donnerstag, 25. April 13
hard to maintain
Donnerstag, 25. April 13
history
management
from day one!
back button and
refresh as a
feature (not a
catastrophe)
Donnerstag, 25. April 13
keep it
stupid
simple
• use PLACES framework
for main level navigation
• if you really need to, nest
activities for a second
level. try not to.
• use dialogs for user input,
showing data. dialogs are
easily reused.
Donnerstag, 25. April 13
Once upon a time, a
good designer does
good a good looking
design...
‣ he will be using photoshop
or dreamweaver
‣ he will not use the
software
‣ he will not build the
software
‣ he will not maintain the
software
Donnerstag, 25. April 13
Donnerstag, 25. April 13
top menue bound to places framework
Donnerstag, 25. April 13
switching between places with fade in and out
Donnerstag, 25. April 13
teach user to wait until application is ready again
Donnerstag, 25. April 13
gives us enough time to load the required content
300ms out 500ms in
Donnerstag, 25. April 13
Komponents
inside an
„activity“ fire
non public,
custom events
Donnerstag, 25. April 13
datepicker
sends KW
selected event
Donnerstag, 25. April 13
presenter may
goto itself, view
may be cached
Donnerstag, 25. April 13
STATELESS
VIEW
URL contains
EVERYTHING
needed to
rebuild view
user hits
reload
GWT apps
starts, activity
gets fired
presenter
loads data
from server
view is back
again
Donnerstag, 25. April 13
some actions don‘t require PLACE navigation at all
Donnerstag, 25. April 13
use POPUPS to stay ABOVE navigation
Donnerstag, 25. April 13
let POPUPS/
DIALOGS move
slowly into view
pin POPUPS to
one side of the
window
Donnerstag, 25. April 13
let POPUPS/
DIALOGS move
slowly into view
pin POPUPS to
one side of the
window
Donnerstag, 25. April 13
Don‘t move your
user away from his
„PLACE“ unless
you have to.
Search DIALOG
slides in from right
side, stays on TOP
Donnerstag, 25. April 13
Navigation must not hurt
• The application shown uses only 3 levels of
navigation, DOES NOT NEED MORE
• PLACES used for bookmarkable entry points/
back button navigation consistency
• Activities should be STATELESS, to survive page
reloads
• Learn from OTHERS
Donnerstag, 25. April 13
BEFOREYOU ADD THE
LOGO TO THE TOP
HOW MANY PIXELS DO
YOUR USERS HAVE? the designer or
marketing guy
using photoshop is
probably sitting in
front of a 27“
apple cinema
display
Donnerstag, 25. April 13
‣GWT Development
‣Basics
‣Structuring the UI
‣Communication
‣Scaling
Donnerstag, 25. April 13
Honor the A in AJAX
‣ Javascript does not block
Get over it
‣ Latency is not a myth
‣ Results must not arrive in the call
order
Donnerstag, 25. April 13
MARSHALLING / UNMARSHALLING
IN JAVASCRIPT IS SLOW
Donnerstag, 25. April 13
BUILDING A GENERIC FRAMEWORK FOR
MARSHALLING/ UNSMARSHALLING DATA SUCKS
Donnerstag, 25. April 13
DON‘T BINDYOU NEXT 3YEARS OF WORK
AGAINST SOME COMMUNICATION PROTOCOLL
Donnerstag, 25. April 13
LOADING TOO MUCH DATA WILL ALWAYS HURT
Donnerstag, 25. April 13
GWT-RPC
is a good
solution if
handled
with care
SomeResult someMethodName(SomeParameter spo)
GWT-RPC
binds many
methods
into one
interface
Interface
Versioning
is a
monstrous
thing
Donnerstag, 25. April 13
SomeResult someMethodName(SomeParameter spo)
the method names bind the requests to the result
typesafety all the way
Donnerstag, 25. April 13
USING GENERICS FOR TYPESAFETY, GET RID OF
METHODS AND INTERFACES
Donnerstag, 25. April 13
<A extends Action<R>, R extends Result> R execute(A action);
now we just one interface with one method
typesafety all the way
Donnerstag, 25. April 13
command
pattern
GOF Pattern
commonly used in
Rich Clients
Donnerstag, 25. April 13
someAction
someResult
someActionHandler
Donnerstag, 25. April 13
someAction
someResult
someActionHandler
POJOS
Donnerstag, 25. April 13
someAction
someResult
someActionHandler
multiple
versions
someActionV2
someActionHandlerV2
Donnerstag, 25. April 13
someAction
someResult
someActionHandler
multiple
versions
someActionV2
someActionHandlerV2
someResultV2
Donnerstag, 25. April 13
someAction
someResult
someActionHandler
GWT-RPC
client server
batching
caching
security
caching
exception translation
security
GWT client
Donnerstag, 25. April 13
someAction
someResult
someActionHandler
RMI / HTTPInvoker
client server
batching
caching
security
caching
exception translation
security
Java client
Donnerstag, 25. April 13
someAction
someResult
someActionHandler
JSON-servlet
client server
batching
caching
security
caching
exception translation
security
Mobile client
Donnerstag, 25. April 13
batchAction
someAction1
batchActionHandler
someAction2
someAction3
batchResult
someResult1
someResult2
someResult3
client server
batching can
be manual or
automatic
server executes
actions in given order
Donnerstag, 25. April 13
BATCH EXECUTION ALLOWS FOR FINE GRAINED
COMMANDS AND REUSE
Donnerstag, 25. April 13
toggleTerminMetadata
reloadDashboardTermine
BooleanResult
DataListResult<Termin>
Donnerstag, 25. April 13
toggleTerminMetadata
reloadTermin
BooleanResult
DataResult<Termin>
Donnerstag, 25. April 13
toggleTerminMetadata
loadMonthStats
BooleanResult
DataResult<MonthStats>
loadMonthTermine DataListResult<Termin>
Donnerstag, 25. April 13
‣GWT Development
‣Basics
‣Structuring the UI
‣Communication
‣Scaling
Donnerstag, 25. April 13
• Every client brings his own CPU power
• The client does the page rendering
• GWT provides different ways to reduce number
of requests even more
• The server must „only“ authenticate the user
and provide the data, perform the actions
requested by the client
GWT scaling is easy...
Donnerstag, 25. April 13
WHAT CAN POSSIBLY GO WRONG?
Donnerstag, 25. April 13
LETS TALK HIGH TRAFFIC...
HIGH TRAFFIC IS WHEN ONE SERVER IS NOT ENOUGH
Donnerstag, 25. April 13
• Bandwith issues
• Connection pool bottlenecks
• Thread pool bottlenecks
• CPU bottlenecks caused by reflection API calls
• High JVM garbage collection CPU usage
HIGH TRAFFIC
PROBLEMS
Donnerstag, 25. April 13
NOT REALLY GWT PROBLEMS,
BUT WHAT CAN WE DO?
Donnerstag, 25. April 13
TX TX
TX TX
TX
TX TX
TX
TX
avoid „tx
collisions“
Donnerstag, 25. April 13
TX TX TX TX
TX
TX
TX
TX TX
TX
TX
TX
TX
TX
TX
load small
portions of
data, do it
often
Donnerstag, 25. April 13
Donnerstag, 25. April 13
IMPLEMENT REAL LOAD BALANCING
EACH REQUEST GOES TO THE NEXT AVAILABLE SERVER
Donnerstag, 25. April 13
• Don‘t stick a session to a server.
Why send a user over and over again to a
possible overloaded server?
• Don‘t store anything on the HTTP session. Let
the load balancer balance the load.
• Session replication is expensive and does not
scale well
SCALING HOW-TO
Donnerstag, 25. April 13
Webserver
Webserver
LB Webserver
Webserver
Webserver
Session Cache
STATELESS WEB
Webserver
Donnerstag, 25. April 13
Session Cache
Session state should not change,
just expire
Session state could contain user
id, client id, session id, user roles
If session cache becomes
bottleneck, use distributed
cache, eg. memcached
Session Cache
Session Cache
Donnerstag, 25. April 13
Thanks!
Donnerstag, 25. April 13

Contenu connexe

Similaire à GWT architecture best practices and lessons learned

Intro to axure
Intro to axureIntro to axure
Intro to axureNathan Gao
 
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Cyrille Le Clerc
 
Annotated controllers with Spring MVC 2.5
Annotated controllers with Spring MVC 2.5Annotated controllers with Spring MVC 2.5
Annotated controllers with Spring MVC 2.5benfante
 
Complex Architectures in Ember
Complex Architectures in EmberComplex Architectures in Ember
Complex Architectures in EmberMatthew Beale
 
2013 jsdc webworker
2013 jsdc webworker2013 jsdc webworker
2013 jsdc webworkerBingo Yang
 
HTML5 for mobile development
HTML5 for mobile developmentHTML5 for mobile development
HTML5 for mobile developmentCarlos Justiniano
 
Unit and functional testing with Siesta
Unit and functional testing with SiestaUnit and functional testing with Siesta
Unit and functional testing with SiestaGrgur Grisogono
 
Testing iOS Apps
Testing iOS AppsTesting iOS Apps
Testing iOS AppsC4Media
 
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating DrupalMaking the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating DrupalAcquia
 
FITC 2013 - The Technical Learning Curve
FITC 2013 - The Technical Learning CurveFITC 2013 - The Technical Learning Curve
FITC 2013 - The Technical Learning CurveLittle Miss Robot
 
იოსებ ძმანაშვილი Node.js
იოსებ ძმანაშვილი   Node.jsიოსებ ძმანაშვილი   Node.js
იოსებ ძმანაშვილი Node.jsunihack
 
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With DeadlinesJBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With DeadlinesTikal Knowledge
 
Techniques For A Modern Web UI (With Notes)
Techniques For A Modern Web UI (With Notes)Techniques For A Modern Web UI (With Notes)
Techniques For A Modern Web UI (With Notes)patrick.t.joyce
 
Google analytics
Google analyticsGoogle analytics
Google analyticsLo Penny
 
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...Iakiv Kramarenko
 
Green Shoots in the Brownest Field: Being a Startup in Government
Green Shoots in the Brownest Field: Being a Startup in GovernmentGreen Shoots in the Brownest Field: Being a Startup in Government
Green Shoots in the Brownest Field: Being a Startup in GovernmentC4Media
 
Maintainable JavaScript 2012
Maintainable JavaScript 2012Maintainable JavaScript 2012
Maintainable JavaScript 2012Nicholas Zakas
 

Similaire à GWT architecture best practices and lessons learned (20)

Intro to axure
Intro to axureIntro to axure
Intro to axure
 
F# And Silverlight
F# And SilverlightF# And Silverlight
F# And Silverlight
 
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
 
Annotated controllers with Spring MVC 2.5
Annotated controllers with Spring MVC 2.5Annotated controllers with Spring MVC 2.5
Annotated controllers with Spring MVC 2.5
 
A false digital alibi on mac os x
A false digital alibi on mac os xA false digital alibi on mac os x
A false digital alibi on mac os x
 
Complex Architectures in Ember
Complex Architectures in EmberComplex Architectures in Ember
Complex Architectures in Ember
 
2013 jsdc webworker
2013 jsdc webworker2013 jsdc webworker
2013 jsdc webworker
 
Android best practices
Android best practicesAndroid best practices
Android best practices
 
HTML5 for mobile development
HTML5 for mobile developmentHTML5 for mobile development
HTML5 for mobile development
 
Unit and functional testing with Siesta
Unit and functional testing with SiestaUnit and functional testing with Siesta
Unit and functional testing with Siesta
 
Testing iOS Apps
Testing iOS AppsTesting iOS Apps
Testing iOS Apps
 
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating DrupalMaking the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
Making the Switch, Part 1: Top 5 Things to Consider When Evaluating Drupal
 
FITC 2013 - The Technical Learning Curve
FITC 2013 - The Technical Learning CurveFITC 2013 - The Technical Learning Curve
FITC 2013 - The Technical Learning Curve
 
იოსებ ძმანაშვილი Node.js
იოსებ ძმანაშვილი   Node.jsიოსებ ძმანაშვილი   Node.js
იოსებ ძმანაშვილი Node.js
 
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With DeadlinesJBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
 
Techniques For A Modern Web UI (With Notes)
Techniques For A Modern Web UI (With Notes)Techniques For A Modern Web UI (With Notes)
Techniques For A Modern Web UI (With Notes)
 
Google analytics
Google analyticsGoogle analytics
Google analytics
 
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
Three Simple Chords of Alternative PageObjects and Hardcore of LoadableCompon...
 
Green Shoots in the Brownest Field: Being a Startup in Government
Green Shoots in the Brownest Field: Being a Startup in GovernmentGreen Shoots in the Brownest Field: Being a Startup in Government
Green Shoots in the Brownest Field: Being a Startup in Government
 
Maintainable JavaScript 2012
Maintainable JavaScript 2012Maintainable JavaScript 2012
Maintainable JavaScript 2012
 

Dernier

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 

Dernier (20)

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 

GWT architecture best practices and lessons learned