2011 june-kuala-lumpur-gtug-hackathon
Upcoming SlideShare
Loading in...5
×
 

2011 june-kuala-lumpur-gtug-hackathon

on

  • 1,847 views

Slides for my presentation at the GTUG hackathon in Kuala Lum

Slides for my presentation at the GTUG hackathon in Kuala Lum

Statistics

Views

Total Views
1,847
Views on SlideShare
1,845
Embed Views
2

Actions

Likes
0
Downloads
14
Comments
0

2 Embeds 2

https://twitter.com 1
http://tweetedtimes.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    2011 june-kuala-lumpur-gtug-hackathon 2011 june-kuala-lumpur-gtug-hackathon Presentation Transcript

    • Google App Engine Ikai Lan Kuala Lumpur, GTUG Hackathon Twitter: @ikai June 18, 2011Saturday, June 18, 2011
    • 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
    • Agenda • What is Google App Engine? • Various features of GAE • How to get started • Introduction to Go • Important tools + some tipsSaturday, June 18, 2011
    • Software Platform Infrastructure Source: Gartner AADI Summit Dec 2009Saturday, June 18, 2011
    • Software Platform Infrastructure Source: Gartner AADI Summit Dec 2009Saturday, June 18, 2011
    • Software Platform Infrastructure Source: Gartner AADI Summit Dec 2009Saturday, June 18, 2011
    • Software Platform Infrastructure Source: Gartner AADI Summit Dec 2009Saturday, June 18, 2011
    • • Easy to build • Easy to manage • Easy to scaleSaturday, June 18, 2011
    • “We wear pagers so you don’t have to”Saturday, June 18, 2011
    • Saturday, June 18, 2011
    • >90K Developers >130K Apps >700M daily pageviewsSaturday, June 18, 2011
    • SDK & “The Cloud” Hardware Networking Operating system Application runtime Java, Python, Go Static file serving 20Saturday, June 18, 2011
    • Development Cycle • Write code locally • Test, push to Google Servers • Administer via a web interface - http:// appengine.google.comSaturday, June 18, 2011
    • Admin ConsoleSaturday, June 18, 2011
    • Duke, the Java mascot Go Gopher Copyright © Sun Microsystems Inc., all rights reserved.Saturday, June 18, 2011
    • 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
    • Core APIs Memcache Datastore URL Fetch Mail XMPP Task Queue Images Blobstore User ServiceSaturday, June 18, 2011
    • 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
    • Other APIs • High performance image serving • App Engine Map Reduce • Prospective Search API • Pipeline API • OAuth providerSaturday, June 18, 2011
    • 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
    • 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
    • app.yamlSaturday, June 18, 2011
    • main.pySaturday, June 18, 2011
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • MustachioSaturday, June 18, 2011
    • 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
    • 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
    • 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
    • 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
    • Questions? • Twitter: @ikai • App Engine: http://code.google.com/ appengineSaturday, June 18, 2011