From: John M. <jo...@eb...> - 2013-04-12 12:22:22
|
Hi All, How would you feel about adding guava to CDK? https://code.google.com/p/guava-libraries/ I use this in every other projects as the utilities it provides are extremely useful and make life a lot easier. In fact some of features them have been ported to java 7 and more will be in java 8. If you already use it, then you already know how awesome it is. If not, here are some of the features I think make it worth it. They explain all the features here: https://code.google.com/p/guava-libraries/wiki/GuavaExplained Argument checking, > if(arg == null) > thrown new NullPointerException("argument require"); Can be inlined > public Element(String symbol, Integer atomicNumber) { > this.symbol = checkNotNull(symbol, "no symbol"); // throws NPE if null > this.atomicNumber = checkNotNull (atomicNumber, "no atomic number"); > } You can also check argument values > checkArugment("C".equals(symbol), "symbol was not carbon"); // throws IllegalArgumentEx if false Correct hash size, if I want 100 item hash new HashMap(100); is incorrect as you need to allow space for collision. If you give the java HashMap a size of 100 it will resize once it hits 75% full, that's an entire rehash! > int n =container.getAtomCount(); > Map<IAtom,Interger> indexMap = Maps.newHashMapWithExpectedSize(n); Primitive utilities - much nicer handling of pimitives > Ints.asList(new int[0]); > Ints.compare(u, v); > int[] arr = Int.toArray(List<Interger> xs) Multimap, key->collection maps are very common > Multimap<Interger,IAtom> map = Maps.newHashMultimap(); functions and predicate - okay well this only really makes sense with immutable values but you as an example one could wrap the fingerprints in a function and apply it to a collection > Function<IAtomContainer,BitSet> fp = …; > List<IAtomContainer> containers … > List<BitSet> fps = Collections2.transform(containers, fp); FluentIterable - really nice iterator handling: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/FluentIterable.html Thoughts? Thanks, J |
From: Rajarshi G. <raj...@gm...> - 2013-04-12 13:00:39
|
I'd support this. Guava is pretty handy in my experience On Fri, Apr 12, 2013 at 8:22 AM, John May <jo...@eb...> wrote: > Hi All, > > How would you feel about adding guava to CDK? > https://code.google.com/p/guava-libraries/ > > I use this in every other projects as the utilities it provides are > extremely useful and make life a lot easier. In fact some of features them > have been ported to java 7 and more will be in java 8. > > If you already use it, then you already know how awesome it is. If not, > here are some of the features I think make it worth it. They explain all > the features here: > https://code.google.com/p/guava-libraries/wiki/GuavaExplained > > Argument checking, > > if(arg == null) > > thrown new NullPointerException("argument require"); > > > Can be inlined > > public Element(String symbol, Integer atomicNumber) { > this.symbol = checkNotNull(symbol, "no symbol"); // throws > NPE if null > > this.atomicNumber = checkNotNull (atomicNumber, "no atomic > number"); > } > > > You can also check argument values > > checkArugment("C".equals(symbol), "symbol was not carbon"); // throws > IllegalArgumentEx if false > > > Correct hash size, if I want 100 item hash new HashMap(100); is incorrect > as you need to allow space for collision. If you give the java HashMap a > size of 100 it will resize once it hits 75% full, that's an entire rehash! > > int n =container.getAtomCount(); > > Map<IAtom,Interger> indexMap = Maps.newHashMapWithExpectedSize(n); > > > Primitive utilities - much nicer handling of pimitives > > Ints.asList(new int[0]); > > Ints.compare(u, v); > > int[] arr = Int.toArray(List<Interger> xs) > > > Multimap, key->collection maps are very common > > Multimap<Interger,IAtom> map = Maps.newHashMultimap(); > > > functions and predicate - okay well this only really makes sense with > immutable values but you as an example one could wrap the fingerprints in a > function and apply it to a collection > > Function<IAtomContainer,BitSet> fp = …; > > List<IAtomContainer> containers … > > List<BitSet> fps = Collections2.transform(containers, fp); > > > FluentIterable - really nice iterator handling: > > http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/FluentIterable.html > > Thoughts? > > Thanks, > J > > > ------------------------------------------------------------------------------ > Precog is a next-generation analytics platform capable of advanced > analytics on semi-structured data. The platform includes APIs for building > apps and a phenomenal toolset for data science. Developers can use > our toolset for easy data analysis & visualization. Get a free account! > http://www2.precog.com/precogplatform/slashdotnewsletter > _______________________________________________ > Cdk-devel mailing list > Cdk...@li... > https://lists.sourceforge.net/lists/listinfo/cdk-devel > > -- Rajarshi Guha | http://blog.rguha.net NIH Center for Advancing Translational Science |
From: Egon W. <ego...@gm...> - 2013-04-14 15:19:17
|
On Fri, Apr 12, 2013 at 2:22 PM, John May <jo...@eb...> wrote: > How would you feel about adding guava to CDK? > https://code.google.com/p/guava-libraries/ I have mixed feelings: - the API is cool - the size is not (2.1MB) which is a killer for the JChemPaint applet - the license is OK, but formally incompatible with LGPL 2.1 - Debian/Ubuntu has it packaged, but only an older version 11 [0] Where do you want to introduce it, i.e. what modules? Egon 0.http://packages.debian.org/libguava-java -- Dr E.L. Willighagen Postdoctoral Researcher Department of Bioinformatics - BiGCaT Maastricht University (http://www.bigcat.unimaas.nl/) Homepage: http://egonw.github.com/ LinkedIn: http://se.linkedin.com/in/egonw Blog: http://chem-bla-ics.blogspot.com/ PubList: http://www.citeulike.org/user/egonw/tag/papers |
From: John M. <joh...@gm...> - 2013-04-14 17:35:58
|
True, > - the size is not (2.1MB) which is a killer for the JChemPaint applet Doesn't the build strip out the classes it doesn't need via a compression step? > - the license is OK, but formally incompatible with LGPL 2.1 yep, as with commons-math3 - as discussed previously we should to update to 3.1. > - Debian/Ubuntu has it packaged, but only an older version 11 [0] ? > Where do you want to introduce it, i.e. what modules? All over the place - it's hard to describe but once you've used it you really miss it. It really does have so much which should be in the JDK already. I'm fine not to include it but I find it makes writing correct code easier, more concise with less boiler plate. J On 14 Apr 2013, at 16:18, Egon Willighagen <ego...@gm...> wrote: > On Fri, Apr 12, 2013 at 2:22 PM, John May <jo...@eb...> wrote: >> How would you feel about adding guava to CDK? >> https://code.google.com/p/guava-libraries/ > > I have mixed feelings: > > - the API is cool > - the size is not (2.1MB) which is a killer for the JChemPaint applet > - the license is OK, but formally incompatible with LGPL 2.1 > - Debian/Ubuntu has it packaged, but only an older version 11 [0] > > Where do you want to introduce it, i.e. what modules? > > Egon > > 0.http://packages.debian.org/libguava-java > > -- > Dr E.L. Willighagen > Postdoctoral Researcher > Department of Bioinformatics - BiGCaT > Maastricht University (http://www.bigcat.unimaas.nl/) > Homepage: http://egonw.github.com/ > LinkedIn: http://se.linkedin.com/in/egonw > Blog: http://chem-bla-ics.blogspot.com/ > PubList: http://www.citeulike.org/user/egonw/tag/papers > > ------------------------------------------------------------------------------ > Precog is a next-generation analytics platform capable of advanced > analytics on semi-structured data. The platform includes APIs for building > apps and a phenomenal toolset for data science. Developers can use > our toolset for easy data analysis & visualization. Get a free account! > http://www2.precog.com/precogplatform/slashdotnewsletter > _______________________________________________ > Cdk-devel mailing list > Cdk...@li... > https://lists.sourceforge.net/lists/listinfo/cdk-devel |
From: Egon W. <ego...@gm...> - 2013-04-14 21:07:06
|
On Sun, Apr 14, 2013 at 7:35 PM, John May <joh...@gm...> wrote: >> - the size is not (2.1MB) which is a killer for the JChemPaint applet > > Doesn't the build strip out the classes it doesn't need via a compression step? I do not know the absolute minimum of Guava classes it could work with. I never found that this stripping does a good enough job. Well, there are many things to adding dependencies... e.g. it will probably also make it harder to autoconvert CDK things into JavaScript... But maybe we should not care... >> - the license is OK, but formally incompatible with LGPL 2.1 > > yep, as with commons-math3 - as discussed previously we should to update to 3.1. We probably should. That would involve ensuring that all source code is "2.1 or higher", and if not, ask respective authors to make it such. When that is done, we can move. >> - Debian/Ubuntu has it packaged, but only an older version 11 [0] > > ? We are not the only people distributing the CDK; so does Ubuntu and Debian. We should not make their lives harder than needed :) >> Where do you want to introduce it, i.e. what modules? > > All over the place - it's hard to describe but once you've used it you really miss it. It really does have so much which should be in the JDK already. I'm fine not to include it but I find it makes writing correct code easier, more concise with less boiler plate. Point taken. Bottom line is: discuss with Christoph how hard to need a trimmed down JChemPaint applet... if he is happy, then I am. Egon -- Dr E.L. Willighagen Postdoctoral Researcher Department of Bioinformatics - BiGCaT Maastricht University (http://www.bigcat.unimaas.nl/) Homepage: http://egonw.github.com/ LinkedIn: http://se.linkedin.com/in/egonw Blog: http://chem-bla-ics.blogspot.com/ PubList: http://www.citeulike.org/user/egonw/tag/papers |