<div dir="ltr">Hi Melissa &amp; everyone,<br><div class="gmail_extra"><br></div><div class="gmail_extra">Thank you for replying to my suggestion. I appreciate the discussion.</div><div class="gmail_extra"><br></div><div class="gmail_extra">


<div class="gmail_extra">&gt; Note that we&#39;ve previously (and relatively recently) put quite a bit<br></div><div><div>&gt; of effort into getting the OME-XML code and specification into</div><div>&gt; bioformats.git.</div>


</div><div><br></div><div>Yes, you might recall that I am the one who did most of that work. ;-) [1]</div><div><br></div><div>And I would be willing to do it again, if it meant a cleaner build system. (Though splitting subtrees is much less complicated.)</div>


<div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra"><div class="gmail_extra">&gt; If we were to follow this proposal, and unless I misunderstand, then</div><div class="gmail_extra">&gt; making one simple change in the OME-XML schema (e.g. changing a single</div>


<div class="gmail_extra">&gt; field type) would require:</div><div><br></div><div>Well, I think specification and ome-xml should live in the same repository.</div><div><br></div><div>So it would require:</div>
<div>- filing a PR into the specification repo (ome-xml.git in my proposal)</div><div>- cutting a new ome-xml release artifact</div><div>- filing a PR into bioformats.git to update the version of ome-xml</div>
<div><br></div><div>So, two PRs instead of one. (As Mark said, scifio.git doesn&#39;t depend on ome-xml.) But the schema and ome-xml code doesn&#39;t change nearly as often as Bio-Formats does, of course.</div>
<div><br></div><div>Still, I can appreciate how two PRs might be undesirable (believe me; you know how much I hate the develop/dev_4_4 split :-). To avoid that, you could keep specification &amp; ome-xml &amp; bio-formats in the same git repository as they are now, while still using separate versioning per component. This would provide on target for PRs, while making it much simpler for most people to build Bio-Formats thanks to remote release dependency resolution of Maven/Ivy/etc.</div>


<div><br></div><div><div>&gt; Our policy so far has been to release everything at once; I think it<br></div><div><div>&gt; would make more sense to agree first whether that should be changed,</div><div>&gt; and then consider solutions.  I personally do favor having everything</div>


<div>&gt; be released at once, as it makes keeping track of version numbers</div><div>&gt; (mentally and when supporting users) much easier.</div><div><br></div><div>Indeed, my proposal hinges on the idea that everything should actually not be released at once -- that many of these are separate projects, which are A) useful in their own right, outside an OMERO-specific context; and B) developed at a much different pace than one another, resulting in gratuitous/unnecessary/confusing releases when all continue to be versioned together. [2]</div>


<div><br></div><div><div>&gt; I understand the desire for smarter autogeneration, but I think that</div><div>&gt; would be much better accomplished within our existing build systems,</div><div>&gt; rather than fragmenting the codebase.</div>


<div><br></div><div>I do not see it as one codebase, but rather several projects which all currently happen to be lumped into one repository with a single release schedule imposed upon them. Right now, all of these project releases are dictated by the OMERO release schedule [3]. The OME team is ramping up for the OMERO 5 release, and presumably a Bio-Formats 5 release will go along with that. But what is really so radically new in Bio-Formats 5? Nothing, I would argue. Now, e.g., an extensible SCIFIO-based Bio-Formats would justify a 5.0.0 release. But instead, I am sad to see Bio-Formats versions that have little semantic meaning [4] with respect to Bio-Formats itself, all because of the simultaneous top-down release schedule driven by the OMERO project.</div>


<div><br></div><div>Instead, my proposal emphasizes the individual projects as useful to the community and the world in their own right. For example, MDB Tools Java is not available anywhere else to my knowledge [5], since we rescued it from an obscure forum post. Wouldn&#39;t it be a wonderful service to the community to post it to its own Git repository on GitHub, so that it is easy to find, and the greater community (beyond just those interested in OME) might contribute back?</div>


<div><br></div><div>I understand I am proposing a substantial change. It is certainly about more than just improving the code generation process. That&#39;s why I changed the subject. And I understand the reluctance to change anything that might disrupt current development processes. But in this case, I think the change would be well worth it to make the OME projects into even better members of the global FOSS community.</div>


<div><br></div><div></div></div><div>Regards,</div><div>Curtis</div></div></div></div><div><br></div><div>[1] <a href="http://trac.openmicroscopy.org.uk/ome/ticket/10435#comment:8" target="_blank">http://trac.openmicroscopy.org.uk/ome/ticket/10435#comment:8</a></div>


</div><div class="gmail_extra"><br></div><div class="gmail_extra" style>[2] One quick example of how the gratuitous releases cause problems: whenever I update Bio-Formats using the ImageJ updater, it notices that several of the JARs actually have no functional changes, and does not alter the version number of the JAR files. Yes, we could potentially fix this in the updater, but wouldn&#39;t it make more sense to simply not make vacuous releases in the first place?</div>

<div class="gmail_extra"><br></div><div class="gmail_extra" style>[3] Note that we are not even that consistent, since there are several other projects we develop like native-lib-loader which are *not* synchronized with the OMERO/Bio-Formats version. This works just fine, since we treat those projects as external dependencies. The same thing would work fine for the components/forks, components/stubs and ome-xml.</div>

<div class="gmail_extra"><br></div><div class="gmail_extra" style>[4] ImageJ2 and SCIFIO are now using SemVer, which conveys useful information in the version number: <a href="http://semver.org/">http://semver.org/</a></div>

<div class="gmail_extra"><br></div><div class="gmail_extra">[5] Well, potentially this: <a href="http://jackcess.sourceforge.net/" target="_blank">http://jackcess.sourceforge.net/</a></div><div class="gmail_extra"><br></div>

<div class="gmail_extra"><br></div><div class="gmail_quote">
On Tue, Jun 11, 2013 at 12:52 PM, Melissa Linkert <span dir="ltr">&lt;<a href="mailto:melissa@glencoesoftware.com" target="_blank">melissa@glencoesoftware.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi Curtis,<br>
<div><br>
&gt; That said, I think Bio-Formats would greatly benefit from substantial<br>
&gt; modularization of components. We are realizing this with SCIFIO, and I<br>
&gt; think it applies to the OME-XML component as well.<br>
&gt;<br>
&gt; Below, I will lay out what I think is a better structure for the build<br>
&gt; system, which would result in more advantages and less pain than with the<br>
&gt; current structure.<br>
</div>...<br>
<div>&gt; MetadataStore, MetadataRetrieve, etc., would move to the ome-xml component,<br>
&gt; keeping all generated code together.<br>
&gt;<br>
&gt; One Git repository for each of:<br>
&gt;<br>
&gt; - SCIFIO (<a href="https://github.com/scifio/scifio" target="_blank">https://github.com/scifio/scifio</a>)<br>
&gt; - OME-XML (<a href="https://github.com/openmicroscopy/ome-xml" target="_blank">https://github.com/openmicroscopy/ome-xml</a>)<br>
&gt; - Bio-Formats (<a href="https://github.com/openmicroscopy/bioformats" target="_blank">https://github.com/openmicroscopy/bioformats</a>)<br>
&gt; - Fork: Apache POI (<a href="https://github.com/openmicroscopy/ome-poi" target="_blank">https://github.com/openmicroscopy/ome-poi</a>)<br>
&gt;  -- change package prefix to avoid third party code collisions<br>
&gt; - Fork: MDB Tools Java (<a href="https://github.com/openmicroscopy/ome-mdb-tools" target="_blank">https://github.com/openmicroscopy/ome-mdb-tools</a>)<br>
&gt;  -- change package prefix to avoid third party code collisions<br>
&gt; - Fork: JAI Image I/O (<a href="https://github.com/scifio/scifio-jai-image-io" target="_blank">https://github.com/scifio/scifio-jai-image-io</a>)<br>
&gt;  -- change package prefix to avoid third party code collisions<br>
&gt; - Stub: LWF (<a href="https://github.com/scifio/lwf-stubs" target="_blank">https://github.com/scifio/lwf-stubs</a>)<br>
<br>
</div>What you and Mark do for your work on SCIFIO is up to you, but I would<br>
be extremely hesitant to do something like this for Bio-Formats itself.<br>
Spreading one codebase across 7 different repositories is at best<br>
invasive, and would have a substantial impact upon anyone who routinely<br>
works on Bio-Formats.<br>
<div><br>
&gt; In other words, OME-XML gets its own Git repository, which includes all the<br>
&gt; code generated code. Each fork and stub also has its own repository in the<br>
&gt; relevant namespace.<br>
<br>
</div>Note that we&#39;ve previously (and relatively recently) put quite a bit of<br>
effort into getting the OME-XML code and specification into bioformats.git.<br>
<div><br>
&gt; Dependencies between repositories would be done by release version<br>
&gt; coupling. For Maven projects (i.e., SCIFIO), simply making releases and<br>
&gt; using release dependencies would be sufficient to facilitate repeatable<br>
&gt; builds. For Ant-based projects (i.e., stuff in openmicroscopy namespace),<br>
&gt; release JARs would continue to be committed to the repository as they are<br>
&gt; now, or they could be resolved remotely via Ivy or similar.<br>
<br>
</div>I don&#39;t agree that doing that makes things easier.  If we were to follow<br>
this proposal, and unless I misunderstand, then making one simple change in<br>
the OME-XML schema (e.g. changing a single field type) would require:<br>
<br>
  - a pull request into whichever repository houses the specification<br>
    (currently bioformats.git)<br>
  - creation of &quot;release&quot; artifacts from whichever repository houses the<br>
    specification<br>
  - a pull request into ome-xml.git (to update the autogenerated code)<br>
  - creation of release JARs from ome-xml.git<br>
  - a pull request into scifio.git (to update SCIFIO readers)<br>
  - creation of release JARs from scifio.git<br>
  - a pull request into bioformats.git (to update Bio-Formats readers)<br>
<br>
...instead of what we have now, which is a single pull request into<br>
bioformats.git.<br>
<div><br>
&gt; This would making building Bio-Formats much simpler and faster. As Roger<br>
&gt; pointed out, we do not really need to code generate the OME-XML stuff on<br>
&gt; every build, but rather only when the schema changes. Of course, the<br>
&gt; OME-XML component contains other code which would be subject to change<br>
&gt; between schema releases, but that&#39;s fine.<br>
<br>
</div>I understand the desire for smarter autogeneration, but I think that<br>
would be much better accomplished within our existing build systems,<br>
rather than fragmenting the codebase.<br>
<div><br>
&gt; This more modular structure would also facilitate these components being<br>
&gt; developed on separate release cycles. The forks and stubs rarely change and<br>
&gt; do not need to be released with every OME release. And the OME-XML project<br>
&gt; could be released along side schema changes (i.e., twice a year) rather<br>
&gt; than with every OME release.<br>
<br>
</div>Our policy so far has been to release everything at once; I think it<br>
would make more sense to agree first whether that should be changed, and<br>
then consider solutions.  I personally do favor having everything be<br>
released at once, as it makes keeping track of version numbers (mentally<br>
and when supporting users) much easier.<br>
<br>
Again, what you do with respect to <a href="http://github.com/scifio/scifio" target="_blank">http://github.com/scifio/scifio</a> is up<br>
to you.  Doing this for Bio-Formats itself would have a non-trivial impact<br>
on every single OME team member and a large portion of the developer community,<br>
and as such I think it would be better to consider other options for<br>
making autogeneration easier.<br>
<br>
Regards,<br>
-Melissa<br>
<div><div><br>
On Mon, Jun 10, 2013 at 10:50:25AM -0500, Curtis Rueden wrote:<br>
&gt; Hi Roger &amp; everyone,<br>
&gt;<br>
&gt; Sorry for the delay in reply. After spending the last couple of weeks on<br>
&gt; ImageJ build issues related to native code components (specifically, the<br>
&gt; ImageJ launcher in C), I have some new perspective on the new code<br>
&gt; generation of the Bio-Formats build system.<br>
&gt;<br>
&gt; First of all, I want to say thanks to Roger for solving the build for both<br>
&gt; Ant and Maven. I know maintaining the dual build systems can be substantial<br>
&gt; extra work. But I think the Maven system has many advantages, so I am happy<br>
&gt; it is being maintained.<br>
&gt;<br>
&gt; That said, I think Bio-Formats would greatly benefit from substantial<br>
&gt; modularization of components. We are realizing this with SCIFIO, and I<br>
&gt; think it applies to the OME-XML component as well.<br>
&gt;<br>
&gt; Below, I will lay out what I think is a better structure for the build<br>
&gt; system, which would result in more advantages and less pain than with the<br>
&gt; current structure.<br>
&gt;<br>
&gt; &gt; One thing which might be an issue is that while xsd-fu generates the<br>
&gt; &gt; ome-xml model code, which could potentially be downloaded, it also<br>
&gt; &gt; generates all the MetadataStore, MetadateRetrieve and all the other<br>
&gt; &gt; Metadata-related classes in scifio, including OMEXMLMetadataImpl.<br>
&gt; &gt; Given that these are paired with the generated model code, generating<br>
&gt; &gt; one and downloading the other may result in breakage on model changes,<br>
&gt; &gt; or changes in xsd-fu or the templates which change the generated code.<br>
&gt;<br>
&gt; MetadataStore, MetadataRetrieve, etc., would move to the ome-xml component,<br>
&gt; keeping all generated code together.<br>
&gt;<br>
&gt; One Git repository for each of:<br>
&gt;<br>
&gt; - SCIFIO (<a href="https://github.com/scifio/scifio" target="_blank">https://github.com/scifio/scifio</a>)<br>
&gt; - OME-XML (<a href="https://github.com/openmicroscopy/ome-xml" target="_blank">https://github.com/openmicroscopy/ome-xml</a>)<br>
&gt; - Bio-Formats (<a href="https://github.com/openmicroscopy/bioformats" target="_blank">https://github.com/openmicroscopy/bioformats</a>)<br>
&gt; - Fork: Apache POI (<a href="https://github.com/openmicroscopy/ome-poi" target="_blank">https://github.com/openmicroscopy/ome-poi</a>)<br>
&gt;  -- change package prefix to avoid third party code collisions<br>
&gt; - Fork: MDB Tools Java (<a href="https://github.com/openmicroscopy/ome-mdb-tools" target="_blank">https://github.com/openmicroscopy/ome-mdb-tools</a>)<br>
&gt;  -- change package prefix to avoid third party code collisions<br>
&gt; - Fork: JAI Image I/O (<a href="https://github.com/scifio/scifio-jai-image-io" target="_blank">https://github.com/scifio/scifio-jai-image-io</a>)<br>
&gt;  -- change package prefix to avoid third party code collisions<br>
&gt; - Stub: LWF (<a href="https://github.com/scifio/lwf-stubs" target="_blank">https://github.com/scifio/lwf-stubs</a>)<br>
&gt;<br>
&gt; In other words, OME-XML gets its own Git repository, which includes all the<br>
&gt; code generated code. Each fork and stub also has its own repository in the<br>
&gt; relevant namespace.<br>
&gt;<br>
&gt; Dependencies between repositories would be done by release version<br>
&gt; coupling. For Maven projects (i.e., SCIFIO), simply making releases and<br>
&gt; using release dependencies would be sufficient to facilitate repeatable<br>
&gt; builds. For Ant-based projects (i.e., stuff in openmicroscopy namespace),<br>
&gt; release JARs would continue to be committed to the repository as they are<br>
&gt; now, or they could be resolved remotely via Ivy or similar.<br>
&gt;<br>
&gt; This would making building Bio-Formats much simpler and faster. As Roger<br>
&gt; pointed out, we do not really need to code generate the OME-XML stuff on<br>
&gt; every build, but rather only when the schema changes. Of course, the<br>
&gt; OME-XML component contains other code which would be subject to change<br>
&gt; between schema releases, but that&#39;s fine.<br>
&gt;<br>
&gt; This more modular structure would also facilitate these components being<br>
&gt; developed on separate release cycles. The forks and stubs rarely change and<br>
&gt; do not need to be released with every OME release. And the OME-XML project<br>
&gt; could be released along side schema changes (i.e., twice a year) rather<br>
&gt; than with every OME release.<br>
&gt;<br>
&gt; Comments welcome.<br>
&gt;<br>
&gt; Regards,<br>
&gt; Curtis<br>
&gt;<br>
&gt;<br>
&gt; On Thu, May 2, 2013 at 12:25 PM, Roger Leigh &lt;<a href="mailto:r.leigh@dundee.ac.uk" target="_blank">r.leigh@dundee.ac.uk</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; On 02/05/2013 16:52, Curtis Rueden wrote:<br>
&gt; &gt;<br>
&gt; &gt;   &gt; If so, the build is completely identical--the sources which get<br>
&gt; &gt;&gt;  &gt; generated on the fly from the templates by xsd-fu are identical bar a<br>
&gt; &gt;&gt;  &gt; few lines comments in the top  boilerplate.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; OK, good to know.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; One more question/concern: presumably, the Bio-Formats build no longer<br>
&gt; &gt;&gt; functions on Windows, due to the Python + Genshi dependency. With the<br>
&gt; &gt;&gt; Ant build, this might be non-trivial to solve. But solving the issue<br>
&gt; &gt;&gt; with Maven is very straightforward: include the &quot;ome-xml&quot; module in the<br>
&gt; &gt;&gt; reactor only within a profile. Then, when that profile is not enabled,<br>
&gt; &gt;&gt; Maven will resolve the ome-xml dependency from the remote repository<br>
&gt; &gt;&gt; rather than regenerating and rebuilding the code. This would eliminate<br>
&gt; &gt;&gt; the need to install Genshi, and make it easier to build on Windows<br>
&gt; &gt;&gt; again. What do you think?<br>
&gt; &gt;&gt;<br>
&gt; &gt;<br>
&gt; &gt; I&#39;m afraid I&#39;m no authority on Maven, so I&#39;m not sure.  Maybe Melissa or<br>
&gt; &gt; Josh have a better take on this than me.  I assume that this will work<br>
&gt; &gt; correctly on Windows if python is installed?<br>
&gt; &gt;<br>
&gt; &gt; One thing which might be an issue is that while xsd-fu generates the<br>
&gt; &gt; ome-xml model code, which could potentially be downloaded, it also<br>
&gt; &gt; generates all the MetadataStore, MetadateRetrieve and all the other<br>
&gt; &gt; Metadata-related classes in scifio, including OMEXMLMetadataImpl.  Given<br>
&gt; &gt; that these are paired with the generated model code, generating one and<br>
&gt; &gt; downloading the other may result in breakage on model changes,<br>
&gt; &gt; or changes in xsd-fu or the templates which change the generated code.<br>
&gt; &gt;<br>
&gt; &gt; While it&#39;s not all enabled yet, I&#39;d like to have the model selectable as<br>
&gt; &gt; an ant properly (it&#39;s xsdfu.schemaver), so that it&#39;s possible to change<br>
&gt; &gt; to a different model when building.  There&#39;s currently some hardcoded<br>
&gt; &gt; &quot;2012-06&quot; versions which need to be switched to change to use the<br>
&gt; &gt; property value.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Regards,<br>
&gt; &gt; Roger<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Dr Roger Leigh -- Open Microscopy Environment<br>
&gt; &gt; Wellcome Trust Centre for Gene Regulation and Expression,<br>
&gt; &gt; College of Life Sciences, University of Dundee, Dow Street,<br>
&gt; &gt; Dundee DD1 5EH Scotland UK   Tel: (01382) 386364<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; The University of Dundee is a registered Scottish Charity, No: SC015096<br>
&gt; &gt;<br>
</div></div>&gt; &gt; ______________________________**_________________<br>
&gt; &gt; ome-devel mailing list<br>
&gt; &gt; ome-devel@lists.**<a href="http://openmicroscopy.org.uk" target="_blank">openmicroscopy.org.uk</a>&lt;<a href="mailto:ome-devel@lists.openmicroscopy.org.uk" target="_blank">ome-devel@lists.openmicroscopy.org.uk</a>&gt;<br>



&gt; &gt; <a href="http://lists.openmicroscopy." target="_blank">http://lists.openmicroscopy.</a>**<a href="http://org.uk/mailman/listinfo/ome-**devel" target="_blank">org.uk/mailman/listinfo/ome-**devel</a>&lt;<a href="http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel" target="_blank">http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel</a>&gt;<br>




<div><div>&gt; &gt;<br>
<br>
&gt; _______________________________________________<br>
&gt; ome-devel mailing list<br>
&gt; <a href="mailto:ome-devel@lists.openmicroscopy.org.uk" target="_blank">ome-devel@lists.openmicroscopy.org.uk</a><br>
&gt; <a href="http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel" target="_blank">http://lists.openmicroscopy.org.uk/mailman/listinfo/ome-devel</a><br>
<br>
</div></div></blockquote></div><br></div></div>