[GRASS5] Proposed process for GRASS reorganization (please read)

As we all know GRASS components work independently of each other now knowing what the other is doing (or knowing very little). I have been proposing we reorganize the GRASS library into a model which will make all our lives much easier in the long run. It is also the first step in creating a more general GIS solution where one hand knows what the other is doing. For example after executing a command which alters the database one will be able to undo that operation. Also after a map is edited the results can be seen immediately.

There are many advantages to the reorganization:

* Localization for various languages/OS encodings using unicode and standard date formats. Also saving a user's preferences in the standard (platform-specific) location.

* High-level scripting. Not macros, actual scripting (AppleScript, VBScript, perl, etc.)

* Multiple undo/redo

* Plug-in architecture

* process-independent notification system and high-level IPC.

* decentralized persistence

* Hierarchical persistence (uses XML)

* Arbitrary file organization (thinking outside the database structure)

* A more flexible, abstract manner to access and edit data.

* Ability for independent 3rd parties to extend the framework without being compiled in. Meaning plug-ins are compiled but usable by everybody and are dynamically loaded. Thus plug-ins are not only used to add commands and other interface elements, but can extend the framework. This is a major reason why releasing the GRASS framework under a license like LGPL would be a very good idea.

This also makes the framework highly modular without having to build it in separate modules.

I also want to point out our current GRASS library any changes must be strictly controlled, especially the API. This restriction can be dropped with a GRASS framework utilizing plug-ins. The 3rd party additions can always be merged later if desired.

* organized memory management.

* ownership (two commands can't retain the same object)

* re-entrant objects, thread safety

* Most importantly: straightforward method for extending, reusing, and adding features.

I'm going to establish a few key concepts then propose a process to get from our current situation to the nirvana of MVC.

MVC stands for model-view-controller. Its a programming methodology (many call it a paradigm) whereby your model objects manage data, view objects display data, and controller objects link the two. Model and view classes are highly reusable while controller classes control the behavior of the whole application.

(a class is like a classification like dog. An object is a class implementation like a dog called spot)

For example a vector map could be a model object. The map class could contain a mutable array of vector series and a mutable array of closed loop vectors. The map class could have methods to:

* edit contents. For example adding a stream to a stream map (adding a vector series)

* return data. Like returning the number of closed-loop vector sets which could mean number of lakes.

* return a persistent representation of itself. Either a binary or property list.

* return data if touched method.

* draw itself. This method can be added to the class by another binary which is included with a graphics package.

Three example view objects could be a log view, a table view, and an image view. The view class is platform specific, it would be different depending if you were using the command line, X11, Win32, OS X etc. A log view can be as simple as an object which calls printf(), although another platform may make a graphical log view. You may also usually print views.

An example controller would be a command. The command "v.report" for example could gather information from the specified vector map model object, create a mutable array of statistics, create a window with a table view, pass the mutable array to the view to display, and pass the undo manager an action to delete the window. The command will also register different methods to be called like a command macro for the shell, a menu item, a toolbar item, etc.

Other than the command line controller and view, views and controllers are obviously platform (and user preference) dependent. They obviously depend on the host platform's API. For example Win32 may use ACTIVE-X while OS X may use AppKit. However the API for using basic gestures like drawing a map will be universal. Furthermore we have many basic data types and sets already defined along with our own models. Thus a new command may have a name and category and returns a mutable array. Using this information I can inset the command in the appropriate graphical menu, scripting dictionary, and toolbar of my host controllers. I can also create a macro for use in the command line. My controller can also setup the appropriate undo/redo actions if the command specifies them. For example a command adding a closed loop vector set to a vector map will either have an undo action or request the undo stack be cleared. In this example the undo action will merely remove the last closed loop vector set from the vector map.

The specific implementation of universal controllers and localized controllers goes way beyond this email and is totally unrelated to the implementation of the model, which is an entirely independent development. I'm only establishing the reason for writing the model in the first place. Now that I've made my case for the MVC programming methodology I'll propose several ways of getting there.

The implementation:

Currently the GRASS library is a simple abstraction between the programs (the commands) and the data. It provides inline functions for performing various calculations and creating sites in the database. One option is to create a model which uses the current GRASS library API. However this model would break every time the GRASS library was used directly. It also needs to be run in a particular environment so it knows the current site and database. The environment is defined by environment variables and by a file in the database's root directory. I see lots of problems with this which we may as well fix.

I think we should remove the .grass5rc file dependency. Its pretty much useless since it contains stuff which will be stores in the user preferences file which is application-specific.

Persistence:

First if commands are controllers run by a host application, the host app will have its own current programmatic database which for all intensive purposes can be saved in an arbitrary manner. There is no reason to have one database which everybody uses if the user in question is only interested in a local 'location'. This local version ought to be encapsulated so it may be opened like a project.

This doesn't mean that we have to change the format or abandon the collaborative database. In fact the same 'location' format can be used, encapsulated as a bundle. A bundle is a directory with an XML property list. The bundle typically has a name extension like spearfish.grass and the property list includes information like the bundle type, creator, icon, comment, as well as any properties used by the host application specific to that project. A bundle is typically seen as one file and implies the contents should not be changed manually, only applications meant to deal with that type of bundle should.

Thus we have two methods of persistence. A common database and a local bundle. In fact the *only* difference is the name of the directory and the XML property list file in the root directory.

Once the model is available it's trivial to support multiple databases or multiple sites in different databases. Just create an abstract class and have a mutable array of databases.

The organization and content of files in the bundle other than the property list is arbitrary, however it will likely be changed because the programmatic organization is not arbitrary. Instead each model must implement a method to represent itself as data suitable for persistence. There will be a set of base types which are stored according to type and hierarchy, but that's handed by the database class (or the site class).

Types other than data could be stored in XML property lists while data types would be stored as binary files with their names (and byte order) recorded in property lists. Thus a vector set could return its persistent self as an array, but it would be better to return a data since a property list would likely be huge.

How one splits up the data into files really depends on the size of such files. Once a model object is 'touched' it can be saved or reverted. If a small piece of data in a huge data file is being touched often it would probably be better to use a separate file. The organization can either be done at the head or decentralized, I don't really care either way. One advantage of a decentralized method is each object can choose separation based on runtime conditions.

Data hierarchy:

A GRASS location contains sites and other info. A site contains maps, a region, and other info. A map can be either raster or vector and may contain other data. Thus we have a hierarchy.

The names I use here are far too simple to use as the actual class names. For example 'map' would probably be 'GRASSMap'. I'll only list a few until you get the idea.

A 'database' is a highly abstract object which is no more than a working directory path or URL.

A 'location' is an abstract object which contains sites. The sites may have different regions thus the category is largely arbitrary. GRASS defines one of these sites as immutable. It doesn't serve as a backup, it's more like a master copy. It may be useful for calculating sites with different projections since projections always lowers the coordinate accuracy so It's preferable to have one if you want to do such conversions. Thus a location requires at least one immutable site. A location object can create a location bundle (spearfish.grass) as an arbitrary URL.

A 'site' is a collection of maps with the same region. A site can store itself as a bundle at an arbitrary URL, but is only told to store itself by its host (location) object. If its immutable its probably appropriate to set the directory's immutable bit.

A 'region' is an area bounded by a quadrangle in a specific projection which is used for all maps in the site. Personally I don't think this is a good category. I would rather have every map have its own bounds so I can composite various maps of the same projection on a single canvas. Why must various maps of one site share one bounds? Also why have the same cell resolution for all raster maps in one site? I would remove such restrictions, but I can still implement what I want even if these curious restrictions are left in place.

To remove them I would have one projection per site, but the other region information would be stored in each map. If you want an arbitrary abstraction of maps sharing the same region and cell resolution you can do so, but I don't know why.

A 'map' is a class which defines common methods and variables for both map types. Personally I would put the non-projection region info here.

A 'raster map' is a subclass of map which is an array of cells. Personally I would put the cell resolution info here.

A 'vector map' is a subclass of map which has a mutable array of open-ended vector sets and a mutable array of closed-loop vector sets. For example steams and lakes.

A 'vector set" is a mutable array of vectors and a 'is open' flag. Closed (non-open) vector sets probably have to be clockwise.

A 'vector' is a simple struct of two coordinates and a coordinate is a struct of two floats.

Anyway you get the idea.

The Process:

Which API to use:

Currently the GRASS library is a bunch of inline C functions which don't keep track of one another (the function hierarchy is a facade). MVC programming methodology implies some form of OO structure. This means a new programmatic structure has to be adopted. There are several to choose from. I am certain the best choice is either CoreFoundation or OpenStep Foundation (which I will just call Foundation). I'll list the advantages and disadvantages of both libraries:

Foundation is the OpenStep Foundation API. This API has two active implementations, Apple's Cocoa and FSF's GNUStep. You can also use OpenStep for Solaris and OpenStep for HPUX (if you can find it, OpenStep competed with Java so Sun killed it).

The advantage of Foundation is it's a complete solution. It defines standard types and categories of types (arrays, dictionaries, sets, etc.). It supports:

* XML property lists
* bundles
* plug-ins
* notifications (like system-wide events)
* organized memeory management
* undo manager
* automatic localization via loading property lists and strings in standard format.
* threading
* sockets (for publishing objects over a network or locally)

and lots of other goodies. Foundation is also written in an excellent language called Objective-C which is very easy to learn if you know C. Objective-C is so flexible you can add methods to existing classes. Foundation includes everything needed to complete the model.

The major advantage in Foundation is its relatively easy to write very sophisticated user interfaces and display graphics using Application Kit (which is also part of Apple Cocoa, FSF GNUStep, OpenStep Solaris, and OPENSTEP). AppKit uses Foundation classes as the basis for its standard views and controllers like NSTableView. Another major feature of AppKit is resolution independent graphics. When you draw a vector map you do so in floating corrdinates, NOT pixel coordinates. You can take this view and display it (which will implicitly rasterize it to screen) or you can print it (which creates a small postscript or PDF file) or you can export it as a resolution independent PDF or a rasterized TIFF or whatever. You can also take that view and scroll, zoom, etc. with ease. Finally any changes to any model would be seen instantly.

The disadvantage is it's written in a language which isn't straight C, which everybody here uses. I don't consider this a major problem because it took me ONE DAY to learn Objective-C, but I can't speak for the rest of you.

CoreFoundation is basically a subset of Foundation with C/C++ interfaces. Its Apple open source and part of Darwin but has been ported to several platforms. Its advantage is it's written in straight C. Its disadvantage is, in my opinion, more difficult than simply learning Objective-C. One advantage is it's plug-in facility is modeled after Microsoft COM if any of you are familiar with COM, but then again I consider that a disadvantage for those of us who don't give a crap about COM.

It also has the disadvantage of not currently being usable by GNUStep's AppKit, although it's usable by OS X's Cocoa. I don't know what a $2000 investment in hardware is like for you folks but I'm probably the only one using OS X.

What this means is, for now, if I make a really cool application using AppKit and the model is in CoreFoundation, it won't work in GNUStep. However adding this ability to GNUStep shouldn't be that hard.

You can compare CoreFoundation to Foundation for yourself. I'm largely agnostic which more GRASStep developers prefer, I'll follow the crowd (if one ever forms)

CoreFoundation (read Overview once through):
http://developer.apple.com/techpubs/macosx/CoreFoundation/

Foundation (Intro is OK)
http://developer.apple.com/techpubs/macosx/Cocoa/Reference/Foundation/ObjC_classic/FoundationTOC.html

Objective-C tutorial I used to learn it in ONE DAY:
http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/index.html

Coding:
Once the model hierarchy is written (using CoreFoundation or Foundation) the rest is filling in the blanks. A class is just a bunch of methods (functions) which use private variables. This means taking code from src/libes directory and filling out to our framework. Most of the changes are going to be using Foundation types and using object pointers instead of array pointers and struct pointers. I'm simplifying but the main thing to consider is the process will be methodical and straightforward. There will be a right way to do everything.

What I suggest we do is before adding code to the framework, ask the original authors of the code to release their code again under the LGPL (or other license). The authors of the code have the absolute right to do this and it's very important to do. I can't imagine the authors would be against this, their code is just as protected, but the LGPL makes it possible for sophisticated plug-ins for GRASS to be written by people who want to release it without a GPL license. Nobody is forced to use such software, and nobody can steal our work.I can't emphasize enough how important this step is.

I hope everybody here is interested in improving the GRASS API. With this reorganization I can make a GRASS application which resembles an expensive illustration application. We can also provide interfaces for 3rd parties to extend GRASS to make it a sophisticated statistics system, or whatever. Once this is done GRASS would be set for the next decade and beyond. I hope you all give it due consideration because if GRASS doesn't change it'll never get any better.

Thank you for your consideration.

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

I should have mentioned Foundation can also be accessed via Java. Apple provides a Java bridge with Foundation (and AppKit) and FSF does the same with GNUStep (the GNUStep Java bridge is called JIGS).

One more reason Foundation is potentially better than CoreFoundation

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

Strobe and GRASS developers,

I've read the proposal. Three or four times now.

First and most generally, the current effort in GRASS 5.0 appears focused
on getting the existing capabilities working correctly on a fairly
complete list of platforms. A lot of the source code is 10 years old or
older and it's quite an effort. This is a user-oriented effort aimed at
completing previously stated goals and getting the capabilities working
completely and for more users.

The proposal to reorganize GRASS under a completely different "paradigm"
might be suitable for a later major revision of GRASS, but does not (to me
at least) appear appropriate to Grass 5. Whether or not that
reorganization is a good goal for later revisions lies I think in Bruce
Byars' hands.

Less generally, I'm not very keen on generalized models or on OOP.

OOP is a reasonable way to organize a large programming effort in a
corporate or academic environment with a top-down organization. Currently
GRASS development seems to be based more on consensus-building, which I
think is typical and possibly necessary in volunteer efforts. So I'm not
so sure that OOP is good for our setting.

Maximum operational efficiency comes from code that is organized to
complete a specific task. Where I've seen code developed on generalized
schemes the results have been much less efficient.

Certainly if the developers were to consider such a sweeping change in
the structure of GRASS they would need to review some more specific
suggestions about how the current code would be merged into the new
structure.

Finally and most specifically, your discussion omitted the GRASS "sites"
map type. You used the term "site" for other purposes in describing the
program structure, so your proposal at the very least needs to be reworded
to account for the third map type.

Roger Miller
Lee Wilson and Associates

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

Less generally, I'm not very keen on generalized models or on OOP.

OOP is a reasonable way to organize a large programming effort in a
corporate or academic environment with a top-down organization. Currently
GRASS development seems to be based more on consensus-building, which I
think is typical and possibly necessary in volunteer efforts. So I'm not
so sure that OOP is good for our setting.

Maximum operational efficiency comes from code that is organized to
complete a specific task. Where I've seen code developed on generalized
schemes the results have been much less efficient.

I was also a huge skeptic about OO programming until I started using Objective-C (which wasn't long ago!). Prior to that I had been using C++ with others and on personal projects for several years. I still use C++ occasionally, but it really painful. C++ is necessarily very very strict because it uses static link tables instead of runtime linking.

Objective-C changes everything especially when combined with Foundation. It is used by many developers who work alone. It actually does make development of SMALL projects very easy indeed.

Objective-C objects are also more interchangeable and it's easier to make changes in design if so wished. It truely is awesome and it's pretty sad that C++ took hold. It's also a million times easier to learn and use.

I empathize completely with your skepticism about OO programming. Objective-C and Foundation however fit this project like a GLOVE.

We also have two Java<->Foundation bridges which already work. One is open source and multi-platform and the other is Apple's which I've used a little. I'm not a huge proponent of Java (as a language it's not that good) but there are tons of Java developers.

Apple's documentation is top notch but to know how easy it is to use, you have to use it. It's all theory and skepticism until you actually apply MVC methodology using Cocoa or GNUStep.

Certainly if the developers were to consider such a sweeping change in
the structure of GRASS they would need to review some more specific
suggestions about how the current code would be merged into the new
structure.

I understand completely. If I were to write anything more specific I would have tripled the size of my email and nobody would have read it. Plus I would have had to bone-up on the internals of GRASS.

If people show interest the first step would be writing the basic model and implementing persistence. After then we have a clear path of execution in terms of adding methods and so on. Organization takes care of itself for the most part once the basic model is outlined.

Finally and most specifically, your discussion omitted the GRASS "sites"
map type. You used the term "site" for other purposes in describing the
program structure, so your proposal at the very least needs to be reworded
to account for the third map type.

I admit I don't know all aspects of GRASS internals like the back of my hand, but the purpose of the hypothetical class arrangement was a demonstration of how the model hierarchy would be created.

My main reference thus far has been the GRASS 5 Developer's Manual PDF.

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

Hi Roger and everyone,

First, I totally trust Markus' hands on 5.x. He's the team leader and will
always be. The 5.x buck stops with him. I'm reading over the proposal as
well. I've been putting pen to paper on many different aspects and will share
a sort of "dream list" soon. Roger hits the nail on the head with the old code
and the idea of a major revision.

I propose this: We will go ahead and start a GRASS 6 forum. We'll get that setup

in short order and start the process on a server here. I agree it's a large
undertaking
and should be the next MAJOR revision. Plus, there are many good things
that Markus and crew have planned and in the works for 5.1. I say we let
those things run full circle. I know it's a big temptation to run headlong into
a new major revision, but we need to be realistic and look farther down the
road than the next one or two years. Stability is the key. We need time for the

5.x to saturate the user community out there. That will build a good soild user
base from which to build. Markus is on track to stabilize 5.0 and move to
advancing
5.1 and other 5.x versions should they be applicable. That will take some time.
But during that time, we are doing the planning and developing for the next MAJOR

revision... GRASS 6. For the meantime, there's still plenty of work to be done
with
5.x. Changing directions in midstream on 5.x would be counterproductive.

As always, I am available for email, snail mail, or direct calls so fire away.

Take care all,

Bruce

--
Bruce Byars
Hydrologist and Senior Research Scientist
Center for Applied Geographic and Spatial Research
Baylor University
P.O. Box 97351
Waco, Texas 76798-7351
254-710-6814

----
"Roger S. Miller" wrote:

Strobe and GRASS developers,

I've read the proposal. Three or four times now.

First and most generally, the current effort in GRASS 5.0 appears focused
on getting the existing capabilities working correctly on a fairly
complete list of platforms. A lot of the source code is 10 years old or
older and it's quite an effort. This is a user-oriented effort aimed at
completing previously stated goals and getting the capabilities working
completely and for more users.

The proposal to reorganize GRASS under a completely different "paradigm"
might be suitable for a later major revision of GRASS, but does not (to me
at least) appear appropriate to Grass 5. Whether or not that
reorganization is a good goal for later revisions lies I think in Bruce
Byars' hands.

Less generally, I'm not very keen on generalized models or on OOP.

OOP is a reasonable way to organize a large programming effort in a
corporate or academic environment with a top-down organization. Currently
GRASS development seems to be based more on consensus-building, which I
think is typical and possibly necessary in volunteer efforts. So I'm not
so sure that OOP is good for our setting.

Maximum operational efficiency comes from code that is organized to
complete a specific task. Where I've seen code developed on generalized
schemes the results have been much less efficient.

Certainly if the developers were to consider such a sweeping change in
the structure of GRASS they would need to review some more specific
suggestions about how the current code would be merged into the new
structure.

Finally and most specifically, your discussion omitted the GRASS "sites"
map type. You used the term "site" for other purposes in describing the
program structure, so your proposal at the very least needs to be reworded
to account for the third map type.

Roger Miller
Lee Wilson and Associates

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

Hi Roger and everyone,

First, I totally trust Markus' hands on 5.x. He's the team leader and will
always be. The 5.x buck stops with him. I'm reading over the proposal as
well. I've been putting pen to paper on many different aspects and will share
a sort of "dream list" soon. Roger hits the nail on the head with the old code
and the idea of a major revision.

I propose this: We will go ahead and start a GRASS 6 forum. We'll get that setup

If we want to continue calling it GRASS that's a good idea.

If we implement this 6 will be radically different than 1-5. It would be a fresh start (which from what I've seen is a little overdue).

in short order and start the process on a server here. I agree it's a large
undertaking
and should be the next MAJOR revision. Plus, there are many good things
that Markus and crew have planned and in the works for 5.1. I say we let
those things run full circle. I know it's a big temptation to run headlong into
a new major revision, but we need to be realistic and look farther down the
road than the next one or two years. Stability is the key. We need time for the

5.x to saturate the user community out there. That will build a good soild user
base from which to build. Markus is on track to stabilize 5.0 and move to
advancing
5.1 and other 5.x versions should they be applicable. That will take some time.
But during that time, we are doing the planning and developing for the next MAJOR

revision... GRASS 6. For the meantime, there's still plenty of work to be done
with
5.x. Changing directions in midstream on 5.x would be counterproductive.

In no way did I want to imply this proposal is directly related to GRASS 5 efforts, but what other forum could I bring it up?

Obviously this doesn't effect current GRASS 5 efforts. Perhaps I should have made that clear from the beginning.

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

If we implement this 6 will be radically different than 1-5. It would be a fresh start (which from what I've seen is a little overdue).

Well, this is all voluntary on the part of the dev team, so no one keeps a commercial
development schedule. The old CERL schedule was a new version every two years
or so. That's what has been retained and will be retained. Moving too fast risks
making mistakes. Especially when not everyone is centrally located.

In no way did I want to imply this proposal is directly related to GRASS 5 efforts, but what other forum could I bring it up?

Obviously this doesn't effect current GRASS 5 efforts. Perhaps I should have made that clear from the beginning.

All good points to consider.

Bruce

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

Hello Everybody,

I also agree with Roger and Bruce.
Markus and the development team have plans for 5.0 and 5.1 and 5.x
and are going for stability.

On Fri, Mar 23, 2001 at 01:47:56PM -0600, B. Byars wrote:

Roger hits the nail on the head with the old code and the idea of
a major revision.

I propose this: We will go ahead and start a GRASS 6 forum. We'll
get that setup in short order and start the process on a server
here. I agree it's a large undertaking and should be the next
MAJOR revision.

Thinking about this, I really would call it a redesign and
redevelopment so why call it GRASS? We call do not know if the
redesign works out and how long people will still use GRASS 5.x.
So why cutting of the possibility of the GRASS 5.x development line
to be continued in numbers.

A new free GIS project based on GRASS is certainly very good,
but I think that it should have a new name.

  Bernhard

--
Professional Service around Free Software (intevation.net)
The FreeGIS Project (freegis.org)
Association for a Free Informational Infrastructure (ffii.org)
FSF Europe (fsfeurope.org)

On Fri, Mar 23, 2001 at 11:20:10AM -0800, strobe anarkhos wrote:

>Less generally, I'm not very keen on generalized models or on OOP.

I was also a huge skeptic about OO programming until I started
using Objective-C (which wasn't long ago!). Prior to that I had
been using C++ with others and on personal projects for several
years.

I know OO programming a long time (about 10 years) and I have used
Objective-C on NeXTStep systems around 1993. I have to agree that
Objective-C is a very good OO language and the concept of OpenStep
(a successor of NeXTStep) is very good. Still these techniques do
not automatically create good software.

Certainly the Foundation is a good candidate to consider for a
possible new Free GIS based on GRASS, but there are others which
are contenders. What about wxPython? It is OO, platform independant
and python is even nicer than Objective-C. :slight_smile:

Let me also through in the round that there are several free
software project out there trying to develop the next generation GIS.
Chjeck freegis.org (ossim, openmap, fmaps, ...)
If we are not satisfied with how GRASS is going, we should consider
to evalutate the other projects and try to avoid their mistakes
first before starting our own rewrite.

Let me also add that I am not sure that we have enough ressources to
actually do all the changes Strobe has proposed.

  Bernhard
--
Professional Service around Free Software (intevation.net)
The FreeGIS Project (freegis.org)
Association for a Free Informational Infrastructure (ffii.org)
FSF Europe (fsfeurope.org)

On Mon, 26 Mar 2001, Bernhard Reiter wrote:

Thinking about this, I really would call it a redesign and redevelopment
so why call it GRASS? We call do not know if the redesign works out and
how long people will still use GRASS 5.x. So why cutting of the
possibility of the GRASS 5.x development line to be continued in numbers.

A new free GIS project based on GRASS is certainly very good, but I think
that it should have a new name.

  Why? When you buy a new model car, does it have a different brand name?
Other software evolve, but use the data produced by older versions and they
still retain the same name.

  You're welcome to make your own GIS called whatever you'd like, but I
don't find any reason to change the name from GRASS because it's
restructured.

  If you're running linux, look at the changes in the kernel and ip
functions between even the 2.0 and 2.2 kernels. No longer do we have
ipfwadmin, we have ipchains. Same linux kernel, new structures.

Rich

Dr. Richard B. Shepard, President

                       Applied Ecosystem Services, Inc. (TM)
            2404 SW 22nd Street | Troutdale, OR 97060-1247 | U.S.A.
+ 1 503-667-4517 (voice) | + 1 503-667-8863 (fax) | rshepard@appl-ecosys.com

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

Rich Shepard wrote:

On Mon, 26 Mar 2001, Bernhard Reiter wrote:

Thinking about this, I really would call it a redesign and redevelopment
so why call it GRASS? We call do not know if the redesign works out and
how long people will still use GRASS 5.x. So why cutting of the
possibility of the GRASS 5.x development line to be continued in numbers.

A new free GIS project based on GRASS is certainly very good, but I think
that it should have a new name.

  Why? When you buy a new model car, does it have a different brand name?
Other software evolve, but use the data produced by older versions and they
still retain the same name.

Usually the car manufacturers change the name more than the design. Ford/Mercury models, for example, have been almost identical with different brand names. Conversely, the same name gets used over and over for radically different autos. This argument goes either way.

Software brand names change very often after significant design changes. Borland Pascal -> Delphi, Microsoft C++ -> Microsoft Visual C++, etc.

Often software brand name change for no apparent reason. Windows 98 -> Windows Me, Sun Unix -> Solaris, etc.

  You're welcome to make your own GIS called whatever you'd like, but I
don't find any reason to change the name from GRASS because it's
restructured.

It really depends on the significance and the nature of the restructuring. If some fundamental changes are made in the core of grass and grass evolves along a new but singular path, then I would suggest that it would be reasonable to keep the grass name. If this is more of an fork in the road, where grass moves in two directions - one following the existing grass structure and another (significant) redesigned structure - then the redesigned structure would be better off having a new name. If this is more of a framework built around existing grass structure, with potentially some changes to grass internals to facilitate the framework (as some of strobe's writings suggest - I'm not sure), then this would be better off with a new name.

  If you're running linux, look at the changes in the kernel and ip
functions between even the 2.0 and 2.2 kernels. No longer do we have
ipfwadmin, we have ipchains. Same linux kernel, new structures.

These were more evolutionary changes than radical departures, plus the linux community moved along with these changes as a whole. This is like the ford mustang, which changed a great deal over the years. I think the suggestion for renaming the restructured grass development is more in line with the ford mustang vs ford probe. Same idea: sports car for the masses; they just appeal to different buyers. Ford kept producing the mustang while designing the probe, although they would have quit if all of the mustang drivers started buying probes instead.

Rich

Dr. Richard B. Shepard, President

Before we make any decisions on this, I would like to see what the new 'restructuring' changes are going to be. So far there has not been a lot of details provided. I am interested to see what comes of these ideas (some of them I like), but hope that we see a stable grass 5.0 and grass 5.1 as a first priority. There are a lot of great ideas already for grass 5.1. These are desired by more of the grass community than a whole new direction. And I think they would appeal to a large potential user base.

I would like grass to be different in a lot of ways, but most of all I want the functionality that grass provides now and the functionality proposed for the future. Also, I don't want to lose any of the advantages that grass provides. The ability to use the power of Unix scripting or a GUI interface as required, the ability to use multiple programming interfaces, the ability to interface grass with the countless other GPL software packages, etc. These are important to me, but might not be to everyone.

For now, I plan to follow Markus's game plan for grass 5.x. I want to see these ideas implemented, and will contribute in whatever small way I can. Diverging now would be huge mistake. There are a small number of developers, and a lot of these, like myself, can only contribute on a limited basis, due to other commitments (paying jobs, family, etc.). Hopefully, we can focus on the priorities.

Malcolm

---------------------------------------- If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

At 3:01 PM +0200 3/26/01, Bernhard Reiter wrote:

On Fri, Mar 23, 2001 at 11:20:10AM -0800, strobe anarkhos wrote:

>Less generally, I'm not very keen on generalized models or on OOP.

I was also a huge skeptic about OO programming until I started
using Objective-C (which wasn't long ago!). Prior to that I had
been using C++ with others and on personal projects for several
years.

I know OO programming a long time (about 10 years) and I have used
Objective-C on NeXTStep systems around 1993. I have to agree that
Objective-C is a very good OO language and the concept of OpenStep
(a successor of NeXTStep) is very good. Still these techniques do
not automatically create good software.

Certainly the Foundation is a good candidate to consider for a
possible new Free GIS based on GRASS, but there are others which
are contenders. What about wxPython? It is OO, platform independant
and python is even nicer than Objective-C. :slight_smile:

Several reasons:

a) GRASS developers know C already. If we create a GRASS framework in Foundation, prior GRASS contributors will only need to learn a minuscule number if syntax additions.

b) FSF has a working Java bridge for GNUStep Foundation. Ask a Java developer what Python is he'll tell you it's a constrictor with heat-seeking pits. We may hate Java but we can't ignore their numbers, to do so would be like the Romans ignoring the Barbarians.

Let me also through in the round that there are several free
software project out there trying to develop the next generation GIS.
Chjeck freegis.org (ossim, openmap, fmaps, ...)
If we are not satisfied with how GRASS is going, we should consider
to evalutate the other projects and try to avoid their mistakes
first before starting our own rewrite.

Well I think a GIS framework based on Foundation would be very useful to everybody involved, and anybody in any other GIS project can contribute to it. I didn't have to propose it to GRASS developers, but I thought it was a good a place as any to start.

Let me also add that I am not sure that we have enough ressources to
actually do all the changes Strobe has proposed.

Use the right license and who knows how many developers can help, I know I would feel much more inclined.

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

At 8:11 AM -0800 3/26/01, Rich Shepard wrote:

On Mon, 26 Mar 2001, Bernhard Reiter wrote:

Thinking about this, I really would call it a redesign and redevelopment
so why call it GRASS? We call do not know if the redesign works out and
how long people will still use GRASS 5.x. So why cutting of the
possibility of the GRASS 5.x development line to be continued in numbers.

A new free GIS project based on GRASS is certainly very good, but I think
that it should have a new name.

Why? When you buy a new model car, does it have a different brand name?
Other software evolve, but use the data produced by older versions and they
still retain the same name.

Because it's no longer a car?

I also suggested it may be called something other than GRASS, it would be a different(and better) API and model. In fact the programming methodology would be different so that one hand knows what the other is doing.

Personally I don't really care what it's called.

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

I would like grass to be different in a lot of ways, but most of all I want the functionality that grass provides now and the functionality proposed for the future. Also, I don't want to lose any of the advantages that grass provides. The ability to use the power of Unix scripting or a GUI interface as required, the ability to use multiple programming interfaces, the ability to interface grass with the countless other GPL software packages, etc. These are important to me, but might not be to everyone.

GRASS's scripting and GUI are it's weakest features by far. The new model would make high level scripting a lot easier to implement and wouldn't have to rely on the command line. The GUI is so poor and the grassgui list so clueless I don't want to even talk about it.

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

strobe anarkhos wrote:

Several reasons:

a) GRASS developers know C already. If we create a GRASS framework in Foundation, prior GRASS contributors will only need to learn a minuscule number if syntax additions.

Most also know several other languages, but understand when each one is applicable.

I don't really see the advantage. Everything I've seen suggested by you can be done in many different languages. Most of it isn't hard with some of the tools available now. Maybe we could have a framework of the month!

But seriously, every new grass initiative has probably started with someone developing an idea, getting it into working shape, and providing it to the group for comment. A proof of concept or prototype to let people see what you are proposing would be a good idea. This would be easier to discuss if there was more than conceptual examples.

b) FSF has a working Java bridge for GNUStep Foundation. Ask a Java developer what Python is he'll tell you it's a constrictor with heat-seeking pits. We may hate Java but we can't ignore their numbers, to do so would be like the Romans ignoring the Barbarians.

We don't all hate Java. It has its place (which maybe is as Sun first envisioned: small appliances) and we use it accordingly for trivial applications, ie. applets - ( just kidding). Java obviously has strengths and weaknesses - but so do all of the languages I've learned over the 20+ years I've been programming. Personally, I didn't see anything great about Objective-C when I tried it. It was just another OO language. Maybe we should all step back and relearn smalltalk and prolog? As long as no one suggests COBOL or BASIC, I will probably consider the idea.

Check out the grass source a little further and you will find that Java is already part of the development.

Let me also through in the round that there are several free
software project out there trying to develop the next generation GIS.
Chjeck freegis.org (ossim, openmap, fmaps, ...)
If we are not satisfied with how GRASS is going, we should consider
to evalutate the other projects and try to avoid their mistakes
first before starting our own rewrite.

Well I think a GIS framework based on Foundation would be very useful to everybody involved, and anybody in any other GIS project can contribute to it. I didn't have to propose it to GRASS developers, but I thought it was a good a place as any to start.

It has sparked some interest but it has to be weighed against other alternatives already proposed. Python is probably a better choice for many people, since it is flexible, is becoming widely recognized and is available on most platforms. But then again so are C, C++, Java, Pascal, Fortran (oops), smalltalk, etc. and all of the various frameworks developed for programming in those languages.

Most of us are more concerned about the functionality than the development language. I'm referring to the core functionality and the breadth of applications supported. Grass can be used in a wide variety of disciplines because of the flexibility in the programs and the adaptability of the interfaces. Until you can prove significant advantage - to users rather than developers - you will have a hard time convincing anyone to consider a change in approach.

Speaking for myself, I don't think you've done enough planning to seriously suggest a major change. There are a lot of development languages that offer user interface and programmability advantages. Maybe Foundation does. I don't know. Having worked in mapping and GIS for 15+ years, these are only a couple of the things that I consider. What I want is a set of tools that can take just about any kind of geographic data and do spatial analysis as appropriate for the task at hand and the data available. If you've spent the time to learn what grass can do, and looked at the development plans you will see that this is either available now or in the goals for version 5.1. Also in the development plans are user interface enhancements, layer controls, etc. I expect that most of the improvements that you foresee from your reorganization are somewhere in the of 'to-dos' for the future. They've just prioritized differently than you would have done.

As a newcomer to the grass development group, I can't speak for every one, but I think that if you want to suggest enhancements, most of us are willing to consider them. Each will be prioritized and worked on accordingly. Everyone is of course free to choose their own development path, and contribute where they feel appropriate. Markus is leading the effort, but has been setting the goals with input from the developers. If your ideas are valid, you will get support. Until you provide real plans for improvement (please don't submit a 50 page manifesto to the list - if you have such a document give us the link!) no one can agree to any thing.

Let me also add that I am not sure that we have enough resources to
actually do all the changes Strobe has proposed.

Use the right license and who knows how many developers can help, I know I would feel much more inclined.

Licenses were in the other thread. But since you brought it up, I suspect LGPL would lose more developers than it would gain. Most GPL projects seem to be doing quite nicely. I think that the biggest attraction is the ability take take part in the direction the software will take. Most users are wanting the product of the software, not the software.

Malcolm

---------------------------------------- If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

Have you tried?
Have you worked in a production environment?

I think that most grass users do appreciate the advantage of scripting and command line languages. GUI is nice, but when working with large data sets I don't like to have to keep waiting for the last command to finish. I like scripting when the job warrants and having the ability to switch to a GUI when I need to.

From your response, I guess you have no real experience. I gather that you have no basis to judge either scripting or GUI. Otherwise you could tell us why you feel this way.

You lack credibility my friend.

Malcolm.

strobe anarkhos wrote:

I would like grass to be different in a lot of ways, but most of all I want the functionality that grass provides now and the functionality proposed for the future. Also, I don't want to lose any of the advantages that grass provides. The ability to use the power of Unix scripting or a GUI interface as required, the ability to use multiple programming interfaces, the ability to interface grass with the countless other GPL software packages, etc. These are important to me, but might not be to everyone.

GRASS's scripting and GUI are it's weakest features by far. The new model would make high level scripting a lot easier to implement and wouldn't have to rely on the command line. The GUI is so poor and the grassgui list so clueless I don't want to even talk about it.

---------------------------------------- If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

---------------------------------------- If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

I wish you would respond to emails at the end, this ruins the flow.

I have used command lines and I have used scripting. I do not consider the two intertwined because I typically use scripting languages which call functions, not commands. Scripts which call commands are more like macros.

I said GRASS's GUI and scripting are it's poorest features, and I stand by those statements. You speak as though I do not want scripting or the command line which is very curious. I didn't even mention the command line.

Whose email did you mean to reply to I wonder.

At 3:33 AM -0400 3/27/01, Malcolm Blue wrote:

Have you tried?
Have you worked in a production environment?

I think that most grass users do appreciate the advantage of scripting and command line languages. GUI is nice, but when working with large data sets I don't like to have to keep waiting for the last command to finish. I like scripting when the job warrants and having the ability to switch to a GUI when I need to.
From your response, I guess you have no real experience. I gather that you have no basis to judge either scripting or GUI. Otherwise you could tell us why you feel this way.
You lack credibility my friend.
Malcolm.

strobe anarkhos wrote:

I would like grass to be different in a lot of ways, but most of all I want the functionality that grass provides now and the functionality proposed for the future. Also, I don't want to lose any of the advantages that grass provides. The ability to use the power of Unix scripting or a GUI interface as required, the ability to use multiple programming interfaces, the ability to interface grass with the countless other GPL software packages, etc. These are important to me, but might not be to everyone.

GRASS's scripting and GUI are it's weakest features by far. The new model would make high level scripting a lot easier to implement and wouldn't have to rely on the command line. The GUI is so poor and the grassgui list so clueless I don't want to even talk about it.

---------------------------------------- If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

---------------------------------------- If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'