• 不知出处的打油诗一首

    铁甲将军夜渡关
    朝臣待漏五更寒
    山寺日高僧未起
    算来名利不如闲

  • 愉悦与平和,久违了

    其实本来我今晚(应该说是昨晚)的任务是为了一场小讲课,要搜寻一些好的文献,以及去回顾一下近期的病例。然而自己拖拉的老毛病再次发作,不自觉地溜到了油管,无意间看到了《圆桌派》第二季中对尹烨(华大集团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字的限制

    劣势:

    • 发表和分享的便捷性均较差
    • 回复者与博文作者地位的不对等
    • 去中心化引起内容零散,不集中
  • 关于谷歌和苹果的开发者网站……

    因为最近想尝试一下简单的平台相关的开发,所以分别浏览了谷歌和苹果的开发网站,对比之下觉得还挺有趣的。

    谷歌的开发者网站(https://developers.google.com/)简洁而友善,开门见山,入口非常清晰,想关注什么产品直接点进去便知。进入Android开发者网站之后,也基本传承了简洁的特点,首页几个大大的区块是最新开发套件的下载、开发入门指南和实例。给我这样的初学者的感觉非常好,好像一切的踌躇都解决了。入门指南也是步步为营,解释得非常清楚。

    苹果的开发者网站(https://developer.apple.com/)则比较感性,有大量绚丽的图片和视频,宣传标语也极具吸引力。进入Develop页面之后文档入口也比较明确,然而再进入Guide之后觉得似乎比较混乱,不知从何入手。几个针对自家开发套件的介绍也缺少相对清晰的学习入口。

    那么其实我想说什么呢……其实我想说苹果的开发者网站里都什么玩意啊净是自己产品的广告除了吹牛没点正经东西你这是搞啥啊……