寫在前面
知道我的朋友,相信都有了解,元旦假期某晚凌晨,我突發起來,折騰了一個困擾我很久很久的問題,并解決了他。
2015年,TBtools 開發之前,我寫過一個 Blast3GO,主要用于 GO 注釋,富集分析以及可視化。Blast3GO 實現的這些功能,基本都是調用環境中的 R,于是存在四大問題:
- 依賴用戶環境中的 R語言,換句話說,要求用戶自己安裝 R
- 存在破壞用戶原有 R 語言環境的可能
- 無法實現絕對的版本控制,以至于無法保證用戶體驗
- 確實不穩定....
這些經歷,使得我在開發 TBtools 之后,追求絕對純粹的 Java 實現。于是 TBtools 得以獲得某種程度的 便攜,簡單,簡潔,高效。為了解決可視化問題,我自己從零實現了一個繪圖引擎,也就是大伙知道的 JIGplot,并一直堅持優化。所以,我一直不想去打包任何可以不打包的軟件,更希望自己實現。
然而,幾年過去了,我越來發現,每個人的時間,精力是絕對有限的。我可以自己寫很多功能,卻無法做到絕對的全面,比如轉錄組數據分析中的差異表達分析。我們幾乎可以下個結論,幾乎全部差異表達分析軟件,都是 R 包(盡管大伙還是知道有 gfold 的)。于是,我只有兩個選擇:
- 自己寫,這個不可能,也沒有意義,畢竟這個輪子造起來也不一定能得到認可,他不比可視化
- 打包 R,windows下很簡單,但是 macOS 呢?TBtools 至少有 10% 的用戶是 MacOS 用戶
我希望的是 TBtools 繼續保持他的跨平臺,所以所有功能都是至少支持 windows + MacOS。可以說,元旦假期,我所有抽得出來的時間,加上我在過去一兩年,嘗試失敗,再嘗試再失敗,還嘗試還失敗,繼續嘗試,繼續失敗的數次,得到的就是一個簡單的東西。TBtools 的新插件“Rserver”。
插曲 - 更新 TBtools 版本
11月底,去版納植物園做了一場 TBtools 培訓,培訓期間發現,TBtools 的插件安裝存在兩個優化的點:
-
MacOS 的插件選擇界面,拖拽面板還是遮擋了文件選擇面板,這塊之前在邵揚的提醒和幫助下,原本是修復的,只是....代碼忘記啟動。改動前
-
TBtools 插件分為兩類:小插件,無依賴,僅
.jar
文件。對于小插件,除非用戶確實沒事做,回去解壓出來(盡管也沒啥用),否則都是順利安裝;大插件,有依賴,于是我一般打包成.zip
文件,然而還是存在不少人習慣性解壓縮,最后導致插件沒有完整安裝。這不是好事。但可以理解,畢竟,任何人看到壓縮包(尤其是圖標對應上了)的第一反應是解壓縮。改動前,
針對這兩點,我做了優化。首先是 MacOS 的插件安裝面板代碼生效;
其次是進一步支持了難以被自動識別的文件后綴.plugin
....這樣我相信就不會被解壓縮了...
Rserver 插件的安裝
目前這個插件已經釋放到所有 TBtools 使用交流群(1-7,Emmm,數了一下,又回復到之前的狀態,不過現在大伙都實名了,我相信應該好得多)。直接在群共享下載最新版本的 TBtools_JRE1.6.jar,這個 jar。更新到 TBtools v1.074。當然,如果你不更新,那就記得下載 Rserver.zip,反正主程序跟插件耦合程度極低。
OK,拿到這個插件。就可以安裝。首先打開 TBtools
找到插件安裝位置,點擊
Install Plugin
拖拽放置,或直接文本選擇摁鈕選擇之后,點擊打開,稍等一會即可(插件較大,大概180+Mb,Windows 和 MacOS 用戶通用一個插件!)。
插件的使用
Rserver 插件,我原本想做的只是一個差異表達分析插件,但從插件的體積來看,這樣并不合適。畢竟以后任何人愿意貢獻出 R語言 腳本的,都可以制備成 TBtools 插件并分發。于是,我調整計劃,直接將 Rserver 插件作為一個將會被其他所有 R腳本 插件所依賴的插件來開發。完美。這樣我只需要細調測試插件即可(注意到,盡管我們有1w+人的社群,但我只召集到不超過20個 MacOS 用戶幫忙測試;windows不用)。
使用插件非常簡單,首先是打開插件
設置一個輸出目錄,其他均不設置,這樣會啟動 Rserver 插件的測試腳本。
如此,點擊
Start
之后,輸出目錄會生成一個Rplot.pdf
文件。稍微知道 R 使用的人就會清楚。只要沒設置繪圖文件路徑,同時又在命令行運行,那么 R 會直接保存一個文件到 Rplot.pdf。打開這個文件,即可看到當然,加入你填入了一段 R 腳本,比如
https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/p.adjust
網頁上的這段代碼(邵揚提到的)...
輸出結果如下
當然,你可以檢測和安裝一個R包(比如大家都愛的
ggplot2
)于是你會得到
關于拓展
我們完全可以預見這個插件將會帶來的功能絕對拓展:
- 只要一個 TBtools 用戶能跑的 R碼,換另一個 TBtools 用戶,一樣能跑,因為平臺完全固定
- 對于 R腳本來說,絕大多數用戶進行修改的,往往只是輸入輸出文件,這點完全可以通過 TBtools 快速打一個 GUI 界面()
- Rserver 插件也直接支持用戶原始的 R腳本代碼,換句話說,可以寫 R包依賴檢測與安裝,可以直接在代碼中設置輸入輸出文件或目錄.... 甚至可以.....
寫在后面
昨晚我陪吳老師看了一場電影。這是兩年來我們第一次能抽出時間看的一場完整的電影(盡管票價不低,35一張)。卡通電影還不錯,最近似乎有點火的,《心靈奇旅》。從我的角度來看,這部電影傳達一個理念或許就是:享受生活,活在當下。
當然,這并不太準確。我們討論了一會,多少讓我想起了我似乎從小學就開始在思考的問題。即,
活著,為了什么?當然史鐵生在《我與地壇》給出了一個不錯的答案死是一件不必急于求成的事。
這段時間一直在路上,或許人生就是在路上。
《心靈奇旅》一條主線,演繹了兩類人:
- 人生中只有目標
- 人生中毫無目標
當然,什么才是人生目標?就不劇透了,大伙感興趣的可以看看。
回到主題。
關于 TBtools 的開發,盡管我一直有源源不斷的新的開發想法,但如果說我馬上進入工作,無法在其上投入過多。那么我會留下的只有兩個遺憾:
- 我希望能提供一個可能,TBtools 用戶能夠在相互分享 TBtools 相關的內容,以前我想過是卡通熱圖,后來...總之一直想一直失敗,但現在,我想 Rserver 插件馬上會提供這個可能。
- 我寫過 EasyGUI 或 AutoGUI,這兩個實現和想法,我一直沒有放下,然而他們似乎并無用武之地 。但現在不會了,我相信很快,這些想法也會用上。
有時候,或許從技術層面來說,你學過的想過的每一個點,都可能不會是白費功夫。