Thanks for the community planning, the stuff you have me down for I have been meaning to rant about, but where oh where is the time. Thanks for the kick.

I played with the indexed shapefile datastore and was a little disapointed with its performance. After some profiling I tracked the problem to the dbf reader, in particular 40% of cpu time was being spent reading strings and checking for whitespace.

My attempt at increasing performance involved creating an index for the dbf file that contained information to make the parsing of character fields fast. However, the performance gain was minimal.

After talking with Jesse we thought a second attempt at speeding it up might involve creating a spatial index for the attributes which would speed up bounding box queries. However I have not spent any time on this yet.

Justin

[EMAIL PROTECTED] wrote:
Hi everyone, working on the weekend and trying to collect my thoughts. You have all kindly put up with my ramblings about Feature Model these last weeks. This email is not about that....

I am going to try a different approach this week. Normally I have these separate conversations concerning something I am trying to pull together for the "big picture".

If you are listed by name below you are part of this bigger picture I am trying to pull together. If you did not know you were working together, welcome to open-source development, please feel free to introduce yourself to anyone you don't know.

Summary:
Filter - Chris Dillard, Gabriel
Random Access & Selection - Justin, Jesse, user list
Feature Versioning - Adrian and Dave Blasby
Factory Use & Injection - Justin & Martin
2.2 Release - Martin

For those not explicitly mentioned, please feel free to jump in ... this is open-development :-) That especially goes for James and Justin -- let me know what I am missing. Justin may have escaped but I still need to talk these design ideas around, perhaps moving it into an open forum will help.

Chris Holmes - you can call my kettle black after this email,
Jody

PS. You may notice that this contains information about both GeoAPI and GeoTools. If you are on only one of these lists kindly do not skip this message. I intend for us to work together, not every issue is for both camps - but the solution should be. (I promise this is not about Geometry, or Feature Model)

Filter
======

Chris Dillard (probably the most startled to get this email) - I am still waiting for ideas on how you would like to go forward on GeoAPI Filter interfaces. As mentioned previously I would like an answer on how Filter 1.0 and Filter 1.1 can both be supported. (This is something I can do, but if you had existing plans, or would like to minimize breakage, then I would like some input).

What is on the table? Go general and and construct specific ...
- Making the set of "general" Filter interfaces matching the capabilities of GeoTools (I cannot ask people to accept less).
- Marking down the set of Filter 1.0 filters, as per GeoAPI right now.
- Marking down an additional set of Filter 1.1 filters (there will be overlap)
- Produce two factories (one for each specification), each factory limited to creating the scope of Filter expression supported by that standard.

This is preventing geotools from moving in the direction of GeoAPI, I have mentioned it as a concern previously. At the very least this should be brought up in the next OGC meeting as an issue worth looking at (how GeoAPI should be future proofed).

There is an alternative (that I don't like) to the above idea - that is considering all Filter 1.x specifications as "roughly the same" and breaking out a getVersion() method and a mess of javadocs. This is much worse in that client-code cannot explicitly indicate its limitations at the class-level. We would be left with a mess of "optionality" which is the death of way more standards then even the OGC produces...

Gabriel - as promissed I am looking into the XPath side of things (as a sanity check on the Feature Model) this weekend. I saw that you planed to generalize Filter to work against Attribute? I am working through the possible advantage to that. Near as I can tell having an explicit Class for JXPath to bind against would be the main benifit?

My only heistation is one of focus. I am 'happy' with the Feature Model maintaining a level of indirection (it has to as it is a meta model). But I had wanted Filter / Expression to be more hands on. Hands on should be read as Object.

I have mentioned this in conversation repeatly, but I will explicitly lay these cards down. I am interested in setting up the following concerns, and making sure they are orthogonol.

Data language
- Feature
- Other: Metadata, Record
- Descriptor

Query language:
- Query
- Filter
- Expression

Client code:
- Portrayal (example)

Thus I dont't want to repeat a few past mistakes (like Feature being used as a parameter by geotools FilterFactory.

Random Access and Selection (not Filter)
===========================
Justin - you have been working on Shapefile and optimizing for Attribtues for rendering ... User List - disgust was voiced about the Filter API not being what was expected (someone had implemented a Filter and was unable to get processed) ... Jesse - you have me down to make you a Random Access API by November. For those that are not Jesse, if you need background please review the Confluence site for these plans.

When I first started I did not *want* Filter - I wanted a Selection. The difference is Filter is a rule used to define a sub set. A selection *is* the subdivided Set. Admittedly there is no useful difference between Selection and a FidFilter ...

One of the things that Filter 1.1 is going to kick us hard with is the need for Order. Dave Blasby can remember the days of Cause & Effect (previous job) where there was a separation between Content, Order and Selection.

I am thinking of representing these concerns as First class objects. Be it FeatureList (defined by an Order), or Selection (made against a specific FeatureCollection).

Justin about the consequences of this idea - each index can basically be viewed as an "Order" of the origional content (arranged according to the the attribute under discussion). You can start in on these ideas for shapefile even before we figure out a way to out the idea as an interface. I am pretty sure you never got around to telling the email list about your experimenets with building attribtue indexes last week. This idea would dovetail nicely and you could store the content in a easier to parse format, in the nodes of the index (even just to speed up the process of index navigation).

Note - the process of making a Selection out of a Filter would be similar to some of the workflows you see in ArcView. Note the AttributeIndex with preparsed content would also be the correct mechaism to immplement the traditional simple Join of temporary content to a shapefile seen in arcview.

Feature Versioning
==================
Adrian and Dave Blasby, one of the things that occured last week (in an IRC session posted to the UDig site so you may have missed it) was that Adrian was sending us right back to the origional OGC Feature Model. That is before it was cleaned up a limited in scope for things like "Simple Feature Model", or GML2 (or GML3).

James has given me a target of GML3 (at least the Level 0 Profile part), this is also the target of Gabriel.

Adrian and Dave - you have a different problem in mind. I would like to confirm that we are not painting you into a corner. Dave I am under the impression that you would like to build Feature Versioning "on top" of a data store infrastructure as a separate concern. Is this still your plan ... it would be great if you could talk to Adrian who has similar concerns.

Adriand you were worried about Feature extending Attribute. Part of the fun is that you have a slightly different impression of what Attributes are then that OGC document I pointed you towards. I am waiting to hear back from you on your revised understanding.... The word "properties" is also provided (of which "attribtues" is a specific kind of property holding data). I admit that our Feature Model is a *data model* and does not allow Object-oriented methods/ opperations at this time. The OGC is struggling with associatations linking data to opperations as we speak as part of their Catalog Publish/Find/Bind infrastrure. I cannot consider this as leadership - or a strong movement towards object orientation.

Dave, Adrian is in a world where not only the attribute values change over time. The schema changes over time. While the origional OGC Feature Model can deal with this (for them a Feature is a bag of stuff with a fixed ID, the stuff is captured as attribtues wach with a unique timestamp/value/etc... different Application Schema are constructed (like views in a database) offering a perspective on the content.

I can think of ways for you two to work together - serve up the "Feature" based on timestamp, complete with the Schema for the content at that point in time. Justin will call me out if I don't point out that "Extensible Interface" idea of allowing you to query for the content in the shape needed for the task at hand.

If that idea makes sense (to both of you), or if you think something else may be better - perhaps you can take it up with Justin?

Factory Use & Injection
=======================
Justin & Martin. In geotools last year we ran into the limits of our Factory system. We have achived independence of interface but the current state of things is ill specified from a customizaton point of view. If you return back to those orthogonal concerns at the top of the email you will see the things that we need to be able to tweak.

Justin has experience with the different kinds of injection although has not emailed about it. Martin I would like to see us take a step back from the ImageIO plugin system. And I would like to see GeoAPI follow suite.

We can use setter injection to document dependencies that is required for customization at the factory level. This also serves as the needed hooks for any and all Container based system. It is also clear and explict for those implementing geotools applications with normal java code.

I also would like to ask if GeoAPI can swtich to abstract classes for the data only objects such as TransactionRequest? I don't see any advantage to using interfaces in such cases, and an Abstract class can be customized with a Factory just as easily as an interfaces. The advantage being that any extention of the abstract class will not break client code. This doubles back to my concerns for the Filter 1.0 / Filter 1.1 troubles.

James had some backstorey on why geoapo/geotools is so aggressivly pro Factory/Interface. I liked the comment on the user list that such understanding should not be required to use these libraries.

To help I am tempted to promote the following used of nested interfaces:
public interface Thing {
   public interface Factory {
        public Thing create();
        public Thing create( int number );
        public void setPreferences( Preferences preferences );
   }
   public int getNumnber();
   public void setNumber( int number );
}

This technique is also compatible with the interface only approach used by GeoAPI and offers a level of explictness that prevents GeoAPI factories from being used in a production enviorment (where these concerns matter).

Note: the above includes an example of Setter injection, Preferences would be created by a PreferencesFactory, allowing application code a way to supply a default number for Thing creation, and probably a way for the Factory to externalize any customization for use across geotools applications.

Aside: I would be happier with constructor based injection, but I imagine it is a hard sell for GeoAPI with little benefit? For geotools code I will endevour to make a constructor that matches the dependencies listed by the setters.

2.2 Release
===========
Martin - thanks for taking on the next 2.2 release, the moment you are done we will kick in the aggregate changes (well we are going to do this on the 24th) and thus another milestone release.

As I recall you are stuck on javadocs ... just turn them off. This is only a milestone release, for those following along at home and not using svn. It is more important that we do this to reflect the accurate state of svn (and progress).

The release notes say to give module maintainers 3 days after an email, lets consider javadocs as of having its three days. Report a bug in Jira for James or Justin and lets get this email out the door.





-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel



--
Justin Deoliveira
The Open Planning Project
http://topp.openplans.org


-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to