[google-appengine] Possible cursor exploit? (was Re: 1.3.1 SDK Prerelease - help us verify)

2010-02-17 Thread James Ashley
I don't have time to test this just now, and I hate to waste bandwidth
on what (so far) is just idle speculation, but I did spot what looks
like a potential security.  I figured it'd be better to share it with
the group than sit on it until I actually *do* have time to confirm/
deny.

On Feb 16, 11:30 pm, ryan ryanb+appeng...@google.com wrote:

 On Feb 16, 8:46 am, Nick Johnson (Google) nick.john...@google.com
 wrote:

  As you point out, in order to use a cursor, you still have to
  reconstruct the original query, so a user could not modify a cursor to cause
  you to display records they should not have access to.

 +1. this is important.

Very much agreed.  This seems almost like it might be a reason to not
pass cursors around in the clear.

  It contains the complete key of the next record to be returned, along with
  some extra information about the query. Feel free to experiment and see for
  yourself, of course. :)

 specifically, the extra information is your app id and the kinds and
 some property values, and possibly also property names, of one or more
 entities that were query results. the specific properties involved are
 the properties in the query.

This is where I had my Wait, that sounds wrong moment.  You didn't
mention anything about the currently logged in user.

Off the top of my head, I can think of 2 mutually exclusive
scenarios.  They both assume a page  requires the user to be logged
in, the original query used the login ID as part of the WHERE clause,
and there's a cursor to page through results.

1) The user has a bunch of personal...whatever.  Bookmarks that he
doesn't want to share with his wife.  The original query is tied to
his google account.  He stashes a browser bookmark halfway through the
list and logs out of the site.  Later, his wife uses the same computer
and logs in and checks out the new bookmarks.  This one requires her
to log into her google account.  From what I'm reading, it sounds like
she'll see his data.
2) The user has a query that she wants to share.  So sends some sort
of private site-specific message to one of her friends.In this
case, we want the cursor to maintain its original set of results,
ignoring the currently logged in user.  And we want the friend to be
able to access that query from a completely different part of the
site.

I'm guessing it doesn't check to see if the current user owns that
query.  In many cases, it would be a waste of time to check.  And, if
we're using something besides the google user API, it would be a
meaningless check.

Another possibility that springs to mind:
Mr. Cracker With Too Much Time On His Hands has a cursor with data he
shouldn't see that belongs to, say, admin portions of the site.  He
browses the rest of your site, looking for anything else that uses
cursors.  He replaces those with this one.

This one's probably just paranoia on my part.  You did mention that
cursors store Kind information.  So (depending on how the API is
implemented), if he happened to plug it into a page with models that
had the same properties, it seems like a risk that duck-typing could
work in his favor.  I know I've written a few testing pages that are
designed to dump the details of whichever models I happen to give them
query descriptions for.  They were always admin-only, and I haven't
had one make it into production yet, but...

I guess how dangerous this is depends totally on undocumented
implementation details, and the individual app.

But maybe the (hypothetical) user login issues are worth keeping in
mind, I suppose they might suggest other gotchas to list members.

Regards,
James

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



[google-appengine] Re: chunked transfer encoding

2009-02-21 Thread James Ashley

Just a gut reaction...shouldn't that be self.request.post?

On Feb 20, 2:39 am, jeremy jeremy.a...@gmail.com wrote:
 so using netcat as a dummy host, i've confirmed the client is sending
 the data i expect:

 

 POST /_datum/blaaah.bin HTTP/1.1
 Transfer-Encoding: chunked
 Content-Type: multipart/form-data; boundary=A-
 mBZUkudNqt56TwNWjHhJy91U2HlskAAyqGEzwn
 Host: localhost:8088
 Connection: Keep-Alive
 User-Agent: Apache-HttpClient/4.0-beta2 (java 1.5)
 Expect: 100-Continue

 2c
 --A-mBZUkudNqt56TwNWjHhJy91U2HlskAAyqGEzwn

 91
 Content-Disposition: form-data; name=content; filename=content
 Content-Type: application/octet-stream
 Content-Transfer-Encoding: binary

 and then a lot of scary binary data

 

 but self.request.get('content') in the request handler returns an
 empty string
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Local Django Slow: Could not import strop: Disallowed C-extension or built-in module...

2009-02-18 Thread James Ashley

I get this [well, the error about strop...I haven't noticed the fcntl
one] on XP running through cygwin, using the source code .zip (as
opposed to the msi, in case that makes any difference).

I'm about 50% certain that it's coming from the SDK, but it could
easily be coming from some built-in python module I'm importing that
tries to load a C-optimized library then falls back to a native-python
one when that fails.  I haven't noticed the delay the OP mentioned, so
I haven't cared enough to try to track it down.

On Feb 17, 6:37 pm, boson dan.kam...@gmail.com wrote:
 This is on Mac OS X 10.5.6.  I didn't add any external imports, but
 I'll go back over all of my imports anyway and see if something might
 be triggering it.

 On Jan 31, 4:41 am, Waldemar Kornewald wkornew...@gmail.com wrote:

  Hi,

  On Jan 29, 10:55 pm, boson dan.kam...@gmail.com wrote:

   Running Django + app-engine-patch locally... Frequently on requests
   (can't determine why/when) I get these two log items:

   DEBUG Could not import strop: Disallowed C-extension or built-in
   module
   DEBUG Could not import fcntl: Disallowed C-extension or built-in
   module

   Each one takes about half a second to come out.  This isn't a big
   deal, but it is a little bit annoying.  Is there any way to tell it to
   stop trying to import these modules, or speed it up somehow?

  Which OS do you have?

  I've never seen those debug messages. Do you possibly import something
  that uses those modules?

  Bye,
  Waldemar Kornewald
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Versions and datastore consistency (was Re: Deleting a field in datastore)

2009-02-17 Thread James Ashley



On Feb 16, 5:52 pm, Alexander Konovalenko alex...@gmail.com wrote:
 On Tue, Feb 17, 2009 at 04:25, Sridhar Ratnakumar

 sridhar.ra...@gmail.com wrote:

  A related question - is there a way to have two versions of datastore
  so that I can run 'production' and 'staging' instances of my app? In
  case, if I want to test new features without messing up the production
  datastore, I can use the staging datastore.

  If not, what is the appropriate way to do this?

 I'm not aware of any simple and general solution,

It probably does depend on your exact situation (like every other
engineering decision, which this one is).  But...

 but your options include:

 1) Testing on the development server (SDK) only. Check out the
 --datastore_path command line option. I think you should be able to
 create a copy of a dev datastore by copying the --datastore_path file
 (when no dev server is using it), but I haven't tried it.

This is the easiest option, and, if you aren't too worried about being
able to roll back changes, or possible data corruption...

Just remember: what's deployed on production servers doesn't
necessarily match what's on the SDK.

 2) Using a separate app. Each app has its own datastore, inaccessible
 to other apps, so you'll have to migrate your data manually between
 this staging app and your stable app.

This is the path I've taken, and it matches pretty well with the
industry standard for enterprise web-sites (whatever that means).
You can deploy your code to a server that will match your production
environment.  If it breaks, no real harm done.  If it works, you can
change the name (presumably you've already bumped the version) in
app.yaml and redeploy pretty much instantly.

Actually, this is one of the areas where GAE has a huge advantage over
pretty much every other option.

The downside, of course, is that you have to burn two apps instead of
just one.

 3) Emulating versioned datastore manually. You will still have a
 single shared datastore, but you can write your code so that it never
 touches other versions' data. Or it can only access some other
 version's data under very specific circumstances. Or whatever. How
 this is best done heavily depends on what kind of changes you are
 trying to introduce to the datastore.

If you're doing a bunch of big, complicated, nasty sites, and you
desperately need to keep their databases distinct for security
reasons, this is the way to go.  Personally, I suspect this is what
the cloud version of enterprise software looks like.

The down-side, of course, is that it's horribly complicated.

As one possible compromise between 2) and 3), I'm going to suggest a
[n] [honestly] horrendous hack which works for me.

I don't know how well this will work for any other web framework.  I
worked this one out using web2py (about which I have extremely mixed
feelings).

You have one single GAE app.  It dispatches to multiple applications
based on the URL.  The first directory in the URL defines the web
site it dispatches to.  The second determines which controller/view
it will be using.  The third decides which method/particular instance
of the controller/view it uses.  The rest specify positional
parameters to pass to the controller.

So:
http://myapp.appspot.com/init/default/welcome
would dispatch to the init site's default controller and call its
welcome method.

http://myapp.appspot.com/staging/default/welcome
would dispatch the same thing to the staging site.

Both sites share the same datastore, which makes this approach
dangerous.  Like I said, this is really a total trade-off/hack sort of
thing.  You can add hackery to your model names so one site fudges
Model type-names, but that edges you into complication issues about
keeping things straight.

The plus side of this approach is that, when you're ready to really
deploy, you can delete your existing init site, rename staging to
init, and upload your changes.  If you need to make emergency fixes
that you're absolutely confident about, just update init.  When you're
ready to start toying with a new major (for some value of major
release), make a copy of init named staging, merge in your changes
(you *are* using source control, right?), rinse, and repeat.

You could take this a step further and use the same Model versioning
magic suggested in 3).  Maybe that should be approach #5?

I don't know how this approach would work under django.  Every time I
try to wrap my head around that I have an allergic reaction.

I can't really endorse web2py (every time I dealt with it I just got
frustrated because I felt like it was doing too much).  But that could
just be me.  For anyone who's still on the fence, it's definitely
worth checking out.

 Changes to your datastore schema can be risky. It is always good to
 have a full backup and test the restoration procedure periodically.

That really can't be emphasized enough.  No matter what environment
you're in.

Speaking of which, I think I'll back up my source code 

[google-appengine] RE: AE 1.1.7 defines has_key on db.Model

2009-02-17 Thread James Ashley


Google Groups doesn't give me any option to directly reply to this
post.  We'll see how this approach works.

When this error came up, I wrote a scathing flame.  And then I threw
it away, mainly because it just isn't productive.

Overriding the has_key() method seems like one of the least advisable
choices one can make in python.  If Guido has signed off on it, then
I'm not one to argue.  If anyone else decided to do this, without
Guido's explicit permission...I'm going to squawk, moan, and do funny
walks to draw attention to a decision that seems
incredibly...questionable, to me.

Like I said, I threw away my original flame, mainly because it wasn't
hurting me.  Now I seem to be running into exactly the same problem,
so I have to complain as well.

I've opened a bug report, requested that this
get refactored, and just followed the advice to copy
google.appengine.ext.db.__init__.py to my own directory and am
currently referencing it from there.

As a software engineer, I *cringe* from that last part.  That's
google's
documented API.  It's written well enough that I feel fairly confident
hacking around it...but there isn't much telling how well it maps to
the production API (I'm guessing it's pretty close at present, but
will change radically in the future...just the nature of the beast).

Still, I thought I'd ping this thread to see if anyone else has an
opinion.

Regards,
James

-- Forwarded message --
From: Daniel O'Brien (Google) d...@google.com
Date: Dec 1 2008, 5:17 pm
Subject: AE 1.1.7 defines has_key on db.Model
To: Google App Engine


It's worth filing this as a feature request (or defect) in the public
issue tracker, if you haven't already:http://code.google.com/p/
googleappengine/issues/list

As far as I know this method has existed since 1.1.6: Some developers
ran into issues involving cheetah, which assumes that anyhas_key
method behaves like that of a dict which, as you've noted, the one
nodb.Modeldoesn't.

Daniel

On Dec 1, 1:54 pm, Ken Tidwell google...@gamecabinet.com wrote:

 Apparently, some bright spark has defined ahas_keymethod ondb.Model.

 Doing so will preclude the creation of any Model derived from or
 emulating dictionary classes (such as UserDict or DictMixin).

 Thehas_keymethod in question does not follow the same semantics as
has_keyon dict so the choice of name is unfortunate, to say the least.

 Any chance the method could be renamed to something less toxic and more
 suggestive of its actual function (such as key_complete)?

 ken

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Serving static files

2009-01-27 Thread James Ashley

That did the trick.  Thank you [both]

On Jan 26, 2:50 am, Blixt andreasbl...@gmail.com wrote:
 Looks to me like there's three spaces in front of static_dir:
 static. Try removing one of the spaces so that there are only two.

 Regards,
 Andreas

 On Jan 26, 5:41 am, James Ashley james.ash...@gmail.com wrote:

  I feel like a complete idiot.

  Here's my app.yaml:

  application: whatever
  version: 1
  runtime: python
  api_version: 1

  handlers:
  - url: /static
     static_dir: static

  When I try to run dev_appserver, I get this exception/stack trace:

  $ python ./dev_appserver.py  -d ../pyjamas/
  ERROR    2009-01-26 04:15:15,236 dev_appserver_main.py] Fatal error
  when loading
   application configuration:
  mapping values are not allowed here
    in ../pyjamas/app.yaml, line 8, column 14

  I've compared it with app.yaml's from various working projects, and I
  just don't see the difference.

  What am I doing that's bone-headed here?

  Thanks,
  James


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Ok I know it's something really dumb but how to upload

2009-01-20 Thread James Ashley

Those are all fine options.  But the real answer is to write 2 or
3 .BAT files (start your server, upload, and *save to source control*
-- that's the most important one) and install the Windows Command
Prompt Here extension.

:-/

Good luck,
James

On Jan 19, 6:10 pm, djidjadji djidja...@gmail.com wrote:
 You can copy and paste by using the System menu of the window.
 You can open this menu by using Alt-Space or click on the top left icon
 in the titlebar (for a cmd window it is a small c:\) In this menu you find a
 submenu for clipboard operations.
 If you want to copy text to the clipboard you first have to Mark the
 text and then press enter.

 2009/1/19 dartdog dartd...@gmail.com:

  Just this typing will be a real drag since the conventional Cntrl C
  and Ctrl V don't work in cmd shell.. Back to the books, but then I
  suppose the real solution it to pack the whole thing in a bat file!!
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Can not delete entity using Data Viewer and a GQL query.

2009-01-17 Thread James Ashley

This sounds to me like something that should be reported as a bug.
And whoever wrote that error message should be punished with at least
10 papercuts.

But that's just me.  G

On Jan 11, 3:33 pm, murexconsult...@googlemail.com
robin_ow...@hedge-row.co.uk wrote:
 There was a bug in my app and some bad data got into the Datastore.

 So I want to delete some data. The models have a number of items so
 rather than paging through them all 20 at a time to find it I ran the
 GQL query:
 SELECT * FROM UserUpdates
 WHERE windAngle=328

 This returns one row as expected. I then click on the tickbox beside
 it and click on Delete.

 I then get a dialog box asking if I am sure to which I say yes.

 I then get the error displayed in a red box at the top saying The URL
 to forward to once the request is fulfilled - Yes the error is a
 partial sentence and makes no sense.

 The item is NOT deleted.

 This is happening to all 4 of my models. However 2 of them only have a
 few hundred entries, so I was able to page through, find the item and
 delete it. When I paged through, the deleting was successful.

 I think that there must be a bug in the data viewer when removing data
 found using a gql query.

 Thanks
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: why the computer says NameError: name 'execfile' is not defined

2009-01-17 Thread James Ashley

Isn't production running 2.5.ish?


On Jan 12, 8:39 pm, bijiasuo2...@gmail.com bijiasuo2...@gmail.com
wrote:
 you should install Python 2.6.1
 i have successful, but i don't know why. I don't know Python


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: OpenID, is it good?

2009-01-17 Thread James Ashley



On Jan 12, 9:06 pm, jay j...@jaykyburz.com wrote:
 I thought google was participating in Open ID now? Do our app engine
 logins support OpenID's?

OpenID still seems...fairly immature and not user friendly.

Then again, it's been a while since I tried to use it.  I probably
have the terminology wrong.

Last I checked, google was an Open ID provider.  If you try to log
into a site that accepts Open ID logins, you should be able to use
your google account.  Or your facebook, myspace, yahoo, etc, etc
account.

The trouble is finding sites that accept Open ID logins from other
providers.

No idea why that is, unless it's just the pain of re-writing their
user handling code.  Well, that and figuring out a graceful way for
the user to actually log in.  I still haven't ever been able to figure
it out, on the few sites I've seen.

(Which, I think, is a crying shame.  Then again, other people are
terrified by the idea that leaking one single login could totally
destroy their online identity)

 On Jan 10, 11:16 am, Mengsong Chen ltcst...@gmail.com wrote:

  I have just read something about OpenID. It seems a good solution, in
  particularly for mobile web apps.

  I wonder what is the general feedback for it?
  How is it compare it Google Login?

  Thanks,

  M
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Model.put() Override?

2009-01-17 Thread James Ashley

The simple answer seems to be override the db class.  That's
totally off the top of my head, and it may be completely unrealistic.

Something like (totally untested and almost definitely wrong. Consider
it pseudo-code):

class my_db(google.ext.db):
  def put(self, *objects, **kwargs):
for o in objects:
  o.pre_put()
super(google.ext.db, self).put(*objects, **kwargs)

Then the models that were overriding put() could put that override
code in pre_put() instead (and change put() to just call that before
calling super().put()...).

You'd have to juggle the nuances of things like post_put(), and any
side-effects.  But it seems like a reasonable compromise.

On Jan 14, 2:22 pm, boson dan.kam...@gmail.com wrote:
 That is a curious situation.  I would like to know also if there is a
 way to inject code into the put-stream regardless of method called, as
 I have various put() overrides as well.

 On Jan 13, 9:45 pm, Devel63 danstic...@gmail.com wrote:

  I overrode the put method on a class derived from Model, primarily
  because I wanted to do some accounting work when a new object was
  saved (in the simplest case, just keeping track of a counter).  It
  does its work, then calls super.

  It works fine.

  Until I use db.put([ob1,obj2,obj3]) to save a bunch of these, and then
  of course the individual object.put() functions are never called.

  Is there a best practice for this?  I really liked having it in the
  put, because then no caller needed to know about it, and it just
  took care of itself.  Is the best thing to precede every put call
  with an explicit put_prep call?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: typical scenario

2009-01-17 Thread James Ashley

http://groups.google.com/group/google-appengine/browse_thread/thread/2baa48709bb94bd3?hl=en
has an excellent answer about dispatching to multiple WSGI apps.

On Jan 17, 12:11 pm, James Ashley james.ash...@gmail.com wrote:
 I really don't know much about WSGI, but this works for me.

 As I understand it, you should probably have 1 WSGI app in the root
 folder.  It will do whatever's appropriate to load whichever sub-app
 needs to run.  Then they should both be able to import from the DB
 folder.

 i.e.

 / -- app.yaml
   |  main.py
  + app_one
     | __init__.py
     | whatever.py
  + app_two
    | __init__.py
    | whatever.py
  + DB
    | __init__.py
    | model_one.py
    | model_two.py
    | model_three.py

 Set up app.yaml to dispatch requests to main.py (or whatever you want
 to call it).  Have it examine REQUEST and dispatch into app_one or
 app_two as needed (`import app_one.whatever`).

 Then files in app_one or app_two should be able to `import
 DB.model_one`

 If it's anything more than a dead-simple app, I'd break it down
 further than that.  But that's the idea I'm using.

 On Jan 14, 8:29 am, arnie parvez...@rediffmail.com wrote:

  I am stuck in a very big problem and could not find any solution for
  this
  Writing import DB in the BusinessList folder's businesslist.py file
  does not work. I have also added __init__.py file [empty] in the DB
  folder but of no use. Also I have created PYTHONPATH environment
  variable and gives it the path C:/ but it seems to me that this
  setting is not working too. I have to upload this folder structure to
  GAE under one AppID
  Can anybody suggest a solution?
  Thanks
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Data Privacy

2009-01-17 Thread James Ashley



On Jan 17, 11:17 am, hawkett hawk...@gmail.com wrote:
 Hi Marzai,

    Thanks for the detailed response.  It would be great to get those
 clarifications included in the terms of service and/or privacy
 policy.  I can see from my post rating that some people don't share my
 concern, but data privacy is probably the number one barrier to
 commercial cloud adoption at the moment.

To whomever marked the OP down: he's right.  This *is* an incredibly
important consideration.  However...

 Clear legal statements

BWAHAHAHA! It all depends on the meaning of the word is.

Sorry, I couldn't resist.  :-)

 are
 always better than implied trust, or clarifications made in forums.  I
 don't doubt that the constraints you have outlined are correct, but I
 read the privacy policy and terms of service to say something
 significantly different.  The privacy policy explicitly lists content
 (including code)

Actually, see section 5.1:

* The term Content shall specifically exclude the web application that
* you create using the Service and any source code written by you to
* be used with the Service (collectively, the Application).


 and says this -

 'We use this information internally to deliver the best possible
 service to you,

A lawyer probably *could* stretch this to include making your private
customer data public

 such as improving the Google App Engine user interface
 and maintaining a consistent and reliable user experience.'

Lots of disagreement among lawyer types about phrases like such as.
Be careful of those.

 The terms of service say this (in section 8, which overrides any
 rights outlined in section 6) -

 'By submitting, posting or displaying the Content on or through the
 Service you give Google a worldwide, royalty-free, and non-exclusive
 license to reproduce, adapt, modify, translate, publish, publicly
 perform, publicly display and distribute such Content

Note the term Content here. *Not* Application.  Nothing about your
source code.

 for the sole
 purpose of enabling Google to provide you with the Service in
 accordance with its privacy policy.'

IANAL, but that whole sole purpose thing seems to actually make this
safer for us developers.

Then again, lawyers have completely up-ended those silly Congress
shall not... clauses in the Bill of Rights, so they could probably
use this to justify publicizing your medical records.  :-/

 When you put these two statements together, Google is able to
 reproduce, adapt and modify developer contributed code

Again, IANAL.  But can you take individual pieces of an agreement like
this out of context?

 to improve your
 UI, and explicitly *does not* require content

Just to re-emphasize (yet again, from the Department of Redundancy
Department): content seems [to me] to specifically be the user data.
*Not* the source code.

 owner's permission.
 Apparently that permission is given once the data is uploaded.  I'm
 not trying to be difficult - that is actually what it says - and those
 documents are actually what business look at when making decisions.

And the details are extremely important.  Especially when you have to
break down and actually talk to the suits.

 I realise that the terms of service and privacy policy are produced by
 the legal team and not the engineering team, and the legal guys have a
 responsibility to protect Google from liability and litigation.
 Perhaps the legal team isn't fully aware of the importance of data
 security to GAE adoption.

I suspect you aren't giving enough credit to the legal team.

It's their job to keep google from getting sued.  When google does get
sued (which it will), it's their job to ensure that google wins.

This must balance against the marketing team's job to actually get
people/developers/us to use the product.

 It is probably the engineering team's
 responsibility to raise that awareness.

You could be right.  In almost any other company, I'd agree with you.
I'm willing to bet that google's lawyers are at least hip-deep when it
comes to privacy concerns.

As I understand it, google's business model is to analyze data and use
that analysis to make a profit.  This seems to be mostly through
selling ads.  I'm sure there are other forms of revenue (like the
people who pay for premium service, enterprise search, etc).

If you store data on GAE, you should expect google to be crawling it
and making every penny they can out of it.

The biggest risk (that I can see) might be google focusing ads from
your competitors on your users.

A secondary risk seems to be google actually analyzing your data and
making it (and the analysis) public.  I don't think the TOS allows
that, but (yet again) IANAL.  It could all happen to deliver the best
possible service to you.

But I doubt it's the engineering team's responsibility.  Maybe someone
on that team should (I hate that word) step up to the plate and make
sure the legal team appreciates your/our concerns, but you'd really be
better off having your lawyers talk to their 

[google-appengine] Re: Data Privacy

2009-01-17 Thread James Ashley



On Jan 17, 2:54 pm, Andy Freeman ana...@earthlink.net wrote:
   data privacy is probably the number one barrier to
  commercial cloud adoption at the moment.

 Some supporting evidence would be nice because only one person is
 raising this concern.  Maybe it's so huge a barrier that no one else
 is bothering, maybe the discussion is somewhere else, but

I see this concern all the time.  From every business-oriented point
of view.  I'm surprised that anyone else doubts this.

I thought it could pretty much be considered a given.

Businesses frequently consider data one of their most valuable
assets.  And they're reluctant to trust it with anyone else.

  When you put these two statements together, Google is able to
  reproduce, adapt and modify developer contributed code to improve your
  UI, and explicitly *does not* require content owner's permission.

 Actually, there's nothing about the UI.  

That's in there.  Maybe it's a recent addition?

 However, there's something
 important missing from this discussion, namely for the sole purpose
 of enabling Google to provide you with the Service in accordance with
 its privacy policy.

Have I mentioned before that I really like that whole sole purpose
phrase?  I think I have.

 How about some acceptable wording from a service that provides
 computation and storage resources, together with a link to the whole
 policy?

Ooh, nice question!

I 3 nearlyfreespeech.net (I'm completely unaffiliated...the guy who
owns it probably hates me).  But even they don't have anything as
explicit as google's.



--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: return a variable value from html form to python

2009-01-04 Thread James Ashley

I'm not real clear where the various errors are happening, so I'm just
guessing.

Just based on what I'm seeing here, it looks like you're having
javascript (client-side) issues.  Something about DTC?  Maybe it's a
variable that isn't getting initialized?  Or maybe a constant that
needs quotes around it?

Just a guess, and I'm probably totally wrong.

Good luck,
James

On Jan 4, 6:10 am, thebrianschott schott.br...@gmail.com wrote:
 Niklas,

 Thanks for the idea, but I get the same behavior with that change.

 I have even more information that I did not notice
 before. When the following line is in process(form) an error
 message is thrown in the Firefox error console that reports
 the error message below. So somehow the POST and the
 self.redirect(/?place=%s % g_place)  are not behaving
 right together.

 form.place.value = String({{place|addslashes}});

 Error: DTC  is not defined
 Source File:http://localhost:8082/?place=DTCLine: 108

 Line 108 is the following one.

 form.place.value = String({{place|addslashes}});

 On Jan 4, 6:27 am, niklasr nikla...@gmail.com wrote:

  Hey Brian,
  Maybe it's as easy as
  g_place = self.request.POST.get('place')
  instead of
  g_place = self.request.get('place')

  Cheers
  Niklas Stockholm
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Datastore Size Scaling

2009-01-04 Thread James Ashley



On Jan 4, 6:04 pm, djidjadji djidja...@gmail.com wrote:
 I have done a few tests and found that the number of items in the
 datastore does not influence the number of mega-cycles it takes to
 fetch, create, delete items.

That's good to know, thank you.

I'll never forget the time I handed a test version to our testers,
and I carefully explained that paging didn't work.  So, if they tried
to look up anything more than about 50,000 records, everything would
blow up.

They cheerfully agreed, ran a query to look up 2,000,000 records, and
screamed bloody murder when (as I predicted), it didn't work.  I will
not bitch about...any of the rest of it.  I will *not* bitch about
it.  I...where was I?  G

Oh, yeah.  Do you have any solid numbersyou're willing to publish from
your tests?

Better yet, do you have any statement from google?

Just curious,
James

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Global Time Synchronisation Guarantees

2009-01-02 Thread James Ashley


On Jan 1, 12:17 pm, Andy Freeman ana...@earthlink.net wrote:
  For a number of possible reasons (including the consistency of a
  running balance), an accounts engine might have a basic specification
  requirement that invoices are generated in sequence with ascending
  invoice numbers *and* ascending invoice time/date.

 Except that consistency doesn't require both.  Either one is
 sufficient and trying to have both merely puts you in the situation of
 a person with two clocks - you don't know which one is correct.

 Moreover, it's easy enough to fake an ascending time/date.  (Take the
 max of the system time and epsilon past the most recent entry.)

 If time is actually an issue, you can't use system time unless it's
 guaranteed to be accurate, not just consistent.  For that, you're
 probably better off consulting an accurate time source.


This was pretty much exactly my thought.  Put your own central server
on the web and use urlfetch() to get timestamp/invoice numbers.


-- James

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Announcing: System Status Dashboard, Quota Details Page, and a Preview of Billing

2008-12-17 Thread James Ashley

Just for clarification:

There seems, to me, to be a big distinction between support for large
files (to me, that sounds like serving bigger files that I upload via
appcfg) and supporting large files uploaded by end-users (which, to
me, implies letting the web app store data in bigger BLOBs).

It seems perfectly workable (if a nasty bit of coding) to treat the
database BLOBs as a virtual file system, breaking a file into multiple
chunks and streaming them back one at a time.  But actually uploading
such a thing means getting over the 1 MB request limit.  Is that part
of the plan?

Thanks yet again,
James

On Dec 17, 11:47 am, Marzia Niccolai ma...@google.com wrote:
 Hi Brian,

 These two features (billing and large file uploads) are being worked on
 concurrently but their release dates are not tied together.  They both are
 on the roadmap for Q1, and are still on track for that time.  We haven't yet
 determined the maximum size for large files.

 -Marzia

 On Wed, Dec 17, 2008 at 4:40 AM, BrianJinwright br...@ifeets.com wrote:

  I agree it is possible in s3 just set the ACL of that bucket or
  object. I think yu Ping's question is a good one. When billing is
  opened up will can we store files larger than 1MB. If so, how large.

  Thanks,
  Brian Jinwright


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: How can we develop apps using SVN?

2008-12-15 Thread James Ashley

Check out assembla.com.  It has both source control hosting (give
mercurial a try...it's a lot more flexible than SVN, the the GUI
options still have their quirks) and project management features
(which is what it sounds like you want).

(Note:  I'm not affiliated with them at all.  Just a happy customer).

On Dec 14, 9:27 am, Stella stella.kovalc...@gmail.com wrote:
 How can I share App-Engine project through SVN? Is there a way to
 divide designer's and programmer's task?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] import semantics (was Re: handling classes across multiple .py files)

2008-12-12 Thread James Ashley

import models vs. from models import *:

There might be some low-level nuance differences, but the important
one (to me) is your module's name space.

If you do from blah import * you wind up with everything in the
other module.  This *may* be what you want, but it usually isn't.  If
there's something in that module with the same name as the one doing
the importing, it can lead to bugs that are really hard to track down.

You also throw away any clues about where something's defined.

More and more, I find myself doing things like import
modules.MyCompany.StringUtilities.foo as foo because it's a lot
easier to write foo.whatever than specifying the entire namespace, but
I'm still using names that are distinctive enough that I don't have to
worry about where something came from.

(You can do that by adding directories modules/MyCompany/
StringUtilities and then a module named foo.py.  Put a file named
__init.py__  in each directory in the tree.  I know you can do cool
things with that file...probably to specify actions that happen before
any modules in that directory or subdirectories get loaded, but I've
never really cared enough to look into it).

AFAICT, it's just a matter of style and preference (and how much
effort is some given thing worth).  But it's been my experience that
from blah import * is just begging for trouble.  (from blah import
specific is much better).

Regards,
James

On Dec 11, 6:38 pm, djidjadji djidja...@gmail.com wrote:
 For point 1)

 Place the model class definitions in 1 or more separate .py files
 You can put more then 1 model class in a .py file when you use the
 multiple file approach

 eq. models.py   # all model classes in one file

 or   user.py
   forum.py
   comment.py

 And use import statements like

 from models import *

 or

 from user import *
 from comment import *

 in the model files that need other model definitions and in the .py
 files that handle the requests (the ones named in the app.yaml file)

 Some people use

 import models

 and they have to use

 customer = models.User(..)

 instead of

 customer = User(..)

 At Python interpreter level it must have a different result, but I
 have no problem using the from import * method

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Isolated Application Deployment Instances

2008-12-10 Thread James Ashley

Maybe I'm missing something.  But it doesn't seem like it would take
much effort to write a script to automate it.

Something along the lines of:

instance_names = ('a', 'b', 'c',...)

for name in instance_names:
  # change the instance name in app.yaml

  # call appcfg.py

You'd probably want to keep the instance names in a database, to
associate with billing, etc, but that could be something for later
down the road.

On Dec 10, 5:25 am, rvjcallanan [EMAIL PROTECTED] wrote:
 I am new to GAE (who isn't?) and this subject has been touched on
 before in a number of guises but I think we could all benefit from a
 little more clarity.

 I am developing a proof-of-concept business app which can benefit
 hugely from the GAE framework. My ideal scenario is to deploy the app
 to each customer as a separate isolated instance, integrated within
 his managed Google Apps business account.

 The main reasons for this preference are:

 1. I would like to keep customer data and bugs isolated

 2. Each customer is an island as far as the application data model is
 concerned. One big database would require all tables and queries to be
 qualified by a customer ID, adding an unnecessary layer of complexity
 and impacting performance.

 3. I would like each customer to take individual responsibility for
 hosting costs

 4. I wish to leverage the Google Apps for managing user accounts
 within each organisation.

 5. I wish to expose my own API to allow for customisation.

 Bear in mind that each app instance may have to support a few thousand
 users at most (but probably not millions).

 Right now, deploying individual app instances in the way described
 above is kludgy at best. While it may be feasible to do this manually
 for a small number of high-value customers, it is certainly not a
 scalable solution. There is also the issue of protecting intellectual
 property.

 I am wondering if there is anything in the unofficial roadmap to
 address this requirement in the future. I would like to start
 developing now on the basis that deployment of individual app
 instances (and updates) will eventually be a single-click operation.

 Is this wishful thinking?
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: suddenly, a new error in Cheetah in production GAE, doesn't occur in SDK

2008-11-18 Thread James Ashley

Marzia,

I don't want to seem disagreeable, unappreciative, or anything like
that.  But I really have to agree with Ben on this one.

It seems to me that this change introduces a bug.  I've been using
python for 8 years now, and I can't think of any reason for a has_key
method to take only one argument (its parameter list is always (self,
key_name)).  That's a fairly core part of the language.  If you're
going to introduce a new method that does something vaguely similar,
but changes things significantly like this, IMHO, you should really
give it a different name.

Then again, you do have Guido on hand, and his whim certainly trumps
anything anyone else might say.  Maybe he's already vetted this
decision, and I need to just shut up and mind my own business.

Thank you for the help and support you're providing,
James

On Nov 17, 6:10 pm, Marzia Niccolai [EMAIL PROTECTED] wrote:
 Hi Ben,

 It's certainly not our desire to introduce any changes in the App Engine
 library that would break our users app, but from time to time some parts of
 the apis and libraries will be modified to fix issues/enhance features.

 When these fixes happen, it's always possible that this will break a certain
 subset of applications who are implicitly or incorrectly assuming certain
 features of the API.  Of course, we'd like to avoid this when possible, but
 sometimes it's difficult to anticipate how some of these changes can affect
 certain applications.

 We are certainly working on finding the right balance, and hope that as we
 continue development with App Engine these kind of things will happen less
 often.

 -Marzia

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---