You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Martin Grigorov <mg...@apache.org> on 2012/11/13 15:58:10 UTC

Devutils + #sizeOf()

Hi,

The debug panel in wicket-devutils uses WicketObjects#sizeOf() to calculate
the size of the page and the session.

The "problem" that I see is that it calculates the size of the non-detached
object. I think what really matters is the size after detaching it, because
this is what is being saved in the http session and the disk, and I guess
this is what the developer needs to know actually.

Since #detach() can be called at any time, and several times per request
processing I suggest the following change:

---
a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
+++
b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
@@ -31,6 +31,7 @@ import org.apache.wicket.Application;
 import org.apache.wicket.Component;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.application.IClassResolver;
+import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.serialize.ISerializer;
 import org.apache.wicket.serialize.java.JavaSerializer;
 import org.apache.wicket.settings.IApplicationSettings;
@@ -416,6 +417,15 @@ public class WicketObjects
         */
        public static long sizeof(final Serializable object)
        {
+               if (object instanceof Component)
+               {
+                       ((Component) object).detach();
+               }
+               else if (object instanceof IDetachable)
+               {
+                       ((IDetachable) object).detach();
+               }
+
                return objectSizeOfStrategy.sizeOf(object);
        }


Do you see any problems with this ?

-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Re: Devutils + #sizeOf()

Posted by Sven Meier <sv...@meiers.net>.
+1 Makes sense to me.

(If anyone else is wondering too: Component doesn't implement 
IDetachable because if it did, we'd run in an infinite loop when models 
reference components.)

Sven

On 11/13/2012 03:58 PM, Martin Grigorov wrote:
> Hi,
>
> The debug panel in wicket-devutils uses WicketObjects#sizeOf() to calculate
> the size of the page and the session.
>
> The "problem" that I see is that it calculates the size of the non-detached
> object. I think what really matters is the size after detaching it, because
> this is what is being saved in the http session and the disk, and I guess
> this is what the developer needs to know actually.
>
> Since #detach() can be called at any time, and several times per request
> processing I suggest the following change:
>
> ---
> a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> +++
> b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> @@ -31,6 +31,7 @@ import org.apache.wicket.Application;
>   import org.apache.wicket.Component;
>   import org.apache.wicket.WicketRuntimeException;
>   import org.apache.wicket.application.IClassResolver;
> +import org.apache.wicket.model.IDetachable;
>   import org.apache.wicket.serialize.ISerializer;
>   import org.apache.wicket.serialize.java.JavaSerializer;
>   import org.apache.wicket.settings.IApplicationSettings;
> @@ -416,6 +417,15 @@ public class WicketObjects
>           */
>          public static long sizeof(final Serializable object)
>          {
> +               if (object instanceof Component)
> +               {
> +                       ((Component) object).detach();
> +               }
> +               else if (object instanceof IDetachable)
> +               {
> +                       ((IDetachable) object).detach();
> +               }
> +
>                  return objectSizeOfStrategy.sizeOf(object);
>          }
>
>
> Do you see any problems with this ?
>


Re: Devutils + #sizeOf()

Posted by Martin Grigorov <mg...@apache.org>.
Not sure whether this is explicitly documented but this is how this panel
should be used anyway.


On Tue, Nov 13, 2012 at 5:21 PM, Ernesto Reinaldo Barreiro <
reiern70@gmail.com> wrote:

> It wouldn't be a problem if debug bar was the "last" component to be
> rendered... I do agree information is  misleading without detaching.
>
> On Tue, Nov 13, 2012 at 4:06 PM, Martin Grigorov <mgrigorov@apache.org
> >wrote:
>
> > Only if you use the debug bar.
> > Currently the showed size is misleading IMO.
> >
> >
> > On Tue, Nov 13, 2012 at 5:04 PM, Ernesto Reinaldo Barreiro <
> > reiern70@gmail.com> wrote:
> >
> > > Wouldn't this make complex pages (e.g. with lots of LDMs) much more
> slow?
> > >
> > > On Tue, Nov 13, 2012 at 3:58 PM, Martin Grigorov <mgrigorov@apache.org
> > > >wrote:
> > >
> > > > Hi,
> > > >
> > > > The debug panel in wicket-devutils uses WicketObjects#sizeOf() to
> > > calculate
> > > > the size of the page and the session.
> > > >
> > > > The "problem" that I see is that it calculates the size of the
> > > non-detached
> > > > object. I think what really matters is the size after detaching it,
> > > because
> > > > this is what is being saved in the http session and the disk, and I
> > guess
> > > > this is what the developer needs to know actually.
> > > >
> > > > Since #detach() can be called at any time, and several times per
> > request
> > > > processing I suggest the following change:
> > > >
> > > > ---
> > > >
> > > >
> > >
> >
> a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> > > > +++
> > > >
> > > >
> > >
> >
> b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> > > > @@ -31,6 +31,7 @@ import org.apache.wicket.Application;
> > > >  import org.apache.wicket.Component;
> > > >  import org.apache.wicket.WicketRuntimeException;
> > > >  import org.apache.wicket.application.IClassResolver;
> > > > +import org.apache.wicket.model.IDetachable;
> > > >  import org.apache.wicket.serialize.ISerializer;
> > > >  import org.apache.wicket.serialize.java.JavaSerializer;
> > > >  import org.apache.wicket.settings.IApplicationSettings;
> > > > @@ -416,6 +417,15 @@ public class WicketObjects
> > > >          */
> > > >         public static long sizeof(final Serializable object)
> > > >         {
> > > > +               if (object instanceof Component)
> > > > +               {
> > > > +                       ((Component) object).detach();
> > > > +               }
> > > > +               else if (object instanceof IDetachable)
> > > > +               {
> > > > +                       ((IDetachable) object).detach();
> > > > +               }
> > > > +
> > > >                 return objectSizeOfStrategy.sizeOf(object);
> > > >         }
> > > >
> > > >
> > > > Do you see any problems with this ?
> > > >
> > > > --
> > > > Martin Grigorov
> > > > jWeekend
> > > > Training, Consulting, Development
> > > > http://jWeekend.com <http://jweekend.com/>
> > > >
> > >
> > >
> > >
> > > --
> > > Regards - Ernesto Reinaldo Barreiro
> > > Antilia Soft
> > > http://antiliasoft.com/ <http://antiliasoft.com/antilia>
> > >
> >
> >
> >
> > --
> > Martin Grigorov
> > jWeekend
> > Training, Consulting, Development
> > http://jWeekend.com <http://jweekend.com/>
> >
>
>
>
> --
> Regards - Ernesto Reinaldo Barreiro
> Antilia Soft
> http://antiliasoft.com/ <http://antiliasoft.com/antilia>
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Re: Devutils + #sizeOf()

Posted by Frank Henningsen <fr...@henningsen.eu>.
Yep, that change is worth it. Thanks!



--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Devutils-sizeOf-tp4653827p4658055.html
Sent from the Forum for Wicket Core developers mailing list archive at Nabble.com.

Re: Devutils + #sizeOf()

Posted by Martin Grigorov <mg...@apache.org>.
Hi,


On Wed, Apr 17, 2013 at 1:11 AM, Frank Henningsen <fr...@henningsen.eu>wrote:

> Yes, that is a good idea. But the object I would need to make transient is
> passed into the panel as a parameter and then put into a detachable model.
>

If you use LoadableDetachableModel(T object) then the passed 'object' is
assigned to a transient member field.
You can write your own Model that does the same if you like.


> Any chance to make a method parameter transient? (Sounds like a
> contradiction in itself...)
>
>
> >Hi,
> >
> >
> >On Fri, Apr 12, 2013 at 1:03 AM, Frank Henningsen &lt;frank@&gt;wrote:
> >
> >> In a Panel I use a detachable model: I implement an IModel that
> retrieves
> >> and
> >> detaches an object that is not serializable. That works fine.
> >> If I add the DebugPanel to the WebPage containing my Panel the
> DebugPanel
> >> calculates the page size using #sizeOf(). This method requires also my
> >> non-serializable object to be serializable and hence throws a
> >> notserializableexception. I do not want to make the object serializable
> >> just
> >> because of the DebugPanel. Is there an easy way to avoit that?
> >>
> >>
> >Can't you make this field 'transient' ?
> >This way it will be excluded in serialization process.
> >
> >
>
>
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/Devutils-sizeOf-tp4653827p4658051.html
> Sent from the Forum for Wicket Core developers mailing list archive at
> Nabble.com.
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Re: Devutils + #sizeOf()

Posted by Frank Henningsen <fr...@henningsen.eu>.
Yes, that is a good idea. But the object I would need to make transient is
passed into the panel as a parameter and then put into a detachable model.
Any chance to make a method parameter transient? (Sounds like a
contradiction in itself...)


>Hi,
>
>
>On Fri, Apr 12, 2013 at 1:03 AM, Frank Henningsen &lt;frank@&gt;wrote:
>
>> In a Panel I use a detachable model: I implement an IModel that retrieves
>> and
>> detaches an object that is not serializable. That works fine.
>> If I add the DebugPanel to the WebPage containing my Panel the DebugPanel
>> calculates the page size using #sizeOf(). This method requires also my
>> non-serializable object to be serializable and hence throws a
>> notserializableexception. I do not want to make the object serializable
>> just
>> because of the DebugPanel. Is there an easy way to avoit that?
>>
>>
>Can't you make this field 'transient' ?
>This way it will be excluded in serialization process.
>
>



--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Devutils-sizeOf-tp4653827p4658051.html
Sent from the Forum for Wicket Core developers mailing list archive at Nabble.com.

Re: Devutils + #sizeOf()

Posted by Martin Grigorov <mg...@apache.org>.
Hi,


On Fri, Apr 12, 2013 at 1:03 AM, Frank Henningsen <fr...@henningsen.eu>wrote:

> In a Panel I use a detachable model: I implement an IModel that retrieves
> and
> detaches an object that is not serializable. That works fine.
> If I add the DebugPanel to the WebPage containing my Panel the DebugPanel
> calculates the page size using #sizeOf(). This method requires also my
> non-serializable object to be serializable and hence throws a
> notserializableexception. I do not want to make the object serializable
> just
> because of the DebugPanel. Is there an easy way to avoit that?
>
>
Can't you make this field 'transient' ?
This way it will be excluded in serialization process.


>  >
> >
> >The default implementation of #sizeOf() uses Java Serialization to
> >calculate the size of an object, so it *must* be Serializable.
> >Please explain more about your concerns.
> >
> >
> >On Thu, Apr 4, 2013 at 11:46 PM, Frank Henningsen &lt;frank@&gt;wrote:
> >
> >> This behavior of "sizeOf()" would require detachable objects to be
> >> serializable, just to use the DebugPanel. I would like to avoid that.
> >> Would
> >> your suggestion (rendering the DebugPanel as last componen) be a good
> >> workaround? How can I guarantee that the DebugPanel is rendered as last
> >> component? E.g. over panels or inheritance?
> >>
> >>
> >> >It wouldn't be a problem if debug bar was the "last" component to be
> >> >rendered... I do agree information is  misleading without detaching.
> >> >
> >> >On Tue, Nov 13, 2012 at 4:06 PM, Martin Grigorov
> >> &lt;mgrigorov@&gt;wrote:
> >> >
> >> >> Only if you use the debug bar.
> >> >> Currently the showed size is misleading IMO.
>
>
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/Devutils-sizeOf-tp4653827p4657909.html
> Sent from the Forum for Wicket Core developers mailing list archive at
> Nabble.com.
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Re: Devutils + #sizeOf()

Posted by Frank Henningsen <fr...@henningsen.eu>.
In a Panel I use a detachable model: I implement an IModel that retrieves and
detaches an object that is not serializable. That works fine.
If I add the DebugPanel to the WebPage containing my Panel the DebugPanel
calculates the page size using #sizeOf(). This method requires also my
non-serializable object to be serializable and hence throws a
notserializableexception. I do not want to make the object serializable just
because of the DebugPanel. Is there an easy way to avoit that?

>
>
>The default implementation of #sizeOf() uses Java Serialization to
>calculate the size of an object, so it *must* be Serializable.
>Please explain more about your concerns.
>
>
>On Thu, Apr 4, 2013 at 11:46 PM, Frank Henningsen &lt;frank@&gt;wrote:
>
>> This behavior of "sizeOf()" would require detachable objects to be
>> serializable, just to use the DebugPanel. I would like to avoid that.
>> Would
>> your suggestion (rendering the DebugPanel as last componen) be a good
>> workaround? How can I guarantee that the DebugPanel is rendered as last
>> component? E.g. over panels or inheritance?
>>
>>
>> >It wouldn't be a problem if debug bar was the "last" component to be
>> >rendered... I do agree information is  misleading without detaching.
>> >
>> >On Tue, Nov 13, 2012 at 4:06 PM, Martin Grigorov
>> &lt;mgrigorov@&gt;wrote:
>> >
>> >> Only if you use the debug bar.
>> >> Currently the showed size is misleading IMO.



--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Devutils-sizeOf-tp4653827p4657909.html
Sent from the Forum for Wicket Core developers mailing list archive at Nabble.com.

Re: Devutils + #sizeOf()

Posted by Martin Grigorov <mg...@apache.org>.
Hi,


On Thu, Apr 4, 2013 at 11:46 PM, Frank Henningsen <fr...@henningsen.eu>wrote:

> This behavior of "sizeOf()" would require detachable objects to be
> serializable, just to use the DebugPanel. I would like to avoid that. Would
>

The default implementation of #sizeOf() uses Java Serialization to
calculate the size of an object, so it *must* be Serializable.
Please explain more about your concerns.


> your suggestion (rendering the DebugPanel as last componen) be a good
> workaround? How can I guarantee that the DebugPanel is rendered as last
> component? E.g. over panels or inheritance?
>
>
> >It wouldn't be a problem if debug bar was the "last" component to be
> >rendered... I do agree information is  misleading without detaching.
> >
> >On Tue, Nov 13, 2012 at 4:06 PM, Martin Grigorov &lt;mgrigorov@&gt;wrote:
> >
> >> Only if you use the debug bar.
> >> Currently the showed size is misleading IMO.
>
>
>
>
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/Devutils-sizeOf-tp4653827p4657764.html
> Sent from the Forum for Wicket Core developers mailing list archive at
> Nabble.com.
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Re: Devutils + #sizeOf()

Posted by Frank Henningsen <fr...@henningsen.eu>.
This behavior of "sizeOf()" would require detachable objects to be
serializable, just to use the DebugPanel. I would like to avoid that. Would
your suggestion (rendering the DebugPanel as last componen) be a good
workaround? How can I guarantee that the DebugPanel is rendered as last
component? E.g. over panels or inheritance? 


>It wouldn't be a problem if debug bar was the "last" component to be
>rendered... I do agree information is  misleading without detaching.
>
>On Tue, Nov 13, 2012 at 4:06 PM, Martin Grigorov &lt;mgrigorov@&gt;wrote:
>
>> Only if you use the debug bar.
>> Currently the showed size is misleading IMO.





--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/Devutils-sizeOf-tp4653827p4657764.html
Sent from the Forum for Wicket Core developers mailing list archive at Nabble.com.

Re: Devutils + #sizeOf()

Posted by Ernesto Reinaldo Barreiro <re...@gmail.com>.
It wouldn't be a problem if debug bar was the "last" component to be
rendered... I do agree information is  misleading without detaching.

On Tue, Nov 13, 2012 at 4:06 PM, Martin Grigorov <mg...@apache.org>wrote:

> Only if you use the debug bar.
> Currently the showed size is misleading IMO.
>
>
> On Tue, Nov 13, 2012 at 5:04 PM, Ernesto Reinaldo Barreiro <
> reiern70@gmail.com> wrote:
>
> > Wouldn't this make complex pages (e.g. with lots of LDMs) much more slow?
> >
> > On Tue, Nov 13, 2012 at 3:58 PM, Martin Grigorov <mgrigorov@apache.org
> > >wrote:
> >
> > > Hi,
> > >
> > > The debug panel in wicket-devutils uses WicketObjects#sizeOf() to
> > calculate
> > > the size of the page and the session.
> > >
> > > The "problem" that I see is that it calculates the size of the
> > non-detached
> > > object. I think what really matters is the size after detaching it,
> > because
> > > this is what is being saved in the http session and the disk, and I
> guess
> > > this is what the developer needs to know actually.
> > >
> > > Since #detach() can be called at any time, and several times per
> request
> > > processing I suggest the following change:
> > >
> > > ---
> > >
> > >
> >
> a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> > > +++
> > >
> > >
> >
> b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> > > @@ -31,6 +31,7 @@ import org.apache.wicket.Application;
> > >  import org.apache.wicket.Component;
> > >  import org.apache.wicket.WicketRuntimeException;
> > >  import org.apache.wicket.application.IClassResolver;
> > > +import org.apache.wicket.model.IDetachable;
> > >  import org.apache.wicket.serialize.ISerializer;
> > >  import org.apache.wicket.serialize.java.JavaSerializer;
> > >  import org.apache.wicket.settings.IApplicationSettings;
> > > @@ -416,6 +417,15 @@ public class WicketObjects
> > >          */
> > >         public static long sizeof(final Serializable object)
> > >         {
> > > +               if (object instanceof Component)
> > > +               {
> > > +                       ((Component) object).detach();
> > > +               }
> > > +               else if (object instanceof IDetachable)
> > > +               {
> > > +                       ((IDetachable) object).detach();
> > > +               }
> > > +
> > >                 return objectSizeOfStrategy.sizeOf(object);
> > >         }
> > >
> > >
> > > Do you see any problems with this ?
> > >
> > > --
> > > Martin Grigorov
> > > jWeekend
> > > Training, Consulting, Development
> > > http://jWeekend.com <http://jweekend.com/>
> > >
> >
> >
> >
> > --
> > Regards - Ernesto Reinaldo Barreiro
> > Antilia Soft
> > http://antiliasoft.com/ <http://antiliasoft.com/antilia>
> >
>
>
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com <http://jweekend.com/>
>



-- 
Regards - Ernesto Reinaldo Barreiro
Antilia Soft
http://antiliasoft.com/ <http://antiliasoft.com/antilia>

Re: Devutils + #sizeOf()

Posted by Martin Grigorov <mg...@apache.org>.
Only if you use the debug bar.
Currently the showed size is misleading IMO.


On Tue, Nov 13, 2012 at 5:04 PM, Ernesto Reinaldo Barreiro <
reiern70@gmail.com> wrote:

> Wouldn't this make complex pages (e.g. with lots of LDMs) much more slow?
>
> On Tue, Nov 13, 2012 at 3:58 PM, Martin Grigorov <mgrigorov@apache.org
> >wrote:
>
> > Hi,
> >
> > The debug panel in wicket-devutils uses WicketObjects#sizeOf() to
> calculate
> > the size of the page and the session.
> >
> > The "problem" that I see is that it calculates the size of the
> non-detached
> > object. I think what really matters is the size after detaching it,
> because
> > this is what is being saved in the http session and the disk, and I guess
> > this is what the developer needs to know actually.
> >
> > Since #detach() can be called at any time, and several times per request
> > processing I suggest the following change:
> >
> > ---
> >
> >
> a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> > +++
> >
> >
> b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> > @@ -31,6 +31,7 @@ import org.apache.wicket.Application;
> >  import org.apache.wicket.Component;
> >  import org.apache.wicket.WicketRuntimeException;
> >  import org.apache.wicket.application.IClassResolver;
> > +import org.apache.wicket.model.IDetachable;
> >  import org.apache.wicket.serialize.ISerializer;
> >  import org.apache.wicket.serialize.java.JavaSerializer;
> >  import org.apache.wicket.settings.IApplicationSettings;
> > @@ -416,6 +417,15 @@ public class WicketObjects
> >          */
> >         public static long sizeof(final Serializable object)
> >         {
> > +               if (object instanceof Component)
> > +               {
> > +                       ((Component) object).detach();
> > +               }
> > +               else if (object instanceof IDetachable)
> > +               {
> > +                       ((IDetachable) object).detach();
> > +               }
> > +
> >                 return objectSizeOfStrategy.sizeOf(object);
> >         }
> >
> >
> > Do you see any problems with this ?
> >
> > --
> > Martin Grigorov
> > jWeekend
> > Training, Consulting, Development
> > http://jWeekend.com <http://jweekend.com/>
> >
>
>
>
> --
> Regards - Ernesto Reinaldo Barreiro
> Antilia Soft
> http://antiliasoft.com/ <http://antiliasoft.com/antilia>
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com <http://jweekend.com/>

Re: Devutils + #sizeOf()

Posted by Ernesto Reinaldo Barreiro <re...@gmail.com>.
Wouldn't this make complex pages (e.g. with lots of LDMs) much more slow?

On Tue, Nov 13, 2012 at 3:58 PM, Martin Grigorov <mg...@apache.org>wrote:

> Hi,
>
> The debug panel in wicket-devutils uses WicketObjects#sizeOf() to calculate
> the size of the page and the session.
>
> The "problem" that I see is that it calculates the size of the non-detached
> object. I think what really matters is the size after detaching it, because
> this is what is being saved in the http session and the disk, and I guess
> this is what the developer needs to know actually.
>
> Since #detach() can be called at any time, and several times per request
> processing I suggest the following change:
>
> ---
>
> a/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> +++
>
> b/wicket-core/src/main/java/org/apache/wicket/core/util/lang/WicketObjects.java
> @@ -31,6 +31,7 @@ import org.apache.wicket.Application;
>  import org.apache.wicket.Component;
>  import org.apache.wicket.WicketRuntimeException;
>  import org.apache.wicket.application.IClassResolver;
> +import org.apache.wicket.model.IDetachable;
>  import org.apache.wicket.serialize.ISerializer;
>  import org.apache.wicket.serialize.java.JavaSerializer;
>  import org.apache.wicket.settings.IApplicationSettings;
> @@ -416,6 +417,15 @@ public class WicketObjects
>          */
>         public static long sizeof(final Serializable object)
>         {
> +               if (object instanceof Component)
> +               {
> +                       ((Component) object).detach();
> +               }
> +               else if (object instanceof IDetachable)
> +               {
> +                       ((IDetachable) object).detach();
> +               }
> +
>                 return objectSizeOfStrategy.sizeOf(object);
>         }
>
>
> Do you see any problems with this ?
>
> --
> Martin Grigorov
> jWeekend
> Training, Consulting, Development
> http://jWeekend.com <http://jweekend.com/>
>



-- 
Regards - Ernesto Reinaldo Barreiro
Antilia Soft
http://antiliasoft.com/ <http://antiliasoft.com/antilia>