<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: AppEngine doesn&#8217;t fit the needs of startups on the runway</title>
	<atom:link href="http://www.threeriversinstitute.org/blog/?feed=rss2&#038;p=226" rel="self" type="application/rss+xml" />
	<link>http://www.threeriversinstitute.org/blog/?p=226</link>
	<description>Thoughts on programming</description>
	<lastBuildDate>Thu, 29 Jul 2010 21:19:43 -0400</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Desktop Mashups: Closing the Gap Between the Web and the Desktop &#171; PubNotes</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-647</link>
		<dc:creator>Desktop Mashups: Closing the Gap Between the Web and the Desktop &#171; PubNotes</dc:creator>
		<pubDate>Tue, 09 Jun 2009 03:26:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-647</guid>
		<description>[...] profile to Facebook without manually retyping everything.&#8221; Another report entitled &#8220;AppEngine doesn’t fit the needs of startups on the runway&#8221; described how limited data access made impossible to run a statistical analysis of the user [...]</description>
		<content:encoded><![CDATA[<p>[...] profile to Facebook without manually retyping everything.&#8221; Another report entitled &#8220;AppEngine doesn’t fit the needs of startups on the runway&#8221; described how limited data access made impossible to run a statistical analysis of the user [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: KentBeck</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-645</link>
		<dc:creator>KentBeck</dc:creator>
		<pubDate>Mon, 08 Jun 2009 06:57:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-645</guid>
		<description>To learn AppEngine&#039;s database I worked through http://code.google.com/appengine/docs/java/datastore/ several times. I&#039;d read it through, add a little functionality, read it again, add a little more. Also, I found the local testing mode helpful for speeding up the learning cycle, especially when used with TDD. Copying from code that was out there in bits and pieces, I use this fixture to write tests that can read and write data:

	   &lt;code&gt;@Before
	    public void setUp() throws Exception {
	        ApiProxy.setEnvironmentForCurrentThread(new TestEnvironment());
	        ApiProxy.setDelegate(new ApiProxyLocalImpl(new File(&quot;.&quot;)){});
	        ApiProxyLocalImpl proxy = (ApiProxyLocalImpl) ApiProxy.getDelegate();
	        proxy.setProperty(LocalDatastoreService.NO_STORAGE_PROPERTY, Boolean.TRUE.toString());
	   }

	    @After
	    public void tearDown() throws Exception {
	        ApiProxyLocalImpl proxy = (ApiProxyLocalImpl) ApiProxy.getDelegate();
	        LocalDatastoreService datastoreService = (LocalDatastoreService) proxy.getService(&quot;datastore_v3&quot;);
	        datastoreService.clearProfiles();
	        ApiProxy.setDelegate(null);
	        ApiProxy.setEnvironmentForCurrentThread(null);
	    }&lt;/code&gt;</description>
		<content:encoded><![CDATA[<p>To learn AppEngine&#8217;s database I worked through <a href="http://code.google.com/appengine/docs/java/datastore/" rel="nofollow">http://code.google.com/appengine/docs/java/datastore/</a> several times. I&#8217;d read it through, add a little functionality, read it again, add a little more. Also, I found the local testing mode helpful for speeding up the learning cycle, especially when used with TDD. Copying from code that was out there in bits and pieces, I use this fixture to write tests that can read and write data:</p>
<p>	   <code>@Before<br />
	    public void setUp() throws Exception {<br />
	        ApiProxy.setEnvironmentForCurrentThread(new TestEnvironment());<br />
	        ApiProxy.setDelegate(new ApiProxyLocalImpl(new File(".")){});<br />
	        ApiProxyLocalImpl proxy = (ApiProxyLocalImpl) ApiProxy.getDelegate();<br />
	        proxy.setProperty(LocalDatastoreService.NO_STORAGE_PROPERTY, Boolean.TRUE.toString());<br />
	   }</p>
<p>	    @After<br />
	    public void tearDown() throws Exception {<br />
	        ApiProxyLocalImpl proxy = (ApiProxyLocalImpl) ApiProxy.getDelegate();<br />
	        LocalDatastoreService datastoreService = (LocalDatastoreService) proxy.getService("datastore_v3");<br />
	        datastoreService.clearProfiles();<br />
	        ApiProxy.setDelegate(null);<br />
	        ApiProxy.setEnvironmentForCurrentThread(null);<br />
	    }</code></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tahir Akram</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-644</link>
		<dc:creator>Tahir Akram</dc:creator>
		<pubDate>Mon, 08 Jun 2009 06:24:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-644</guid>
		<description>Hi Kent;

You discuss an area in your post that I am stuck on. I am fluent in web app development in Java. And I am evaluating GAE for my strt-up too. My choice for sticking with GAE is only its giving me managed hosting for some popular Java web frameworks (I will use Struts). I dont want to mess with a naked server and putty it all the day in solving configuration issues in my web app. So this my motivation behind thinking about GAE.

So far I have code some servlets in it to understand its environment. But most concerned are for me is DB. I am unable to find any Java code snippet about interacting with Database. They are not supporting relational database - that increases my concern about data. How I will see my data or as you said how I will run queries on it.

I will love to hear if you point me towards some better understanding of DB stuff. Is there any tutorial or some code snippet? 

Comments are welcomed.</description>
		<content:encoded><![CDATA[<p>Hi Kent;</p>
<p>You discuss an area in your post that I am stuck on. I am fluent in web app development in Java. And I am evaluating GAE for my strt-up too. My choice for sticking with GAE is only its giving me managed hosting for some popular Java web frameworks (I will use Struts). I dont want to mess with a naked server and putty it all the day in solving configuration issues in my web app. So this my motivation behind thinking about GAE.</p>
<p>So far I have code some servlets in it to understand its environment. But most concerned are for me is DB. I am unable to find any Java code snippet about interacting with Database. They are not supporting relational database &#8211; that increases my concern about data. How I will see my data or as you said how I will run queries on it.</p>
<p>I will love to hear if you point me towards some better understanding of DB stuff. Is there any tutorial or some code snippet? </p>
<p>Comments are welcomed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: KentBeck</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-641</link>
		<dc:creator>KentBeck</dc:creator>
		<pubDate>Sun, 07 Jun 2009 17:38:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-641</guid>
		<description>I&#039;m aware of EC2. It isn&#039;t the technology platform in AppEngine that forms the bottleneck, it&#039;s the difficulty in experimenting. 

Even Java isn&#039;t what I&#039;m looking for. What I&#039;d like is a maximum of 100MB of easily-persistable objects that can be programmed very flexibly and (because they are all in memory) very efficiently. Maybe JavaScript/V8 on the server and/or an in-memory version of Map/Reduce. I&#039;m afraid I&#039;m not terribly articulate about this, because it&#039;s just a feeling at this point. I&#039;ve been through this enough times to know that I may be just beginning to uncover something very interesting or not.

AppEngine does a brilliant job of its location on the scaling/flexibility tradeoff, I&#039;m just looking for different spot.</description>
		<content:encoded><![CDATA[<p>I&#8217;m aware of EC2. It isn&#8217;t the technology platform in AppEngine that forms the bottleneck, it&#8217;s the difficulty in experimenting. </p>
<p>Even Java isn&#8217;t what I&#8217;m looking for. What I&#8217;d like is a maximum of 100MB of easily-persistable objects that can be programmed very flexibly and (because they are all in memory) very efficiently. Maybe JavaScript/V8 on the server and/or an in-memory version of Map/Reduce. I&#8217;m afraid I&#8217;m not terribly articulate about this, because it&#8217;s just a feeling at this point. I&#8217;ve been through this enough times to know that I may be just beginning to uncover something very interesting or not.</p>
<p>AppEngine does a brilliant job of its location on the scaling/flexibility tradeoff, I&#8217;m just looking for different spot.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Spike Washburn</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-640</link>
		<dc:creator>Spike Washburn</dc:creator>
		<pubDate>Sun, 07 Jun 2009 03:05:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-640</guid>
		<description>Kent, I dropped you a tweet but wanted to explain in more detail...
Amazon EC2 is a very good option for building cloud-based scalable Java apps.  Raw EC2 is more complicated and more pricey than GAE, but more flexible and supports standard Java+DB apps. If you&#039;re looking for your &quot;lightning speed&quot; dev workflow, Stax.net is a Java Platform-as-a-Service for building and deploying apps on EC2 that provides Java developers with a similar create/dev/deploy workflow, but without many of the GAE restrictions.  Like GAE, Stax.net is still in beta, but you get a hefty load of EC2 goodness for free while you are building your apps.</description>
		<content:encoded><![CDATA[<p>Kent, I dropped you a tweet but wanted to explain in more detail&#8230;<br />
Amazon EC2 is a very good option for building cloud-based scalable Java apps.  Raw EC2 is more complicated and more pricey than GAE, but more flexible and supports standard Java+DB apps. If you&#8217;re looking for your &#8220;lightning speed&#8221; dev workflow, Stax.net is a Java Platform-as-a-Service for building and deploying apps on EC2 that provides Java developers with a similar create/dev/deploy workflow, but without many of the GAE restrictions.  Like GAE, Stax.net is still in beta, but you get a hefty load of EC2 goodness for free while you are building your apps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe Bowman</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-637</link>
		<dc:creator>Joe Bowman</dc:creator>
		<pubDate>Sat, 06 Jun 2009 11:46:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-637</guid>
		<description>I think you need to think outside of the box a little on this. You need to understand appengine is a bunch of servers that you can create java/python applications in, and it has a datastore backend. Most requests are done via HTTP. It also has time constraints for how long a request can run.

With these limitations in mind, you need to do some development in order to get at your data reliably.

First, since you&#039;re pulling logs, I assume you&#039;re using timestamps and trying to get information by date? Easy enough.

Make sure you model has the date as one of the fields so you can limit by date, and sort by time.

Generate a view that fetches x amount of requests, sorted by time, limit by date as a results array. You want to fetch x + 1and store as a field next (if it exists). Output the data in a format that can be parsed, say XML or JSON. 

On your server side, create a script that fetches results. If the next variable is passed then fetch again, except you want &gt;= or &lt;= (depending on your sort) for the timestamp in the &quot;next&quot; entry.

Your server side script can then keep fetching until next is not passed, and you have all your results.


I&#039;ve also used this method for deleting large amounts of data using javascript, where I set up a delete button that kicked off a javascript function that would keep requesting to delete until appengine told my script (based on logic I wrote) there were no more to delete.</description>
		<content:encoded><![CDATA[<p>I think you need to think outside of the box a little on this. You need to understand appengine is a bunch of servers that you can create java/python applications in, and it has a datastore backend. Most requests are done via HTTP. It also has time constraints for how long a request can run.</p>
<p>With these limitations in mind, you need to do some development in order to get at your data reliably.</p>
<p>First, since you&#8217;re pulling logs, I assume you&#8217;re using timestamps and trying to get information by date? Easy enough.</p>
<p>Make sure you model has the date as one of the fields so you can limit by date, and sort by time.</p>
<p>Generate a view that fetches x amount of requests, sorted by time, limit by date as a results array. You want to fetch x + 1and store as a field next (if it exists). Output the data in a format that can be parsed, say XML or JSON. </p>
<p>On your server side, create a script that fetches results. If the next variable is passed then fetch again, except you want &gt;= or &lt;= (depending on your sort) for the timestamp in the &#8220;next&#8221; entry.</p>
<p>Your server side script can then keep fetching until next is not passed, and you have all your results.</p>
<p>I&#8217;ve also used this method for deleting large amounts of data using javascript, where I set up a delete button that kicked off a javascript function that would keep requesting to delete until appengine told my script (based on logic I wrote) there were no more to delete.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: William Shields</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-636</link>
		<dc:creator>William Shields</dc:creator>
		<pubDate>Sat, 06 Jun 2009 10:42:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-636</guid>
		<description>I too was going to ask whether in-memory caching (namely memcache) would help with the data traversal and time limit problems. Memcache isn&#039;t as sophisticated as, say, Oracle Coherence but it&#039;s better than the quite limited persistence layer that GAE has with DataNucleus.</description>
		<content:encoded><![CDATA[<p>I too was going to ask whether in-memory caching (namely memcache) would help with the data traversal and time limit problems. Memcache isn&#8217;t as sophisticated as, say, Oracle Coherence but it&#8217;s better than the quite limited persistence layer that GAE has with DataNucleus.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Vydra</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-633</link>
		<dc:creator>David Vydra</dc:creator>
		<pubDate>Sat, 06 Jun 2009 04:47:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-633</guid>
		<description>Kent,

You comment about having an image in the cloud made me think that my attempt to run Scala compiler inside the GAE Servlet is not just for building an educational site - http://github.com/vydra/gae-scala/tree/master</description>
		<content:encoded><![CDATA[<p>Kent,</p>
<p>You comment about having an image in the cloud made me think that my attempt to run Scala compiler inside the GAE Servlet is not just for building an educational site &#8211; <a href="http://github.com/vydra/gae-scala/tree/master" rel="nofollow">http://github.com/vydra/gae-scala/tree/master</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sri Panyam</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-632</link>
		<dc:creator>Sri Panyam</dc:creator>
		<pubDate>Sat, 06 Jun 2009 04:29:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-632</guid>
		<description>Hi,

    For doing adhoc quries you could use the remote api.  The time limit does not apply here.  (But the limits on queru length and offsets unfortunately do - unless you want to resort to custom orderable keys - another huge pain).  However, the biggest annoyances I am facing is clearing of the production server.  Takes a good couple of days to erase the entire DB.  No body has been able to tell me why this has to be the case.  Why cant there be a simple clear switch?

cheers
Sro</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>    For doing adhoc quries you could use the remote api.  The time limit does not apply here.  (But the limits on queru length and offsets unfortunately do &#8211; unless you want to resort to custom orderable keys &#8211; another huge pain).  However, the biggest annoyances I am facing is clearing of the production server.  Takes a good couple of days to erase the entire DB.  No body has been able to tell me why this has to be the case.  Why cant there be a simple clear switch?</p>
<p>cheers<br />
Sro</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James Abley</title>
		<link>http://www.threeriversinstitute.org/blog/?p=226&#038;cpage=1#comment-627</link>
		<dc:creator>James Abley</dc:creator>
		<pubDate>Fri, 05 Jun 2009 19:40:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.threeriversinstitute.org/blog/?p=226#comment-627</guid>
		<description>Doh - didn&#039;t refresh before I posted the previous comment!</description>
		<content:encoded><![CDATA[<p>Doh &#8211; didn&#8217;t refresh before I posted the previous comment!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
