[google-appengine] IN queries

2009-09-04 Thread Jeff Enderwick

I read somewhere that IN queries are processed serially by the
datastore. GOOGers, what is a rough rule-of-thumb on the benefit of
using IN? For example, if the base RT latency for anything with the
datastore is Nms, then could guesstimate that using N for a list of 3
is not a huge latency win, but using IN for 10 is. Does using IN
substantially cut down on the api_cpu_ms used vs sequential queries?

--~--~-~--~~~---~--~~
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: IN queries

2009-09-04 Thread Jeff Enderwick

Good thing I didn't rewrite my code before asking :-).
I see the asynctools Jason posted, but I would be looking for a join
(in the thread sense) that allows continued processing once all the
results are back.

On Fri, Sep 4, 2009 at 8:44 AM, Nick Johnson
(Google)nick.john...@google.com wrote:
 Hi Jeff,
 IN queries are split up into multiple basic queries entirely in user code,
 so there's no latency or other benefit to using them over doing multiple
 queries yourself - it's just for convenience. In future, though, the
 MultiQuery interface may be extended to do its queries in parallel.
 -Nick

 On Fri, Sep 4, 2009 at 4:30 PM, Jeff Enderwick jeff.enderw...@gmail.com
 wrote:

 I read somewhere that IN queries are processed serially by the
 datastore. GOOGers, what is a rough rule-of-thumb on the benefit of
 using IN? For example, if the base RT latency for anything with the
 datastore is Nms, then could guesstimate that using N for a list of 3
 is not a huge latency win, but using IN for 10 is. Does using IN
 substantially cut down on the api_cpu_ms used vs sequential queries?





 --
 Nick Johnson, Developer Programs Engineer, App Engine


 


--~--~-~--~~~---~--~~
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] The number of errors generated by your application every second

2009-09-04 Thread Jeff Enderwick

In the context dashboard, what precisely does 'errors' mean?
I see an error frequency in the dashboard that is much higher than
what I see in the logs.

--~--~-~--~~~---~--~~
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: Retrieving Source from GAE

2009-09-04 Thread Jeff Enderwick

dropbox is a nice/convenient option as well.

GOOGers, this is a missing feature that many customers have
assumed/expected, to their detriment. Personally, I have on  off-site
backups, but it seems that many aren't so fortunate (or are a little
too nonki). Yeah, if the customer uses his/her head, this situation
can be avoided. But the bottom line is that you are witnessing
customer pain, and by not addressing it, you will inevitably loose
customers.

$.02

On Fri, Sep 4, 2009 at 5:43 PM, Tim Hoffmanzutes...@gmail.com wrote:



 On Sep 4, 12:48 am, ae gappengin...@gmail.com wrote:
 Hi, I had a couple of hard drives die one after the other in a shot
 period of time so I lost all my source code.  Can someone from Google
 please PLEASE help me retrieve the source from GAE?  Thanks.

 Unfortunatley if you don't install one of the various tools to
 retrieve code  before you lose your code
 you are out of luck.

 If you don't want to use a public vcs I suggest you in the future tar /
 zip up you code and mail it to yourself in gmail.
 At least that way you will have an offsite backup.


 T
 


--~--~-~--~~~---~--~~
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: 30 Max simultaneous requests (maxThreads)?

2009-09-02 Thread Jeff Enderwick

There are application domains that spike severely. One example is AAA
for corporate environments. There are large companies on the planet
where *everyone* comes to work @ 8am +/-10min and logs in. Just one
example from a prior life...

On Wed, Sep 2, 2009 at 12:34 PM, Brandon N. Wirtzdrak...@digerat.com wrote:

 What would you need all those threads for in a web App?  If you were
 crunching DNA, or calculating the path of particles from the big bang that
 would make sense...

 But if your App completes a request in less than 3 seconds, you would still
 be able to server 10 users a second, 600 users a minute, 864k requests a
 day.

 If having 3 threads sped this up to 1 second, the math would work out to the
 same number of request potentials.

 Do to the CPU time limits on a task, it is unlikely you would want 2000
 threads because you'd burn through your Cycle limit just setting up those
 threads.

 I'm assuming from the Smiley after your comment about Cranking up the max
 threads, that you THINK you are doing something clever.  In all likely
 unless you are doing some super computing apps on a CPU(s) with enough cores
 to support that number of threads you are just wasting cycles in thread
 management, and time slicing.

 -Brandon Wirtz

 -Original Message-
 From: google-appengine@googlegroups.com
 [mailto:google-appeng...@googlegroups.com] On Behalf Of Adligo
 Sent: Tuesday, September 01, 2009 5:34 PM
 To: Google App Engine
 Subject: [google-appengine] 30 Max simultaneous requests (maxThreads)?


 Hi,

   I am developing a app (or more than one) that I would like to host
 on Google App Engine, however the architecture of the app involves
 cranking up the maxThreads (I am using my home grown hosting which now
 has Tomcat set to 2,000 maxThreads :) ).

 For example (1 six+ year old machine in my basement)
 http://zeuhl.adligo.com/gwt_util_demo_v3_1/GwtDemo.html?show_log=true


 


--~--~-~--~~~---~--~~
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: high variance in cpu_ms for same GET URL data, constant api_cpu_ms

2009-08-31 Thread Jeff Enderwick

thanks - I expected that the api calls would use parallel processing,
but the app/servelet itself is a single thread of execution.
if I have api_cpu_ms of 74, and cpu_ms of 1500, then that gives 1426ms
for the non-api (app/servelet usage), yes?
I'm trying to grok how that would happen in a single thread in 965ms
of wall-clock time.

Jeff

On Mon, Aug 31, 2009 at 11:30 AM, Jeff S (Google)j...@google.com wrote:
 Hi Jeff

 On Fri, Aug 28, 2009 at 1:08 AM, Jeff Enderwick jeff.enderw...@gmail.com
 wrote:

 Trolling my logs, I'm coming across cases where there is extreme
 (~10x) variance in cpu_ms for the exact same code flow, same GET URL
 and same data (not even any intervening writes to the datastore). I am
 logging my db.* function accesses, and I have factored out memcache
 too. For example:

 92ms, 142cpu_ms, 74api_cpu_ms, followed by:
 965ms, 1500cpu_ms, 74api_cpu_ms

 Q1: what could cause such a whopping delta? I am using Django, so
 perhaps template compilation? I used cprofile on the SDK with a
 similar data/result set, and the first page served was maybe ~2x
 subsequent pages in total time. Thoughts?

 Your idea of template compilation is along the same lines as my thinking. I
 can't say difinitively for this case but I would guess that you might be
 seeing a more expensive first request when a new instance of you app is
 being spun up.


 Q2: I am assuming the 1st number after the '200' is the wall-clock
 time-to-server. As the app is single threaded ... how is it able to
 burn 1500ms less 74ms in only 965ms?

 Most API calls make calls to distributed services which parallelize work
 across multiple machines, so it often easy to use more CPU time than wall
 clock time. If you want to see where the CPU usage is coming from, you can
 get information about CPU quota levels at any point within your code as
 documented here:

 http://code.google.com/appengine/docs/quotas.html#Monitoring_CPU_Usage_in_a_Request

 Thank you,

 Jeff


 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: high variance in cpu_ms for same GET URL data, constant api_cpu_ms

2009-08-31 Thread Jeff Enderwick

Thanks Jeff - the app is 'el-cajon', version 4. Python runtime.

On Mon, Aug 31, 2009 at 3:16 PM, Jeff S (Google)j...@google.com wrote:

 Hi Jeff,

 Ah I see, thanks for the details. I'm looking into this, would you
 mind sharing which runtime you are using, and the app ID?

 Cheers,

 Jeff

 On Aug 31, 1:52 pm, Jeff Enderwick jeff.enderw...@gmail.com wrote:
 thanks - I expected that the api calls would use parallel processing,
 but the app/servelet itself is a single thread of execution.
 if I have api_cpu_ms of 74, and cpu_ms of 1500, then that gives 1426ms
 for the non-api (app/servelet usage), yes?
 I'm trying to grok how that would happen in a single thread in 965ms
 of wall-clock time.

 Jeff

 On Mon, Aug 31, 2009 at 11:30 AM, Jeff S (Google)j...@google.com wrote:
  Hi Jeff

  On Fri, Aug 28, 2009 at 1:08 AM, Jeff Enderwick jeff.enderw...@gmail.com
  wrote:

  Trolling my logs, I'm coming across cases where there is extreme
  (~10x) variance in cpu_ms for the exact same code flow, same GET URL
  and same data (not even any intervening writes to the datastore). I am
  logging my db.* function accesses, and I have factored out memcache
  too. For example:

  92ms, 142cpu_ms, 74api_cpu_ms, followed by:
  965ms, 1500cpu_ms, 74api_cpu_ms

  Q1: what could cause such a whopping delta? I am using Django, so
  perhaps template compilation? I used cprofile on the SDK with a
  similar data/result set, and the first page served was maybe ~2x
  subsequent pages in total time. Thoughts?

  Your idea of template compilation is along the same lines as my thinking. I
  can't say difinitively for this case but I would guess that you might be
  seeing a more expensive first request when a new instance of you app is
  being spun up.

  Q2: I am assuming the 1st number after the '200' is the wall-clock
  time-to-server. As the app is single threaded ... how is it able to
  burn 1500ms less 74ms in only 965ms?

  Most API calls make calls to distributed services which parallelize work
  across multiple machines, so it often easy to use more CPU time than wall
  clock time. If you want to see where the CPU usage is coming from, you can
  get information about CPU quota levels at any point within your code as
  documented here:

 http://code.google.com/appengine/docs/quotas.html#Monitoring_CPU_Usag...

  Thank you,

  Jeff

  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: high variance in cpu_ms for same GET URL data, constant api_cpu_ms

2009-08-31 Thread Jeff Enderwick

Okay - so ms != milliseconds, really (real-cpu-GHz *
milliseconds)/1.2GHz. That clears it up.

On Mon, Aug 31, 2009 at 4:27 PM, Jeff S (Google)j...@google.com wrote:

 Hello again Jeff,

 The CPU measurements for runtime are actually in cycles which would be
 performed by a 1.2 GHz processor in a second. We used to call these
 amounts megacycles, as described in our documentation:

 http://code.google.com/appengine/docs/quotas.html#Resources

 
 CPU time is reported in seconds, which is equivalent to the number
 of CPU cycles that can be performed by a 1.2 GHz Intel x86 processor
 in that amount of time. The actual number of CPU cycles spent varies
 greatly depending on conditions internal to App Engine, so this number
 is adjusted for reporting purposes using this processor as a reference
 measurement.
 

 For the runtime portion of your application (non API usage), the CPU
 is running faster than 1.2 GHz so it is possible to use more
 normalized CPU seconds (or megacycles if you prefer) in the amount of
 real time. This does seem a bit confusing though, so I'm open to ideas
 on how to make this more clear.

 Thank you,

 Jeff

 On Aug 31, 3:20 pm, Jeff S (Google) j...@google.com wrote:
 Nevermind, I forgot that you had mentioned Django :-) The app ID would
 still be helpful as well as example code if you feel comfortable
 sharing.

 Thank you,

 Jeff

 On Aug 31, 3:16 pm, Jeff S (Google) j...@google.com wrote:

  Hi Jeff,

  Ah I see, thanks for the details. I'm looking into this, would you
  mind sharing which runtime you are using, and the app ID?

  Cheers,

  Jeff

  On Aug 31, 1:52 pm, Jeff Enderwick jeff.enderw...@gmail.com wrote:

   thanks - I expected that the api calls would use parallel processing,
   but the app/servelet itself is a single thread of execution.
   if I have api_cpu_ms of 74, and cpu_ms of 1500, then that gives 1426ms
   for the non-api (app/servelet usage), yes?
   I'm trying to grok how that would happen in a single thread in 965ms
   of wall-clock time.

   Jeff

   On Mon, Aug 31, 2009 at 11:30 AM, Jeff S (Google)j...@google.com wrote:
Hi Jeff

On Fri, Aug 28, 2009 at 1:08 AM, Jeff Enderwick 
jeff.enderw...@gmail.com
wrote:

Trolling my logs, I'm coming across cases where there is extreme
(~10x) variance in cpu_ms for the exact same code flow, same GET URL
and same data (not even any intervening writes to the datastore). I am
logging my db.* function accesses, and I have factored out memcache
too. For example:

92ms, 142cpu_ms, 74api_cpu_ms, followed by:
965ms, 1500cpu_ms, 74api_cpu_ms

Q1: what could cause such a whopping delta? I am using Django, so
perhaps template compilation? I used cprofile on the SDK with a
similar data/result set, and the first page served was maybe ~2x
subsequent pages in total time. Thoughts?

Your idea of template compilation is along the same lines as my 
thinking. I
can't say difinitively for this case but I would guess that you might 
be
seeing a more expensive first request when a new instance of you app is
being spun up.

Q2: I am assuming the 1st number after the '200' is the wall-clock
time-to-server. As the app is single threaded ... how is it able to
burn 1500ms less 74ms in only 965ms?

Most API calls make calls to distributed services which parallelize 
work
across multiple machines, so it often easy to use more CPU time than 
wall
clock time. If you want to see where the CPU usage is coming from, you 
can
get information about CPU quota levels at any point within your code as
documented here:

   http://code.google.com/appengine/docs/quotas.html#Monitoring_CPU_Usag...

Thank you,

Jeff

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] high variance in cpu_ms for same GET URL data, constant api_cpu_ms

2009-08-28 Thread Jeff Enderwick

Trolling my logs, I'm coming across cases where there is extreme
(~10x) variance in cpu_ms for the exact same code flow, same GET URL
and same data (not even any intervening writes to the datastore). I am
logging my db.* function accesses, and I have factored out memcache
too. For example:

92ms, 142cpu_ms, 74api_cpu_ms, followed by:
965ms, 1500cpu_ms, 74api_cpu_ms

Q1: what could cause such a whopping delta? I am using Django, so
perhaps template compilation? I used cprofile on the SDK with a
similar data/result set, and the first page served was maybe ~2x
subsequent pages in total time. Thoughts?

Q2: I am assuming the 1st number after the '200' is the wall-clock
time-to-server. As the app is single threaded ... how is it able to
burn 1500ms less 74ms in only 965ms?

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: synthentic keys - performance implications?

2009-08-25 Thread Jeff Enderwick

For posterity, one such gotcha is a case where Model instances work
fine, but Expando instances can loose their additive attributes coming
back out of the datastore. Switched to factory @staticmethod, and all
is good now...

On Tue, Aug 25, 2009 at 6:32 AM, Nick Johnson
(Google)nick.john...@google.com wrote:
 On Mon, Aug 24, 2009 at 6:44 PM, Jeff Enderwick jeff.enderw...@gmail.com
 wrote:

 thanks - I got bit by those __init__ nuances over the weekend. I ended
 up passing an optional flag to the __init__ to say this is really a
 new() vs a datastore reconstitution. I del the optional flag from
 kwargs before calling the super __init__. In the datastore
 reconstitution case, I do nothing but call the super __init__.

 Does that cover the __init__ gotchas, or am I digging my own grave by
 not converting to a distinct create function?

 I don't know the gotchas well enough to say. I still think a factory
 function is your best bet. :)
 -Nick Johnson


 On Mon, Aug 24, 2009 at 3:56 AM, Nick Johnson
 (Google)nick.john...@google.com wrote:
  Hi Jeff,
 
  On Sat, Aug 22, 2009 at 7:24 PM, Jeff Enderwick
  jeff.enderw...@gmail.com
  wrote:
 
  Currently, one must put() in order to have obj.key() be valid. In some
  flows, I find my self having to put() object twice for this reason.
 
  If I make a synthetic key, it appears that I can avoid this:
 
  class Joker(db.Model):
   unused = db.StringProperty()
   def __init__(self):
     m = hashlib.sha1()
     m.update(str(time.time()))
     name = base64.b64encode(m.digest())
     logging.debug(name=+name)
     db.Model.__init__(self, key_name=name)
 
  1) GOOG folks - are there any performance downsides to taking this
  approach?
 
  Not really, no.
 
 
  2) If no, are there any other environmental factors that might be
  fodder for the hash (user, etc)?
 
  I would recommend using uuid.uuid4().hex instead of a straight SHA1 sum.
  UUIDs are guaranteed to be unique.
  I would also recommend defining a class method called something like
  'create' that generates the key name and calls __init__. There are
  subtle-use cases around __init__ and reconstructing entities from the
  datastore, and it's difficult to get right - much more straightforward
  to
  define a class method to construct new entities.
  -Nick Johnson
 
 
  Thanks,
  Jeff
 
 
 
 
 
  --
  Nick Johnson, Developer Programs Engineer, App Engine
 
  
 





 --
 Nick Johnson, Developer Programs Engineer, App Engine

 


--~--~-~--~~~---~--~~
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: synthentic keys - performance implications?

2009-08-24 Thread Jeff Enderwick

thanks - I got bit by those __init__ nuances over the weekend. I ended
up passing an optional flag to the __init__ to say this is really a
new() vs a datastore reconstitution. I del the optional flag from
kwargs before calling the super __init__. In the datastore
reconstitution case, I do nothing but call the super __init__.

Does that cover the __init__ gotchas, or am I digging my own grave by
not converting to a distinct create function?

On Mon, Aug 24, 2009 at 3:56 AM, Nick Johnson
(Google)nick.john...@google.com wrote:
 Hi Jeff,

 On Sat, Aug 22, 2009 at 7:24 PM, Jeff Enderwick jeff.enderw...@gmail.com
 wrote:

 Currently, one must put() in order to have obj.key() be valid. In some
 flows, I find my self having to put() object twice for this reason.

 If I make a synthetic key, it appears that I can avoid this:

 class Joker(db.Model):
  unused = db.StringProperty()
  def __init__(self):
    m = hashlib.sha1()
    m.update(str(time.time()))
    name = base64.b64encode(m.digest())
    logging.debug(name=+name)
    db.Model.__init__(self, key_name=name)

 1) GOOG folks - are there any performance downsides to taking this
 approach?

 Not really, no.


 2) If no, are there any other environmental factors that might be
 fodder for the hash (user, etc)?

 I would recommend using uuid.uuid4().hex instead of a straight SHA1 sum.
 UUIDs are guaranteed to be unique.
 I would also recommend defining a class method called something like
 'create' that generates the key name and calls __init__. There are
 subtle-use cases around __init__ and reconstructing entities from the
 datastore, and it's difficult to get right - much more straightforward to
 define a class method to construct new entities.
 -Nick Johnson


 Thanks,
 Jeff





 --
 Nick Johnson, Developer Programs Engineer, App Engine

 


--~--~-~--~~~---~--~~
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: Google App Engine and Dedicated IP

2009-08-24 Thread Jeff Enderwick

There is a related feature request, which you can star:
http://code.google.com/p/googleappengine/issues/detail?id=792colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component

On Mon, Aug 24, 2009 at 1:13 AM, jackyaoye...@gmail.com wrote:

 Thanks, I'll try to port the site to GAE.

 On Aug 23, 11:05 pm, Barry Hunter barrybhun...@googlemail.com wrote:
 No this is not possible, for many reasons.

 A static IP would lose much of the advantage of AppEngine.

 You could if you want proxy the site though the server with the static
 IP, but seems kinda silly.

 On 23/08/2009, yaoye yaoye...@gmail.com wrote:





   Hi, guys,

   Would it be possible to bind a dedicated IP to my GAE-based site? I
   have a pr-4 site, and I wanna port it to GAE, but I'm worried about
   losing its ranking in Google for IP changing.

   All suggestions are welcome!

   Thanks a lot.
 


--~--~-~--~~~---~--~~
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: https support

2009-08-22 Thread Jeff Enderwick

Star it, bro: 
http://code.google.com/p/googleappengine/issues/detail?id=792colspec=ID%20Type%20Status%20Priority%20Stars%20Owner%20Summary%20Log%20Component

On Fri, Aug 21, 2009 at 10:03 PM, repairmanalau2...@gmail.com wrote:

 google guys,

 I don't know if you guys realize the implication of not getting a
 static IP?   if I have a domain (abc.com) I cannot map it to the
 appspot subdomain without an IP and I have to resort to a redirect.
 And search engines are not friendly to redirects.  And no serious
 website will ever want to redirect to blah.appsot.com  it just looks
 unprofessional.  So this lack of static IP is preventing google app
 engine from becoming actually useful like EC2 for real business.  And
 that's why there is no serious apps or serious ecommerce systems
 running on your GAE so far despite of all the hype.    It's almost
 like selling a car without headlights i.e. sounds like a small miss
 but it will prevent the car you are selling from being popular.  no
 serious person can drive only during the day time.  Please don't think
 of this static IP problem from the techie point of view, think from
 your 'customers' perspective.  This is a show stopper!    GAE is such
 a good concept and can revolutionize the industry but this lack of
 static IP is such a spoiler!

 On Aug 6, 7:27 am, Tony fatd...@gmail.com wrote:
 Fair enough.  I'm fine with we're working on solutions, as long as
 it's not sorry, wait for the world to upgrade to FF3/IE8.

 On Aug 6, 10:21 am, Nick Johnson (Google) nick.john...@google.com
 wrote:

  Hi Tony,

  We're looking into solutions. It's not as simple as it may first
  appear - in the case of a service like Amazon EC2, your server resides
  at only a single physical location, and so does theIPaddress you
  rent. In contrast, App Engine apps are served from IPs at Google
  datacenters around the globe.

  -Nick Johnson

  On Thu, Aug 6, 2009 at 3:18 PM, Tonyfatd...@gmail.com wrote:

   Why not charge a monthly fee for apps to get astaticIP(like Amazon
   does)?  Scarcity of supply seems like a bit of a cop-out to me - it's
   not apparent that a majority of app engine apps require this support.
   The customers you're losing because of this, however, are customers
   that plan to process e-commerce transactions online without looking
   like a phishing scam.  Customers that make money on your service are
   more likely to spend money on your service.

   On Aug 5, 3:55 am, Nick Johnson (Google) nick.john...@google.com
   wrote:
   Hi J Singh,

   Due to the way SSL works, this is not currently possible without
   allocating anIPaddress for each App Engine domain that would use SSL
   - which itself isn't very practical due to IPv4 address scarcity.

   The latest version of SSL supports using a singleIPaddress for
   multiple sites with different certificates, but browser support for
   this version is not yet nearly widespread enough to make it a
   practical alternative.

   -Nick Johnson

   On Wed, Aug 5, 2009 at 5:39 AM, J Singhj.si...@earlystageit.com wrote:
For an appengine-based 
site,https://abc.appspot.comiscurrentlysupported
buthttps://www.abc.comcannotbe supported. I know there is a technical
hurdle to cross but didn't know if any techniques had been proposed 
for
being able to usewww.abc.comwithSSLconnections?

Thanks.

J Singh

Managing Director
Early Stage IT
(978) 760-2055
   http://www.earlystageit.com

   --
   Nick Johnson, Developer Programs Engineer, App Engine

  --
  Nick Johnson, Developer Programs Engineer, App Engine
 


--~--~-~--~~~---~--~~
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] synthentic keys - performance implications?

2009-08-22 Thread Jeff Enderwick

Currently, one must put() in order to have obj.key() be valid. In some
flows, I find my self having to put() object twice for this reason.

If I make a synthetic key, it appears that I can avoid this:

class Joker(db.Model):
  unused = db.StringProperty()
  def __init__(self):
m = hashlib.sha1()
m.update(str(time.time()))
name = base64.b64encode(m.digest())
logging.debug(name=+name)
db.Model.__init__(self, key_name=name)

1) GOOG folks - are there any performance downsides to taking this approach?
2) If no, are there any other environmental factors that might be
fodder for the hash (user, etc)?

Thanks,
Jeff

--~--~-~--~~~---~--~~
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: ListProperty vs StringListProperty

2009-08-11 Thread Jeff Enderwick

So, if I want StringListProperty, but I don't want/need the indexing,
then I ought use ListProperty(db.Text)?

Thanks again,
Jeff

On Mon, Aug 10, 2009 at 11:35 AM, Nick Johnson
(Google)nick.john...@google.com wrote:

 On Mon, Aug 10, 2009 at 7:25 PM, Jeff Enderwickjeff.enderw...@gmail.com 
 wrote:

 Thanks Nick. So in the case below, will the datastore then maintain an
 index on alist by default?

 Yes - str and unicode instances get indexed by default.

 -Nick


 On Mon, Aug 10, 2009 at 3:35 AM, Nick Johnson
 (Google)nick.john...@google.com wrote:

 Hi Jeff,

 A StringListProperty is exactly equivalent, as far as the datastore is
 concerned, to multiple individual String properties. That is, an
 entity like this:

 MyEntity(astring=foo, alist=[foo, bar])

 is stored in the datastore analagous to this:

 ((astring, foo), (alist, foo), (alist, bar))

 -Nick Johnson

 On Sun, Aug 9, 2009 at 6:33 PM, Jeff Enderwickjeff.enderw...@gmail.com 
 wrote:

 Hey all, is there any datastop/API overhead difference between these
 two? Is there any difference in index (or lack thereof) maintenance by
 the datastore?

 Thanks,
 Jeff

 




 --
 Nick Johnson, Developer Programs Engineer, App Engine

 


 




 --
 Nick Johnson, Developer Programs Engineer, App Engine

 


--~--~-~--~~~---~--~~
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: ListProperty vs StringListProperty

2009-08-11 Thread Jeff Enderwick

Thanks again Nick. Sorry to be a PITA. We've been told that
TextProperty is effectively the same as StringProperty w/out the
indexing (although the online doc indicates some max length
differences).

What are the differences between ListProperty(db.Text) and
StringListProperty(indexed=False), and what makes the latter better?

On Tue, Aug 11, 2009 at 3:55 AM, Nick Johnson
(Google)nick.john...@google.com wrote:

 On Tue, Aug 11, 2009 at 7:04 AM, Jeff Enderwickjeff.enderw...@gmail.com 
 wrote:

 So, if I want StringListProperty, but I don't want/need the indexing,
 then I ought use ListProperty(db.Text)?

 A better option would be to use StringListProperty(indexed=False).

 -Nick Johnson


 Thanks again,
 Jeff

 On Mon, Aug 10, 2009 at 11:35 AM, Nick Johnson
 (Google)nick.john...@google.com wrote:

 On Mon, Aug 10, 2009 at 7:25 PM, Jeff Enderwickjeff.enderw...@gmail.com 
 wrote:

 Thanks Nick. So in the case below, will the datastore then maintain an
 index on alist by default?

 Yes - str and unicode instances get indexed by default.

 -Nick


 On Mon, Aug 10, 2009 at 3:35 AM, Nick Johnson
 (Google)nick.john...@google.com wrote:

 Hi Jeff,

 A StringListProperty is exactly equivalent, as far as the datastore is
 concerned, to multiple individual String properties. That is, an
 entity like this:

 MyEntity(astring=foo, alist=[foo, bar])

 is stored in the datastore analagous to this:

 ((astring, foo), (alist, foo), (alist, bar))

 -Nick Johnson

 On Sun, Aug 9, 2009 at 6:33 PM, Jeff Enderwickjeff.enderw...@gmail.com 
 wrote:

 Hey all, is there any datastop/API overhead difference between these
 two? Is there any difference in index (or lack thereof) maintenance by
 the datastore?

 Thanks,
 Jeff

 




 --
 Nick Johnson, Developer Programs Engineer, App Engine

 


 




 --
 Nick Johnson, Developer Programs Engineer, App Engine

 


 




 --
 Nick Johnson, Developer Programs Engineer, App Engine

 


--~--~-~--~~~---~--~~
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] api_cpu_ms (need to be sure I'm not being stupid)

2009-08-11 Thread Jeff Enderwick

long story short, I had a URL that was running 900/1500ms (app/api)
CPU, so I had to dig into it. I was surprised by just how much CPU
time some simple things are taking (or how much I think they're taking
;-). For example, with this class:

class AssocObject(db.Model):
  urlPath = db.TextProperty()
  fileName = db.TextProperty()
  contentType = db.TextProperty()
  blob = db.BlobProperty()

# Unused in query history -- copied from input.
- kind: AssocObject
  ancestor: yes

and the following snippet:

fileObj = AssocObject(parent = node)
db.put(fileObj)

Just the single db.put() costs 250/210ms of CPU. Getting rid of the
'parent =' saves on 10s of ms. The total data set size is in the 10s
of objects. I am not setting any of the variables in the class
instance; the code really is create obj and store it at this point.

Am I missing something? Is this level of CPU burn to be expected?

Thanks,
Jeff

--~--~-~--~~~---~--~~
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: ListProperty vs StringListProperty

2009-08-10 Thread Jeff Enderwick

Thanks Nick. So in the case below, will the datastore then maintain an
index on alist by default?

On Mon, Aug 10, 2009 at 3:35 AM, Nick Johnson
(Google)nick.john...@google.com wrote:

 Hi Jeff,

 A StringListProperty is exactly equivalent, as far as the datastore is
 concerned, to multiple individual String properties. That is, an
 entity like this:

 MyEntity(astring=foo, alist=[foo, bar])

 is stored in the datastore analagous to this:

 ((astring, foo), (alist, foo), (alist, bar))

 -Nick Johnson

 On Sun, Aug 9, 2009 at 6:33 PM, Jeff Enderwickjeff.enderw...@gmail.com 
 wrote:

 Hey all, is there any datastop/API overhead difference between these
 two? Is there any difference in index (or lack thereof) maintenance by
 the datastore?

 Thanks,
 Jeff

 




 --
 Nick Johnson, Developer Programs Engineer, App Engine

 


--~--~-~--~~~---~--~~
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] ListProperty vs StringListProperty

2009-08-09 Thread Jeff Enderwick

Hey all, is there any datastop/API overhead difference between these
two? Is there any difference in index (or lack thereof) maintenance by
the datastore?

Thanks,
Jeff

--~--~-~--~~~---~--~~
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: simultaneous dynamic requests, max blob size, multi-blob?

2009-07-23 Thread Jeff Enderwick

Thanks Nick!

On Wed, Jul 22, 2009 at 3:56 AM, Nick Johnson
(Google)nick.john...@google.com wrote:

 Hi Jeff,

 When I said 10MB, I was referring to the 10MB request size limit, and
 pointing out that the forthcoming blob API will allow storing blobs
 larger than that size also. You can currently store anything up to
 10MB by splitting the blob into multiple datastore entities, but it's
 impossible to accept an upload greater than 10MB at all.

 -Nick Johnson

 On Tue, Jul 21, 2009 at 9:26 AM, Jeff Enderwickjeff.enderw...@gmail.com 
 wrote:

 Yeah, just trying to get clarification. Nick's email stated 10MB,
 Wikipedia says 1MB with a 10MB response limit. If Wikipedia is right
 and I can get 10MB in/out the door, I can always fragment (or wait, or
 if Nick says it is now 10MB ... :-).

 http://en.wikipedia.org/wiki/Google_App_Engine#Hard_limits

 On Mon, Jul 20, 2009 at 4:00 PM, Wooblegeoffsp...@gmail.com wrote:



 On Jul 18, 8:29 pm, Jeff Enderwick jeff.enderw...@gmail.com wrote:
 Is 10MB the current limit, or is it 1MB? I was under the impression
 that the max blob size was 1MB, and max HTTP response size was 10MB.
 Do I have it right?

 API calls are limited to 1MB unless that's been changed without an
 announcement fairly recently; you couldn't get more than 1MB into an
 entity even if the blob itself could hold it.
 


 




 --
 Nick Johnson, App Engine Developer Programs Engineer
 Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration
 Number: 368047

 


--~--~-~--~~~---~--~~
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: simultaneous dynamic requests, max blob size, multi-blob?

2009-07-21 Thread Jeff Enderwick

Yeah, just trying to get clarification. Nick's email stated 10MB,
Wikipedia says 1MB with a 10MB response limit. If Wikipedia is right
and I can get 10MB in/out the door, I can always fragment (or wait, or
if Nick says it is now 10MB ... :-).

http://en.wikipedia.org/wiki/Google_App_Engine#Hard_limits

On Mon, Jul 20, 2009 at 4:00 PM, Wooblegeoffsp...@gmail.com wrote:



 On Jul 18, 8:29 pm, Jeff Enderwick jeff.enderw...@gmail.com wrote:
 Is 10MB the current limit, or is it 1MB? I was under the impression
 that the max blob size was 1MB, and max HTTP response size was 10MB.
 Do I have it right?

 API calls are limited to 1MB unless that's been changed without an
 announcement fairly recently; you couldn't get more than 1MB into an
 entity even if the blob itself could hold it.
 


--~--~-~--~~~---~--~~
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] https support for dev_appserver.py?

2009-07-19 Thread Jeff Enderwick

Looks like dev_appserver.py doesn't support http (secure in app.yaml).
Any thoughts about adding that?
Or did I miss something?

Thanks!
Jeff

--~--~-~--~~~---~--~~
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: Eating one's own dog food

2009-07-18 Thread Jeff Enderwick

There are those of us who are betting real $s that GAE is a real
platform for serving an app that needs to scale. I am grateful that
GOOG lets me host my glassblowing web site for free (scalability not
an issue). I expect to pay money to GOOG for this platform if/when
things go well. Hopefully I will pay them a lot :-).

My $.02 is that the email-based QA support has been very good. The
GAE Marketing department seems to need major surgery:
- you have to set  meet a feature roadmap (with dates),
- you have to be able to provide reference customers.
These are business basics.

Jeff

On Thu, Jul 16, 2009 at 7:38 PM, GenghisOnemdkach...@gmail.com wrote:

 Hi Juguang

 Your words provide a nice counter-balance to those who are not so
 happy with App Engine. Yes, you are correct in reminding us all that
 we should be grateful for something free. And yes App Engine has
 likely provided a whole bunch of young, inquiring minds with an
 amazing opportunity to tinker and learn on a global scale.

 But for some strange reason, I'm also reminded of that old
 saying...you get what you pay for.


 On Jul 16, 7:26 pm, Juguang XIAO jugu...@gmail.com wrote:
 Dogfooding, as wikipedia names it, is ideological, may not be practical.
 People, as well as company, lives practically for surviving first then
 chasing dreams.

 I have seen the positive movement from Google, did so much for developers.
 People may take it for granted, thinking the leader should do more. I am
 content with GAE, as it offers some free and exciting stuffs. I cannot ask
 Google to give more, unless he decided so. People can be happy when they are
 grateful.

 Technically speaking, I do not think Google offers its best to developers.
 It will be too costy to do so. Their mainstream businesses need to be
 maintained, and I guess each business unit has its own authority and freedom
 to do thing in their own way. Core businesses and technologies need to be
 protected. If you are not happy, go for Microsoft. ;-)

 I do not believe, people can run their serious business without serious pay.
 6.5 hour per day CUP time is enough for casual applications. If you need
 more, try to create multiple account, schedule roster among them, sync your
 data among them. This is the solutions. If terms and conditions of use of
 GAE allows, there will be open souce projects for GAE clustering.

 Juguang



 On Fri, Jul 17, 2009 at 10:03 AM, GenghisOne mdkach...@gmail.com wrote:

  So it looks like there's an updated Google App Engine roadmap and
  guess what...no mention of full-text search.

  Doesn't that strike anyone as a bit odd? How can an emerging cloud
  computing platform not effectively address full-text search? And
  what's really odd is the absolute silence from Google...quite frankly,
  I don't get it.

  On Jul 16, 12:28 pm, Bryan bj97...@gmail.com wrote:
   This is a very interesting discussion.  I would like to see some input
   from Google.

   On Jul 15, 10:20 am, richard emberson richard.ember...@gmail.com
   wrote:

I understand that BigTable is behind GAE, but my concern is
more with GAE performance and quotas. If GAE had existed
when Larry and Sergey were developing their pagerack
algorithm, would they have used GEA for evaluation?
I have my doubts. They would quickly reach quota limits,
way before they knew if they had a viable idea.

Richard

Tony wrote:
 Though I realize this is not exactly what you're asking, the concept
 of GAE is that it exposes some of the infrastructure that all Google
 applications rely on (i.e. Datastore) for others to use.  So, in a
 sense, Google's various applications were using App Engine before App
 Engine existed.  As far as I know, every Google service runs on the
 same homogeneous infrastructure, which is part of what makes it so
 reliable (and why the only available languages are Python and Java,
 languages used internally at Google).

 But I don't work there, so maybe I'm completely off-base.

 On Jul 15, 12:53 pm, richard emberson richard.ember...@gmail.com
 wrote:
 Eating one's own dog foodhttp://
  en.wikipedia.org/wiki/Eating_one's_own_dog_food
 or in this case:
 Using one's own cloud.

 Amazon' cloud is based upon the IT technology they use
 within Amazon.
 Salesforce.com's Force.com offering is what they used to
 build their CRM system.

 These cloud vendors Eat their own dog food.

 If a cloud vendor does not use their cloud offering for
 their other products and/or internal systems, one
 would have to assume that the cloud is viewed as
 a technology ghetto within their own corporation - good
 enough for others but not for ourselves.

 So, concerning the Google App Engine, are other groups
 within Google clamoring to port or build their offerings
 on top of the App Engine? If so, please be specific, what
 Google products and infrastructure and what are the schedules
  

[google-appengine] Re: simultaneous dynamic requests, max blob size, multi-blob?

2009-07-18 Thread Jeff Enderwick

Is 10MB the current limit, or is it 1MB? I was under the impression
that the max blob size was 1MB, and max HTTP response size was 10MB.
Do I have it right?

On Thu, Jul 16, 2009 at 2:15 AM, Nick Johnson
(Google)nick.john...@google.com wrote:

 Hi Jeff,

 On Thu, Jul 16, 2009 at 3:33 AM, Jeff Enderwickjeff.enderw...@gmail.com 
 wrote:

 1) I saw that 30 was listed somewhere as the max simultaneous dynamic
 requests for an app. Is this really true? Even if I am paying, and I
 have a very popular app? I see the math indicating that one can retire
 400/sec with 75ms latency, but I am sure that GOOG-internal apps
 aren't held to this limit of 30. Is this really a hard limit?

 It's not a hard limit, no. If your app scales large enough, this will
 be increased. 400 QPS is a very busy app, though.


 2) Great to see that Service for storing and serving large files is
 on deck. Can y'all give any indication whether this will be
 accomplished by making blobs bigger (or adding some sort of uberblob)?
 Any indications on new max size would be great.

 It will definitely be capable of storing blobs larger than the current
 10MB limit. For more details, you'll have to wait for the service to
 be released.

 -Nick Johnson


 3) Along those lines, has anyone implemented something like multi-blob
 fragmentation/reassembly for storing  serving things greater than
 1MB?

 Thanks!
 Jeff

 




 --
 Nick Johnson, App Engine Developer Programs Engineer
 Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration
 Number: 368047

 


--~--~-~--~~~---~--~~
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] simultaneous dynamic requests, max blob size, multi-blob?

2009-07-15 Thread Jeff Enderwick

1) I saw that 30 was listed somewhere as the max simultaneous dynamic
requests for an app. Is this really true? Even if I am paying, and I
have a very popular app? I see the math indicating that one can retire
400/sec with 75ms latency, but I am sure that GOOG-internal apps
aren't held to this limit of 30. Is this really a hard limit?

2) Great to see that Service for storing and serving large files is
on deck. Can y'all give any indication whether this will be
accomplished by making blobs bigger (or adding some sort of uberblob)?
Any indications on new max size would be great.

3) Along those lines, has anyone implemented something like multi-blob
fragmentation/reassembly for storing  serving things greater than
1MB?

Thanks!
Jeff

--~--~-~--~~~---~--~~
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 there is no way to build a key id?

2009-07-07 Thread Jeff Enderwick

Just star'd it -thx.

2009/6/24 Jeff S (Google) j...@google.com:
 Hi Jeff,

 This is an idea that we're aware of as well. If you could reserve the next
 ID in advance, then you could actually do this in one put since multiple
 entities could be sent in one batch :-) The workaround available now is to
 use the key_name, but the difficulty becomes ensuring that the key_name is
 unique. Here is a feature request which I'm aware of which is along these
 lines (though the approach differs slightly):

 http://code.google.com/p/googleappengine/issues/detail?id=1003

 Thank you,

 Jeff

 2009/6/24 Jeff Enderwick jeff.enderw...@gmail.com

 Hey Jeff - sorry for the confusion. The idea was that one would be
 able to get the unique id from an GOOG and then do a db.put with that
 id as an arg. For example, let's say I want to create two entities,
 with each referring to each other. I need to do three db.put
 operations:

 a = Foo()
 db.put(a)
 b = Foo()
 b.ref = a.key()
 db.put(b)
 a.ref = b.key()
 db.put(a)

 One would hope to be able to do this with two db.puts.

 Thanks,
 Jeff


 2009/6/16 Jeff S (Google) j...@google.com:
 
  The datastore does not allow key_names which begin with a digit in
  order to avoid confusion with an ID, which is numerical. If you want
  to use numeric key names, you could add a one letter prefix :-)
 
  Happy coding,
 
  Jeff
 
  On Jun 16, 1:17 am, cryb cbuti...@gmail.com wrote:
  Hi Jeff.
  Thanks for your reply.. I really hope that in the near future
  appengine will support setting key ids for entities.
  You mentioned that I can use hooks in order to achieve my goal..
  However I was more interested in a solution based on appengine java
  sdk, and not on python hooks. Does appengine java sdk provide hooks or
  some other similar mechanism?
  It seems that for the moment I'll stick to generating key names.
  One more question: I've tried to generate some entities with key names
  on my local devappserver and I got a strange exception stating that I
  can't create key names that start with a digit (?!?)... this holds on
  google appengine production servers too or it's just a bug of
  devappserver?
 
  Thanks
 
  On Jun 16, 2:45 am, Jeff S (Google) j...@google.com wrote:
 
   Hi cryb,
 
   As you noted, we do not currently allow the ID for a key to be set,
   as we
   ensure that the ID is unique for each existing entity. I recommend
   using a
   key name instead of an ID, as Antoniov suggeted, if possible.
 
   It is technically possible to modify the key of an entity as it is
   being
   converted to a protocol buffer message before it is sent to the
   datastore.
   You could do this using hooks in the API proxy as described in this
   article:http://code.google.com/appengine/articles/hooks.htmlAlsoit is
   possible to
   construct the key for the desired object if you know the ID in
   advance.
 
   class X(db.Model):
 pass
 
   # If you've already created the entity so you have the ID.
   x_id = X().put().id()
 
   # Instead of getting by ID, you can create the key manually.
   k = db.Key.from_path('X', x_id)
 
   Now you have the desired key without having fetched the object, but
   the part
   which the model class does not allow is setting the key yourself. So
   you
   could modify the protocol buffer message before it is written to the
   datastore, but I don't recommend it.
 
   The decision to allow setting key_names but not IDs is something we
   may
   revisit.
 
   Happy coding,
 
   Jeff
 
   2009/6/12 cryb cbuti...@gmail.com
 
Hi.. that is to build key names... What I asked was why I can't
build
a key ID..
 
On Jun 12, 5:35 am, Antoniov nio@gmail.com wrote:
 Use the code:
 s = Story(key_name=xzy123)
 Then you create an entity with the key name xzy123.
 
 Check this:
  
http://code.google.com/intl/en-US/appengine/docs/python/datastore/key...
 
 On 6月12日, 上午1时28分, cryb cbuti...@gmail.com wrote:
 
  Does anyone know why it is possible to build a key name but NOT
  a key
  id? I know key IDs are used as autoincrements, but why can't I
  just
  override this mechanism and build my own key id?
  Suppose I want to overwrite an existent entry in my table that
  has a
  key id I know, and also I want to keep that key id after
  update...
  because I can't just build a key id, I am forced to fetch that
  entity,
  modify it and write it back, instead of just write the updated
  entity
  with the key id I already know - so an additional read to the
  datastore.
  Is there an obscure reason for that? (both key names and key
  ids are
  prefixed with appid/kind as far as I know so there is no chance
  of
  collision with other apps/kinds)
  
 




 


--~--~-~--~~~---~--~~
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

[google-appengine] Re: HIPAA requirements vs. AppEngine security guidelines

2009-07-07 Thread Jeff Enderwick

I say go hire a HIPAA consultant who can answer such questions authoritatively.

I've been through FIPS before, and you would not believe the odd
lawyeresque contrivances used to get certified. With HIPAA you are in
the same realm, and so you should hire yourself the appropriate
barrister.

$.02,

Jeff

On Tue, Jul 7, 2009 at 7:11 PM, GenghisOnemdkach...@gmail.com wrote:

 Andy

 Thanks for the heads-up...

 The link to that paper is here and it makes for a good read...
 http://awsmedia.s3.amazonaws.com/AWS_HIPAA_Whitepaper_Final.pdf

 Unfortunately after I skimmed through it I felt a little unsettled
 about AppEngine's security model...probably just my limited
 understanding of what's under the hood, but nonetheless security is
 kinda important and maybe its time to start asking some plain
 questions.

 For instance, here's one thing the Amazon whitepaper had to say about
 auditing...


 In designing a HIPAA-compliant system, customers should put auditing
 capabilities in place
 to allow security analysts to drill down into detailed activity logs
 or reports to see who had
 access, IP address entry, what data was accessed, etc. This data
 should be tracked, logged, and
 stored in a central location for extended periods of time in case of
 an audit. 

 So can AppEngine enable this and if so how? My gut is telling me yes
 but there's still a nagging concern...How do I know if someone inside
 Google looked at my customers data? Is there some kind of *deep*
 logging mechanism of sorts?

 Thx much.

 BTW -- If Google has a comparable whitepaper, I'd very much appreciate
 the link.

 Thx much.

 On Jul 7, 4:01 am, Andrew Badera and...@badera.us wrote:
 There's a whitepaper by Amazon on the topic. Google it, it's been a
 few months since I looked at it, don't have a link offhand, sorry.

 Thanks-
 - Andy Badera
 - and...@badera.us
 - Google me:http://www.google.com/search?q=andrew+badera
 - This email is: [ ] bloggable [x] ask first [ ] private

 On Mon, Jul 6, 2009 at 5:17 PM, GenghisOnemdkach...@gmail.com wrote:

  Does anyone know if Amazon's EC2 platform is HIPAA-compliant?

  On Jul 6, 12:44 pm, richard emberson richard.ember...@gmail.com
  wrote:
  Not going to happen. The IT requirements for Google would
  cost far more than the couple of applications that might
  need HIPAA. They would have to have a completely
  separate group with their own machines, passwords,
  procedures, etc. with a real wall (both material wall
  and software/hardware wall) between the group and the rest of
  Google or all of Google would have to be HIPAA
  compliant. So, how much is it worth for Google? Not much.

  RME

  Ken wrote:
   Hi,

   I'm researching the feasibility of running a healthcare app on the
   AppEngine cloud.  I've read through the AE terms of service and they
   don't say much about the actual security guidelines other than
   deferring to the boilerplate Google security policy.  I have no doubt
   there are internal documents detailing the exact security guarantees
   provided by Google's infrastructure, but that information is not
   readily available to the public.

   It's been a full year since the last time HIPAA was discussed in this
   group.  Now that SSL support has been enabled, data transfer
   constraints can be met with ease.  So, what's the story today with GAE
   and HIPAA compliance?  Are the App Engine's data storage and transfer
   mechanisms compatible with the guidelines set out by HIPAA?

   Google Apps documentation has quite a bit more security information,
   such as specifying annual SAS 70 Type II audits.  I'm not familiar
   with this particular security audit, but some quick research seems to
   indicate that SAS 70 audit controls are mostly a superset of HIPAA
   guidelines.  However, there are some aspects of HIPAA compliance that
   seem to be difficult to implement in a distributed database system, so
   any reassurances from the Google App Engine folks in this regard would
   be most appreciated.

   Thanks!

   Ken

  --
  Quis custodiet ipsos custodes
 


--~--~-~--~~~---~--~~
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 there is no way to build a key id?

2009-06-24 Thread Jeff Enderwick

Hey Jeff - sorry for the confusion. The idea was that one would be
able to get the unique id from an GOOG and then do a db.put with that
id as an arg. For example, let's say I want to create two entities,
with each referring to each other. I need to do three db.put
operations:

a = Foo()
db.put(a)
b = Foo()
b.ref = a.key()
db.put(b)
a.ref = b.key()
db.put(a)

One would hope to be able to do this with two db.puts.

Thanks,
Jeff


2009/6/16 Jeff S (Google) j...@google.com:

 The datastore does not allow key_names which begin with a digit in
 order to avoid confusion with an ID, which is numerical. If you want
 to use numeric key names, you could add a one letter prefix :-)

 Happy coding,

 Jeff

 On Jun 16, 1:17 am, cryb cbuti...@gmail.com wrote:
 Hi Jeff.
 Thanks for your reply.. I really hope that in the near future
 appengine will support setting key ids for entities.
 You mentioned that I can use hooks in order to achieve my goal..
 However I was more interested in a solution based on appengine java
 sdk, and not on python hooks. Does appengine java sdk provide hooks or
 some other similar mechanism?
 It seems that for the moment I'll stick to generating key names.
 One more question: I've tried to generate some entities with key names
 on my local devappserver and I got a strange exception stating that I
 can't create key names that start with a digit (?!?)... this holds on
 google appengine production servers too or it's just a bug of
 devappserver?

 Thanks

 On Jun 16, 2:45 am, Jeff S (Google) j...@google.com wrote:

  Hi cryb,

  As you noted, we do not currently allow the ID for a key to be set, as we
  ensure that the ID is unique for each existing entity. I recommend using a
  key name instead of an ID, as Antoniov suggeted, if possible.

  It is technically possible to modify the key of an entity as it is being
  converted to a protocol buffer message before it is sent to the datastore.
  You could do this using hooks in the API proxy as described in this 
  article:http://code.google.com/appengine/articles/hooks.htmlAlsoit is 
  possible to
  construct the key for the desired object if you know the ID in advance.

  class X(db.Model):
pass

  # If you've already created the entity so you have the ID.
  x_id = X().put().id()

  # Instead of getting by ID, you can create the key manually.
  k = db.Key.from_path('X', x_id)

  Now you have the desired key without having fetched the object, but the 
  part
  which the model class does not allow is setting the key yourself. So you
  could modify the protocol buffer message before it is written to the
  datastore, but I don't recommend it.

  The decision to allow setting key_names but not IDs is something we may
  revisit.

  Happy coding,

  Jeff

  2009/6/12 cryb cbuti...@gmail.com

   Hi.. that is to build key names... What I asked was why I can't build
   a key ID..

   On Jun 12, 5:35 am, Antoniov nio@gmail.com wrote:
Use the code:
s = Story(key_name=xzy123)
Then you create an entity with the key name xzy123.

Check this:
  http://code.google.com/intl/en-US/appengine/docs/python/datastore/key...

On 6月12日, 上午1时28分, cryb cbuti...@gmail.com wrote:

 Does anyone know why it is possible to build a key name but NOT a key
 id? I know key IDs are used as autoincrements, but why can't I just
 override this mechanism and build my own key id?
 Suppose I want to overwrite an existent entry in my table that has a
 key id I know, and also I want to keep that key id after update...
 because I can't just build a key id, I am forced to fetch that 
 entity,
 modify it and write it back, instead of just write the updated entity
 with the key id I already know - so an additional read to the
 datastore.
 Is there an obscure reason for that? (both key names and key ids are
 prefixed with appid/kind as far as I know so there is no chance of
 collision with other apps/kinds)
 


--~--~-~--~~~---~--~~
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 there is no way to build a key id?

2009-06-16 Thread Jeff Enderwick

I second that. I have cases where I'm building a structure of multiple
objects, and I have to do a put() just to get the id, and then I need
to do another put() to the same object later on. Eliminating the 2nd
put() of the same object in the flow would also allow me to wrap it in
a transaction.

2009/6/16 Andy Freeman ana...@earthlink.net:

 The decision to allow setting key_names but not IDs is something we may
 revisit.

 I hope that you're also considering some way to request and allocate
 an unused id for a given path prefix.  (That way we can get unique key
 ids to specify.)



 On Jun 15, 4:45 pm, Jeff S (Google) j...@google.com wrote:
 Hi cryb,

 As you noted, we do not currently allow the ID for a key to be set, as we
 ensure that the ID is unique for each existing entity. I recommend using a
 key name instead of an ID, as Antoniov suggeted, if possible.

 It is technically possible to modify the key of an entity as it is being
 converted to a protocol buffer message before it is sent to the datastore.
 You could do this using hooks in the API proxy as described in this 
 article:http://code.google.com/appengine/articles/hooks.htmlAlso it is 
 possible to
 construct the key for the desired object if you know the ID in advance.

 class X(db.Model):
   pass

 # If you've already created the entity so you have the ID.
 x_id = X().put().id()

 # Instead of getting by ID, you can create the key manually.
 k = db.Key.from_path('X', x_id)

 Now you have the desired key without having fetched the object, but the part
 which the model class does not allow is setting the key yourself. So you
 could modify the protocol buffer message before it is written to the
 datastore, but I don't recommend it.

 The decision to allow setting key_names but not IDs is something we may
 revisit.

 Happy coding,

 Jeff

 2009/6/12 cryb cbuti...@gmail.com





  Hi.. that is to build key names... What I asked was why I can't build
  a key ID..

  On Jun 12, 5:35 am, Antoniov nio@gmail.com wrote:
   Use the code:
   s = Story(key_name=xzy123)
   Then you create an entity with the key name xzy123.

   Check this:
 http://code.google.com/intl/en-US/appengine/docs/python/datastore/key...

   On 6月12日, 上午1时28分, cryb cbuti...@gmail.com wrote:

Does anyone know why it is possible to build a key name but NOT a key
id? I know key IDs are used as autoincrements, but why can't I just
override this mechanism and build my own key id?
Suppose I want to overwrite an existent entry in my table that has a
key id I know, and also I want to keep that key id after update...
because I can't just build a key id, I am forced to fetch that entity,
modify it and write it back, instead of just write the updated entity
with the key id I already know - so an additional read to the
datastore.
Is there an obscure reason for that? (both key names and key ids are
prefixed with appid/kind as far as I know so there is no chance of
collision with other apps/kinds)- Hide quoted text -

 - Show quoted text -
 


--~--~-~--~~~---~--~~
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: Deep entity groups and long key strings

2009-06-15 Thread Jeff Enderwick

Thanks Nick.

If I go down the path of building ID-based URLs in the manner you
suggest, will I likely have substantially shorter URLs than I would
with str(node.key())?

Thanks,
Jeff

On Mon, Jun 15, 2009 at 4:44 AM, Nick Johnson
(Google)nick.john...@google.com wrote:
 Hi Jeff,

 You're correct that the only way to access a datastore entity is to provide
 the full path to it - the key is the entity's primary (and only) key. If you
 know the entity type of each entity in the heirarchy, though, you can
 extract the id of the entity in question and all its parents, and represent
 the ID as a delimiter-separated list of IDs, though - 1/2/3/4 - and
 regenerate the key yourself.

 -Nick Johnson

 On Sun, Jun 14, 2009 at 5:51 PM, Jeff Enderwick jeff.enderw...@gmail.com
 wrote:

 I have possibly deep entity groups (think tree structure), but I want
 a URL where the user can go to a specific node, like:

 http://viewnode/node-id.

 I'd like to use db.get() to directly access the node rather than query
 based on node-id.

 If I build the URL based on str(node.key()), then the strings can get
 very big. Key.from_path() seems to want the entire path from the
 parent. Is it really the case that the only way to get direct access
 to an interior node in an entity group is provide the entire path to
 that node?

 Thanks, Jeff



 


--~--~-~--~~~---~--~~
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] forward reference in db.ReferenceProperty()

2009-06-15 Thread Jeff Enderwick

Apologies in advance if this is obvious to the experienced Python
programmer. It is clear that 20+yrs of C has worn grooves in my brain:

class ClassA(db.Expando):
  extref = db.ReferenceProperty(ClassB)

...
class ClassB(db.Expando):
  extref = db.ReferenceProperty(ClassA)

is what I want. Putting a:

class ClassB(db.Expando): pass

at the top seems to do the trick when playing w/Python, but GAE throws
a KindError on assignment, so clearly this ain't right...

Thanks,
Jeff

--~--~-~--~~~---~--~~
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] Deep entity groups and long key strings

2009-06-14 Thread Jeff Enderwick

I have possibly deep entity groups (think tree structure), but I want
a URL where the user can go to a specific node, like:

http://viewnode/node-id.

I'd like to use db.get() to directly access the node rather than query
based on node-id.

If I build the URL based on str(node.key()), then the strings can get
very big. Key.from_path() seems to want the entire path from the
parent. Is it really the case that the only way to get direct access
to an interior node in an entity group is provide the entire path to
that node?

Thanks, Jeff

--~--~-~--~~~---~--~~
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] looking for a GOOG logo I can use on my site

2009-05-29 Thread Jeff Enderwick

Something similar to what Facebook offers (the connect button).
I see the folks at typepad are using this:
http://static.typepad.com/.shared/images/profile/openid_buttons/google.gif

Does GOOG get mad if I use it? If I shrink it? Does GOOG offer images
that have been okayed by the branding folks?

Jeff

--~--~-~--~~~---~--~~
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
-~--~~~~--~~--~--~---