On 09/25/2015 05:04 PM, Ole Ersoy wrote:
> Hi Thomas,
>
> On 09/25/2015 08:45 AM, Thomas Neidhart wrote:
>> Hi Ole,
>>
>> can you explain why you think that the addition of lombok brings any
>> benefit to our users?
> Sure - I'm looking at the LevenbergMarquardtOptimizer ATM, and it has
> the following set of parameters:
>
> /* configuration parameters */
> /** Positive input variable used in determining the initial step
> bound. */
> private final double initialStepBoundFactor;
> /** Desired relative error in the sum of squares. */
> private final double costRelativeTolerance;
> /** Desired relative error in the approximate solution parameters. */
> private final double parRelativeTolerance;
> /** Desired max cosine on the orthogonality between the function vector
> * and the columns of the jacobian. */
> private final double orthoTolerance;
> /** Threshold for QR ranking. */
> private final double qrRankingThreshold;
>
> And corresponding getters:
> /**
> * Gets the value of a tuning parameter.
> * @see #withInitialStepBoundFactor(double)
> *
> * @return the parameter's value.
> */
> public double getInitialStepBoundFactor() {
> return initialStepBoundFactor;
> }
>
> /**
> * Gets the value of a tuning parameter.
> * @see #withCostRelativeTolerance(double)
> *
> * @return the parameter's value.
> */
> public double getCostRelativeTolerance() {
> return costRelativeTolerance;
> }
>
> /**
> * Gets the value of a tuning parameter.
> * @see #withParameterRelativeTolerance(double)
> *
> * @return the parameter's value.
> */
> public double getParameterRelativeTolerance() {
> return parRelativeTolerance;
> }
>
> /**
> * Gets the value of a tuning parameter.
> * @see #withOrthoTolerance(double)
> *
> * @return the parameter's value.
> */
> public double getOrthoTolerance() {
> return orthoTolerance;
> }
>
> /**
> * Gets the value of a tuning parameter.
> * @see #withRankingThreshold(double)
> *
> * @return the parameter's value.
> */
> public double getRankingThreshold() {
> return qrRankingThreshold;
> }
>
> Lombok will generate all of these. Eclipse can do the same thing, but
> if we delete one of the parameters, then the corresponding getter also
> has to be deleted. Also Lombok cuts down on the source code noise,
> since it is a byte code generator. The generated code does not appear
> in the source.
>
> Lombok also has a @Builder annotation that can be used to generate a
> inner static builder class that provides a fluent construction API. So
> if we break off the LevenbergMarquardtOptimizer configuration into its
> own class, and generate all the getters and the fluid API, there should
> be substantial code reduction.
>
> Gilles is also working on a snapshot capability for neural nets, and the
> @Synchronized annotation could come in handy here. These are the items
> I have looked at so far.
>
>>
>> >From my point of view, lombok can help developers by taking over some
>> tedious tasks, but this is quite irrelevant in the case of CM as the
>> majority of work goes into algorithm design and verification rather
>> than in
>> writing getters/setters (which btw has pretty good IDE support).
>
> I agree that the majority of time goes into the design of the
> algorithm. For me personally, when I'm looking at code, and it has a
> ton of boilerplate, it does slow my productivity...just because of all
> the noise. I'm happy once I've gotten it as DRY as possible.
>
> The more boilerplate, the more reluctant we are going to be to undertake
> refactoring, and we will make more mistakes (At least I will :) ).
>
>> So this
>> would just add additional complexity and the gain is very unclear.
> I think you will find it refreshing once you try it. At this point
> though I just wanted to float the idea. I'll complete the experiment
> and publish the result. At that point we will have a good baseline to
> gage whether adding it will add enough value to offset the cost of
> adding it.
Well I know lombok.
Keep in mind that it is a bit more difficult to integrate it into our
build-chain. As you probably know, in order to generate proper javadoc,
you need to use delombok first to create source files which can be used
for the javadoc process.
In general I do not think that lombok is the right tool for a library
like CM, and I do not know any other library that uses lombok. It
certainly has strengths and uses for application development though.
Thomas
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]