Hi Mario,<br><br><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote">Ok. I have two main changes, that would make sense to include in your<br>
SVN without too much pain or potential downsides:<br></blockquote>
<br>Both of these changes are great and make perfect sense, thanks! I created an SVN account for you (credentials sent in a private mail).<br><br><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote">
I'm still very interested in a more elaborate library for RPC, but at<br>
the same time I like the fact that it is very lightweight. I will give<br>
ZeroC ICE a thought (or try), and let you know how it goes.<br></blockquote><br>OK. The OME team has used ICE a lot, so feel free to write back to ome-devel with your experiences.<br><br><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote">
I tried [GCJ] once, but failed, due to my lack of ANT-knowledge. Maybe I'll try again.<br></blockquote><br>We tried it briefly with ImageJ, and were able to compile and run it, though there were some crashes with the user interface. But for Bio-Formats it may not be an issue. But it would take some time to explore. Fortunately, you should not need to know about Ant—you can compile a .jar file to a .so, for example, using gcc.<br>
<br><blockquote style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;" class="gmail_quote">Great, thanks! Lets start with me updating the JVMLink, and go from there.<br></blockquote>
<br>Sounds good. I'm glad JVMLink is useful to your project. :-)<br><br>Regards,<br>Curtis<br><br><br><div class="gmail_quote">On Thu, Nov 17, 2011 at 7:09 AM, Mario Emmenlauer <span dir="ltr"><<a href="mailto:mario@emmenlauer.de">mario@emmenlauer.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
Hi Curtis,<br>
<br>
thanks for the nice email, and good to see you're well! Below more:<br>
<div class="im"><br>
> Good to hear from you! I am CCing the OME-devel list, since this<br>
> conversation may be of interest to others.<br>
><br>
> I looked at your Jvmlink software, that makes an interface between C++ and<br>
>> Java via sockets. I had to adapt the code for Unix (Linux, to be more<br>
>> precise). Are you still interested in maintaining this code? Are there<br>
>> newer<br>
>> versions than the one from LOCI SVN (in legacy subtree)?<br>
>><br>
><br>
> The short answer is: I am not interested in maintaining the JVMLink code.<br>
> And there is not a newer version that what you found in SVN. (But I would<br>
> be happy to give you commit access to the LOCI SVN repository, if you<br>
> would<br>
> like to commit your changes to the codebase!)<br>
<br>
</div>Ok. I have two main changes, that would make sense to include in your<br>
SVN without too much pain or potential downsides:<br>
(1) I made all network transfers a lot faster by using the byte-writer<br>
in Java. I'm not a Java-pro, so my implementation might still be<br>
suboptimal. But at least it improves transfer speed from several<br>
kbyte / sec to several Mbyte / sec at no additional cost.<br>
(2) All code now works on Linux, with identical functionality as the<br>
Windows code previously had. This comes without modifying the<br>
Windows code (using ifdef _WIN32 where appropriate), so again there<br>
should be no downside of adding my changes.<br>
<div class="im"><br>
> The reason is: there are a plethora of ways to enable inter-process<br>
> communication between C++ and Java (as well as a slew of other languages):<br>
> ZeroC Ice (as I mentioned to you in Paris); Apache Thrift, Hessian, Etch,<br>
> zeromq, Gearman... it's a long list. JVMLink was written from scratch and<br>
> makes NO considerations for security, which is of central importance when<br>
> utilizing the network stack. All of the aforementioned tools provide a<br>
> mechanism to avoid globally exposing your application over the network,<br>
> unlike JVMLink. And all of them have had a lot more development time and<br>
> design work focusing on performance, usability, etc.—which we simply<br>
> cannot<br>
> match for an unfunded one-off project like JVMLink.<br>
><br>
> What I want to do in the future is provide better cross-language<br>
> inter-process access to Bio-Formats. As I said in Paris, Bio-Formats Ice<br>
> bindings would be nice, if I had any time to work on them. But right now I<br>
> am too busy with ImageJ2.<br>
<br>
</div>I'm still very interested in a more elaborate library for RPC, but at<br>
the same time I like the fact that it is very lightweight. I will give<br>
ZeroC ICE a thought (or try), and let you know how it goes.<br>
<div class="im"><br>
<br>
> Another vital area to explore is compiling Bio-Formats with GCJ so that<br>
> you<br>
> can use it as native code. GCJ has been around for 15+ years and gotten<br>
> quite good. Have you tried it?<br>
<br>
</div>That sounds like a great idea. I tried it once, but failed, due to<br>
my lack of ANT-knowledge. Maybe I'll try again.<br>
<div class="im"><br>
<br>
> The good news is that even though I personally do not have time, the OME<br>
> team now has funding to pursue these things, and is currently hiring. So<br>
> hopefully we will finally see substantial progress in coming months.<br>
><br>
> Again, I would be happy to grant you commit access to JVMLink so that you<br>
> can hack away, if you still decide to use it going forward. I just wanted<br>
> to fill you in on our perspective, and why we haven't developed it<br>
> further.<br>
<br>
</div>Great, thanks! Lets start with me updating the JVMLink, and go from<br>
there. All the best from Basel,<br>
<br>
Mario<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
> Regards,<br>
> Curtis<br>
><br>
><br>
> On Thu, Nov 10, 2011 at 6:12 AM, Mario Emmenlauer<br>
> <<a href="mailto:mario@emmenlauer.de">mario@emmenlauer.de</a>>wrote:<br>
><br>
>> Dear Curtis,<br>
>><br>
>> I'm picking up on an old talk here, we had at the OME UGM 2010 in Paris.<br>
>> I looked at your Jvmlink software, that makes an interface between C++<br>
>> and<br>
>> Java via sockets. I had to adapt the code for Unix (Linux, to be more<br>
>> precise). Are you still interested in maintaining this code? Are there<br>
>> newer<br>
>> versions than the one from LOCI SVN (in legacy subtree)?<br>
>><br>
>> Attached you can find a work-in-progress. Its your code, with some<br>
>> extensions for Unix. I have made some smaller changes in other places as<br>
>> well, for example const'ed some strings where possible. A main<br>
>> difference<br>
>> is to use a call to "write(byte[], ...)" in Java that writes the full<br>
>> byte[] array in one go (as opposed to byte-wise). This speeds up large<br>
>> transmissions thousandfold!<br>
>><br>
>> If you like my code, please add it to your SVN for distribution. But<br>
>> beware, it is work in progress, and I checked it only on Linux. I did<br>
>> not<br>
>> check it on Windows (yet), I might have accidentally broken something.<br>
>><br>
>> Anyways, all feedback from you is very welcome! Let me know if there are<br>
>> newer versions of your code, or if you know better libraries to fill<br>
>> this<br>
>> gap. Also let me know if you want to be informed about my changes at all<br>
>> :-)<br>
>><br>
>> Cheers,<br>
>><br>
>> Mario (from XuvTools / libBlitzBioFormats)<br>
>><br>
>><br>
><br>
<br>
<br>
</div></div></blockquote></div><br>