<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>boodebr sandbox</title>
        <link></link>
        <description>App Engine samples and tutorials from boodebr.org</description>
        <lastBuildDate>Sun, 03 Aug 2008 13:36:00 +0000</lastBuildDate>
        <generator>WikklyText 1.3.4-WIP</generator>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
        <atom:link href="/rss.xml" rel="self" type="application/rss+xml" />        <item>
            <title>InstallSdk</title>
            <link>InstallSdk.html</link>
            <description><![CDATA[<ul class="wikkly-ul"><li class="wikkly-ul-li1">Install <a title="Link to http://www.python.org" class="wikkly-a-www" href="http://www.python.org/download/releases/2.5.2/" target="_blank">Python 2.5</a> if you don't already have it. </li><li class="wikkly-ul-li1">Install the <a title="Link to http://code.google.com" class="wikkly-a-www" href="http://code.google.com/appengine/downloads.html" target="_blank">AppEngine SDK</a> (<i class="">last tested with version <b class="">1.1.1</b>)</i><br/> <i class="">You <b class="">do not</b> need a Google App Engine account to begin developing and running your own apps locally.</i><br/><br/></li></ul>

<div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/embed.js"></script><noscript><a href="http://boodebr-appspot.disqus.com/?url=ref">View the forum thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>

<script type="text/javascript">
//<[CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]&#x220b;>
</script>

 ]]></description>
            <guid isPermaLink="false">c01b5e02dec16e885ac7c61faf13c0ec2463db31</guid>
            <pubDate>Sun, 03 Aug 2008 13:36:00 +0000</pubDate>
        </item>
        <item>
            <title>Welcome</title>
            <link>Welcome.html</link>
            <description><![CDATA[Hello, this is a little "sandbox" site that I'm using for development and experimentation with <a title="Link to http://code.google.com" class="wikkly-a-www" href="http://code.google.com/appengine/" target="_blank">Google's App Engine</a> platform. My primary focus will be on building applications using the low-level features of the <a title="Link to http://code.google.com" class="wikkly-a-www" href="http://code.google.com/appengine/docs/" target="_blank">App Engine API</a>, not a prebuilt framework. This site is very much a work in progress. If you'd like to keep up to date on the latest changes as it grows, subscribe to the <a title="rss.xml" class="wikkly-a-internal" href="rss.xml" >RSS feed</a> <img class="wikkly-img" src="files/feed-icon-14x14.png"> <br/><br/><div class="wikkly-notebox" >You can now leave comments on most pages. This is an experimental feature.</div><br/><br/>Tutorials: <ul class="wikkly-ul"><li class="wikkly-ul-li1"><a title="AccountSetup.html" class="wikkly-a-internal" href="AccountSetup.html" >AccountSetup</a>: A walkthrough of setting up your <a title="AppEngine.html" class="wikkly-a-internal" href="AppEngine.html" >AppEngine</a> account. </li><li class="wikkly-ul-li1"><a title="InstallSdk.html" class="wikkly-a-internal" href="InstallSdk.html" >InstallSdk</a>: Setup your local machine with the <a title="AppEngine.html" class="wikkly-a-internal" href="AppEngine.html" >AppEngine</a> development environment. </li><li class="wikkly-ul-li1"><a title="StaticContent.html" class="wikkly-a-internal" href="StaticContent.html" >StaticContent</a>: Lets get started with some nice static content. </li><li class="wikkly-ul-li1"><a title="HelloWorld.html" class="wikkly-a-internal" href="HelloWorld.html" >HelloWorld</a>: The simplest possible <a title="AppEngine.html" class="wikkly-a-internal" href="AppEngine.html" >AppEngine</a> application </li><li class="wikkly-ul-li1"><a title="EnvironmentInfo.html" class="wikkly-a-internal" href="EnvironmentInfo.html" >EnvironmentInfo</a>: A verbose look at the information we receive from the CGI environment. </li><li class="wikkly-ul-li1"><a title="LoginDemo.html" class="wikkly-a-internal" href="LoginDemo.html" >LoginDemo</a>: An example of letting a user login (with their Google account) and storing some persistent data for the user. </li><li class="wikkly-ul-li1"><a title="UrlDemo.html" class="wikkly-a-internal" href="UrlDemo.html" >UrlDemo</a>: A demo of handling URLs and query strings. </li><li class="wikkly-ul-li1"><a title="SessionDemo.html" class="wikkly-a-internal" href="SessionDemo.html" >SessionDemo</a>: A demo of session handling. Completely independent of user logins so works for guest users as well as those with Google accounts. </li></ul>]]></description>
            <guid isPermaLink="false">c0a2ed799374160351b50c9c5bda5ebaeb8b9d73</guid>
            <pubDate>Fri, 18 Jul 2008 01:00:00 +0000</pubDate>
        </item>
        <item>
            <title>LoginDemo</title>
            <link>LoginDemo.html</link>
            <description><![CDATA[ This sample demonstrates the <a title="Link to http://code.google.com" class="wikkly-a-internal" href="http://code.google.com/appengine/docs/users/" >Users API</a>. This API allows users to login to your website with their Google account. The demo shows two basic ideas: <ul class="wikkly-ul"><li class="wikkly-ul-li1">Allowing a user to login and logout </li><li class="wikkly-ul-li1">Storing some data along with the user, as you would do in a typical application.<br/><br/></li></ul>View the <a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/logindemo" >demo here</a> and the <a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/logindemo/source" >source code</a>.<br/><br/>

<div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/embed.js"></script><noscript><a href="http://boodebr-appspot.disqus.com/?url=ref">View the forum thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>

<script type="text/javascript">
//<[CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]&#x220b;>
</script>

 ]]></description>
            <guid isPermaLink="false">397e9006115e301c64b28154ae230bb3242bd730</guid>
            <pubDate>Fri, 18 Jul 2008 00:58:00 +0000</pubDate>
        </item>
        <item>
            <title>HelloWorld</title>
            <link>HelloWorld.html</link>
            <description><![CDATA[ Now its time to try our first bit of dynamic content. Here is the simplest possible "hello world" application. Note that this is a plain WSGI application - it neither knows no cares that it is running under <a title="AppEngine.html" class="wikkly-a-internal" href="AppEngine.html" >AppEngine</a>!<br/><br/>Create <b class="">hello/hello.py</b>: <div class="wikkly-code-block">#&nbsp;straight&nbsp;out&nbsp;of&nbsp;PEP&nbsp;333&nbsp;(http://www.python.org/dev/peps/pep-0333/)<br/>def&nbsp;simple_app(environ,&nbsp;start_response):<br/>&nbsp;&nbsp;&nbsp;&nbsp;"Simplest&nbsp;possible&nbsp;application&nbsp;object"<br/>&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;=&nbsp;'200&nbsp;OK'<br/>&nbsp;&nbsp;&nbsp;&nbsp;response_headers&nbsp;=&nbsp;[('Content-type','text/plain')]<br/>&nbsp;&nbsp;&nbsp;&nbsp;start_response(status,&nbsp;response_headers)<br/>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;['Hello&nbsp;from&nbsp;CGI&nbsp;Handler!\n']<br/><br/>#&nbsp;does&nbsp;not&nbsp;know&nbsp;nor&nbsp;care&nbsp;that&nbsp;it&nbsp;is&nbsp;running&nbsp;under&nbsp;AppEngine!<br/>from&nbsp;wsgiref.handlers&nbsp;import&nbsp;CGIHandler<br/>CGIHandler().run(simple_app)</div><br/><br/>Update <span class="wikkly-code-inline">app.yaml</span> and add: <div class="wikkly-code-block">-&nbsp;url:&nbsp;/hello.*<br/>&nbsp;&nbsp;script:&nbsp;hello/hello.py</div><br/><br/>Now try it out: <a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/hello" >http://boodebr.appspot.com/hello</a><br/><br/>Notice our simple application does not care what URL you pass to it, it always gives the sample result. For example: <a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/hello/a/b/c?q=123&z=789" >http://boodebr.appspot.com/hello/a/b/c?q=123&amp;z=789</a><br/><br/><br/><br/>

<div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/embed.js"></script><noscript><a href="http://boodebr-appspot.disqus.com/?url=ref">View the forum thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>

<script type="text/javascript">
//<[CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]&#x220b;>
</script>

 ]]></description>
            <guid isPermaLink="false">986a7c95caf600a4ef0e0cb01b301cdef9efd7ac</guid>
            <pubDate>Fri, 18 Jul 2008 00:58:00 +0000</pubDate>
        </item>
        <item>
            <title>SessionDemo</title>
            <link>SessionDemo.html</link>
            <description><![CDATA[ This demo performs simple session handling. No login is required so you can use this to manage session data for guest users as well as users with a Google account. The basic flow here is: <ul class="wikkly-ul"><li class="wikkly-ul-li1">Generate a session key for each new visitor. </li><li class="wikkly-ul-li1">Store session key in a cookie named "short-cookie". </li><li class="wikkly-ul-li1">Use the session key to load/store some user-specific data using the <a title="AppEngine.html" class="wikkly-a-internal" href="AppEngine.html" >AppEngine</a> memcache.<br/><br/></li></ul>For this demo, both the cookie and session data are set to expire in 60 seconds so you can see what happens.<br/><br/>View the demo: <a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/sessdemo" >http://boodebr.appspot.com/sessdemo</a> (<a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/sessdemo/source" >source code</a>)<br/><br/>

<div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/embed.js"></script><noscript><a href="http://boodebr-appspot.disqus.com/?url=ref">View the forum thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>

<script type="text/javascript">
//<[CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]&#x220b;>
</script>

 ]]></description>
            <guid isPermaLink="false">5bfb44dd0d80a074b49a44c565b43aa2b6cd0a0e</guid>
            <pubDate>Fri, 18 Jul 2008 00:57:00 +0000</pubDate>
        </item>
        <item>
            <title>StaticContent</title>
            <link>StaticContent.html</link>
            <description><![CDATA[To get started, I'm going to add some static content.<br/><br/>On my laptop, my development directory is <span class="wikkly-code-inline">c:\frank\src\gapp_boodebr</span>. I'll refer to this as the toplevel folder for brevity. Under that directory is a folder <span class="wikkly-code-inline">wiki</span> that holds the wiki content you are viewing now.<br/><br/>In the toplevel folder, I created <span class="wikkly-code-inline">app.yaml</span>: <div class="wikkly-codebox-container" ><div class="wikkly-codebox-title" >app.yaml</div><div class="wikkly-codebox-body" >application:&nbsp;boodebr<br/>version:&nbsp;1<br/>runtime:&nbsp;python<br/>api_version:&nbsp;1<br/><br/>handlers:<br/>-&nbsp;url:&nbsp;/wiki<br/>&nbsp;&nbsp;static_dir:&nbsp;wiki</div></div>  The key here is the <b class="">handlers</b> section where I tell the app engine to treat <span class="wikkly-code-inline">wiki\</span> as static content. That's it - no <span class="wikkly-tt">.py</span> files are required.<br/><br/>To test my app locally, I run: <div class="wikkly-code-block">cd&nbsp;c:\frank\src\gapp_boodebr<br/>dev_appserver.py&nbsp;.</div>  Viewing the results at <a title="Link to http://127.0.0.1:8080" class="wikkly-a-www" href="http://127.0.0.1:8080" target="_blank">http://127.0.0.1:8080</a><br/><br/>When happy with the results, I upload to App Engine: <div class="wikkly-code-block">appcfg.py&nbsp;update&nbsp;.</div><br/><br/>And voila, there it is: <a title="Link to http://boodebr.appspot.com" class="wikkly-a-www" href="http://boodebr.appspot.com/wiki/index.html" target="_blank">http://boodebr.appspot.com/wiki/index.html</a><br/><br/>
<div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/embed.js"></script><noscript><a href="http://boodebr-appspot.disqus.com/?url=ref">View the forum thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
<script type="text/javascript">
//<[CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]&#x220b;>
</script>

 ]]></description>
            <guid isPermaLink="false">53bb0f6757de721d0eb69d76108905e99ee8925b</guid>
            <pubDate>Fri, 18 Jul 2008 00:56:00 +0000</pubDate>
        </item>
        <item>
            <title>EnvironmentInfo</title>
            <link>EnvironmentInfo.html</link>
            <description><![CDATA[ When working in a new web environment, I like to explore the environment a little to discover any limitations that I may not have expected. For example, in certain environments you may discover some headers are missing, or there are extra environment variables that are useful to have.<br/><br/>For this sample, create a new folder <b class="">envinfo</b> and add <b class="">envinfo/envinfo.py</b>: <div class="wikkly-code-block">def&nbsp;env_app(environ,&nbsp;start_response):<br/>&nbsp;&nbsp;&nbsp;&nbsp;"Show&nbsp;environ&nbsp;verbosely"<br/>&nbsp;&nbsp;&nbsp;&nbsp;status&nbsp;=&nbsp;'200&nbsp;OK'<br/>&nbsp;&nbsp;&nbsp;&nbsp;response_headers&nbsp;=&nbsp;[('Content-type','text/plain')]<br/>&nbsp;&nbsp;&nbsp;&nbsp;start_response(status,&nbsp;response_headers)<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;'My&nbsp;environ&nbsp;is&nbsp;a&nbsp;%s\n'&nbsp;%&nbsp;type(environ)<br/>&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;+=&nbsp;'\nIt&nbsp;contains&nbsp;these&nbsp;key:value&nbsp;pairs:\n\n'<br/>&nbsp;&nbsp;&nbsp;&nbsp;keys&nbsp;=&nbsp;environ.keys()<br/>&nbsp;&nbsp;&nbsp;&nbsp;keys.sort()<br/>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k&nbsp;in&nbsp;keys:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;+=&nbsp;'%s:&nbsp;%s\n'&nbsp;%&nbsp;(k,environ[k])<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[h]<br/><br/>#&nbsp;does&nbsp;not&nbsp;know&nbsp;nor&nbsp;care&nbsp;that&nbsp;it&nbsp;is&nbsp;running&nbsp;under&nbsp;AppEngine!<br/>from&nbsp;wsgiref.handlers&nbsp;import&nbsp;CGIHandler<br/>CGIHandler().run(env_app)</div><br/><br/>Add to <b class="">app.yaml</b>: <div class="wikkly-code-block">-&nbsp;url:&nbsp;/envinfo.*<br/>&nbsp;&nbsp;script:&nbsp;envinfo/envinfo.py&nbsp;&nbsp;</div><br/><br/>Try it out: <a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/envinfo" >http://boodebr.appspot.com/envinfo</a><br/><br/>Notice how <span class="wikkly-code-inline">PATH_INFO</span> and <span class="wikkly-code-inline">QUERY_STRING</span> are set when you pass a longer URL:<br/> <a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/envinfo/a/b/c?qrs=abc+123%09456&tuv=43.234" >http://boodebr.appspot.com/envinfo/a/b/c?qrs=abc+123%09456&amp;tuv=43.234</a><br/><br/>

<div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/embed.js"></script><noscript><a href="http://boodebr-appspot.disqus.com/?url=ref">View the forum thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>

<script type="text/javascript">
//<[CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]&#x220b;>
</script>

 ]]></description>
            <guid isPermaLink="false">7da8d2f8615b5fa1d3c3cecdd065ba598ca4d545</guid>
            <pubDate>Fri, 18 Jul 2008 00:56:00 +0000</pubDate>
        </item>
        <item>
            <title>UrlDemo</title>
            <link>UrlDemo.html</link>
            <description><![CDATA[ This sample shows how to use the <span class="wikkly-code-inline">wsgiref.util</span> and <span class="wikkly-code-inline">cgi</span> modules to parse URLs and query strings. There is nothing specific to <a title="AppEngine.html" class="wikkly-a-internal" href="AppEngine.html" >AppEngine</a> in this sample.<br/><br/>Try it on some URLs:  <ul class="wikkly-ul"><li class="wikkly-ul-li1"><a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/urldemo" >http://boodebr.appspot.com/urldemo</a> </li><li class="wikkly-ul-li1"><a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/urldemo/aaa/bbb/ccc?qrs=abc+def%20ghi&tuv=%22%3c%5d" >http://boodebr.appspot.com/urldemo/aaa/bbb/ccc?qrs=abc+def%20ghi&amp;tuv=%22%3c%5d</a><br/><br/></li></ul>Here is the (<a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/urldemo/source" >source code</a>)<br/><br/>
<div id="disqus_thread"></div><script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/embed.js"></script><noscript><a href="http://boodebr-appspot.disqus.com/?url=ref">View the forum thread.</a></noscript><a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>
<script type="text/javascript">
//<[CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script type="text/javascript" src="http://disqus.com/forums/boodebr-appspot/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]&#x220b;>
</script>

 ]]></description>
            <guid isPermaLink="false">3d284d4c9aca4663d9e8d431deaa80813c650cdc</guid>
            <pubDate>Fri, 18 Jul 2008 00:55:00 +0000</pubDate>
        </item>
        <item>
            <title>AccountSetup</title>
            <link>AccountSetup.html</link>
            <description><![CDATA[To sign up for an App Engine account, visit <a title="Link to http://appengine.google.com" class="wikkly-a-www" href="http://appengine.google.com" target="_blank">http://appengine.google.com</a>. This will (currently) put you on a waiting list so you won't be able to move to the next step for a while.<br/><br/>Once your account is created, you'll receive an email from Google. Now when you visit <a title="Link to http://appengine.google.com" class="wikkly-a-www" href="http://appengine.google.com" target="_blank">http://appengine.google.com</a> you'll reach the Welcome screen:<br/><br/><span class="wikkly-outline"><img class="wikkly-img wikkly-outline" src="files/welcome-screen.png"></span><br/><br/>Clicking "Create Application" takes you to this screen:<br/><br/><span class="wikkly-outline"><img class="wikkly-img wikkly-outline" src="files/create-app-filled.png"></span><br/><br/>Be careful choosing an <b class="">Application Identifier</b> because you cannot change it. You can change the <b class="">Application Title</b> later (this is apparently only used when users login). The <b class="">Check Availability</b> button gives a quick way to see if your desired name is available. I left the <b class="">Authentication Options</b> set to the default.<br/><br/>Once you find a name you like and click <b class="">Save</b> you will see:<br/><br/><span class="wikkly-outline"><img class="wikkly-img wikkly-outline" src="files/create-app-ok.png"></span><br/><br/><br/>Now whenever you visit <a title="Link to http://appengine.google.com" class="wikkly-a-www" href="http://appengine.google.com" target="_blank">http://appengine.google.com</a> you will see your account(s) in the console view:<br/><br/><span class="wikkly-outline"><img class="wikkly-img wikkly-outline" src="files/gapp-main.png"></span><br/><br/>That's it! The hardest part is waiting for your account to be activated.<br/><br/>]]></description>
            <guid isPermaLink="false">c390c71b153da24bf6f94ab371a05309bbeee5ed</guid>
            <pubDate>Fri, 18 Jul 2008 00:33:00 +0000</pubDate>
        </item>
        <item>
            <title>InfoDump</title>
            <link>InfoDump.html</link>
            <description><![CDATA[ When working in a new web environment, I like to explore the environment a little to discover any limitations that I may not have expected. For example, in certain environments you may discover some headers are missing, or there are extra environment variables that are useful to have.<br/><br/>To create this example, I made a new subfolder <span class="wikkly-code-inline">infodump/</span> containing a single file <span class="wikkly-code-inline">info.py</span> (<a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/infodump/source" >source code</a>). To hook it into the site, I added the following to <span class="wikkly-code-inline">app.yaml</span>: <div class="wikkly-code-block">-&nbsp;url:&nbsp;/infodump.*<br/>&nbsp;&nbsp;script:&nbsp;infodump/info.py</div> <div class="wikkly-block-indent"> <i class="">Make sure to add this handler <b class="">before</b> the default handler at the bottom of the file.</i> </div>  <span class="wikkly-tt">info.py</span> defines two primary methods: <dl class="wikkly-dl"><dt class="wikkly-dt"><span class="wikkly-code-inline">index()</span> </dt><dd class="wikkly-dd">This method handles requests for <span class="wikkly-code-inline">/infodump</span> </dd><dt class="wikkly-dt"><span class="wikkly-code-inline">default()</span> </dt><dd class="wikkly-dd">This handles all other requests.<br/><br/></dd></dl>Here are two examples. The only difference between them is that in the second example the extra path and query will be shown as <span class="wikkly-code-inline">args</span> and <span class="wikkly-code-inline">kwargs</span> in the request table.<br/><br/><dl class="wikkly-dl"><dt class="wikkly-dt">Request for "/info" will be handled by <span class="wikkly-tt">index()</span> </dt><dd class="wikkly-dd"><a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/infodump" >http://boodebr.appspot.com/infodump</a><br/><br/></dd></dl><dl class="wikkly-dl"><dt class="wikkly-dt">This request will be handled by <span class="wikkly-tt">default()</span>. Notice that the <span class="wikkly-code-inline">args</span> and <span class="wikkly-code-inline">kwargs</span> will now be filled in the table </dt><dd class="wikkly-dd"><a title="Link to http://boodebr.appspot.com" class="wikkly-a-internal" href="http://boodebr.appspot.com/infodump/a/b/c?qA=AAA&qB=BBB" >http://boodebr.appspot.com/infodump/a/b/c?qA=AAA&amp;qB=BBB</a> </dd></dl>]]></description>
            <guid isPermaLink="false">7762e29845c019e96baaa829cf0af255bfac5458</guid>
            <pubDate>Sun, 06 Jul 2008 19:50:00 +0000</pubDate>
        </item>
        <item>
            <title>NotFullyWorking</title>
            <link>NotFullyWorking.html</link>
            <description><![CDATA[<div class="wikkly-warnbox-container" ><div class="wikkly-warnbox-title" >Not Working</div><div class="wikkly-warnbox-body" >I originally started out here using CherryPy. However, I discovered some showstopper issues along the way, so I stopped at least for now and switched to plain WSGI. Feel free to use these demos as a starting point if you wish.</div></div> <ul class="wikkly-ul"><li class="wikkly-ul-li1"><a title="InstallCherryPy.html" class="wikkly-a-internal" href="InstallCherryPy.html" >InstallCherryPy</a>: Include the CherryPy sources in your application tree. </li><li class="wikkly-ul-li1"><a title="InfoDump.html" class="wikkly-a-internal" href="InfoDump.html" >InfoDump</a>: Examining the host environment. </li></ul>]]></description>
            <guid isPermaLink="false">fef9d4c65f3c6334d781a04e18112ec7cfdd1519</guid>
            <pubDate>Sun, 06 Jul 2008 14:54:00 +0000</pubDate>
        </item>
        <item>
            <title>AppEngine</title>
            <link>AppEngine.html</link>
            <description><![CDATA[<a title="Link to http://code.google.com" class="wikkly-a-www" href="http://code.google.com/appengine/docs/" target="_blank">App Engine API</a>]]></description>
            <guid isPermaLink="false">6ba225a42b7f782bae6835ded598822728013c13</guid>
            <pubDate>Sun, 06 Jul 2008 13:49:00 +0000</pubDate>
        </item>
        <item>
            <title>InstallCherryPy</title>
            <link>InstallCherryPy.html</link>
            <description><![CDATA[<ul class="wikkly-ul"><li class="wikkly-ul-li1">Download <a title="Link to http://www.cherrypy.org" class="wikkly-a-www" href="http://www.cherrypy.org/wiki/CherryPyDownload" target="_blank">CherryPy</a> (<i class="">you need at least version <b class="">3.1.0</b></i>) </li><li class="wikkly-ul-li1">Unpack into your application folder, for example: <div class="wikkly-code-block">cd&nbsp;c:/frank/src/gapp_boodebr<br/>tar&nbsp;zxvf&nbsp;~/CherryPy-3.1.0.tar.gz</div> </li><li class="wikkly-ul-li1">Use the <span class="wikkly-code-inline">--prefix</span> option to install to application folder (not system wide): <div class="wikkly-code-block">cd&nbsp;CherryPy-3.1.0<br/>python&nbsp;setup.py&nbsp;install&nbsp;--prefix="c:\frank\src\gapp_boodebr"</div> </li><li class="wikkly-ul-li1">This doesn't place it exactly where I need it, so move it to the toplevel: <div class="wikkly-code-block">mv&nbsp;../Lib/site-packages/cherrypy/&nbsp;..</div> </li><li class="wikkly-ul-li1">And cleanup <div class="wikkly-code-block">cd&nbsp;..<br/>rm&nbsp;-rf&nbsp;CherryPy-3.1.0</div> </li></ul>]]></description>
            <guid isPermaLink="false">3b06fc2b757c1cfe9a1f370b7accfb0d177212af</guid>
            <pubDate>Sat, 05 Jul 2008 23:53:00 +0000</pubDate>
        </item>
        <item>
            <title>AboutTheseDocs</title>
            <link>AboutTheseDocs.html</link>
            <description><![CDATA[The documentation you are viewing was created using <a title="Link to http://wikklytext.com" class="wikkly-a-www" href="http://wikklytext.com" target="_blank">WikklyText</a>, a free set of Python wiki tools. Currently, this site is statically rendered offline and uploaded to appspot, instead of being a live wiki server.]]></description>
            <guid isPermaLink="false">e8c308abffa49c3f2ea63079a2403890994e469a</guid>
            <pubDate>Sun, 20 Apr 2008 02:50:00 +0000</pubDate>
        </item>
    </channel>
</rss>
