>>: Welcome again. We're going to start the next session, and this is Google App Engine overview. Chris Schalk: I think the published title was slightly different, but building applications on that basis ->>: Yeah, building applications on the Google app. And the presentation is by Chris Schalk. We met in March of last year or something -Chris Schalk: Something like that. >>: -- at the Google-plex, and he's going to present, I think, the principles of Google and how to build an application on Google App. Thank you. Chris Schalk: Were you going to do the bio at all or -- okay. What's that? >>: [inaudible]. Chris Schalk: Okay. So my name is Chris Schalk. I'm a developer advocate for Google. That job is actually kind of an interesting, fairly new job. It's a combination of essentially a software engineer, but I also do a lot of partner work and I also work with the developer community. So I'm like -- I've been at Google for the last three years helping on a number of different projects ranging from Google AJAX APIs, Google Maps, Open Social, so -- actually I spent a lot of time on Open Social. How many people here know what Open Social is? Just a few I guess. Okay. So basically going out and building new developer communities and also helping companies get up to speed with various Google technologies. Currently I'm working on the cloud technologies at Google, and specifically Google App Engine. And so today what I'd like to do is -- because I'm a developer at heart, I don't know if you noticed me, I was kind of cranking away on my laptop during the morning here. So I created like a little demo app just for you guys today, and it will be something that you guys can play around with while I'm doing my presentation. Since you guys are all from all different parts of the world, I'm assuming, it sounds like it, and so I made the app basically to allow you to kind of put yourself onto the map and shout out, you know, a comment or something like that. So basically that's a little demo app that I created today, and we play with it. But my main goal is just to kind of show you a really hands-on approach to what Google App Engine is, what it's like to actually build with Google App Engine. So I have definitely some slides that go concepts and go over the high-level details, but I definitely want to reserve some time over just to kind of show you how to work with the technology. Actually, a quick show of hands. How many people here are comfortable with Java programming? Okay. Cool. How about Python? Python developers out here? Okay. Less so. Okay. So one of the things that I'll mention for app engine is that the two languages that we support out of the box right now is both Python and Java. My background is actually Java, so I'll probably step into a little bit more Java coding examples on some of the stuff I'll show you. So anyway, let's go ahead and get started -- oh, just for a quick bio, I went to UCLA, worked at Oracle for 12 years doing a lot of product management, building out their IDE [inaudible] Java development tools, and I, as I mentioned, work as a developer advocate at Google. And I'll give you my contact info as well. Also, I published my slides on slide share. I didn't quite get a chance to generate a little bittly [phonetic] link, but also I just gave Juan the PDF as well for the slides. So a few high-level slides. I think this audience probably has a general -- a pretty good feel. A lot of times I go out and speak to folks and they all have kind of different takes on what cloud computing is. But one thing that I think helped me with regards to kind of get a nice feel for the entire lay of the land with regards to cloud computing is I went to a Garnter Conference back in December, and they pretty much laid it out in kind of like a pyramid fashion in the sense that you have a number of lower-level services that have been -- they refer to it as an infrastructure, architectural services, so you've got Amazon, things like that, where you're essentially working with virtual machines and so forth. And then, of course, as we go up the stack, there's this application platform as a service. So these are generally the buzz words that a lot of analyst folks are using these days. Now, in that case we tend to agree that app engine fits in this category in the sense that, you know, you just focus on your app, on your code, and then you let the platform itself go ahead and scale up. So in that sense you're not really so concerned about the actual machines and getting all the hosting stuff figured out. You just work on your app and toss it away, deploy it, and it's good to go and it will scale for you automatically. And then, of course, there's high-level services like when you get into like, Google Docs and things like that. So this gets into the actual software as a service. So hopefully you guys tend to agree with me I think that's a pretty good take on the overall landscape. And this is actually coming from Gartner. So I can probably fly through these fairly quickly, but the value proposition as we are down at the bottom of the stack is generally -- you know, you've got your network connectivity, you've got your power as well as you've got cooling. And then, of course, if we were to swap out and say let's bump up the notch there, the platform, in addition to all those services, we've got actually application development tools as well. And then what you apply your tools to is a platform from which you can actually start building out your applications. And so in that sense, yeah, app engine, I would say, fits in that category. The three core things that we always tell folks is -- or at least these are the three goals that App Engine was created on. Mainly making it very easy to build your applications. And so we find this is actually ringing true in the sense that we go out and we meets with lots of different development communities, you know, give them some ideas and they are just literally able to get started in a few minutes and start building applications. Actually, quick show of hands. How many people have actually tried out Google App Engine? So a couple people. Okay. So good. So this will be a learning experience for you guys. And, actually, with what you do today, I mean, you're more than welcome to just jump right into it providing you guys are up for coding either Python or Java. But, yeah, you can jump right into it and start building some cool apps. And I'll also give you some nice tutorials that you can jump into. We just created a whole new set of step-by-step tutorials for South By Southwest Interactive. Actually, we were just there a couple weeks ago, and so we have some new tutorials that you can play around with some cool features like XMBP and things like that. But anyway, I digress. So the core thing is very easy to build, whether it's Java or Python, and then maintain. So like, there's a whole host of platform-related tools where you can go into a dashboard and manage the health, just kind of check up on the applications. And then, of course, the scalability is something you get essentially as part of the platform. You don't have to worry about provisioning a bunch stuff. Now, you're going to have to kind of keep in mind the growth of your app. And so there's definitely like, a free barrier where you can just create an app and post it and you'll have like, a good deal of usage without even paying a cent. But then if you start getting a lot of hits, you'll get to a point where we will let you know that, hey, you'll want to go ahead and enable building if you do want to continue to scale up to your [inaudible]. But it's a very easy process, and I can share that in a little bit more detail. So just some high-level numbers as we're getting started. We have a community of over 250,000 developers, and these are all guys developing a lot of different types of applications. A lot of the apps that we found have been fairly popular tends to be, you know, either their mobile or social or a combination of both in the sense that -especially with the social explosion of all these different applications where, you know, they're manifesting themselves on Facebook and MySpace and all those different social sites. The back ends to these, a lot of times we're finding that developers are very happy with just creating like a Google App Engine back into service, like a data store for these things. Okay. But that's not to say there's -- you can build really anything you want, whether it's front facing web -- complete websites or just back in data services so you can create like, whatever -- any types of like JSON or [inaudible] types of services in the background. And then, of course, as we've grown over the last two years, the overall daily page view has now maxed out above 250 million. So basically App Engine has continued to grow. It's getting bigger and bigger, a large developer population as well as significantly large bit of usage as well. Okay. Here's an example. Actually, it's kind of cool because I don't know if you've ever seen this application called Wordle. It's actually written on App Engine, but if you want to take just a chunk of text or a web page or whatever and dump it to this website, it will give you like, a nice word cloud. And so in this sense if you look up the and engine -like the source for this word cloud is actually the Wikipedia entry for App Engine. So in that sense I think it's more or less correct in the sense that, you know, it's App Engine, it's meant to scale, ease of use and so forth. Actually, I just wrote like, an internal survey, and we'll be doing an external survey as well, where we had also numerous bits of data, and just for fun I injected some of the responses from the survey into the word cloud generator, and it was kind of a nice way to visualize a body of text, but you get the basics of it just by quickly visualizing it. There are App Engine partners across the way. Some of them, obviously, like -- now, I should say that a lot of these companies, they're not necessarily using App Engine to run their entire web infrastructure, but they do use App Engine in various components. Like Best Buy, for example. They created some various services within their overall infrastructure and so forth. Other companies, like Socialwok -- they actually won an award last year in 2009 in tech crunch -- they actually based their entire architecture, which is essentially like a social network with some really cool integration features with some of the other Google apps and things like that embedded into that. And they actually based it entirely off the App Engine. And so, anyway, some pretty cool partners that we're lining up. As I mentioned, since social networking is extremely -- is very popular these days, some of our most prolific and successful App Engine developers are using essentially App Engine's ability to quickly scale and they can create some cool front end. So, for example, BuddyPoke, they have -- or at least there's pretty much one main guy who I interact with, and he's been very successful both on Facebook and on a number of other sites where he has like, a nice little avatar, kind of a little game kind of social interaction. And he basically uses App Engine for the background. And so in this case, this one app itself just to give you an idea of the overall size, over 62 million users, and it continues to grow substantially. Here's another example of a fairly recent partner that came up to speed on App Engine over the last few months. It's called Gigya. And the Gigya actually -- the cool thing about them is that they tend to have promotional or event-based content that comes up, and so they'll actually have a spike. And so this is kind of like why I like to kind of show this in the sense that they're able to manage these one-time event-based masses of traffic fairly easily by using the App Engine architecture. So in this case here's one example where we're starting pretty much at nothing and then some kind of sports event or some kind of topical thing pops up on one of their websites that's using App Engine, and basically it's just able to jump in and scale it right away. And so like there's a nice quote from the VP of research development over at Gigya just basically mentioning that he's very happy with the capability of App Engine to be able to scale right there on a dime. So some of these slides I think if you're into cloud computing, you more or less get the gist, but these are kind of like what we also, I think, hold true and dear in the sense of why we think App Engine is a compelling environment in the sense that if you about it back a little bit, before the whole buzz of cloud computing, obviously if you had some services or website you needed to get out there, yeah, it tended to be a fairly manual process that you would have to go out and provision your own kind of stuff. And so all that stuff tends to add up in the sense that you can start doing all this management stuff. So as you probably have gone through just dealing with these different costs, that's, hence, why the whole move towards cloud computing so -- whereas, like you can see, maintenance and traffic and upgrades of the overall environment. So in a nutshell, App Engine does provide a nice entire development environment, development and deployment platform in a box. So let's jump into a little bit more of the details. So, so far I've been very high level. I'm going to start kind of getting into more of the nitty-gritty and then I'll finish up with just doing a bunch of demos and I'll show you how I built that demo application for today. So App Engine essentially is a set of services. And the services all have their own responsibilities. I would say probably the most popular or the most popular service that App Engine does provide is the data store service. Now, the data store service is essentially your database within App Engine's environment. So if you -- this is one thing that sometimes might be a little bit of a conceptual -- you kind of have to get over the hurdle in the sense that App Engine has architecture based on Google's Big Table architecture. So if you're at all familiar with how Google works, Google has this technology referred to as Big Table, and it's basically a massive scalable database which is what is behind the Google search service. So App Engine, the way it's architected is it ties into that same technology, and so basically it allows you, as developers, as -- to build essentially your own website that can tap into Google's Big Table infrastructure. And that's how you use -- basically the data store is how you interact with this Big Table service in that sense. So you would design your applications, you'd design your data classes and objects to work within the data store. And I'll get into more details on that. There's also some good things to know. First off, it's not a SQL database, so you kind of have to understand that, first, it's not a SQL database, but then you can also understand why it's not necessarily a SQL. There's actually kind of I would say somewhat of a group of folks within cloud computing that are kind of moving a little bit outside of the SQL area. So people -- I came from the SQL background since I was at Oracle for a number of years anyway, but I can also see the rationale also for going for a little bit more kind of like -- and this is all designed for maximum scalability, but basically kind of stepping away from fairly hierarchical and lots of different types of joined relationships where you can have a little bit more simplistic access. And so we do have some publications. There's definitely some good content out there as of, like, last year at Gigya, we had a session devoted specifically how to build Google App Engine applications that can scale. Now, the other services a pretty, I would say, complementary to building your web applications. So memcache -- actually, memcache and Datastore are somewhat related. Memcache is basically Google's caching technology. So if you have some data that you don't want to take the time to do an actual write or if you want to pull it out and just keep it in memory, memcache is basically your solution for that. And that's available as a service as well. URL Fetch, if you want to go out and fetch content out on the internet. Now, I should also say in addition to be different from, like a SQL or your typical server side lamp stack or Java EE server side technology, with App Eg -- and this is all done for scalability again -- you don't have the ability for opening up socket connections and forth. So in that sense you use this URL Fetch capability or service within App Engine to go out and fetch content and bring it in. And the rest of the services, email, typical email service. You can go in and shoot out emails. It can also take incoming emails. You can handle attachments and so forth. XMPP, this is actually pretty fun. I might be able to show you a demo, time permitting, of how to build your own XMPP server, like a chatbot, for example. That was one of the exercises that we had in our workshop over at South By Southwest. Task queues, like if you want to have a number of tasks lined up in a queue, not necessarily like a chron job, but just stuff that you want to do off-line processing. There is an image API for service image manipulation. Blob store. This is actually somewhat new, but this is kind of just like a regular blob storage capability as well that's added onto App Engine. And then, finally, there's a user service that taps into Google's user service, and then there's also ways that you can tap it into Open ID, OAuth, other ways of basically authentication into App Engine. Okay? Let me grab my water here. Any questions so far? Just high-level stuff. And, of course, I'll take questions at the end, and then I have to jump in taxi to head back to the airport so I have to make sure I have enough time. So the two main languages, obviously, are Python and Java. Python was actually first. And as you may have heard, Google has traditionally been a very Python-centric company, but I would say over the last five years there's been an equal and very strong Java component within Google's overall structure technology. So I think what we have now is App Engine kind of mirrors what the internal expertise at Google is as well. Of course, Google has a number of other stuff with various languages like PHP and Ruby and so forth. So, now, as far as folks on the Java side, as you can see, basically the core technologies, the core standards within Java, like serverless JDO, JPA, Java mail and so forth are all supported within App Engine's API. And I think I touched on most of those already. And, likewise, because of Java, because of the fact that you have a JVM, you actually can run in other languages. So, for example, if you wanted to program in Python but you wanted to take advantage of the various services that you get from the Java side, you could actually just use Jython, which is kind of interesting. At first I thought it was kind of weird why anyone would want to do that, but then a good friend of mine who I work with at Google, Wesley Chun [phonetic], he's definitely a Python advocate. He's written various books on Python. And he's like, oh, no it's perfectly reasonable to program on Python on top of a JVM just to access the services. Okay. So, anyway, just to kind of touch on some of the main points, as I mentioned before, it's always free to get started. So really anyone today could just go out and start building and creating prototypes and literally deploy them to the cloud. And you can get a lot of bang for actually no bucks just by starting out and playing with the technology. It's open until only you get, like, a substantially large audience that at that point you can choose if you want to enable billing, and then you can manage your billing and so forth. I won't go through every bullet list, but get the idea of the -- how things are broken down. And then you can go to the dashboard of your app to see how you're doing on quota and so forth. Speaking of the dashboard or the overall platform management, that is, so when you create -- and I'll step through this shortly, but when you create your app, you first create it locally, and in that sense you kind of have a local running -- or a local runable instance where you can test it and you don't have to be connected to the cloud or anything like that. So you can go through, create your app, start building out the functionality, and you even have a local data store instance and you can start testing out the app as if it was actually running in the cloud. But then when you get to the point where you want to actually deploy the app to the cloud, what you would do is you first create the application itself in the cloud, which means you go to App Engine's online service, appengine.google.com, you go ahead and give it a name, and then you create this empty stub app. And then once you build your local app, you can they the deploy it up to the cloud. And this is all done fairly easily using the various tools, whether you're on Python or whether you're on Java. So that's basically the process by which you create an App Engine app with a cloud. Once you've deployed your app and it's live and receiving traffic and so forth, you can then go back to your App Engine dashboard or console of your deployed app, and then once you go there you can see, okay, here's my traffic, here's how basically, at a glance, I have all the data that's associated with this app. I can see my data store usage, I can see the number of population actually hitting the app. And then you can kind of filter down on the various services that you're using. So whether you're using email or XMPP or all these different types of services, you can drill down and get all the granular data that you need. There's also even historical data. So if you want to see how things have been running over time and stuff like that. Incidentally, we actually use this same app when we're just kind of monitoring the entire system. And when we're working with partners, for example, on helping them out with their applications, they just give us their application ID and we pull it up and we can see the same exact data that they see and we can help them continue to work out any kinks that they see. Let's jump into the tools for App Engine. Now, for those of you on the Python side, there's actually a nice -- it's an nifty little tool that was created -- I think the first one was for Mac, but there's now been subsequent ports for Windows, and I think there's also a Linux one. But basically it's called the App Engine Launcher, and when you download the STK, you can downloaded launcher as part of it. And what this allows you to do in a nutshell is, one, you can create very quickly a stub or an empty app, and then as you can see, it's got some little buttons on there where you can start and fire up the app locally and you can also access a local console for the application as it's running locally just by clicking on one of these buttons. And also, as you see over to the side, there's kind of some -- I had a pointer up here. Oh, here it is -- you can actually see over here, there's some buttons over there that allow you to take the app and deploy it over to your service side instance of your cloud. Anyway, I'll show you how that works pretty easily. Now, I think I've touched on this once or twice. As you're running locally, the cool thing is that -- as you can see here, it says local host -- you can continue to manage your local instance. So it's kind of like your own mini version of the cloud service that you're running in the cloud, but in this case you can do a lot of debugging without even having to be connected to the cloud. So in this sense you can have your local instance of your data store, for example. Same with memcache and so forth. So this is extremely useful as well. And it doesn't matter whether you're using Java or Python. It's all the same. Now, if we have Java users, we do have a Google-developed plug-in for Eclipse and then there's also some open source or various other plug-ins for other environments. So, for example, NetBeans, there's a plug-in for NetBeans. I think there's also one for -oh, where is there one? Well, I know for sure we have NetBeans out there, and that was just basically traded out in the community. And then this particular plug-in for Eclipse -- I'll show you in a second, but basically is makes both the creation and the deployment and the debugging, all those aspects, they're easy to do in an Eclipse environment. So file new, new web application, and then you can debug it locally. That fires up the local -- in this case the local server is Jedi [phonetic] actually. And it runs Jedi locally and then you can debug it and then deploy it to the cloud. So just on kind of review a little bit, back in April of 2008 was when it was actually launched. And that was just for the Python-only version. And some of these services -all of a sudden fairly limited, but you had the data store and then not too long after that memcache images and various other features. I won't read them all, but basically the main point here is that App Engine is a continuously evolving technology that's getting more and more powerful. And we have a whole list of stuff that I can't necessarily tell you about, but basically there's a whole bunch of really cool features that we're working on that we're continuing to add on for App Engine. So once you jump into the App Engine development environment, you can expect just a continued stream of updates and new functionality. So we find that our users are actually very impressed and quite pleased by all the stuff that continues to come down in the pipeline. Also, we just celebrated a birthday yesterday, and so there's a blog post about it, and so it just touches on kind of the overall growth of App Engine. So it's a fairly healthy angle, I guess, or slope of overall App Engine users over the world. And that's the blog post that just went out yesterday. So let me jump in and show you how to actually work with App Engine. So what I'll do is I'll first do some basic stuff, so I'll go to the App Engine site, I'll show basically how far you get started and build App Engine or at least register and start creating these stub empty applications, and then I'll switch over and fire up the local app launcher. So I'll create a very simple, just for scratch, app running locally and then, depending on time, I might deploy that or I can create another one and deploy that to the cloud. And then I'll step over -- I'll do both the Python and the Eclipse side. So I'll show you the Eclipse plug-in as well. And then I'll show you the demo that I created earlier today, which you might have an interest in seeing what are the different moving pieces that are created. And then the other thing that I wanted to show you is that because we had this hack-a-thon at South By Southwest Interactive, we have some new sets of workshops. We refer to them as code labs. And so these code labs basically provide step-by-step instructions on how to use different Google technologies. So I'll show you the site, and we have an App Engine section where we have both Java and Python. And they're more or less parallel, so you get to do the same types of exercises, but you can just choose whatever you want. So I'll step into that, but I think that pretty much is going to eat up, I don't know, whatever, a certain amount of time. I just have to make sure I don't go too late. Any questions so far? Yes? >>: In the previous talks we were told how we could get hundreds and thousands of servers. Can we get hundreds of thousands of servers from Google? Chris Schalk: So I can repeat it -- >>: [inaudible]. Chris Schalk: Yeah. And correct me if I -- correct me a little bit, but basically you were saying in previous talks you can get hundreds of thousands of servers? >>: Instances. Chris Schalk: Instances. Okay. Are you asking if App Engine can scale to large numbers ->>: I mean, let's imagine we had a Python or Java version of blast. Could I do corresponding Google blast to compare with the Azure blast and [inaudible]. Chris Schalk: Well, yeah, I mean, what you're getting at is basically, at its core, probably the key thing that is of value in the sense that you don't have to worry about hitting an upper limit on what you -- from a scalability standpoint. So we haven't really had any instance of any customers that maxed out us. Google's infrastructure across the board is actually quite extensive globally. So in that sense we're tapping into that. And Google's -- I should say also, Google's overall cloud infrastructure is already supporting the various Google Docs and all these different services. So it's tapping into what's already a very large infrastructure as well. From App Engine specifically? Yeah, we haven't had any problems with any particular customers. Google is our biggest customer, or vice-versa. Basically Google is running it already. Anyway, let me jump in and show you how to work with App Engine. So, first of all, let's just -- that's where I uploaded my slides. So the very first thing you want to do -- actually, let me just switch over to my other browser. That was a sneak peek. Okay. This is my external account. So as you noticed, I went to appengine.google.com, and then I logged in with my Google password, and then at this point I'm faced with kind of a registry of applications that I have. So on this particular application or -- these are basically all the various applications that I have running. Some of them are quite old and then -- so you can go through and create your own. Actually, I just show that you right now. So let's go ahead and create an application. Incidentally, you get ten apps to start out with, and if you put in a request, you can actually bump it up. But you can actually also get a lot of mileage out of that first ten because you can have versioning, you can completely swap out and replace it with apps. Now, the first thing you do when you're creating an application is you just figure out if an app is taken already. So, for example, if I wanted to check if Cloud Futures Wall is available and it will say, darn, it's not available. That's because I already took it earlier anyway. But if I were to say let's create -- oops. Something slightly different. It will say it's available, and then I can just say Cloud Futures Wall again. You go through and create your app on the fly, and then once you hit save -- I won't do it for this case because I don't really want to burn up another app, but you have an empty stub app. At that point you can go in and, on your local client, start creating an app and test it and run it. And when you feel that it's in a state that you want to go and push it out to the cloud, you just create -- you essentially click on upload, whether you're using the Eclipse plug-in or whether you're using the command line utilities or the App Engine launcher. So I'll take a look at this really quickly just to show you the app that I created today for this little demo just to give you an idea what it's like to look at the dashboard, and then I'll switch back over to client development. So this is an app that I built today right there in the seat, and the main thing here is that -- well, there I can see at a glance the overall performance or the incoming traffic for the app, which is not very much over today, just me kind of hitting it. I can go into the quota details and in this case I can see in a very granular sense all the different services that are being utilized by my app. Now, if I don't program in these services, then nobody would actually have the ability to use them. But typically when you get more complex, you're going to be using a number of services and you'll want to kind of keep track of how the quota is. Now, as I mentioned, and I showed that fir set of quotas, you can get a lot of mileage without even paying anything at all. You get basically a free set of usages for creating simple apps, creating [inaudible] data, so on and so forth. But you will start seeing some red lines once you start hitting those maximum amounts. And you can actually get an exception thrown if you go over quotas. But that's when you want -- you'll know about it, because you'll see it right there. Plus you can actually then say let's go ahead and turn on billing, and then billing will allow you to continue to scale. And then you can basically control how much you want to pay. So you would never get stuck with a massive bill just because the thing went crazy without you, like overnight. You can set continual gradual limit on how much you want to continue to spend. But anyway, for getting started, it's very simple. Just a few other quick things that I look at. Logs. You know, you can go through and see all the different types of logs available, whether it's simple debugging information. That's actually a fairly useful tool. You can put in logging information with your app, whether it's Python or Java, and just go through and see how the app is running on the cloud. Chron jobs, just like your typical chron that you're already used to. And I haven't enabled some of these because my app is fairly simple, but as I mentioned before, you have these various services, and you can go through and basically see what the data is or see what the state of the server is. Now, in this case, this is actually my data store instance of this particular app, which happens -- I've defined it to have -- it's an object which takes various fields. So in this case I've created an object that allows me to go in and I have my name, my address, and then I have some geographical data that you show you. When I show you the app, you'll understand what it means. But basically this is a typical data store object that you define, whether it's on the Java side where you just go through and create your typical Pojo, which has your various fields, or if you're on the Python side, you can quickly create a data store object and define its fields in a similar fashion. What that translates to is this data store object in which you can then go through and manage and so forth. So let me jump back and I'll go to on the client side. Now, on the client side -- so once you've gone through and you've, say, downloaded the SDK -- actually, there's another very important website that I'll show you. How many here are familiar with code.google.com for just general technology about Google? Not so many. Okay. We've got a few. I was getting nervous there. Basically code.google.com -- I'll start at the top actually. So if you want to learn how to use the various Google technologies -- you might be surprised if you've never been here. Google, of course, has a search capability or things like Gmail and maps, but you can actually use a very rich set of technologies in API. So App Engine is just one technology, but if you start looking into whether you're using a technology like, for example, Google Web Toolkit to build front-end web UIs or Android for building mobile applications, if you go -- if you start at code.google.com, you'll be able to jump right in there and get immersed in a whole a bunch developer-related information. Now, if I click on the App Engine link there, that basically takes me to code.google.com/appengine, and that's where you can start in understanding how to work with App Engine. You can sign up and essentially turn on your App Engine account. So if you already have a Google account, this will allow you to turn on, and then you'll have your App Engine account all turned on and ready to start building apps, and then here is when you want to download the SDK. So this is what you need in order to have your client environment set up. Whether you're on Windows, Mac or Linux, you can decide what you want. And then, of course, you have to decide whether you want the Python SDK or the Java SDK. Of course, if you have the Java SDK you will need a JDK and so forth. And so there's information that explains how to do that. And there's really no problem with even taking both SDKs, whether it's Python or Java, which I happen to have right here. So let me just show you fairly quickly, once you install the Python SDK -- I'll just use Python as the starter -- the Python SDK comes basically with a set of command line utilities, and you can just use those. Like app config or -- all those are simple command line utilities that you can type in and upload, run locally and so forth. You can even configure them to run with [inaudible]. So if you have something -- your own kind of methodology for using -- building your apps, you can totally use that. Now, the App Engine launcher is just a convenience tool, so if I want to, say -- actually, I'll go ahead and turn that one off and I'll create a brand new app just by clicking on the plus sign. So what this is going to do, it's going to create a -- I guess that's good enough. Let's see. Cloud Futures. That should create my app in that subdirectory. Python App Engine, boom. And it's also going to run on port 8092. So now that it's created it, I can click on the little green button there, and that fires up a local instance. Oh, did I do something wrong? Let me just create a new one. I'll accept the defaults. I know, I'll do -- hold on [inaudible]. So I speak some Spanish. Occasionally I try to present in Spanish, but it depends on how tired I am or whatever the next day. I'm actually going to Mexico next week. We're having a developer conference, and I'll see how much I'll speak in Spanish over there. So I created this application. It's now running locally, and I can click on this browse button, and that actually just allows me to jump out and run this and, as you can see. Now, in this case -- I'll just jump over to the file system. I think I dumped it to my Xbox -to my desktop. [inaudible] where did I put it? Oh, it's right on my home directory. There it is. So this is what you get out of the box if you click on the little plus button. So if you're just getting started, in this case there's an application yaml, yet another mark-up language, and a simple single Python script -- let me just fire that up -- that essentially does a hello world response to an http get request. At this point you can go through and follow through tutorials that explain how to go and build method to handle both post get, also web templating, if you want to use jango, if people are familiar with that, you can use that, or you can use kind of like a simple web templating so you can start creating html and then start putting in tags which represent actual data. So that's where I have my app there. I could show you a few other things, though, just to kind of give you an idea. If I click on this button, that actually launches a dashboard, but only for my local instance. And this is what I refer to as the local development console. So in this case since I haven't really created any services, I'm not really doing anything, but if I were to go through and create a data store, I would start seeing my local instance of my objects there. When I show the demo app in a second, I'll show you actual data that's in there that I've been playing around with as I was testing it. And then when I want to go and deploy my app, I can go through and just click on this button here. And then that basically allows me to log into my Google App Engine account and send my app on its way. And then once it's deployed, I can jump out to the actual server side instance. In this case I don't have a server side instance for this particular app because I haven't created one. So that's the basics of using the App Engine Launcher. I think I have -- oh, this one is actually kind of funny. I created a language app which basically translates English to a language called Halaka. How many people are familiar with Halaka? None of them. That's because the language doesn't exist. It was a joke, actually, between me and a coworker a few years ago -- well, actually in the mid '90s -- where he wrote the original version of this in Pearl and he posted it on his company's website and people started linking to it and it actually became a fair well known -- people didn't realize it was a joke. So as App Engine was getting started, I wrote a Halaka version on App Engine, and it has its own algorithm for generating basically gobbledygook, and so I actually posted it out to the cloud here. It's halakadict@appspot. And so in this case -- and it also learn. So if it doesn't know a word, it will create a new instance of it. And, plus, I can turn it around and go backwards. But for the code for this, I put it out there just for people to learn it. But basically it was also a learning experience for me. Plus I had a little fun with it because I kind of created this fictitious language and stuff like that. So anyway, whatever. Another one of these silly ->>: [inaudible]. Chris Schalk: The Avatar? Yeah, that's right. Avatar ->>: Here it says it's a Jewish law and ritual. Chris Schalk: Oh, well, I found that out later on. I didn't even know about that. So this was, like, just a joke back from 1995 or whatever, but now we know. I guess I can change it, if need be, but, you know -- so anyway, I'm digressing. So that's the App Engine Launcher. Let me just back into some of the other stuff that I was going to show you. Oh, let's go over to Eclipse. All right. So I happen to have my Eclipse platform here. And I can do a similar thing, or if I want to create a brand new app, I can go through -because I have the plug-in installed, I can go ahead and say let's do a new web application project, and so I can say hello Cloud Futures, give it a common package. Now, this is an option, but if you're familiar with Google Web Toolkit, that's a whole body of technology which is actually quite powerful to build really rich Ajax-style UIs, and you can actually use this within App Engine fairly easily, and this wizard actually gives you the option of just generating a simple starting app to get started. Basically like a little stub app. That way you can put in some text and it will go back and exercise like a server-side call and then send back a response. For this case, I won't do that. I'll just create a very simple starter app that, as you can see, it's somewhat similar to what that little plus button on the app launcher, and I'll be using -- you can specify what SDK. 132 is the latest, but, you know, whatever. It's actually quite easy to upgrade the SDKs. Okay. So there it is. That's funny, I have an "i" in there, iCloud. Oh, well. So in this case let's just take a look at what just got created so we can have a better feel for what it is. So in this case I created a new kind of stub application. So if you're familiar with Java Servlets, it's basically responding to a get request. And the way I want to -- oh, before I run it, let me just show you one more thing. So this is very similar to a server-side, like a Java EE application, so an app that you could run, say, on Tomcat or GlassFish or so forth. But there are some slight differences. Over here you'll notice there's, as you expect, a web.xml, but there's also an appengine-web.xml. So in this case, this is where you could specify any App Engine-specific properties, and then as you start to use other services, like, for example, the task use or chron and so forth, you do typically start adding a few more config files. But, yeah, so that's, in its simplest form, what you get when you create like empty App Engine, for Java app, that is. Now, one thing that -- right off the bat there is there's this field within your App Engine web.xml which allows you to specify the name of the application. So if I say Cloud Futures Wall right there, that will mean if I deploy that app, that will actually deploy out to my registered Cloud Futures Wall app that is now live on the internet. But if I'm just running locally, I don't have to define anything at the moment since it doesn't really matter. So let's just go ahead and step through how to run it. So I'll click on run as web application. So now, as you can see, it's running on local host 8080, so I'll click on local host 8080. And then that's a little -- that's not the server, that's my browser, because it was cached. It has this mistake -- there we go. So here's basically kind of a generated index page which has a link to any registered servlets, and there's my hello world server responding in kind. So pretty straightforward. I can do the same thing if I wanted to insert a break point into the code. You get the idea. But basically if you're an Eclipse user, I can fire it up locally and say debug as a Google App Engine web application and so forth, and then it will launch the debugger and I can do line-by-line debugging and so forth. So pretty straightforward. Let me jump in and start showing you something more interesting. At this point what I'll do is I want to show you a set of tutorials that we created. So it's bit.ly/gcodelabs, and I think I put it on the presentation, but if not, you can always make a note of it. But basically gcodelabs. And that's a bit of the exercises that were created for this hack-a-thon a couple weeks ago. And so this was actually a joint project by all of the different developers at -- well, we had multiple products being showcased and people who came to the hack-a-thon were encouraged to build apps that were essentially mache-ups of the various different technologies. And away actually gave out prizes. One of our -- actually, five of the folks who came up actually built some really cool apps that integrated Android with App Engine in the background or they used some cool maps features and so forth. So anyway, as you can see, there's the App Engine portion of these code labs which explain how to do essentially some of the stuff that stepped through already, and then at that point you can jump in and start doing step-by-step exercises on how to build a simple -- it starts off with a guestbook application which is part of the getting started guide, but it continues on and shows how to build XMPP, like a little chatbot, and so forth, as well as cover some of the other stuff. And I actually wrote the Java version, and then my coworker wrote the Python. But basically it does the same thing. So if you follow along this guide, you can essentially do what I did as well when I was showing how to build it. And here's, like, a running instance of this application, and I can just fire it up just so you get a basic idea. So this is like the finished version of this guestbook app. Actually, it may or may not be finished. Let's go ahead and take a look. So the cool thing about is that -- oh, so this one doesn't have the finished version, but basically when you get started you start using the user servicing and then if you notice here, if you click on the generated link that allows you to log in as an actual user, I don't actually have to even be logged into Google, you can have this simple test capability where it then goes in and gives you kind of like a pseudo local user. So that's just one usage of the user service. But basically if you follow through that code lab that I showed you here which explains how to build this guest application, you can build an app that allows people to essentially submit comments onto a wall. So that was kind of the inspiration for this demo app that I created for this particular talk. So what I did was I took that same app and because folks were from all around the world, I figured it might be kind of fun to receipt a demo app that allows people to write a comment on a wall but then also kind of showed geographically where they are, where they're coming from for this conference. So let me just jump out and show you that app and then I'll show you how I built it. So, first of all, the app that I created is this one here, cloudfutureswall.appsbot.com. So if you actually go there, you can do what I'm doing here on the fly, and we might have actually had some people sign up if anyone were paying attention. So we just have me. So this is an app that I created mainly just to kind of showcase like an extension of that wall app. And the way you do it is you can say -- should I enter you, Juan, or -- I'll just enter my old dog -- well, I don't have an icon for a dog so I'll just make up someone. All right. Sammy. And let's say this person lives in Amphitheater Parkway. I don't know why I choose the hardest thing. Let's go for London, England. There we go. Hit tab. So this what is doing -- I have a little bit of Java script that uses the Google Maps API that geolocated based on what I typed in, and then since I'm a guy I will switch my icon over -- oh, maybe I'll go for that guy. I don't know. And so this is just a little bit of Google Maps Java script fun that I just kind of tossed into this app. So I've defined basically where I'm coming from for this and, and then I can say hello, there, and so I'll hit add to the map and then what that's doing back on the server -yeah, I have to do a reset -- oh, cool, we have some folks signing up. So when you click on the reset map, it actually starts showing you the different folks who have signed up. So in this case it says Sammy says hello there, and I also put in a little bit of -- because the Maps API has all these cool things where you can calculate distance, and I put the distance to Redmond, Washington. So anyway, just for fun, you know, let's take a look at Rod Senra [phonetic]. So Rod Senra -- ah, there you go [laughter]. So you traveled 6,736 miles to come here. Cool. So anyway -- and, also, there's a list view, so if you go down to the bottom, it's kind of hard to see, but if you just scroll down you can kind of see basically like a list view of the different comments in it. So this is -What's that? >>: There's lots of new people there. Chris Schalk: Yeah. Looks like people are hitting the website. So, anyway, don't say any bad words. Otherwise I'll have to kill the app. But, anyway, you get the idea. I also made sure to escape to html, but I slapped some code in very quickly, so you could theoretically break it. Just keep that in mind. So let me show you how I built it just so you get an idea. Obviously it's somewhat of a frivolous application, but you can kind of get a flavor for how you can use App Engine to create a nice front end, but then you can also use it to build, say, like a back-end data store for geographical data in this case. Okay. So what I did -- and I'll even step over here, so -- if I can find it. Oh, there it is. Cloud Futures. So I went ahead and started off this application just using the file new web application and I started off with a really simple hello world servlet, and that was basically it. But then I started building out the functionality, and I figured, okay, I want to have a front-end page here that allows me to present a form, and I want a Google Map on it. So in this case I won't get into the details of the map, but I just had, like, a Java script file that goes and renders a map how I want it and then just takes care of the visualization part. But the main job of this JSP page is just to render the form. And because the Maps API allows me to geolocate and quietly figure out the latitude and longitude and then stick those into my form as hidden fields, that's basically kind of the little bit of trickery behind it. So I have my form, and I post -- once I post the form, meaning I submit and add a new contact, that goes onto the server. And let me just show you my code to process the comment. So if someone presses the button to actually add themselves into the registry, this is my do post method, which if you're familiar with server-side Java programming, it's fairly straightforward, but in a nutshell, any web developer can understand that you're grabbing some parameters from a form and you're doing something with it. In this case, this is the bit of the code that allows me to interact with the data store service, and it's just like creating a new Java object, setting some of the fields, which are basically passing from the form, and I hit a method called make persistent, and then I close my connection to the data store. So at that point I've created my data store instance and I have my data. Now, if you're curious how I actually render these points onto the map, I can show you. So just to kind of go back to map view here -- now, as the map renders, what it's actually doing is it is actually creating a -- come on -- it's creating a request -- uh-oh, did it break already? It's creating a request to go out to -- here we go. I'll just -- sorry. I'll also show you the dashboard for this app as well. And then I'll finish up and we'll step into a few more other things here. I'll go into list view. I have a sinking feeling that the app might have some data in there that made it -- so anyway, let's jump into the dashboard while we're at it. Oh, before I do that, in order for the map to populate the list, which is currently not quite working at the moment -- I'll have to double check on it -- I have this url that I've defined. Right now there's no security on it so really anyone can go to a slash rest. And you can see essentially what the incoming -- or what the data for the map is. And so this is essentially a JSON stream, and then you use the Google Maps API and Java script to take that stream and then render a set of data points onto the map. So in that case, how did I create the JSON stream? Well, basically in a very simple matter of creating a JSON rest servlet which I've mapped to slash rest, and in this case the JSON servlet just does a simple query and creates a JSON output stream which then on my client side I can consume inside my Google Map and then send it on its way. Okay? So let's go ahead and check out the dashboard for this particular app. So this is like the server-side instance. So there it is at the top. And since we have data in there, I can click data store viewer -- oh, see that last spike. So now I can see all the people that are signing in, and I see lots of weird characters here. You guys are testing my app, aren't you? You're going to break it. Oh, well. Actually, the data looks okay. But, ah, whatever. So anyway, that's basically the app itself. I'm looking at the high-level aspect of it on the server, and there's the little spike as you guys are now hitting it. Anything else? Let me see if there's any logs that are decent. Nothing really. But anyway, so that's the basics of that app just to kind of give you a feel for how it works. It's fairly simple. It just has this wall JSP which is my front-end form, I have the list view here which is my comment list, so when you switch over to list view, it's just doing a simple query of the data items and displaying it in a straightforward fashion. And this is very similar to what is in the tutorial that we showed -- that I showed a second ago. And the other thing is -- typically what I do is I break down my data objects and I create a model project and then I can create a set of objects that represent my data and then some DAO objects if I want to do a little bit more typical database operations or data operations, like insert, update, delete, and so forth. But in this case I've just created this single class called comment, and the comment has a number of fields. Author, name, so forth, address, latitude, longitude and icon and so forth and then the associated getters and setters. And I used the -- actually, the built-in factory service for instantiating essentially a connection to my data store, and it allows me to query or insert, update, delete, and so forth, just using the API. So that's that. I'll go back. And feel free to play with the app, continue, and I might update it to clean out some of the data or whatever. So anyway, so that's that. Let me jump back to my presentation to see what else I want to show you. I think that was it. I have a few other demo apps that I've created just for fun. One is called Plane Crazy, and this one I created a while back, which it has integration with social. There's some social features. So it's -- I can jump out to the live instance of it. So I created this app last year which showed basically how to interact with different services. And the main technology that I used in this case was Google Friend Connect, and Google Friend Connect is kind of a neat technology that allows me to push out events and so forth or -- the coolest thing is I can log in with a number of different online credentials. So whether it's OpenID directly or Yahoo or Twitter and so forth. So for this one I'll just go ahead and log in using my Google credentials, and then the main point here was just to kind of show, like, a nice UI front end which also integrates with -- did I kill my browser? Oh, no, there is it is -- which integrates with the various online services. And Google Friend Connect is pretty cool in the sense that it allows me, as I mentioned, to federate out different events. So in this case I can -- the main point of this app is that it shows how to use the email service, it shows how to actually integrate with different users and so forth. I can creativity streams. And the main usage pattern here is I just select like an airplane as my favorite airplane and then I can take this particular event and post it out to other social networks that are connected with me. And so behind the scenes what it's using is a set of APIs that are called the Open Social Java client APIs which allows me to make a connection out to various other sites and then post activities and so forth. So I won't get into all the details, but you can get the general idea. I've also open sourced this as well so you can play around with the code directly. Plane-crazy.appspot.com. And it's a Java app, but depending on time, I was possibly thinking of working with one of our Python guys to create a Python version. Okay. So I think I've showed most of the things that I wanted to show. That was the url if you wanted to try out some of those new code labs, and, of course, there's the App Engine portion of it directly. And then I showed basically how this one works. So that was just a simple wall demo that you can play around with. I might have to fix it now. And some main places -- as I mentioned before code.google.com/appengine. So if you want to get started, that's where you would go. And then there's just some cool blog posts here. Like, for example, the main blog for App Engine which provides the latest information of all of the stuff that's going on, as well as -- even if you want to drill down into specifically Java persistence, there's a blog there that's running by the community. Now, contact info for me. Basically that's my work email. So feel free, if you have any questions, if you feel like trying out App Engine for your company or whatever, you can always just ping me if you need any particular help. My Twitter address is there. I don't tweet that often, but I usually -- if I'm going out and speaking, I will go ahead and just tweet some of the information. I provided slides also to Juan, but I also posted them on Slide Share, but I don't have the link. But if you -- I will post the link to my slides also on Twitter so you can get it from there. Okay. Any questions? Yes? >>: I think you want record it or no ->>: Yes. So basically he will repeat the question ->>: Oh, okay. I was just curious. This was a very interesting talk, but I was curious in the middle when you mentioned something about there is an increase in Java coding and Google. Why would that be? You were hiring more Java coders or -Chris Schalk: Google in general is growing, and it's just, I don't know, I think a sign of the times where it's reflecting maybe the general population of developers out there, and Java is actually a significantly popular programming language. But there's no real major intent one way or the other. It's just kind of one of the signs of the times. Google, to some degree, is somewhat organic in the sense that there's a lot of different projects going on, and each project lead kind of has their own preference. But I would just say from an empirical standpoint, Java seems to be a little bit -- you know, getting larger and larger, but, yeah, I don't think one language will completely dominate. I think it's going to be a mixture of stuff. Any other questions about App Engine? >>: [inaudible] how does App Engine store the data? Do you have some database to store it. Chris Schalk: Oh, yeah, yeah, yeah. So I got into the data store. So App Engine, as I explained before, has like a set of services, and these services are essentially tied into the same infrastructure that Google uses. So Big Table is kind of the internal name of this storage technology that Google uses for the overall search technology. The data store is essentially an interface by which you can -- or really internal Google or external folks can use App Engine to utilize this same data storage capacity. Now, Big Table is not a SQL database, it's kind of like a different animal. But it's designed in a way to have maximum scalability. And so in that sense if you learn how to work with the Big Table or essentially data store technologies, you can essentially design an app that has very -- a very scalable app, but it is different from your typical SQL database. >>: How about performance? Is it slower than [inaudible]. Chris Schalk: Whenever you do like a Google search, you're basically accessing the same infrastructure. So it seems to work okay for Google searches. Now, of course, there are -- and I did mention, there's followup information on how best to scale your data store usage or your apps that use data store. There is a -- I may not have included the link, but if you Google or use any search engine, a Google IO presentation that one of the guys who wrote the original data store API, he had some very good tips on how to write your most scalable applications. Again, that's a presentation that was given last year at Google IO, and I believe his name is Brett Slatkin [phonetic] was the guy who wrote that particular presentation. So it gives some good advice on how to write scalable applications that can have essentially maximum performance. Yes? >>: If I have a very CPU intensive application like a video encoder or something like that, is Google App Engine for me or should I go down this tack Amazon or someplace? Chris Schalk: You can use it. Probably I would say you can try out either one and see what works out. As I mentioned, since Google App Engine is so easy to get started, you can always prototype and see if it works. CPU intensive stuff will -- you do have a quota on CPU usage for your free usage. But if you still are able to find out or process enough without even running into the billing threshold, then that might be helpful at least for getting started. But, yeah, you can do it, but you will at some point, if you're doing really high amounts of CPU processing, run into the threshold where you'll need to decide if you want to turn on billing to continue to process your server code. >>: A completely different question. I couldn't help notice that one of your presentation was for a VC company on your folder. What kind of comments do you get from these people? I mean, this is basically innovation platforms, what you're doing. Chris Schalk: So what kind of -- so ->>: What kind of comments do you get from VCs or -Chris Schalk: Well, so just to -- yeah, so we typically will give presentations to a wide array of companies, whether they're large or small, and, yeah, VCs are definitely in the mix there. The comments from them -- sometimes I would say the VC community is not quite aware of this technology because a lot of times they're dealing more on the -- well, or the other thing that -- and this is something that I'm pushing for at Google is that we tend to be pretty good at reaching out to the massive develops, but we don't quite give, like, higher-level white paper type of content out there just yet. But we're working to address that as well. So that way we're also reaching out to the folks who are not in the trenches writing every single line of code, but we're also providing kind of the higher-level architectural -- you know, key points of these specifically technologies and how you might use them in different capacities together or even alone. But, yeah, the VC community I would say in general probably are not fully aware of the nitty-gritty stuff that we tend to post. And so they are sometimes surprised at some of the stuff that you can do with that [inaudible] as well as some of the other Google APIs and technologies. Yes. You have a question back there? >>: So I wondered if you supported MapReduce. Chris Schalk: Yeah, that's a fairly common request, and I don't know if -- I don't think I can comment publicly, but we're definitely aware of it. Yeah, we're definitely aware of it. So, yeah -- like I said, we've got a whole pipeline of stuff that we're working on, things like that. >>: [inaudible]. Chris Schalk: We'll see. >>: Hi. When you mentioned the infrastructure, you mentioned there's support for images memcached, several other services, but I missed video, audio and streaming data. Chris Schalk: That can be handled by blob storage. So there's a blob store. And that was a service that got turned on not too long ago. But, yeah, you can use -- you can handle really any kind of media types using that particular service there. >>: Hi. Two questions, actually. One is what is the kind of integration with the Android platform? I mean, if you wanted something to seamlessly migrate between the two. And the second one would be what if you wanted to have some interaction with, like, some third-party server or service? How do you do that? Chris Schalk: So those are two very typical questions or two typical usage patterns that we noticed. The first one with Android or, in general, any mobile platform. Is there a specific linkage between App Engine and Android? Not really. I mean, it doesn't really matter in the sense that you could create, say, a back-end server for a mobile app that's run Android and it would be just be interfacing via simple url fetches just simple http gets and so forth. And that same App Engine back end could also serve as a back end for a mobile app that's run on an iPhone or really any kind of other front-end technology. Now, the second question -- what was the second question again? >>: [inaudible]. >>: Oh, yeah, third parties. That's also fairly common. And one of the things that we even mention is that if you're already using, say, S3 or various other types of services out there, we don't really have any qualms about you mixing and matching and just trying out what works. So if you already have existing cloud services fully engaged and doing stuff, there's really no issue from Google's standpoint whether you want to kind of mix and match or have kind of like a heterogenous type of architecture that does utilize that. And actually a good number of our customers, partners, do have a fairly diverse overall architectural platform that tends to use a combination of these things. >>: But are there tools in the actual App Engine to do that, let's say to make a call to a completely remote service -Chris Schalk: Well, like url fetch would be, like, a pretty typical service that you would use for that kind of interaction. I did mention, like, straight JDVC type or, like, socket-type communication is not there today. Mainly that's a design consideration for scalability. But, yeah, just so you're also aware of that. >>: So I guess I'll ask another question. You are a little out of sync with Jango in the Python version. How fast could you put the most recent versions of Jango for the Python version? Chris Schalk: [inaudible]. >>: Well, we can use your mic. Chris Schalk: So as you can tell, I'm a little bit more on the Java side, but I like Python just as well. I just haven't gone through the process of flipping the Jango templating support. But there's a url. I think it was an online tutorial. I think Guido -- you know, Guido, the ->>: [inaudible]. Chris Schalk: Oh, that particular one is out of assigning? Okay. Well, that's good to know. I'm mention it to them next time I see it. Yeah, okay. How old is the ->>: [inaudible]. Chris Schalk: Okay. Okay. I'll definitely let our guys know about it to see what the latest is on that on updating that. So anyway, is that -- any other questions? Cool. Well, thanks a lot for being a nice audience. [applause]