分享

随笔 | 近期生物软件开发有感

 生信药丸 2024-04-27 发布于贵州

写在前面

最近折腾了一些生物软件开发工作,包括:

  1. 合作课题开发几个程序,主要是算法;

  2. 尝试优化 GSAman

  3. 发现 TBtools BLAST 更新问题

每个工作都有一两点可以分享,于是写下来,希望对做相关方面或者对我做的一些工作感兴趣的朋友,有一点点帮助。也算是吃自己的瓜。

Java 突然变得适合做生物软件开发

一年多前,无意间了解到 GraalVM。可以用于直接将 java 代码或者 jar 包做成二进制程序,专业术语是「native image」。我们都很清楚,java 程序运行时依赖于 jvm。JVM 要先跑起来,然后才是 Java 程序,所以启动程序本身就会慢,再加上预热(JIT hotspot)才能达到接近 C++ 的运行速度。尽管,生物软件往往对速度的要求还不至于那么严苛,不过肯定是越快越好。

生物软件还有一个问题,就是如何分发。当然,现在很多软件已经不是软件,而是网页或者网站。不否认后者已经红红火火,因为他避免了一个部署问题,但也带来一个数据安全和网络稳定问题。相反,此处提到的生物软件,主要指的是狭义的软件,也就是桌面软件。比如 TBtools 就是桌面软件。这类软件分发时往往预期环境中有 jvm,或者就只能同时分发一个 jvm。后者更为稳健,因为虽然说java是向下兼容的,然而其实兼容性并没有想象的那么好。于是,每次都带上 100+Mb 的 JVM,自然提高了分发难度。解决这个问题的办法,以往是做 jvm 瘦身。但自从 java9 启用模块化后,其实瘦身反而不容易了。GraalVM 的出现,直接改变了这一境况。极限上来说,一个 hello world java 代码做成二进制大概是 10Mb 以下。我测试了几个不那么复杂的软件,做成二进制后大体是 20Mb+。再增加新的 java 代码,对体积影响不大了。为此,达成了三点:

  1. 速度更快,尤其不需要预热了

  2. 体积更小,方便分发

  3. 代码安全,jar终究是可以轻松反编译,二进制...就直接达到最高程度的代码保护

于是,Java 突然变得很适合做生物软件开发。很快,加上FFM,就可以直接调用 C/C++ 库.... 或许在编程语言选择上,我还是没有选错。

基于别人的代码项目做特性开发太坑

估计有不少朋友知道,我基于 IGV 代码,做了两三个工作,其中为更多人知晓的是 GSAman。GSAman 一直有一个问题,就是 IGV 界面上的菜单太长,屏幕不够显示。事实上,这个并不算 GSAman 的问题,因为 IGV 本身程序就会如此。我花了两个晚上,自己写了一个 GUI Beans,测试没问题,但是放到 GSAman 或者说 IGV 里面就失效。查看代码后,发现 IGV 本身对 Swing 的 GUI Components 已经做过许多魔改。为此,如果不捋清这些魔改,那么可能很难匹配做好菜单优化。

然而我还是没有时间去做这个事情,于是最后放弃,回到最naive的时限,直接按板块,将 GSAman Track 新增的菜单直接做二级菜单。勉为其难的搞定。不过说实话,这不是我要的结果,只是我也没得选。人有时候还是要认怂,不要去碰“屎山”代码。

普及“屎山代码”的定义:就是代码的表现很好,结果也很好,也很稳定,但是如果你去修改他.....噩梦就开始了。

NCBI BLAST 版本更新越来越放飞自我

早前,有人说 TBtools 依赖的 BLAST 已经两三年没更新,提议更新。有一天我突发奇想,似乎功能变化不大,那就更新一下吧。然而是我 Too young too naive。自从更新了 BLAST ,一直出现用户问题,说比对序列这样那样问题。今天我终于还是自己测试了一下,发现也只能回退了。大体问题简述如下,具体版本不一定完全对应好:

  1. BLAST+ 自 2.12.0+ 版本开始不支持non-ascii code 的路径和文件名,简单来说,你只能是英文字母,没了

  2. BLAST+ 自 2.15.0+ 版本开始不支持带空格的路径,这个其实毫无道理

其中,为了更好支持管道(因为 BLAST 2.10.0 之前的版本在管道支持上有明显问题),之前我用了 2.12,并为了支持中文做了不少套层优化。但是这些优化并没有兼顾到路径不能带空格这一情况,因为这个其实不合理。于是最近 TBtools 用户遇到的很多问题是由 BLAST 2.15.0 引入。

为此,我只能回退了。说实话,我写过邮件给他们,但是他们不care,我也不可能写出来一个 BLAST+,于是只能先回退到BLAST 2.120+。事实上,我觉得这个挺好的。没必要更新。

写在最后

上午临时发现中午有空,于是约起齐哥、喻总两家一起吃了个告别火锅(事实上约了有大半年)。离开广州,开始倒计时。我的生物软件开发之路与这两位基友几乎是完全绑定。从他们身上学习了许多。十年前,我们在广州相识。今日之后,或许就是他们去海南旅游时才会更多碰面了。

或许下一次相聚,我们是在沙滩上,晒着太阳,喝着椰青,聊着一起做点什么....

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多