愉悦与平和,久违了

其实本来我今晚(应该说是昨晚)的任务是为了一场小讲课,要搜寻一些好的文献,以及去回顾一下近期的病例。然而自己拖拉的老毛病再次发作,不自觉地溜到了油管,无意间看到了《圆桌派》第二季中对尹烨(华大集团CEO,华大基因副董事长)的访谈。嘉宾和几位主持的发挥都非常好,从病毒、基因开始,聊到生命,继而聊到物理、人性、教育,甚至宇宙、宗教和哲学。其中提到了许多我所了解的、不了解的科学家和思想家,讨论了许多见解和观点。最后落脚于自由,落脚于多样性的可贵。虽然个中确有一些错误,但整体瑕不掩瑜。看罢心情既激动,又似乎有一种坦然的平静,这样的感觉我似乎曾经拥有,但已经睽违太久,今日终于再次寻得。

自离开大学、来到医院之后,年纪渐长,而所关注的内容却趋于单一,兴趣逐渐消退,只在病房、门诊、手术、考试之类的任务中疲于奔命,在上级、同僚的训诫和品评中丧失自我,逐渐沦为一个失去灵魂、俗不可耐之人。今日看到这些访谈,仿佛自己暂时摆脱了种种世俗困扰,回到了仰望星空的中学时代。或许自己的科研烂到一塌糊涂,那又如何呢?那些坐拥多少文章、专利,掌握多少课题,获得多少荣誉的“大牛”们,和这些真正的思想者相比,又算得了什么?人与人的智识、成就、名望固然有高低之别,但天地之间,本无上下。众生平等,死亡是最公平的程序。至于我自己,或许永远无法取得什么世俗上的成就,但能和这些伟大的思想者神交,聆听他们的见解,这样似乎也就足够了。想到这里,再面对平日他人对自己的评价、要求,以及繁冗的日常工作,似乎真的变得坦然了不少。

写到这里,我突然明白了白居易写“如听仙乐耳暂明”时的感受。日常生活的痛苦之源实在太多,无尽的工作,上级的责难,还有政治环境的压迫,无一不在打击、扰乱自己的心神。沉溺于社交网站可以获得暂时的逃避,却难以得到长久的平和。恐怕总是需要找些东西,这样将自己的思维解脱出来,仰观宇宙,才能真正得到一些释放。是时候抽些时间,拿起放置已久“闲书”,找回曾经的自己了。

又及:尹烨是一个饱受争议的人,遭到饶毅“炮轰”我也有所了解。我觉得相比之下,饶毅是个更纯粹的科学家,或者说科研工作者,对商业运作,以及科普一类“动嘴皮子赚吆喝”的行为嗤之以鼻,也是可以理解。但从《圆桌派》这两期所聊到的内容看,尹烨绝不只是个哗众取宠的商人,他涉猎广泛,对很多问题有自己的简介,对社会、生命和自然有着自己的情怀,从这些方面来看,他是很值得敬佩的。

“Consider”的部分常见用法总结

我发现自己在写英文句子时常想去使用“consider”这个词,但是对其用法却非常含糊,以致于常常不知对错。恰逢今日要回复期刊编辑,在查找中看到了一篇很好的总结,进一步简化后,供自己参考。

Consider 主动用法:

Alice is considering sending a mail.

Alice is considering that she can send a mail.

Consider + 宾语 + 不定式的用法:

Alice considers Bob to be a genius.

Alice considers Bob to work like a genius.

Bob is considered to be a genius.

Consider … as:

注意:有观点认为此类用法有误。

Alice considers Bob as a genius.

Bob is considered as a genius.

Considering:

Considering his age, Alice did very well.

Considering she’s young, Alice did very well.

Prevent foremost blank page when plotting to PDF in R (with survminer)

When I was generating a a series of plots using package “survminer” in R, I often suffer from a blank page generated automatically at foremost of the PDF. For example:

library(survival)
library(survminer)

# Using lung dataset.

cairo_pdf(filename = "./temp_plot.pdf", onefile = TRUE)
for (single_sex in unique(lung$sex)) {
    lung_single_sex = subset(lung, sex == single_sex)
    cox_result = coxph(Surv(time, status) ~ age + ph.ecog, data = lung_single_sex)
    print(ggforest(cox_result, data = lung_single_sex))
}
dev.off()

Then there will be three pages in temp_plot.pdf and the first page will be blank.

I don’t know the exact reason of the issue. But it seems ggforest() called ggpubr::as_ggplot(), which called gridExtra:::grid.newpage() or something similar, then caused the blank page before the plot. I searched the issue on the web and most people advised setting onefile = FALSE in cairo_pdf() to prevent the blank page. While it is not an ideal workaround because it makes the PDF contain only the last plot written to the file.

After some attempts, I found a relatively better workaround. The key is the plot(s) must be generated BEFORE (but not after) the PDF device opened. We can use a list to store the plot(s) which will be plotted on the PDF. For example:

p_list = list() # To store the plots.
for (single_sex in unique(lung$sex)) {
    lung_single_sex = subset(lung, sex == single_sex)
    cox_result = coxph(Surv(time, status) ~ age + ph.ecog, data = lung_single_sex)
    p = ggforest(cox_result, data = lung_single_sex)
    p_list = c(p_list, list(p))
}
cairo_pdf(filename = "./temp_plot.pdf", onefile = TRUE)
for (p in p_list) {
    print(p)
}
dev.off()

Then the pages of PDF seem normal.

References:

https://github.com/hms-dbmi/UpSetR/issues/90

https://github.com/wilkelab/cowplot/issues/24

https://blog.csdn.net/weixin_34032827/article/details/85900976

删除第三方应用安装的 Firefox 扩展(macOS) / Remove Firefox extensions installed by other software (macOS)

前一段时间在 macOS 上安装了 Avira 反病毒软件,后来嫌拖慢系统,用官方的反安装程序给删掉了。但 Avira 自动给 Firefox 安装的扩展(Avira Browser Safety)却没有被删掉。Avira 官网给出的方法是在 Firefox 删除,但实际操作却发现新版 Firefox(>61.0)竟然不允许在浏览器中删除第三方安装的扩展,清除 Firefox 配制文件也没能把这个插件删掉插件。更诡异的是,在谷歌上竟然搜不到相关的资料。没办法,只好自己手动寻找插件,最后在/Library/Application Support/Mozilla/Extensions中发现了相应的扩展,手动删除后,一切终于清净了。

//

Recently I installed Avira AntiVir on macOS, but soon uninstalled on account of slowing down the system. Nonetheless the Firefox extension installed by Avira, Avira Browser Safety, was not been deleted. Avira official website recommended user to uninstall it manually inside Firefox, but the truth is newer Firefox (>61.0) just forbids uninstalling extensions installed by other software from the browser, clearing Firefox data is useless. More strangely, I searched on Google but didn’t find anyone suffered from this issue except for me. Then I have to find the extension manually. It locates at /Library/Application Support/Mozilla/Extensions. The problem is solved by deleting the directory of the extension, and everything works fine now.

使用 homebrew-rmtree 自动删除软件依赖

Mac 用户大概都听说过 Homebrew ,一款 mac OS 下的包管理软件,可以提供 Linux/Unix 用户熟悉的包管理实现模式和操作体验。然而总的来说 Homebrew 的体验比起几个知名发行版的包管理器还是差了许多,最遗憾的就是不支持卸载软件包时自动卸载该软件所依赖的包。但其实一个包被哪些软件所依赖,Homebrew 是有数的,如果卸载一个被依赖的软件包,Homebrew 就会给出提示。

于是,homebrew-rmtree 横空出世,这款 Homebrew 插件可以自动解决依赖问题,在删除一个软件包的同时删除不被其它软件所依赖的包。使用也非常简单,首先按照上文 github 页面链接内的指导,添加好 rmtree 的 tap:
brew tap beeftornado/rmtree
然后就可以轻松地一键卸载软件包及其依赖:
brew rmtree package

不过软件作者也给出了警告,要注意有些打包者没有正确地写好依赖。此外有些包可能此前被单独安装过,但后来又安装了依赖该包的软件,那么在卸载这个后安装的软件时也可能将之前单独安装的软件包一并卸载掉。毕竟软件包的依赖问题比较复杂,还是要小心行事呀……

博客的微博化使用

类似使用微博那样,文字力求简洁明确地表达意思,或仅是单纯表达当前的心情。

优势:

  • 富文本支持
  • 良好的排版和阅读体验
  • 关键词系统更强大
  • 不受制于140字的限制

劣势:

  • 发表和分享的便捷性均较差
  • 回复者与博文作者地位的不对等
  • 去中心化引起内容零散,不集中

发牢骚的打油诗一首,题目我还没想好

手中病历心头念

桌上芳腾泪已干

身虽未动心已远

三刻五字磨时间

少年韶光匆匆过

光阴岂是金能换

战罢玉龙三百万

心身俱疲为哪般

今日打油歌一曲

焚笔毁砚睨人间

千年田换八百主

学霸能做几十年

人生苦短寂寥甚

权且梦中寻正见

无裘无马亦能醉

一生卢瑟皆随缘

——五一节间,万物清明,然万千杂事压心头,心中寂寞无人知。暂借文字放胆,作打油诗一首,发发满腹牢骚,权且博君一笑,手头事务,终须继续乃也。

推荐一个无印活页本(文昌文具?)

不知道是否有人像我一样用活页本。

首先上个链接。因为实在是找不到官方网站什么的,只好给一个×宝的链接了。

这个叫做“文昌”的活页本最早是在鄙校的超市中看到的。只有一个上书“文昌文具”的腰封,拿掉腰封之后看不到任何标志,封皮是竖条纹+喷砂处理。非常简洁干净,拿在手里质感也还不错。耐久度上也与“×边”之类的品牌不分伯仲。不过这个厂子大概实在是太小,连×宝上也只能搜到一家店面卖这个品牌。

嘛……其实推荐这个,或多或少也是在怀念自己在BJMU度过的一点点时光啦……