Good job done!!!

But what if the initial value for a certain attribute was indeed NULL???
Data coming from a database can contain NULLs...

I thought about this problem, but to me there's no way for a Feature to 
reliably know when it's initialization ends.
Maybe client code, for its own purposes, likes to set a certain 
attribute several times.

But if one really wants to let Features be smart, a disposable Object[] 
array is better then checking for null, combined with implicit method 
for mod-aware client code to use.

Something like the _UNTESTED_ code that follows.

Bye
Paolo

--------------------------------

private Object mods;

public void forceInitEnded(boolean modified) {
     //force init end and specified modify state
   mods = new Boolean(modified);
}

public bool isInitEnded() {
   if( mods instanceof Boolean )     //init ended
     return true;

   if( mods == null ) { //if still null
     mods = new Object[attributes.lenght];    //create it
     return false;   //init not even started
   }

   for(int i=0;i<mods.length;i++)
     if( mods[i] == null )  //if any attribute never flagged
       return false;          //init not ended

   mods = new Boolean();         //init ended, create a Boolean

   return true;     //init ended
}

public void setAttribute(Object[] newAttributes) {
   //call setAttribute() for each element
}

public void setAttribute(int attributeIndex, Object newAttribute) {
   if( isInitEnded() )                  //if init ended
     ((Boolean)mods).setValue(true);       //feature modified
   else   //if init not ended flag the attributes mod
     (((Object[])mods)[attributeIndex]) = this;   //any non-null would do

     //do not check if newAttribute is different!!!
   attributes[attributeIndex] = newAttribute;
}

public bool isModified() {
   return isInitEnded() ? ((Boolean)mods).getValue() : false;
}

--------------------------------


> 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


------------------------------------------------------------------------------
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