<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-5502193732299119611.post5759118729359066759..comments</id><updated>2009-08-29T08:21:43.900-07:00</updated><category term='Storytime'/><category term='UsingHooks'/><category term='JOGRE'/><category term='Opinion'/><category term='SQLite'/><category term='External Resources'/><category term='Java'/><category term='python4nonpro'/><category term='Startup'/><category term='patterns-of-doom'/><category term='Testing'/><category term='Schluesselmeister'/><title type='text'>Comments on App Engine Fan: Blub paradox</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.appenginefan.com/feeds/5759118729359066759/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html'/><author><name>The App Engine Fan</name><uri>http://www.blogger.com/profile/14769199738243128956</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_ZXENRUvBme8/Sd1VsOCz0yI/AAAAAAAAAS4/rhRM7bx1PqI/S220/avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-191875516972825022</id><published>2009-08-18T15:34:25.526-07:00</published><updated>2009-08-18T15:34:25.526-07:00</updated><title type='text'>You should also be very careful with mutable defau...</title><content type='html'>You should also be very careful with mutable default arguments to functions in Python. If the argument is changed in the body, it will be changed for all subsequent calls as well, which is probably not what you want.&lt;br /&gt;&lt;br /&gt;So instead of&lt;br /&gt;&lt;br /&gt;def foo(some_arg={}):&lt;br /&gt;  # do stuff&lt;br /&gt;&lt;br /&gt;it&amp;#39;s generally preferable to do&lt;br /&gt;&lt;br /&gt;def foo(some_arg=None):&lt;br /&gt;  if some_arg is None:&lt;br /&gt;    some_arg = {}&lt;br /&gt;  # do stuff</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/191875516972825022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/191875516972825022'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1250634865526#c191875516972825022' title=''/><author><name>Kevin</name><uri>http://www.blogger.com/profile/07454132494907921936</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://farm1.static.flickr.com/158/358682919_f608907814.jpg?v=0'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1860375137'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-3888938358108922850</id><published>2009-04-02T04:37:00.000-07:00</published><updated>2009-04-02T04:37:00.000-07:00</updated><title type='text'>People say that scala is worth learning (at least,...</title><content type='html'>People say that scala is worth learning (at least, it takes a significantly different approach). Anyways, just wanted to say that I can relate to your experience as the first 2 days I've started learning python (coming from Java as well) were a total WTF?!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/3888938358108922850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/3888938358108922850'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1238672220000#c3888938358108922850' title=''/><author><name>gsmd</name><uri>http://gsmd.myopenid.com/</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/openid16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-273902630'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-6265404541663985941</id><published>2009-02-20T11:12:00.000-08:00</published><updated>2009-02-20T11:12:00.000-08:00</updated><title type='text'>Excellent blog, just stumbled on it. If you're loo...</title><content type='html'>Excellent blog, just stumbled on it. If you're looking at learning javascript as your next project, I'd suggest looking at YUI or Ext. Before I started working with appengine (and learning python for the first time myself), I spent a lot of time learning the various javascript libraries. I played with GWT, dojo, jquery, YUI, and yui-ext to ext as it made it's transition. &lt;BR/&gt;&lt;BR/&gt;The conclusion I came to is for websites, YUI is the way to go. For web applications Ext was a great platform.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/6265404541663985941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/6265404541663985941'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1235157120000#c6265404541663985941' title=''/><author><name>Joe Bowman</name><uri>http://www.blogger.com/profile/05027069971741831759</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1438989584'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-241412864928850095</id><published>2009-02-16T00:16:00.000-08:00</published><updated>2009-02-16T00:16:00.000-08:00</updated><title type='text'>&amp;gt; I think Google Gears [...] competes with AIR ...</title><content type='html'>&amp;gt; I think Google Gears [...] competes with AIR in some respects. &lt;BR/&gt;&lt;BR/&gt;Well... they probably have some things in common while others are different. That&amp;#39;s why I mentioned Html 5 previously, which hopefully standardizes some of the aspects like offline storage. Frankly, I don&amp;#39;t care much whether the technology is from Google or not -- as long as I can see the potential for doing fun stuff in it and it teaches me something new. If I have a choice however, I prefer open standards or at least open source.&lt;BR/&gt;&lt;BR/&gt;The reason I am not a big fan of becoming a &amp;quot;Javascript guy&amp;quot; is that debugging Javascript is quite painful at times. Firebug is a nice tool, but it still has its limitations (and it doesn&amp;#39;t exist for all browsers). Browser quirks aren&amp;#39;t cool either -- and yes, some frameworks abstract a lot of that pain away, but the issue still exists.&lt;BR/&gt;&lt;BR/&gt;Then again -- maybe it&amp;#39;s just Blub all over again: I don&amp;#39;t know Javascript that well, so it could be that I am more suspicious than I should. I guess I&amp;#39;ll think about it some more :-)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/241412864928850095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/241412864928850095'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1234772160000#c241412864928850095' title=''/><author><name>The App Engine Fan</name><uri>http://www.blogger.com/profile/14769199738243128956</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-116686503'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-3316029445687888613</id><published>2009-02-15T20:25:00.000-08:00</published><updated>2009-02-15T20:25:00.000-08:00</updated><title type='text'>I'm trying to get more proficient in both python a...</title><content type='html'>I'm trying to get more proficient in both python and javascript.  On javascript, I'd look at books like Crockford's "Javascript: The Good Parts."  He describes how to use closures to create modules, and pretty good javascript hackers use that pattern to create some fairly complete javascript GUIs.  The best javascript GUI I've seen is &lt;A HREF="http://www.extjs.com" REL="nofollow"&gt;Extjs&lt;/A&gt;, and they also have another framework that builds on GWT called Ext GWT.&lt;BR/&gt;&lt;BR/&gt;If you weren't a google guy, I'd also suggest looking at Adobe AIR because you can build cross-platform client-side apps using Javascript, Flash, or Flex.  I think Google Gears (maybe that's what you should explore) competes with AIR in some respects.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/3316029445687888613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/3316029445687888613'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1234758300000#c3316029445687888613' title=''/><author><name>Bill</name><uri>http://www.blogger.com/profile/10876247881505750286</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-703029543'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-943734327038882646</id><published>2009-02-15T19:44:00.000-08:00</published><updated>2009-02-15T19:44:00.000-08:00</updated><title type='text'>Hi Bill,&lt;br&gt;&lt;br&gt;reg.: Javascript "advanced ways": ...</title><content type='html'>Hi Bill,&lt;BR/&gt;&lt;BR/&gt;reg.: Javascript "advanced ways": are there any blogs/tutorials you can point to on what exactly you mean? Or do you refer to using a framework like JQuery?&lt;BR/&gt;&lt;BR/&gt;reg. Haskell/Erlang: I have to admit I am a little bit prejudiced here. I think the concept is really cool, but I I would like to choose something that also provides me with interesting new ideas for this blog. Javascript (or "more" javascript compared to what I currently know) and Gwt have both the advantage of "synergies" with App Engine. So far, this blog has been pretty backend-centric, and it might be fun to mix that up ;-)&lt;BR/&gt;&lt;BR/&gt;Hmm... speaking of... what do you think of focusing HTML 5?&lt;BR/&gt;&lt;BR/&gt;Cheers,&lt;BR/&gt;&lt;BR/&gt;   Jens</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/943734327038882646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/943734327038882646'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1234755840000#c943734327038882646' title=''/><author><name>The App Engine Fan</name><uri>http://www.blogger.com/profile/14769199738243128956</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-116686503'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-3606994235394619200</id><published>2009-02-15T19:14:00.000-08:00</published><updated>2009-02-15T19:14:00.000-08:00</updated><title type='text'>Jens, if I had the time to do something new purely...</title><content type='html'>Jens, if I had the time to do something new purely to broaden the mind, I'd look at Haskell or Erlang or even Javascript [the advanced way some programmers use it].  GWT seems useful to you, since you already know Java and it's a Googley thing.  I'm using jquery and Extjs instead, since I don't see what's so bad with javascript.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/3606994235394619200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/3606994235394619200'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1234754040000#c3606994235394619200' title=''/><author><name>Bill</name><uri>http://www.blogger.com/profile/10876247881505750286</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-703029543'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-5809739482097316192</id><published>2009-02-14T15:37:00.000-08:00</published><updated>2009-02-14T15:37:00.000-08:00</updated><title type='text'>For your intermediate solution, you could have jus...</title><content type='html'>For your intermediate solution, you could have just used "kwargs.update(plistDict)" instead of a loop.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/5809739482097316192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/5809739482097316192'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1234654620000#c5809739482097316192' title=''/><author><name>carlsensei.com</name><uri>http://carlsensei.com/</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img1.blogblog.com/img/openid16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1792179503'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-6346785883228478228</id><published>2009-02-14T09:07:00.000-08:00</published><updated>2009-02-14T09:07:00.000-08:00</updated><title type='text'>Might be obvious, but here is a simple way to get ...</title><content type='html'>Might be obvious, but here is a simple way to get a dictionary of key/value from a GAE entity &amp;#39;obj&amp;#39;.&lt;BR/&gt;&lt;BR/&gt;obj_dict = dict((k,getattr(obj, k)) for k in obj.properties().keys())&lt;BR/&gt;&lt;BR/&gt;Thought this might be handy since its basically the opposite operation, class-&amp;gt;dict</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/6346785883228478228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/6346785883228478228'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1234631220000#c6346785883228478228' title=''/><author><name>Mike Wesner</name><uri>http://www.blogger.com/profile/15979605635757777706</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-548305918'/></entry><entry><id>tag:blogger.com,1999:blog-5502193732299119611.post-6734765229991166282</id><published>2009-02-13T09:30:00.000-08:00</published><updated>2009-02-13T09:30:00.000-08:00</updated><title type='text'>Another excellent post, Jens.  As the "fellow deve...</title><content type='html'>Another excellent post, Jens.  As the "fellow developer" you mention, it was precisely the "Blub paradox" that you mention that caused me to reach out to you for help.&lt;BR/&gt;&lt;BR/&gt;The combination of features of the GAE framework (support for required properties that are required to be present at __init__ time, not just put()) made me think that option (2) in my original email was incorrect, but I was too new to Python and the GAE to figure out the proper way to pass along the dictionary of values to __init__.&lt;BR/&gt;&lt;BR/&gt;In our (tiny) defense, I would add that it didn't help that none of the GAE documentation or examples I have come across use this kind of initialization to create db.Model entities.&lt;BR/&gt;&lt;BR/&gt;One thing that the GAE team might consider would be to put together a tutorial on GAE database interaction that is geared toward developers who are already familiar with common Java approaches such as the Spring/Hibernate/DAO approach.&lt;BR/&gt;&lt;BR/&gt;Thanks again for your help!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/6734765229991166282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502193732299119611/5759118729359066759/comments/default/6734765229991166282'/><link rel='alternate' type='text/html' href='http://blog.appenginefan.com/2009/02/blub-paradox.html?showComment=1234546200000#c6734765229991166282' title=''/><author><name>stuart</name><uri>http://www.blogger.com/profile/09189896372449043544</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.appenginefan.com/2009/02/blub-paradox.html' ref='tag:blogger.com,1999:blog-5502193732299119611.post-5759118729359066759' source='http://www.blogger.com/feeds/5502193732299119611/posts/default/5759118729359066759' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1719887738'/></entry></feed>
