Good one Larry!  That seems like a perfect solution...

Larry Becker wrote:
> OK, it turns out there is a way to implement BasicFeatue.isModified() 
> with a simple boolean.  All you need to do is add a check for null as in:
>
>     public void setAttribute(int attributeIndex, Object newAttribute) {
>         if (attributes[attributeIndex] != null) {
>             modified = true;
>         }                                                 
>         attributes[attributeIndex] = newAttribute;
>     }
>
> This prevents the initial loading of values (from a shapefile or 
> whatever) from setting the modified flag.
>
> Thanks to all who persisted in doubting that the array was necessary.  
> You instincts were good.
>
> regards,
> Larry
>
>
>
> On Tue, Apr 28, 2009 at 9:40 AM, Sunburned Surveyor 
> <sunburned.surve...@gmail.com <mailto:sunburned.surve...@gmail.com>> 
> wrote:
>
>     Larry,
>
>     I wanted to get back to you yesterday, and I got bery busy at work. I
>     don't personally have a problem with you commiting your changes to the
>     BasicFeature class. We can start testing the change in our nightly
>     build, and will be able to get an idea on how serious the memory
>     impact is. In the meantime, I might tinker with some alternate
>     implementations.
>
>     If none of the other programmers have a serious objection at this
>     point, we could commit the change.
>
>     It's not like we can't undo the change if it has serious impacts on
>     memory usage.
>
>     The Sunburned Surveyor
>
>     On Mon, Apr 27, 2009 at 12:56 PM, Larry Becker
>     <becker.la...@gmail.com <mailto:becker.la...@gmail.com>> wrote:
>     > Using a scheme with the container sound good, but I can't find an
>     > appropriate listener.  Layer#setFeatureCollection has
>     featuresAdded and
>     > featuresRemoved.  Layer#getLayerListener() has the void
>     featuresChanged()
>     > method which does setFeatureCollectionModified(true), but this
>     doesn't help
>     > with tracking individual changes to features.
>     >
>     > If we added the appropriate listeners to BasicFeature, how would
>     this change
>     > the state data that needs to be stored?  Wouldn't it essentially
>     be the same
>     > data?
>     >
>     > Larry
>     >
>     > On Mon, Apr 27, 2009 at 2:07 PM, Martin Davis
>     <mbda...@refractions.net <mailto:mbda...@refractions.net>>
>     > wrote:
>     >>
>     >> I see your point, although newly-created BasicFeatures aren't
>     really an
>     >> issue - they are always dirty by definition.  It's just
>     features which
>     >> have had their attributes modified which are the problem.
>     >>
>     >> I'm not totally crazy about this MutableBasicFeature/BasicFeature
>     >> dichotomy, but it might be workable.  You would have to flip
>     BFs to MBFs
>     >> when they were written out, since they would then become clean
>     again.
>     >>
>     >> I think I'd prefer a scheme where the container kept track of which
>     >> features have been modified, and leave features as simple value
>     >> objects.  I believe this is what GeoTools does. Can anyone
>     confirm that
>     >> before I go digging through their codebase?
>     >>
>     >> Larry Becker wrote:
>     >> >
>     >> >     Perhaps you could extend BasicFeature to be a
>     MutableBasicFeature,
>     >> > and
>     >> >     this is the concrete class that would be used by Writeable
>     >> > DataStores.
>     >> >
>     >> >
>     >> > This is a good idea, but tough to implement.  A search for "new
>     >> > BasicFeature" found 80 matches in the project.  The fact is
>     that most
>     >> > tools create BasicFeatures.  Now perhaps, if we are clever,
>     we can use
>     >> > that to our advantage. Hmm...
>     >> >
>     >> > Larry
>     >> >
>     >> > On Thu, Apr 23, 2009 at 6:16 PM, Martin Davis
>     <mbda...@refractions.net <mailto:mbda...@refractions.net>
>     >> > <mailto:mbda...@refractions.net
>     <mailto:mbda...@refractions.net>>> wrote:
>     >> >
>     >> >     Perhaps you could extend BasicFeature to be a
>     MutableBasicFeature,
>     >> > and
>     >> >     this is the concrete class that would be used by Writeable
>     >> > DataStores.
>     >> >     Only MutableBasicFeature would incur the overhead of tracking
>     >> > changes.
>     >> >     Whether the DataStore is writeable could be determined
>     dynamically
>     >> > as
>     >> >     well (ie by user input when layer is created).  There are
>     a lot of
>     >> > use
>     >> >     cases where the writable aspect isn't needed.
>     >> >
>     >> >     If it was me, I would still prefer the simpler single boolean
>     >> >     dirty flag
>     >> >     (although I would probably opt for still implementing
>     >> >     MutableBasicFeature, in case there was more behaviour
>     that needed
>     >> >     to be
>     >> >     added down the road.)
>     >> >
>     >> >     If I get a chance I'll try and see what GeoTools does
>     here - they
>     >> > must
>     >> >     have this same problem.
>     >> >
>     >> >     Larry Becker wrote:
>     >> >     > I think the other developers need to understand that
>     the cost of
>     >> >     > supporting per-feature modified status will be a
>     per-feature cost
>     >> > of
>     >> >     > (size of int) * number of attributes.  I'm not sure I
>     made that
>     >> >     > clear.  Currently the memory cost is for all features
>     on all
>     >> > layers.
>     >> >     > Perhaps there is needed a way to opt-in to this cost and
>     >> >     functionality
>     >> >     > at layer creation time.  Hmm...
>     >> >     >
>     >> >     > Larry
>     >> >     >
>     >> >     > On Thu, Apr 23, 2009 at 4:53 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:
>     >> >     >
>     >> >     >     I guess the memory issue might be moot for
>     DataStore-based
>     >> >     datasets
>     >> >     >     anyway, since the whole point is to only keep in
>     memory what
>     >> > is
>     >> >     >     currently displayed on the screen.
>     >> >     >
>     >> >     >     But simpler is always better!  Alarm bells start
>     ringing for
>     >> >     me when I
>     >> >     >     see counts being used - the semantics seems like
>     they must
>     >> >     be more
>     >> >     >     complicated than a simple flag.
>     >> >     >
>     >> >     >     Larry Becker wrote:
>     >> >     >
>     >> >
>     >> >
>     >> >     >     > 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>>
>     >> >     <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
>     <mailto:mbda...@refractions.net>>
>     >> >     >     <mailto: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>>>
>     >> >     >     <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
>     <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>
>     >> >     <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
>     <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>>>
>     >> >     >     >    
>     <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
>     <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>
>     >> >     <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
>     <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>>>
>     >> >     >     >    
>     <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
>     <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>
>     >> >     <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
>     <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>>
>     >> >     >     <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
>     <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>>>
>     >> >     >     >    
>     <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
>     <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>>
>     >> >     >     <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
>     >> >
>     >>
>     >> --
>     >> 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>
>     >> 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
>     >
>     >
>
>     
> ------------------------------------------------------------------------------
>     Register Now & Save for Velocity, the Web Performance & Operations
>     Conference from O'Reilly Media. Velocity features a full day of
>     expert-led, hands-on workshops and two days of sessions from industry
>     leaders in dedicated Performance & Operations tracks. Use code
>     vel09scf
>     and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
>     _______________________________________________
>     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/
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Register Now & Save for Velocity, the Web Performance & Operations 
> Conference from O'Reilly Media. Velocity features a full day of 
> expert-led, hands-on workshops and two days of sessions from industry 
> leaders in dedicated Performance & Operations tracks. Use code vel09scf 
> and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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


------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations 
Conference from O'Reilly Media. Velocity features a full day of 
expert-led, hands-on workshops and two days of sessions from industry 
leaders in dedicated Performance & Operations tracks. Use code vel09scf 
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to