到底還是寫了一篇推文,卻著實想不到一個合適的題目涮较〕肀牵可能這是我寫過最長的一篇推文,約莫萬字狂票。這篇推文的主要內(nèi)容應(yīng)該包括:
- TBtools 開發(fā)為了什么候齿?
- TBtools 是怎么開發(fā)出來的?
- TBtools 版本迭代歷史闺属?
- JIGplot <- JJplot2 <- JJplot 的迭代過程慌盯?
- 我是如何接觸生信的?
- 本碩博均是園藝果樹專業(yè)屋剑,如何一步一步自學(xué)并入門生信润匙。
- 一份生信編程入門書籍清單 和 社群與論壇推薦。
- 一些不堪回首的往事唉匾。
- 感謝陪伴我和幫助過我的人孕讳。
PS:推文在 TBtools 文稿 Online 前后匠楚,已經(jīng)基本成型。原定在期刊官方公號推文后再行推出厂财,但一周以來芋簿,身邊和用戶朋友一再催促。也罷璃饱,推文也是我碩博生活至今小結(jié)与斤,就此推出,用互聯(lián)網(wǎng)幫我記住這些經(jīng)歷荚恶。
寫在前面
2020年06月22日撩穿,TBtools 終于還是發(fā)表在正式期刊(Molecular Plant)上。
這不僅僅是我一個人的開心谒撼,而是一小群人的快樂食寡。這群人,或者對 TBtools 的開發(fā)極度支持廓潜,或者看著 TBtools 一步一步抵皱,一步又一步成長成現(xiàn)在模樣。五年有余辩蛋,說長不長呻畸,可以覆蓋了一部分用戶的碩士博士階段。說短悼院,其實也不短伤为。軟件開發(fā)不同于濕實驗開展,前者周期往往足夠短樱蛤,甚至兩三個月可以完成和測試钮呀。文稿的撰寫到發(fā)表剑鞍,從某個角度來說昨凡,是在用戶朋友和生信小圈子一些朋友的催促下完成∫鲜穑總的來說便脊,這應(yīng)也算一個工作的階段性成果,所以值得記錄一下光戈。華南農(nóng)大園藝學(xué)院果樹系哪痰,本科 --> 碩士 --> 博士,Emmm久妆,是我常常不務(wù)正業(yè)的十年晌杰。而我折騰的與生信擦邊的各項,正好也是TBtools 的開發(fā)過程筷弦。以下肋演,用相對碎片化地方式抑诸,整理一下這些那些我還記得的片段。
遇到了第一個生信坑
2014年前后爹殊,在碩士導(dǎo)師何業(yè)華教授的建議下嫩舟,我們做了一個轉(zhuǎn)錄組項目付呕。那個項目算是學(xué)院里面較早開展。導(dǎo)致這一項目數(shù)據(jù)沒有及時撰寫并發(fā)表成文的原因有很多。其中一點或許是果覆,我從結(jié)題報告中看到,植物的測序數(shù)據(jù)卻可能含有真菌或其他微生物序列污染衔瓮。那會年輕存捺,過不了這道坎。于是還是決心铅碍,自己從原始數(shù)據(jù)開始憨降,折騰這套污染了的數(shù)據(jù)「眯铮或許也是這個原因授药,接觸生信至今,我始終保持警惕呜魄,確保避開可能的坑悔叽。
Emmm... 年代久遠(yuǎn)這套數(shù)據(jù),后來就打水漂了爵嗅。想想還是有點讀不起碩導(dǎo)娇澎。不過一起簽合同的其他項目,最后還是整理了并發(fā)了一個 PLOS One睹晒,似乎也還好趟庄。
我覺得我這些圖表,其實還做得不錯伪很。這已經(jīng)是2016年的事情了戚啥。
合伙買了二手服務(wù)器
折騰數(shù)據(jù),必然是需要計算資源锉试。正好那會浩哥(即 TBtools 論文二作)也計劃開始搞分析猫十,于是我們二人合伙從淘寶搞了一個二手服務(wù)器。如果我沒記錯呆盖,加上我們自己買的民用硬盤和其他拖云,大概也就五六千。配置是相對奇葩的狀態(tài)应又,似乎是1T還是3T宙项,內(nèi)存排滿72G,線程16個株扛。那會這個配置其實可以滿足轉(zhuǎn)錄組數(shù)據(jù)分析的需求了尤筐,所以我們用得還是開心邑贴。
服務(wù)器的費用是兩人各出一半,即每人3k左右叔磷。那會園藝學(xué)院碩士補助拢驾,多半是100~200。所以改基,或許很多人不知道 繁疤,我出的這一半其實是我碩士三年的補助,或者說飯錢(估計浩哥也不知道 )秕狰。以至于稠腊,后來有那么大半個月,我其實是靠著我女朋友的飯卡吃飯的(沒有更好的方式)鸣哀。
學(xué)習(xí)了 Perl 語言
解讀公司的結(jié)題報告架忌,是一件麻煩的事情。2014年那會我衬,其實做科研服務(wù)的公司很多叹放,但都不太成熟 。公司返回的結(jié)果挠羔,往往是一些大文件或者大表格井仰。整理起來比較麻煩。于是破加,多少學(xué)習(xí)編程語言成為必須俱恶。那會沒有太多糾結(jié),在浩哥的推薦下范舀,我學(xué)起了perl合是。如果我沒有記錯,有那么一段時間锭环,可能是個把月聪全,我就只呆在宿舍,常常門也不出田藐,等著其他人給我?guī)э埨笊铡N抑皇撬⒕幊虝ㄆ鋵嵑髞砦疫€看了不少perl相關(guān)電子書,不過大駱駝我是買的紙質(zhì)書)汽久,試試運行代碼,反反復(fù)復(fù)踊餐。用perl寫了不少腳本景醇,做了不少有趣的事情。我甚至只用 perl CGI 架了一個小網(wǎng)站吝岭,提供序列批量獲取和BLAST的功能(命名為xxxblast三痰,對標(biāo) wwwblast吧寺;我沒有用框架,因為確實也不夠機智)散劫。
我印象深刻的稚机,或許還是寫出來的第一個我自認(rèn)為有用的腳本。那個腳本的功能非常簡單获搏,批量提取Fasta序列赖条。說起來還是有點搞笑(公眾號也曾提及),那天晚上我寫到凌晨三點常熙,終于認(rèn)為腳本穩(wěn)定且正確纬乍,具體邏輯是:
- 用一個腳本把原始的Fasta序列整理成一行ID一行序列的格式
- 使用另一個腳本讀取一個ID列表,然后遍歷1. 中格式化好的序列裸卫,匹配的輸出
這個功能的低能實現(xiàn)仿贬,讓我興奮了好一會。
現(xiàn)在想想還是有趣墓贿,因為 Perl腳 本我早已不寫茧泪,而 Perl 只活在我的命令行里面。批量提起Fasta序列聋袋?我早已能夠隨手寫一行 perl 命令搞定调炬。不僅僅是批量提取序列,甚至包括更為復(fù)雜的分析舱馅。
Emmm缰泡,回想起來,我甚至已經(jīng)忘了代嗤,到底那本 Perl入門經(jīng)典小駱駝棘钞,是浩哥的,還是我的干毅。多半應(yīng)是他的宜猜,而我忘了也沒打算還他了。
學(xué)習(xí) Linux
那是一個寒假硝逢,我第一次沒有回家里過年姨拥。借了浩哥的一本《鳥哥的Linux私房菜》,硬是啃了一個星期(還是兩個星期?)渠鸽〗形冢啃完就折騰服務(wù)器,邊折騰邊重新啃徽缚,來來回回憨奸,應(yīng)是翻了不下三遍,書中也被我用鉛筆寫滿的標(biāo)注凿试。也因此排宰,我自認(rèn)為現(xiàn)在的 Linux 基礎(chǔ)起碼比不少自稱搞生信的要扎實一點似芝。
當(dāng)然,這還得益于另外一些 Linux 操作相關(guān)書籍的閱讀板甘。Linux的學(xué)習(xí)党瓮,似乎主要還是對文件系統(tǒng)的了解。其次才是一些shell下的 工具或命令盐类。由于我先學(xué)了 perl寞奸,所以更多工作我會寫 perl 單行來完成,而不會用 awk 或者 sed 等傲醉。說得自大一點蝇闭,我認(rèn)識的人里面,沒有一個 perl 單行寫得比我更好硬毕。一是我寫得早呻引,二是我寫得久,三是我天天寫吐咳。
學(xué)習(xí) R 語言
Perl 學(xué)了逻悠,Linux 也基本掌握了,那么生信數(shù)據(jù)分析的文本處理韭脊,已經(jīng)基本得到解決童谒。可視化成為當(dāng)務(wù)之急沪羔。事實上饥伊,那會我和小庭子有大體的分工,我搞Perl蔫饰,他學(xué)R語言琅豆,后面合伙就可以更快地做點事情。當(dāng)然篓吁,后來各自課題和生活上事情較多茫因,我還是自己學(xué)了一下。提起R語言入門杖剪,我從來推薦《R語言初學(xué)者指南》冻押。
Emmm,那么到底這本書是我的還是浩哥的盛嘿,我還是忘記了洛巢。不過,可以認(rèn)為這本書確實是簡單孩擂±窃ǎ看完了,再看看 《ggplot2:數(shù)據(jù)分析與圖形藝術(shù)》类垦,那么似乎真的沒什么統(tǒng)計圖表是不能在短時間內(nèi)完成的狈邑。后來我發(fā)現(xiàn),R語言真正方便的應(yīng)該是統(tǒng)計蚤认,而可視化是附加的事情米苹。只能說生態(tài)賦予了R在統(tǒng)計可視化上的完美優(yōu)勢。
開發(fā)了密碼子偏好性分析流程 R2CUB
很少人知道我做過密碼子偏好性分析砰琢。因為我的課題中并沒有這一部分蘸嘶,而那會只是一時興起。應(yīng)是研二研三了陪汽,我估摸著花了個把星期的時間训唱,開發(fā)了一個流程。這個流程在數(shù)據(jù)分析上是純粹的 Perl 語言 Naive 實現(xiàn)挚冤,所以并沒有任何其他依賴况增,只需要電腦上安裝基礎(chǔ)版本的 Perl 語言解釋器即可。文檔训挡,手冊等等澳骤,我也整理完善,甚至喊了其他朋友測試魯棒性澜薄。
是的为肮,這是那會我把文章都寫了,最后似乎沒有投稿肤京。DIAMOND颊艳,那會才剛剛出來,網(wǎng)絡(luò)上沒看到多少應(yīng)用(如果說看到廣泛使用的忘分,那至少也一年后了)棋枕。可能也是我用得早饭庞,所以對他當(dāng)時版本的局限有一定的了解戒悠。后面我再也沒有關(guān)注,主要還是用回 BLAST舟山。分析結(jié)果出來的绸狐,RSCU 和 ENI 等數(shù)值計算出來了,那么可視化就用 R 腳本累盗。
可以看到具體到科屬還是分得比較好的寒矿,單純只用RSCU做了一個聚類。其實這個流程還是不錯的若债。我曾經(jīng)在園藝學(xué)院生物技術(shù)所(現(xiàn)在似乎已經(jīng)改成其他名字了)組會上符相,開始分享進(jìn)展時,回車一鍵化流程,分享結(jié)束了啊终,也就可以看結(jié)果(其實跑起來一個物種也就幾分鐘)镜豹。當(dāng)然,最后我并沒有從中看出有用的生物學(xué)意義 蓝牲,所以流程和文稿都打入冷宮趟脂,不再啟用。鼓搗了這個流程例衍,我便意識到一個問題昔期,即常規(guī)流程,命令行運行佛玄,實在太麻煩硼一。
學(xué)習(xí)界面化軟件開發(fā)
這里涉及到一個點,為什么我一定要搞界面化軟件梦抢。前述已經(jīng)提及般贼,碩士生活補助全部投到了服務(wù)器(換句話說,其實已經(jīng)不夠錢吃飯)惑申,所以在一段時間內(nèi)具伍,我做過一些現(xiàn)在看起來有點坑的業(yè)務(wù),比如代寫 Perl/R 腳本圈驼,五塊或者十塊錢一個人芽,接了不少。而后來绩脆,接轉(zhuǎn)錄組測序數(shù)據(jù)分析業(yè)務(wù)萤厅,才發(fā)現(xiàn)其實搞分析原來沒那么廉價。當(dāng)然靴迫,做這些事情惕味,是其他更為艱難的生存無奈所迫,具體便不做開展玉锌∶樱回到主題,了解我的人主守,知道我做買賣有兩個原則:
- 只賣我覺得好的東西
- 只賣給有需要的人
既然接了一些分析業(yè)務(wù)禀倔,常常就會遇到客戶問題(當(dāng)然,自己分析結(jié)果自己課題組使用起來参淫,也一樣)救湖。其中最經(jīng)典的就是Fasta序列提取。現(xiàn)在回想起來涎才,我仍然想不明白鞋既,那會做生信擦邊課題的人真的很多,而搞科研服務(wù)的公司也有不少,為什么就沒有人做一個界面友好邑闺,功能實用的小軟件跌前。僅僅是從轉(zhuǎn)錄組組裝結(jié)果中批量提取Fasta序列(如某幾個差異表達(dá)基因的序列),就必須要求客戶安裝 Perl 解釋器检吆,然后用 perl 腳本....
于是舒萎,我還是決定下來寫界面化工具程储。我沒有記錯的話蹭沛,那會我買了一本Java 入門書籍和一本 C++ 入門經(jīng)典教材。
翻了一天多Java章鲤,用notepad++摊灭,寫了簡單的界面化軟件,大體是一個sci-hub鏈接自動獲取的功能(Emmm败徊,是的帚呼,沒有用IDE,這主要是我之前寫perl的習(xí)慣沒有調(diào)整過來皱蹦;sci-hub在國內(nèi)似乎才剛剛興起煤杀,并不像現(xiàn)在這樣到處是文獻(xiàn)獲取神器)。
總體上沪哺,感覺寫Java代碼的效率明顯不如perl沈自。于是,我又翻了兩天C++辜妓。
寫了幾個命令行小工具枯途,卻沒有搞明白如何更好地打界面,尤其是打造跨平臺的界面化軟件(注意籍滴,我們永遠(yuǎn)無法確定用戶到底是Windows酪夷,MacOS,還是Linux)孽惰。在這樣的背景下晚岭,我又重新轉(zhuǎn)向Java,然后寫了一個簡單的序列提取工具勋功,隨后釋放到網(wǎng)絡(luò)上坦报。
那會可以釋放的地方極少,大體上就是:
- bioinformatics*中國 QQ交流群
- PLOB
沒有了酝润。整體上燎竖,其實還得到不少有趣的評價。
界面非常簡單要销,Jar包是22Kb构回。不小也不大。
開發(fā)一點相對有用的工具
掌握了基本的界面化軟件開發(fā),我想到的第一件事就是如何更好地分發(fā)已有的教程或者簡便操作纤掸。在這段時間脐供,我操作系統(tǒng)轉(zhuǎn)向ubuntu(Linux的一個發(fā)行版,這似乎是我第一次嘗試在工作中不使用windows)借跪。用Java寫了一個感覺比較有趣的東西政己,大體就是可以方便地將任何命令行轉(zhuǎn)換成界面工具。比如掏愁,只要編寫一個配置文件歇由,那么就可以把 BLAST 命令轉(zhuǎn)換成界面化工具
自動轉(zhuǎn)換界面
事實上,這個小工具可以認(rèn)為是簡單的插件化軟件開發(fā)果港,或者是一個通用的界面化工具沦泌,比如我們只需要編寫簡單的配置文件,就可以把perl單行辛掠,一些命令行調(diào)用的工具谢谦,或者是 perl 和 R 畫圖腳本轉(zhuǎn)換成界面工具。
是的萝衩,我甚至還在一個服務(wù)器上部署了插件中心....
圖中一語成讖回挽,后來,我碩士確實延期了一年猩谊,現(xiàn)在博士也延期了【微笑臉】^_^千劈。
后來,就沒有后來了预柒。EasyGUI 的這個工具無法很好地自動布局界面队塘。另外實用性其實不太高,畢竟他只是一個純粹的自動界面化接口宜鸯。
在這之前憔古,有傳言 blast2go(一個強大且通用的GO注釋軟件)要開始收費,或者說不再提供免費版本淋袖。我大體看了下 blast2go 的文章以及他所使用的數(shù)據(jù)庫鸿市,基本了解了主要邏輯后,自己寫了一個 perl 版本的 idmapping即碗,功能即將NR等蛋白序列庫注釋轉(zhuǎn)換為GO注釋焰情。事實上,用起來還是不錯剥懒∧谥郏看著bioinformatics*群不時討論到GO注釋相關(guān)問題,一時興起初橘,我又寫了一個 Java 界面化工具验游,并直接命名為 blast3go充岛。
這個工具,還是比較有趣耕蝉,GO注釋邏輯是自己實現(xiàn)崔梗。而富集分析以及可視化,使用的是 R 語言包垒在,包括 GOstats 和 topGO (那會我還沒認(rèn)識大濕兄蒜魄,也不知道 ClusterProfiler)。效果圖如下场躯,
是的谈为,打包的就是我自己寫好的腳本....我嘗試了幾乎所有可用的 java 和 R 語言交互接口,最后發(fā)現(xiàn)效果都不如直接調(diào)用 Rscript推盛。這段經(jīng)歷峦阁,事實上也讓我徹底對打包 R 甚至使用 R 語言失去偏好。
認(rèn)識大佬耘成,初識生信
上述,我提及數(shù)次驹闰,bioinformatics*中國 這一 QQ 社群瘪菌。在那里,我認(rèn)識了一群人嘹朗,真正意識到生物信息其實不是我認(rèn)知的樣子师妙。他們之中,有專門做算法開發(fā)的屹培,軟件設(shè)計的默穴,流程部署的,科研應(yīng)用的褪秀。這些人蓄诽,改變了我對生信的認(rèn)知,甚至是讓我真正明白媒吗,什么是生信入門仑氛。由于我個人相對積極地參與群里的交流討論,后來做了群管闸英,并擔(dān)任了一屆群主(后來由于 TBtools 社群管理需要锯岖,屆滿我就退群了)。期間甫何,我們在群里舉辦了兩三年每周 seminar出吹,一次20期(可惜那會沒有做充分的錄屏)。四五年前的事情辙喂,我自認(rèn)為那至少是國內(nèi)最早開展的生信交流網(wǎng)絡(luò)直播捶牢。后面過了一些時日赃额,才看到各類公司或者社群搞起類似的事情〗腥罚總的來說跳芳,我從其中學(xué)習(xí)了很多≈衩悖可惜的是飞盆,這個社群那會早已滿2000人,所以對入群感興趣的次乓,可能早就沒有機會(因為吓歇,我自己也回不去了)。由于我們只想做精不想做大票腰,所以清理人出群是我們的日常工作城看。這一習(xí)慣,現(xiàn)在沿襲到所有 TBtools使用交流群杏慰。
值得提的是膝迎,在這期間,我有幸在 Zinky (趙齊捂敌,現(xiàn)任職于中腫)的帶領(lǐng)下惩坑,蹭了中山大學(xué)任間教授課題組的兩三次組會。我也因此明白朝扼,其實生信軟件開發(fā)赃阀,有非常多值得做的事情,而 Java 這門語言擎颖,似乎存在很大希望(雖然榛斯,五年后的今天,傳言他們已經(jīng)幾乎不再使用 Java 做界面化軟件開發(fā)了搂捧,可能 python+Qt驮俗?或者專注網(wǎng)頁工具)。
偶然合作异旧,共同開發(fā) EasyCodeML
如果讓我一定要推薦質(zhì)量高的生信交流QQ社群的話意述,那么有且只有兩個:
- bioinformatics*中國
- 生物軟件交流群
后者應(yīng)是福建農(nóng)林大學(xué)高芳鑾老師(Raindy)組建并后續(xù)由幾位大佬一起維護的QQ群。前者重點在大數(shù)據(jù)吮蛹,后者重點在群體演化以及傳統(tǒng)的生信數(shù)據(jù)分析荤崇。在一次偶然的討論中,Raindy 提到正選擇位點分析潮针,是常見分析术荤,但很多做進(jìn)化分析的朋友,卻常常搞不清楚如何操作每篷,單純正確的分析邏輯瓣戚,可能需要數(shù)周甚至上月入門端圈。降低門檻,讓這類分析不再困難子库,于是他提出了 CodeML 分析的界面化可能舱权。那會我正好沒有手上沒有更多值得開發(fā)的項目,也就一拍即合仑嗅。當(dāng)然宴倍,后來的事情就顯得復(fù)雜。因為我并沒有進(jìn)化分析的背景仓技,所以我們經(jīng)過了艱難的溝通鸵贬,才勉強完成了第一個使用版本(圖示為最終版本,圖片來源:http://wap.sciencenet.cn/blog-460481-1163040.html?mobile=1)脖捻。
關(guān)于 EasyCodeML 的開發(fā)阔逼,我其實測試了不少方法。單純在進(jìn)化樹可視化以及分支選擇上地沮,我直接使用了 JavaScript 的 D3.js 庫嗜浮,從零畫樹,并實現(xiàn)瀏覽器的交互诉濒。第一版 EasyCodeML周伦,其實是 Java 同時打包一個 Chrome 的瀏覽器驅(qū)動,用戶進(jìn)行分支選取未荒,其實是調(diào)用本地 Chrome,在網(wǎng)頁瀏覽器搞定及志。隨后才跳轉(zhuǎn)回 Java 界面片排。可以注意到:
- 從交互的角度速侈,R 語言出圖自然是不行的率寡,那也沒什么合適的 R 語言進(jìn)化樹可視化包
- 從便利的角度來談,調(diào)用本地網(wǎng)頁瀏覽器倚搬,讓人很難受 冶共。
當(dāng)然,這是最早期的版本....早已廢棄每界。我們合作的最新版本捅僵,在2018年已經(jīng)發(fā)表。這也是我第一篇共一以及共通訊的生信軟件類文章眨层。
著手開發(fā)自己的繪圖引擎
在幾乎相同的時間上庙楚,由于課題的需要,我也受夠了 blast3go 的不實用性趴樱。開始了 BioCJava 項目馒闷,主要實現(xiàn)了序列批量提取和GO注釋酪捡,以及GO富集分析的功能(這個時候 ,富集分析已經(jīng)是我自己純粹的Java實現(xiàn)纳账,所以跟 R語言不再有交集)逛薇。
一方面EasyCodeML的進(jìn)化樹分支選取上需要更好地實現(xiàn),另一方面 BioCJava 項目只能做純粹的文本處理疏虫,實用性不高永罚。似乎還是一個寒假,甚至又是過年在家的時候 议薪,我讀了《The Grammer of Graphics》這本書尤蛮,重新理解了圖層語法。
那時的我斯议,覺得圖層語法實在太流弊产捞。Java也應(yīng)該有一個。于是我自己著手寫了 JJplot (參考R語言ggplot2的名字)哼御。如果我沒記錯話坯临,我為此還畫了一些UML,畢竟實現(xiàn)還是沒那么簡單恋昼。說是圖層語法看靠,其實實現(xiàn)下來還是naive。不過足夠我用于完成 EasyCodeML 的進(jìn)化樹分支可視化選取 以及 GO Level 2 注釋可視化液肌。
TBtools 開發(fā)伊始
所有的無奈挟炬,全部的認(rèn)知,讓我在 TBtools 的實現(xiàn)嗦哆,有更細(xì)致的思考谤祖。參考前述,一開始 TBtools 的名字是 BioCJava老速。但兩三次被認(rèn)為是 biojava 的界面打包后(不能怪別人看不到 CJ 二字粥喜,但實在不爽)我臨時決定修改程序名字為 TBtools,意指 Tools for Biologists橘券。后來在大群釋放后 额湘,被傳布成了 Tao Bao tools,意思是 淘寶工具旁舰。嗯锋华,多少可以蹭點淘寶熱度,其實也不錯鬓梅。誤打誤撞供置,我也沒有再修改他的名字。
這是一個相對早期版本的 BioCJava绽快,時間是 2015年08月31日(項目開始的一個月后)
注意到芥丧,這個時候 TBtools 的 Logo 已經(jīng)存在紧阔。這個 Logo 還是有點故事,主要貢獻(xiàn)的人是前述提到的女朋友续担,即借我飯卡擅耽,我白吃白喝了個把月的那個。也可以看到物遇,BioCJava 只有三個基本功能乖仇,誰也不會想到,五年后的幾天询兴,TBtools 界面上就是 140+ 個功能(更不提背后的 360+ 個命令行功能)乃沙。那會用戶其實非常少,應(yīng)不到10個人诗舰,主要還是找我?guī)兔Ψ治鰯?shù)據(jù)的老師或者課題組同學(xué)警儒。
TBtools 開發(fā)第一年
在這個時間點上,我仍然還在大群(即 bioinformatics*中國)活躍眶根。所以 TBtools 主要推廣還是在大群蜀铲。基于群里的交流討論属百,我也不斷改進(jìn)和開發(fā) TBtools记劝。
這已經(jīng)是開發(fā)約莫一年后的樣子。主要只是拓展了GO注釋族扰,富集分析厌丑,以及GO層級統(tǒng)計的功能。為什么一年時間才寫這些功能渔呵?因為我也有生物學(xué)實驗和其他課題要開展蹄衷,TBtools 的開發(fā)從始至終,可以說是一個上班摸魚或業(yè)余消磨時間的方式 厘肮。當(dāng)然,這一年的跨度睦番,可能還是在 JJplot 的開發(fā)上类茂。
TBtools 開發(fā)第二年
這一年,我碩士延期了托嚣。不過這個延期是我自己要求的巩检。因為我剛剛解決了一些不得不解決的現(xiàn)實問題,可以開始更有尊嚴(yán)的活著示启。于是兢哭,我那會打算是爭取出國(當(dāng)然,最后沒有出去有另外的原因夫嗓,包括身體迟螺,家庭冲秽,去向以及offer來得太晚)。無論如何矩父,這一年卻也是 TBtools 成長飛快的一年锉桑。我暑期在家,想明白了一點事情窍株,于是將 JJplot 全盤推倒民轴,重新寫了一個更具圖層語法意義,支持全圖縮放和交互的 JJplot2球订。于是才會有系列其它可視化內(nèi)容后裸,包括韋恩圖以及共線性可視化等。
值得一提的是冒滩,Omicshare.com 論壇開設(shè)不久微驶,我也就跑到論壇上做了一些宣傳,最后還當(dāng)了一個版塊的版主(當(dāng)然旦部,現(xiàn)在還是)∑硭眩現(xiàn)在,我沒有繼續(xù)主動在上面推廣 TBtools士八,原因主要是論壇重點在于生信討論容燕,不太適合過多推廣TBtools。無論如何婚度,我覺得 Omicshare 論壇蘸秘,仍然是我極力推薦的生信論壇(可能得到充分的公司資金支持,所以可以較好地運轉(zhuǎn))蝗茁。感興趣的可以點擊這個鏈接 http://www.omicshare.com/user/register.php?uhash=1659401951醋虏,跳轉(zhuǎn)并注冊賬號。
在論壇上,仍然可以搜索到一些非常早期的 TBtools 教程饭寺。當(dāng)然阻课,更多的,大家或許可以討論一些生信相關(guān)話題艰匙。不時看到一些我感興趣的話題限煞,我仍然有在回復(fù)。
在此期間员凝,我也發(fā)現(xiàn)論壇并不太適合我個人與 TBtools 用戶的溝通與交流署驻,主要在于時效性。此外,QQ群里旺上,用戶也可以相互討論交流瓶蚂。于是,我建立了第一個 TBtools 使用交流群抚官。
在兩三年后扬跋,大體是這樣(注意到,保持每天請出QQ群的習(xí)慣)凌节;而現(xiàn)在钦听,8群也滿...
JIGplot 的到來
轉(zhuǎn)眼就是2017年,我注冊了并開始運營《生信札記》微信公眾號(當(dāng)然用心經(jīng)營是一年后)倍奢。在上面撰寫了一些生信學(xué)習(xí)經(jīng)驗朴上,而后來便主要用于分享TBtools 使用實例。TBtools 社群在接下來的一年間快速增長卒煞,很快便滿人痪宰。有了bioinformatics*中國的管理和發(fā)展經(jīng)驗,我試圖嘗試另外的發(fā)展方式畔裕,即若有必要衣撬,就開設(shè)新群。但很快扮饶,兩個2000人群的名額已經(jīng)用完具练,大群任期也臨近。我便換屆卸任甜无,將重心轉(zhuǎn)移到接下來的博士課題和TBtools社群管理上扛点。
或許2017年的整整一年,是我相對輕松地一年岂丘,那邊碩士畢業(yè)沒有問題陵究,這邊博士也定了去處。我重新思考了繪圖引擎的實現(xiàn)奥帘。值得提及铜邮,這段時間,大濕兄(Y蜀黍寨蹋,現(xiàn)任職于南方醫(yī)科大牲距,博導(dǎo))在他的公號上不時更新了一些推送。我現(xiàn)在只有大體模糊的記憶钥庇,其中一句話,對我的觸動相對較多咖摹,總結(jié)一下评姨,所有的計算機圖形可視化,都可用 點 決定。兩個點就是一條線吐句,三個點就是一個圖形胁后。這本身只是一個初中幾何知識,但我卻用了兩三年才想明白嗦枢。于是攀芯,在接下來的半年到一年內(nèi),我又一次完全推翻了 JJplot2 實現(xiàn)文虏,開發(fā)了 JIGplot侣诺。
這一次,我不再執(zhí)著于圖層語法的實現(xiàn)氧秘,當(dāng)然思想上我依然有所參考年鸳。相應(yīng)實現(xiàn)的思考,在一個PPT丸相,我可能已經(jīng)打開搔确,思考,調(diào)整灭忠,關(guān)閉了不下百次(Emmm膳算,我不小心都快被自己感動哭了)。所有的思考和努力弛作,熔鑄在 JIGplot涕蜂。
從此,TBtools 的可視化相關(guān)功能得到絕對地拓展缆蝉。
博士研究生階段
時間飛逝宇葱,碩士一年的延期結(jié)束,我也開始了博士研究生生活刊头。在這一期間黍瞧,碩士課題組做了一部分菠蘿基因家族分析的工作,同時博士課題組(我尚未畢業(yè))也在做一些家族分析工作原杂。我看著他們做一些結(jié)構(gòu)域預(yù)測可視化印颤,MEME motif可視化,甚至于基因結(jié)構(gòu)可視化時穿肄,總是難受年局。因為效率真的太低,可能搞完了要兩三天咸产。既然有了JJplot2矢否,我反手就是一個生物序列可視化功能,無論是結(jié)構(gòu)域脑溢,MEME還是基因結(jié)構(gòu)僵朗,直接繼承一個類,于是變成三個獨立可視化功能。Emmm验庙,感覺這個功能一下子幫大家省了不少時間顶吮。
JJplot2 的實現(xiàn),并不支持拼圖粪薛。而 JIGplot 天生就是圖層化悴了。博士期間我進(jìn)一步開發(fā)的 MetaGeneStructurePlot,支持一鍵化违寿,一張圖同時展示 湃交,進(jìn)化樹,MEME motif陨界,基因結(jié)構(gòu)巡揍,結(jié)構(gòu)域,甚至其他菌瘪。
當(dāng)然腮敌,可能也是這個功能的推廣,TBtools一度(或者甚至一直)被人認(rèn)為就是專門做基因家族分析的工具俏扩。對于這個糜工,我也很無奈。
博士研究生這三四年录淡,事情確實多了許多捌木,課題也多了很多。TBtools 的開發(fā)主要是基于我個人或者課題組課題需要嫉戚,所以功能也在不斷豐富刨裆。其中包括一些比較基因組相關(guān)工具。當(dāng)然彬檀,更多的其實并沒有開放出來帆啃,所以可能知道的人不是很多∏系郏總的來說努潘,雖然這兩三年沒有非常明顯的階段性突破(如還再推翻繪圖引擎 JIGplot),但更多功能得到開發(fā)坤学,優(yōu)化疯坤,增強和拓展。如果說我碩士階段對應(yīng)了 TBtools 的出生和兒童時期深浮,那么博士階段對應(yīng)的則是 TBtools 長大成人压怠,并辦了成人禮(TBtools文章終于有了歸宿)。
TBtools 功能現(xiàn)狀
TBtools 能夠有如此豐富的功能飞苇,有賴于我所在課題組(博士-夏瑞教授課題組和碩士-何業(yè)華教授課題組)刑峡,TBtools 三十多位群管 以及 目前 2萬有余用戶的意見和建議洋闽。相關(guān)的推送已經(jīng)有很多,這里附上一張簡圖突梦,
目前已開放的GUI功能140+,而這個數(shù)字羽利,事實上還在增長宫患。
TBtools 投稿經(jīng)歷
前述已基本理清 TBtools 項目開發(fā)始末≌饣。可以說娃闲,TBtools 從一開始就是我個人課題或者分析需求導(dǎo)向開發(fā);說得直白一點匾浪,那么是順手寫一寫皇帮。未曾想過他會走到今天,更沒想過將其撰寫成文并發(fā)表蛋辈。
第一次撰寫成文属拾,已經(jīng)是2018年年初(開發(fā)了約三年),在較多用戶的催促下冷溶,草草整理了一份 PDF 文檔渐白。文檔相對粗糙,我花了兩三天就做完逞频,就放到 bioRxiv纯衍,因為其他課題也在開展。
其中的圖表是這樣的
可以看到苗胀,基因結(jié)構(gòu)的圖片也只是朋友華南植物園王潔雨(演化生物學(xué)-公眾號那個老王)畫的襟诸,我截圖拿來用了。圖中還帶著水印基协。很明顯歌亲,那會的想法只是放上去,不要再被用戶懟說鏈接不好引用堡掏。
就這樣应结,過了半年,我們手上項目暫有停歇泉唁,另外多少我對論文發(fā)表有了新的認(rèn)知鹅龄,應(yīng)是包括《園藝研究》主編程宗明老師的一次報告提及,既然工作做了亭畜,就還是要發(fā)表扮休。我與夏老師商量后,決定還是花點時間拴鸵,盡量投了玷坠。我們又花了幾天蜗搔,寫了一篇感覺還不錯的短文,Application Note八堡,投到《Bioinformatics》樟凄。大體是這個狀態(tài)(這些可以在 bioRxiv查看到)
其實這張圖表也挺好看的。若是做一點生物信息的兄渺,多少還是有一種執(zhí)念缝龄,即發(fā)一篇《Bioinformatics》( 二區(qū) ),那時我也有(此前挂谍,已有一區(qū)刊物的朋友邀請投稿叔壤,我們婉拒了)。沒有太多意外口叙,Bioinformatics 編輯回信炼绘,大體是“我們稿件太多,懶得理你”妄田。明顯只是客套話俺亮,但也沒辦法(后來Bioinformatics分?jǐn)?shù) IF 一跌再跌,也就再也沒想法更新并投過去了)形庭。值得注意的是铅辞,投過去時,JIGplot已經(jīng)開發(fā)并放進(jìn)去了萨醒,我對 TBtools 的工作其實比較有信心斟珊,至少創(chuàng)新點是有的。但悲劇是沒辦法的富纸。我與夏老師就這個事情討論過一次囤踩,大體原因是,文稿內(nèi)容和圖片確實無法反應(yīng)出 TBtools 的創(chuàng)新點和優(yōu)勢所在晓褪,換句話說堵漱,怪不了別人。此后不久涣仿,我們接到了另一個生信相關(guān)期刊(三區(qū))邀請投稿勤庐,我們婉拒了;也接到國內(nèi)國外其他期刊約稿好港,我們還是婉拒了愉镰。期間,不少朋友給了這些那些的建議钧汹,可惜丈探,那時的我確實不在狀態(tài)。
就這樣拔莱,又過了一年碗降。2019年年末隘竭,我家中有事離開學(xué)校,于是有了一段相對長的空余時間可以做點事情讼渊。夏老師和我前前后后討論了數(shù)次动看,多半是“激烈討論”(其實這個對我們兩個是常態(tài),但無論如何爭吵爪幻,在課題或者學(xué)術(shù)的角度上弧圆,目標(biāo)是一致的)。最終笔咽,我們努力打磨,加上一起參與到 TBtools 界面霹期,文檔叶组,文稿工作的老張(張翼),Margaret 和 Hanna历造,終于還是得到一個不錯結(jié)果甩十,新的文稿基本可以展示 TBtools 的部分主要特性。
一共是三個圖吭产,這也是某種意義上的 TBtools 文稿完全重寫的第三版侣监。當(dāng)然,更為幸運的是臣淤,分子植物期刊(Molecular Plant)的編委老師們愿意花時間了解 TBtools 相關(guān)工作橄霉,我們終于也得到了文稿送審的機會。在編輯和審稿人的建議下邑蒋,我們再次完全重寫了TBtools文稿(這應(yīng)算作第四版)姓蜂,并補充了兩張圖。前前后后医吊,我們幾個人花了挺多時間和精力钱慢。最新的這版文稿,展示了 TBtools 更多的特性卿堂。靜態(tài)圖片終歸是靜態(tài)圖片束莫,無法完全展示,但我覺得這應(yīng)該已經(jīng)是極限草描。
經(jīng)過了大半年的努力览绿,文稿被接收發(fā)表。對于這四個 TBtools 文稿版本陶珠,感興趣的可以直接在 bioRxiv 上下載并與 Mol Plant 期刊的文稿對比挟裂。
爭了一口氣
生活,或許如此揍诽。我們不需要過多理會別人的看法诀蓉,而只堅持做自己覺得值得的事情栗竖。TBtools 開發(fā)早期,遇到過不少質(zhì)疑渠啤,甚至是詆毀狐肢。甚至于一些人身攻擊。五六年前的事情沥曹,也不值得詳細(xì)提及份名。不過,看不上 TBtools 的妓美,依然大有人在僵腺。這是一件理所當(dāng)然的事情。從 TBtools 表面上能做的事情來說壶栋,確實并沒有多少明顯的超越辰如。因為我一直看重的是降低甚至抹除數(shù)據(jù)分析的門檻,節(jié)省生物科研工作者的時間贵试。所以 TBtools 主要開發(fā)目標(biāo)一直是琉兜,將繁雜的分析過程簡約化,常用的分析自動化毙玻。TBtools 里面幾乎每一個功能都包含了我個人思考豌蟋,即使是 BLAST 等界面化功能,我也專門做了序列類型的預(yù)判桑滩,從而節(jié)省了軟件參數(shù)設(shè)置的時間梧疲。相應(yīng)的優(yōu)化還有很多,但是這些并不能被評判者們所看到施符。
有時候想想往声,你的汗水,你的努力結(jié)果戳吝,都在大多數(shù)人看不到的地方浩销,那么并不能怪別人看不上你。只能說听哭,可能你做的東西慢洋,本身就不容易被認(rèn)可。當(dāng)然陆盘,我運氣比較好普筹,一是 TBtools 用戶朋友看得到,二是 博士導(dǎo)師和碩士導(dǎo)師的幫忙隘马,三是 Molecular Plant 期刊的編委和審稿人愿意花時間了解 TBtools 的工作枉昏。三者結(jié)合督弓,即天時地利人和开皿,于是 TBtools 終于得以見刊萎攒。
當(dāng)我知道文稿被接受的時候啃匿,多少我是松了一口氣(甚至有早期用戶與我提及他都要哭了)。或許這是因為我們已經(jīng)自認(rèn)優(yōu)秀太久,終于還是爭了一口氣沥潭。我們打了那些看不上我們的人一記響亮的耳光,我們也不再需要承受無理的質(zhì)疑:都沒發(fā)文章嬉挡,軟件能用嗎钝鸽?預(yù)印本靠譜嗎,不敢引用云云....
感謝
TBtools 的開發(fā)庞钢,完善拔恰,到現(xiàn)在階段性的成果出來。事實上基括,需要感謝的人或者社群很多仁连。以下我大體列舉出來,但依然會存在遺漏阱穗,請注意到的朋友提醒下我。順序按我腦海里浮現(xiàn)的順序排列使鹅,不對應(yīng)感謝的份量:
華南農(nóng)業(yè)大學(xué)何業(yè)華教授揪阶,2009年本科入學(xué),當(dāng)年十月份患朱,我便進(jìn)入他的課題組鲁僚,組培,分子裁厅,大田都接觸了不少冰沙。碩士也順利推免,此間一些我個人無奈但也不可抗拒的事情發(fā)生执虹。何老師給與了我充分的自由拓挥,讓我得以有足夠的時間鼓搗數(shù)據(jù)分析,并最終找到解決辦法袋励。
湖南農(nóng)業(yè)大學(xué)陳浩博士侥啤,跟著浩哥走,于是我有機會學(xué)習(xí)并了解生物信息數(shù)據(jù)分析茬故。
貴州師范學(xué)院吳亞盖灸,前述提起多次的女朋友(現(xiàn)在是我的妻子),我們一起經(jīng)歷了生病卻不夠錢買藥的階段磺芭,一起租過半夜漏水的房子赁炎。每每想起,覺得委屈了她钾腺。她幫我設(shè)計了Logo徙垫,在早期界面設(shè)計和圖形配色上給與了不少建議(比如MEME motif 可視化的配色方案)讥裤。
-
bioinformatics*中國 QQ交流群的所有群管,如果沒有他們松邪,或許我從未明白生信分析到底是啥坞琴。千言萬語,不如我們在群里開車的默契逗抑。此處不做展開剧辐。
中山大學(xué)的任間教授以及我齊哥(Zinky),他們讓我看到 Java 開發(fā)可視化工具的無限可能邮府∮兀或許沒有他們,那么我在 Java 學(xué)習(xí)上褂傀,可能一直無法入門忍啤。
南方醫(yī)科大學(xué)余光創(chuàng)教授(我大濕兄,你們Y蜀黍)仙辟,他不停地在博客或者公眾號上分享的計算機繪圖邏輯同波,觸發(fā)了我的思考,從而才有 JIGplot 的充分實現(xiàn)叠国。
華南農(nóng)業(yè)大學(xué)夏瑞教授未檩,TBtools 的完善得益于博士課題以及課題組其他成員的需求,建議和意見粟焊。TBtools 文稿構(gòu)思冤狡,寫作,投稿甚至于最終發(fā)表项棠,我們一起耗費了大量時間和精力悲雳。前前后后 ,一個軟件香追,鼓搗了兩年文稿合瓢,全部推倒重寫了三版。同時還要感謝張翼透典,Margaret 和 Hanna 在其中的時間和精力付出歪玲。
-
TBtools 三十多位群管,當(dāng) TBtools 在交流群里掷匠,在其他社群里滥崩,在公眾號上被懟的時候,是他們一直鼓勵我讹语,相信我钙皮,并支持我,于是我得以堅持下去。
OmicShare論壇及其各個版主短条,雖然我退群有兩三年导匣,不過OmicShare活躍的那段日子,同樣也是回憶茸时,也是 TBtools 成長的一個階段贡定。我仍然相信,OmicShare論壇可以也值得一直辦下去可都。必要的商業(yè)化缓待,是保證公益可持續(xù)不可或缺的部分。
早期曾經(jīng)捐助過 TBtools 開發(fā)的用戶朋友渠牲,我印象中至少有三個人旋炒,現(xiàn)在應(yīng)該都在高校工作了吧,他們捐助了加和起來估計有 500 塊錢签杈,那會正是我經(jīng)濟窘迫瘫镇,而 TBtools 開發(fā)不被認(rèn)可,孤助無援的時候答姥。他們讓我覺得這些工作铣除,其實還是值得。我認(rèn)為鹦付,一定的物質(zhì)激勵通孽,或許恰恰是成事的關(guān)鍵。這里還需要感謝南京大學(xué)的一個老師睁壁,我們來來回回聊了幾次,他似乎習(xí)慣把我拉黑互捌,以至于我確實沒搞清楚潘明,他到底是姓湯還是姓周?
SCAU生物信息交流群秕噪,這是我和浩哥一起組建的華南農(nóng)大生物信息交流群钳降。其中成員仍然不多。浩哥和我開始做生信的時候腌巾,我們自認(rèn)為校內(nèi)并沒有做生信的老師遂填。六年后的今天則有所不同。五年大招人和人才引進(jìn)澈蝙,華南農(nóng)現(xiàn)在應(yīng)是有一些側(cè)重生信數(shù)據(jù)分析相關(guān)研究的課題組吓坚。當(dāng)然,這并不影響我們組建的這個社群存在的意義灯荧,雖然他一直沒有太多人礁击。但, TBtools 的開發(fā),尤其是菜單的重構(gòu)哆窿,我有印象是在群里討論中有了決定链烈。
支持并幫助推廣 TBtools 的系列公眾號,這里不便一一列舉挚躯,但我認(rèn)為你們應(yīng)該知曉强衡。
參與 TBtools使用 和 基因家族分析 講演的朋友們,你們的資助使得我有足夠的資金購置安裝器授權(quán)码荔,使得所有用戶尤其是新手用戶漩勤,有更好的 TBtools 安裝和使用體驗。
TBtools 的 2萬+ 用戶目胡。TBtools 的開發(fā)和完善锯七,得益于社群的使用意見和反饋。如果沒有用戶的意見或建議誉己,TBtools 不可能有現(xiàn)在的狀態(tài)眉尸。
寫在最后
洋洋灑灑,不小心就碼了一個長文巨双≡牖互聯(lián)網(wǎng),是有記憶的筑累。多年以后袱蜡,我回頭來看,這篇推文慢宗,或許會更為有趣坪蚁。感謝冥冥中,你著實讓我相信镜沽,一切搞不死你的敏晤,會讓你變得更強。
最后缅茉,還是用我的 QQ 簽名作為結(jié)束語吧嘴脾。