You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@royale.apache.org by Josh Tynjala <jo...@bowlerhat.dev> on 2020/10/14 18:15:42 UTC

Re: Possibly hard to diagnose problems ...

Followup: I've confirmed that the compiler already produces a warning when
a method is missing a return type.

--
Josh Tynjala
Bowler Hat LLC <https://bowlerhat.dev>


On Wed, Sep 23, 2020 at 10:37 AM Josh Tynjala <jo...@bowlerhat.dev>
wrote:

> Yeah, I can look into it next month.
>
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
>
>
> On Wed, Sep 23, 2020 at 2:20 AM Carlos Rovira <ca...@apache.org>
> wrote:
>
>> Hi Josh,
>>
>> could you add the compiler warning? I think that would make a difference.
>> Also I could take a look at your commit (and others) to learn how to add
>> this kind of warnings.
>>
>> If we could see more of this cases (maybe there are only few) we can add
>> them more easily between all.
>>
>> About Crux, I think Greg could know better than me where we can add the
>> check.
>>
>> Thanks
>>
>> El mar., 22 sept. 2020 a las 19:49, Hugo Ferreira (<
>> hferreira.80@gmail.com>)
>> escribió:
>>
>> > OK.
>> >
>> > It was something that always annoys me on Flex and also happens in
>> Royale
>> > but I understand but is following a standard definition.
>> >
>> >
>> > Josh Tynjala <jo...@bowlerhat.dev> escreveu no dia terça,
>> 22/09/2020
>> > à(s) 18:08:
>> >
>> > > Remember that ActionScript has function scope and not block scope
>> (same
>> > as
>> > > var in JS). So you are, in fact, declaring two variables named item in
>> > the
>> > > same scope.
>> > >
>> > > --
>> > > Josh Tynjala
>> > > Bowler Hat LLC <https://bowlerhat.dev>
>> > >
>> > >
>> > > On Tue, Sep 22, 2020 at 9:54 AM Hugo Ferreira <hferreira.80@gmail.com
>> >
>> > > wrote:
>> > >
>> > > > Sure.
>> > > >
>> > > > for each (var item:Entity in items)
>> > > > {
>> > > > addEntity(item);
>> > > > }
>> > > >
>> > > > for each (var item:Entity in items2)
>> > > > {
>> > > > addEntity(item);
>> > > > }
>> > > >
>> > > > Warning on the second item:Entity (Duplicate variable but it's not
>> > true).
>> > > >
>> > > > Josh Tynjala <jo...@bowlerhat.dev> escreveu no dia terça,
>> > > 22/09/2020
>> > > > à(s) 17:34:
>> > > >
>> > > > > Can you share some example code that demonstrates the issue, Hugo?
>> > > > >
>> > > > > --
>> > > > > Josh Tynjala
>> > > > > Bowler Hat LLC <https://bowlerhat.dev>
>> > > > >
>> > > > >
>> > > > > On Tue, Sep 22, 2020 at 9:28 AM Hugo Ferreira <
>> > hferreira.80@gmail.com>
>> > > > > wrote:
>> > > > >
>> > > > > > "1) The compiler must not be giving a warning for a missing
>> return
>> > > type
>> > > > > on
>> > > > > > a
>> > > > > > method. I'm pretty sure that the Flex compiler had a warning."
>> > > > > > + 1
>> > > > > >
>> > > > > > I would add:
>> > > > > > 3) The compiler must not be giving a warning for 2 variables
>> with
>> > the
>> > > > > same
>> > > > > > name on different scopes.
>> > > > > >
>> > > > > > Josh Tynjala <jo...@bowlerhat.dev> escreveu no dia terça,
>> > > > > 22/09/2020
>> > > > > > à(s) 16:47:
>> > > > > >
>> > > > > > > It sounds like there are two things that could be improved.
>> > > > > > >
>> > > > > > > 1) The compiler must not be giving a warning for a missing
>> return
>> > > > type
>> > > > > > on a
>> > > > > > > method. I'm pretty sure that the Flex compiler had a warning.
>> > > > > > >
>> > > > > > > 2) At runtime, Crux is failing to handle the situation where a
>> > > method
>> > > > > > > doesn't have a return type. Even if the compiler issues a
>> > warning,
>> > > > the
>> > > > > > > method is still not actually required to have a return type.
>> Crux
>> > > > > should
>> > > > > > > probably handle that situation more gracefully.
>> > > > > > >
>> > > > > > > --
>> > > > > > > Josh Tynjala
>> > > > > > > Bowler Hat LLC <https://bowlerhat.dev>
>> > > > > > >
>> > > > > > >
>> > > > > > > On Tue, Sep 22, 2020 at 1:36 AM Carlos Rovira <
>> > > > carlosrovira@apache.org
>> > > > > >
>> > > > > > > wrote:
>> > > > > > >
>> > > > > > > > Hi Chris,
>> > > > > > > >
>> > > > > > > > you're right. I think this is in the "compiler side" of
>> royale.
>> > > I'm
>> > > > > not
>> > > > > > > an
>> > > > > > > > expert on the compiler, but I guess there should be best
>> > > practices
>> > > > to
>> > > > > > > > detect this kind of issue and report to the user with a
>> > compiler
>> > > > > error
>> > > > > > > > message that is far better.
>> > > > > > > >
>> > > > > > > > Maybe just adding a few will improve a lot the compiler
>> quality
>> > > for
>> > > > > > > > newcomers (even people working full day and mastering
>> Royale).
>> > > > > > > >
>> > > > > > > > Maybe Josh knows more about this and can give some
>> thoughts. If
>> > > the
>> > > > > > rest
>> > > > > > > of
>> > > > > > > > us know how to do this, I think we all could add up to make
>> the
>> > > > > > compiler
>> > > > > > > > better. But I think we need to go over some lessons to
>> learn so
>> > > we
>> > > > > can
>> > > > > > > > apply...
>> > > > > > > >
>> > > > > > > > Thanks
>> > > > > > > >
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > El mar., 22 sept. 2020 a las 10:15, Christofer Dutz (<
>> > > > > > > > christofer.dutz@c-ware.de>) escribió:
>> > > > > > > >
>> > > > > > > > > Hi all,
>> > > > > > > > >
>> > > > > > > > > so I have been trying to port my flex application to
>> Royale
>> > and
>> > > > am
>> > > > > > > > > currently working on learning Crux.
>> > > > > > > > > Here I was having a problem, that was extremely difficult
>> to
>> > > > trace
>> > > > > > > down.
>> > > > > > > > >
>> > > > > > > > > The effect was, that my Application was giving me the
>> > following
>> > > > > error
>> > > > > > > in
>> > > > > > > > > the browser:
>> > > > > > > > >
>> > > > > > > > > getDefinitionByName.js:59 Uncaught ReferenceError: Error
>> > #1065:
>> > > > > > > Variable
>> > > > > > > > > is not defined.
>> > > > > > > > >     at
>> > Object.org.apache.royale.reflection.getDefinitionByName
>> > > > > > > > > (getDefinitionByName.js:59)
>> > > > > > > > >     at
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> Function.org.apache.royale.crux.factories.MetadataHostFactory.getMetadataHost
>> > > > > > > > > (MetadataHostFactory.as:71)
>> > > > > > > > >     at
>> > > > > > org.apache.royale.crux.reflection.TypeDescriptor.getMetadataHost
>> > > > > > > > > (TypeDescriptor.as:149)
>> > > > > > > > >     at
>> > > > > > >
>> org.apache.royale.crux.reflection.TypeDescriptor.getMetadataHosts
>> > > > > > > > > (TypeDescriptor.as:115)
>> > > > > > > > >     at
>> > > > > > > >
>> > > org.apache.royale.crux.reflection.TypeDescriptor.fromTypeDefinition
>> > > > > > > > > (TypeDescriptor.as:170)
>> > > > > > > > >     at
>> > > > > > > > >
>> > > > > >
>> > > Function.org.apache.royale.crux.reflection.TypeCache.getTypeDescriptor
>> > > > > > > > > (TypeCache.as:60)
>> > > > > > > > >     at
>> > > Function.org.apache.royale.crux.BeanFactory.constructBean
>> > > > > > > > > (BeanFactory.as:616)
>> > > > > > > > >     at
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> de.cware.cweb.frontend.config.Beans.org.apache.royale.crux.BeanProvider.initializeBeans
>> > > > > > > > > (BeanProvider.as:70)
>> > > > > > > > >     at
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> de.cware.cweb.frontend.config.Beans.org.apache.royale.crux.BeanProvider.initialize
>> > > > > > > > > (BeanProvider.as:62)
>> > > > > > > > >     at org.apache.royale.crux.Crux.constructProviders
>> > > > (Crux.as:288)
>> > > > > > > > >
>> > > > > > > > > When setting a breakpoint in getDefinitionByName.js:59 I
>> > could
>> > > > see
>> > > > > > that
>> > > > > > > > > “name” is simply set to the empty string.
>> > > > > > > > > Also did the stacktrace not really give me any hint to
>> what
>> > > might
>> > > > > be
>> > > > > > > > > causing the problem. So I did a debugging session with
>> > Carlos.
>> > > > > > > > > Effectively we commented out stuff till the application
>> > > “worked”
>> > > > > > again.
>> > > > > > > > > Today I finally found out what was causing the problem.
>> > > > > > > > >
>> > > > > > > > > In my code I had the following statement:
>> > > > > > > > >
>> > > > > > > > > [EventHandler(event="LoginEvent.LOGIN")]
>> > > > > > > > > public function userLogin() {
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> //serviceHelper.executeServiceCall(remoteModuleService.listModulesForCurrentUser(),
>> > > > > > > > > handleListModulesForCurrentUser);
>> > > > > > > > > }
>> > > > > > > > >
>> > > > > > > > > I really tried everything, till I noticed I didn’t define
>> a
>> > > > return
>> > > > > > > type,
>> > > > > > > > > so as soon as I changed that to:
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > > > [EventHandler(event="LoginEvent.LOGIN")]
>> > > > > > > > > public function userLogin():void {
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> //serviceHelper.executeServiceCall(remoteModuleService.listModulesForCurrentUser(),
>> > > > > > > > > handleListModulesForCurrentUser);
>> > > > > > > > > }
>> > > > > > > > >
>> > > > > > > > > My application worked.
>> > > > > > > > >
>> > > > > > > > > So would there be a way to make sure this sort of problem
>> > > doesn’t
>> > > > > > occur
>> > > > > > > > or
>> > > > > > > > > to give some output that makes tracking down the issue
>> > simpler?
>> > > > > > > > >
>> > > > > > > > > Chris
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > > > --
>> > > > > > > > Carlos Rovira
>> > > > > > > > http://about.me/carlosrovira
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>>
>>
>> --
>> Carlos Rovira
>> http://about.me/carlosrovira
>>
>

Re: Possibly hard to diagnose problems ...

Posted by Carlos Rovira <ca...@apache.org>.
Many thanks Josh! :)

El mié., 14 oct. 2020 a las 20:15, Josh Tynjala (<jo...@bowlerhat.dev>)
escribió:

> Followup: I've confirmed that the compiler already produces a warning when
> a method is missing a return type.
>
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
>
>
> On Wed, Sep 23, 2020 at 10:37 AM Josh Tynjala <jo...@bowlerhat.dev>
> wrote:
>
> > Yeah, I can look into it next month.
> >
> > --
> > Josh Tynjala
> > Bowler Hat LLC <https://bowlerhat.dev>
> >
> >
> > On Wed, Sep 23, 2020 at 2:20 AM Carlos Rovira <ca...@apache.org>
> > wrote:
> >
> >> Hi Josh,
> >>
> >> could you add the compiler warning? I think that would make a
> difference.
> >> Also I could take a look at your commit (and others) to learn how to add
> >> this kind of warnings.
> >>
> >> If we could see more of this cases (maybe there are only few) we can add
> >> them more easily between all.
> >>
> >> About Crux, I think Greg could know better than me where we can add the
> >> check.
> >>
> >> Thanks
> >>
> >> El mar., 22 sept. 2020 a las 19:49, Hugo Ferreira (<
> >> hferreira.80@gmail.com>)
> >> escribió:
> >>
> >> > OK.
> >> >
> >> > It was something that always annoys me on Flex and also happens in
> >> Royale
> >> > but I understand but is following a standard definition.
> >> >
> >> >
> >> > Josh Tynjala <jo...@bowlerhat.dev> escreveu no dia terça,
> >> 22/09/2020
> >> > à(s) 18:08:
> >> >
> >> > > Remember that ActionScript has function scope and not block scope
> >> (same
> >> > as
> >> > > var in JS). So you are, in fact, declaring two variables named item
> in
> >> > the
> >> > > same scope.
> >> > >
> >> > > --
> >> > > Josh Tynjala
> >> > > Bowler Hat LLC <https://bowlerhat.dev>
> >> > >
> >> > >
> >> > > On Tue, Sep 22, 2020 at 9:54 AM Hugo Ferreira <
> hferreira.80@gmail.com
> >> >
> >> > > wrote:
> >> > >
> >> > > > Sure.
> >> > > >
> >> > > > for each (var item:Entity in items)
> >> > > > {
> >> > > > addEntity(item);
> >> > > > }
> >> > > >
> >> > > > for each (var item:Entity in items2)
> >> > > > {
> >> > > > addEntity(item);
> >> > > > }
> >> > > >
> >> > > > Warning on the second item:Entity (Duplicate variable but it's not
> >> > true).
> >> > > >
> >> > > > Josh Tynjala <jo...@bowlerhat.dev> escreveu no dia terça,
> >> > > 22/09/2020
> >> > > > à(s) 17:34:
> >> > > >
> >> > > > > Can you share some example code that demonstrates the issue,
> Hugo?
> >> > > > >
> >> > > > > --
> >> > > > > Josh Tynjala
> >> > > > > Bowler Hat LLC <https://bowlerhat.dev>
> >> > > > >
> >> > > > >
> >> > > > > On Tue, Sep 22, 2020 at 9:28 AM Hugo Ferreira <
> >> > hferreira.80@gmail.com>
> >> > > > > wrote:
> >> > > > >
> >> > > > > > "1) The compiler must not be giving a warning for a missing
> >> return
> >> > > type
> >> > > > > on
> >> > > > > > a
> >> > > > > > method. I'm pretty sure that the Flex compiler had a warning."
> >> > > > > > + 1
> >> > > > > >
> >> > > > > > I would add:
> >> > > > > > 3) The compiler must not be giving a warning for 2 variables
> >> with
> >> > the
> >> > > > > same
> >> > > > > > name on different scopes.
> >> > > > > >
> >> > > > > > Josh Tynjala <jo...@bowlerhat.dev> escreveu no dia
> terça,
> >> > > > > 22/09/2020
> >> > > > > > à(s) 16:47:
> >> > > > > >
> >> > > > > > > It sounds like there are two things that could be improved.
> >> > > > > > >
> >> > > > > > > 1) The compiler must not be giving a warning for a missing
> >> return
> >> > > > type
> >> > > > > > on a
> >> > > > > > > method. I'm pretty sure that the Flex compiler had a
> warning.
> >> > > > > > >
> >> > > > > > > 2) At runtime, Crux is failing to handle the situation
> where a
> >> > > method
> >> > > > > > > doesn't have a return type. Even if the compiler issues a
> >> > warning,
> >> > > > the
> >> > > > > > > method is still not actually required to have a return type.
> >> Crux
> >> > > > > should
> >> > > > > > > probably handle that situation more gracefully.
> >> > > > > > >
> >> > > > > > > --
> >> > > > > > > Josh Tynjala
> >> > > > > > > Bowler Hat LLC <https://bowlerhat.dev>
> >> > > > > > >
> >> > > > > > >
> >> > > > > > > On Tue, Sep 22, 2020 at 1:36 AM Carlos Rovira <
> >> > > > carlosrovira@apache.org
> >> > > > > >
> >> > > > > > > wrote:
> >> > > > > > >
> >> > > > > > > > Hi Chris,
> >> > > > > > > >
> >> > > > > > > > you're right. I think this is in the "compiler side" of
> >> royale.
> >> > > I'm
> >> > > > > not
> >> > > > > > > an
> >> > > > > > > > expert on the compiler, but I guess there should be best
> >> > > practices
> >> > > > to
> >> > > > > > > > detect this kind of issue and report to the user with a
> >> > compiler
> >> > > > > error
> >> > > > > > > > message that is far better.
> >> > > > > > > >
> >> > > > > > > > Maybe just adding a few will improve a lot the compiler
> >> quality
> >> > > for
> >> > > > > > > > newcomers (even people working full day and mastering
> >> Royale).
> >> > > > > > > >
> >> > > > > > > > Maybe Josh knows more about this and can give some
> >> thoughts. If
> >> > > the
> >> > > > > > rest
> >> > > > > > > of
> >> > > > > > > > us know how to do this, I think we all could add up to
> make
> >> the
> >> > > > > > compiler
> >> > > > > > > > better. But I think we need to go over some lessons to
> >> learn so
> >> > > we
> >> > > > > can
> >> > > > > > > > apply...
> >> > > > > > > >
> >> > > > > > > > Thanks
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > > El mar., 22 sept. 2020 a las 10:15, Christofer Dutz (<
> >> > > > > > > > christofer.dutz@c-ware.de>) escribió:
> >> > > > > > > >
> >> > > > > > > > > Hi all,
> >> > > > > > > > >
> >> > > > > > > > > so I have been trying to port my flex application to
> >> Royale
> >> > and
> >> > > > am
> >> > > > > > > > > currently working on learning Crux.
> >> > > > > > > > > Here I was having a problem, that was extremely
> difficult
> >> to
> >> > > > trace
> >> > > > > > > down.
> >> > > > > > > > >
> >> > > > > > > > > The effect was, that my Application was giving me the
> >> > following
> >> > > > > error
> >> > > > > > > in
> >> > > > > > > > > the browser:
> >> > > > > > > > >
> >> > > > > > > > > getDefinitionByName.js:59 Uncaught ReferenceError: Error
> >> > #1065:
> >> > > > > > > Variable
> >> > > > > > > > > is not defined.
> >> > > > > > > > >     at
> >> > Object.org.apache.royale.reflection.getDefinitionByName
> >> > > > > > > > > (getDefinitionByName.js:59)
> >> > > > > > > > >     at
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> Function.org.apache.royale.crux.factories.MetadataHostFactory.getMetadataHost
> >> > > > > > > > > (MetadataHostFactory.as:71)
> >> > > > > > > > >     at
> >> > > > > >
> org.apache.royale.crux.reflection.TypeDescriptor.getMetadataHost
> >> > > > > > > > > (TypeDescriptor.as:149)
> >> > > > > > > > >     at
> >> > > > > > >
> >> org.apache.royale.crux.reflection.TypeDescriptor.getMetadataHosts
> >> > > > > > > > > (TypeDescriptor.as:115)
> >> > > > > > > > >     at
> >> > > > > > > >
> >> > > org.apache.royale.crux.reflection.TypeDescriptor.fromTypeDefinition
> >> > > > > > > > > (TypeDescriptor.as:170)
> >> > > > > > > > >     at
> >> > > > > > > > >
> >> > > > > >
> >> > >
> Function.org.apache.royale.crux.reflection.TypeCache.getTypeDescriptor
> >> > > > > > > > > (TypeCache.as:60)
> >> > > > > > > > >     at
> >> > > Function.org.apache.royale.crux.BeanFactory.constructBean
> >> > > > > > > > > (BeanFactory.as:616)
> >> > > > > > > > >     at
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> de.cware.cweb.frontend.config.Beans.org.apache.royale.crux.BeanProvider.initializeBeans
> >> > > > > > > > > (BeanProvider.as:70)
> >> > > > > > > > >     at
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> de.cware.cweb.frontend.config.Beans.org.apache.royale.crux.BeanProvider.initialize
> >> > > > > > > > > (BeanProvider.as:62)
> >> > > > > > > > >     at org.apache.royale.crux.Crux.constructProviders
> >> > > > (Crux.as:288)
> >> > > > > > > > >
> >> > > > > > > > > When setting a breakpoint in getDefinitionByName.js:59 I
> >> > could
> >> > > > see
> >> > > > > > that
> >> > > > > > > > > “name” is simply set to the empty string.
> >> > > > > > > > > Also did the stacktrace not really give me any hint to
> >> what
> >> > > might
> >> > > > > be
> >> > > > > > > > > causing the problem. So I did a debugging session with
> >> > Carlos.
> >> > > > > > > > > Effectively we commented out stuff till the application
> >> > > “worked”
> >> > > > > > again.
> >> > > > > > > > > Today I finally found out what was causing the problem.
> >> > > > > > > > >
> >> > > > > > > > > In my code I had the following statement:
> >> > > > > > > > >
> >> > > > > > > > > [EventHandler(event="LoginEvent.LOGIN")]
> >> > > > > > > > > public function userLogin() {
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> //serviceHelper.executeServiceCall(remoteModuleService.listModulesForCurrentUser(),
> >> > > > > > > > > handleListModulesForCurrentUser);
> >> > > > > > > > > }
> >> > > > > > > > >
> >> > > > > > > > > I really tried everything, till I noticed I didn’t
> define
> >> a
> >> > > > return
> >> > > > > > > type,
> >> > > > > > > > > so as soon as I changed that to:
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > > [EventHandler(event="LoginEvent.LOGIN")]
> >> > > > > > > > > public function userLogin():void {
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> //serviceHelper.executeServiceCall(remoteModuleService.listModulesForCurrentUser(),
> >> > > > > > > > > handleListModulesForCurrentUser);
> >> > > > > > > > > }
> >> > > > > > > > >
> >> > > > > > > > > My application worked.
> >> > > > > > > > >
> >> > > > > > > > > So would there be a way to make sure this sort of
> problem
> >> > > doesn’t
> >> > > > > > occur
> >> > > > > > > > or
> >> > > > > > > > > to give some output that makes tracking down the issue
> >> > simpler?
> >> > > > > > > > >
> >> > > > > > > > > Chris
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > > > --
> >> > > > > > > > Carlos Rovira
> >> > > > > > > > http://about.me/carlosrovira
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> >>
> >> --
> >> Carlos Rovira
> >> http://about.me/carlosrovira
> >>
> >
>


-- 
Carlos Rovira
Apache Member & Apache Royale PMC
*Apache Software Foundation*
http://about.me/carlosrovira