[appengine-java] Re: DEPLOYMENT FAILING AGAIN

2010-12-15 Thread Simon
Hi,

I don't know why the pre-compilation has to be turned off - as far as
I understand it, this activity occurs on the Google servers and it's
there that the problem occurs.  In one of the other deployment issue
threads, Ikai mentioned that you can get around this issue by turning
the pre-compilation off, so I'm just repeating that information!

On Dec 14, 10:25 pm, J Handal jhand...@gmail.com wrote:
 Simon

 I have exactly the same problem.I upgraded de JRE and JDK to version 6 build
 23(Last one)

 Why the jsp file don't compile?

 If you get the solution please let me know.

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



[appengine-java] Multiple Async get vs one Sync batch get?

2010-12-15 Thread Gal Dolber
Should I expect the similar performance? or the batch will always be better?

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



[appengine-java] Re: Synchronized reads/writes on a memcache variable

2010-12-15 Thread Simon
Hi,

I think the following should work with the following caveats:
- there's a small danger that if the server blows up before it
releases the lock, that no threads would be able to update your cache,
but since it's only a cache of data. This is easily mitigated by
introducing a task which periodically resets the lock.
- I still believe that there's the possibility that separate instances
will get a non-updated object, even if you use the locking, since I'm
assuming it takes x-amount of time for the changes in MemCache to
propagate throughout the instances.  I may be wrong in this assumption
however.

Anyway, your code would go something like:

boolean lockAcquired = false;

try {
lockAcquired = acquireLock();
doStuff();
} finally {
if (lockAcquired) {
releaseLock();
}
}


With the locking code being:

public static boolean acquireLock() {

boolean lockAcquired = true;
try {
while (increment() != 1) {
decrement();
Thread.sleep(500);
}
} catch (Throwable t) {
// Log error
lockAcquired = false;
}

return lockAcquired;
}

public static void releaseLock() {
decrement();
}

private static void decrement() {
MemcacheServiceFactory.getMemcacheService().increment(LOCK,
-1, 0L);
}

private static Long increment() {
return
MemcacheServiceFactory.getMemcacheService().increment(LOCK, 1, 0L);
}

On Dec 14, 9:56 pm, Jay Young jaydevfollo...@gmail.com wrote:
 Grr.  Just noticed another issue.  The cache item that you get the
 index is not the same item as the lock, so really you need two
 different cache items, one to make sure you have a unique value for
 the lock, and the lock itself.  The code above is correct, you just
 need different keys for the first two cache reads.

 If you can generate a guaranteed-unique name (maybe the thread ID +
 time?), you can drop the first cache item and use that as the lock
 value.  This would also prevent the issue with the code above if the
 lockIndex item is ever evicted and re-read at the same time (thus
 returning 0 for both), or if it overflows the long.

 (I honestly don't know if this is iron-clad, but intuitively it seems
 like it would work with only very minor edge cases.)

 On Dec 14, 4:08 pm, Andrei Cosmin Fifiiþã andrei.fifi...@gmail.com
 wrote:

  H, super...
  I was thinking of smth like (val mod 2) == 0/1 (true/false), but the lock
  reading wasn't safe.
  Thanks!

  On 14 December 2010 20:57, Jay Young jaydevfollo...@gmail.com wrote:

   Except return lockIndex should just be return true.

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

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



Re: [appengine-java] JavaMail Multipart message with inline images

2010-12-15 Thread Ronald R. DiFrango
Voted and added a comment.  It really is amazing that this simple feature is 
not supported.

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



Re: [appengine-java] JSF: sudden ViewExpiredException on GAE

2010-12-15 Thread Nick Belaevski
I'm currently looking at 
MemcacheService.SetPolicyhttp://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/memcache/MemcacheService.SetPolicy.html
 trying 
to find out what can be causing the problem. Can please anyone shed some 
light on:

   1. Are changes of HttpSession attributes propagated into memcache first? 
   If 'yes', what is the default SetPolicy then?
   2. How data store service is involved in HttpSession handling?

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



Re: [appengine-java] Re: UserService functionality when run via cron

2010-12-15 Thread Benjamin Grabkowitz
The bug reference would be nice. If only to vote it up.

On Wed, Dec 15, 2010 at 2:10 AM, andrew aute...@gmail.com wrote:

 I submitted a bug on the subject, and it was accepted.

 If you want the bug reference I can find it.

 Andrew

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



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



[appengine-java] Re: Synchronized reads/writes on a memcache variable

2010-12-15 Thread Jay Young
On Dec 15, 8:23 am, Simon qila...@gmail.com wrote:
 since I'm
 assuming it takes x-amount of time for the changes in MemCache to
 propagate throughout the instances.  I may be wrong in this assumption
 however.

I don't think cache data is propagated to the various app instances.
It resides in its own central (distributed) system and all handlers/
tasks/cron/whatever make RPC calls into the cache.

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



[appengine-java] Re: Synchronized reads/writes on a memcache variable

2010-12-15 Thread Jay Young
I considered the increment decrement approach, but it creates a race
condition with the counter.  Having many different threads/tasks
trying to grab the lock at the same time  could increment the number
above one, even when no one has the lock because there is still a
period of time between the increment() and decrement().  Remember,
these are RPC calls going over the network.  If any part of that
interaction is slow, there will be even longer periods between the +1
and -1.  I think this method errs on the side of accidentally locking
when there isn't a lock.  The only negatives I see would apply to any
lock that's implemented in a cache.


On Dec 15, 8:23 am, Simon qila...@gmail.com wrote:
 Hi,

 I think the following should work with the following caveats:
 - there's a small danger that if the server blows up before it
 releases the lock, that no threads would be able to update your cache,
 but since it's only a cache of data. This is easily mitigated by
 introducing a task which periodically resets the lock.
 - I still believe that there's the possibility that separate instances
 will get a non-updated object, even if you use the locking, since I'm
 assuming it takes x-amount of time for the changes in MemCache to
 propagate throughout the instances.  I may be wrong in this assumption
 however.

 Anyway, your code would go something like:

 boolean lockAcquired = false;

 try {
     lockAcquired = acquireLock();
     doStuff();} finally {

     if (lockAcquired) {
         releaseLock();
     }

 }

 With the locking code being:

     public static boolean acquireLock() {

         boolean lockAcquired = true;
         try {
             while (increment() != 1) {
                 decrement();
                 Thread.sleep(500);
             }
         } catch (Throwable t) {
             // Log error
             lockAcquired = false;
         }

         return lockAcquired;
     }

     public static void releaseLock() {
         decrement();
     }

     private static void decrement() {
         MemcacheServiceFactory.getMemcacheService().increment(LOCK,
 -1, 0L);
     }

     private static Long increment() {
         return
 MemcacheServiceFactory.getMemcacheService().increment(LOCK, 1, 0L);
     }

 On Dec 14, 9:56 pm, Jay Young jaydevfollo...@gmail.com wrote:







  Grr.  Just noticed another issue.  The cache item that you get the
  index is not the same item as the lock, so really you need two
  different cache items, one to make sure you have a unique value for
  the lock, and the lock itself.  The code above is correct, you just
  need different keys for the first two cache reads.

  If you can generate a guaranteed-unique name (maybe the thread ID +
  time?), you can drop the first cache item and use that as the lock
  value.  This would also prevent the issue with the code above if the
  lockIndex item is ever evicted and re-read at the same time (thus
  returning 0 for both), or if it overflows the long.

  (I honestly don't know if this is iron-clad, but intuitively it seems
  like it would work with only very minor edge cases.)

  On Dec 14, 4:08 pm, Andrei Cosmin Fifiiþã andrei.fifi...@gmail.com
  wrote:

   H, super...
   I was thinking of smth like (val mod 2) == 0/1 (true/false), but the lock
   reading wasn't safe.
   Thanks!

   On 14 December 2010 20:57, Jay Young jaydevfollo...@gmail.com wrote:

Except return lockIndex should just be return true.

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

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



[appengine-java] Re: Synchronized reads/writes on a memcache variable

2010-12-15 Thread Simon
I guess it depends on how much throughput you're expecting through the
bit of the system which requires the lock - I agree that if there is
huge contention then this isn't the way to go, although I'd argue that
you should be changing your design anyway since synchronizing across a
distributed architecture for a lot of threads is just unadvisable.

Memcache API calls currently take ~3ms according to the status page -
running a quick (and dirty ;) ) test with 100 threads attempting to
lock using the above method averages out at ~40ms for one of the
threads to obtain the lock.  If the API call times increase from 3 to
10ms, the time taken for one of the threads to obtain the lock
actually decreases to ~30ms!  The biggest risk you run is that because
it isn't FIFO, there may be a large portion of time before a
particular thread obtains the lock and so it may time out.

On Dec 15, 3:06 pm, Jay Young jaydevfollo...@gmail.com wrote:
 I considered the increment decrement approach, but it creates a race
 condition with the counter.  Having many different threads/tasks
 trying to grab the lock at the same time  could increment the number
 above one, even when no one has the lock because there is still a
 period of time between the increment() and decrement().  Remember,
 these are RPC calls going over the network.  If any part of that
 interaction is slow, there will be even longer periods between the +1
 and -1.  I think this method errs on the side of accidentally locking
 when there isn't a lock.  The only negatives I see would apply to any
 lock that's implemented in a cache.

 On Dec 15, 8:23 am, Simon qila...@gmail.com wrote:

  Hi,

  I think the following should work with the following caveats:
  - there's a small danger that if the server blows up before it
  releases the lock, that no threads would be able to update your cache,
  but since it's only a cache of data. This is easily mitigated by
  introducing a task which periodically resets the lock.
  - I still believe that there's the possibility that separate instances
  will get a non-updated object, even if you use the locking, since I'm
  assuming it takes x-amount of time for the changes in MemCache to
  propagate throughout the instances.  I may be wrong in this assumption
  however.

  Anyway, your code would go something like:

  boolean lockAcquired = false;

  try {
      lockAcquired = acquireLock();
      doStuff();} finally {

      if (lockAcquired) {
          releaseLock();
      }

  }

  With the locking code being:

      public static boolean acquireLock() {

          boolean lockAcquired = true;
          try {
              while (increment() != 1) {
                  decrement();
                  Thread.sleep(500);
              }
          } catch (Throwable t) {
              // Log error
              lockAcquired = false;
          }

          return lockAcquired;
      }

      public static void releaseLock() {
          decrement();
      }

      private static void decrement() {
          MemcacheServiceFactory.getMemcacheService().increment(LOCK,
  -1, 0L);
      }

      private static Long increment() {
          return
  MemcacheServiceFactory.getMemcacheService().increment(LOCK, 1, 0L);
      }

  On Dec 14, 9:56 pm, Jay Young jaydevfollo...@gmail.com wrote:

   Grr.  Just noticed another issue.  The cache item that you get the
   index is not the same item as the lock, so really you need two
   different cache items, one to make sure you have a unique value for
   the lock, and the lock itself.  The code above is correct, you just
   need different keys for the first two cache reads.

   If you can generate a guaranteed-unique name (maybe the thread ID +
   time?), you can drop the first cache item and use that as the lock
   value.  This would also prevent the issue with the code above if the
   lockIndex item is ever evicted and re-read at the same time (thus
   returning 0 for both), or if it overflows the long.

   (I honestly don't know if this is iron-clad, but intuitively it seems
   like it would work with only very minor edge cases.)

   On Dec 14, 4:08 pm, Andrei Cosmin Fifiiþã andrei.fifi...@gmail.com
   wrote:

H, super...
I was thinking of smth like (val mod 2) == 0/1 (true/false), but the 
lock
reading wasn't safe.
Thanks!

On 14 December 2010 20:57, Jay Young jaydevfollo...@gmail.com wrote:

 Except return lockIndex should just be return true.

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

-- 
You received this message 

[appengine-java] storing unowned objects(one to many) in datastore

2010-12-15 Thread kartik kudada
Can we store two unowned objects(one to many) in datastore in a single
transaction.
For example -  We have

public class Person {
@PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

@Persistent
private String name;

@Persistent
 private ListKey mobileIds =  new ArrayListKey();

   //
  //.
  }

public class Mobile {

 @PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Key mobileId;

  // ...
 //
}


I want to store these two objects in datastore in single transaction so that
relation  can be made in between both objects.
Tell me if any other solution is there ?

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



[appengine-java] Re: Does the local unit test framework use the same datastore-indexes.xml file as the app?

2010-12-15 Thread Huy
Also, a coworker was able to consistently generate a missing index exception 
from a local unit test, but I couldn't reproduce using the same code, so it 
doesn't seem we can rely on this mechanism to test our indexes until we 
figure out what's happening here.

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



[appengine-java] GWT and GAE debugging problem

2010-12-15 Thread kidowell
Hey.

Im starting with GAE, and im making an RCP program (a book address), on the 
server side I've got all the methods for manipulating the datastore (I'm 
using JPA), and on the client side I'm using GWT as a framework.

When debugging it turns out, that I can only see the server side, and 
program never stops in any breakpoint on the client side.

Is there any way that I can debug on both side sas the program runs. 
Because, just debugging on the server side is not very helpful.

Thank you in advanced for your recomendation.

Kido.

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



[appengine-java] Re: Synchronized reads/writes on a memcache variable

2010-12-15 Thread Jay Young
On Dec 15, 10:50 am, Simon qila...@gmail.com wrote:
 although I'd argue that
 you should be changing your design anyway since synchronizing across a
 distributed architecture for a lot of threads is just unadvisable.

No doubt.  I was simply commenting on the method in question.

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



[appengine-java] Re: Memcache entries - available how soon after entry?

2010-12-15 Thread Tom Phillips
So using UUID's class scope static variables I can now tell which JVM
services each request.

What I've confirmed is that at least when using reserved instances
(Always On), Memcache entries are only found within the same JVM
instance that created the cache entry. So I only get a cache hit if
the next request goes to that same JVM.

Is this expected behavior from Memcache, or should I raise a bug
report? I pictured a highly-distributed memory cache available to the
entire application. If it's per-JVM, I'm not sure why one wouldn't
just use a Singleton or something to cache data, or why GAE RPC would
be required when invoking the Memcache API.

Thanks,
Tom

On Dec 14, 11:33 pm, Tom Phillips tphill0...@gmail.com wrote:
 I'm seeing unexpected (to me) Memcache behavior in my app ever since I
 enabled reserved instances (which I did first thing after 1.4.0). When
 one request adds a cache entry, subsequent requests anywhere from
 10-60 seconds after are only able to find the entry sporadically.

 The cache is very lightly used and no expiry is set. I know that the
 correct key is being used by the writer and readers.

 The followup requests could be being handled by different JVM
 instances than the writer, but I wouldn't think this would make a
 difference. I'm not sure how to tell which instance services which
 request, I just now the request sequence. For all I know, the times it
 does find the cache entry might be only when serviced by the same JVM
 as the writer.

 Shouldn't Memcache entries be available to readers immediately after
 addition, and presumably available to all JVM instances? If not
 immediately for some reason, shouldn't they be available with 60
 seconds?

 Thanks for any insight,
 Tom

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



[appengine-java] GWT Designer for NetBeans

2010-12-15 Thread kidowell
Hey, is there any gwt designer for NetBeans out there?.

It would be nice to place all the design and receive automatically the code 
for it.

I have read theres a plugin for Eclipse but I can't find anything for 
NetBeans.

Any sugestion?.

Cheers.

Kido.

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



[appengine-java] url fetch quota: ResponseTooLargeException

2010-12-15 Thread Sydney
Hello, 

I got a ResponseTooLargeException when using the url fetch service. I 
checked the quota (
http://code.google.com/appengine/docs/java/urlfetch/overview.html#Quotas_and_Limits)
 and 
my request and response are within these quotas. Here is the response header 
when fetching the url in a browser:

Date Wed, 15 Dec 2010 23:45:05 GMT
Server Microsoft-IIS/6.0
X-Powered-By ASP.NET
X-AspNet-Version 2.0.50727
Cache-Control private
Content-Type text/xml; charset=utf-8
Content-Length 1141487

My app is not deployed on app engine, so I just tested locally. I am using 
app engine 1.4.0

Thanks

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



[appengine-java] Re: GWT Designer for NetBeans

2010-12-15 Thread Didier Durand
Hi,

A more appropriate place to post this question is
http://groups.google.com/group/google-web-toolkit
regards
didier

On Dec 15, 8:03 pm, kidowell crui...@gmail.com wrote:
 Hey, is there any gwt designer for NetBeans out there?.

 It would be nice to place all the design and receive automatically the code
 for it.

 I have read theres a plugin for Eclipse but I can't find anything for
 NetBeans.

 Any sugestion?.

 Cheers.

 Kido.

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



[appengine-java] Re: url fetch quota: ResponseTooLargeException

2010-12-15 Thread Didier Durand
Hi,

According to 
http://code.google.com/appengine/docs/java/tools/devserver.html#Using_URL_Fetch,
there may be differences between dev server and real infrastructure.
So, if I were you, I would quickly upload and make a test from the
live env and see what happens.

Let us know

regards

didier
On Dec 16, 1:07 am, Sydney sydney.henr...@gmail.com wrote:
 Hello,

 I got a ResponseTooLargeException when using the url fetch service. I
 checked the quota 
 (http://code.google.com/appengine/docs/java/urlfetch/overview.html#Quo...) and
 my request and response are within these quotas. Here is the response header
 when fetching the url in a browser:

 Date Wed, 15 Dec 2010 23:45:05 GMT
 Server Microsoft-IIS/6.0
 X-Powered-By ASP.NET
 X-AspNet-Version 2.0.50727
 Cache-Control private
 Content-Type text/xml; charset=utf-8
 Content-Length 1141487

 My app is not deployed on app engine, so I just tested locally. I am using
 app engine 1.4.0

 Thanks

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



[appengine-java] Re: storing unowned objects(one to many) in datastore

2010-12-15 Thread Didier Durand
Hi,

If they don't belong to the same entity group, you will raise an
exception by trying to store 2 objects in a single transaction.

2 ways to handle that:

   a) you make Mobile belong to same entity group as Person so you'll
be able to store both in a single transaction. I understand in your
question that you can't go this way.
   b) you store one let's say Person in first transaction and during
this transaction, you start a task as part of the transaction: You
can enqueue a task as part of a datastore transaction, such that the
task is only enqueued—and guaranteed to be enqueued—if the transaction
is committed successfully. Tasks added within a transaction are
considered to be a part of it and have the same level of isolation and
consistency. as said in 
http://code.google.com/appengine/docs/java/taskqueue/overview.html#Tasks_Within_Transactions

Hope it helps

didier



On Dec 15, 8:26 am, kartik kudada kartik.kud...@gmail.com wrote:
 Can we store two unowned objects(one to many) in datastore in a single
 transaction.
 For example -  We have

 public class Person {
 @PrimaryKey
 �...@persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Long id;

 @Persistent
 private String name;

         @Persistent
  private ListKey mobileIds =  new ArrayListKey();

    //
   //.
   }

 public class Mobile {

         �...@primarykey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Key mobileId;

   // ...
  //

 }

 I want to store these two objects in datastore in single transaction so that
 relation  can be made in between both objects.
 Tell me if any other solution is there ?

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



[appengine-java] Re: how to open an instance of a class

2010-12-15 Thread Didier Durand
Hi,

What you are trying to achieve is based on the reflection capabilities
of Java and mainly the class java.lang.Class. (See
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html)

To describe it shortly:

a) use static method forName: Class.forName(yourClassName)
b) then use reflection on the object of class Class that will be
returned:
   class.getConstructors() to get the constructor you need
c) read http://download.oracle.com/javase/tutorial/reflect/class/index.html
and http://download.oracle.com/javase/tutorial/reflect/member/index.html
to discover the next steps.

This is fully possible as App Engine gives access to the reflection
API of Java. I personnally use this API on GAE.

regards

didier

On Dec 14, 10:41 pm, Abdel_eid a.eid.1...@gmail.com wrote:
 Dear All ,
    I am working on a project in which the user enters the class name
 and data that he needs to add to the data store but i faced a big
 problem , i had successfully read the data from the user and checked
 it's correctness but i am trying to open a new instance of the class
 send by the user in the form of String

 for example String class_name = Student;
 String final_class_name = package_name + class_name;

 so how can i open an object of that sent class and also send the
 caught variables to it's constructor
 N.B i don't know how many classes i had or there name to check it with
 ( instance of )

 Thanks for your attention

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



[appengine-java] Re: JSP compiling fails after upgrade from 1.3.8 to 1.4.0

2010-12-15 Thread Chris Keller
Note that the previous post only applies to my local development 
environment. I just tried using the new version of the SDK on the production 
server, and it has no problems.

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



Re: [google-appengine] Hashing Keys

2010-12-15 Thread 风笑雪
Calculating MD5 is very fast in GAE:

from time import time
from hashlib import md5

s = '1'*100
t = time()
for i in xrange(100):
md5(s).digest()
print time() - t

result: 1.469063


I remember the key name is limited to 500 bytes long, so it may exceed if
you combine several keys into one.

--
keakon

My blog(Chinese): www.keakon.net
Blog source code: https://bitbucket.org/keakon/doodle/



On Wed, Dec 15, 2010 at 2:43 PM, johnP j...@thinkwave.com wrote:

 I need to create a large amount of records which relate three other
 entities.  Just for example, take 100 people; 100 days; and 100
 restaurants.  To create a record for an intersection of a person/day/
 restaurant, it's possible to create keyname of person.key()+day.key()
 +restaurant.key().  And to retrieve records, it's easy to generate a
 list of keys and use a db.get().

 In the internet somewhere, I read a comment by Nick Johnson saying
 that long keynames are inefficient, and that it can be a good idea to
 use a MD5 or SHA1 hash function to shorten the key name.  My question
 is, how expensive are the MD5 and SHA1 functions?

 For example, if I need to generate 100 keys for each view (e.g. to
 retrieve people who visited 1 restaurant in 1 day, I can generate 100
 keys and db.get() that list) - is it cheaper to use the MD5 hash to
 keep key_names shorter?  Or is the cost of generating the hashes more
 than any savings from shortening the keys?




 --
 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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.



-- 
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: Receive e-mail with different domain

2010-12-15 Thread Vinicius Ruan Cainelli
Thank you for the reply.
I am very grateful for this community with the blood will help
others 

I understand your answer, I already use it in another app, but I
wanted to receive the e-mail only changing the domain of the sender.
For receiving forwarded email may take additional time to arrive,
because the road is greater.

There are other suggestions?

Vinicius Cainelli

On Dec 15, 3:39 am, Robert Kluin robert.kl...@gmail.com wrote:
 How about setting up a catch-all address and forwarding it to your 
 app?http://www.google.com/support/a/bin/answer.py?hl=enanswer=33962

 Robert

 On Tue, Dec 14, 2010 at 23:43, Vinicius Ruan Cainelli

 vinic...@viniciuscainelli.com wrote:
  Hello all,

  lately I've been busy with a personal project of temporary email
  address / disposable / anonymous:http://www.givemail.me

  Well, I wonder if there's a possibility I send an email to
  someth...@givemail.me - someth...@mail-temp.appspotmail.com?

  I dunno ... MX entries ...

  ie I would like to receive e-mail domain givemail.me by google app
  engine, as I already do with the mail-temp.appspotmail.com.

  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-appeng...@googlegroups.com.
  To unsubscribe from this group, send email to 
  google-appengine+unsubscr...@googlegroups.com.
  For more options, visit this group 
  athttp://groups.google.com/group/google-appengine?hl=en.

-- 
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] Downloading and processing an archive

2010-12-15 Thread Thomas M
Hello,

I would like to download a .zip archive provided by an external
website and process the files stored in it. But I still have no idea
how to do this on GAE. The archive is about 30 MB large, so I cant use
an automatic upload script via HTTP.

Does anyone have an idea or approach for this problem?

Much thanks in advance,

Thomas

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



Re: [google-appengine] Article about tuning Java apps for AppEngine

2010-12-15 Thread Paul Bakker
I know, and it makes sense, but what exactly is the limit? How long is a
query allowed to run? I've been searching in the docs and billing settings
but can't find it. Again, this is only because I want to have the correct
numbers, I'll still advice to use alternative approaches.

On Wed, Dec 15, 2010 at 6:13 AM, Robert Kluin robert.kl...@gmail.comwrote:

 Hi Paul,
  The overall execution time has been increased, but the limits on
 datastore queries have not.  Use cursors and a loop.


 Robert





 On Tue, Dec 14, 2010 at 16:42, Paul Bakker paul.bakker...@gmail.com
 wrote:
  Hi Ikai,
  It's mostly CPU time that it's using now just generating the test data.
 The
  costs are lower than I expected though so no problem (and interesting to
  note in the article).
  I can't find any up to date information about the datastore timeout
 limits.
  In 1.4 the background task timeout is 10 minutes, but long before that I
 get
  a datastore timeout for a select all query with a dataset of a few
 million
  rows. I know you shouldn't normally do this, but it's just to test and
 get
  some numbers. Any idea about this?
  Paul
  On Mon, Dec 13, 2010 at 7:28 PM, Ikai Lan (Google)
  ikai.l+gro...@google.com ikai.l%2bgro...@google.com wrote:
 
  Hi Paul,
  You can enable billing for this. I doubt you'll end up paying a lot for
  it. Storage charges are based on snapshots and averaged for the month.
  Good luck!
 
  --
  Ikai Lan
  Developer Programs Engineer, Google App Engine
  Blogger: http://googleappengine.blogspot.com
  Reddit: http://www.reddit.com/r/appengine
  Twitter: http://twitter.com/app_engine
 
 
  On Mon, Dec 13, 2010 at 4:54 AM, Paul Bakker paul.bakker...@gmail.com
  wrote:
 
  Hi Ikai,
  Glad you like it. The article gets quite some hits so it seems there's
 a
  lot of interest in this topic. I got some questions relating large
 volumes
  of data. I'm working on another article that goes into the details of
 this.
  To get some real numbers I need to run some benchmarks with larger
 amounts
  of data (max 10 million rows), but I run into free quota limits. Is
 there
  any way this limit could be stretched for a few days so I can finish
 the
  article without having to pay a lot for it? I'm trying to advocate the
 use
  of GAE after all :-)
  My app id is gae-benchmarks.
  Great work on the latest releases (most specifically no more 1000 row
  limit in 1.3.1 and always on in 1.4). Takes away a lot of the reasons
 why
  not to use GAE!
 
  --
  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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
  For more options, visit this group at
  http://groups.google.com/group/google-appengine?hl=en.
 
  --
  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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
  For more options, visit this group at
  http://groups.google.com/group/google-appengine?hl=en.
 
  --
  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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
  For more options, visit this group at
  http://groups.google.com/group/google-appengine?hl=en.
 

 --
 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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.



-- 
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: Query filter using an entity's inline property

2010-12-15 Thread Lenny Rachitsky
Just noticed there is a small typo in the code above, the query should
be hitting WaitingQuestions, not WaitingAnswer.

On Dec 15, 11:00 am, Lenny Rachitsky lenny...@gmail.com wrote:
 Does App Engine allow self-referencing queries, where I use a property
 of an entity as part of the filter? For example, below I am attempting
 to use the question_ttl property to filter questions that are
 expired (e.g. older than question_ttl minutes). I'm attempting to
 avoid having to iterate through the entire batch. Is this possible? I
 attempted to use self below, but that doesn't work.

 
 class WaitingQuestions(db.Model):
     question = db.TextProperty()
     question_ttl = db.IntegerProperty()
     timestamp = db.DateTimeProperty(auto_now=True, auto_now_add=True)

     @staticmethod
     def get_expired_questions():
         return WaitingAnswer.all().filter('timestamp  ',
 datetime.now() - timedelta(minutes=self.question_ttl))
 

 Any help would be much appreciated. Thank you in advance,
 Lenny

-- 
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] Query filter using an entity's inline property

2010-12-15 Thread Lenny Rachitsky
Does App Engine allow self-referencing queries, where I use a property
of an entity as part of the filter? For example, below I am attempting
to use the question_ttl property to filter questions that are
expired (e.g. older than question_ttl minutes). I'm attempting to
avoid having to iterate through the entire batch. Is this possible? I
attempted to use self below, but that doesn't work.


class WaitingQuestions(db.Model):
question = db.TextProperty()
question_ttl = db.IntegerProperty()
timestamp = db.DateTimeProperty(auto_now=True, auto_now_add=True)

@staticmethod
def get_expired_questions():
return WaitingAnswer.all().filter('timestamp  ',
datetime.now() - timedelta(minutes=self.question_ttl))


Any help would be much appreciated. Thank you in advance,
Lenny

-- 
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: Downloading and processing an archive

2010-12-15 Thread Darien Caldwell
Unfortunately the standard ZipFile module in Python only supports
extracting to a file; GAE doens't allow writing files however. You'd
either need to find a package that supports extracting files to a
variable, or write your own.  The data could then be put into the
Datastore or Blobstore.  Of course that approach would have issues if
the files are big, but sounds like they wouldn't be if the archive is
only 30 megs.

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



Re: [google-appengine] Re: Query filter using an entity's inline property

2010-12-15 Thread Eli Jones
You want something like (Where N is some number):

Select * from myModel Where Prop1 + Prop2  N

No do that here impossible in GAE.

Just change the question_ttl property into expiration_timestamp (or
maybe us a nice short prop name) and calculate that future expiration date
when the entity is created (and recalculate it if 'question_ttl' ever
changes).

So you just need to query for:

WaitingQuestion.all().filter('expiration_timestamp ', datetime.now())

On Wed, Dec 15, 2010 at 11:04 AM, Lenny Rachitsky lenny...@gmail.comwrote:

 Just noticed there is a small typo in the code above, the query should
 be hitting WaitingQuestions, not WaitingAnswer.

 On Dec 15, 11:00 am, Lenny Rachitsky lenny...@gmail.com wrote:
  Does App Engine allow self-referencing queries, where I use a property
  of an entity as part of the filter? For example, below I am attempting
  to use the question_ttl property to filter questions that are
  expired (e.g. older than question_ttl minutes). I'm attempting to
  avoid having to iterate through the entire batch. Is this possible? I
  attempted to use self below, but that doesn't work.
 
  
  class WaitingQuestions(db.Model):
  question = db.TextProperty()
  question_ttl = db.IntegerProperty()
  timestamp = db.DateTimeProperty(auto_now=True, auto_now_add=True)
 
  @staticmethod
  def get_expired_questions():
  return WaitingAnswer.all().filter('timestamp  ',
  datetime.now() - timedelta(minutes=self.question_ttl))
  
 
  Any help would be much appreciated. Thank you in advance,
  Lenny

 --
 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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.



-- 
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] Domain Puzzle

2010-12-15 Thread Joshua Smith
My company has a domain kaon.ws that we used to use, but don't any more.  I'd 
like requests to www.kaon.ws to end up going to www.kaon.com.  www.kaon.com is 
in google app engine.  kaon.com is a google apps for business account.

I added kaon.ws as a domain alias in the kaon.com google apps control panel, 
and did the DNS thing to verify it.  It says that the domain is verified, but 
on the Domain names tab in the apps control panel, there is a yellow triangle 
! sign on the line for kaon.ws and a link to Activate Domain Alias.  When I 
click that link, I get to a page that says the domain is verified.  But the 
yellow triangle remains in the tab page.

When I try to tell google app engine that my kaon.com (appid kaoncom) app is 
handling kaon.ws, it says Sorry, you've reached a login page for a domain that 
isn't using Google Apps.

Help?

(Note that if you go to kaon.ws without the www, I'm currently using a redirect 
server to get you over to www.kaon.com; it's the straight www.kaon.ws that I'm 
trying to get GAE to handle.)

-Joshua

-- 
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: max_backoff_seconds - working?

2010-12-15 Thread Greg (Google)
Hi Jason,

Are you seeing this behavior in production or in the development
server?

On Dec 8, 2:02 pm, Jason Collins jason.a.coll...@gmail.com wrote:
 Has anyone had any luck getting max_backoff_seconds (in
 TaskRetryOptions) to work?

 I'm setting mine to 1,2,3 (seconds), but it seems to be on a 20s fixed
 retry schedule?

 Perhaps 20s is the smallest max_backoff_seconds allowed?

-- 
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] Blank page displayed periodically.

2010-12-15 Thread spowers.42
I have a python GAE app running, and on first load it displays a blank
page.  Additionally sometimes when I navigate to some pages it is
blank until I refresh once or twice.  I have the
if __name__ == '__main__':
  main()

statement at the end of my main.py file.  The only non standard thing
I am doing is that I am using tornado web as well to provide the
request handlers.  Does anyone have any suggestions on things to look
into to resolve this issue?

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-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] Problem with reading a XML file

2010-12-15 Thread Emilio Resende
I'm trying to read a xml file in my application. On my local server it
works fine, however, when I made deploy to GAE, had received the
following error:

#

   1.
  12-14 04:38PM 08.492 /amesaude/articles 500 1173ms 1120cpu_ms
0kb Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.2.12) Gecko/
20101027 Ubuntu/10.04 (lucid) Firefox/3.6.12,gzip(gfe)
  See details

  189.79.66.164 - - [14/Dec/2010:16:38:09 -0800] POST /amesaude/
articles HTTP/1.1 500 93 http://amesaude-white-msit.appspot.com/
amesaude/FA4888B7A342F8EB574203C621383331.cache.html Mozilla/5.0
(X11; U; Linux i686; pt-BR; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.04
(lucid) Firefox/3.6.12,gzip(gfe) amesaude-white-msit.appspot.com
ms=1174 cpu_ms=1120 api_cpu_ms=0 cpm_usd=0.031205 loading_request=1

   2.
  I 12-14 04:38PM 09.634

  javax.servlet.ServletContext log: articlesServlet: ERROR: The
serialization policy file '/amesaude/
EF666E99F984BB682BE2C18D27A4875A.gwt.rpc' was not found; did you
forget to include it in this deployment?

   3.
  I 12-14 04:38PM 09.635

  javax.servlet.ServletContext log: articlesServlet: WARNING:
Failed to get the SerializationPolicy
'EF666E99F984BB682BE2C18D27A4875A' for module 'http://amesaude-white-
msit.appspot.com/amesaude/'; a legacy, 1.3.3 compatible, serialization
policy will be used.  You may experience SerializationExceptions as a
result.

   4.
  E 12-14 04:38PM 09.651

  javax.servlet.ServletContext log: Exception while dispatching
incoming RPC call
  com.google.gwt.user.server.rpc.UnexpectedException: Service
method 'public abstract br.com.amesaude.client.Article
br.com.amesaude.client.ArticlesService.loadLastArticle()' threw an
unexpected exception: java.util.NoSuchElementException
at
com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:
378)
at
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:
581)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:
188)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:
224)
at
com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:
62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1166)
at
com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:
97)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
at
com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:
35)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:
43)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1157)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
388)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
182)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
at
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at
com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:
238)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
542)
at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:923)
at
com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:
76)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:
404)
at
com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:
135)
at
com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:
261)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime
$6.handleBlockingRequest(RuntimePb.java:8495)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime
$6.handleBlockingRequest(RuntimePb.java:8493)
at
com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:
24)
at
com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:435)
at com.google.net.rpc.impl.Server
$RpcTask.runInContext(Server.java:572)
at 

[google-appengine] how can i write Arabic in app engine

2010-12-15 Thread tota
Hi
I have an application in google app engine and i want to make the
interface langauge in Arabic. I tried to do that but it display in
undefined charecters. I am using python. can any one help me.
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-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] etags and webkit's response -- any way to disable in GAE?

2010-12-15 Thread kamens
Situation: running a Google App Engine site with my static content's
default_expiration set to 14d

Problem: in Chrome and Safari, visiting a URL (not reloading, just
putting the cursor in the address bar and hitting Enter), causes a ton
of requests to be fired with If-None-Match headers. The responses are
always 304 Not Modified, as expected. I can watch these requests get
fired in a debugging proxy like Charles or Fiddler.

Want: to avoid these requests and 304 responses entirely for static
content -- simply trust the browser's cached content when it's
available.

We use the standard cache static content for a really long time,
we'll take care of appending ?version={version} modifications to our
query strings when we need to bust the cache system, so we'd really
like to avoid the 304's.

Belief: I think this is caused by the etag header that app engine
sends down with every static content response. The app engine SDK does
not send this header down, and I don't see this 304 behavior when
messing around with the SDK.

Any advice? Can you turn off etags for app engine's static content?

Updated with an example piece of static content:
http://www.khanacademy.org/stylesheets/default.css?846.346809036617399050

See a full summary of this question and various responses here:
http://stackoverflow.com/questions/4406651/webkit-etags-and-google-app-engine-caching-behavior

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



Re: [google-appengine] etags and webkit's response -- any way to disable in GAE?

2010-12-15 Thread 风笑雪
It works fine with Chrome 7 and Safari 5 on Windows XP in my app, no any
requests are sent after the first visiting.

Have you checked the static files if they had an Expires header?

Also don't enable resource tracking for webkit which will always request for
all the resources, just check the background logs.

--
keakon

My blog(Chinese): www.keakon.net
Blog source code: https://bitbucket.org/keakon/doodle/



On Wed, Dec 15, 2010 at 9:50 AM, kamens kam...@gmail.com wrote:

 Situation: running a Google App Engine site with my static content's
 default_expiration set to 14d

 Problem: in Chrome and Safari, visiting a URL (not reloading, just
 putting the cursor in the address bar and hitting Enter), causes a ton
 of requests to be fired with If-None-Match headers. The responses are
 always 304 Not Modified, as expected. I can watch these requests get
 fired in a debugging proxy like Charles or Fiddler.

 Want: to avoid these requests and 304 responses entirely for static
 content -- simply trust the browser's cached content when it's
 available.

 We use the standard cache static content for a really long time,
 we'll take care of appending ?version={version} modifications to our
 query strings when we need to bust the cache system, so we'd really
 like to avoid the 304's.

 Belief: I think this is caused by the etag header that app engine
 sends down with every static content response. The app engine SDK does
 not send this header down, and I don't see this 304 behavior when
 messing around with the SDK.

 Any advice? Can you turn off etags for app engine's static content?

 Updated with an example piece of static content:
 http://www.khanacademy.org/stylesheets/default.css?846.346809036617399050

 See a full summary of this question and various responses here:

 http://stackoverflow.com/questions/4406651/webkit-etags-and-google-app-engine-caching-behavior

 --
 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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.



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



Re: [google-appengine] how can i write Arabic in app engine

2010-12-15 Thread 风笑雪
Hi, I don't know what framework are your using.

Generally speaking, you should set Content-Type:text/html; charset=UTF-8
header, and make sure you output UTF-8 encoded sting.

If you are using webapp, it will look like this:

self.response.headers['Content-Type'] = 'Content-Type:text/html;
charset=UTF-8'
self.response.out.write(u'something in Arabic'.encode('utf-8'))

--
keakon

My blog(Chinese): www.keakon.net
Blog source code: https://bitbucket.org/keakon/doodle/

-- 
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: Incredible traffic saving with the header Cache-control: public???

2010-12-15 Thread GONZO
Quizás quisiste decir: A mi no me aparece esto. Puede garantizar que
la diferencia entre cache-control private y public es que con public
Escribe texto o la dirección de un sitio web o traduce un documento.
Cancelar
Escuchar
traducción del español al inglés
I do not look like this.

I can guarantee that the cache-control difference between private and
public is that public away 95% of traffic, almost all. However, this
is served 100% ok to customers. The traffic is not on any chart, or if
the consumption of bandwidth or in the logs.

On 15 dic, 03:29, Albert albertpa...@gmail.com wrote:
 Hi!

 This guy seems to implement something similar to yours, but he says,
 ...each time a page is served cached, you'll see a 204 logged in your
 Appengine dashboard.

 http://www.kyle-jensen.com/proxy-caching-on-google-appengine

 Did any of you guys notice that too?

 Albert

 On Dec 15, 9:29 am, GONZO gonzom...@gmail.com wrote:

  Hi, thanks for your response.

  I like your answer. Just what I expected. Confirms my theory and my
  experiences.

  I confirm that requests saved (90%) do not appear in the logs and not
  counted in the consumption of bandwidth. It's free total. Amazing.

  I appreciate all the information you know about it.

  Thank you all. Greetings!

  On 8 dic, 03:51, Jason Collins jason.a.coll...@gmail.com wrote:

   Cache-Control: private only uses the end user cache to cache
   resources.

   Cache-Control: public uses any downstream cache to cache resources
   (including the browser cache).

   Google has a downstream cache in front of App Engine requests, so if
   you serve your resources with Cache-Control: public, Google will
   cache that resource. Subsequent hits are served from there, and I'm
   pretty sure they won't even show in your request log at all.

   j

   On Dec 6, 3:19 pm, GONZO gonzom...@gmail.com wrote:

Hi, first thanks for your attention and sorry for my English
translation.

I have a question that intrigues me a few weeks. This is the header
cache-control in particular the behavior of the options private
and public in Google App Engine.

First of all, this is only to serve static files (css, js, etc)

Let's go. With cache-control: private experiment curve normal
traffic. But with cache-control: public experiment Traffic
incredible savings. In both cases, everything seems to work well.

The question is:

1. How can traffic be a big savings? Is reduced to 15%.

2. Saving you a real traffic? Or is something special instead of
Google App Engine?

Better look at this diagram 
illustrates:http://gonzo.teoriza.com/almacen/cache-control.jpg

Thanks in advance, I hope to be clarified.

-- 
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: Query filter using an entity's inline property

2010-12-15 Thread Lenny Rachitsky
Good idea! Thank you sir.

On Dec 15, 11:56 am, Eli Jones eli.jo...@gmail.com wrote:
 You want something like (Where N is some number):

 Select * from myModel Where Prop1 + Prop2  N

 No do that here impossible in GAE.

 Just change the question_ttl property into expiration_timestamp (or
 maybe us a nice short prop name) and calculate that future expiration date
 when the entity is created (and recalculate it if 'question_ttl' ever
 changes).

 So you just need to query for:

 WaitingQuestion.all().filter('expiration_timestamp ', datetime.now())

 On Wed, Dec 15, 2010 at 11:04 AM, Lenny Rachitsky lenny...@gmail.comwrote:







  Just noticed there is a small typo in the code above, the query should
  be hitting WaitingQuestions, not WaitingAnswer.

  On Dec 15, 11:00 am, Lenny Rachitsky lenny...@gmail.com wrote:
   Does App Engine allow self-referencing queries, where I use a property
   of an entity as part of the filter? For example, below I am attempting
   to use the question_ttl property to filter questions that are
   expired (e.g. older than question_ttl minutes). I'm attempting to
   avoid having to iterate through the entire batch. Is this possible? I
   attempted to use self below, but that doesn't work.

   
   class WaitingQuestions(db.Model):
       question = db.TextProperty()
       question_ttl = db.IntegerProperty()
       timestamp = db.DateTimeProperty(auto_now=True, auto_now_add=True)

       @staticmethod
       def get_expired_questions():
           return WaitingAnswer.all().filter('timestamp  ',
   datetime.now() - timedelta(minutes=self.question_ttl))
   

   Any help would be much appreciated. Thank you in advance,
   Lenny

  --
  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.comgoogle-appengine%2Bunsubscrib 
  e...@googlegroups.com
  .
  For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.

-- 
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: Appengine's Turkey problem

2010-12-15 Thread Kaan Soral
Thanks for the idea,

So do you have a reverse proxy server that acts for every request and
redirects them to appengine and return the result to the requester?
If that is the case, for high amount of requests there can be problems
right?

I would be glad if you can give more details,
Thanks again,
Kaan

On Dec 15, 7:44 am, Will vocalster@gmail.com wrote:
 There is a China problem, too. Same goes in China, if it is not more severe.

 I recently implemented a reverse proxy, fixed the problem. Perhaps you can
 do the same.

 Good luck,

 Will

 On Wed, Dec 15, 2010 at 12:33 PM, Kaan Soral kaanso...@gmail.com wrote:
  It took me a long time to figure out that the reason of my domain
  name(www.something.com) on Appengine not working is that Youtube IP's
  are banned in Turkey.

  So when i ping my domain, It can't reach ghs.l.google.com

  Should Google use seperate IP's for domain related things or should we
  forget about Turkey if we use Appengine?

  --
  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.comgoogle-appengine%2bunsubscr...@googlegroups.com
  .
  For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.

-- 
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: max_backoff_seconds - working?

2010-12-15 Thread vlad
I am seeing this behavior in production. Will post logs tonight.

-- 
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: etags and webkit's response -- any way to disable in GAE?

2010-12-15 Thread kamens
Yes, they have the proper Expires headers.

As described in 
http://stackoverflow.com/questions/4406651/webkit-etags-and-google-app-engine-caching-behavior,
it appears as though expires is overruled by the Etags header and its
need to send an If-None-Match request.

On Dec 15, 12:31 pm, 风笑雪 kea...@gmail.com wrote:
 It works fine with Chrome 7 and Safari 5 on Windows XP in my app, no any
 requests are sent after the first visiting.

 Have you checked the static files if they had an Expires header?

 Also don't enable resource tracking for webkit which will always request for
 all the resources, just check the background logs.

 --
 keakon

 My blog(Chinese):www.keakon.net
 Blog source code:https://bitbucket.org/keakon/doodle/







 On Wed, Dec 15, 2010 at 9:50 AM, kamens kam...@gmail.com wrote:
  Situation: running a Google App Engine site with my static content's
  default_expiration set to 14d

  Problem: in Chrome and Safari, visiting a URL (not reloading, just
  putting the cursor in the address bar and hitting Enter), causes a ton
  of requests to be fired with If-None-Match headers. The responses are
  always 304 Not Modified, as expected. I can watch these requests get
  fired in a debugging proxy like Charles or Fiddler.

  Want: to avoid these requests and 304 responses entirely for static
  content -- simply trust the browser's cached content when it's
  available.

  We use the standard cache static content for a really long time,
  we'll take care of appending ?version={version} modifications to our
  query strings when we need to bust the cache system, so we'd really
  like to avoid the 304's.

  Belief: I think this is caused by the etag header that app engine
  sends down with every static content response. The app engine SDK does
  not send this header down, and I don't see this 304 behavior when
  messing around with the SDK.

  Any advice? Can you turn off etags for app engine's static content?

  Updated with an example piece of static content:
 http://www.khanacademy.org/stylesheets/default.css?846.34680903661739...

  See a full summary of this question and various responses here:

 http://stackoverflow.com/questions/4406651/webkit-etags-and-google-ap...

  --
  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.comgoogle-appengine%2Bunsubscrib 
  e...@googlegroups.com
  .
  For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.

-- 
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: max_backoff_seconds - working?

2010-12-15 Thread Jason Collins
Production.

On Dec 14, 8:23 pm, Greg (Google) da...@google.com wrote:
 Hi Jason,

 Are you seeing this behavior in production or in the development
 server?

 On Dec 8, 2:02 pm, Jason Collins jason.a.coll...@gmail.com wrote:



  Has anyone had any luck getting max_backoff_seconds (in
  TaskRetryOptions) to work?

  I'm setting mine to 1,2,3 (seconds), but it seems to be on a 20s fixed
  retry schedule?

  Perhaps 20s is the smallest max_backoff_seconds allowed?

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



Re: [google-appengine] how can i write Arabic in app engine

2010-12-15 Thread fatimah mujallid
Hi,thank you for your replay
I have this code in main.py

class Whatisinyourmind (db.Model):
name=db.StringProperty()
yourword=db.StringProperty()

class MainHandler(webapp.RequestHandler):
def get(self):
yourwords=db.GqlQuery('SELECT * FROM Whatisinyourmind')
values={'yourwords':yourwords}

self.response.out.write(template.render('main.html',values).decode('windows-1256'))
def post(self):
whatisinyourmind=Whatisinyourmind()
nameTemp=self.request.get('name')
#nameTemp=unicode(nameTemp,'windows-1256')
whatisinyourmind.name=nameTemp
temp=self.request.get('yourword')
#temp=unicode(temp,'windows-1256')
whatisinyourmind.yourword=temp
whatisinyourmind.put()
self.redirect('/')
---
you can see from the above code i used decode() to display any Arabic
characters and it display will EXCEPT the Arabic characters that i retrieve
it from the database it display garbish
The code in main.html are
--
html
head
meta http-equiv=Content-Type content=text/html; charset=windows-1256
titleUntitled Page/title
/head
body
  h1ماذا يدور في عقلك؟/h1
  form action= method=post accept-charset=windows-1256
   {% for yourword in yourwords %}
div{{yourword.name}}/
div{{yourword.yourword}}/
   {% endfor %}
  br
  labelالإسم الكريم: /label
  input id=name type=text  name=name/
  labelالكلمة:/label
  input id=yourword type=text  name=yourword/
  input id=button1 type=submit value=Post /
 /form
/body
/html
--
thanks again
2010/12/15 风笑雪 kea...@gmail.com

 Hi, I don't know what framework are your using.

 Generally speaking, you should set Content-Type:text/html; charset=UTF-8
 header, and make sure you output UTF-8 encoded sting.

 If you are using webapp, it will look like this:

 self.response.headers['Content-Type'] = 'Content-Type:text/html;
 charset=UTF-8'
 self.response.out.write(u'something in Arabic'.encode('utf-8'))

 --
 keakon

 My blog(Chinese): www.keakon.net
 Blog source code: https://bitbucket.org/keakon/doodle/

 --
 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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.


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



Re: [google-appengine] Downloading and processing an archive

2010-12-15 Thread A. Stevko
Using Java,
You can use the url fetch service to retrieve up to 32 M
http://code.google.com/appengine/docs/java/urlfetch/overview.html

Then you can use ZipInputStream to slice a zip into a separate streams for
each file.
http://download.oracle.com/javase/1.5.0/docs/api/java/util/zip/ZipInputStream.html

example at http://www.exampledepot.com/egs/java.util.zip/GetZip.html



On Wed, Dec 15, 2010 at 6:22 AM, Thomas M tome2...@googlemail.com wrote:

 Hello,

 I would like to download a .zip archive provided by an external
 website and process the files stored in it. But I still have no idea
 how to do this on GAE. The archive is about 30 MB large, so I cant use
 an automatic upload script via HTTP.

 Does anyone have an idea or approach for this problem?

 Much thanks in advance,

 Thomas

 --
 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.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.



-- 
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: Hashing Keys

2010-12-15 Thread johnP
Thanks for the response!


On Dec 15, 12:01 am, 风笑雪 kea...@gmail.com wrote:
 Calculating MD5 is very fast in GAE:

 from time import time
 from hashlib import md5

 s = '1'*100
 t = time()
 for i in xrange(100):
 md5(s).digest()
 print time() - t

 result: 1.469063

 I remember the key name is limited to 500 bytes long, so it may exceed if
 you combine several keys into one.

 --
 keakon

 My blog(Chinese):www.keakon.net
 Blog source code:https://bitbucket.org/keakon/doodle/







 On Wed, Dec 15, 2010 at 2:43 PM, johnP j...@thinkwave.com wrote:
  I need to create a large amount of records which relate three other
  entities.  Just for example, take 100 people; 100 days; and 100
  restaurants.  To create a record for an intersection of a person/day/
  restaurant, it's possible to create keyname of person.key()+day.key()
  +restaurant.key().  And to retrieve records, it's easy to generate a
  list of keys and use a db.get().

  In the internet somewhere, I read a comment by Nick Johnson saying
  that long keynames are inefficient, and that it can be a good idea to
  use a MD5 or SHA1 hash function to shorten the key name.  My question
  is, how expensive are the MD5 and SHA1 functions?

  For example, if I need to generate 100 keys for each view (e.g. to
  retrieve people who visited 1 restaurant in 1 day, I can generate 100
  keys and db.get() that list) - is it cheaper to use the MD5 hash to
  keep key_names shorter?  Or is the cost of generating the hashes more
  than any savings from shortening the keys?

  --
  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.comgoogle-appengine%2Bunsubscrib 
  e...@googlegroups.com
  .
  For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.

-- 
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: max_backoff_seconds - working?

2010-12-15 Thread nverne
Hello Jason, Vlad,

Our task scheduling is best effort. Although we try to schedule tasks
as nearly as possible to their etas, we don't guarantee that your
tasks will run at the exact time. Some delay is inevitable.

Cheers,

Nick Verne

On Dec 16, 10:21 am, Jason Collins jason.a.coll...@gmail.com wrote:
 Production.

 On Dec 14, 8:23 pm, Greg (Google) da...@google.com wrote:







  Hi Jason,

  Are you seeing this behavior in production or in the development
  server?

  On Dec 8, 2:02 pm, Jason Collins jason.a.coll...@gmail.com wrote:

   Has anyone had any luck getting max_backoff_seconds (in
   TaskRetryOptions) to work?

   I'm setting mine to 1,2,3 (seconds), but it seems to be on a 20s fixed
   retry schedule?

   Perhaps 20s is the smallest max_backoff_seconds allowed?

-- 
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: Downloading and processing an archive

2010-12-15 Thread Tim Hoffman
HI

Unfortunately the standard ZipFile module in Python only supports 
extracting to a file; 

This is not correct.  The zipfile.extract method does extract to a target 
directory, but zipefile.read(name) allows you to read directly from the 
name file in the archive return bytes.

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-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: max_backoff_seconds - working?

2010-12-15 Thread vlad
Hi Nick,

Task schedule delays (best effort) are expected but this is not the case. 
Take a look at the log excerpt below which shows a task with 6 reties. 
Retries are perfectly timed on flat 20sec back off schedule. In other words 
I have never seen task reties follow what I put in my queue.yaml. Instead 
they *always* do 20 sec backoff.
Another fact that might help is this has not changed at all with SDK 1.4.0 
release. This picture was exactly the same before the release.

My queue.yaml

queue:
- name: default
  rate: 20/s
  bucket_size: 100
  retry_parameters:
task_age_limit: 120s
min_backoff_seconds: 1
max_backoff_seconds: 7



   1. 
  1.  12-14 11:56PM 14.864 /_ah/queue/deferred 500 71ms 63cpu_ms 
  16api_cpu_ms 0kb AppEngine-Google; (+http://code.google.com/appengine) 
See 
  
detailshttps://appengine.google.com/logs/log_detail?app_id=ace-pokerversion_id=1-04-alpha.346925832780397423request_id=0004976E457E2BF5.5CB32920layout=plain
 
  
  0.1.0.2 - - [14/Dec/2010:23:56:14 -0800] POST /_ah/queue/deferred 
HTTP/1.1 500 124 http://ace-poker.appspot.com/_ah/queue/deferred; 
AppEngine-Google; (+http://code.google.com/appengine) ace-poker.appspot.com 
ms=71 cpu_ms=63 api_cpu_ms=17 cpm_usd=0.001856 queue_name=default 
task_name=9640193529655285671
  
  2.  I 12-14 11:56PM 14.867 X-Appengine-Taskretrycount:6, 
  X-Appengine-Queuename:default, X-Appengine-Taskname:9640193529655285671, 
  X-Appengine-Current-Namespace: 
  3.  I 12-14 11:56PM 14.868 running task: {'player': 
  'aglhY2UtcG9rZXJyDgsSBlBsYXllchj8szUM', 'action': 'force-fold', 'who': 
  'dealer', 'type': 'action', 'hand-snapshot': u'flop-50 
  4.  I 12-14 11:56PM 14.921 
Hand=aglhY2UtcG9rZXJyGQsSBVRhYmxlGPODOAwLEgRIYW5kGJ-SFAw, 
  state=playing, table=Medes (aglhY2UtcG9rZXJyDQsSBVRhYmxlGPODOAw)  
  5.  I 12-14 11:56PM 14.921 pre-action-dealer (force-fold) 
   2. 
  1.  12-14 11:56PM 14.864 /_ah/queue/deferred 500 71ms 63cpu_ms 
  16api_cpu_ms 0kb AppEngine-Google; (+http://code.google.com/appengine) 
See 
  
detailshttps://appengine.google.com/logs/log_detail?app_id=ace-pokerversion_id=1-04-alpha.346925832780397423request_id=0004976E457E2BF5.5CB32920layout=plain
 
  
  0.1.0.2 - - [14/Dec/2010:23:56:14 -0800] POST /_ah/queue/deferred 
HTTP/1.1 500 124 http://ace-poker.appspot.com/_ah/queue/deferred; 
AppEngine-Google; (+http://code.google.com/appengine) ace-poker.appspot.com 
ms=71 cpu_ms=63 api_cpu_ms=17 cpm_usd=0.001856 queue_name=default 
task_name=9640193529655285671
  
  2.  I 12-14 11:56PM 14.867  
  
  X-Appengine-Taskretrycount:6, X-Appengine-Queuename:default, 
X-Appengine-Taskname:9640193529655285671, X-Appengine-Current-Namespace:
  
  3.  I 12-14 11:56PM 14.868  
  
  running task: {'player': 'aglhY2UtcG9rZXJyDgsSBlBsYXllchj8szUM', 
'action': 'force-fold', 'who': 'dealer', 'type': 'action', 'hand-snapshot': 
u'flop-50-chj8szUM', 'hand': 
'aglhY2UtcG9rZXJyGQsSBVRhYmxlGPODOAwLEgRIYW5kGJ-SFAw'}
  
  4.  I 12-14 11:56PM 14.921  
  
  Hand=aglhY2UtcG9rZXJyGQsSBVRhYmxlGPODOAwLEgRIYW5kGJ-SFAw, state=playing, 
table=Medes (aglhY2UtcG9rZXJyDQsSBVRhYmxlGPODOAw)
  
  5.  I 12-14 11:56PM 14.921  
  
  pre-action-dealer (force-fold)
  
  6.  I 12-14 11:56PM 14.921  
  
  pre-action: (force-fold) pot=50 round=flop board=[u'Td', u'Ac', u'Ad'] 
current_bet=0 next_to_act=0
  players:
aglhY2UtcG9rZXJyDgsSBlBsYXllchj8szUM: bet=0 total=10 acted=False 
in-game=True
aglhY2UtcG9rZXJyDgsSBlBsYXllchispDUM: bet=0 total=10 acted=False 
in-game=True
  
  7.  I 12-14 11:56PM 14.928  
  
  notify-multi: ['hjygzgM-33', 'hixwjgM-33', 'hiZyjgM-33', 'hiLhTUM-33', 
'hispDUM-33', 'hj8szUM-33', 'bserver-33']
  
  8.  I 12-14 11:56PM 14.928  
  
{'pot': 50L, 'who': 'dealer', 'hand': 
'aglhY2UtcG9rZXJyGQsSBVRhYmxlGPODOAwLEgRIYW5kGJ-SFAw', 'player': 
'aglhY2UtcG9rZXJyDgsSBlBsYXllchj8szUM', 'action': 'force-fold', 'type': 
'action', 'stack': 1685L, 'hand-snapshot': u'flop-50-chj8szUM'}
  
  9.  D 12-14 11:56PM 14.928  
  
  hand action: {'pot': 50L, 'who': 'dealer', 'hand': 
datastore_types.Key.from_path(u'Table', 918003L, u'Hand', 330015L, 
_app=u'ace-poker'), 'player': datastore_types.Key.from_path(u'Player', 875004L, 
_app=u'ace-poker'), 'action': 'force-fold', 'type': 'action', 'stack': 1685L, 
'hand-snapshot': 'flop-50-chj8szUM'}
  
  10.  I 12-14 11:56PM 14.928  
  
  hand = aglhY2UtcG9rZXJyGQsSBVRhYmxlGPODOAwLEgRIYW5kGJ-SFAw, betting 
finished, round = flop
  
  11.  I 12-14 11:56PM 14.929  
  
  showdown among 4 players
  
  12.  E 12-14 11:56PM 14.931  
  
  datastore_types.Key.from_path(u'Player', 926001L, _app=u'ace-poker')
  Traceback (most recent call last):
File 
/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py,
 line 517, in