BTW, the task queue uses the datastore for tasks that are bigger than
10k or so. (The SDK code tries to add the task queue entry, but that
fails for large task queue items, so it stores them in the datastore
and then writes a task queue entry that reads from the datastore and
deletes what it
See http://code.google.com/p/googleappengine/issues/detail?id=2083
http://code.google.com/p/googleappengine/issues/detail?id=1578
http://code.google.com/p/googleappengine/issues/detail?id=915
On Feb 24, 11:26 am, Waleed Abdulla wal...@ninua.com wrote:
I second the request to having the ability
Furthermore, it
seems highly probable that as things are, many people will obliviously
write public webapps that take a raw cursor as a parameter. This
could be the new SQL injection attack.
Can you comment a bit more on the security issues?
AFAIK, cursors can not be used to write anything.
memcache.set() does not set if id already present.
Huh? I don't see that in the documentation. Why do you think that it
is true?
memcache.set is described as Sets a key's value, regardless of
previous contents in cache.
memcache.add is described as Sets a key's value, if and only if the
item
the
referenced entity also get saved in the ProtocolBuffer, or is only its key
saved?
On 5 February 2010 16:54, Andy Freeman ana...@earthlink.net wrote:
Note that memcaching a protocol buffer has interesting consequences.
One is that the auto-now datetime properties are updated when
Note that memcaching a protocol buffer has interesting consequences.
One is that the auto-now datetime properties are updated when the
protocol buffer is created. This update is just on the protocol
buffer - it doesn't affect the datastore copy.
Any other suggestions on how to easily test with background tasks
using the SDK so they run automatically with hopefully more than 1
running concurrently?
The development server does not support concurrent execution.
On Jan 13, 3:25 pm, Philip phili...@gmail.com wrote:
There really needs to
Search in google/appengine/ext/db/__init__.py for protobuf functions.
On Jan 16, 9:21 pm, Nickolas Daskalou n...@daskalou.com wrote:
Does anyone have an answer for this? Google guys?
2010/1/15 Kapil Kaisare kksm19820...@gmail.com
As an aside: what is an EntityProto, and is there a link
...@daskalou.com wrote:
Since these are not documented online anywhere, is it possible these
functions may change in the future (and hence break my code)?
2010/1/18 Andy Freeman ana...@earthlink.net
Search in google/appengine/ext/db/__init__.py for protobuf functions.
On Jan 16, 9:21 pm, Nickolas
Does any one else agree if the AppEngine environment could provide
this as a feature, so its not part of the application but rather a
part of the environment?
If you make your configuration a db.Model subclass instance, you can
modify it in production without loading a new version.
That is
Why would developers be better off discussing there than here?
On Dec 31 2009, 7:09 pm, Vadivel saravanan1...@gmail.com wrote:
Google App Engine lets you run your web applications on Google's
infrastructure. App Engine applications are easy to build, easy to
maintain, and easy to scale as your
I'm seeing some strange behavior from ereporter in the development
server. It looks like reloading modules is confusing things.
Here's the log. Comments are in []s.
INFO 2010-01-01 19:44:53,108 appengine_rpc.py:157] Server:
appengine.google.
com
INFO 2010-01-01 19:44:53,108
Instead of thinking that it will take a lot of time to check the
files, you could measure how much time it takes.
That way, you'll know how much time you saved when you screw up an
update because you didn't correctly specify which files changed.
I'm guessing that the amount of time that you will
However, the development server is single-threaded, which makes
debugging this interesting.
On Dec 29, 12:04 pm, mb doit...@gmail.com wrote:
Even though App Engine doesn't allow spawning new threads, you could
expose each subprocess on its own URI and run them asynchronously with
Is that the whole post method?
I ask because calling self.redirect does not cause the post method to
terminate. If there's code afterwards, it can undo the redirect.
On Dec 29, 3:02 pm, Pancho yfa...@gmail.com wrote:
Hi Wesley,
Indeed the extra ) is a typo in the message but the code does
can not sort data by fields in results more than some limited items
with out the offset limit, we can do it easily.
On 12月24日, 上午2时10分, Andy Freeman ana...@earthlink.net wrote:
Any application requires fetching an unbounded amount of data for a
single page view is not scalable, no matter
.
and on this filtering sql, you should have a statistic info. like how
many item it is .
how do you expect the appengine to handle this problem?
how about at one request with many these actions?
On Dec 21, 11:09 pm, Andy Freeman ana...@earthlink.net wrote:
What statistics are you talking
with statistics on many fields.
with more than 1000 pages please.
thanks.
On Dec 21, 9:06 am, Andy Freeman ana...@earthlink.net wrote:
You misunderstand.
If you have an ordering based on one or more indexed properties, you
can page efficiently wrt that ordering, regardless of the number of
data
that the __key__ is of no use, because the filtered data
is ordered not by key.
but by the fields value, and for that reason you need to loop query as
you may like to do.
but you will encounter a timeout exception before you really finished
the action.
On Dec 19, 8:26 am, Andy Freeman ana
for getting the proper item.
it seems you have not encountered such a problem.
on this situation, the indexes on the fields helps nothing for the
bulk of data you have to be sorted is really big.
On Dec 17, 12:20 am, Andy Freeman ana...@earthlink.net wrote:
it still can result in timout
pickle should be pretty much as you would expect except that it's
really cPickle, as stated in the
docs:http://code.google.com/appengine/kb/general.html
If pickle is really cPickle, then why are the cPickle specific
features not available?
On Dec 17, 1:25 am, Wesley Chun w...@google.com
Having said that, today it turns out for me that Java runtime is much
more cost effective than Python runtime in some cases
The question is not whether the Java or Python runtime is more cost
effective in some cases, it's whether it which is more cost effective
in your cases.
Suppose that your
I don't think you can do this. When you get a DeadlineExceededError
you only have a very short amount of cpu time left -- enough to return
a simple response to the client, but not enough to queue a new task.
I remember seeing some code by Nick that did queue a task after
catching a
I don't think you can do this. When you get a DeadlineExceededError
you only have a very short amount of cpu time left -- enough to return
a simple response to the client, but not enough to queue a new task.
http://code.google.com/appengine/articles/deferred.html contains
sample code that
I don't think you can do this. When you get a DeadlineExceededError
you only have a very short amount of cpu time left -- enough to return
a simple response to the client, but not enough to queue a new task.
http://code.google.com/appengine/articles/deferred.html contains
sample code that
and drag to highlight the text you wish to copy.. once it
is highlighted, then right-click.
Whatever you highlighted is now copied to the clipboard.
On Wed, Dec 9, 2009 at 4:39 PM, Andy Freeman ana...@earthlink.net wrote:
The windows command window doesn't support copy or cut so I can't grab
I know that both IN and != queries are implemented with multiple
queries.
Are those multiple queries executed in the datastore or in the
application?
I'm interested in whether an IN query is has less latency than the
corresponding sequence of queries. (For my specific application, the
sequence
As of 1.2.8, the handler in google/appengine/ext/deferred/deferred.py
(imported by google/appengine/ext/deferred/__init__.py) says to use
google/appengine/ext/deferred/handler.py as the handler instead,
citing possible import errors.
I get import errors in my development environment (windows xp,
Another question, you both recommended Python for some of its
features, but isn't Python much slower than Java?
Maybe, maybe not, but it may not matter. What fraction of your run-
time actually depends on language speed?
On Nov 28, 9:13 am, Eric shel...@gmail.com wrote:
Another question, you
Maybe I don't understand something, but why should the 5 second setup
on a new instance bother me? A new instance should be created when
other instances are near capacity, and not when they exceed it, right?
So once initialized it can be dummy-run internally and only
available 5 seconds later
You need to create the parent's key, but you don't need to create a
parent entity in the datastore.
You can use k = models.Parent(key_name='parent_key') to create a
parent node and then simply use k as you've been using it (without the
put or get). (When you specify a key-name, the model
It's probably dead simple.
Each cluster can have a db that says what apps and versions it can
handle. For each app and version that it handles, it has a copy of
the code in its local GFS. That gives every server in that cluster
access to the code. Since this code is read-only, each server can
See http://code.google.com/p/googleappengine/issues/detail?id=1298 .
On Oct 30, 5:24 am, Stephen sdea...@gmail.com wrote:
On Oct 29, 11:20 pm, Tim Hoffman zutes...@gmail.com wrote:
Hi
I am not using DJango, and they where asking for automagic recycling.
It's not django specific. Unusual
You might want to look at/star
http://code.google.com/p/googleappengine/issues/detail?id=1084
.
On Oct 29, 10:52 am, jago java.j...@gmail.com wrote:
How can I best prevent against the following error? Can I check the
length of items before putting them in the memcache?
File
Note that fetching and re-storing has to update some subtle issues if
you're deleting properties.
See
http://groups.google.com/group/google-appengine/browse_thread/thread/5a00e44cc56ae0d6/08f6b0ab02ce6f10#08f6b0ab02ce6f10
and http://code.google.com/p/googleappengine/issues/detail?id=2251 .
On
So now I am thinking of breaking up the WriteUps class into several
classes, putting all the lightweight data that I need to access
frequently in one class and all the heavy data that I rarely need to
access in another and using ancestor relationships and transactions to
make sure
Also, naked domains
On Oct 14, 8:19 am, Andy Freeman ana...@earthlink.net wrote:
2) Allow resizing images that are bigger than 1 Mb
http://code.google.com/p/googleappengine/issues/detail?id=1422
Yes! There's no point in adding image support to my application
without the ability
.
-Nick Johnson
On Oct 11, 12:17 am, Andy Freeman ana...@earthlink.net wrote:
In other words: if I want to reduce the size of my entities, is
it necessary to migrate the old entities to ones with the new
definition?
I'm pretty sure that the answer to that is yes
(Google) nick.john...@google.com
wrote:
Hi Andy,
On Fri, Oct 9, 2009 at 5:08 PM, Andy Freeman ana...@earthlink.net wrote:
They are raised inside a transaction, when a conflict is detected with
another concurrent transaction. The transaction infrastructure will catch
and retry these several
Note that the yadayada.appspot.com is reserved for the owner of
yaday...@gmail.com. This association seems reasonable, but means that
any name recycling/reclaiming for appengine must also address gmail
and perhaps other google accounts.
On Oct 8, 10:09 pm, Donzo para...@gmail.com wrote:
Are
In other words: if I want to reduce the size of my entities, is
it necessary to migrate the old entities to ones with the new
definition?
I'm pretty sure that the answer to that is yes.
If so, is it sufficient to re-put() the entity, or must I
save under a wholly new key?
I
True
def txnr(key):
v = db.get(key)
memcache.set(str(key), v.field)
return True
Thanks,
-andy
On Oct 9, 4:45 am, Nick Johnson (Google) nick.john...@google.com
wrote:
Hi Andy,
On Tue, Oct 6, 2009 at 8:45 PM, Andy Freeman ana...@earthlink.net wrote:
Short version.
When, exactly
Short version.
When, exactly, are apiproxy_errors.ApplicationErrors
with .application_error == datastore_pb.Error.CONCURRENT_TRANSACTION
raised.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
Google App Engine
# I'd like to use memcache to store db.Model instances but I'd like to
# guarantee that memcache entries do not stay stale for very long. At
# the same time, I'd like to use long memcache timeouts, significantly
# longer than the staleness constraint.
# For the purposes of discussion, I've
This is said because the datastore has cheap diskspace and there isn't
good support for joins here.
Actually, that's not why folks say denormalize on app engine.
They say denormalize because the app engine infrastructure makes a lot
of normalization difficult. That difficulty is a
http://code.google.com/appengine/docs/quotas.html#Resources ,
http://code.google.com/appengine/docs/java/urlfetch/overview.html#Quotas_and_Limits
, and
http://code.google.com/appengine/docs/python/urlfetch/overview.html#Quotas_and_Limits
all mention Secure Outgoing Bandwidth and Secure Incoming
See http://code.google.com/p/googleappengine/issues/detail?id=1084,
especially the May 12 comment.
On Sep 22, 2:48 am, Nick Johnson (Google) nick.john...@google.com
wrote:
Hi Neves,
Entities are stored in Protocol Buffer format, which is detailed
It is odd to suggest that maximum request size implies something about
scalability.
For example, the Google search api (the one that uses the search
engine) has a 2KByte size limit. The search box itself has similar
limits.
If I write a simple text comparison program that allows 1MByte
Is there any reason to prefer multiple app.yaml entries over few?
That is, one can match /pages/.*, /users/.*, /tasks/.*, /foo/.*, etc
with separate app.yaml entries, followed by a catch-all app.yaml
entry, each with its own handler file, each file with its own wsgi
application, or with a single
http://a.tinythread.com is actually serviced by http://tinythread.appspot.com
.
The use of a instead of www made me wonder if it's possible to set
up things so that b.tinythread.com also works.
In short, can one set up multiple custom subdomains for a given App
Engine application? For example,
in, what are some
reasonable rules of thumb?
Thanks,
-andy
On Aug 10, 6:10 am, Andy Freeman ana...@earthlink.net wrote:
Finally, do look at the info on sharded counters if you expect
individual counters to be updated more than about once a second.
That is fairly disturbing advice as it seems
Finally, do look at the info on sharded counters if you expect
individual counters to be updated more than about once a second.
That is fairly disturbing advice as it seems to suggest that updating
a simple entity more than once a second is problematic.
I would have thought that it would be
Would require an additional check in the if/else clause on write of
the related entity which should raise an error if the entity it points
to doesn't exist...
That's not enough - the __index__ entity could be deleted afterwards.
The relevant check in deletes is very expensive (it's a query)
With my proposal, when an entity is indexed, the key defined in its
__index__ property will be used in place of its own key when the
indexes are constructed...
Cute, but there's no way to guarantee that there's an object with that
key.
Also, redirecting queries this way means that there's no
This is somewhat related to
http://code.google.com/p/googleappengine/issues/detail?id=917
and
http://code.google.com/p/googleappengine/issues/detail?id=1084
On Aug 4, 2:11 am, Koen Bok k...@madebysofa.com wrote:
Is there any way to reliably calculate how large an index for an item
will be?
:
On Jul 16, 10:35 pm, Andy Freeman ana...@earthlink.net wrote:
I'm starting to think that
the GAE takes
care of the messy details of distributed systems programming claim is
a bit overstated...
Global clock consistency requires very expensive
I think I can live without uniqueness as
long as timestamps don't go backwards.
Timestamps on a given server probably don't go backwards, but there's
no guarantee about the relationship between clocks on different
servers.
On Jul 13, 11:16 pm, n8gray n8g...@gmail.com wrote:
Hi Albert,
I'm starting to think that the
GAE takes
care of the messy details of distributed systems programming claim is
a bit overstated...
Global clock consistency requires very expensive clocks accessible
from every server with known latency (and even
If GAE had existed
when Larry and Sergey were developing their pagerack
algorithm, would they have used GEA for evaluation?
No, but that has nothing to do with quotas. GAE is pretty far from a
reasonable platform for a search engine.
They would quickly reach quota limits,
way before they
If you need
more, try to create multiple account, schedule roster among them, sync your
data among them. This is the solutions. If terms and conditions of use of
GAE allows, there will be open souce
You might want to comment on and star
http://code.google.com/p/googleappengine/issues/detail?id=915 .
On Jul 3, 8:19 am, Charlie charlieev...@mac.com wrote:
Indeed.
I was thinking it would be great to be able to disable the APIs from
the app engine admin console, myself, so I could do
in that case?
On Jun 26, 9:36 am, Nick Johnson (Google) nick.john...@google.com
wrote:
On Fri, Jun 26, 2009 at 4:42 PM, Andy Freeman ana...@earthlink.net wrote:
the 1MB limit applies only to single API calls
Does that mean that db.put((e1, e2, e3,)) where all of the entities
are 500kb
the 1MB limit applies only to single API calls
Does that mean that db.put((e1, e2, e3,)) where all of the entities
are 500kb will fail?
Where are limits on the total size per call documented?
http://code.google.com/appengine/docs/python/datastore/overview.html#Quotas_and_Limits
only mentions
see also
http://groups.google.com/group/google-appengine/browse_thread/thread/3f8cfeaf7dc2eb72/d5d599180fe47e02?lnk=gstq=ryan+allocate#d5d599180fe47e02
On Jun 24, 11:33 am, Jeff S (Google) j...@google.com wrote:
Hi Jeff,
This is an idea that we're aware of as well. If you could reserve the
The decision to allow setting key_names but not IDs is something we may
revisit.
I hope that you're also considering some way to request and allocate
an unused id for a given path prefix. (That way we can get unique key
ids to specify.)
On Jun 15, 4:45 pm, Jeff S (Google) j...@google.com
The URL you supply needs to be absolute
('http://mysite.com/choose_user.html'), not relative ('choose_user.html' or
'/choose_user.html').
Is the documentation wrong?
From http://code.google.com/appengine/docs/python/users/functions.html
dest_url can be full URL or a path relative to your
While one instance has only one thread, there could be many instances
serving the same number of clients simultaneously.
Yes, and those separate instances are not threads, they're processes.
More important,
they may be running on different machines, so neither thread ids nor
process ids are
...
What am I missing?
Brian in Atlanta
On May 29, 11:27 pm, Andy Freeman ana...@earthlink.net wrote:
message = Message(handle=handle,owner=person.key())
That line always creates a new Message instance. Why do you think
that it should do anything else? (The only way to get
message = Message(handle=handle,owner=person.key())
That line always creates a new Message instance. Why do you think
that it should do anything else? (The only way to get copies of
existing instances is with get() and queries.)
On May 29, 8:05 pm, thebrianschott
So my question is: does google cluster guarantees time and date sync
among its nodes?
IIRC, the last time this came up, the answer was no. They expect the
times on different nodes wil be somewhat synchronized and reasonably
close to correct, but make no guarantees.
On May 28, 7:39 am, cryb
stored, which is smaller than
the pickled string. That said, I doubt it would make a tremendous difference
unless you have a lot of these entities or these lists have a lot of values.
- Jason
On Mon, May 11, 2009 at 10:38 PM, Andy Freeman ana...@earthlink.net wrote:
Since index space can
a lot of these entities or these lists have a lot of values.
- Jason
On Mon, May 11, 2009 at 10:38 PM, Andy Freeman ana...@earthlink.net wrote:
Since index space can be significant, can we get some additional
information?
For example, does an indexed db.ListProperty(db.Key) with three
Since index space can be significant, can we get some additional
information?
For example, does an indexed db.ListProperty(db.Key) with three
elements take significantly more or less space than an indexed
db.StringListProperty with three elements whose value is str() of the
same keys? (The
Native django 1.0 may not be on the roadmap, but it is a very popular
request.
To join that crowd, star
http://code.google.com/p/googleappengine/issues/detail?id=872
.
On May 8, 1:59 am, Nick Johnson (Google) nick.john...@google.com
wrote:
Hi little_pea,
It's not currently on our roadmap,
Note that Django 1.1 is coming soon (
http://www.djangoproject.com/weblog/2009/may/07/django-1-1-update/ )
so it would be nice if app engine made the leap.
On May 8, 5:33 am, Andy Freeman ana...@earthlink.net wrote:
Native django 1.0 may not be on the roadmap, but it is a very popular
request
That sentence is in the section that lists the functions that have no
meaning/for compatibility.
In the listing of functions that have meaning, various arguments are
listed as having no meaning/for compatibility but namespace isn't one
of those arguments.
On May 5, 4:00 pm, djidjadji
doesn't provide?
On May 5, 1:15 am, djidjadji djidja...@gmail.com wrote:
http://code.google.com/appengine/docs/python/memcache/clientclass.htm...
2009/5/4 Andy Freeman ana...@earthlink.net:
Where are memcache namespaces documented? (They're mentioned in
http://code.google.com/appengine
Where are memcache namespaces documented? (They're mentioned in
http://code.google.com/appengine/docs/python/memcache/functions.html
and http://code.google.com/appengine/docs/python/memcache/clientclass.html
.)
Note that http://code.google.com/p/memcached/wiki/FAQ says that
memcached does not
that my concurrency mechanism is
working. How can I do that without being able to spawn two threads
simultaneously?
Regards,
Elliott
On Apr 20, 3:09 pm, Andy Freeman ana...@earthlink.net wrote:
Unfortunately I cant seem to get app engine to run two threads
concurrently to simulate two
How are you estimating the size? For example, do you think that
strings are stored using one byte per character or two? (I don't
know, but I do know that they're interpreted as unicode.)
I've asked for mechanisms to help estimate size - see
Unfortunately I cant seem to get app engine to run two threads
concurrently to simulate two users taking action at the same time.
Are you concerned with the development server or the production
server?
The development server is single threaded and there doesn't seem to be
any way to fix that.
db.TextProperty is not an indexable property. That means that it's
not queryable either.
It would be nice if to get an exception or some other indication of
what's going on.
However, note that indexable is something that happens in the
datastore when an instance is store. If you change a
For a processing API call
like an image API call, there should be no dependence on BigTable or
any sort of clustering
It has been said that the image API is actually executed on an image
processing cluster, not the application servers.
Sounds like http://code.google.com/p/googleappengine/issues/detail?id=915
.
Please star and comment as appropriate.
On Apr 18, 1:34 pm, iceanfire iceanf...@gmail.com wrote:
According to the google maps team, we have to expect atleast some
[small] amounts of datastore errors.
Is there anyway
And even with 3 entities of 3 different kinds you have to manualy
rollback it because a transaction works only with 1 kind.
Where is it documented that a transaction only works with one kind?
The SDK is quite happy to do transactions involving db.Model instances
of different kinds.
On Apr
In the business environment
it's often not know, and the flexibility in this regard provided by
relational databases is part of what has made them so popular.
Only if the schema makes it possible to get what you want. And, even
if it does, the cost may be excessive.
See http://code.google.com/p/googleappengine/issues/detail?id=872
On Apr 10, 11:08 am, Devel63 danstic...@gmail.com wrote:
We've been using Django 0.96 (since it's already available within App
Engine), mostly just to get i18n support.
What are the drawbacks of going all the way to the
Your application probably isn't written to be multi-threaded and any
effort to make it so is wasted because it won't be executed as multi-
threaded in production.
You could get around application threading issues by forking but then
you'll discover that the dev server's datastore is a pile of
Some user reported a problem and wanted to know if Google had any plan
to solve it. That equates to wanting a guarantee in your world? Some
kind of twisted world you live in there.
When considering a plan to solve a problem, I think that it's
reasonable to consider whether said plan will
One of them is to offer hosting at Google's data center in China.
Since China can block sites hosted in China (I thought that it
was common knowledge that China imposed controls on in-China sites.)
There's nothing wrong with wanting guarantees, but Google isn't in a
position to give a
Do you see the words social and moral in addition to legal in
the definition for obligation? Do you even understand what those
words mean?
Yes, I do. And I also understand how social and moral obligations
work. If you feel that Google is violating a social or moral
obligation, you don't
, as people clamoured for Brett to comment.
This is why I love the internet. It amuses me to no end.
On Apr 6, 12:48 am, Andy Freeman ana...@earthlink.net wrote:
No company is willing to be a pawn in the game of politics between
Google and China.
That sounds reasonable, but what can
Something is wrong here - it should not generate multiple indices per
tag, regardless of the length of the list. (The query won't work if
the length is greater than 30, but that's a different problem.)
see Ryan's message in
Feel free to hair-split the word obligation.
It's the plain meaning of the word. I apologise for not knowing that
you didn't know what it meant when you wrote that Google had an
obligation to make GAE available in China. Are there other statements
that you made without understanding their
= 'tag3' -
will require *three* indexes on `tag`
- this only make sense for ListProperties. But is a valid query. For
Lists, tag = 'tag1' could be written like ('tag1' IN LIST `tag`)
- which is different to the sql/gql IN keyword.
On 05/04/2009, Andy Freeman ana...@earthlink.net wrote
You have
nothing of value to contribute to the discussion except to badger the
people who reported this problem.
On the contrary. I've pointed out how to actually solve the problem.
Throughout this, you've acted like Google has some obligation to make
GAE applications visible in China.
the option to move their sites to google's data centers
in China. It could start selling static IP hosting. Plenty of
solutions - just because you don't know about them doesn't mean they
don't exist.
On Apr 3, 1:54 am, Andy Freeman ana...@earthlink.net wrote:
This is a forum for people
Domain binded could not be reached due to ghs.google.com is blocked.
Shouldn't you be addressing your complaint to the folks doing the
blocking?
On Apr 1, 10:10 pm, 秦锋 feng.w@gmail.com wrote:
Domain binded could not be reached due to ghs.google.com is blocked.
I strongly want Google to
Why shouldn't this be google's problem?
Suppose that I sold raincoats and you wanted to buy one of my
raincoats. If someone else got between us and stopped me from
delivering raincoats to you, who would you hold responsible?
Google isn't doing the blocking.
Yes, Google may be able to make
factor of the
application environment?
On Apr 2, 7:16 pm, Andy Freeman ana...@earthlink.net wrote:
Why shouldn't this be google's problem?
Suppose that I sold raincoats and you wanted to buy one of my
raincoats. If someone else got between us and stopped me from
delivering raincoats
1 - 100 of 228 matches
Mail list logo