[Geoserver-devel] IRC Meeting feedback

Apologies for missing the meeting had a interview at the time, bad scheduling on my part.

First on releasing, rc2 on the 14th sounds fine to me. And I think it'd be fine if that slipped a few days, we should announce by the 19th though.

For the 1.6.0 release, what actually would be fine is to put it out like Jan. 2/3. We've actually seemed to have developed a bit of a tradition with not doing a big announcement until the .1 or .2 release, so we can stick with that. That way we can get the basics of the documentation in place for 1.6.0, and for 1.6.1 we can have all the nice screencasts, and by that time I believe TOPP should have someone who can help out on those.

As for the discussion on versioned feature collections. First off there was a bit of confusion why we needed this for the spec. The spec is at: http://www.openplans.org/projects/opencore/maps-part-1 The reason we need it in my mind is not really the history or just the comments, it's more the requirement that each pop-up display who made the note and when they made it. This seems to be required for every pop-up, and thus we need it on every feature. We could do a GetLog request everytime someone makes a pop-up, but that will make things feel slow.

I added on the lastUpdatedBy and updateTime. These are a bit outside the current spec, though we will need updateTime to track the history, and to compare against createdTime to tell if its a creation or an update. lastUpdatedBy is outside the scope of this spec, but as soon as we let people do real wiki editing I'm sure we'll want that, probably on the per feature level.

I like Tim's idea for a more generic ExtendedFeatureCollection. But I think it's sort of over-generalizing for an option we don't have plans to support. It's a cool point that we could just track logged in user and when things were last updated, but realistically to track that we'd have to modify the tables or have people create special tables to take advantage of it. So we'd need a new datastore, or generalize out what we have now. So I'd say for now we should stick with VersionedFeatureCollection. If there's a more generic use case in the future then we can refactor it. Indeed I could see extendedFeatureCollection including other kinds of auto generated information, read only fields that you wouldn't want to update. It should share implementation with the versionedfeaturecollection most likely. But the original point of the VersionedFeatureCollection was to include the version info at the FeatureCollection level. That attribute makes less sense in an extendedFeatureCollection, so we're probably going to still want to have the Versioning one. I suppose one could make a generic attribute in the extended one. But if we go down that road one could argue that the WFS FeatureCollection should have better extension mechanisms.

Also, note that Andrea and I talked a bit more about design, and we're thinking the best would be to also add a DescribeVersionedFeature operation, and the VersionedFeatureCollection would refer to that for its schema.

Chris

Chris Holmes ha scritto:

Apologies for missing the meeting had a interview at the time, bad scheduling on my part.

First on releasing, rc2 on the 14th sounds fine to me. And I think it'd be fine if that slipped a few days, we should announce by the 19th though.

For the 1.6.0 release, what actually would be fine is to put it out like Jan. 2/3. We've actually seemed to have developed a bit of a tradition with not doing a big announcement until the .1 or .2 release, so we can stick with that. That way we can get the basics of the documentation in place for 1.6.0, and for 1.6.1 we can have all the nice screencasts, and by that time I believe TOPP should have someone who can help out on those.

Ok, sounds good.

As for the discussion on versioned feature collections. First off there was a bit of confusion why we needed this for the spec. The spec is at: http://www.openplans.org/projects/opencore/maps-part-1 The reason we need it in my mind is not really the history or just the comments, it's more the requirement that each pop-up display who made the note and when they made it. This seems to be required for every pop-up, and thus we need it on every feature. We could do a GetLog request everytime someone makes a pop-up, but that will make things feel slow.

I had a very brief look at that spec and it seems to me filtering is
missing. How does one find anything on the map once there are, say, 200
notes around? I guess we need some kind of categorization or free text search to make it possible to locate anything if this UI has
success?

I added on the lastUpdatedBy and updateTime. These are a bit outside the current spec, though we will need updateTime to track the history, and to compare against createdTime to tell if its a creation or an update. lastUpdatedBy is outside the scope of this spec, but as soon as we let people do real wiki editing I'm sure we'll want that, probably on the per feature level.

I like Tim's idea for a more generic ExtendedFeatureCollection. But I think it's sort of over-generalizing for an option we don't have plans to support. It's a cool point that we could just track logged in user and when things were last updated, but realistically to track that we'd have to modify the tables or have people create special tables to take advantage of it.

Yep, special tables, new datastores would be too much of an headache.

So we'd need a new datastore, or generalize out what we have now.

Well, we would need modifications to the WFS service only imho. On one
side we have a set of informations the server can determine "out of band" compared to the actual WFS transaction, which are current date,
user, ip address... cannot think of anything else.
On the other side we have a feature type whose structure allows for
those info to be recorded. Ok, then what we need is a mapping between
those informations and the attributes, and then change only the wfs
service to add these automatically to any insert and update transaction.
It would not be that difficult, it's only very annoying that it requires
new ui and config to establish the mapping.

So I'd say for now we should stick with VersionedFeatureCollection. If there's a more generic use case in the future then we can refactor it. Indeed I could see extendedFeatureCollection including other kinds of auto generated information, read only fields that you wouldn't want to update. It should share implementation with the versionedfeaturecollection most likely. But the original point of the VersionedFeatureCollection was to include the version info at the FeatureCollection level.

Hmmm... that original idea does not work much... user, last modification
are different for each feature in the collection. At the collection
level you can say what's the current revision, which is useful since you
can store it in a checkout and then ask only the modification from
that revision to the latest one.

That attribute makes less sense in an extendedFeatureCollection, so we're probably going to still want to have the Versioning one. I suppose one could make a generic attribute in the extended one. But if we go down that road one could argue that the WFS FeatureCollection should have better extension mechanisms.

Also, note that Andrea and I talked a bit more about design, and we're thinking the best would be to also add a DescribeVersionedFeature operation, and the VersionedFeatureCollection would refer to that for its schema.

Yeah. Thinking about it, it's actually easy. We just have to poke a little extension in the current describe feature type so that the
described feature extends AbstractVersionedFeatureType instead of
GML's AbstractFeatureType, that is, the DescribeFeatureResponse
would look like:

<xs:schema targetNamespace="http://www.openplans.org/topp&quot; elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<xs:import namespace="http://www.opengis.net/gml&quot; schemaLocation="http://geo.openplans.org:8080/geoserver/schemas/wfsv/1.0.0/wfs.xsd&quot;/&gt;
   <xs:complexType name="states_Type">
     <xs:complexContent>
       <xs:extension base="wfsv:AbstractVersionedFeatureType">
...
</xs:schema>

Just like AbstractFeatureType has certain attributes one can
take for granted (fid, name, description, bounds) a versioned
feature would have more (user, lastupdated, revision).
We just have to decide wheter we want them to show up
as sub-elements (just name, description and boudns), or as xml attributes (like fid).
The former is easier to implement, requires no special treatment,
and would allow to apply ogc filters on them (since you're doing
a GetFeature anyways, you can filter on those attributes as well).
Implementation wise it would not be any harder, since to support
VersionedFeatureCollection we would have to build a view in
the database to perform the join between the data table and
the changesets table (given that the datastore we use is not
able to deal with joins).

Does all of this make sense?

Cheers
Andrea

As for the discussion on versioned feature collections. First off there was a bit of confusion why we needed this for the spec. The spec is at: http://www.openplans.org/projects/opencore/maps-part-1 The reason we need it in my mind is not really the history or just the comments, it's more the requirement that each pop-up display who made the note and when they made it. This seems to be required for every pop-up, and thus we need it on every feature. We could do a GetLog request everytime someone makes a pop-up, but that will make things feel slow.

I had a very brief look at that spec and it seems to me filtering is
missing. How does one find anything on the map once there are, say, 200
notes around? I guess we need some kind of categorization or free text search to make it possible to locate anything if this UI has
success?

Search is planned for a future iteration. Note also that the plans include the ability for each project to be able to make multiple maps. But the main thought for this was to get something up that people start using, and have that drive the use case. Eventually we'll probably want particular kinds of notes, 'pothole', 'dangerous intersection', with particular icons for them. But the thought was instead of trying to anticipate that we'd just make 'notes', and see what kinds of things people were actually noting.

So we'd need a new datastore, or generalize out what we have now.

Well, we would need modifications to the WFS service only imho. On one
side we have a set of informations the server can determine "out of band" compared to the actual WFS transaction, which are current date,
user, ip address... cannot think of anything else.
On the other side we have a feature type whose structure allows for
those info to be recorded. Ok, then what we need is a mapping between
those informations and the attributes, and then change only the wfs
service to add these automatically to any insert and update transaction.
It would not be that difficult, it's only very annoying that it requires
new ui and config to establish the mapping.

Good point. The ip address is an interesting one, eventually we probably want the option to let people do 'anonymous' edits, but to track the ip instead of the user name when they do that.

So I'd say for now we should stick with VersionedFeatureCollection. If there's a more generic use case in the future then we can refactor it. Indeed I could see extendedFeatureCollection including other kinds of auto generated information, read only fields that you wouldn't want to update. It should share implementation with the versionedfeaturecollection most likely. But the original point of the VersionedFeatureCollection was to include the version info at the FeatureCollection level.

Hmmm... that original idea does not work much... user, last modification
are different for each feature in the collection. At the collection
level you can say what's the current revision, which is useful since you
can store it in a checkout and then ask only the modification from
that revision to the latest one.

Oh yeah, I just meant that the original design had something that was particular to versioning. The new feature collection definitely requires a lot more. But I think we should still include that attribute at the collection level.

That attribute makes less sense in an extendedFeatureCollection, so we're probably going to still want to have the Versioning one. I suppose one could make a generic attribute in the extended one. But if we go down that road one could argue that the WFS FeatureCollection should have better extension mechanisms.

Also, note that Andrea and I talked a bit more about design, and we're thinking the best would be to also add a DescribeVersionedFeature operation, and the VersionedFeatureCollection would refer to that for its schema.

Yeah. Thinking about it, it's actually easy. We just have to poke a little extension in the current describe feature type so that the
described feature extends AbstractVersionedFeatureType instead of
GML's AbstractFeatureType, that is, the DescribeFeatureResponse
would look like:

<xs:schema targetNamespace="http://www.openplans.org/topp&quot; elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
<xs:import namespace="http://www.opengis.net/gml&quot; schemaLocation="http://geo.openplans.org:8080/geoserver/schemas/wfsv/1.0.0/wfs.xsd&quot;/&gt;

  <xs:complexType name="states_Type">
    <xs:complexContent>
      <xs:extension base="wfsv:AbstractVersionedFeatureType">
...
</xs:schema>

Just like AbstractFeatureType has certain attributes one can
take for granted (fid, name, description, bounds) a versioned
feature would have more (user, lastupdated, revision).
We just have to decide wheter we want them to show up
as sub-elements (just name, description and boudns), or as xml attributes (like fid).
The former is easier to implement, requires no special treatment,
and would allow to apply ogc filters on them (since you're doing
a GetFeature anyways, you can filter on those attributes as well).
Implementation wise it would not be any harder, since to support
VersionedFeatureCollection we would have to build a view in
the database to perform the join between the data table and
the changesets table (given that the datastore we use is not
able to deal with joins).

Does all of this make sense?

Ah, very nice, I like it a lot.

Chris

Cheers
Andrea

!DSPAM:4005,47566bc159601030819293!