千年等一回

谢益辉 2013-02-27

  1. 上一篇日志已是半年。今天从村里去波士顿,一路晚点。村里的飞机晚了两小时,到芝加哥转机,眼看着还有十分钟时间奔向下一班飞机,结果飞机开到门口又排了十分钟队,活生生看着下一班飞机起飞了,只要再排下一班,又要等三个小时。于是有了这篇日志,白娘子千年等一回许官人,本小子五小时等一班飞机。
  2. 上回是讲R的各种怪癖,经过这五个月,我觉得Python有一统江湖的野心。过去我们总说统计是R的强项,别的语言要重写R的四千个包根本不可能,看pandas费了多大劲才实现R/S几十年前就实现的数据框结构,蟒蛇社区要重写个ggplot2有希望吗?多数人可能不会选择重造轮子,可是我渐渐发现蟒蛇社区真的是鸡血太充足了,真有人愿意把统计的东西一项一项重写出来。上次我在微博上说有人用IPython notebook展示了线性模型的设计阵,便是一个一统统计江湖的象征,现在又有人开始用IPython写贝叶斯/MCMC的书。小众的R社区,会不会被蟒蛇吞掉呢?
  3. IPython的教主F君,更是一个鸡血斗士,精力旺盛,声音洪亮(南美人,英语超流利),属于剑宗气宗兼修的人,不过我能感觉到他看到RStudio/knitr之后心里有咯噔一下,为什么呢?因为他总是极力表扬它们。厉害的竞争对手不是那些批评你的人,而是表扬你的人。也许是我井底之蛙、自己给自己贴金,我觉得设计和功能上这两个产品不相上下,唯一的区别就是选了不同的爹,一个选了Python,一个选了R。拼爹的年代啊。
  4. F君称Python的对手的只有Julia,而R不在对手之列(前些日子F君非常聪明地带人去MIT搞定了Julia开发者,将来Julia估计要以IPython notebook的形式在网络上现身了)。语言的问题评论起来没完没了,就仿佛比较中文和英文一样,难说谁一定强于谁,我的态度是随机应变而不随波逐流,这事儿就此打住。
  5. 2012年一猛子扎到了Github第15号码工(现在已经降到31),我自己也觉得有些意外,毕竟分母是三百万。现在又有人弄出了Github之歌(JavaScript要征服世界么?连MIDI都可以用JS生成了),我的Github之歌中间那一段十天左右的空隙,就是去波多黎各和处女群岛吃饭睡觉拖后腿(俗称“旅游”)了。
  6. 我是天生宅,宁愿宅得发芽,也不愿出门,因为出门费脑筋,吃住行处处是不确定性,而我在安排这些事情上效率极低,查机票我可以查八个小时(作为对比,这个时间如果我专心写东西的话大概可以写一万五千字中文),研究去任何一个景点都可以研究到半夜两点眼皮都睁不开了还没确定或搞清楚去不去,脑子就是缺这根筋。可偏偏就是不爱出门的人总是在出门,前两天扳着指头数了数,我来美帝之后因为开会和报告的缘故去过这些地方:2009华盛顿JSM,2010马里兰R,2011迈阿密JSM,2011纽约Strata,2011新泽西ATT,2012休斯顿Interface,2012明尼苏达R,2012纽约R,2012田纳西R,2012圣地亚哥JSM,2012西雅图Visweek,2012巴尔的摩Johns Hopkins,2012罗德岛ICERM,2013波士顿SIAM,已经订下计划但还没去的还有2013奥兰多ENAR,2013印第安纳MBSW,能去但实在不想跑了的有旧金山和英国;因其它缘故去过的还有两个州;2010回国R会议,2013将要回国R会议。
  7. 我是个很抠门的人,开会原则是不给报销的会议绝对不去。我觉得抠门不丢人,因为世上有很多会议经费反正不是浪费在你身上就是浪费在他身上,所以你不去骗自有人去骗。当然也不能纯骗,我的意思是拿出你能讲的货,能争取支持的尽量争取。上次R会议COS上有学生客官留言说能否给点差旅支持,其实我们一直都是非常努力争取资金去支持演讲的学生,这本是不太合常规的(一般不给报销路费),但我们觉得有意义,一直在做,能让我们眼前一亮的报告,我们当然愿意鼎力相助。
  8. 说说这两年出门的收获和各种交叉联系。作为宅男,单一的目的通常不足以让我出一趟门,即使是从家里去学校也是如此;如果只有一门课要上,我就不想去,必须是要上一门课而且需要见一个人,至少双重任务才能让我出门。开会更是如此,因为花在路上的时间更多。2010年R会议我跟Frank Harrell在一张桌子上吃饭,我说我是你粉丝啊,过了两年我一个人来到田纳西开R会议,他说我是knitr粉丝啊。2008年结识鸟兄(张翔)于第一届北京R会议,2010年他跨过太平洋来美帝R会议再聚首。折腾《现代统计图形》结识周老师和卢编辑,2011年帮我牵线去了纽约Strata会议(在那儿整了个Kindle),我就坐火车顺便去拜访了ATT实验室(拜统计部门头头赐宿一晚),2012年夏天我又回到这个地方,实习。2012休斯顿,结识Norm Matloff,两个月后田纳西再相逢,从此认定我是个滑稽程序员。因为误打误撞弄出了knitr,引来JJ Allaire关注,几个月后他到Ames村带我明尼、纽约、田纳西一路报告;2012到西雅图和RStudio开发者之一Joe碰头聊Shiny;这次到波士顿,正好也是RStudio“总部”,看到了骨灰级程序员的专业装备(从未见过的键盘和鼠标不在话下,关键是还有护腕手套)。2012明尼苏达结识Dan Kaplan,从此也是各种会议上碰面。2012纽约结识Machine Learning for Hackers的作者之一Drew Conway。2012田纳西初识Pengcheng并承蒙照顾,请吃大餐加导游,几个月后圣地亚哥又相聚。2012西雅图之旅说是去开会,其实纯粹是打酱油,一场报告都没听,中间顺便溜去了一趟Fred Hutchinson,也是Bioconductor的巢穴,从此结识几位Bioc老大,而今年夏天的实习也就定在那儿了。圣地亚哥初见John Ramey,而在Hutchinson意外又相逢,要是他晚十秒去打咖啡,我就推门出去了。在Hutchinson遇到了西雅图R用户会议的组织者,没想到是我将要去拜见的Roger Peng的学生。Johns Hopkins的Simply Statistics博客在统计界已经小有名气,对三小帅教授我神交已久(很认同他们的一些非传统观点),没想到突然有一天收到他们邀请去访问一天,而此行大家都是鸡血状态,非常谈得来,我一天下来说话都说得头昏,到最后他们亮出底牌,想让我去做两年博士后,让我不胜惊喜,经过长时间的挣扎,十动然据了,我人生中第一份工作offer啊……今年他们再相邀去访问几周,可惜我这学期两门课的助教而且已经有三个会议在日程上,实在不好意思偷偷溜走,于是作罢(因此有了这个后续招人通知)。这次在波士顿又见Roger,小哥的嗓音相当磁性,绝对适合做主持人或电台主播。访问Johns Hopkins听了各种稀奇古怪的奇闻逸事,包括Delaware的打南瓜比赛(Punkin Chunkin,有够无聊的,把南瓜当炮弹打,还有世界锦标赛),以及Jeff Leek通常要全熟的牛排(跟我一样)并且因此总是遭餐厅鄙视,关于Hopkins这个诡异的地方和诡异的人以后再专门写。至此我稀里糊涂跟可重复研究扯上了关系,于是后来布朗大学的可重复研究研讨会喊我去吃饭,接下来陡然冒出来三个跟可重复研究的会议(SIAM/ENAR/MBSW),一些生面孔渐渐熟了起来(在SIAM会议上,我远远看一个背影就知道是Victoria Stodden)。
  9. 孟非是个聪明人,他非常不介意放低身段,他明白自己表现的势和别人眼中的势成反比,我比较喜欢这样的人(并非淡泊名利,但名利取之有道)。吹捧太多往往适得其反。乐嘉除了嗓子复原之后的那几天还像个人样,慈悲为怀,其它时间不免让人觉得太装腔作势故弄玄虚。黄菡是个善良的阿姨,也仅此而已。那些上来就拼命夸奖三位老师的男嘉宾,让我最搞不明白,有你们说的那么神吗。又及:为什么这年头娱乐圈的人都称“老师”了呢?
  10. 我总想问主持人,歌手就歌手,什么叫歌者?我还想问主持人,究竟什么叫“用生命在唱歌”?
  11. 那些好声音中,我只记得一个没入选的歌手,云杰,《鸿雁》,至少在我这儿,他是冠军。我仍旧不懂,唱歌这事情,如何评判高低。给歌手排名,只不过是为了赚取收视率而已。Beyond是一个经典时代,经典存在记忆中就好了,不明白黄贯中为什么要参加《我是歌手》,我觉得拿Beyond的那些经典去趟这(混?)水很不合适。说到Beyond,对我而言他们最好的一首歌是《再见理想》,那种心境,一去不可复返。
  12. 烟花易冷,牛肉易断——煮牛肉有感。
  13. 人们总是羡慕专注的人,可是专注一定意味着放弃,专注所有的事情就不叫专注了。放弃可以弃公或弃私,可惜平均看来我属于不靠谱的前者。不计其数的读者问《现代统计图形》什么时候出来,本小子在此统一回应一下:我非常需要苦力帮忙把初稿的内容移植到新排版中并且大量修剪参考文献和脚注,这基本上是复制粘贴的活儿,但也需要调整内容的能力,希望你非常熟悉(Xe)LaTeX和R,不反感LyX同时有代码洁癖,了解knitr……但处于这样的交集下的人往往已经没有时间干这种体力活了。这本书没能及时出来,也跟我这两年一直在更新工具有关,LyX里的大部分老bug都已经修正,Sweave也被knitr重写了。如果两年前就有这种万事俱备的环境,我可能很快就能搞定这本书。如今,我只能趁热先把knitr书给写了,落下的工作一旦落下,捡起来会感到很大的惯性,还是那句话,优秀和不优秀都是一种习惯。
  14. HN上发来一个故事,信封里的20美元。我不知道这个故事是否有文化差异,即是否适合中国国情。37signals的观点总是标新立异,我只能说统计毒害了我的思维方式:每当看到这种成功后之人谈成功,我都在想我们的控制变量和他们相同吗?严格按照统计的思维来说,就是“在其它变量取值不变的情况下,某变量变化会导致因变量变化多少”。如果这些“其它变量”里国籍是一个显著的自变量,那类似的故事听再多也没用。如果我说我愿意接受120人民币报酬回答你的问题,你愿意吗?也许少数人愿意,但我会因此成为百万富翁吗?我觉得不可能。
  15. 一个小变化的大意义:在我无情无耻无理取闹的骚扰下,R从3.0.0版本开放vignette(下译为“小品文”)的编译引擎,Sweave独霸小品文的时代终于过去。为了达到这个目的,我琢磨了一下R核心成员,Sweave本来是Fritz写的,但近年来他基本上已经退居二线弄后勤工作去了,维护Sweave主要有两个人,Ripley大人和Duncan Murdoch。显然前者是不能轻易骚扰的,他2011年useR!会议上说了一句让我极度失望的话:“R的开发主要是为了核心团队成员的需要”。能理解,但不能接受。向他进谏估计会无效。2012年休斯顿见过Duncan,相对来说比较好说话一些,所以就直接私人联系之,一来二去他动心了,在一个月黑风高的夜晚,他向SVN库提交了第一版小品文引擎的修改工具。松了这次土之后,另一位用户Henrik进一步扩展了小品文引擎,使得用户可以自己注册小品文的文档类型。这件事情的意义在哪儿呢?Sweave的限制太强,我们要推广可重复性研究遇到的一个可笑的障碍是LaTeX,因为Sweave选择了LaTeX作为唯一合作伙伴。这件事我已经在好几个会议上讲过了(),尽管我是LaTeX重度用户,但如果我来推广可重复性研究,我一定不会选择LaTeX作为入门工具,否则听众几乎一定会扭头就走。R Markdown这弱爆了的工具,却赢得了众多学生的心,你根本不必提“可重复性研究”这样的字样,他会乖乖用knitr,为什么?因为这样写作业更方便。R包能用knitr作小品文编译引擎之后,也就意味着几乎所有人都有能力写小品文了。更深层的意义是,R包有着良好的设计结构,我们可以把一个R包看作一个项目,它有函数、帮助文档、数据、演示、小品文、单元测试等组成部分,试想对一个数据分析项目来说,我们还需要什么额外的组成部分?没有了。所以一篇论文完全可以是一个R包,编论文就是编小品文,R CMD build搞定所有事情,R CMD check检查包是否有问题。为什么科学研究者不能借鉴软件工程的范式?你的论文不应该是死结果,发出去就永远死在那份刊物的那一期的那几张纸上了。Duncan Temple Lang和Robert Gentleman好几年前就提了这个想法,但可惜他们要往XML这条死路上走,XML的确很强大,但和LaTeX一样的命运,不能普及给大众。如果论文可以用R包的形式组织,其它后续论文可以构建在这些R包上,可以省去很多重复劳动(例如重用函数)。
  16. 客官们可能会说,你小子就是一脑子软件。可是我认为软件和论文没有太大区别(除非你的论文是关于戴几个表的),我们总是强调论文的思想和技术,而瞧不起码工的工作,学术界的“代码歧视”真的很愚蠢,软件工程里很多有用的思想和工作方式迟迟得不到重视(如单元测试和版本控制),实在可惜。世上就是有那么多死都要用Word的人。
  17. 去年11月我接受了一个文字采访,我也不知道是谁把我卖过去的,没想到这个网站还有一些华人读者,发出来之后很快就被发现了。最后我说希望每年有两个月的断网期能集中时间写作,说完之后没过多久我家的无线路由器坏了,陆陆续续断了一个月网,所以才写完了这坨东西,到时候客官们注意我的致谢部分的第一段,现在先留个悬念在这儿。其实我也想像那位酷毙了的作者一样在扉页上写一句“献给我的老婆孩子,要是没有他们,我这本书两年前就应该写完了”,不过这不符合我的国情。
  18. 其实对我来说最能激起写作热情的是排版(具体写的内容反倒排第二),尤其是字体,一些好看清爽的字体会让我有码字上瘾的感觉。我感觉中文排版里这不是件容易事,但英文就简单得多,因为英文字体太多了,所以那些用英文的书籍和幻灯片如果不用心琢磨一下字体实在该打屁股(例如用默认Times New Roman的人),我最不爽R-bloggers这个网站的一点就是太特么难看,还要加上几大块狗皮膏药广告,每当看见别人分享我的日志贴的是R-bloggers的链接我就有种想死的感觉,我精心挑选的版面被聚合到那边去了简直没法看,所以,要是你不贴我的原文链接的话,我会恨你。卢鸫翔编辑两年前(请人)帮《现代统计图形》设计了一个精美的排版,我用Tufte样式和XeLaTeX把它做了出来,然后我第一次感觉到原来LaTeX排中文也可以这么惊艳。泛滥的宋体真的不如那些专业字体。
  19. 拖延症其实让我很苦恼,我有很多自认为有意义的事情找不到人帮我去做,确切地说是我没有积极地去找人,而同时又有一屁股不得不做的事情追赶着我,搞得我有时候也有些焦虑。
    • 想把animation包清理一下,因为它是我的第一个包,所以很多地方都写得很幼稚;前面我把iBUGS包交给了彪哥,对此我感到非常满意;下一步我迫切希望有人能帮我把旧的动画网站移植到新框架下,要是你能把这件苦力活儿帮我干了,我几乎敢打包票你明年出国申请不愁offer,为什么我敢说这个大话?因为我就是因为这个网站来美帝的,而现在我有更好的想法,我不介意你有没有R和网站基础,这些东西我都可以教你,只是希望你勤奋好学一点
    • 想把COS主站的主题换了,或者转静态Jekyll系统;想把论坛转型为Stack Overflow系统;我觉得没有社交功能的网站终将被淘汰
    • R忍者显然是一个太大的想法,出版社三天两头来敲门,我多么期望有人能认领一些章节,其实这些技术书籍由初学者写给初学者可能反而更好,就我这四分五裂的注意力,何日才能让它成型
    • 我希望有精通各种语言沟通机制的人帮我扩展一下knitr的语言引擎,比如如何用R调用Java代码或者shell脚本,我要的效果是用R打开一个永久进程,让这些语言在这个进程中持续执行,例如前一段shell脚本中的变量在下一段代码中可见,仿佛所有代码段被作为一个整体执行一样;如果你够野心,可以考虑一下R怎么调用Julia,Duncan大人去年说要写这么个东西,前些日子我问他,他还没动工
    • 想写一篇文章给Significance,有很多可选的话题,反正主要是吐槽灌水,跟写博客没什么两样,例如估计直方图的最优带宽纯属浪费时间,先学线性模型还是先学广义线性模型,随机性的认知障碍(点估计应该被砍掉,世上所有的估计都应该是区间估计),测度论是否该是统计博士必修课,等等
    • 但是我还是得先把又臭又长的博士论文搞完,从代码中硬生生升华出科学意义,把该投的文章投了,取得永久性脑残学位(PhD),嗨,生活原本可以更美的
  20. 蛇年白娘子应景露了个面,倒是让人挺怀旧的。当年的新白娘子传奇似乎都是在暑假里播的,于是伴随白娘子的记忆是外面烫脚的谷子,屋里带泥的花生。