Bernd,

I agree with you about that name change.  The existing name is
misleading and confusing.  I've followed your suggestion and changed
`namespace_` to `namespaceprefix_`.

Hope that change does not cause too many problems in your code.
But, then, as we say, you asked for it.

Thank you for motivating me to make this change.  I needed a nudge.

Please let me know if you find any errors introduced by this change.
The changes to the source were a bit messy, but I'm pretty sure that
I got them all.

And, thank you for working with me on this.  I appreciate the help.

Dave

On Mon, Aug 27, 2018 at 08:04:53AM +0000, Zimmermann, Bernd wrote:
> Hello Dave,
> 
> thank you very much for your explanations.
> 
> First of all, my code is working correct for me, as I am only using name_ and 
> namespacedef_.
> I just came over these issues, trying out all options ... but finally I see 
> with your additional explanations, 
> that it is all related to some kind of misunderstanding 😉 or mix up between 
> "namespace" and "(namespace)prefix".
> 
> I suggest to change the parameter name namespace_ to for example nameprefix_ 
> or namespaceprefix_ ...
> 
> because:
> 
> XML Namespaces - The xmlns Attribute
> When using prefixes in XML, a namespace for the prefix must be defined.
> The namespace can be defined by an xmlns attribute in the start tag of an 
> element.
> The namespace declaration has the following syntax. xmlns:prefix="URI".
> 
> So:
> 
>     <abc:tagname xmlns:abc="http://www.somewhere.com/abc"; ...
>     \___/\_____/ \______________________________________/
>       ^     ^          ^
>       |     |          |
>       |     |          +------------- namespacedef_ 
>       |     |
>       |     +------------------------ name_
>       |
>       +------------------------------ namespacePREFIX_ or namePREFIX_ 
> 
> with:
> 
> abc: = PREFIX
> 
> Together with this explanation the code is fully correct with a little
> change just in the variable name:
> 
> outfile.write('<%s%s%s' % (namespacePREFIX_, name_, namespacedef_ and ' ' + 
> namespacedef_ or '', ))
> 
> Using the variable name namespacePREFIX_ just makes it more readable what to 
> print out 😉
> 
> Best wishes,
> Bernd
> 
> -----Ursprüngliche Nachricht-----
> Von: Dave Kuhlman <dkuhl...@davekuhlman.org> 
> Gesendet: Freitag, 24. August 2018 22:20
> An: Zimmermann, Bernd <bernd.zimmerm...@qsc.de>
> Cc: generateds-users <generateds-users@lists.sourceforge.net>
> Betreff: Re: [Generateds-users] validate_XXX_patterns generated wrong from 
> XSD and Problems with export and namspaces
> 
> Bernd,
> 
> I apologize for taking up so much of your time on this.  Basically, I'm 
> saying that I see no reason to change this code and the code that it 
> generates.  The existing code enables you to insert a namespace prefix before 
> that tag name and a namespace declaration after the tag name.  If there is 
> something additional that you need to be able to do, you will have to explain 
> that to me.
> 
> What follows is *too* many details.  I'm trying to clarify and explain this 
> to myself.  Perhaps it will help you, too.
> 
> Let's use some ascii-art to make sure whether we are in agreement on what the 
> existing generated code does:
> 
>     <abc:tagname xmlns:abc="http://www.somewhere.com/abc"; ...
>     \___/\_____/ \______________________________________/
>       ^     ^          ^
>       |     |          |
>       |     |          +------------- namespacedef_
>       |     |
>       |     +------------------------ name_
>       |
>       +------------------------------ namespace_
> 
> So, `namespace_` goes in front of (to the left of) the tag name and 
> `namespacedef_` is inserted after the tag name.
> 
> And, if there is an importable module named `generatedsnamespaces.py` and if 
> the dictionary named "GenerateDSNamespaceDefs" in that module contains the 
> tag name as a key, then the value of that key overrides the value of 
> `namespacedef_`.
> 
> Keep in mind that `namespace_` and `namespacedef_` hold, if not empty, two 
> different kinds of string: (1) a namespace prefix with colon (`namespace_`) 
> and a namespace definition/declaration (`namespacedef_`).
> 
> The question that I cannot answer is: Why does the above not work for you?
> 
> And, some questions:
> 
> 1. Are you saying that the generated code (unmodified) is doing the
>    wrong thing?
> 
>    I've created a test and it seems to do what I expect it to do.
>    Specifically, (1) `namespace_` goes in front of the tag name;
>    (2) `namespacedef_` goes after the tag name; (3) the value
>    associated with a given tag name in generatedsnamespaces.py, if
>    any, overrides the value of `namespacedef_` passed as a parameter.
> 
> 2. Or, are you saying that when *you* write your own code that calls
>    the export method, it behaves incorrectly?
> 
> 3. And, if #2 above is true, then is it possible that you are either
>    calling it incorrectly or that you could change your code to get
>    the result you need?
> 
> > OUTPUT with testxml.export(output, 0, name_='retainedDataMessageX', 
> > namespace_='urks="http://uri.etsi.org/02657/v1.18.1#/RetainedData";'
> > gives:
> > <urks="http://uri.etsi.org/02657/v1.18.1#/RetainedData"retainedDataMes
> > sageX>
> 
> Should be written as:
> 
>     testxml.export(output, 0, name_='retainedDataMessageX', 
> namespacedef_='urks="http://uri.etsi.org/02657/v1.18.1#/RetainedData";'
> 
> In other words, change "namespace_=" to "namespacedef_=".  Is there some 
> reason why you cannot do this or do not want to do this?
> 
> What are you trying to accomplish that cannot be done with the currently 
> generated code?
> 
> It seems that I am still missing the point.
> 
> Note that:
> 
> - `namespace_` should have a value that looks something like this: "abc:".
> 
> - `namespacedef_` should have a value that looks something like this:
>   
>       xmlns:bark="http://www.animals.com/bark";
>       xmlns:bark="http://www.animals.com/bark 
> xmlns:woof="http://www.animals.com/woof";
> 
> > So I suggest to write out only 2 parameters here:
> > 
> >        outfile.write('<%s%s' % (name_, namespaceOut_'', ))
> > 
> > an write a logic strategy before the write to set namespaceOut_ to:
> > 
> > 1. namespace_ if given
> > 2. namespaceDef_ if given and namespace_ is not given
> > 
> > So I suggest a change here, for example:
> >         imported_ns_def_ = 
> > GenerateDSNamespaceDefs_.get('RetainedDataMessage')
> >         if imported_ns_def_ is not None:
> >             namespaceOut_ = imported_ns_def_
> >         if namespace_ is not None:
> >             namespaceOut_ = namespace_
> 
> No.  `namespace_` and `namespacedef_` hold two different *kinds* of
> things:
> 
> - `namespace_` should contain a namespace *prefix* followed by a
>   colon, for example: "abc:".
> 
> - `namespacedef_` should contain a namespace definition, for
>   example: 'xmlns:aaa="http://www.aaa.com";'.
> 
> - `imported_ns_def_`, if not None, will contain a namespace
>   definition.
> 
> And, if we use your logic and suggested change, there is no way to insert a 
> namespace prefix in front of the tag name.
> 
> Hope this helps.  But, if there is something that I can help you accomplish, 
> please let me know.  I'll need to know what you are trying to accomplish.
> 
> Dave
> 
> On Wed, Aug 22, 2018 at 02:04:35PM +0000, Zimmermann, Bernd wrote:
> > Hello Dave,
> > 
> > thank you for your hints with the explicit parameter, but this is not the 
> > real problem.
> > The parameter_ is only useful if you want to change the order of the 
> > parameters.
> > 
> > Let me show you a few more examples:
> > 
> > OUTPUT with testxml.export(output, 0, name_='retainedDataMessageX', 
> > namespace_='urks="http://uri.etsi.org/02657/v1.18.1#/RetainedData";'
> > gives:
> > <urks="http://uri.etsi.org/02657/v1.18.1#/RetainedData"retainedDataMes
> > sageX>
> > 
> > (Note that in this example I give no namespacedef_ not a default value voa 
> > GenerateDSNamespaceDefs.
> > 
> > As you can see: name_ is printed after the namespace_ Parameter because:
> > 
> >        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and 
> > ' ' + namespacedef_ or '', ))
> > 
> > here the namespace_ is the first argument, but it should name_
> > 
> > So I suggest to write out only 2 parameters here:
> > 
> >        outfile.write('<%s%s' % (name_, namespaceOut_'', ))
> > 
> > an write a logic strategy before the write to set namespaceOut_ to:
> > 
> > 1. namespace_ if given
> > 2. namespaceDef_ if given and namespace_ is not given
> > 
> > So I suggest a change here, for example:
> >         imported_ns_def_ = 
> > GenerateDSNamespaceDefs_.get('RetainedDataMessage')
> >         if imported_ns_def_ is not None:
> >             namespaceOut_ = imported_ns_def_
> >         if namespace_ is not None:
> >             namespaceOut_ = namespace_
> > 
> > In the last if perhaps one can test if namespace is '' too, if given via 
> > cmdline but might by ignored.
> > 
> > Can you guess what I am suggesting?
> > 
> > The correction of the documentation is useful, but is not the solver 
> > for the above problem 😉 - I already set it the right way ...
> > 
> > GenerateDSNamespaceDefs = {
> >     "RetainedDataMessage": 
> > 'xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";',
> > }
> > 
> > Best regards,
> > Bernd
> > 
> > -----Ursprüngliche Nachricht-----
> > Von: Dave Kuhlman <dkuhl...@davekuhlman.org>
> > Gesendet: Freitag, 10. August 2018 22:26
> > An: Zimmermann, Bernd <bernd.zimmerm...@qsc.de>
> > Cc: generateds-users <generateds-users@lists.sourceforge.net>
> > Betreff: Re: [Generateds-users] validate_XXX_patterns generated wrong 
> > from XSD and Problems with export and namspaces
> > 
> > Bernd,
> > 
> > Thank you for your notes on this issue.
> > 
> > I'm still trying to think this one through.  I'm still a bit confused about 
> > it.
> > 
> > However, here is one item that may help.  The `namespace_` parameter is 
> > mis-named I suppose; its value should be a namespace prefix and a colon.  
> > That value should be something like this: "abc:".  
> > 
> > If you were to pass something like "xyz:" as the value of the `namespace_` 
> > parameter, would that fix one of your issues?
> > 
> > By the way: I believe that the documentation included near the top of a 
> > generated module, is not correct.  It incorrectly reads:
> > 
> > # A sample table is:
> > #
> > #     # File: generatedsnamespaces.py
> > #
> > #     GenerateDSNamespaceDefs = {
> > #         "ElementtypeA": "http://www.xxx.com/namespaceA";,
> > #         "ElementtypeB": "http://www.xxx.com/namespaceB";,
> > #     }
> > 
> > whereas, it should be:
> > 
> > # A sample table is:
> > #
> > #     # File: generatedsnamespaces.py
> > #
> > #     GenerateDSNamespaceDefs = {
> > #         "ElementtypeA": 'xmlns:nsa="http://www.xxx.com/namespaceA";',
> > #         "ElementtypeB": 'xmlns:nsb="http://www.xxx.com/namespaceB";',
> > #     }
> > 
> > With respect to your issue 2:
> > 
> > > 2.)
> > > OUTPUT with testxml.export(output, 0,
> > > 'xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";')
> > > results in:
> > > <xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData"RetainedData
> > > Me ssage xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";>
> > > </xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData"RetainedDat
> > > aM
> > > essage>
> > > 
> > > This is not correct.
> > 
> > I believe that the namespace definition that you are passing in as the 2nd 
> > parameter is getting attached to the namespace_ parameter, whereas you 
> > actually want to set the namespacedef_ parameter.  You might consider using 
> > a keyword argument to make this explicit.
> > Example:
> > 
> >     testxml.export(
> >         output,
> >         0,
> >         
> > namespacedef_='xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";'
> >     )
> > 
> > While trying to straighten my head out on this, I wrote up the following 
> > notes on the parameters to the `export` methods.
> > 
> > Arguments to the generated export method:
> > 
> > - outfile -- A file like object open for writing.
> > 
> > - level -- the indentation level.  If the pretty_print argument is
> >   True, the (generated) function showIndent is used to prefix each
> >   exported line with 4 spaces for each level of indent.
> > 
> > - namespace_ -- An empty string or an XML namespace prefix plus a
> >   colon, example "abc:".  This value is printed immediately in front
> >   of the tag name.
> > 
> > - name_ -- The element tag name.  Note that the tag name can be
> >   overridden by the original_tagname_, which can be set by the class
> >   constructor.
> > 
> > - namespacedef_ -- Zero or more namespace prefix definitions.
> >   Actually, its value can be any attribute-value pairs.
> >   Examples:
> > 
> >       ''
> >       'xmlns:abc="http://www.abc.com"http://www.def.com";
> >       'xmlns:abc="http://www.abc.com xmlns:def="http://www.def.com";
> > 
> >   or, because it is printed where the attributes occur, even:
> > 
> >       'size="25" color="blue"'
> > 
> >   For more on namespacedef_, see:
> >       
> > http://www.davekuhlman.org/generateDS.html#namespaces-inserting-namesp
> > ace-definition-in-exported-documents
> > 
> > - pretty_print -- If True, exported output is printed with
> >   indentation and newlines.  If False, indentation and newlines are
> >   omitted, which produces a more compact representation.
> > 
> > I've added the above notes to the generateDS document.  See:
> > http://www.davekuhlman.org/generateDS.html#method-export
> > 
> > Sigh.  XML namespaces make my head hurt.
> > 
> > I'll study this and your notes a bit more.  There must be *some* way we can 
> > make sense of this and get it to work correctly.
> > 
> > Hope your weekend is (or was) a good one.
> > 
> > Dave
> > 
> > On Thu, Aug 09, 2018 at 10:14:57AM +0000, Zimmermann, Bernd wrote:
> > > Hello Dave,
> > > 
> > > thank you very much for the patch for the validate patterns, it 
> > > works
> > > 😉 so it could go productive on your next release.
> > > 
> > > Just a few additional remarks on the export issue:
> > > 
> > > Code: def export(self, outfile, level, namespace_='', 
> > > name_='RetainedDataMessage', namespacedef_='', pretty_print=True):
> > > There are three possible parameters: namespace_, name_, 
> > > namespacedef_
> > > 
> > > The line: outfile.write('<%s%s%s' % (namespace_, name_, 
> > > namespacedef_ and ' ' + namespacedef_ or '', )) will print:
> > > <namespace_ , name_, namespacedef_> if all three values are set.
> > > Note: namespacedef_ may be set via GenerateDSNamespaceDefs option.
> > > 
> > > Here is just a first problem, because the namespace must be a second 
> > > value in the xml tag <OBJECT_NAME NAMESPACE> </OBJECT_NAME> in a 
> > > valid xml, not the first.
> > > 
> > > TESTing:
> > > 1.)
> > > using: testxml.export(output, 0, '', 'retainedDataMessage') results
> > > in:
> > > <retainedDataMessage
> > > xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";>
> > > ...
> > > </retainedDataMessage>
> > > 
> > > this ist Ok.
> > > Note that GenerateDSNamespaceDefs is set in my test case.
> > > Parameter namespace_ is empty.
> > > Parameter name_ is set
> > > Parameter namespacedef_ is not used but overwritten by:
> > > imported_ns_def_ = GenerateDSNamespaceDefs_.get('RetainedDataMessage')
> > >         if imported_ns_def_ is not None:
> > >             namespacedef_ = imported_ns_def_
> > > 
> > > 2.)
> > > OUTPUT with testxml.export(output, 0,
> > > 'xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";')
> > > results in:
> > > <xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData"RetainedData
> > > Me ssage xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";>
> > > </xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData"RetainedDat
> > > aM
> > > essage>
> > > 
> > > This is not correct.
> > > There is the problem as stated above that the namespace_ is set und 
> > > printed out at first in the opening tag before the name_
> > > 
> > > The logical problem is: The parameter namespace_ is set (the first
> > > one) and there is an GenerateDSNamespaceDefs setting, so there is a 
> > > logic missing, to decide which parameter to use in the export if 
> > > there are 2 possibilities.  My suggestion would be to always use 
> > > namespacedef_ it set and use the value via GenerateDSNamespaceDefs 
> > > setting only if namespacedef_ parameter is not used or set.
> > > 
> > > So for me it looks like to adjust the lines with outfile.write('< 
> > > and outfile.write('> to match an valid XML form like:
> > > <OBJECT_NAME NAMESPACE>
> > > </OBJECT_NAME>
> > > 
> > > Hope you guess what I mean.
> > > 
> > > Best wishes,
> > > Bernd
> > > 
> > > -----Ursprüngliche Nachricht-----
> > > Von: Dave Kuhlman [mailto:dkuhl...@davekuhlman.org]
> > > Gesendet: Dienstag, 24. Juli 2018 23:03
> > > An: Zimmermann, Bernd <bernd.zimmerm...@qsc.de>
> > > Cc: generateds-users <generateds-users@lists.sourceforge.net>
> > > Betreff: Re: [Generateds-users] validate_XXX_patterns generated 
> > > wrong from XSD and Problems with export and namspaces
> > > 
> > > Bernd,
> > > 
> > > With respect to the validation of time and the 
> > > validate_GeneralizedTime_patterns_, I've attached a patch.  With this 
> > > patch, I believe that generateDS.py produces the pattern that works for 
> > > you.  These regular expressions are complicated enough, and I'm in the 
> > > dark about what they should and should not be checking.  So, if this 
> > > patch works for you, let's go with it.  We can make adjustments when 
> > > someone else reports a problem with it.
> > > 
> > > Here is a little explanation, as far as I can understand it: This patch 
> > > removes the code that was replacing "|" with "$|^".  That replacement was 
> > > intended to enable us to handle alternatives in regular expressions by 
> > > breaking them up into several concatenated expressions.  *But*, maybe the 
> > > ability to handle those alternatives is (or should be) written into the 
> > > regular expression itself, *if* the author of the XML schema writes them 
> > > correctly.  If so, the replacement that we are removing is not needed, 
> > > and this patch is the right thing to do.  At least, that's what I'm 
> > > hoping.
> > > 
> > > About your other issue, I'll take a look tomorrow.  But, at first glance, 
> > > it looks like the values you are passing in to the export method are 
> > > being attached to the wrong arguments.  You are passing positional 
> > > arguments.  You could try using the keyword arguments:
> > > 
> > >     namespace_
> > >     name_
> > >     namespacedef_
> > > 
> > > You will have to look at one of the export methods to see how each of 
> > > those parameters is used.
> > > 
> > > By the way, your suggestion in your latest email that a module generated 
> > > by generateDS.py be able to do an automatic validation of the exported 
> > > XML instance document seems like a good idea.  Although adding something 
> > > like this line:
> > > 
> > >     xmllint --schema test.xsd test01.xml
> > > 
> > > to a batch file does seem like an easy enough way to handle that.
> > > So, I'll put that feature on a "do" list, but it might not be at the very 
> > > top of the list.
> > > 
> > > More later.  Thanks again for your help with these issues.
> > > 
> > > Dave
> > > 
> > > On Thu, Jul 19, 2018 at 12:19:52PM +0000, Zimmermann, Bernd wrote:
> > > > Hello Dave,
> > > > 
> > > > very great stuff you've done with generateDS, works like a charm but 
> > > > only after a resolving a few little things.
> > > > 
> > > > First on, this might be a bug:
> > > > 
> > > > XSD Pattern:
> > > > 
> > > > <xsd:simpleType name="GeneralizedTime">
> > > >     <xsd:restriction base="xsd:string">
> > > >         <xsd:pattern 
> > > > value="\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9])([0-5][0-9])(.[0-9][0-9]*)?(Z|[\+|\-][0-9]{4})"/>
> > > >     </xsd:restriction>
> > > > </xsd:simpleType>
> > > > 
> > > > results in:
> > > > 
> > > > 
> > > > validate_GeneralizedTime_patterns_ = 
> > > > [['^\\d{4}(0[1-9]$|^1[012])(0[1-9]$|^[12][0-9]$|^3[01])([01][0-9]$
> > > > |^
> > > > 2[
> > > > 0-3])([0-5][0-9])([0-5][0-9])(.[0-9][0-9]*)?(Z$|^[\\+$|^\\-][0-9]{
> > > > 4}
> > > > )$
> > > > ']]
> > > > 
> > > > which give the warning:
> > > > 
> > > > 
> > > > /var/etsi/work/V1.18.1/Natparas2V18.py:7644: UserWarning: Value 
> > > > "b'20180719123801+0200'" does not match xsd pattern
> > > > restrictions: 
> > > > [['^\\d{4}(0[1-9]$|^1[012])(0[1-9]$|^[12][0-9]$|^3[01])([01][0-9]$
> > > > |^
> > > > 2[
> > > > 0-3])([0-5][0-9])([0-5][0-9])(.[0-9][0-9]*)?(Z$|^[\\+$|^\\-][0-9]{
> > > > 4} )$ ']] warnings_.warn('Value "%s" does not match xsd pattern
> > > > restrictions: %s' % (value.encode('utf-8'), 
> > > > self.validate_GeneralizedTime_patterns_, ))
> > > > 
> > > > Adjusting to:
> > > > 
> > > > 
> > > > validate_GeneralizedTime_patterns_ = 
> > > > [['^\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3]
> > > > )(
> > > > [0 -5][0-9])([0-5][0-9])(.[0-9][0-9]*)?(Z|[\\+|\\-][0-9]{4})$']]
> > > > 
> > > > gives no warning.
> > > > 
> > > > So it might be a problem with the separator | which results in a wrong 
> > > > ^|$ pattern?
> > > > 
> > > > 
> > > > Second one, discovering a problem with:
> > > > 
> > > > testxml.export(sys.stdout, 0, '', 'retainedDataMessage')
> > > > at:
> > > > outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' 
> > > > + namespacedef_ or '', ))
> > > > 
> > > > This works correct, printing out <retainedDataMessage> or with a 
> > > > generatednamespaces.py with GenerateDSNamespaceDefs the 
> > > > <retainedDataMessage NSGIVEN>
> > > > 
> > > > But:
> > > > 
> > > > testxml.export(sys.stdout, 0, 'NSDATA', 'retainedDataMessage')
> > > > 
> > > > gives: <NSDATAretainedDataMessage> which is not correct, it should 
> > > > be <retainedDataMessage NSDATA>, so it's printed in the wrong order and 
> > > > a space is missing between the two arguments.
> > > > 
> > > > Perhaps a:
> > > > outfile.write('<%s%s%s' % (name_, namespace_ and ' ' + namespace_ 
> > > > or '', namespacedef_ and ' ' + namespacedef_ or '', ))
> > > > 
> > > > could fix this. Note: the closing tag must be adjusted too.
> > > > 
> > > > Perhaps the export could also be adjusted to overwrite the 
> > > > namespacedef_ if a namespace_ is given or vice versa ...
> > > > 
> > > > I am using the latest version 2.29.17 installed via pip under 
> > > > Python
> > > > 3.7
> > > > 
> > > > Hope you could fix it.
> > > > 
> > > > Again, great work!
> > > > 
> > > > Best regards,
> > > > Bernd
> > > > 
> > > 
> > > > ------------------------------------------------------------------
> > > > --
> > > > --
> > > > -------- Check out the vibrant tech community on one of the 
> > > > world's most engaging tech sites, Slashdot.org! 
> > > > http://sdm.link/slashdot
> > > 
> > > > _______________________________________________
> > > > generateds-users mailing list
> > > > generateds-users@lists.sourceforge.net
> > > > https://lists.sourceforge.net/lists/listinfo/generateds-users
> > > 
> > > 
> > > 
> > > --
> > > 
> > > Dave Kuhlman
> > > http://www.davekuhlman.org
> > 
> > --
> > 
> > Dave Kuhlman
> > http://www.davekuhlman.org
> 
> -- 
> 
> Dave Kuhlman
> http://www.davekuhlman.org

-- 

Dave Kuhlman
http://www.davekuhlman.org

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users

Reply via email to