[google-appengine] Re: How to add a task to Push Queue from a different module?

2015-11-16 Thread Kurt Hartmann
Good to know.  It's been a while since I looked at that code, but I seem to 
recall the host header was necessary for me.

On Monday, November 16, 2015 at 7:58:51 AM UTC-6, Paul Canning wrote:
>
> I just did some testing.
>
> I didn't need to use the dispatch.yaml, I simply had a named queue that 
> targets the main app module.
>
> The code in the API then adds the Task to this named queue.
>
> Didn't need to use a Host header in the Task options.
>
> On Monday, November 16, 2015 at 1:51:55 PM UTC, Kurt Hartmann wrote:
>>
>> I'm doing this very thing in my Java app.  
>>
>>
>>- In the main module, you need to add a dispatch.xml file to define a 
>>mapping to your API module.  In my case, the other module is called tasks.
>>
>>
>>- Below is a nnippet from my dispatch.xml showing the URL mapping to 
>>   the other module called tasks
>>- This file will be located in the same directory as appengine-web.xml
>>   
>>
>> 
>> 
>> ...
>> 
>> */tasks/*
>> tasks
>> 
>> 
>>
>>
>>- Then, I set up a little helper class to add a task to a push 
>>queue.  Be sure to set the Host property in the header, otherwise it 
>> won't 
>>work.
>>- I then dependency inject the PushTaskHelper, wherever I need it and 
>>call the helper method
>>
>>
>> public class PushTaskHelper {
>> public static final String MODULE_WEB_TASKS_NAME = "tasks";
>> public static final String MODULE_WEB_TASKS_VERSION = "v1";
>>
>> public void addTaskToQueue(String controllerPath) {
>> String url = TASKS_MODULE_CONTEXT_ROOT + controllerPath;
>> TaskOptions task = 
>> TaskOptions.Builder.withUrl(url).method(TaskOptions.Method.GET)
>> .header("Host", 
>> ModulesServiceFactory.getModulesService().getVersionHostname(MODULE_WEB_TASKS_NAME,
>>  
>> MODULE_WEB_TASKS_VERSION));
>> QueueFactory.getDefaultQueue().add(task);
>> }
>> ...
>> }
>>
>>
>>
>> On Monday, November 16, 2015 at 6:16:18 AM UTC-6, Paul Canning wrote:
>>>
>>> I have two "modules", one being the main application and the other 
>>> acting as an API.
>>>
>>> Both use the same Cloud SQL and Storage.
>>>
>>> How can I, in my code, add a task, from the API, to the Push Queue and 
>>> have it run code that sits in the main application module?
>>>
>>> Is it simply a case of adding a task to a certain queue (by name) that 
>>> targets the main app?
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/1c84cf80-e66e-4fd4-bf97-ecd69921150b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[google-appengine] How to add a task to Push Queue from a different module?

2015-11-16 Thread Paul Canning
I have two "modules", one being the main application and the other acting 
as an API.

Both use the same Cloud SQL and Storage.

How can I, in my code, add a task, from the API, to the Push Queue and have 
it run code that sits in the main application module?

Is it simply a case of adding a task to a certain queue (by name) that 
targets the main app?

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/c947a608-1ad9-4630-809b-a094845be38c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[google-appengine] Re: How to add a task to Push Queue from a different module?

2015-11-16 Thread Paul Canning
I just did some testing.

I didn't need to use the dispatch.yaml, I simply had a named queue that 
targets the main app module.

The code in the API then adds the Task to this named queue.

Didn't need to use a Host header in the Task options.

On Monday, November 16, 2015 at 1:51:55 PM UTC, Kurt Hartmann wrote:
>
> I'm doing this very thing in my Java app.  
>
>
>- In the main module, you need to add a dispatch.xml file to define a 
>mapping to your API module.  In my case, the other module is called tasks.
>
>
>- Below is a nnippet from my dispatch.xml showing the URL mapping to 
>   the other module called tasks
>- This file will be located in the same directory as appengine-web.xml
>   
>
> 
> 
> ...
> 
> */tasks/*
> tasks
> 
> 
>
>
>- Then, I set up a little helper class to add a task to a push queue.  
>Be sure to set the Host property in the header, otherwise it won't work.
>- I then dependency inject the PushTaskHelper, wherever I need it and 
>call the helper method
>
>
> public class PushTaskHelper {
> public static final String MODULE_WEB_TASKS_NAME = "tasks";
> public static final String MODULE_WEB_TASKS_VERSION = "v1";
>
> public void addTaskToQueue(String controllerPath) {
> String url = TASKS_MODULE_CONTEXT_ROOT + controllerPath;
> TaskOptions task = 
> TaskOptions.Builder.withUrl(url).method(TaskOptions.Method.GET)
> .header("Host", 
> ModulesServiceFactory.getModulesService().getVersionHostname(MODULE_WEB_TASKS_NAME,
>  
> MODULE_WEB_TASKS_VERSION));
> QueueFactory.getDefaultQueue().add(task);
> }
> ...
> }
>
>
>
> On Monday, November 16, 2015 at 6:16:18 AM UTC-6, Paul Canning wrote:
>>
>> I have two "modules", one being the main application and the other acting 
>> as an API.
>>
>> Both use the same Cloud SQL and Storage.
>>
>> How can I, in my code, add a task, from the API, to the Push Queue and 
>> have it run code that sits in the main application module?
>>
>> Is it simply a case of adding a task to a certain queue (by name) that 
>> targets the main app?
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/48c359c7-322b-4b7f-ba4a-62836ca355ad%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[google-appengine] Re: How to add a task to Push Queue from a different module?

2015-11-16 Thread Kurt Hartmann
I'm doing this very thing in my Java app.  


   - In the main module, you need to add a dispatch.xml file to define a 
   mapping to your API module.  In my case, the other module is called tasks.


   - Below is a nnippet from my dispatch.xml showing the URL mapping to the 
  other module called tasks
   - This file will be located in the same directory as appengine-web.xml
  



...

*/tasks/*
tasks




   - Then, I set up a little helper class to add a task to a push queue.  
   Be sure to set the Host property in the header, otherwise it won't work.
   - I then dependency inject the PushTaskHelper, wherever I need it and 
   call the helper method
   

public class PushTaskHelper {
public static final String MODULE_WEB_TASKS_NAME = "tasks";
public static final String MODULE_WEB_TASKS_VERSION = "v1";

public void addTaskToQueue(String controllerPath) {
String url = TASKS_MODULE_CONTEXT_ROOT + controllerPath;
TaskOptions task = 
TaskOptions.Builder.withUrl(url).method(TaskOptions.Method.GET)
.header("Host", 
ModulesServiceFactory.getModulesService().getVersionHostname(MODULE_WEB_TASKS_NAME,
 
MODULE_WEB_TASKS_VERSION));
QueueFactory.getDefaultQueue().add(task);
}
...
}



On Monday, November 16, 2015 at 6:16:18 AM UTC-6, Paul Canning wrote:
>
> I have two "modules", one being the main application and the other acting 
> as an API.
>
> Both use the same Cloud SQL and Storage.
>
> How can I, in my code, add a task, from the API, to the Push Queue and 
> have it run code that sits in the main application module?
>
> Is it simply a case of adding a task to a certain queue (by name) that 
> targets the main app?
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/11d0fc37-ea76-4b53-9f18-c2442122a72b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [google-appengine] Visual Basic Programmer - should I use Python, Java, PHP or GO

2015-11-16 Thread Alistair Burrowes
Java is the most similar to vb.net . c# and java are quite similar and vb is 
basically an alternative syntax to c#. 

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/f7639fed-cef0-480b-aa39-1b55a44ccf78%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[google-appengine] Re: PermGen space Out of Memory Error on production GAE Server

2015-11-16 Thread Nick (Cloud Platform Support)
Hey Kurt,

A question like this, of a technical nature on a specific issue, should 
instead be posted to Stack Overflow. This allows you to contact a 
much-wider group of potentially-helpful people, including a significant 
number of Googlers who monitor various sponsored tags there. 

As for specific technical help which could help you either solve the issue 
or make a better post to Stack Overflow, here are some of my thoughts:


   - Have you investigated the common causes of this kind of issue, and do 
   you have any potential insights in regard to the Java memory structure and 
   PermGen space?
   - Can you inspect the memory load periodically, for example during the 
   start and end of requests, etc.? 
   - Could you provide more information about your most-likely memory-use 
   patterns, or what kind of work you're doing? 
   - What's causing you to dynamically generate classes like this?
   - Have you tried merely upgrading instance class?

I wish you the best of luck in moving on to build a good Q for Stack 
Overflow, where you will find a significant user-base of people who can 
help. This forum is meant for more general discussion, not necessarily 
connected to specific issues.

On Sunday, November 15, 2015 at 9:55:32 PM UTC-5, Kurt Hartmann wrote:
>
> My web module is using automatic scaling with the default F1 server 
> instance.  Yesterday, I noticed a PermGen, Out of Memorry server exception 
> occurred in production.  This concerns me, because my users receive a blank 
> screen when this error happens as the response to their web request, and it 
> will cause a lot of confusion.  Also, my app is in a pilot phase and there 
> are just a couple of users and no load, so to receive a permgen, 
> OutOfMemory server exception means more could be on the way as things ramp 
> up.
>
> Is there a way to increase the max PermGen memory allocation on a google 
> app engine configuration?  I've searched and not found anything about 
> changing the setting on a production app engine server (only development 
> server, which I've done successfully).  If I change the server I'm using to 
> something with more memory (e.g. F2 server instance), will that help?  I'm 
> assuming that even a higher memory server instance will still use the 
> default max permGen setting, so I don't think so.  
>
> Thanks for letting me know how to reduce the possiblity of receiving these 
> OutOfMemory errors in production google app engine servers.
>
> Here's the stack trace of the error
>
> http://mydogscores.com/events/viewMyDogScoresCalendar 
> java.lang.OutOfMemoryError: PermGen space at 
> sun.misc.Unsafe.defineClass(Native Method) at 
> sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63) at 
> sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399) 
> at 
> sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:396) 
> at java.security.AccessController.doPrivileged(Native Method) at 
> sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395)
>  
> at 
> sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:77)
>  
> at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:46) 
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  
> at java.lang.reflect.Method.invoke(Method.java:606) at 
> java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017) at 
> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2040) at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1936) 
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1462) at 
> java.io.ObjectInputStream.readObject(ObjectInputStream.java:417) at 
> java.util.HashMap.readObject(HashMap.java:1182) at 
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  
> at java.lang.reflect.Method.invoke(Method.java:606) at 
> java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017) at 
> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2040) at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1936) 
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1462) at 
> java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2140) at 
> java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2064) at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1936) 
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1462) at 
> java.io.ObjectInputStream.readObject(ObjectInputStream.java:417) at 
> com.google.apphosting.runtime.SessionManagerUtil.deserialize(SessionManagerUtil.java:56)
>  
> at 
> 

Re: [google-appengine] Visual Basic Programmer - should I use Python, Java, PHP or GO

2015-11-16 Thread Didin Jamaludin
Python more human readable that closely to VB.


Thanks,
Didin

2015-11-17 4:08 GMT+07:00 Alistair Burrowes :

> Java is the most similar to vb.net . c# and java are quite similar and vb
> is basically an alternative syntax to c#.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to google-appengine+unsubscr...@googlegroups.com.
> To post to this group, send email to google-appengine@googlegroups.com.
> Visit this group at http://groups.google.com/group/google-appengine.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/google-appengine/f7639fed-cef0-480b-aa39-1b55a44ccf78%40googlegroups.com
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/CAGAhdS7wS1fSC7fC_1bch-oiZpwNC3g2u%2BEm%3D6W6ViWPBZyvkw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


[google-appengine] Customer Sort Order for Document Search results

2015-11-16 Thread Dev Mukherjee
Hi,

Our application uses the Document Search API, we index a number of Products
(used in a shopping cart catalogue). Users are allowed to search the
Products using various attributes and document search API works a treat.

We want users to be able to save their search results as a list; again not
an issue, we can simply save the search conditions and rerun the Document
Search and return the results.

What we'd like to add is the ability to manually sort the search results
(and add any new results down the bottom of the list). This is proving to
be quite difficult (or at least we're hitting too many road blocks in our
thinking).

Our initial thoughts have been storing the order of the list in NDB and
then be able to pass a list of doc_ids to fetch from the document store or
storing a combination of the search list id and the order in the document
(at the risk of hitting the max document size).

We try not to hit the NDB until the use requires full details of the
Products, and satisfy all search queries via the document search api.

Has anyone attempted anything similar; maintaining manually sortable lists
of results from the document search api?

Is this possible when the document search api is being used? Would
appreciate any thinking / pointers anyone out there can share.

Thanks for your time.
Devraj

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/CANgV5UzAg8TQB49RYu9Ba1ebpzUr--BGBBR9%2B42cco4sTsoSDA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.


[google-appengine] Re: Can Push Queue tasks be executed in order?

2015-11-16 Thread Paul Canning
How can you check for an existing running Task (in PHP)?

Is there a way to "label" a task or do you have to check for its ID?

On Saturday, November 14, 2015 at 3:43:04 AM UTC, Adam wrote:
>
> Hi Paul,
>
> It's possible to launch a task from another task. This means each task 1-9 
> can check if the work from the other tasks has completed, and then launch 
> task #10 if it is. Task #10 should check to see if it's not already running 
> (singleton). Be careful to avoid having a task launch itself as this will 
> lead to a condition called a fork bomb 
> 
> .
>
> Cheers,
> Adam
>
> On Friday, November 13, 2015 at 9:04:05 AM UTC-5, Paul Canning wrote:
>>
>> Say if I have 10 tasks I need to run, is there a way I can make sure 
>> tasks 1-9 are complete (in any order) before task 10 is launched?
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/8afa66a7-2fc6-4767-ab61-1bab0e47944f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[google-appengine] Re: Customer Sort Order for Document Search results

2015-11-16 Thread Anastasios Hatzis
Hi Devraj,

I've built my Search API based features, so I can at least show the search 
results with-out hitting the NDB API. It works for many things, but for 
example, repeated properties it doesn't. Also for key-property types it is 
difficult, when the information you use in the search document has been 
updated after indexing. I've figured a way to use non-stale thumbnails of 
referenced entities in search results, but it isn't something I would 
recommend, because in some use-cases it can have downsides regarding 
client-side caching.

Regarding your questions:

*Storing results in NDB*: I don't think it is necessary to store search 
results in NDB, other than just individually selected product keys for a 
"My favorites" or bookmark feature. It should be sufficient to store the 
user's search query itself, including the custom sorting (if the sorting 
really adds benefit to the user). When the user want's to run the search, 
just use the saved search query on the Search API to retrieve the search 
documents and the cursor in HTTP query parameter, so the user can navigate 
to next page of search results.

However, if you want users to share search queries with other users, or 
search engines to index your search pages, you need to pass all relevant 
search filters and sorting as HTTP query parameters. Then in NDB, store a 
structured property or local structured property with the HTTP query 
parameters and values as your "saved search query", rather than the search 
query string you send to Search API. This will make it easier to update 
your search index later with-out breaking saved search queries.

*New entries*: You would need to store the creation datetime of each 
product in NDB. For example as date or datetime property with the 
"auto-add-now" option. Also export this property as date field into your 
search documents, so you can query for them and have the value in search 
results.
Next, add an auto-add-now "lastRun" timestamp to your "saved search query" 
in NDB. Now, if you run a search query, you can compare the search result 
date field with the property in your "saved search query", and emphasize 
new items in the UI.

Alternatively, you could add new items in the results below, whatever the 
current sorting is, by running a second query filtering additionally by the 
timestamp, and this result is added as a separate block. Maybe this gets 
too expensive and it should be only done, if the user explicitly requests 
to show all new items for the saved search query.

However, you have to decide when to update the "lastRun" timestamp in NDB, 
so the new items are not shown anymore as new items at the next visit. 
Maybe with a task a few minutes / hours after the user did run a saved 
search.

I hope this helps a little.
Anastasios

On Monday, November 16, 2015 at 9:25:54 AM UTC+1, Devraj wrote:
>
> Hi,
>
> Our application uses the Document Search API, we index a number of 
> Products (used in a shopping cart catalogue). Users are allowed to search 
> the Products using various attributes and document search API works a treat.
>
> We want users to be able to save their search results as a list; again not 
> an issue, we can simply save the search conditions and rerun the Document 
> Search and return the results.
>
> What we'd like to add is the ability to manually sort the search results 
> (and add any new results down the bottom of the list). This is proving to 
> be quite difficult (or at least we're hitting too many road blocks in our 
> thinking).
>
> Our initial thoughts have been storing the order of the list in NDB and 
> then be able to pass a list of doc_ids to fetch from the document store or 
> storing a combination of the search list id and the order in the document 
> (at the risk of hitting the max document size).
>
> We try not to hit the NDB until the use requires full details of the 
> Products, and satisfy all search queries via the document search api.
>
> Has anyone attempted anything similar; maintaining manually sortable lists 
> of results from the document search api?
>
> Is this possible when the document search api is being used? Would 
> appreciate any thinking / pointers anyone out there can share.
>
> Thanks for your time.
> Devraj
>

-- 
HATZIS Edelstahlbearbeitung GmbH
Hojen 2
87490 Haldenwang (Allgäu)
Germany

Handelsregister Kempten (Allgäu): HRB 4204
Geschäftsführer: Paulos Hatzis, Charalampos Hatzis
Umsatzsteuer-Identifikationsnummer: DE 128791802
GLN: 42 504331  6

http://www.hatzis.de/

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 

Re: [google-appengine] Visual Basic Programmer - should I use Python, Java, PHP or GO

2015-11-16 Thread timh
Comparison with .Net is probably off the mark as .Net is more an ecosystem 
and can be programmed in a few different languages. It provides are library 
framwork, runtime, clr, bindings etc..
You can write .Net in python for instance.


One thing to note re: appengine, if you want to use the Datastore with PHP 
you are using the Cloud Datastore over http as the there is no native 
Datastore API for PHP on app engine

On Monday, November 16, 2015 at 3:46:17 AM UTC+8, Chris Ketchell wrote:
>
> Thanks very much I'll probably work through the introductions for each
>
> Would you say any are similar to .Net?
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-appengine+unsubscr...@googlegroups.com.
To post to this group, send email to google-appengine@googlegroups.com.
Visit this group at http://groups.google.com/group/google-appengine.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-appengine/fe2fd90a-4327-4f7b-8c60-c1ce95e4adad%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.