UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
2011 June - Singapore GTUG presentation. App Engine program update + intro to Go
1. GAE Program Update
Ikai Lan - @ikai
Singapore GTUG
June 12, 2011
Monday, June 13, 2011
2. About the speaker
• Developer Relations at Google based out
of San Francisco, CA
• Software Engineer at heart
• Singapore, Kuala Lumpur and Taipei on this
trip
• Twitter: @ikai
Monday, June 13, 2011
3. Agenda
• What is Google App Engine?
• What’s new in App Engine?
• What’s coming in App Engine?
• Go on App Engine
Monday, June 13, 2011
4. What is
cloud
computing?
3
Monday, June 13, 2011
5. SaaS
APaaS
IaaS
Source: Gartner AADI Summit Dec 2009
Monday, June 13, 2011
6. SaaS
APaaS
IaaS
Source: Gartner AADI Summit Dec 2009
Monday, June 13, 2011
7. SaaS
APaaS
IaaS
Source: Gartner AADI Summit Dec 2009
Monday, June 13, 2011
8. SaaS
APaaS
IaaS
Source: Gartner AADI Summit Dec 2009
Monday, June 13, 2011
9. • Easy to build
• Easy to manage
• Easy to scale
Monday, June 13, 2011
16. (We’ll talk
about this guy
in a bit)
The Go Gopher
Monday, June 13, 2011
17. Core APIs
Memcache Datastore URL Fetch
Mail XMPP Task Queue
Images Blobstore User Service
Monday, June 13, 2011
18. Two+ years in review
Apr 2008 Python launch
May 2008 Memcache, Images API
Jul 2008 Logs export
Aug 2008 Batch write/delete
Oct 2008 HTTPS support
Dec 2008 Status dashboard, quota details
Feb 2009 Billing, larger files
Apr 2009 Java launch, DB import, cron support, SDC
May 2009 Key-only queries
Jun 2009 Task queues
Aug 2009 Kindless queries
Sep 2009 XMPP
Oct 2009 Incoming email
Dec 2009 Blobstore
Feb 2010 Datastore cursors, Appstats, Async UrlFetch
Monday, June 13, 2011
19. Two+ years in review
Mar 2010 Read policies, IPv6
May 2010 OpenID, OAuth, Bulkloader
Jun 2010 Python Precompilation, raised Task Queue limits
Aug 2010 Multitenancy
Oct 2010 Datastore Admin, query improvements
Dec 2010 Always on, Channel API, Task queue out of labs
Jan 2011 High Replication Datastore, datastore copy
Feb 2011 XMPP Presence, programmatic Task Queue deletions
Mar 2011 Files API, Prospective Search, Testbed API
May 2011 Backends, Pull Queues, massive bugfix release
Monday, June 13, 2011
20. App Engine
Roadmap
http://code.google.com/appengine/docs/roadmap.html
• App Engine out of Preview
• SSL access on custom domains
• Full-text search over Datastore
• Support for Python 2.7
• Support for running MapReduce jobs across App Engine datasets
• Bulk Datastore Import and Export tool
• Improved monitoring and alerting of application serving
• Logging system improvements to remove limits on size and storage
• Integration with Google Storage for Developers
Monday, June 13, 2011
21. High Replication
• Strongly consistent, multi-datastore, multi-
data center serving solution
• Write once, have your data be available in a
highly consistent manner
• No data loss, no datastore outages
Monday, June 13, 2011
22. Leaving preview ...
• Pricing changes towards a sustainable
model
• Guarantee that Google is investing in long
term future of App Engine
• Premium support available
Monday, June 13, 2011
23. Go on App Engine
• Go with most features intact on App Engine
• Goroutines
• Execution speed!
Monday, June 13, 2011
24. Why Go?
• Fast, modern language
• Strongly typed, very flexible interfaces
• Functions as first class objects
• Ridiculously fast compilation times
• Concurrency baked in
• Tooling
Monday, June 13, 2011
25. Fast, modern languages
• Standard library: JSON, websockets, web
server; more
• Garbage collection
• Multiple return values
• Unicode
Monday, June 13, 2011
26. Strongly typed
• ... but feels like a dynamic languages
• // Combo statement - We can infer type here, so no
Java style type declaration redundancy
s := “This is a String”
Monday, June 13, 2011
27. Flexible interfaces
// This is an interface declaration
type myInterface interface {
set(i int)
}
// This is a Type declaration. Note that it is a type, not a class
type myType struct {
i int
}
// This is how we define a function where myType is a receiver
// With an instance of myType we can call myType.set(123)
func (p *myType) set(i int) {
p.i = i
}
// Because myType defines a function with the signature set(int i) method,
// we can use it anywhere myInterface is accepted!
func setToThousand(x myInterface) {
myInterface.set(1000)
}
Monday, June 13, 2011
28. First class functions
package main
import "fmt"
// Make a function that returns a new function
func makeAdd(increment int) (counter func(int) int) {
return func(v int) int {
return v + increment;
}
}
func main() {
fmt.Printf("value of makeAdd(100)(1) is %vn", makeAdd(100)(1));
fmt.Printf("value of makeAdd(200)(2) is %vn", makeAdd(200)(2));
}
// Outputs:
// value of makeAdd(100)(1) is 101
// value of makeAdd(200)(2) is 202
Monday, June 13, 2011
29. Concurrency baked in
• goroutines - prefix a go in front of a
method and it will run concurrently! Similar
to appending & in *nix systems
• channels - blocking or buffered queues for
cross process communication
Monday, June 13, 2011
30. Goroutines and
package main
Channels
import (
"fmt"
"time"
)
func doLotsOfWork(until int, ch chan int) {
c := 0
for i := 0; i < until; i++ {
c += i
time.Sleep(1000)
}
ch <- c
}
func main() {
ch := make(chan int)
// First the work off into the background
go doLotsOfWork(5, ch)
// Do more work here while we wait for this process to complete
// Block until doLotsOfWork sends data back on this channel
i := <- ch
fmt.Printf("Final value: %vn", i)
}
Monday, June 13, 2011
31. It runs on App Engine!
• Currently requires whitelisting
• Experimental status
• Goroutines allow for concurrency within
request; concurrent requests coming
• Demo app: http://moustach-io.appspot.com/
• Source: https://code.google.com/p/
appengine-go/source/browse/example/
Monday, June 13, 2011