Larry, can you summarize the proposed change, for the benefit of those 
who haven't read all 45 posts?

(Maybe JUMP needs some sort of RFC mechansim...)

I don't understand your comment that "If it was per-feature 
overhead...".  I thought this *was* implemented per-feature?  If not, I 
really don't understand how it works.

Larry Becker wrote:
> We probably need to end this thread soon since it has gone on for 45 
> posts now.  I appreciate all of the comments and thoughts the other 
> developers have put into their posts.
>
> The most serious critique of the proposed BasicFeature mod seems to be 
> that it adds to the per layer memory requirements.  I would like to 
> point out that by definition, it will take less memory per layer than 
> a single Feature, so this is not really much of a downside.  If it was 
> per-feature overhead it would be a different matter entirely.
>
> So why should we implement BasicFeature isModified?
>
> 1) Because we can (the code is waiting to commit).
> 2) Because it is very simple codewise.
> 3) It provides useful functionality for database driver implementers.
> 4) It provide useful functionality for non-database layers (select all 
> modified features).
>
> How about a vote up or down?  I'd like to move on to other things.
>
> Larry
>
> On Mon, Apr 27, 2009 at 9:30 AM, Sunburned Surveyor 
> <sunburned.surve...@gmail.com <mailto:sunburned.surve...@gmail.com>> 
> wrote:
>
>     I will do some testing when I get time. If Chris beats me to it as
>     part of his SoC work, he can run some testing with methods he thinks
>     might work best.
>
>     SS
>
>     On Mon, Apr 27, 2009 at 6:12 AM, Larry Becker
>     <becker.la...@gmail.com <mailto:becker.la...@gmail.com>> wrote:
>     > What can I say that I haven't already said?  If you have the
>     code I sent
>     > you, I would suggest making modifications to it and see if it works.
>     >
>     > Larry
>     >
>     > On Fri, Apr 24, 2009 at 5:54 PM, Sunburned Surveyor
>     > <sunburned.surve...@gmail.com
>     <mailto:sunburned.surve...@gmail.com>> wrote:
>     >>
>     >> If we are concerned about memory we might try a single int as a
>     >> counter instead of using an int to count mods for each
>     attribute. So
>     >> you could do something like this:
>     >>
>     >>
>     >> // Private member variable to count attribute modifications.
>     >> private int attModCounter = 0;
>     >>
>     >> public void setAttribute()
>     >> {
>     >>   // Do stuff here.
>     >>   this.attModCounter++;
>     >> }
>     >>
>     >> public boolean isModified()
>     >> {
>     >>   // Only return true if the modification counter is greater
>     than the
>     >> number
>     >>   // of attributes, because each attribute is set once during
>     >> initialization/creation.
>     >>   FeatureSchema schema = this.getSchema();
>     >>   int numOfAtts = schema.getAttributeCount();
>     >>   if(this.attModCounter > numOfAtts)
>     >>   {
>     >>      return true;
>     >>   }
>     >>
>     >>   else
>     >>   {
>     >>      return false;
>     >>   }
>     >> }
>     >>
>     >> This will cut down on the number of ints we have to store as
>     counters.
>     >> However, if for some reason getAttribute() is called multiple
>     times to
>     >> set a single attribute value during initialization, then this
>     system
>     >> won't work. But I don't know why that would happen.
>     >>
>     >> Just a thought.
>     >>
>     >> SS
>     >>
>     >> On Fri, Apr 24, 2009 at 3:17 PM, Larry Becker
>     <becker.la...@gmail.com <mailto:becker.la...@gmail.com>>
>     >> wrote:
>     >> >> But there's something that could go wrong anyway, because an
>     attribute
>     >> >> has a NULL value by default and client code may decide to
>     not set
>     >> >> attributes at all if it has no value to set them to. If this
>     happens,
>     >> >> the Feature could remain not-modified for ever.
>     >> >
>     >> > This is possible, but not likely.  Code like
>     >> > (org.openjump.sigle.plugin.joinTable.JoinTable) join() calls
>     >> > setAttributes
>     >> > with an array initialized with the attribute count.  Then it
>     iterates
>     >> > through calls to setAttribute for each attribute, some of
>     which may be
>     >> > null.  It would be bad practice to make the assumption that null
>     >> > attributes
>     >> > can be skipped, and I found no cases of code like this in the
>     main
>     >> > project.
>     >> >
>     >> > As far as putting the modification detection at the container
>     level, I'm
>     >> > open to the idea.  I still think it should be part of the
>     core so that
>     >> > each
>     >> > database driver doesn't have to add its own listeners to the
>     already
>     >> > overburdened listener system.  Can you sketch an outline of
>     how it might
>     >> > work?
>     >> >
>     >> > Larry
>     >> >
>     >> > On Fri, Apr 24, 2009 at 5:04 AM, Paolo Rizzi <g...@oicom.com
>     <mailto:g...@oicom.com>> wrote:
>     >> >>
>     >> >> Maybe it would be possibile to add explicit init methods like:
>     >> >>        beginInit()
>     >> >>        endInit()
>     >> >>
>     >> >> or even a single "atomic" method:
>     >> >>        init(Object[])
>     >> >>
>     >> >> So that mod-aware calling code could call them to let the
>     Feature
>     >> >> "know"
>     >> >> it is being initialized.
>     >> >> Still the Feature could manage a disposable int[] array so
>     that the
>     >> >> first time a setAttribute() or setAttributes() method is
>     called, if the
>     >> >> beginInit() method has been called before it means that it's
>     >> >> initialization time. If it has not been called but the int[]
>     array has
>     >> >> not been created, it's initialization time anyway, so it can
>     create the
>     >> >> int[] array and dispose of it as soon as all attributes have
>     been set
>     >> >> at
>     >> >> least once.
>     >> >> This way both mod-aware and non-mod-aware code would work.
>     >> >>
>     >> >> But there's something that could go wrong anyway, because an
>     attribute
>     >> >> has a NULL value by default and client code may decide to
>     not set
>     >> >> attributes at all if it has no value to set them to. If this
>     happens,
>     >> >> the Feature could remain not-modified for ever.
>     >> >>
>     >> >> I feel that the mod mechanism should require awareness by
>     the client
>     >> >> code in any case, since you have to write dirty Features out
>     sooner or
>     >> >> later, so it may not be the case to put too much burden on
>     the Feature
>     >> >> shoulders...
>     >> >>
>     >> >> Also, apart from modified Features, there're inserted and
>     deleted one,
>     >> >> that should be managed. So the Feature itself may not even
>     be aware at
>     >> >> all of it's own dirtyness. I see this information to pertain
>     to Feature
>     >> >> containers more than to Features themselves...
>     >> >>
>     >> >> Bye
>     >> >> Paolo
>     >> >>
>     >> >>
>     >> >> > I agree that a mechanism to reset the modified status is
>     needed,
>     >> >> > especially after the changes to the layer have been
>     flushed to the
>     >> >> > database.  I'll add this to BasicFeature.
>     >> >> >
>     >> >> > Your comment about carrying around state data after it is
>     needed is
>     >> >> > reasonable.  The code could check for modified on-the-fly
>     while it is
>     >> >> > incrementing the attribute mod count and if it is greater
>     than one,
>     >> >> > set
>     >> >> > a boolean instead and dispose of the array of ints.  You
>     would lose
>     >> >> > the
>     >> >> > ability to determine individual attribute mods (not sure
>     if it is
>     >> >> > needed), however you would only save memory in modified
>     records which
>     >> >> > wouldn't usually be very much.
>     >> >> >
>     >> >> > I was hoping someone would come up with a clever hack that
>     wouldn't
>     >> >> > require the int array.  All of the optimizations that I have
>     >> >> > considered
>     >> >> > break in one case or another.
>     >> >> >
>     >> >> > BTW, if you really want to save memory on attribute
>     storage, I have a
>     >> >> > number of questionable schemes that load attributes on an
>     as-needed
>     >> >> > basis.  :-)  SkyJUMP even has an optimization were layers
>     that aren't
>     >> >> > visible are not loaded into memory until you make them
>     visible,
>     >> >> > although
>     >> >> > it doesn't go as far as removing them when you make them
>     invisible.
>     >> >> >  Of
>     >> >> > course the most famous attribute memory-saving scheme is
>     Michael's
>     >> >> > permgen attribute string scheme for dbf files.  That one
>     saves a ton
>     >> >> > of
>     >> >> > memory on typically redundant data, until you run out of
>     permgen
>     >> >> > memory.
>     >> >> >
>     >> >> > Larry
>     >> >> >
>     >> >> > On Thu, Apr 23, 2009 at 4:06 PM, Martin Davis
>     >> >> > <mbda...@refractions.net <mailto:mbda...@refractions.net>
>     >> >> > <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>> wrote:
>     >> >> >
>     >> >> >     re Mutating Geometry in-place - JTS discourages this,
>     but does
>     >> >> > not
>     >> >> >     prevent it.  Sometimes people do this when they are
>     transforming
>     >> >> >     coordinates (eg. translation or affine transform)..  
>      It's quite
>     >> >> >     possible that all the JUMP code is clean, however.  In
>     any case,
>     >> >> > this
>     >> >> >     will only be an issue if that particular function is used.
>     >> >> >
>     >> >> >     re tracking modifications - how about providing a
>     method that
>     >> >> > lets
>     >> >> > you
>     >> >> >     clear the modified flag?  Then the feature can be
>     constructed as
>     >> >> >     necessary and then marked as clean.
>     >> >> >
>     >> >> >     It seems heavyweight to carry around a set of data
>     which is only
>     >> >> > really
>     >> >> >     of use during the construction phase of a Feature.  To
>     avoid
>     >> >> > this,
>     >> >> > I'd
>     >> >> >     even suggest constructing a Feature as needed, then
>     creating a
>     >> >> > new
>     >> >> >     Feature from it via a constructor which sets the
>     modified flag
>     >> >> >     appropriately.  Anything to avoid requiring more storage.
>     >> >> >
>     >> >> >     How does GeoTools handle this?
>     >> >> >
>     >> >> >     Larry Becker wrote:
>     >> >> >      > The tricky thing about modifications is not to find
>     a record
>     >> >> > is
>     >> >> >      > modified just because you set the initial value.
>      It is only
>     >> >> > modified
>     >> >> >      > if you set it more than once, otherwise all records
>     would be
>     >> >> > set
>     >> >> > as
>     >> >> >      > modified as soon as they are loaded.
>     >> >> >      >
>     >> >> >      > The next trick is to consider that you call
>     setAttribute
>     >> >> > multiple
>     >> >> >      > times with different attribute indexes, so it is
>     necessary to
>     >> >> > track
>     >> >> >      > the changes to each one separately.
>     >> >> >      >
>     >> >> >      > Mutating Geometries in place is a concern.  I have
>     never seen
>     >> >> > code
>     >> >> >      > that does this, and certainly none of the edit
>     tools or any
>     >> >> > plugins
>     >> >> >      > that use transactions do this, but it may be
>     possible.  Could
>     >> >> > you
>     >> >> >     just
>     >> >> >      > modify the Coordinate.x and y values?  I'll try to
>     construct a
>     >> >> >      > Beanshell test for this, but I doubt that this is a
>     serious
>     >> >> > concern.
>     >> >> >      > All of the tools and plugins that I have tried so
>     far play by
>     >> >> > the
>     >> >> >     rules.
>     >> >> >      >
>     >> >> >      > Larry
>     >> >> >      >
>     >> >> >      > On Thu, Apr 23, 2009 at 2:12 PM, Martin Davis
>     >> >> >     <mbda...@refractions.net
>     <mailto:mbda...@refractions.net> <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>
>     >> >> >      > <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>
>     >> >> >     <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>>> wrote:
>     >> >> >      >
>     >> >> >      >     Larry, why do you use an int rather than a
>     boolean to flag
>     >> >> >     changed
>     >> >> >      >     attributes?
>     >> >> >      >
>     >> >> >      >     BTW, In order to track changes to Geometry
>     attributes
>     >> >> >     correctly, the
>     >> >> >      >     JUMP codebase needs to be scrutinized to make
>     sure it
>     >> >> > isn't
>     >> >> >     mutating
>     >> >> >      >     Geometries "in place".
>     >> >> >      >
>     >> >> >      >
>     >> >> >      >
>     >> >> >      >     Larry Becker wrote:
>     >> >> >      >     > Hi,
>     >> >> >      >     >
>     >> >> >      >     >   As I mentioned in the other thread, before
>     the problem
>     >> >> > of
>     >> >> >     partial
>     >> >> >      >     > database updates can be solved, we must first
>     be able to
>     >> >> >      >     determine if
>     >> >> >      >     > a Feature has been modified.  This is not
>     currently
>     >> >> > possible in
>     >> >> >      >     all of
>     >> >> >      >     > the JUMP variants that I am familiar with,
>     although
>     >> >> > Kosmo
>     >> >> >     may have
>     >> >> >      >     > implemented it.
>     >> >> >      >     >
>     >> >> >      >     > The simplest way of implementing it that I
>     can see is to
>     >> >> > modify
>     >> >> >      >     > BasicFeature to include:
>     >> >> >      >     >
>     >> >> >      >     > private int[] attributeModCount;  //this is a
>     parallel
>     >> >> > array to
>     >> >> >      >     > Object[] attributes
>     >> >> >      >     >
>     >> >> >      >     > Then it would be necessary to allocate the
>     >> >> >     attributeModCount array
>     >> >> >      >     > when setAttributes(Object[] attributes) is
>     called.
>     >> >> >      >     >
>     >> >> >      >     > In addition each time setAttribute(int
>     attributeIndex,
>     >> >> > Object
>     >> >> >      >     > newAttribute) is called, add the line of code:
>     >> >> >      >     >
>     >> >> >      >     > attributeModCount[attributeIndex]++
>     >> >> >      >     >
>     >> >> >      >     > With these modifications we could then define:
>     >> >> >      >     >
>     >> >> >      >     > public boolean isFeatureModified() {
>     >> >> >      >     >     for (int i=0; i<attributeModCount.length;
>     i++) {
>     >> >> >      >     >       if (attributeModCount[i] > 1)
>      //modified is
>     >> >> > defined
>     >> >> > as
>     >> >> >      >     setting
>     >> >> >      >     > an attribute more than once
>     >> >> >      >     >          return true;
>     >> >> >      >     >     }
>     >> >> >      >     > return false;
>     >> >> >      >     > }
>     >> >> >      >     >
>     >> >> >      >     > Would this work and does this seem like
>     something we
>     >> >> > should
>     >> >> >      >     consider?
>     >> >> >      >     >
>     >> >> >      >     > regards,
>     >> >> >      >     > Larry
>     >> >> >      >     > --
>     >> >> >      >     > http://amusingprogrammer.blogspot.com/
>     >> >> >      >     >
>     >> >> >      >
>     >> >> >
>     >> >> >
>     >> >> >
>     ------------------------------------------------------------------------
>     >> >> >      >     >
>     >> >> >      >     >
>     >> >> >      >
>     >> >> >
>     >> >> >
>     >> >> >
>     
> ------------------------------------------------------------------------------
>     >> >> >      >     >
>     >> >> >      >     >
>     >> >> >      >
>     >> >> >
>     >> >> >
>     >> >> >
>     ------------------------------------------------------------------------
>     >> >> >      >     >
>     >> >> >      >     > _______________________________________________
>     >> >> >      >     > Jump-pilot-devel mailing list
>     >> >> >      >     > Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> >> >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >> >> >      >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> >> >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>>
>     >> >> >      >     >
>     >> >> > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >> >> >      >     >
>     >> >> >      >
>     >> >> >      >     --
>     >> >> >      >     Martin Davis
>     >> >> >      >     Senior Technical Architect
>     >> >> >      >     Refractions Research, Inc.
>     >> >> >      >     (250) 383-3022
>     >> >> >      >
>     >> >> >      >
>     >> >> >      >
>     >> >> >
>     >> >> >
>     >> >> >
>     
> ------------------------------------------------------------------------------
>     >> >> >      >     Crystal Reports &#45; New Free Runtime and 30
>     Day Trial
>     >> >> >      >     Check out the new simplified licensign option
>     that enables
>     >> >> >     unlimited
>     >> >> >      >     royalty&#45;free distribution of the report
>     engine for
>     >> >> > externally
>     >> >> >      >     facing
>     >> >> >      >     server and web deployment.
>     >> >> >      >     http://p.sf.net/sfu/businessobjects
>     >> >> >      >     _______________________________________________
>     >> >> >      >     Jump-pilot-devel mailing list
>     >> >> >      >     Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> >> >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >> >> >      >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> >> >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>>
>     >> >> >      >
>     >> >> > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >> >> >      >
>     >> >> >      >
>     >> >> >      >
>     >> >> >      >
>     >> >> >      > --
>     >> >> >      > http://amusingprogrammer.blogspot.com/
>     >> >> >      >
>     >> >> >
>     >> >> >
>     >> >> >
>     ------------------------------------------------------------------------
>     >> >> >      >
>     >> >> >      >
>     >> >> >
>     >> >> >
>     >> >> >
>     
> ------------------------------------------------------------------------------
>     >> >> >      > Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     >> >> >      > Check out the new simplified licensign option that
>     enables
>     >> >> > unlimited
>     >> >> >      > royalty&#45;free distribution of the report engine for
>     >> >> > externally
>     >> >> >     facing
>     >> >> >      > server and web deployment.
>     >> >> >      > http://p.sf.net/sfu/businessobjects
>     >> >> >      >
>     >> >> >
>     >> >> >
>     >> >> >
>     ------------------------------------------------------------------------
>     >> >> >      >
>     >> >> >      > _______________________________________________
>     >> >> >      > Jump-pilot-devel mailing list
>     >> >> >      > Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> >> >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >> >> >      >
>     https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >> >> >      >
>     >> >> >
>     >> >> >     --
>     >> >> >     Martin Davis
>     >> >> >     Senior Technical Architect
>     >> >> >     Refractions Research, Inc.
>     >> >> >     (250) 383-3022
>     >> >> >
>     >> >> >
>     >> >> >
>     >> >> >
>     >> >> >
>     
> ------------------------------------------------------------------------------
>     >> >> >     Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     >> >> >     Check out the new simplified licensign option that enables
>     >> >> > unlimited
>     >> >> >     royalty&#45;free distribution of the report engine for
>     externally
>     >> >> > facing
>     >> >> >     server and web deployment.
>     >> >> >     http://p.sf.net/sfu/businessobjects
>     >> >> >     _______________________________________________
>     >> >> >     Jump-pilot-devel mailing list
>     >> >> >     Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> >> >     <mailto:Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>>
>     >> >> >    
>     https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >> >> >
>     >> >> >
>     >> >> >
>     >> >> >
>     >> >> > --
>     >> >> > http://amusingprogrammer.blogspot.com/
>     >> >> >
>     >> >> >
>     >> >> >
>     >> >> >
>     ------------------------------------------------------------------------
>     >> >> >
>     >> >> >
>     >> >> >
>     >> >> >
>     
> ------------------------------------------------------------------------------
>     >> >> > Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     >> >> > Check out the new simplified licensign option that enables
>     unlimited
>     >> >> > royalty&#45;free distribution of the report engine for
>     externally
>     >> >> > facing
>     >> >> > server and web deployment.
>     >> >> > http://p.sf.net/sfu/businessobjects
>     >> >> >
>     >> >> >
>     >> >> >
>     >> >> >
>     ------------------------------------------------------------------------
>     >> >> >
>     >> >> > _______________________________________________
>     >> >> > Jump-pilot-devel mailing list
>     >> >> > Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> >> > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >> >>
>     >> >>
>     >> >>
>     >> >>
>     >> >>
>     
> ------------------------------------------------------------------------------
>     >> >> Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     >> >> Check out the new simplified licensign option that enables
>     unlimited
>     >> >> royalty&#45;free distribution of the report engine for
>     externally
>     >> >> facing
>     >> >> server and web deployment.
>     >> >> http://p.sf.net/sfu/businessobjects
>     >> >> _______________________________________________
>     >> >> Jump-pilot-devel mailing list
>     >> >> Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> >> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >> >
>     >> >
>     >> >
>     >> > --
>     >> > http://amusingprogrammer.blogspot.com/
>     >> >
>     >> >
>     >> >
>     
> ------------------------------------------------------------------------------
>     >> > Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     >> > Check out the new simplified licensign option that enables
>     unlimited
>     >> > royalty&#45;free distribution of the report engine for
>     externally facing
>     >> > server and web deployment.
>     >> > http://p.sf.net/sfu/businessobjects
>     >> > _______________________________________________
>     >> > Jump-pilot-devel mailing list
>     >> > Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >> >
>     >> >
>     >>
>     >>
>     >>
>     
> ------------------------------------------------------------------------------
>     >> Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     >> Check out the new simplified licensign option that enables
>     unlimited
>     >> royalty&#45;free distribution of the report engine for
>     externally facing
>     >> server and web deployment.
>     >> http://p.sf.net/sfu/businessobjects
>     >> _______________________________________________
>     >> Jump-pilot-devel mailing list
>     >> Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     >> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >
>     >
>     >
>     > --
>     > http://amusingprogrammer.blogspot.com/
>     >
>     >
>     
> ------------------------------------------------------------------------------
>     > Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     > Check out the new simplified licensign option that enables unlimited
>     > royalty&#45;free distribution of the report engine for
>     externally facing
>     > server and web deployment.
>     > http://p.sf.net/sfu/businessobjects
>     > _______________________________________________
>     > Jump-pilot-devel mailing list
>     > Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>     >
>     >
>
>     
> ------------------------------------------------------------------------------
>     Crystal Reports &#45; New Free Runtime and 30 Day Trial
>     Check out the new simplified licensign option that enables unlimited
>     royalty&#45;free distribution of the report engine for externally
>     facing
>     server and web deployment.
>     http://p.sf.net/sfu/businessobjects
>     _______________________________________________
>     Jump-pilot-devel mailing list
>     Jump-pilot-devel@lists.sourceforge.net
>     <mailto:Jump-pilot-devel@lists.sourceforge.net>
>     https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>
>
>
>
> -- 
> http://amusingprogrammer.blogspot.com/
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Crystal Reports &#45; New Free Runtime and 30 Day Trial
> Check out the new simplified licensign option that enables unlimited
> royalty&#45;free distribution of the report engine for externally facing 
> server and web deployment.
> http://p.sf.net/sfu/businessobjects
> ------------------------------------------------------------------------
>
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>   

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022


------------------------------------------------------------------------------
Crystal Reports &#45; New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty&#45;free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to