<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>techno.blog(&#34;Dion&#34;) &#187; appengine</title>
	<atom:link href="http://almaer.com/blog/tag/appengine/feed" rel="self" type="application/rss+xml" />
	<link>http://almaer.com/blog</link>
	<description>blogging about life, the universe, and everything tech</description>
	<lastBuildDate>Tue, 28 Aug 2012 14:41:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Addressbook History goes into the cloud with App Engine</title>
		<link>http://almaer.com/blog/addressbook-history-goes-into-the-cloud-with-app-engine</link>
		<comments>http://almaer.com/blog/addressbook-history-goes-into-the-cloud-with-app-engine#comments</comments>
		<pubDate>Tue, 17 Jun 2008 18:08:38 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[appengine]]></category>

		<guid isPermaLink="false">http://almaer.com/blog/addressbook-history-goes-into-the-cloud-with-app-engine</guid>
		<description><![CDATA[I recently built an example of the Form History Pattern using an Addressbook case study.
I found myself talking about App Engine on the On Air tour, so I decided to change the example to not store the data locally with Gears, but instead to save it away into the cloud via App Engine.

Why did people [...]]]></description>
			<content:encoded><![CDATA[<p>I recently built an example of the Form History Pattern using an <a href="http://ajaxian.com/archives/addressbook-an-example-of-the-form-history-pattern">Addressbook</a> case study.</p>
<p>I found myself talking about App Engine on the <a href="http://onair.adobe.com/">On Air</a> tour, so I decided to change the example to not store the data locally with Gears, but instead to save it away into the cloud via App Engine.</p>
<p><img src='http://almaer.com/blog/uploads/app-engine-on-air-munich006-002.jpg' alt='RIBs' border='0'/></p>
<p>Why did people want to hear about App Engine at an Adobe conference? I think that Jonathan Schwartz got it when he mentioned <a href="http://blogs.sun.com/jonathan/entry/rocking_the_free_world">rich internet back-ends</a>. As you build rich clients, you suddenly realise that the promised benefits of web services can kick into gear nicely.</p>
<p><img src='http://almaer.com/blog/uploads/app-engine-on-air-munich021-001.jpg' alt='Addressbook Services' border='0'/></p>
<p>Back to the sample. The architecture change was quite simple. Where I was doing a local DB save, I would call a back-end service such as <code>/loadcontacts</code> or <code>/savecontact</code> depending on the task.</p>
<p>You can view and download the <a href="http://code.google.com/p/google-ajax-examples/source/browse/trunk/addressbook/appengine/">full App Engine project code</a> for this sample, and you can <a href="http://addressbookhistory.appspot.com/">see it running live on App Engine</a></p>
<p>Check out the video below, <a href="http://www.youtube.com/watch?v=nwn3YY6cyEQ&#038;fmt=6">or view the high quality version (recommended)</a> to see the code walk through, and the various tools that App Engine gives you to develop, debug, and monitor your application running at a few thousand feet. </p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/nwn3YY6cyEQ&#038;hl=en"></param><embed src="http://www.youtube.com/v/nwn3YY6cyEQ&#038;hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/addressbook-history-goes-into-the-cloud-with-app-engine/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>smtp2web.com: Bridge SMTP to HTTP; Let App Engine accept Email</title>
		<link>http://almaer.com/blog/smtp2webcom-bridge-smtp-to-http-let-app-engine-accept-email</link>
		<comments>http://almaer.com/blog/smtp2webcom-bridge-smtp-to-http-let-app-engine-accept-email#comments</comments>
		<pubDate>Tue, 10 Jun 2008 16:41:50 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://almaer.com/blog/smtp2webcom-bridge-smtp-to-http-let-app-engine-accept-email</guid>
		<description><![CDATA[Nick Johnson, of Google, has created a nice bridge service smtp2web.com: Allow App Engine apps to receive email.
This is perfect timing, as after my App Engine talk in Prague, a nice gent came up to me and asked for just this. He wanted to process email in his application and didn&#8217;t think he could.

One shortcoming [...]]]></description>
			<content:encoded><![CDATA[<p>Nick Johnson, of Google, has created a nice bridge service <a href="http://groups.google.com/group/google-appengine/browse_thread/thread/7f48e15a7cedafa6">smtp2web.com: Allow App Engine apps to receive email</a>.</p>
<p>This is perfect timing, as after my App Engine talk in Prague, a nice gent came up to me and asked for just this. He wanted to process email in his application and didn&#8217;t think he could.</p>
<blockquote><p>
One shortcoming of purely HTTP-based webapps such as App Engine is<br />
that they can&#8217;t receive email. I know that some people are wanting to<br />
create App Engine apps that do this, so I put together a service to<br />
facilitate this. It runs as a standard SMTP server, and sends all the<br />
email it receives via HTTP POST to a user-designated URL. It&#8217;s free to<br />
use (but <a href="http://www.smtp2web.com/about">not to abuse</a>)
</p></blockquote>
<p>To use the service, you setup an email account (say dalmaer@smtp2web.com) and a URL to point too. Of course, if you want an email on your own domain you could alias dalmaer@yourdomain.com to dalmaer@smtp2web.com).</p>
<p>Then, you would configure an App Engine controller to receive the email contents:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">ext</span> <span style="color: #ff7700;font-weight:bold;">import</span> webapp
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">email</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> EmailHandler<span style="color: black;">&#40;</span>webapp.<span style="color: black;">RequestHandler</span><span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">def</span> post<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    sender = <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">GET</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;from&quot;</span>, <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
    recipient = <span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">GET</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;to&quot;</span>, <span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
    message = <span style="color: #dc143c;">email</span>.<span style="color: black;">message_from_string</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">request</span>.<span style="color: black;">body</span><span style="color: black;">&#41;</span>
    <span style="color: #808080; font-style: italic;"># Do stuff with the email message</span></pre></div></div>

<p>The code for the service has also been <a href="http://code.google.com/p/smtp2web/">released as open source on Google Code</a> so you can check it out. You will find that it runs as a Twisted application:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">application</span> <span style="color: #ff7700;font-weight:bold;">import</span> service
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">application</span> <span style="color: #ff7700;font-weight:bold;">import</span> internet
<span style="color: #ff7700;font-weight:bold;">from</span> twisted.<span style="color: black;">enterprise</span> <span style="color: #ff7700;font-weight:bold;">import</span> adbapi
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> smtp2web
&nbsp;
application = service.<span style="color: black;">Application</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;smtp2web Service&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
settings = smtp2web.<span style="color: black;">Settings</span><span style="color: black;">&#40;</span>secret_key=<span style="color: #483d8b;">&quot;&lt;enter secret key here&gt;&quot;</span>,
                             state_file=<span style="color: #483d8b;">&quot;state&quot;</span>, master_host=<span style="color: #483d8b;">&quot;localhost:8081&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
smtpServerFactory = smtp2web.<span style="color: black;">ESMTPFactory</span><span style="color: black;">&#40;</span>settings<span style="color: black;">&#41;</span>
smtpServerService = internet.<span style="color: black;">TCPServer</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2025</span>, smtpServerFactory<span style="color: black;">&#41;</span>
smtpServerService.<span style="color: black;">setServiceParent</span><span style="color: black;">&#40;</span>application<span style="color: black;">&#41;</span></pre></div></div>

<p>Thanks for doing this Nick!</p>
<p><em>NOTE: <a href="http://mailhook.org/">Mailhook</a> is another service (pay) that does something similar</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/smtp2webcom-bridge-smtp-to-http-let-app-engine-accept-email/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Keys to the Google App Engine</title>
		<link>http://almaer.com/blog/keys-to-the-google-app-engine</link>
		<comments>http://almaer.com/blog/keys-to-the-google-app-engine#comments</comments>
		<pubDate>Mon, 14 Apr 2008 23:42:22 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Comic]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[appengine]]></category>

		<guid isPermaLink="false">http://almaer.com/blog/keys-to-the-google-app-engine</guid>
		<description><![CDATA[
It was quite fun to see, right after Tim O&#8217;Reilly pondered the lock in strategy for App Engine, that Chris Anderson posted that he had ported the SDK to App Drop.
Now, there are some concerns here as the SDK itself isn&#8217;t built for performance, security, etc&#8230;. but this is a great start in a very [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://almaer.com/blog/category/comic"><img src='http://almaer.com/blog/uploads/appenginelocks.png' alt='App Engine Locks' border='0'/></a></p>
<p>It was quite fun to see, <a href="http://radar.oreilly.com/archives/2008/04/is-google-app-engine-a-lockin.html">right after Tim O&#8217;Reilly pondered the lock in strategy for App Engine</a>, that Chris Anderson posted that he had <a href="http://appdrop.com/">ported the SDK to App Drop</a>.</p>
<p>Now, there are some concerns here as the SDK itself isn&#8217;t built for performance, security, etc&#8230;. but this is a great start in a very short period of time, and it shows where people can take it. </p>
<p>Waxy has a good <a href="http://waxy.org/2008/04/exclusive_google_app_engine_ported_to_amazons_ec2/">write up</a>:</p>
<blockquote><p>
This proof-of-concept was built in only four days and can be deployed in virtually any Linux/Unix hosting environment, showing that moving applications off Google&#8217;s servers isn&#8217;t as hard as everyone thought.</p>
<p>How does it work?  Behind the scenes, AppDrop is simply a remote installation of the App Engine SDK, with the user authentication and identification modified to use a local silo instead of Google Accounts.  As a result, any application that works with the App Engine SDK should work flawlessly on AppDrop.  For example, here&#8217;s Anderson&#8217;s <a href="http://fug-this.appspot.com/">Fug This application</a> running on Google App Engine and the <a href="http://fug-this.appdrop.com/">identical code running on EC2</a> at AppDrop. </p>
<p>Of course, this simple portability comes at the cost of scalability.  The App Engine SDK doesn&#8217;t use BigTable for its datastore, instead relying on a simple flat file on a single server.  This means issues with performance and no scalabity to speak of, but for apps with limited resource needs, something as simple as AppDrop would work fine.
</p></blockquote>
<p>Chris said: &#8220;It wouldn&#8217;t be hard for a competent hacker to add real database support. It wouldn&#8217;t be that hard to write a Python adapter to MySQL that would preserve the BigTable API. And while that wouldn&#8217;t be quite as scalable as BigTable, we&#8217;ve all seen that MySQL can take you pretty far. On top of that, you could add multiple application machines connecting to the central database, and load-balancing, and all that rigamarole.&#8221;</p>
<p>And for data, you can write built-in services that export your data from the store.</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/keys-to-the-google-app-engine/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Google App Recruiting Engine</title>
		<link>http://almaer.com/blog/google-app-recruiting-engine</link>
		<comments>http://almaer.com/blog/google-app-recruiting-engine#comments</comments>
		<pubDate>Fri, 11 Apr 2008 20:56:54 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Comic]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[appengine]]></category>

		<guid isPermaLink="false">http://almaer.com/blog/google-app-recruiting-engine</guid>
		<description><![CDATA[
I have to admit, that as someone on the inside it is nice to see the Google App Engine out there as a way to show some of the way in which we do things, especially scale.
One big difference you will see is the lack of a RDBMS, and instead with Bigtable, you build models [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://almaer.com/blog/category/comic"><img src='http://almaer.com/blog/uploads/googleapprecruiting.png' alt='Google App Recruiting Engine' border='0'/></a></p>
<p>I have to admit, that as someone on the inside it is nice to see the <a href="http://code.google.com/appengine/">Google App Engine</a> out there as a way to show some of the way in which we do things, especially scale.</p>
<p>One big difference you will see is the lack of a RDBMS, and instead with <a href="http://code.google.com/appengine/docs/datastore/">Bigtable</a>, you build models that you can do cool things with such as <a href="http://code.google.com/appengine/docs/datastore/expandoclass.html">Expando</a>. Being able to add data elements as you iterate is very nice indeed, and beats SQL land, even with migrations and such.</p>
<p>Now when a new engineer comes to Google, they won&#8217;t have to entirely swallow a big red pill, as they may have gobbled a little of it already.</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/google-app-recruiting-engine/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>App Engine with Ruby, Python, and Perl</title>
		<link>http://almaer.com/blog/app-engine-with-ruby-python-and-perl</link>
		<comments>http://almaer.com/blog/app-engine-with-ruby-python-and-perl#comments</comments>
		<pubDate>Thu, 10 Apr 2008 15:43:22 +0000</pubDate>
		<dc:creator>dion</dc:creator>
				<category><![CDATA[Comic]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[appengine]]></category>

		<guid isPermaLink="false">http://almaer.com/blog/app-engine-with-ruby-python-and-perl</guid>
		<description><![CDATA[
Since I am still in London, my sarcasm quotient extends just a little more than usual (it&#8217;s pretty high in the US to start with, even if it is the &#8220;lowest form of humour&#8221;).
I had a fair amount of email from people, and saw some blogs, complaining about the fact that Google App Engine currently [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://almaer.com/blog/category/comic"><img src='http://almaer.com/blog/uploads/appenginerbpypl.png' alt='App Engine with Ruby, Python, and Perl' border='0'/></a></p>
<p>Since I am still in London, my sarcasm quotient extends just a little more than usual (it&#8217;s pretty high in the US to start with, even if it is the &#8220;lowest form of humour&#8221;).</p>
<p>I had a fair amount of email from people, and saw some blogs, complaining about the fact that Google App Engine currently supports Python only. On the video, and in the docs, it is frequently mentioned that other languages are to come, and that the infrastructure itself is language neutral. We have to start somewhere!</p>
<p>I personally have a slight Ruby preference, but there is a funny thing about Python. Hardly anyone really hates it. It may not be the language of choice for many people, but a lot of people are telling me:</p>
<ul>
<li>Ah, was hoping to try more Python</li>
<li>I was looking for an excuse to code a Django app</li>
<li>I can deal with that. Thank god you didn&#8217;t force Java</li>
</ul>
<p>This is a little like the iPhone SDK being Objective-C. People are picking it up. I think this happens then your desire to play with the new toy is greater than your religion!</p>
<p>I am very excited to see more languages and features on Google App Engine, but I know that I just have to be a bit patient, and in the meantime, I had been looking for an excuse to code a Django app.</p>
]]></content:encoded>
			<wfw:commentRss>http://almaer.com/blog/app-engine-with-ruby-python-and-perl/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
