This is excellent feedback!
1) I agree Incanter would benefit from being more modular, and I am
interested in any further ideas you have on making it happen.
I think you correctly identified the issue; is Incanter an application
or a set of libraries? Up to now, I have developed it as an
application because that is what R is, and that is how I use it. But
an obvious advantage of using Clojure, instead of R, is because it is
a better language for general application development, and this
requires Incanter to be a set of libraries and not an application. I
obviously want it to be both :)
2) The chart functions are macros, so that they can use the
expressions passed to them (without evaluation) as the default chart
labels; this is based on the behavior from R.
3) I'm all for additional flexibility in the data structures that can
be passed to the chart functions.
4) Hmm, Integrating the Apache Commons-math is a bit tricky. It was
the underlying numeric library in an earlier incarnation of Incanter.
It does have some nice functionality but it was slow compared to Colt
and was missing some features I needed. Seamlessly supporting both
libraries might work, except in the case of matrices, which are Colt
matrix objects. Conversion would be required for any Apache Commons
function with a matrix argument.
And then you have a dependency on two numeric libraries, unless you
modularize it so that you have two slightly incompatible stats
libraries each depending on either Apache Commons or Parallel Colt. I
think a strong argument would have to be made for the benefits of
Apache Commons-math before I thought that was worthwhile.
Overall, I think most of the changes you're recommending are not only
good, but necessary, and I look forward to working with you to make
them happen.
David
P.S. Congratulations on Flightcaster, it is awesome!
Brad,
This is excellent feedback!
1) I agree Incanter would benefit from being more modular, and I am
interested in any further ideas you have on making it happen.
I think you correctly identified the issue; is Incanter an application
or a set of libraries? Up to now, I have developed it as an
application because that is what R is, and that is how I use it. But
an obvious advantage of using Clojure, instead of R, is because it is
a better language for general application development, and this
requires Incanter to be a set of libraries and not an application. I
obviously want it to be both :)
2) The chart functions are macros, so that they can use the
expressions passed to them (without evaluation) as the default chart
labels; this is based on the behavior from R.
3) I'm all for additional flexibility in the data structures that can
be passed to the chart functions.
4) Hmm, Integrating the Apache Commons-math is a bit tricky. It was
the underlying numeric library in an earlier incarnation of Incanter.
It does have some nice functionality but it was slow compared to Colt
and was missing some features I needed. Seamlessly supporting both
libraries might work, except in the case of matrices, which are Colt
matrix objects. Conversion would be required for any Apache Commons
function with a matrix argument.
And then you have a dependency on two numeric libraries, unless you
modularize it so that you have two slightly incompatible stats
libraries each depending on either Apache Commons or Parallel Colt. I
think a strong argument would have to be made for the benefits of
Apache Commons-math before I thought that was worthwhile.
Overall, I think most of the changes you're recommending are not only
good, but necessary, and I look forward to working with you to make
them happen.
David
P.S. Congratulations on Flightcaster, it is awesome!
Okay then, so you're going to drag me into the world of Maven?! I'll
try not to kick and scream too much :) -- I suppose it is time I
learn it.
>
> I can work on this - I created a brank on github to work on it already.
> What is your typical workflow for git? How should I submit changes for
> review?
Just submit a pull request when you're ready.
> Let the hacking commence!
>
Sounds great!
David
Okay then, so you're going to drag me into the world of Maven?! I'll
> Agree. The easiest way to do this is use something like clojure-pom and
> modularize the project so we can build (and depend on) individual targets or
> build and package "all" (application style.)
try not to kick and scream too much :) -- I suppose it is time I
learn it.