----- Original Message -----
> From: "Vojtech Szocs" <vszocs(a)redhat.com>
> To: "Sandro Bonazzola" <sbonazzo(a)redhat.com>
> Cc: "infra" <infra(a)ovirt.org>, devel(a)ovirt.org
> Sent: Friday, August 29, 2014 4:43:44 PM
> Subject: Re: [ovirt-devel] Tools for developing and building oVirt.js project
>
>
>
> ----- Original Message -----
>> From: "Sandro Bonazzola" <sbonazzo(a)redhat.com>
>> To: "Vojtech Szocs" <vszocs(a)redhat.com>
>> Cc: "Tomas Jelinek" <tjelinek(a)redhat.com>, "Mooli
Tayer"
>> <mtayer(a)redhat.com>, devel(a)ovirt.org, "infra"
>> <infra(a)ovirt.org>
>> Sent: Friday, August 29, 2014 8:05:58 AM
>> Subject: Re: [ovirt-devel] Tools for developing and building oVirt.js
>> project
>>
>> Il 28/08/2014 21:00, Vojtech Szocs ha scritto:
>>>
>>>
>>> ----- Original Message -----
>>>> From: "Sandro Bonazzola" <sbonazzo(a)redhat.com>
>>>> To: "Tomas Jelinek" <tjelinek(a)redhat.com>, "Mooli
Tayer"
>>>> <mtayer(a)redhat.com>
>>>> Cc: devel(a)ovirt.org
>>>> Sent: Tuesday, August 26, 2014 12:03:14 PM
>>>> Subject: Re: [ovirt-devel] Tools for developing and building oVirt.js
>>>> project
>>>>
>>>> Il 26/08/2014 09:38, Tomas Jelinek ha scritto:
>>>>>
>>>>>
>>>>> ----- Original Message -----
>>>>>> From: "Mooli Tayer" <mtayer(a)redhat.com>
>>>>>> To: "Greg Sheremeta" <gshereme(a)redhat.com>
>>>>>> Cc: devel(a)ovirt.org
>>>>>> Sent: Tuesday, August 26, 2014 9:17:20 AM
>>>>>> Subject: Re: [ovirt-devel] Tools for developing and building
oVirt.js
>>>>>> project
>>>>>>
>>>>>> Are we talking about using node as a
development/test/packaging(minify
>>>>>> etc
>>>>>> )
>>>>>> tool or having a runtime backend (site) on top of node?
>>>>>
>>>>> It is only devel environment (e.g. build dependency), not runtime.
>>>>
>>>>
>>>> If it's build dependency it's not just devel environment.
>>>
>>> Right, I messed up my comment above, sorry.
>>>
>>> Node.js can be (and typically is) used as both devel & build dependency
>>> for JavaScript projects.
>>>
>>>> We must ensure that all required build dependencies are available and
>>>> properly packaged for all supported distributions.
>>>
>>> Yes, fully agreed.
>>>
>>> Fedora already has some packages we could use, for example:
>>>
http://koji.fedoraproject.org/koji/packageinfo?packageID=15154
>>>
http://koji.fedoraproject.org/koji/packageinfo?packageID=15356
>>>
>>> However, there's one complication (as Greg mentioned before): npm (Node
>>> package manager) resolves Node-specific packages (esentially JavaScript
>>> artifacts) via HTTP access, so we'd need some infra to serve these, and
>>> for each such JS module:
>>> - either use existing package for that JS module, if one exists
>>> - or maintain package for that JS module on our own [*]
>>>
>>> [*] I understand that this is not what we want to do in general
>>
>> I would add
>> - Ask supported distributions to provide needed rpms
>
> Well, that ^^ would be ideal.
>
>>
>>>
>>> In other words, there would have to be some infra to support builds for
>>> JavaScript/Node.js projects, similar to existing infra to support builds
>>> for Java/Maven projects:
>>> - package for Node.js + npm
>>> - package for each JS module (likely problematic)
>>> - tool (existing Artifactory that serves Maven artifacts?) to serve
>>> JS modules via HTTP for npm to consume (maybe problematic)
>>>
>>
>> Adding infra for above
>>
>>
>>> In any case, we can proceed with developing oVirt.js without requiring
>>> Node.js as a build dependency. I see two possible solutions here:
>>>
>>> 1, avoid using build tools like Traceur (ES6 -> ES5 transpiler)
>>> and UglifyJS (code compressor/obfuscator), just concatenate
>>> JS source files into resulting JS target file (either via
>>> command in Makefile or via some Maven plugin)
>>>
>>> PROS: no special build requirements
>>> CONS: can't use tools like Traceur
>>>
>>> 2, use build tools like Traceur and UglifyJS, commit resulting
>>> JS target file into source tree, maybe with git commit hook
>>> for this
>>>
>>> PROS: can use tools like Traceur
>>> CONS: storing target JS file in source tree
>>>
>>> 3, (?)
>>
>> Use something simpler to package for compressing / minimizing like
>>
http://yui.github.io/yuicompressor/ or any other tool like that at build
>> time
>> (nothing against Node.js at development time).
>
> YUI Compressor is written in Java, we could use it within our Java-based
> Engine build. It seems that YUI Compressor uses Rhino (JS engine written
> in Java) with some custom Rhino extensions/tweaks.
>
> I didn't find Fedora package for YUI Compressor, but I found this:
>
>
http://davidb.github.io/yuicompressor-maven-plugin/
>
> And luckily, this Maven plugin is also in JBoss Maven repo:
>
>
https://repository.jboss.org/nexus/service/local/repositories/central/con...
>
> OK, now some bad news. According to this:
>
>
http://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor/
>
> development on YUI Compressor continues through JavaScript (surprise!)
> project yUglify (it's based on UglifyJS which I proposed way above):
>
>
https://github.com/yui/yuglify
>
> And, not surprisingly, yUglify is Node.js module. Here we go :)
>
> As everyone can see, all popular tools for JavaScript development
> are pretty much centered around Node.js, that is not coincidence.
> Avoiding Node.js for JavaScript development complicates the whole
> development and build process (from developer's perspective).
>
> OK, now what we can do. I suggest to use wro4j (Java-based):
>
>
https://code.google.com/p/wro4j/
>
> wro4j uses Rhino to execute most of its "processors", including
> UglifyJsProcessor. As I wrote before, wro4j bundles JS tools
> (like UglifyJS) that are developed against Node.js runtime, and
> runs them via Rhino. As a result, you can invoke JS development
> tools from within Java environment.
>
> It's available in JBoss Maven repo:
>
>
https://repository.jboss.org/nexus/service/local/repositories/central/con...
>
> Conclusion:
>
> * can we use wro4j-maven-plugin for now?
> (OK to add new Maven plugin dependency?)
Additionally, we could pull JS dependencies (such as Lo-Dash)
as webjars through Maven, for example:
https://repository.jboss.org/nexus/service/local/repositories/central/con...
As for Traceur, I guess that we could just use it "on-the-fly"
(compilation happens during page load) as described here:
https://code.google.com/p/traceur-compiler/wiki/GettingStarted
Overall, assuming we can introduce some new Maven (plugin/JAR)
dependencies into Engine build, we can avoid Node.js runtime
required for the build; Node.js would be purely a devel/test
env. dependency.
>
> * in the long term, supporting Node.js within our build infra
> (still) seems needed, assuming we're in agreement about
> modularizing (currently monolithic) GWT UI, with JavaScript
> becoming the common base UI technology
>
>>
>>
>>>
>>> What do you think?
>>>
>>> Note that this might work for small projects in short term.
>>>
>>> If we agree that JavaScript is the common base technology for
>>> oVirt frontend, not having well-established build environment
>>> (such as Node.js) will make it very hard to develop and maintain
>>> bigger JavaScript projects in the long term.
>>>
>>>>
>>>>
>>>>>
>>>>> I'd just like to point out that one thing is the development of
the
>>>>> ovirt.js itself
>>>>> which is not going to be a big project and I can imagine also using
>>>>> less
>>>>> ideal (slower) tools for it's development.
>>>>>
>>>>> A completely different story will be when (if) we decide to use
>>>>> ovirt.js
>>>>> to
>>>>> develop some parts of the webadmin/userportal
>>>>> in javascript instead of GWT (or even rewrite the whole FE to JS)
which
>>>>> will be a big project (set of projects).
>>>>>
>>>>> If we want to be effective in that effort, we will need good tools.
>>>>>
>>>>>>
>>>>>> From my perspective I can't stress enough how important is
the
>>>>>> separation
>>>>>> of ovirt UI part from the backend. I agree to everything Vojtech
said
>>>>>> about
>>>>>> developing to the browser with java.
>>>>>>
>>>>>> Mooli.
>>>>>>
>>>>>> ----- Original Message -----
>>>>>>> ----- Original Message -----
>>>>>>>> From: "Vojtech Szocs"
<vszocs(a)redhat.com>
>>>>>>>> To: devel(a)ovirt.org
>>>>>>>> Sent: Monday, August 25, 2014 11:13:38 AM
>>>>>>>> Subject: [ovirt-devel] Tools for developing and building
oVirt.js
>>>>>>>> project
>>>>>>>>
>>>>>>>> Hi guys,
>>>>>>>>
>>>>>>>> last week, we had "oVirt.js PoC" session and I
mentioned the
>>>>>>>> possibility
>>>>>>>> of using Node.js and related tools like npm to develop
& build
>>>>>>>> oVirt.js
>>>>>>>> project.
>>>>>>>>
>>>>>>>> I'd like to hear your opinion - what do you think
about using
>>>>>>>> Node.js
>>>>>>>> in
>>>>>>>> context of developing & building JavaScript projects?
(oVirt.js
>>>>>>>> etc.)
>>>>>>>>
>>>>>>>> Obviously, I'm strongly biased towards Node.js
because of its
>>>>>>>> popularity
>>>>>>>> and therefore availability of various tools (npm
packages) for
>>>>>>>> JavaScript,
>>>>>>>> for example: grunt (task runner), jslint/hint (code
analyzer),
>>>>>>>> uglifyjs
>>>>>>>> (minify/compress), karma (both one-time & continuous
test runner),
>>>>>>>> traceur
>>>>>>>> (es6 -> es5 compiler), etc.
>>>>>>>>
>>>>>>>> My understanding is that any special-purpose JavaScript
development
>>>>>>>> tool
>>>>>>>> is typically implemented as module for Node.js (due to
its
>>>>>>>> popularity),
>>>>>>>> so I think it makes sense to use Node.js as a platform
for
>>>>>>>> JavaScript
>>>>>>>> development.
>>>>>>>>
>>>>>>>> There are also Java-based projects for JavaScript
(post)processing
>>>>>>>> like
>>>>>>>> wro4j, however these tend to be implemented by invoking
JS tools
>>>>>>>> (like
>>>>>>>> uglifyjs) from Java context via Rhino (JS engine for
Java), for
>>>>>>>> example:
>>>>>>>>
>>>>>>>>
https://code.google.com/p/wro4j/source/browse/wro4j-extensions/src/main/j...
>>>>>>>>
>>>>>>>> (To me, developing JavaScript project with Java-centric
tooling
>>>>>>>> sounds
>>>>>>>> quite strange in general.)
>>>>>>>>
>>>>>>>> There's also webjars repository for hosting popular
web resources
>>>>>>>> for
>>>>>>>> use in Java applications (i.e. Maven artifact for
uglifyjs etc.),
>>>>>>>> but
>>>>>>>> this is just for easier dependency management from Java
perspective
>>>>>>>> (JAR file as a distribution format for web resources):
>>>>>>>>
>>>>>>>>
http://www.webjars.org/
>>>>>>>>
>>>>>>>> Overall, I'm in favor of using Node.js to manage all
tasks related
>>>>>>>> to
>>>>>>>> JavaScript development and build process. If you have any
objections
>>>>>>>> or suggestions, I'd like to hear them!
>>>>>>>>
>>>>>>>> (I understand that Node.js essentially means new
dependency with all
>>>>>>>> implications, but in this case, I think it's worth
it. But this is
>>>>>>>> just me, so please share your opinions.)
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Vojtech
>>>>>>>
>>>>>>> I think most developers would agree that node.js is the tool
of
>>>>>>> choice
>>>>>>> for
>>>>>>> JavaScript development.
>>>>>>>
>>>>>>> The thing we must carefully consider is that node.js uses its
own
>>>>>>> package
>>>>>>> manager (npm -- much like maven), and unlike maven, tooling
does not
>>>>>>> yet
>>>>>>> exist to deal with npm packages in an rpm environment.
>>>>>>>
>>>>>>> This isn't on the same level as adding a logging library
or a
>>>>>>> collections
>>>>>>> library or something. I'd argue that dependencies
don't get any
>>>>>>> heavier
>>>>>>> than this one. That is worrisome to me.
>>>>>>>
>>>>>>> Run 'yum list available |grep nodejs' on your machine
to see which
>>>>>>> node.js
>>>>>>> packages are available. Note that I don't see karma or
uglify
>>>>>>> available
>>>>>>> in
>>>>>>> either Fedora or Red Hat SCL (Software Collections) [1].
>>>>>>>
>>>>>>> [1]
>>>>>>>
https://sochotni.fedorapeople.org/nodejs010-RHSCL-1-RHEL-6/Server/x86_64/...
>>>>>>>
>>>>>>> Greg
>>>>>>> _______________________________________________
>>>>>>> Devel mailing list
>>>>>>> Devel(a)ovirt.org
>>>>>>>
http://lists.ovirt.org/mailman/listinfo/devel
>>>>>>>
>>>>>> _______________________________________________
>>>>>> Devel mailing list
>>>>>> Devel(a)ovirt.org
>>>>>>
http://lists.ovirt.org/mailman/listinfo/devel
>>>>>>
>>>>> _______________________________________________
>>>>> Devel mailing list
>>>>> Devel(a)ovirt.org
>>>>>
http://lists.ovirt.org/mailman/listinfo/devel
>>>>>
>>>>
>>>>
>>>> --
>>>> Sandro Bonazzola
>>>> Better technology. Faster innovation. Powered by community
>>>> collaboration.
>>>> See how it works at
redhat.com
>>>> _______________________________________________
>>>> Devel mailing list
>>>> Devel(a)ovirt.org
>>>>
http://lists.ovirt.org/mailman/listinfo/devel
>>>>
>>
>>
>> --
>> Sandro Bonazzola
>> Better technology. Faster innovation. Powered by community collaboration.
>> See how it works at
redhat.com
>>
> _______________________________________________
> Devel mailing list
> Devel(a)ovirt.org
>
http://lists.ovirt.org/mailman/listinfo/devel
>
--
Sandro Bonazzola
Better technology. Faster innovation. Powered by community collaboration.
See how it works at