On Mon, Nov 25, 2013 at 1:50 PM, Emmanuel Bourg <ebo...@apache.org> wrote: > Hi Damjan,
Hi Emmanuel > I reviewed the API, here are my observations: Thank you. Firstly, we discussed several options before for the 1.0 release, and agreed that the contents of trunk would be quickly pushed out as 1.0 with minimal changes (many/most users are using 1.0-SNAPSHOT), and then the big API redesign would be 2.0. I've also been thinking of doing a complete rewrite for 2.0 and only pulling in some of the good bits we have now. So it's extremely discouraging to be pushed for more and more changes, many of which will have no post-1.x value, and don't even fit in with what was originally agreed on. > - Would that make sense to move the LZM implementation to commons-compress? I think you mean LZW, and let's discuss that on COMPRESS-243. > - What is the purpose of CachingInputStream and CachingOutputStream, > there is no Javadoc on these classes. Could they be merged into commons-io? It looks like CachingInputStream is used by IccProfileParser, and appears to be used to store data that has been read from the underlying stream so it can be re-read later. You can copy it to commons-io, but I'd prefer not having a runtime dependency on it. And it's ByteSourceInputStream you really want in commons-io and/or commons-compress, a gem that allows seeking over an InputStream. > - Why is ZLibUtils in org.apache.commons.imaging.common instead of > org.apache.commons.imaging.util ? The whole org.apache.commons.imaging.util package is a bit dated. > - FastByteArrayOutputStream is only used by PackBits in the same > package, it could be made package private. Yes. > - BitArrayOutputStream in org.apache.commons.imaging.common is only used > by classes in org.apache.commons.imaging.common.itu_t4. It could be > moved into this package and made package private. Yes. > - There are several unused public methods in BinaryInputStream Yes. > - org.apache.commons.imaging.common.Compression is never used I imagine the idea was to use it instead of using the different compression classes directly, but whoever started writing it never finished. > - RgbBufferedImageFactory is only used in RoundtripTest, should this be > moved with the test sources? Was probably meant to be the way to create all images in the API, but again never got finished, and is probably wrong now since some image formats produce paletted images. > - SimpleBufferedImageFactory is only used by ImageParser and could be > made package private. And bears suspiciously high resemblance to RgbBufferedImageFactory. > - What about replacing org.apache.commons.imaging.common.ByteOrder with > java.nio.ByteOrder? Enum vs public static final, hmm. > - Several methods in BinaryFunctions have an unused 'name' parameter. Sometimes it's used to form exception text. > - UnicodeUtils is only used by PngWriter and could be made package > private. Considering that any byte sequence is a valid ISO-8859-1 string > this class could also be removed. Yes. > - Why does RationalNumberUtilities extend Number? And shouldn't this > class be named RationalNumberUtils for consistency with the other *Utils > classes? I think the class could simply be merged into RationalNumber. Merging seems best. > - There are several unused methods in ColorTools, I don't know if they > are actually useful and are just missing a unit test. Not sure. > - ZigZag is only used in JpegDecoder and could be made package private Yes. > - The public permissive field in JpegImageParser is never used Yes. > - The public Attribute_Tag field in TiffField is never used Yes. > - Some public static final constants don't have an uppercased name, I > fixed them on the trunk Thank you, but that probably broke compatibility for 1.0-SNAPSHOT users, so now we have to release RC7 as 1.0 :-). > - The PixelParser classes in > org.apache.commons.imaging.formats.bmp.pixelparsers seems to be used > only internally by BmpImageParser. They can't be made package private > but could at least be excluded from the Javadoc. Hidden Javadocs don't hide packages from IDE code completion. There is only 2 choices w.r.t. packages: keeping everything in one package to hide internal classes by giving them package private access, and keeping classes in different packages to better structure code but then having to make them public as a result (and choice 3, a pipe dream, use OSGi and don't export the packages with internal classes). Maybe a public factory method in a public base class returning package-private subclasses would work? > - Same comment for org.apache.commons.imaging.formats.bmp.writers > > - The Dct, JpegInputStream and YCbCrConverter classes in > org.apache.commons.imaging.formats.jpeg.decoder are only used internally > by JpegDecoder and could be made package private. Yes. YCbCrConverter could also be moved into ColorConversions, but I also think there's better ways to write it than the massive lookup tables I used. > - What about moving the methods in ColorConversions into the respective > Color classes? For example, ColorConversions.convertCIELuvtoXYZ() could > become ColorCieLuv.toXYZ(). Another idea would be to use a fluent > interface to perform the conversions. Something like > ColorConverter.fromRGB(r, g, b).toHSL(). Maybe the former. Some of these conversions are lossy, and there is no standard canonical color format that fromRGB() could return, so I'm not sure you want to chain them. Also color conversions are also done per pixel, so they're performance critical, and 2 method calls, 2 format conversions, and potentially an extra memory allocation in fromRGB(), are going to be very slow. Already I think those methods should be made to operate on reusable rewritable pre-allocated objects they get passed in, not allocate and return a new object per pixel. > > I haven't reviewed everything yet, but I have the feeling the public API > could be better polished to remove unused or internal stuff that are > probably not useful for the end users. Yes, there's plenty more. But users are begging for a 1.0 release, not higher API standards. Thank you again for the review - it will all get fixed or replaced at some stage. Finally, please remember: 1.0 releases are usually the ones that never work :-). > Emmanuel Bourg Damjan > Le 24/11/2013 17:54, Damjan Jovanovic a écrit : >> Please vote on releasing commons-imaging 1.0 from RC7. >> >> Last failed vote was for RC5, RC6 had a bust POM. Many improvements >> were made since: >> * PMD configured better and all PMD warnings fixed, the ones remaining >> now are bugs in PMD itself. >> * Test coverage greatly improved in many areas, only a few packages >> now have < 50% coverage, and that's due to obscure TIFF photometric >> interpreters and PSD data parsers that require special images to test >> which Imaging can't itself generate, a massive barely used >> semi-obsolete Debug class that drags down coverage for >> org.apache.commons.imaging.util, and areas of code I don't understand >> and so can't easily test (ICC, PSD). While improving test coverage, I >> also found and fixed 2 bugs. >> * Added package-level Javadoc for image formats. >> * RAT exclusions for text-based images, and made a single info.txt >> with image formation for all images and added a license header to it. >> * Fixed Jacoco configuration in the POM and started using it instead >> of that 40+ minute Cobertura nonsense. >> * Fixed website broken links. >> * Also started assembling a list of why making releases is such a >> pain, email coming later :). >> >> Imaging 1.0 RC7 is available here: >> https://dist.apache.org/repos/dist/dev/commons/imaging/ (SVN revision 3671) >> >> Maven artifacts: >> https://repository.apache.org/content/repositories/staging/org/apache/commons/commons-imaging/ >> >> Change log(s): >> https://dist.apache.org/repos/dist/dev/commons/imaging/RELEASE-NOTES.txt >> http://people.apache.org/~damjan/imaging-1.0-RC7/changes-report.html >> http://people.apache.org/~damjan/imaging-1.0-RC7/jira-report.html >> >> Tag: >> https://svn.apache.org/repos/asf/commons/proper/imaging/tags/IMAGING_1_0_RC7 >> (SVN revision 1544953) >> >> Site: >> http://people.apache.org/~damjan/imaging-1.0-RC7/ >> >> KEYS: >> http://www.apache.org/dist/commons/KEYS >> >> I have tested it with OpenJDK 6 on FreeBSD 9.1. >> >> Please review and vote. This vote will close no sooner than 72 hours >> from now, on Wednesday 27 November 2013 at 19:00 GMT. >> >> [ ] +1 Release these artifacts >> [ ] +0 OK, but... >> [ ] -0 OK, but really should fix... >> [ ] -1 I oppose this release because... >> >> Thank you! >> >> Damjan Jovanovic >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org