Sorry - I've just reread your reply again. In the case of the OBBond, it sounds like you think it would be useful for these to be in the public API. Maybe I should look through these functions a bit first.
- Noel On 2 June 2016 at 07:33, Noel O'Boyle <baoille...@gmail.com> wrote: > Hi Stefano, > > Short functions are good - I should really be better at this - but > there is no need to add all of your functions to the public API. From > what you say, it sounds like this was unintentional. In that case, is > it okay if I change things to remove these utility functions from the > public API? This will involve moving them from member functions of > OBAtom/OBBond to static functions, e.g. from OBAtom::IsXXXX() to > static OBAtom_IsXXXX(OBAtom*). Functionally everything should be the > same. > > Regards, > - Noel > > On 27 May 2016 at 19:47, Stefano Forli <fo...@scripps.edu> wrote: >> I welcome this discussion because it addresses some of the issues I had when >> starting contributing to the code. >> >> I'm partially responsible of several convenience functions (IsSulfoneOxygen, >> to name one :), and I would be happy to have a guideline to follow to deal >> with the issue. >> >> The rationale is: I've been schooled by experienced programmers to keep >> functions as simple as possible in order to limit bugs (like that rock band >> in which they paint their faces black and white). >> >> Prior to my patch, IsHbondAcceptor was just a handful of lines, and adding >> features made it grow to several 'pages' of source. Adding convenience >> functions was an attempt to improve code clarity and reduce chances of bugs. >> Although, I agree with Noel in terms of not creating ad-hoc functions which >> are used only once. If there's a way to group them together to keep them >> isolated from the main code (or not public?), I'm fine with it. >> I'm a big fan of generalizations over special cases. >> >> A similar thing is happening for the OBBond::IsEster function, but in this >> case I don't know how to deal with new features. >> I've tried fixing a possible bug and extend the functionalities, so the code >> went from 29 to 296 lines (including some documentation/comments). >> In order to cover all esters accordingly to IUPAC (and Wikipedia, of >> course), I ended up in writing extra functions that are called by IsEster >> itself, but can still be called independently: >> >> IsEster: >> ->IsPhosphateEster >> ->IsCarboxyEster >> ->IsThioEster >> >> As a consequence, the ABI would change too, and IsEster now could accept >> several extra boolean flags to deal with these extra features (before it >> accepted none). >> >> I think these extra functions could be considered convenience functions. In >> principle, the whole code could be in a single, larger function, which will >> have one well-defined behavior. >> >> Although, I think this would imply the inability to customize the behavior >> of IsEster, and limit the access to new features. >> >> In a possible scenario, a user could call IsEster(), and then write its own >> code to get discriminate between the different ester types. Since the >> function already did the job, why not make it available directly? >> >> I'm aware that this is a complex reply to what was a simple and well-posed >> point, but I would appreciate to have such aspects clarified to prevent bad >> coding practices to sneak in the project. >> >> It would be great if eventually such guidelines would land in a nice and >> small "Guidelines" page for OB developers and contributors. >> >> Thanks! >> >> S >> >> >> >> >> On 05/27/2016 08:24 AM, Noel O'Boyle wrote: >>> >>> I was just going to make the point that I'm not too keen on the >>> majority of the additions to OBAtom and OBMol, which appear to be >>> convenience functions. Consider IsSulfoneOxygen. There are a lot of >>> elements out there and a lot of functional groups; we should either >>> add them all or add none. If in the end, this function is absolutely >>> necessary, surely such convenience functions could live elsewhere >>> rather than being in the central classes of the library. >>> >>> I blame IsHydrogen() - it's a magnet for further "Is"s :-) >>> >>> - Noel >>> >>> On 23 May 2016 at 19:06, Geoffrey Hutchison <geoff.hutchi...@gmail.com> >>> wrote: >>>>> >>>>> >>>>> http://baoilleach.webfactional.com/site_media/ob_api_check/compat_report_21052016.html >>>>> It makes a few mistakes here and there but is accurate in general. >>>> >>>> >>>> It's a bit weird about adding optional parameters, e.g. >>>> bool Build(OBMol &mol); >>>> becomes >>>> bool Build(OBMol &mol, bool stereoWarnings = true); >>>> >>>> This isn't an API issue, since a program build to the first will still >>>> recompile. This is an ABI problem, but we've never been too concerned about >>>> that from 2.x to 2.y. >>>> >>>>> I have a few comments to make regarding some of the changes, but will do >>>>> that separately. >>>> >>>> >>>> I'm obviously interested in the feedback. It's also useful to make sure >>>> that source documentation was added. >>>> >>>> Thanks, >>>> -Geoff >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> What NetFlow Analyzer can do for you? Monitors network bandwidth and >>> traffic >>> patterns at an interface-level. Reveals which users, apps, and protocols >>> are >>> consuming the most bandwidth. Provides multi-vendor support for NetFlow, >>> J-Flow, sFlow and other flows. Make informed decisions using capacity >>> planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e >>> _______________________________________________ >>> OpenBabel-Devel mailing list >>> OpenBabel-Devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/openbabel-devel >>> >> >> -- >> >> Stefano Forli, PhD >> >> Assistant Professor of Integrative >> Structural and Computational Biology, >> Molecular Graphics Laboratory >> >> Dept. of Integrative Structural >> and Computational Biology, MB-112A >> The Scripps Research Institute >> 10550 North Torrey Pines Road >> La Jolla, CA 92037-1000, USA. >> >> tel: +1 (858)784-2055 >> fax: +1 (858)784-2860 >> email: fo...@scripps.edu >> http://www.scripps.edu/~forli/ ------------------------------------------------------------------------------ What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic patterns at an interface-level. Reveals which users, apps, and protocols are consuming the most bandwidth. Provides multi-vendor support for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using capacity planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e _______________________________________________ OpenBabel-Devel mailing list OpenBabel-Devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbabel-devel