by , of
course dirty)
I would like to donate these 2 transformers, shall I send in a patch?
Ard Schrijvers
Hippo
Oosteinde 11
1017WT
Amsterdam
The Netherlands
Telefoon: +31(0)20-5224466
Fax: +31(0)20-5224467
-
[EMAIL PROTECTED
ngen, verzoeken
wij u het te verwijderen. Aan dit bericht kunnen geen rechten worden
ontleend.
-Oorspronkelijk bericht- Van: Ard
Schrijvers [mailto:[EMAIL PROTECTED] Verzonden: vr
30-9-2005 13:39 Aan: dev@cocoon.apache.org CC:
Onderwerp: New HighlightingTransformer
with Tomcat 5.5.x
Date: Wed, 12 Oct 2005 10:29:21 +0200
From: Ard Schrijvers [EMAIL PROTECTED]
Reply-To: users@cocoon.apache.org
To: users@cocoon.apache.org
Is it in a noncaching/caching/expires pipeline?
I noticed the expires pipelines to ignore pararameters.
Just set your
logging and look
Perhaps the subject should be: Caching problems with cocoon.
You do want the very exact same thing I have been looking for for a few days. A
very basic example below shows the problem:
---
map:match pattern=getcontent
map:generate src=test.xml/
build come from changes in a repository, where a jms message is send to
invalidate depending dasls and repository files. That makes it less harder then
for filesystem
Ard
Ralph
Ard Schrijvers wrote:
Perhaps the subject should be: Caching problems with cocoon.
For example
I have a Java object I am using to generate links. It would make my
life easier if I could use it directly in my XSLT--even though it is
created outside of the XSLT system. Is it as easy as passing
it in as a
parameter? Or is there some extra leg work necessary?
Add the namespace
Currently, the EHDefaultStore can be configured to have overflow-to-disk=false.
Since diskPersistent is not configurable, and always true, disposing the
cache results in a spoolToDisk error (ofcourse it is on schutting down the VM,
so not to serious a problem). I changed the EHDefaultStore impl
Hello Antonio,
added JIRa issue http://issues.apache.org/jira/browse/COCOON-1868 and included
EHDefaultStore.patch to make diskPersistent parameterizable.
Regards Ard Schrijvers
Hi Ard,
In 2.1.10-dev and 2.2-dev we've already updated to ehcache 1.2. Few
weeks ago there were some
We are using many continuations in our projects, implying have load on memory
use (apparantly continuations can be very large in memory..?).
Since in a deployed environment we want to have some idea about the number of
continuations out there, I have added this to the StatusGenerator, in the
when it is finished (if I
succeed).
Andrew.
From: Ard Schrijvers [EMAIL PROTECTED]
Date: Thu, 22 Jun 2006 16:21:40 +0200
We are using many continuations in our projects, implying
have load on
memory use (apparantly continuations can be very large in memory..?).
Since
Ard Schrijvers escribió:
We are using many continuations in our projects, implying
have load on memory use (apparantly continuations can be very
large in memory..?).
Since in a deployed environment we want to have some idea
about the number of continuations out there, I have added
Ard Schrijvers escribió:
We are using many continuations in our projects, implying
have load on memory use (apparantly continuations can be very
large in memory..?).
Since in a deployed environment we want to have some idea
about the number of continuations out there, I have added
Ard Schrijvers escribió:
We are using many continuations in our projects, implying
have load on memory use (apparantly continuations can be very
large in memory..?).
Since in a deployed environment we want to have some idea
about the number of continuations out there, I have added
Ard Schrijvers escribió:
We are using many continuations in our projects, implying
have load on memory use (apparantly continuations can be very
large in memory..?).
Since in a deployed environment we want to have some idea
about the number
To be sure,
I just changed about the Default Caching Algorithm in
http://cocoon.zones.apache.org/daisy/legacydocs/documentation/userdocs/concepts/caching.html
Then, when it is published by the daisy guys, it will be built by a forrestbot
and eventually published to
Hi all,
I am looking for a best practice whitepaper regarding caching
strategies.
I don't really think there is such a whitepaper regarding caching strategies. I
am going to write some documentation/best practices on cocoon caching. But, at
this very moment, I don't think there is. Of
Scherler [mailto:[EMAIL PROTECTED]
Posted At: vrijdag 14 juli 2006 9:53
Posted To: Cocoon Dev List
Conversation: Caching strategies
Subject: RE: Caching strategies
El jue, 13-07-2006 a las 19:14 +0200, Ard Schrijvers escribió:
Hi all,
I am looking for a best practice whitepaper
Hello,
I am not sure if everybody is familiar with the
CocoonStoreJanitor/StoreJanitorImpl, but in short it tries to free memory from
cocoon's different caches, and does this according some configuration. For
example,
store-janitor logger=core.store.janitor
!-- How much free memory shall
the StoreJanitorImpl is capable of deleting the entire memory part of the
EHCache when JVM is low on memory: The StoreJanitorImpl counts the number of
keys in cache, and multiplies this with the percent_to_free, to calculate the
number of items to delete from cache...more or less like
final
Ard Schrijvers wrote:
Now, suppose, the JVM is low on memory. Now, I am used to
have 3 stores in my apps, namely defaultTransientStore,
eventAwareTransientStore and the EHDefaultStore. I am not
sure how about projects of other people/companies,
(we don't use EHDefaultStore
/snip
1) StoreJanitor to only free cache/memory from stores configured to
2) Change the EHDefaultStore the public int size() to
return the memoryStoreSize()
3) Change the free() in EHDefaultStore according to the
correct eviction policy. This might need changes in the ehcache.
I
Vadim Gritsenko escribió:
Ard Schrijvers wrote:
Now, suppose, the JVM is low on memory. Now, I am used to have 3
stores in my apps, namely defaultTransientStore,
eventAwareTransientStore and the EHDefaultStore. I am not sure how
about projects of other people/companies,
(we
was
already correct. I just noticed, that JCSDefaultStore is not in the cocoon
trunk anymore. Is there specific reason for it? Did it move?
Regards Ard Schrijvers
The EHDefaultStore returns in the size() method the wrong
number of keys
You do not happen to know where the JCSDefaultStore went in
trunk..?? I read some stuff about it outperforming ehcache in
almost every way (and that it might be easier to implement
the eviction policy driven freeing of cachekeys).
WARINIG: I am far to be a cocoon expert. I guess
/snip
If there are better alternatives to ehcache we should consider them of
course. Personally I would like that this work will be done in trunk
only. We could build an own maven project for each cache
implementation
which will reduce the dependencies for a user and makes
Ard Schrijvers escribió:
/snip
If there are better alternatives to ehcache we should
consider them of
course. Personally I would like that this work will be
done in trunk
only. We could build an own maven project for each cache
implementation
which will reduce
of cocoon community) have any other idea about
this? Continuation pollution is actually a problem in flow
implementations.
I do not have any ideas that you haven't pictured above :-)
Regards Ard
Simone
Ard Schrijvers wrote:
Hello Simone,
talking about continuations, did you already find
The third option aims to solve the common situation of having a flow
that initializes some variables, sends a form or a page (creating a
continuation) and then waits for the user to click on a
button, that 90%
of time never gets pushed. This is quite common in
aggregated pages with
snip/
So, in the StoreJanitor, I check now wether the store is
instanceof EHDefaultStore,
That's a really bad idea, in and by itself. Never rely on concrete
implementations, always work against contracts (interfaces).
Ok. I try and see if there is another way to get this in. I
snip/
IMO the only way to solve this transparently is to more accressively
expire and limit the number of continuations. It would make sense to
come up with a LRU list of continuations per session. This list has a
maximum size that can defined. So the required maximum can is
predictable.
Hello,
+1, much simpler to implement, much simpler to use, no hidden
side effects.
Ard, you carrying this out? :) :)
Yes, I will try, but I have some doubts/questions/ideas that I would like to
share and find the best solution to implement this new janitor:
1) I will try to implement
!
Reinhard Poetz wrote:
I want to propose Ard Schrijvers as a new Cocoon committer.
People who
followed our mailing lists will find _many_ quality answers
to users
questions. But that's not all: Ard is an expert for
well-cached Cocoon
applications. His latest work on caching
On 8/1/06, Ard Schrijvers [EMAIL PROTECTED] wrote:
(Quantification of spatiotemporal phenomena resulting from
reaction-diffusion processes was my project...
Wow! Looks like we'll have to keep you busy to prevent you from
writing a QuantificationOfSpatiotemporalPhenomenaTransformer
Hello,
the ehcache-1.2 version currently in branch_2_1_X needs to be updated to
ehcache-1.2.2. The 1.2 version has a problem that the spool thread dies
(happened for me every few days, leaving your ehcache effectively being a
memoryStore only: it is as if overflow-to-disk=false).
Updating to
Hello,
everybody using mirror http://apache.cs.uu.nl/ in his maven build.properties
should be aware of downloading wrong jars. There seem to be strange rewrite
rules configured, which rewrites you a couple of times when you want to
download certain jakarta jars, and then just downloads
Ard Schrijvers wrote:
Hello,
everybody using mirror http://apache.cs.uu.nl/ in his maven
build.properties should be aware of downloading wrong jars.
There seem to be strange rewrite rules configured, which
rewrites you a couple of times when you want to download
certain jakarta
everybody using mirror http://apache.cs.uu.nl/ in his maven
build.properties should be aware of downloading wrong jars. There
seem to be strange rewrite rules configured, which rewrites you a
couple of times when you want to download certain jakarta
jars, and
then just
is recorded
as Ard Schryuers ... is that correct?
Is it hard to change is into Ard Schrijvers :-)
Please also let us know which user id you prefer and what
your forwarding email address is.
Please provide that info to private AT cocoon.apache.org
Alternative committer IDs too please
About the broken mirror http://apache.cs.uu.nl/, I was premature: The flaw
seems to be way more serious, and seems to be apache-dist/jakarta/.htaccess in
general!
Ard,
you are spreading disinformation.
In dist/jakarta there is a .htaccess file that does the redirects.
You can check
/snip
And, in defense, our building needs to be empty by tomorrow
afternoon.
Renovation, reconstruction, network upgrade etc. It's a mess
over here
right now! I was surprised he found the time to respond, and so soon!!
I did not know all this, and addressing it in this way to the dev
Ard Schrijvers wrote:
[ snip ]
Ard, if you accept your nomination, please get familiar with
http://www.apache.org/dev/new-committers-guide.html and send
your signed CLA to the ASF Secretary.
The secretary recorded your CLA late last week, so now
ready to go
Ard Schrijvers wrote:
I did not know all this, and addressing it in this way to
the dev list might not be the most appropriate way :S. All I
need to know now, is how I can reach the correct person, from
infrastructure I suppose, that the issue can be resolved.
Try
This has come up a few times before, independent of it being used in
hibernate's session factory.
http://marc.theaimsgroup.com/?l=xml-cocoon-devm=110846153823635w=2
This problem now seems to be on the ehcache list as well:
Leszek Gawron escribió:
If user wants to make JXTG automatically cacheable he/she must
explicitly state it in configuration:
map:generator src=org.apache.cocoon.template.JXTemplateGenerator
automatic-cache-key
use-sitemap-parameterstrue/use-sitemap-parameters
So please cast your votes!
--
+1, welcome!
--
Hippo
Oosteinde 11
1017WT Amsterdam
The Netherlands
Tel +31 (0)20 5224466
-
[EMAIL PROTECTED] / http://www.hippo.nl
--
Joerg Heinicke wrote:
Yes, that should be the way to go. Furthermore (if it is
possible) you
should add a dependency on the xmlutil issue to the Cocoon
issue, so
that we get informed when xmlutil is fixed.
Yes that sounds about right to me. Create the ticket and I'll
see to
On 10/11/06, Antonio Gallardo [EMAIL PROTECTED] wrote:
...IMHO, we should leave open this bug, because the fixi is
not finished
yet until we update excalibur...
Same here. If update excalibur is a Jira or bugzilla issue
somewhere, I'd make a link or a dependency to it to indicate
You should add an extra stylesheet that removes superfluous namespace
attributes. This is what I've done:
I used to use this strategy as well, though recently I replaced this xsl
transformer with a custom StripNameSpacesTransformer (about just 10 lines),
which outperforms the slow xsl
...I replaced this xsl transformer with a custom
StripNameSpacesTransformer
(about just 10 lines), which outperforms the slow xsl
transformation a factor 30...
This would be useful to have in Cocoon, go for it!
I thought it was too trivial :-)
Will add it to trunk/branch
Ard
Hello,
I am wondering if there is anybody using the cocoon eventcache block (without
using hippo jars), or are planning to do so in the future?
Regards Ard
--
Hippo
Oosteinde 11
1017WT Amsterdam
The Netherlands
Tel +31 (0)20 5224466
Recapitulating this thread:
1) The lightweight StripNameSpaceTransformer is an option to strip intermediate
namespaces you want to get rid of (like after sql transformer, I would like to
get rid of them as fast as possible). Add this to trunk/branch or not?
2) The XHTML serializer: Make it by
1) The lightweight StripNameSpaceTransformer ... Add
this to trunk/branch or not?
If no objections, I'll add my version of the StripNameSpaceTransformer to the
trunk/branch on short notice
+1
2) The XHTML serializer: Make it by default strip the list of
namespaces we know people
Hello PIotr,
I am double posting your message because it is clearly meant for the [EMAIL
PROTECTED]
There are some threads already on this at
http://marc.theaimsgroup.com/?l=xml-cocoon-usersr=1w=2
Also why we discourage the use of doc() in xsl, and point to include or
cinclude transformer,
Sry for the delay.
Shall I commit the StripNameSpaceTransformer to
trunk/core/cocoon-pipeline/cocoon-pipeline-components/./transformation , or
is there a more preferable location? Should I also add it to the branch?
Ard
1) The lightweight StripNameSpaceTransformer ... Add
this
Ard Schrijvers skrev:
Sry for the delay.
Shall I commit the StripNameSpaceTransformer to
trunk/core/cocoon-pipeline/cocoon-pipeline-components/./tr
ansformation , or is there a more preferable location? Should
I also add it to the branch?
Seem like a reasonable place
On 1/3/07, Ard Schrijvers [EMAIL PROTECTED] wrote:
...Not sure wether it is common practice to create a jira
issue for it when committing
something new and resolve it?...
I don't think it's common practice here but IMHO it's a Good Thing.
Locally we added this svn 'pre-commit' hook
in here..
Ard
On Mon, 2007-01-08 at 10:30 +0100, Ard Schrijvers wrote:
Hello,
think I kind of missed this WildcardMatcherHelper untill
now. From which cocoon version on is this available? Can you
define in your matcher wether it should use this
WildcardMatcherHelper
Hello,
Cocoon 2.1.9 introduced the concept of a lock in
AbstractCachingProcessingPipeline, an optimization to prevent
two concurrent requests from generating the same cached
content. The first request adds the pipeline key to the
transient cache to 'lock' the cache entry for that
.
Ard Schrijvers wrote:
Hello,
Cocoon 2.1.9 introduced the concept of a lock in
AbstractCachingProcessingPipeline, an optimization to prevent
two concurrent requests from generating the same cached
content. The first request adds the pipeline key to the
transient cache to 'lock
(and the aggregate thing), and your solution
Have fun!
I doubt it :-)
Ellis.
Regards Ard
Ard Schrijvers wrote:
Hi,
The crux is that the sub-pipeline is called twice within the
context of
the master pipeline (once by the root pipeline, once by an
include);
thus the pipeline
Hello,
now we are talking about httpd mod_cache already, is there any best practice to
have cforms in urls you do not know on beforehand, with continuations? For
high-traffic sites, we obviously want to use mod_cache, but, at the same time,
mod_cache shouldn't cache pages with a continuation
Hello Bertrand,
For high-traffic sites, we obviously want to use mod_cache,
but, at the same time,
mod_cache shouldn't cache pages with a continuation in it
The problem is making the HTTP cache headers variable according to
which pipeline is executed.
But, in principle, you
Hello,
Ard Schrijvers wrote:
snip/
This is actually almost the same hack we used, but
instead of a transformer a selector, and if some value set in
flowscript, an action to set headers. Because we are
outsourcing/other parties using our best practices, and I
did not want them
Hello,
Ard Schrijvers wrote:
is there any best practice to have cforms in urls you do not know on
beforehand, with continuations?
Continuation is just randomly generated token, unique to each user
interaction (like as session Id). Even if it is cached, even
if GET is used
If it's for CForms, we can add the setting of no-cache headers in
Form.js since it's very unlikely that a form pipeline will be
cacheable.
Think we tried similar things (in flowscript), but we found
the problem Bertrand also faced about the fact, that you have
to set the
--
Hippo
Oosteinde 11
1017WT Amsterdam
The Netherlands
Tel +31 (0)20 5224466
-
[EMAIL PROTECTED] / http://www.hippo.nl
--
-Original Message-
From: Sylvain Wallez
Please cast your votes.
+1
Ard
/Daniel
Hello,
http://www.mindquarry.org/repos/mindquarry-jcr/trunk/mindquarr
y-jcr-source/
I'd say add it to the cocoon-jcr block but maybe one of the
original authors of
the jcr block can give some comments.
And various components:
- RunningModeDependentPipeline: (Pipeline)
to
Please cast your votes.
my unbiased +1!!
Ard
Thanks,
Andrew.
--
Andrew Savory, Managing Director, Luminas Limited
Tel: +44 (0)870 741 6658 Fax: +44 (0)700 598 1135
Web: http://www.luminas.co.uk/
Sourcesense: http://www.sourcesense.com/
Please cast your votes!
+1!
Ard
--
Reinhard
___
Telefonate ohne weitere Kosten vom PC zum PC:
http://messenger.yahoo.de
Hello Reinhard,
The repository block contains a the CachingSource. Does
anybody have experiences
with it?
Yes, we do have a lot of experience with it (though we have a slightly
different version (Max Pfingsthorn changed it: the public SourceValidity
getValidity() returns an
yes, the broken connection scenario is that what I want. If
you say that it
doesn't really fit into the caching source, what do you
propose instead?
It does fit in the current caching source without touching the caching source I
think :-)
Writing
another source wrapping source
Hello,
regarding the cache-expires and async thing in the cachingsource block, there
are some things that are strange and seem bugs to me:
1) The expires value is always -1 (eternal), no matter what you define in the
queryString. You can see this happen in getSource of the
This if statement checks if a parameter starts with
cocoon:cache and if yes,
it add it to the params object and removes it from the
normal request
parameters. It looks fine for me and the expires value is set
correctly at the
source AFAICS. BTW, I'm working on trunk.
Yes I saw
several requests on the users list) I want to propose to move it to
cocoon-core.
+1
Ard
--
Reinhard Pötz Independent Consultant, Trainer (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log):
Reinhard Poetz wrote:
I propose making the status code attribute of serializers
expandable.
This makes it easier to provide REST style services with Cocoon that
make use of the different meanings of status codes.
+1. Should have actually been there right from the start!
big +1
I missed the discussion before the vote, but have one more question:
Is it also possible to add extra optional http headers in the serializer, like:
map:serialize type=xhtml pragma={cache} cache-control={cache}
I would like to store in a variable wether I am dealing with something that is
not
Ard Schrijvers wrote:
I missed the discussion before the vote, but have one more question:
Is it also possible to add extra optional http headers in
the serializer, like:
map:serialize type=xhtml pragma={cache}
cache-control={cache}
I would like to store in a variable wether
Ard Schrijvers napisał(a):
I missed the discussion before the vote, but have one more question:
Is it also possible to add extra optional http headers in
the serializer, like:
map:serialize type=xhtml pragma={cache}
cache-control={cache}
I would like to store in a variable
Ard
[1] https://issues.apache.org/jira/browse/COCOON-1619
Could you Ard use e-mail client that is standard compliant
and produces
valid In-Reply-To headers? It's second time this week I have to raise
this issue (and I really don't like doing it) but it's really crucial
for me
Hello,
Ard Schrijvers wrote:
i would be glad to share the code and my ideas, for example
about this whole
StoreJanitor idea :-) )
Just curious, what did you mean by this whole StoreJanitor idea?
Before I say things that are wrong, please consider that the StoreJanitor was
invented
/snip
?? my mail got sended by accident :Sfinishing it now
be implemented quite easily, but might take long start up times)
6) JCSCache has a complex configuration IMO. Therefor, I
added default configurations to choose from, for example:
store logger=core.store
parameter
Reinhard Poetz wrote:
P.S. Ard, answering to your mails is very difficult because
there are no
I am very sorry...I hardly dare saying i am using outlook :-)
I'll try to find a way in the stupid program for linebreaks or make the switch
to Thunderbird.
Ard
line breaks. Is
Reinhard Poetz wrote:
P.S. Ard, answering to your mails is very difficult because
there are no
line breaks. Is anybody else experiencing the same problem
or is it only
me?
Jörg pointed me to the rewrap function of Thunderbird.
Using it fixes all my
problems with never
Ard Schrijvers wrote:
Reinhard Poetz wrote:
P.S. Ard, answering to your mails is very difficult because
there are no
line breaks. Is anybody else experiencing the same problem
or is it only
me?
Jörg pointed me to the rewrap function of Thunderbird.
Using it fixes all my
AFAICS there are two freeing algorithms in trunk: round-robin
and all-stores.
I already thought it would be something like this
/snip
and this is IMO one of the major weakenesses of ehcache (or I
missed it
completely), I did not find any way to limit the number of
disk store
I suggest that we don't register them at StoreJanitor by
default anymore but
make it configureable for users who rely on it in their custom Store
implementations/configurations.
+1
AFAIU, StoreJanitor only runs if at least one store is
registered so we don't
have to remove it.
On 4/4/07, Reinhard Poetz [EMAIL PROTECTED] wrote:
Ard Schrijvers wrote:
yes please, I would be interested in more comments too! Are
more comments like in wiki or in the cocoon.xconf more
comment for different configurations?
I can try to write extended documentation on what
Ard Schrijvers wrote:
Yes, this is exactly my point. The extra problem is that
the StoreJanitor
never has access to the eviction policy of the cache, and
just starts
throwing out entries at random.
That's incorrect statement. I'd say that StoreJanitor always
has access
IIUC, EHCache allows you to set only the number of items in
cache, and not the
maximum amount of memory to use, or minimum amount of free
memory to leave.
true (but the cache can't know the size of objects it gets stuffed with (you
say it is possible with java 1.5? ) )
In other
Vadim,
I think you are reasoning from a POV of the cocoon cache, but I think you are
in the minority compared to the number of users which are using EHCache.
I tried to explain the inevitable OOM of the StoreJanitor in combination of
EHCache and
the event registry in a high volume site.
Strictly speaking, you don't need access to the eviction
policy itself - but
only some exposed method on Store, something like
purgeLastElementAccordingToEvictionPolicy -- can't they add
something like that?
I of course did ask this, because this is obviously the way to go:
Configurable Store registration with StoreJanitor alleviates
somewhat that
problem, but not solves completely as you still have to
properly configure all
your cache sizes correctly to avoid OOM.
I think you can try combining Cocoon's MRU cache and EHCache
to get best of both
Hi all,
Please cast your votes on both the location and the time for
this year's Cocoon GetTogether conference:
A) The Netherlands, Amsterdam
-1
B) Italy, Rome / Milano
+10
C) England, London / Norwich
-100 :-)
When:
A) Late september
+1
B) Beginning of October
Hello,
Grzegorz Kossakowski wrote:
Could you elaborate on the known differences between CInclude
and Include transformers? Was it discussed somewhere?
I am not sure if it was ever discussed somewhere, but I can elaborate a
little on it ( though it has been a while, so I might be a little off
AFAIU, the
IncludeTransformer can only be cached by defining some
Above is ofcourse a typo...I was talking about the CIncludeTransformer
which can only be cached by some expires...
expires. Clearly, you cannot really know how to set this, or
if you fetch an external http source, just
Vadim Gritsenko wrote:
Indeed. I think this is a failure on CocoonSource part.
CocoonSource content depends on the sitemap.xmap, but
CocoonSource validity does not include validity of the
sitemap. As a result, even if sitemap is changed,
CocoonSource validity stays valid.
I'm not
Ralph Goers wrote:
Actually, this may be exactly the reason my developer
couldn't get the IncludeTransformer to work. I'll have to
have hime take a look at it again.
If he still has problems let me know, I might be able to help you out.
Regards Ard
Ralph
Vadim Gritsenko wrote:
Have you seen this part?
return key == null? I: I + key;
}
I never realized this specifically, but used to solve it similar (see
below)
All you need to do is to pass in extra key:
map:match pattern=main
map:generate src=someXML.xml/
Sorry Grek, that I supplanted you. I only saw on closing the issue
that you actually assigned it to you. I hope you don't mind :-)
Grzegorz Kossakowski wrote:
No problem, Jörg! I assigned it to myself because I thought
that the issue was trivial but recent comments confused me
1 - 100 of 130 matches
Mail list logo