[GRASS-dev] grass6.2?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi all.
The current cvs version has a number of very important improvements of
the current stable (one for all: v.in.dxf). I believe it is important to
let normal users have access to these features. I would therefore
recommend designing a roadmap for a release in a reasonable time.
All the best.
pc
- --
Paolo Cavallini
email+jabber: cavallini@faunalia.it
www.faunalia.it
Piazza Garibaldi 5 - 56025 Pontedera (PI), Italy Tel: (+39)348-3801953
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEiRJq/NedwLUzIr4RAr+9AKCB0HOyLnfJUGGYYtjulv2DPdGQ6QCgg+fH
QZyqztU4I4qHOFo92vTvN7Q=
=EbuB
-----END PGP SIGNATURE-----

Paolo Cavallini wrote:

The current cvs version has a number of very important improvements of
the current stable (one for all: v.in.dxf). I believe it is important to
let normal users have access to these features. I would therefore
recommend designing a roadmap for a release in a reasonable time.

see
http://thread.gmane.org/gmane.comp.gis.grass.devel/11403/focus=11456
http://thread.gmane.org/gmane.comp.gis.grass.devel/12423/focus=12492

Hamish

Thanks Hamish.
I' aware of the threads, but afterwards the discussion seemed to die out, so
my question.
Perhaps I missed the point, but I didn't see a clear roadmap coming out.
All the best.
pc

At 11:38, venerdì 9 giugno 2006 you presumably wrote:

Paolo Cavallini wrote:
> The current cvs version has a number of very important improvements of
> the current stable (one for all: v.in.dxf). I believe it is important to
> let normal users have access to these features. I would therefore
> recommend designing a roadmap for a release in a reasonable time.

see
http://thread.gmane.org/gmane.comp.gis.grass.devel/11403/focus=11456
http://thread.gmane.org/gmane.comp.gis.grass.devel/12423/focus=12492

Hamish

--
Paolo Cavallini
email+jabber: cavallini@faunalia.it
www.faunalia.it
Piazza Garibaldi 5 - 56025 Pontedera (PI), Italy Tel: (+39)348-3801953

we need a freeze to get the release done, too many changes are happening at this time
  and we need somebody to declare the freeze -
Markus is traveling so we are somewhat lacking a leadership - this is one situation
when having a steering committee would be helpful - the committee could meet on IRC, declare an
official freeze and we don't get this die-out discussions,

Helena

Helena Mitasova
Dept. of Marine, Earth and Atm. Sciences
1125 Jordan Hall, NCSU Box 8208,
Raleigh NC 27695
http://skagit.meas.ncsu.edu/~helena/

On Jun 9, 2006, at 5:49 AM, Paolo Cavallini wrote:

Thanks Hamish.
I' aware of the threads, but afterwards the discussion seemed to die out, so
my question.
Perhaps I missed the point, but I didn't see a clear roadmap coming out.
All the best.
pc

At 11:38, venerdì 9 giugno 2006 you presumably wrote:

Paolo Cavallini wrote:

The current cvs version has a number of very important improvements of
the current stable (one for all: v.in.dxf). I believe it is important to
let normal users have access to these features. I would therefore
recommend designing a roadmap for a release in a reasonable time.

see
http://thread.gmane.org/gmane.comp.gis.grass.devel/11403/focus=11456
http://thread.gmane.org/gmane.comp.gis.grass.devel/12423/focus=12492

Hamish

--
Paolo Cavallini
email+jabber: cavallini@faunalia.it
www.faunalia.it
Piazza Garibaldi 5 - 56025 Pontedera (PI), Italy Tel: (+39)348-3801953

_______________________________________________
grass-dev mailing list
grass-dev@grass.itc.it
http://grass.itc.it/mailman/listinfo/grass-dev

Agreed.

When is Markus back?

We're *so* close to getting an x11-less GRASS, it would be nice to do this
for 6.2. This offers possibilities to run GRASS natively on Windows, as well
as making it more consistently useable overall. To accomplish that, here is
what remains to be done.

georectifier: C script for RMS error, updates to v.transform so that it can
read or ignore a 5th column (use gcp) in a points file, creation of v.group
(if everyone thinks this is a good idea). The last two are for consistency,
but not required for functionality. I have everything running as is now
except for RMS.

nviz: Glynn has already noted what probably needs to be done. It sounds
minimal from the perspective of someone who doesn't know C.

v.digit: I don't think this will get done. Jachym's efforts have been
directed towards pyGTK. This is nice for the future, but doesn't help for
6.2. Unless someone jumps into the breach soon, we should just accept that
you will need x11 (or QGIS) for digitizing for now.

d.path and wildfire modeliing: I wouldn't worry about for 6.2

I'm not sure what else needs to be done for the rest of the program. It
seems like we are ready for a feature freeze otherwise.

Michael

__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics and Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Helena Mitasova <hmitaso@unity.ncsu.edu>
Date: Fri, 9 Jun 2006 09:55:23 -0400
To: <cavallini@faunalia.it>
Cc: <grass-dev@grass.itc.it>
Subject: Re: [GRASS-dev] grass6.2?

we need a freeze to get the release done, too many changes are
happening at this time
  and we need somebody to declare the freeze -
Markus is traveling so we are somewhat lacking a leadership - this is
one situation
when having a steering committee would be helpful - the committee
could meet on IRC, declare an
official freeze and we don't get this die-out discussions,

Helena

Helena Mitasova
Dept. of Marine, Earth and Atm. Sciences
1125 Jordan Hall, NCSU Box 8208,
Raleigh NC 27695
http://skagit.meas.ncsu.edu/~helena/

On Jun 9, 2006, at 5:49 AM, Paolo Cavallini wrote:

Thanks Hamish.
I' aware of the threads, but afterwards the discussion seemed to
die out, so
my question.
Perhaps I missed the point, but I didn't see a clear roadmap coming
out.
All the best.
pc

At 11:38, venerdì 9 giugno 2006 you presumably wrote:

Paolo Cavallini wrote:

The current cvs version has a number of very important
improvements of
the current stable (one for all: v.in.dxf). I believe it is
important to
let normal users have access to these features. I would therefore
recommend designing a roadmap for a release in a reasonable time.

see
http://thread.gmane.org/gmane.comp.gis.grass.devel/11403/focus=11456
http://thread.gmane.org/gmane.comp.gis.grass.devel/12423/focus=12492

Hamish

--
Paolo Cavallini
email+jabber: cavallini@faunalia.it
www.faunalia.it
Piazza Garibaldi 5 - 56025 Pontedera (PI), Italy Tel: (+39)
348-3801953

_______________________________________________
grass-dev mailing list
grass-dev@grass.itc.it
http://grass.itc.it/mailman/listinfo/grass-dev

Michael Barton wrote:

We're *so* close to getting an x11-less GRASS, it would be nice to do this
for 6.2. This offers possibilities to run GRASS natively on Windows, as well
as making it more consistently useable overall. To accomplish that, here is
what remains to be done.

So, should I commit the changes to libraster to allow driver-less
rendering?

--
Glynn Clements <glynn@gclements.plus.com>

Does this mean that I can change gis.m to render with out running d.mon?
Anything I would have to know about setting environments to do this?

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics and Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Glynn Clements <glynn@gclements.plus.com>
Date: Fri, 9 Jun 2006 21:32:51 +0100
To: Michael Barton <michael.barton@asu.edu>
Cc: Helena Mitasova <hmitaso@unity.ncsu.edu>, <cavallini@faunalia.it>,
<grass-dev@grass.itc.it>
Subject: Re: [GRASS-dev] grass6.2?

Michael Barton wrote:

We're *so* close to getting an x11-less GRASS, it would be nice to do this
for 6.2. This offers possibilities to run GRASS natively on Windows, as well
as making it more consistently useable overall. To accomplish that, here is
what remains to be done.

So, should I commit the changes to libraster to allow driver-less
rendering?

--
Glynn Clements <glynn@gclements.plus.com>

Michael Barton wrote:

> So, should I commit the changes to libraster to allow driver-less
> rendering?

Does this mean that I can change gis.m to render with out running d.mon?

Yes.

Anything I would have to know about setting environments to do this?

If the environment variable GRASS_RENDER_IMMEDIATE is set to TRUE,
libraster uses the built-in "PNG driver" instead of connecting to a
monitor. All of the environment variables which the PNG driver
understands apply to immediate rendering.

This should be backwards-compatible, i.e. so long as you don't set
GRASS_RENDER_IMMEDIATE, everything should work as before.

I've attached the code in case anyone wants to try it now.

--
Glynn Clements <glynn@gclements.plus.com>

(attachments)

libraster.tar.gz (25.3 KB)

What about geometry? We have to stop d.mon gism, reset the geometry, and
restart gism. How is this handled in the new system?

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Glynn Clements <glynn@gclements.plus.com>
Date: Sat, 10 Jun 2006 02:30:32 +0100
To: Michael Barton <michael.barton@asu.edu>
Cc: <grass-dev@grass.itc.it>
Subject: Re: [GRASS-dev] grass6.2?

Michael Barton wrote:

So, should I commit the changes to libraster to allow driver-less
rendering?

Does this mean that I can change gis.m to render with out running d.mon?

Yes.

Anything I would have to know about setting environments to do this?

If the environment variable GRASS_RENDER_IMMEDIATE is set to TRUE,
libraster uses the built-in "PNG driver" instead of connecting to a
monitor. All of the environment variables which the PNG driver
understands apply to immediate rendering.

This should be backwards-compatible, i.e. so long as you don't set
GRASS_RENDER_IMMEDIATE, everything should work as before.

I've attached the code in case anyone wants to try it now.

--
Glynn Clements <glynn@gclements.plus.com>

On Fri, 9 Jun 2006, Michael Barton wrote:

georectifier: C script for RMS error, updates to v.transform so that it can
read or ignore a 5th column (use gcp) in a points file, creation of v.group
(if everyone thinks this is a good idea). The last two are for consistency,
but not required for functionality. I have everything running as is now
except for RMS.

I haven't followed the discussions about this so closely. Would you mind telling me what it is that you way, then I could maybe whip up a module to do the calculations. Do we have some sort of equation(s)?

v.digit: I don't think this will get done. Jachym's efforts have been
directed towards pyGTK. This is nice for the future, but doesn't help for
6.2. Unless someone jumps into the breach soon, we should just accept that
you will need x11 (or QGIS) for digitizing for now.

Also v.edit would need some more doing. esp. the delete doesn't work, and I haven't had time to have a good look at it ): I'm also having strange problems with adding adjacent areas. if they are only N-S,E-W it's all good, but if not then I'd need to do some voodoo to make it work. why?

i.e. this works:
+---+---+
| | |
+---+---+
| | |
+---+---+

This doesn't
     +---+---+
    /| /| /
   +-+-+-+-+
  / |/ |/
+---+---+

Can anyone give me a clue on what is going on?

--W

--

<:3 )---- Wolf Bergenheim ----( 8:>

Michael Barton wrote:

>>> So, should I commit the changes to libraster to allow driver-less
>>> rendering?
>>
>> Does this mean that I can change gis.m to render with out running d.mon?
>
> Yes.
>
>> Anything I would have to know about setting environments to do this?
>
> If the environment variable GRASS_RENDER_IMMEDIATE is set to TRUE,
> libraster uses the built-in "PNG driver" instead of connecting to a
> monitor. All of the environment variables which the PNG driver
> understands apply to immediate rendering.
>
> This should be backwards-compatible, i.e. so long as you don't set
> GRASS_RENDER_IMMEDIATE, everything should work as before.
>
> I've attached the code in case anyone wants to try it now.

What about geometry? We have to stop d.mon gism, reset the geometry, and
restart gism. How is this handled in the new system?

As with the PNG driver, the dimensions are taken from GRASS_WIDTH and
GRASS_HEIGHT, defaulting to 640 and 480 respectively.

--
Glynn Clements <glynn@gclements.plus.com>

Wolf Bergenheim wrote:

> georectifier: C script for RMS error, updates to v.transform so that it can
> read or ignore a 5th column (use gcp) in a points file, creation of v.group
> (if everyone thinks this is a good idea). The last two are for consistency,
> but not required for functionality. I have everything running as is now
> except for RMS.

I haven't followed the discussions about this so closely. Would you mind
telling me what it is that you way, then I could maybe whip up a module
to do the calculations. Do we have some sort of equation(s)?

See compute_transformation() in imagery/i.points/analyze.c.
Compute_equation() is in imagery/i.points/equ.c. The two I_* functions
which are used are in lib/imagery/georef.c.

However, the use of the I_* functions should be replaced by
GDALCreateGCPTransformer(), GDALGCPTransform() and
GDALDestroyGCPTransformer(). Unlike the I_* functions, the GDAL
functions support 2nd- and 3rd-order transformations, and are based
upon the same code which i.rectify uses.

--
Glynn Clements <glynn@gclements.plus.com>

Wolf,

Thanks for the offer.

1. In order to calculate RMS error, it is necessary to transform the GCP's
unprojected coordinates into projected coordinates, and calculate the
diagonal distance between the transformed coordinates and the coordinates
used to define the transformation. Apparently, there is already C-code to do
this in the imagery library. Glynn said that he might be able to do a quick
C-module to accomplish this, using existing code rather than have anyone
write new code to do it.

2. I've combined raster and vector georectification into one module.
However, the set up for georectifying vectors differs from rasters in
several ways. Hamish and others suggested that this is a good time to make
them consistent. This involves modifying v.transform and either extending
i.group or making v.group. Here are the differences...

I.group creates an ascii REF file listing all rasters that will be rectified
using the same set of GCP's (stored in an ascii POINTS file). It also
creates (if necessary) a group directory structure
$GISBASE/group/[groupname] where REF and other georectifing configurations
files are stored.

There is no equivalent v.group

I.target creates an ascii TARGET file that lists the projected
location/mapset into which the files in REF will be projected.

There is no equivalent for vectors. This is needed by i.rectify but not by
v.transform.

I.points interactively creates a 5 column POINTS file that is used for
rectifying rasters. The columns are unprojected x, unprojected y, projected
east, projected north, a boolean (0/1) value that determine whether the row
(a GCP) is used in rectification and RMS calculation. It calculates RMS
error for the GCP's in the points file (those with a 1 in the 5th column).
It saves the POINTS file in $GISBASE/group/[groupname]/

There is no equivalent v.points. V.transform uses an ascii file very similar
to the POINTS file, except that it lacks the 5th column. In other words, all
GCP's in a vector points file are used for georectification. There is no
interactive program like i.points to create a vector points file. The vector
points file can be stored anywhere and have any name.

The georectifier is replacing i.points and serves to create a points file
for vectors too.

The suggestion is to have v.transform and i.rectify read files of identical
5 column format, have v.transform work on groups of vectors rather than just
a single vector, and use a directory structure of $GISBASDE/group/... For
vectors as well as rasters.

This requires something to set up the group structure, REF file and possibly
TARGET file for vectors (extended i.group, or a new v.group), and changing
v.transform to use the group directory/file structure, read a 5 column
POINTS file, and possibly a TARGET file.

Michael

__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Wolf Bergenheim <wolf+grass@bergenheim.net>
Date: Sat, 10 Jun 2006 15:54:34 +0300 (EEST)
To: Michael Barton <michael.barton@asu.edu>
Cc: Helena Mitasova <hmitaso@unity.ncsu.edu>, <cavallini@faunalia.it>,
<grass-dev@grass.itc.it>
Subject: Re: [GRASS-dev] grass6.2?

On Fri, 9 Jun 2006, Michael Barton wrote:

georectifier: C script for RMS error, updates to v.transform so that it can
read or ignore a 5th column (use gcp) in a points file, creation of v.group
(if everyone thinks this is a good idea). The last two are for consistency,
but not required for functionality. I have everything running as is now
except for RMS.

I haven't followed the discussions about this so closely. Would you mind
telling me what it is that you way, then I could maybe whip up a module
to do the calculations. Do we have some sort of equation(s)?

v.digit: I don't think this will get done. Jachym's efforts have been
directed towards pyGTK. This is nice for the future, but doesn't help for
6.2. Unless someone jumps into the breach soon, we should just accept that
you will need x11 (or QGIS) for digitizing for now.

Also v.edit would need some more doing. esp. the delete doesn't work, and
I haven't had time to have a good look at it ): I'm also having strange
problems with adding adjacent areas. if they are only N-S,E-W it's all
good, but if not then I'd need to do some voodoo to make it work. why?

i.e. this works:
+---+---+
| | |
+---+---+
| | |
+---+---+

This doesn't
     +---+---+
    /| /| /
   +-+-+-+-+
  / |/ |/
+---+---+

Can anyone give me a clue on what is going on?

--W

--

<:3 )---- Wolf Bergenheim ----( 8:>

Michael Barton wrote:

1. In order to calculate RMS error, it is necessary to transform the GCP's
unprojected coordinates into projected coordinates, and calculate the
diagonal distance between the transformed coordinates and the coordinates
used to define the transformation. Apparently, there is already C-code to do
this in the imagery library. Glynn said that he might be able to do a quick
C-module to accomplish this, using existing code rather than have anyone
write new code to do it.

To clarify: the code to choose a transformation and to project
coordinates is in the imagery library, while the error calculation is
in i.points.

However:

1. i.rectify has its own alternatives to the functions in the imagery
library. The i.rectify versions support 2nd- and 3rd- order
transformations, while those in the imagery library only support
1st-order (affine) transformations. Thus the error calculations are
only meaningful if you use a 1st-order transformation with i.rectify.

2. GDAL contains its own version of the code used by i.rectify. Rather
than duplicate this, we should use the GDAL version.

2. I've combined raster and vector georectification into one module.
However, the set up for georectifying vectors differs from rasters in
several ways. Hamish and others suggested that this is a good time to make
them consistent. This involves modifying v.transform and either extending
i.group or making v.group. Here are the differences...

One difference which should probably be stated more explicitly is that
i.rectify can use a source from a different location, whereas
v.transform requires the source to be in the current location.

--
Glynn Clements <glynn@gclements.plus.com>

I'd put it a bit differently.

What seems to happen is that the vector output from v.transform ends up in
the same location as the input file. That is, if your vector file is in an
xy location, the projected output will also end up in the same
location--even though it is correctly projected. In other words, it behaves
like any other normal map operation--it must take place within the active
location/mapset.

So, subsequently, you can simply copy the vector folder for the projected
map to the proper projected location and mapset. The georectifier does that
now. This is due to the lack of a 'target' location/mapset like those
produced by i.group.

I don't know if you want to change that behavior to make it consistent with
rasters, or let the georectifier (or other such utility) do the work.

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Glynn Clements <glynn@gclements.plus.com>
Date: Sun, 11 Jun 2006 23:01:53 +0100
To: Michael Barton <michael.barton@asu.edu>
Cc: Wolf Bergenheim <wolf+grass@bergenheim.net>, Helena Mitasova
<hmitaso@unity.ncsu.edu>, <grass-dev@grass.itc.it>, <cavallini@faunalia.it>
Subject: Re: [GRASS-dev] grass6.2?

One difference which should probably be stated more explicitly is that
i.rectify can use a source from a different location, whereas
v.transform requires the source to be in the current location.

Michael Barton wrote:

> One difference which should probably be stated more explicitly is that
> i.rectify can use a source from a different location, whereas
> v.transform requires the source to be in the current location.

I'd put it a bit differently.

What seems to happen is that the vector output from v.transform ends up in
the same location as the input file. That is, if your vector file is in an
xy location, the projected output will also end up in the same
location--even though it is correctly projected. In other words, it behaves
like any other normal map operation--it must take place within the active
location/mapset.

So, subsequently, you can simply copy the vector folder for the projected
map to the proper projected location and mapset. The georectifier does that
now. This is due to the lack of a 'target' location/mapset like those
produced by i.group.

I don't know if you want to change that behavior to make it consistent with
rasters, or let the georectifier (or other such utility) do the work.

i.rectify, r.proj and v.proj all read from one location and write to
another (although the two can be the same, they don't have to be),
while v.transform only uses a single location. I suggest that
v.transform should be extended to allow a different source location.

--
Glynn Clements <glynn@gclements.plus.com>

I noted the difference because i.rectify reads from the current location and
writes to the location specified by i.target.

V.proj and r.proj read from a different location/map set and write to the
current one.

I'd suggest making v.transform consistent with i.rectify rather than v.proj,
either by implementing a TARGET file or with location and mapset arguments
in the command (the latter seems easier than the i.target way).

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Glynn Clements <glynn@gclements.plus.com>
Date: Mon, 12 Jun 2006 01:19:56 +0100
To: Michael Barton <michael.barton@asu.edu>
Cc: Helena Mitasova <hmitaso@unity.ncsu.edu>, Wolf Bergenheim
<wolf+grass@bergenheim.net>, <grass-dev@grass.itc.it>, <cavallini@faunalia.it>
Subject: Re: [GRASS-dev] grass6.2?

i.rectify, r.proj and v.proj all read from one location and write to
another (although the two can be the same, they don't have to be),
while v.transform only uses a single location. I suggest that
v.transform should be extended to allow a different source location.

Glynn Clements wrote:

So, should I commit the changes to libraster to allow driver-less
rendering?

Not until 6.1.0 is released please! If that is committed we have to wait
to release 6.1.0, if not we can pretty much release it now.

Hamish

Michael Barton wrote:

I noted the difference because i.rectify reads from the current location and
writes to the location specified by i.target.

Ah. That is something which its replacement shouldn't imitate.

Reading from a different location or mapset is reasonable enough, but
nothing should write outside of the current mapset. The case of
r.in.gdal creating a new location is probably OK, but writing to an
existing mapset (other than the current one) isn't.

BTW, does i.rectify bother to lock the destination mapset?

--
Glynn Clements <glynn@gclements.plus.com>

Is there a reason to change i.rectify at some point so that it also will
read from a different directory and write to the current one? This is how
the georectifier works, but I have to switch back and forth between
locations/mapsets to make i.rectify work.

I have no idea about the locking. But probably not or I would have probably
run into it like I did with g.mapset.

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics & Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton

From: Glynn Clements <glynn@gclements.plus.com>
Date: Mon, 12 Jun 2006 06:24:52 +0100
To: Michael Barton <michael.barton@asu.edu>
Cc: Helena Mitasova <hmitaso@unity.ncsu.edu>, Wolf Bergenheim
<wolf+grass@bergenheim.net>, <grass-dev@grass.itc.it>, <cavallini@faunalia.it>
Subject: Re: [GRASS-dev] grass6.2?

Michael Barton wrote:

I noted the difference because i.rectify reads from the current location and
writes to the location specified by i.target.

Ah. That is something which its replacement shouldn't imitate.

Reading from a different location or mapset is reasonable enough, but
nothing should write outside of the current mapset. The case of
r.in.gdal creating a new location is probably OK, but writing to an
existing mapset (other than the current one) isn't.

BTW, does i.rectify bother to lock the destination mapset?

--
Glynn Clements <glynn@gclements.plus.com>