SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
Developer DayGoogle 2010
Monday, September 27, 2010
Developer DayGoogle 2010
Fred Sauer
Tokyo, September 28, 2010
Architecting GWT applications for
production at Google
Monday, September 27, 2010
Developer DayGoogle 2010
Answering two questions
• How does Google architect its web apps?
• How are GWT 2.1 and Spring Roo going to help me do the
same?
– com.google.gwt.app
– com.google.gwt.requestfactory
3
Monday, September 27, 2010
Developer DayGoogle 2010
If you like this talk, you’ll love…
Building on last year’s Best Practices for Architecting
http://code.google.com/events/io/2009/sessions/GoogleWebToolkitBestPractices.html
4
Model
Presenter
View
Monday, September 27, 2010
Developer DayGoogle 2010
Production Ready
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable
– Lots of users
– Lots of developers
• Bookmark friendly
• Crawlable
• Localized
6
Monday, September 27, 2010
Developer DayGoogle 2010
Isolation
• Well tested ✔
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized
7
Monday, September 27, 2010
Developer DayGoogle 2010
Instrumentation
• Well tested ✔
• Secure
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized
8
Monday, September 27, 2010
Developer DayGoogle 2010
Suspicion
• Well tested ✔
• Secure ✔
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized
9
Monday, September 27, 2010
Developer DayGoogle 2010
Discussed at Google I/O
• Well tested ✔
• Secure ✔
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized ✔
10
GWT's UI overhaul
http://bit.ly/io2010-gwt5
Monday, September 27, 2010
Developer DayGoogle 2010
Isolation
Monday, September 27, 2010
Developer DayGoogle 2010
MVP
12
Effective Testing
Daniel Danilatos…
http://bit.ly/io2010-gwt7
Model
Presenter
View
Monday, September 27, 2010
Developer DayGoogle 2010
MVP
12
Effective Testing
Daniel Danilatos…
http://bit.ly/io2010-gwt7
Model
Presenter
View
DTO
Monday, September 27, 2010
DTO
Presenter
View
DTO
Domain Obj
XHR
Developer DayGoogle 2010
Waaah, DTOs violate DRY*
13
*DRY = Do not RepeatYourself
Monday, September 27, 2010
DTO
!
Request Factory
Servlet
Presenter
View
DTO
Domain Obj
XHR
!
Developer DayGoogle 2010
Repetition via tools
14
Monday, September 27, 2010
RF
Servlet
JSON
Request
Factory
!
Presenter
View
Employee
Request
!
Employee
Record
!
Employee
Developer DayGoogle 2010
cRud (=Read)
15
Monday, September 27, 2010
RF
Servlet
JSON
Request
Factory
!
Presenter
View
Sync
Request
Employee
Record
!
Employee
Event Bus
Employee
Changed
!
Developer DayGoogle 2010
CrUD (=Create, Update, Delete)
16
Monday, September 27, 2010
DTO
!
Presenter
View
Developer DayGoogle 2010
Waaah, presenter is too much boilerplate
17
Monday, September 27, 2010
DTO
!
Presenter
View
Developer DayGoogle 2010
Waaah, presenter is too much boilerplate
17
Activity
!
Monday, September 27, 2010
Place Change Event
Request
Factory
!
Activity
Manager
Event Bus
start()
Activity
!showWidget()
XHR
Activity
!
onStop()
Developer DayGoogle 2010
Activity life cycle
18
Monday, September 27, 2010
Developer DayGoogle 2010
Activity in test
19
Mock RFMock AM
start()
Activity
!
showWidget()
Monday, September 27, 2010
Developer DayGoogle 2010
Isolated activity is crawlable activity
• Activity life cycle tied to history changes
• History changes tied to discrete URLs — bookmarkable
– http://example.com/#report:123456
• Add a bang and a headless server — crawlable
– http://example.com/#!report:123456
• http://code.google.com/web/ajaxcrawling/docs/getting-started.html
20
Monday, September 27, 2010
DTO
!
Presenter
View
Developer DayGoogle 2010
Waaah, too boring to test is too boring to write
21
Activity
!
Monday, September 27, 2010
DTO
!
Presenter
View
Developer DayGoogle 2010
Waaah, too boring to test is too boring to write
21
Activity
!
!Editor
Support
Monday, September 27, 2010
Developer DayGoogle 2010
Selections of EditView<EmployeeRecord>
22
private static final EditorSupport SUPPORT =
GWT.create(EditorSupport.class);
@UiField TextBox displayName;
@UiField TextBox userName;
public void setValue(EmployeeRecord value) {
this.record = value;
SUPPORT.setValue(this, value);
}
public boolean isChanged() {
return SUPPORT.isChanged(this);
}
Monday, September 27, 2010
Developer DayGoogle 2010
All isolation promises kept but one
• Well tested ✔
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
• Localized
23
Monday, September 27, 2010
JPA for real
Anywhere but GAE
Scalable enough
JPA--
No reference fields
(No joins)
Super portable
Super scalable
Developer DayGoogle 2010
Give me convenience or give me scale
24
Monday, September 27, 2010
Developer DayGoogle 2010
Instrumentation
Monday, September 27, 2010
Developer DayGoogle 2010
Your eyes on the browser
• Logging
• Stack traces
• User Actions
26
Monday, September 27, 2010
Developer DayGoogle 2010
Logging: phone home
• Client side logger with remote logging service
– http://code.google.com/p/gwt-log/ GWT *.*
– java.util.logging in GWT 2.1
• Accumulate logs client side
• Watch for request batches and ride along, or flush on timer
27
Monday, September 27, 2010
Developer DayGoogle 2010
Stack Traces
• Method level for free on most modern browsers
• Get it to the server
– HttpThrowableReporter to send JSON formatted via XHR
– In gwt-log, use RemoteLoggerService
• Re-symbolize obfuscated traces server side
– http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions
– Fair warning: that page is terse to the point of encryption
28
Monday, September 27, 2010
Developer DayGoogle 2010
Emulated Stack Traces
• For line-level traces
– and anything at all on less modern browsers
<set-property name="compiler.emulatedStack" value="true" />
<set-configuration-property
name="compiler.recordLineNumbers" value="true" />
<set-configuration-property
name="compiler.recordFileNames" value="true" />
• But your app is fatter and slower
29
Monday, September 27, 2010
Developer DayGoogle 2010
Emulated stack traces in production
<!-- gwt-log logging is `OFF` by default -->
<inherits name="com.allen_sauer.gwt.log.gwt-log-OFF" />
<!-- also compile your application at `INFO` level -->
<extend-property name="log_level" values="INFO"/>
Provide link to your users to enable logging:
http[s]://hostame:port/path/to/Module.html?log_level=INFO
30
Let your uses opt in (using gwt-log)
Monday, September 27, 2010
Developer DayGoogle 2010
User Actions
• Unique strings associated with each interesting UI element
– links, buttons
– maybe in ui.xml
• User gestures (clicks a link, say), User Action event posted
on Event Bus
– Time is noted
– RPCs queued in this event loop are attributed to this Action
• When all RPCs return, time is tallied, logs trickle to server
• Planned for GWT 2.1
31
Monday, September 27, 2010
Developer DayGoogle 2010
Suspicion
Monday, September 27, 2010
Developer DayGoogle 2010
Secure: guard against cross site scripting
attacks
• RemoteServiceServlet watching for X-GWT-Permutation
header for XSRF paranoia
– New in GWT 2.1
– Only XHR can set a header, and XHR is from your domain
• SafeHTML
– Debuts as open source in new web-based Wave FedOne client
– http://code.google.com/p/wave-protocol/
– Destined for GWT 2.<something>
33
Monday, September 27, 2010
Developer DayGoogle 2010
SafeHtml: because setHtml() isn’t
• If the user typed it, you must not render it as HTML
– prefer HasText#setText to HasHTML#setHTML
– prefer Element#setInnerText to Element#setInnerHTML
• SafeHtml interface promises its asString() produces
harmless HTML
• SafeHtmlBuilder and SimpleHtmlSanitizer
• for assembling untrusted strings into SafeHtml instances
• SafeHtml aware widgets that replace setHTML() with
setSafeHtml()
34
Monday, September 27, 2010
Developer DayGoogle 2010
Recap
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable
– Lots of users
– Lots of developers
• Bookmark friendly
• Crawlable
36
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested ✔
• Secure
• Monitored
– What’s broke
– What’s slow
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
37
• Be isolated
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested ✔
• Secure
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
38
• Be isolated
• Be instrumented
Monday, September 27, 2010
Developer DayGoogle 2010
“Production ready” means…
• Well tested ✔
• Secure ✔
• Monitored ✔
– What’s broke ✔
– What’s slow ✔
• Scalable ✔
– Lots of users ✔
– Lots of developers ✔
• Bookmark friendly ✔
• Crawlable ✔
39
• Be isolated
• Be instrumented
• Be suspicious
Monday, September 27, 2010
Model
Presenter
View
Developer DayGoogle 2010
Don’t work so hard
40
Monday, September 27, 2010
DTO
!
Presenter
View
Activity
!
!Editor
Support
Developer DayGoogle 2010
Don’t work so hard
40
Monday, September 27, 2010
Developer DayGoogle 2010
Monday, September 27, 2010

Weitere ähnliche Inhalte

Mehr von Google Developer Relations Team

Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)Google Developer Relations Team
 
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...Google Developer Relations Team
 
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)Google Developer Relations Team
 
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...Google Developer Relations Team
 
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...Google Developer Relations Team
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Relations Team
 
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)Google Developer Relations Team
 
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)Google Developer Relations Team
 
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...Google Developer Relations Team
 
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)Google Developer Relations Team
 

Mehr von Google Developer Relations Team (10)

Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
 
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...
Google Developer Day 2010 Japan: 「App Engine 開発者コミュニティ「appengine ja night」とフレ...
 
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)
Google Developer Day 2010 Japan: Google App Engine についての最新情報 (松尾貴史)
 
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...
Google Developer Day 2010 Japan: Google Chrome の Developer Tools (ミカイル ナガノフ, ...
 
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...
Google Developer Day 2010 Japan: Android や iPhone で活用する Maps API のモバイル端末向け新機能...
 
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
 
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
Google Developer Day 2010 Japan: Android でリアルタイムゲームを開発する方法: リベンジ (クリス プルエット)
 
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)
Google Developer Day 2010 Japan: クールな Android アプリを作るには (安生真, 山下盛史, 江川崇)
 
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...
Google Developer Day 2010 Japan: マーケットライセンシングを使って Android アプリケーションを守るには (トニー ...
 
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)
Google Developer Day 2010 Japan: 高性能な Android アプリを作るには (ティム ブレイ)
 

Kürzlich hochgeladen

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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
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
 
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
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
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
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 

Kürzlich hochgeladen (20)

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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
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...
 
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
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
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
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 

Google Developer Day 2010 Japan: 製品レベルの GWT アプリケーション - Google での設計手法 (フレッド ソオー)

  • 1. Developer DayGoogle 2010 Monday, September 27, 2010
  • 2. Developer DayGoogle 2010 Fred Sauer Tokyo, September 28, 2010 Architecting GWT applications for production at Google Monday, September 27, 2010
  • 3. Developer DayGoogle 2010 Answering two questions • How does Google architect its web apps? • How are GWT 2.1 and Spring Roo going to help me do the same? – com.google.gwt.app – com.google.gwt.requestfactory 3 Monday, September 27, 2010
  • 4. Developer DayGoogle 2010 If you like this talk, you’ll love… Building on last year’s Best Practices for Architecting http://code.google.com/events/io/2009/sessions/GoogleWebToolkitBestPractices.html 4 Model Presenter View Monday, September 27, 2010
  • 5. Developer DayGoogle 2010 Production Ready Monday, September 27, 2010
  • 6. Developer DayGoogle 2010 “Production ready” means… • Well tested • Secure • Monitored – What’s broke – What’s slow • Scalable – Lots of users – Lots of developers • Bookmark friendly • Crawlable • Localized 6 Monday, September 27, 2010
  • 7. Developer DayGoogle 2010 Isolation • Well tested ✔ • Secure • Monitored – What’s broke – What’s slow • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized 7 Monday, September 27, 2010
  • 8. Developer DayGoogle 2010 Instrumentation • Well tested ✔ • Secure • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized 8 Monday, September 27, 2010
  • 9. Developer DayGoogle 2010 Suspicion • Well tested ✔ • Secure ✔ • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized 9 Monday, September 27, 2010
  • 10. Developer DayGoogle 2010 Discussed at Google I/O • Well tested ✔ • Secure ✔ • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized ✔ 10 GWT's UI overhaul http://bit.ly/io2010-gwt5 Monday, September 27, 2010
  • 12. Developer DayGoogle 2010 MVP 12 Effective Testing Daniel Danilatos… http://bit.ly/io2010-gwt7 Model Presenter View Monday, September 27, 2010
  • 13. Developer DayGoogle 2010 MVP 12 Effective Testing Daniel Danilatos… http://bit.ly/io2010-gwt7 Model Presenter View DTO Monday, September 27, 2010
  • 14. DTO Presenter View DTO Domain Obj XHR Developer DayGoogle 2010 Waaah, DTOs violate DRY* 13 *DRY = Do not RepeatYourself Monday, September 27, 2010
  • 15. DTO ! Request Factory Servlet Presenter View DTO Domain Obj XHR ! Developer DayGoogle 2010 Repetition via tools 14 Monday, September 27, 2010
  • 18. DTO ! Presenter View Developer DayGoogle 2010 Waaah, presenter is too much boilerplate 17 Monday, September 27, 2010
  • 19. DTO ! Presenter View Developer DayGoogle 2010 Waaah, presenter is too much boilerplate 17 Activity ! Monday, September 27, 2010
  • 20. Place Change Event Request Factory ! Activity Manager Event Bus start() Activity !showWidget() XHR Activity ! onStop() Developer DayGoogle 2010 Activity life cycle 18 Monday, September 27, 2010
  • 21. Developer DayGoogle 2010 Activity in test 19 Mock RFMock AM start() Activity ! showWidget() Monday, September 27, 2010
  • 22. Developer DayGoogle 2010 Isolated activity is crawlable activity • Activity life cycle tied to history changes • History changes tied to discrete URLs — bookmarkable – http://example.com/#report:123456 • Add a bang and a headless server — crawlable – http://example.com/#!report:123456 • http://code.google.com/web/ajaxcrawling/docs/getting-started.html 20 Monday, September 27, 2010
  • 23. DTO ! Presenter View Developer DayGoogle 2010 Waaah, too boring to test is too boring to write 21 Activity ! Monday, September 27, 2010
  • 24. DTO ! Presenter View Developer DayGoogle 2010 Waaah, too boring to test is too boring to write 21 Activity ! !Editor Support Monday, September 27, 2010
  • 25. Developer DayGoogle 2010 Selections of EditView<EmployeeRecord> 22 private static final EditorSupport SUPPORT = GWT.create(EditorSupport.class); @UiField TextBox displayName; @UiField TextBox userName; public void setValue(EmployeeRecord value) { this.record = value; SUPPORT.setValue(this, value); } public boolean isChanged() { return SUPPORT.isChanged(this); } Monday, September 27, 2010
  • 26. Developer DayGoogle 2010 All isolation promises kept but one • Well tested ✔ • Secure • Monitored – What’s broke – What’s slow • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ • Localized 23 Monday, September 27, 2010
  • 27. JPA for real Anywhere but GAE Scalable enough JPA-- No reference fields (No joins) Super portable Super scalable Developer DayGoogle 2010 Give me convenience or give me scale 24 Monday, September 27, 2010
  • 29. Developer DayGoogle 2010 Your eyes on the browser • Logging • Stack traces • User Actions 26 Monday, September 27, 2010
  • 30. Developer DayGoogle 2010 Logging: phone home • Client side logger with remote logging service – http://code.google.com/p/gwt-log/ GWT *.* – java.util.logging in GWT 2.1 • Accumulate logs client side • Watch for request batches and ride along, or flush on timer 27 Monday, September 27, 2010
  • 31. Developer DayGoogle 2010 Stack Traces • Method level for free on most modern browsers • Get it to the server – HttpThrowableReporter to send JSON formatted via XHR – In gwt-log, use RemoteLoggerService • Re-symbolize obfuscated traces server side – http://code.google.com/p/google-web-toolkit/wiki/WebModeExceptions – Fair warning: that page is terse to the point of encryption 28 Monday, September 27, 2010
  • 32. Developer DayGoogle 2010 Emulated Stack Traces • For line-level traces – and anything at all on less modern browsers <set-property name="compiler.emulatedStack" value="true" /> <set-configuration-property name="compiler.recordLineNumbers" value="true" /> <set-configuration-property name="compiler.recordFileNames" value="true" /> • But your app is fatter and slower 29 Monday, September 27, 2010
  • 33. Developer DayGoogle 2010 Emulated stack traces in production <!-- gwt-log logging is `OFF` by default --> <inherits name="com.allen_sauer.gwt.log.gwt-log-OFF" /> <!-- also compile your application at `INFO` level --> <extend-property name="log_level" values="INFO"/> Provide link to your users to enable logging: http[s]://hostame:port/path/to/Module.html?log_level=INFO 30 Let your uses opt in (using gwt-log) Monday, September 27, 2010
  • 34. Developer DayGoogle 2010 User Actions • Unique strings associated with each interesting UI element – links, buttons – maybe in ui.xml • User gestures (clicks a link, say), User Action event posted on Event Bus – Time is noted – RPCs queued in this event loop are attributed to this Action • When all RPCs return, time is tallied, logs trickle to server • Planned for GWT 2.1 31 Monday, September 27, 2010
  • 36. Developer DayGoogle 2010 Secure: guard against cross site scripting attacks • RemoteServiceServlet watching for X-GWT-Permutation header for XSRF paranoia – New in GWT 2.1 – Only XHR can set a header, and XHR is from your domain • SafeHTML – Debuts as open source in new web-based Wave FedOne client – http://code.google.com/p/wave-protocol/ – Destined for GWT 2.<something> 33 Monday, September 27, 2010
  • 37. Developer DayGoogle 2010 SafeHtml: because setHtml() isn’t • If the user typed it, you must not render it as HTML – prefer HasText#setText to HasHTML#setHTML – prefer Element#setInnerText to Element#setInnerHTML • SafeHtml interface promises its asString() produces harmless HTML • SafeHtmlBuilder and SimpleHtmlSanitizer • for assembling untrusted strings into SafeHtml instances • SafeHtml aware widgets that replace setHTML() with setSafeHtml() 34 Monday, September 27, 2010
  • 39. Developer DayGoogle 2010 “Production ready” means… • Well tested • Secure • Monitored – What’s broke – What’s slow • Scalable – Lots of users – Lots of developers • Bookmark friendly • Crawlable 36 Monday, September 27, 2010
  • 40. Developer DayGoogle 2010 “Production ready” means… • Well tested ✔ • Secure • Monitored – What’s broke – What’s slow • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ 37 • Be isolated Monday, September 27, 2010
  • 41. Developer DayGoogle 2010 “Production ready” means… • Well tested ✔ • Secure • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ 38 • Be isolated • Be instrumented Monday, September 27, 2010
  • 42. Developer DayGoogle 2010 “Production ready” means… • Well tested ✔ • Secure ✔ • Monitored ✔ – What’s broke ✔ – What’s slow ✔ • Scalable ✔ – Lots of users ✔ – Lots of developers ✔ • Bookmark friendly ✔ • Crawlable ✔ 39 • Be isolated • Be instrumented • Be suspicious Monday, September 27, 2010
  • 43. Model Presenter View Developer DayGoogle 2010 Don’t work so hard 40 Monday, September 27, 2010
  • 45. Developer DayGoogle 2010 Monday, September 27, 2010