In the code inside my previous post I used the value "this" as a flag 
but maybe that was bad!!! That way the BasicFeature could live forever, 
or maybe not if garbage collectors are smarter these days...???

Anyway the point was to use a reference to any already existing Object 
as a flag, so to not create a new Object for the purpose. But any 
Object, existing or created anew would do. Obviously if 
initialialization never ends for any reason, both the mods array and the 
flag Objects it points to, are never released.

Bye
Paolo


> 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


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