<?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: Google App Engine: To Django or to webapp?</title>
	<atom:link href="http://aralbalkan.com/1313/feed" rel="self" type="application/rss+xml" />
	<link>http://aralbalkan.com/1313</link>
	<description>Changing the world through technology and oratory.</description>
	<pubDate>Fri, 09 Jan 2009 23:14:43 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7-beta2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: luis</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-150365</link>
		<dc:creator>luis</dc:creator>
		<pubDate>Tue, 27 May 2008 03:16:14 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-150365</guid>
		<description>webapp is strikingly similar to webpy (even its name is similar) and, as far as I know, its developers were also very influenced by webpy.
And webpy works with GAE right our of the box without any modification.

Actually, webpy requires even less typing than webapp, which seems to be more explicit. But the most important thing is "portability".
Only the database api changes (because of bigtable's datastore), but all the rest can be kept unchanged.

So if you want a very simple solution (even simpler than webapp) and you want portability, give webpy a shot. You will like it.</description>
		<content:encoded><![CDATA[<p>webapp is strikingly similar to webpy (even its name is similar) and, as far as I know, its developers were also very influenced by webpy.<br />
And webpy works with GAE right our of the box without any modification.</p>
<p>Actually, webpy requires even less typing than webapp, which seems to be more explicit. But the most important thing is &#8220;portability&#8221;.<br />
Only the database api changes (because of bigtable&#8217;s datastore), but all the rest can be kept unchanged.</p>
<p>So if you want a very simple solution (even simpler than webapp) and you want portability, give webpy a shot. You will like it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Ballinger</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-136402</link>
		<dc:creator>John Ballinger</dc:creator>
		<pubDate>Tue, 15 Apr 2008 05:44:47 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-136402</guid>
		<description>TOO easy.

You can do things like, "select .... height&#62;70 AND height&#60;90" the documentation says you can only use more then one  on one property, eg height.

BUT you cannot use on more than one property in the same query. 
for example "select ... height&#62;70 AND weight&#62;50" because now you are doing 2 properties height and weight.

LASTLY, you can use = for everything else.
eg "Select .... height=70 AND weight=70 AND sex="male" AND birthday &#62; 1977" is valid because only 1 greater than query has been used.  

If you think this is limiting, I would doubt it.  Google uses this DB for nearly everything so if they can so can you. If it does become a problem you may have to preprocess some data or think of some smart ways to handle the data.  

Man cannot wait for invite. Have built one app, nearly on to my next. I am so impatient that I have installed Django mod_python and sqlite on my server because I have been enjoying python a lot (but Django seems very complicated when compared with GAE).

Cheers, John.</description>
		<content:encoded><![CDATA[<p>TOO easy.</p>
<p>You can do things like, &#8220;select &#8230;. height&gt;70 AND height&lt;90&#8243; the documentation says you can only use more then one  on one property, eg height.</p>
<p>BUT you cannot use on more than one property in the same query.<br />
for example &#8220;select &#8230; height&gt;70 AND weight&gt;50&#8243; because now you are doing 2 properties height and weight.</p>
<p>LASTLY, you can use = for everything else.<br />
eg &#8220;Select &#8230;. height=70 AND weight=70 AND sex=&#8221;male&#8221; AND birthday &gt; 1977&#8243; is valid because only 1 greater than query has been used.  </p>
<p>If you think this is limiting, I would doubt it.  Google uses this DB for nearly everything so if they can so can you. If it does become a problem you may have to preprocess some data or think of some smart ways to handle the data.  </p>
<p>Man cannot wait for invite. Have built one app, nearly on to my next. I am so impatient that I have installed Django mod_python and sqlite on my server because I have been enjoying python a lot (but Django seems very complicated when compared with GAE).</p>
<p>Cheers, John.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anthony</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-136302</link>
		<dc:creator>Anthony</dc:creator>
		<pubDate>Mon, 14 Apr 2008 21:55:23 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-136302</guid>
		<description>OK I am utterly confused now.  Upon further review of the link I pasted above there is a section called "introducing indexes" which has as a sample the following query:

SELECT * FROM Person WHERE last_name = "Smith" AND height &#60; 72 ORDER BY height DESC

That query looks strangely familiar to the one in the that they said was not valid in the "Restrictions on queries" section.  It said "A query may only use inequality filters (&#60;, =, and &#62;) on one property across all of its filters."

So, would someone smarter than me please visit this link and make sense of this page?  It appears from the examples that it works the way you think it would, then they throw in this restrictions section which seems to contradict everything they have just said... help!

http://code.google.com/appengine/docs/datastore/queriesandindexes.html</description>
		<content:encoded><![CDATA[<p>OK I am utterly confused now.  Upon further review of the link I pasted above there is a section called &#8220;introducing indexes&#8221; which has as a sample the following query:</p>
<p>SELECT * FROM Person WHERE last_name = &#8220;Smith&#8221; AND height &lt; 72 ORDER BY height DESC</p>
<p>That query looks strangely familiar to the one in the that they said was not valid in the &#8220;Restrictions on queries&#8221; section.  It said &#8220;A query may only use inequality filters (&lt;, =, and &gt;) on one property across all of its filters.&#8221;</p>
<p>So, would someone smarter than me please visit this link and make sense of this page?  It appears from the examples that it works the way you think it would, then they throw in this restrictions section which seems to contradict everything they have just said&#8230; help!</p>
<p><a href="http://code.google.com/appengine/docs/datastore/queriesandindexes.html" rel="nofollow">http://code.google.com/appengine/docs/datastore/queriesandindexes.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anthony</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-136299</link>
		<dc:creator>Anthony</dc:creator>
		<pubDate>Mon, 14 Apr 2008 21:39:32 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-136299</guid>
		<description>OK so maybe I just dont understand BigTable all to well.  I just saw in their examples (at the link above) that the following would error:

SELECT * FROM Person WHERE birth_year &#62;= :min_year AND height &#62;= :min_height 

It also said that "Inequality Filters Are Allowed On One Property Only", so you cant put a filter on birth_year and height if I am understanding correctly.  Is there some sort of another way to get at this recordset? Do they offer subfilters of filters or something?

It also says that "The datastore does not have support for the not-equal (!=) operator for filters." Which means I could not pull from the DB all records of people NOT from california. Unless there is some other way to get at this recordset.

I sure hope I am wrong here and there is some way to do this stuff because I cant think of an application I've written that didnt have need to filter on multiple fields at some point.</description>
		<content:encoded><![CDATA[<p>OK so maybe I just dont understand BigTable all to well.  I just saw in their examples (at the link above) that the following would error:</p>
<p>SELECT * FROM Person WHERE birth_year &gt;= :min_year AND height &gt;= :min_height </p>
<p>It also said that &#8220;Inequality Filters Are Allowed On One Property Only&#8221;, so you cant put a filter on birth_year and height if I am understanding correctly.  Is there some sort of another way to get at this recordset? Do they offer subfilters of filters or something?</p>
<p>It also says that &#8220;The datastore does not have support for the not-equal (!=) operator for filters.&#8221; Which means I could not pull from the DB all records of people NOT from california. Unless there is some other way to get at this recordset.</p>
<p>I sure hope I am wrong here and there is some way to do this stuff because I cant think of an application I&#8217;ve written that didnt have need to filter on multiple fields at some point.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Aral</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-136295</link>
		<dc:creator>Aral</dc:creator>
		<pubDate>Mon, 14 Apr 2008 21:14:52 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-136295</guid>
		<description>Hi Anthony,

Unless I misunderstand what you're trying to do, you should be able to use filters to do that. 

You will have to change the way you do things to suit how Bigtable works, however. Since disk space is essentially free these days, you should try and precompute as much as possible at write-time to minimize the cost of reads. And forget about normalization and joins (from what I've read, Bigtable does support joins but this hasn't -- yet? -- been exposed in Google App Engine):)</description>
		<content:encoded><![CDATA[<p>Hi Anthony,</p>
<p>Unless I misunderstand what you&#8217;re trying to do, you should be able to use filters to do that. </p>
<p>You will have to change the way you do things to suit how Bigtable works, however. Since disk space is essentially free these days, you should try and precompute as much as possible at write-time to minimize the cost of reads. And forget about normalization and joins (from what I&#8217;ve read, Bigtable does support joins but this hasn&#8217;t &#8212; yet? &#8212; been exposed in Google App Engine):)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anthony</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-136218</link>
		<dc:creator>Anthony</dc:creator>
		<pubDate>Mon, 14 Apr 2008 15:28:54 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-136218</guid>
		<description>Well, I am just wondering if I am missing something here.  I havent heard too many comments from Dev's other than "this stuff is great" and "this is game changing".  All I can think is that they haven't actually tried to write an app yet, which would be sad to start developing an app for a client only to have to tell them, "oh we can't do that" very simple query.

The only other thing I can think of is that I am simply misreading the limitations and there must be another way to deal with the issue.</description>
		<content:encoded><![CDATA[<p>Well, I am just wondering if I am missing something here.  I havent heard too many comments from Dev&#8217;s other than &#8220;this stuff is great&#8221; and &#8220;this is game changing&#8221;.  All I can think is that they haven&#8217;t actually tried to write an app yet, which would be sad to start developing an app for a client only to have to tell them, &#8220;oh we can&#8217;t do that&#8221; very simple query.</p>
<p>The only other thing I can think of is that I am simply misreading the limitations and there must be another way to deal with the issue.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lee McColl Sylvester</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-136160</link>
		<dc:creator>Lee McColl Sylvester</dc:creator>
		<pubDate>Mon, 14 Apr 2008 08:31:45 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-136160</guid>
		<description>Then, don't use it :)</description>
		<content:encoded><![CDATA[<p>Then, don&#8217;t use it <img src='http://aralbalkan.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anthony</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-136142</link>
		<dc:creator>Anthony</dc:creator>
		<pubDate>Mon, 14 Apr 2008 06:31:39 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-136142</guid>
		<description>"datastore API is EXCELLENT"?!?!?

Have you actually read the restrictions the datastore API has?  Am I the only developer that thinks these are HIGHLY prohibitive.  In fact it makes GAE largely unusable for me.

No way to pull something from a DB like "everyone who is over 23 yeas old, with blue eyes"?!?!? how do you not support that???  No way to query "everyone who is not from california"?!?! how do you not support that???  Only able to pull 1000 records max, are you joking me??

Am I missing something??? http://code.google.com/appengine/docs/datastore/queriesandindexes.html (see the "Restictions" section to be blown away)</description>
		<content:encoded><![CDATA[<p>&#8220;datastore API is EXCELLENT&#8221;?!?!?</p>
<p>Have you actually read the restrictions the datastore API has?  Am I the only developer that thinks these are HIGHLY prohibitive.  In fact it makes GAE largely unusable for me.</p>
<p>No way to pull something from a DB like &#8220;everyone who is over 23 yeas old, with blue eyes&#8221;?!?!? how do you not support that???  No way to query &#8220;everyone who is not from california&#8221;?!?! how do you not support that???  Only able to pull 1000 records max, are you joking me??</p>
<p>Am I missing something??? <a href="http://code.google.com/appengine/docs/datastore/queriesandindexes.html" rel="nofollow">http://code.google.com/appengine/docs/datastore/queriesandindexes.html</a> (see the &#8220;Restictions&#8221; section to be blown away)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Aral</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-136030</link>
		<dc:creator>Aral</dc:creator>
		<pubDate>Sun, 13 Apr 2008 18:52:41 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-136030</guid>
		<description>Hey Gareth,

I've been considering the portability issue and I hear you on Django being more portable in the here and now. It's also true that the webapp framework is proprietary. Google have, however, open sourced it and they have released the Development Web Server as open source also. This is really all anyone needs to create webapp-compatible hosting packages that are not tied to Google. In the coming days, I am confident we will see other implementations of GAE that make it easier to move your app off of Google's domain if you should desire.

So I don't really see GAE/webapp as lock-in but rather as an emerging new de-facto standard.</description>
		<content:encoded><![CDATA[<p>Hey Gareth,</p>
<p>I&#8217;ve been considering the portability issue and I hear you on Django being more portable in the here and now. It&#8217;s also true that the webapp framework is proprietary. Google have, however, open sourced it and they have released the Development Web Server as open source also. This is really all anyone needs to create webapp-compatible hosting packages that are not tied to Google. In the coming days, I am confident we will see other implementations of GAE that make it easier to move your app off of Google&#8217;s domain if you should desire.</p>
<p>So I don&#8217;t really see GAE/webapp as lock-in but rather as an emerging new de-facto standard.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gareth Rushgrove</title>
		<link>http://aralbalkan.com/1313/comment-page-1#comment-135992</link>
		<dc:creator>Gareth Rushgrove</dc:creator>
		<pubDate>Sun, 13 Apr 2008 15:25:19 +0000</pubDate>
		<guid isPermaLink="false">http://aralbalkan.com/1313#comment-135992</guid>
		<description>Just had this same discussion with myself but actually came down on the other side - the main reason being portability. By this I mean both portability of skills as well as the final application. 

Building something with webapp means it's stuck with Google, on a platform for which they have yet to release the pricing for. Building something using Django means I have more choice. It's not truly portable yet but changes would likely be relatively simple replacement affairs mainly in the models.

Having said all that, I am having to fight against Django to make it work at the moment so whether it's worth the extra effort time will tell.</description>
		<content:encoded><![CDATA[<p>Just had this same discussion with myself but actually came down on the other side - the main reason being portability. By this I mean both portability of skills as well as the final application. </p>
<p>Building something with webapp means it&#8217;s stuck with Google, on a platform for which they have yet to release the pricing for. Building something using Django means I have more choice. It&#8217;s not truly portable yet but changes would likely be relatively simple replacement affairs mainly in the models.</p>
<p>Having said all that, I am having to fight against Django to make it work at the moment so whether it&#8217;s worth the extra effort time will tell.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
