Your SlideShare is downloading. ×
0
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
2011 june-kuala-lumpur-gtug-hackathon
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

2011 june-kuala-lumpur-gtug-hackathon

1,594

Published on

Slides for my presentation at the GTUG hackathon in Kuala Lum

Slides for my presentation at the GTUG hackathon in Kuala Lum

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,594
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Google App Engine Ikai Lan Kuala Lumpur, GTUG Hackathon Twitter: @ikai June 18, 2011Saturday, June 18, 2011
  • 2. About the speaker • Developer Relations at Google based out of San Francisco, CA • Primarily work in Java and Python nowadays; lots of experience with Ruby, JavaScript, PHP <5.3 • Focus: Cloud products • Twitter: @ikaiSaturday, June 18, 2011
  • 3. Agenda • What is Google App Engine? • Various features of GAE • How to get started • Introduction to Go • Important tools + some tipsSaturday, June 18, 2011
  • 4. Software Platform Infrastructure Source: Gartner AADI Summit Dec 2009Saturday, June 18, 2011
  • 5. Software Platform Infrastructure Source: Gartner AADI Summit Dec 2009Saturday, June 18, 2011
  • 6. Software Platform Infrastructure Source: Gartner AADI Summit Dec 2009Saturday, June 18, 2011
  • 7. Software Platform Infrastructure Source: Gartner AADI Summit Dec 2009Saturday, June 18, 2011
  • 8. • Easy to build • Easy to manage • Easy to scaleSaturday, June 18, 2011
  • 9. “We wear pagers so you don’t have to”Saturday, June 18, 2011
  • 10. Saturday, June 18, 2011
  • 11. >90K Developers >130K Apps >700M daily pageviewsSaturday, June 18, 2011
  • 12. SDK & “The Cloud” Hardware Networking Operating system Application runtime Java, Python, Go Static file serving 20Saturday, June 18, 2011
  • 13. Development Cycle • Write code locally • Test, push to Google Servers • Administer via a web interface - http:// appengine.google.comSaturday, June 18, 2011
  • 14. Admin ConsoleSaturday, June 18, 2011
  • 15. Duke, the Java mascot Go Gopher Copyright © Sun Microsystems Inc., all rights reserved.Saturday, June 18, 2011
  • 16. Extended Language support through JVM • Java • Scala • JRuby (Ruby) • Groovy Duke, the Java mascot Copyright © Sun Microsystems Inc., all rights reserved. • Quercus (PHP) • Rhino (JavaScript) • Jython (Python) • ClojureSaturday, June 18, 2011
  • 17. Core APIs Memcache Datastore URL Fetch Mail XMPP Task Queue Images Blobstore User ServiceSaturday, June 18, 2011
  • 18. 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 outagesSaturday, June 18, 2011
  • 19. Other APIs • High performance image serving • App Engine Map Reduce • Prospective Search API • Pipeline API • OAuth providerSaturday, June 18, 2011
  • 20. Prospective Search • Matches a high rate of incoming documents • 100,000 matches a second • Think: How might we build something like Google Alerts? • http://code.google.com/appengine/docs/ python/prospectivesearch/Saturday, June 18, 2011
  • 21. A basic Python app • 2 files: app.yaml and main.py • Easier to use when Python SDK is in your system path • Start server with dev_appserver.py • Deploy via appcfg.pySaturday, June 18, 2011
  • 22. app.yamlSaturday, June 18, 2011
  • 23. main.pySaturday, June 18, 2011
  • 24. Getting started with Java • Servlets API • Google Plugin for Eclipse will generate a skeleton project: http://code.google.com/ eclipse/beta/docs/download.htmlSaturday, June 18, 2011
  • 25. Go: why I like it • “The next version of C, brought to you by the guys who didn’t bring you C++” • Modern, type safe compiled language (stdlib includes: json parsing, web server) • Functions as first class objects • Concurrency baked in via goroutines and channels • Very fast compilation timesSaturday, June 18, 2011
  • 26. 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) }Saturday, June 18, 2011
  • 27. 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 202Saturday, June 18, 2011
  • 28. 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) }Saturday, June 18, 2011
  • 29. 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/Saturday, June 18, 2011
  • 30. MustachioSaturday, June 18, 2011
  • 31. General tips • The datastore is built on top of BigTable. It is non-relational! • Be aware of limits: 30 second requests, 10 minute tasks queues/cron jobs, whitelisted classes • Python 2.5 compatible (but can use 2.6 or 2.7 locally)Saturday, June 18, 2011
  • 32. Useful Python tools • Tipfy: http://www.tipfy.org/ • Django non-rel: http:// www.allbuttonspressed.com/projects/ django-nonrel • Testbed API: http://code.google.com/ appengine/docs/python/tools/ localunittesting.htmlSaturday, June 18, 2011
  • 33. Java tips • Use low-level datastore API or third party API: http://code.google.com/p/objectify- appengine/ • Start with servlets API - will have to do some work to make your favorite framework work. Slim3 is a good GAE specific frameworkSaturday, June 18, 2011
  • 34. Summary • Hopefully people here are interested in hacking on App Engine • Java, Python and Go • Ask me if you have general questions, I will be around all weekendSaturday, June 18, 2011
  • 35. Questions? • Twitter: @ikai • App Engine: http://code.google.com/ appengineSaturday, June 18, 2011

×