我说美帝落后吧,你们还不信。这不,在中国已经跨入2015年的时候,美帝居然还停留在2014年,加上他们把麻婆豆腐做成甜的,这样下去美帝迟早要灭亡,额滴个神啊。
不瞎扯了,说点儿正事,也就是“2015年元旦回顾2014年中没有完成的2013年计划的2012年的那些过了截止日期的2011年项目”。唉想想就脑仁儿疼。一年又一年晃过去,有些债简直变成了常数,真希望哪天能求个导把它们消掉,可现实是逆水行舟,不求导则被卷积。这些破事儿先按下不表,报喜不报忧是本小子的特长。
先回顾一下博客。一到年终,各位老博主就出来冒泡了。阿稳称自己的博客成了“年记”,我的发文频率差不多也成了半年记,只不过我平时写而不发,反正没什么营养,都是些唠叨文字,技术文章越来越少,有读者评论说,“嗯,还是多写写技术博吧……”,这看似随意一个“嗯”字加上这个意味深长的省略号,如一声炸雷,可惊醒我梦中人——上一次写技术文章貌似已经是两年前了。看人家肖凯兄,一步一个脚印,绝不来虚的;再看人家落园园主,自撰自译,图文并茂,绳货是多摸地井菜!
其实我的技术类博客都放在英文站里,当然写的频率也不高,比如去年也就写了两篇,一篇还是会议总结。也不是缺货写,货总是有的,就是博客码字有点费时间(尤其我这种文字控,打个不太高雅但贴切的比方,写完的东西就像拉的大便一样总要回头看几眼),我都心生一个视频博客的想法了,以后把技术性的内容做成屏幕录像,估计五分钟能录的内容可以够我写三个小时,而且在我脑子里盘旋的技术问题我也经常希望有人能帮我搭把手解决。
这一年工作上分三部分:一是公司安排的,以shiny为主,引进DataTables表格/selectize.js选项框/Leaflet地图等JS库,外加一些零杂活计如多字节字符的支持(俗称锟斤拷),也有R Markdown方面的,不过这方面我的贡献估计1/200都不到,都是老板JJ大人一手操办,拦都拦不住,我只是充当了一边骑三轮车一边播放世上只有妈妈好一边吆喝换煤气的角色而已,正经活儿干不了多少,但恶搞是我的强项;纵观这一年,R Markdown攻城拔寨,甚得民心,其实功劳主要在JJ,不在我这个换煤气的,没办法我冒领了不少赞誉,既然解释不清,干脆就这样吧,只能做更好的工作来与高帽子相平衡了。二是维护knitr相关工作,这不能算正式工作,只能月黑风高时猫着腰干,这几天放假了就直起腰来把所有GitHub事项杀到只剩一项,杀不动了,再强的强迫症也敌不过没时间。三是一些自个儿胡思乱想的工作,选录一些,很多都考虑不成熟,其中标注了“experimental”字样的客官们请勿传播:
- xran:只要推送新的内容到我一个GitHub上的R包,就会自动编译并上传至所谓的XRAN,省得
remotes::install_github()
- servr:用R做后台服务器,浏览器里显示文件,可以是静态文件,也可以是动态R Markdown文件,这是我比较得意的一个小作品,它的妙处在于省去了两件事:一是编译Rmd,二是刷新浏览器,你只需要开一个服务器,然后开写Rmd即可,编译和刷新都自动进行
- rnotebook:一个R笔记本的简单尝试,仿照IPython笔记本,尚在非常初级的阶段,也许会死掉
- rlp:一个真正意义上的文学化编程示例,其实之前说了那么久的文学化编程,都没有体现Knuth的本意,能体现他本意的基本都是LaTeX作品,这些玩意儿通常都是极其枯燥,而且没几个人愿意去理解满屏幕的反斜杠,所以文学化编程的高明之处完全被LaTeX这门外表丑陋的语言掩盖了;这个rlp包演示了怎样用文学化编程写R包,也是我比较中意的一个小作品,在此之前,满世界的人都讲文学化编程,可没有一个人的作品是我觉得满意的,只有在rmarkdown诞生后,我才觉得写东西有了底气,否则LaTeX/Sweave的东西一方面是没人追随,另一方面是做漂亮的输出太费劲,现在我有信心让文学化编程飞入平常百姓家了
- printr:自动打印R对象到动态文档中,例如Rmd/Rnw等,矩阵、数据框可以以原生表格的形式打印,而不是R控制台输出的文本形式,同样还可以打印帮助文档等对象
- runr:这个不完全算2014的作品,而是从2013年就开始构思了,花了几个下午写了个原型(在小轩哥的启发下),目的是在R里面开启一个新的永久程序进程(例如Shell或Julia),然后不断把代码扔过去,那边执行完把结果扔回来,这是为了解决knitr里一个尴尬的问题:除了R代码之后,虽然knitr号称支持其它语言,但支持仅限于每个代码段开启一个新的进程,运行完代码即退出,这就造成前一段代码的变量在后一段代码中无法再使用(因为上一个进程已经关了);这个包不太成熟,但起码Julia大致能用,若有客官感兴趣,可以完善或者增加其它语言的支持
- crandalf:用Travis CI检查R包的反向依赖,估计这个对多数人都没用,但花了我很多时间,主要是knitr的反向依赖有好几百,每次提交CRAN之前都是我最黑暗的时刻,于是我写了这么个包把这些反向检查“外包”给Travis去做
- shinyWP:这也是一个非常有意思的项目,主伟呈已经完成了核心部分,我原本的想法是写一个基于R Markdown的WordPress编写博客界面,这个界面可以通过shiny来做,也可以通过Makefile或其它脚本来做,useR!会议上我演示了这个应用,但后来一直没时间把它整理成一个正式的R包
- 本来我已经用htmlwidgets给ECharts动土开工了,只是原型还不太完善(仅仅试了一下散点图),鉴于太云和萌主前面已经做了大量工作,我还不敢贸然发出来,不过这也是我想想都会半夜激动笑醒的项目,应该会大有前途,过些日子和萌主合计合计
开会跑了西雅图(密谋新一代R Markdown)、本村的Dordt大学(一路牛粪味开车过去)、两次洛杉矶(出访UCLA和R会议,顺便去了一下环球影城被吓尿,也吃了人生第一张违章停车罚单)、博士屯(JSM)、扭腰(Strata)、费城(宾州大学R课程,即兴做了一个shiny语音识别应用;后遇中科院吴刚老师,开吃,一聊,发现我们的交集中有俞丽佳)。玩的地方去了缅因(Acadia国家公园)和明尼(千岛湖中荒岛漂流记)。此外生活部分貌似没啥别的外出的动静了。
这一年生活中的一个变化就是开始集中打羽毛球,最初是拜阿杜所赐,把我勾搭进了这个坑。记得当年在人大的时候,有一次学院在世纪馆组织羽毛球赛,我被队友骂了狗血淋头。如果现在再回去打,应该不至于那么惨了,但因为以前被别人骂过,我现在打球绝对不责备新手。虽然本小子还远没到高手行列,但大概也可以作为秋后的蚂蚱在学校羽毛球俱乐部蹦达两下了。由于身板条件限制,力量不够,偏向于技术型打法,喜欢打网前小球,尤其喜欢从网前左侧朝身后勾对角,不熟悉我的人经常对这个路线感到抓狂;然后就是有时候喜欢开玩笑,例如后场球来不及跑到位的时候,经常在发足狂奔的同时抬腿从两腿中间瞬间打回去,不太雅观,但一旦打回去会让对方猝不及防,因为对方看你的样子以为你放弃了,没想到最后一刻来一刀。这半年尝试起跳杀球,给对方制造一种恐怖的气势,现在基本上凡杀球必起跳,但其实我的平均杀球球速并没那么快,而且落点也不尖,威胁有限,一方面是绝对力量的限制,另一方面也受出界判断的困扰,我对球是否出界的判断还不太灵敏,空间感不太强,有时候出后线都快三四十厘米了还在打,这就很吃亏。绝对力量不够就练耐力,于是开始凹板支撑,也就是传说中的平板支撑,我撑一会儿就偷懒,不能保持身体一直挺直,挺一会儿凹一会儿,所以是凹板。练习了大约半年,胳膊肘子外侧茧子掉了几层,凹板最佳成绩可以够看完新闻联播了;若完全不耍赖,硬挺大约也就是12分钟。每次凹板打开计时器之后,就开始听罗胖子的语音,听完看文章,看完文章看朋友圈,一圈看下来有时候就十分钟过去了。
厨艺的导数早已经是零了,只是在2014的尾巴上,突然获得一项新技能:做馒头。原来酵母这货这么好用,要知道这事儿这么简单我早开始做了。第一次做馒头就是水多了加面,面多了加水,做出来竟然还人模狗样的。揉了几次面之后懒了,就扔给面包机去揉面。后来发展到做花卷,这面食本非我等南蛮的强项,不过好歹也凑合着做了好几次了,现在我的四大护法花卷分别是:葱花的,花生酱的,芝麻酱的,老干妈的。因为我高中时早餐经常吃一种辣子花卷,觉得很好吃,于是琢磨着昨日重现一下,一开始用豆瓣酱,结果吼咸,味道也不对,后来才发现拯救万千留学生的老干妈(油辣椒那种,不是豆豉那种)拯救了我,这玩意儿蘸面皮上卷吧卷吧捏花卷简直了,满分滚粗。
最后要鸣谢一系列食堂师傅的大力支持,排名不分先后:潘/王记食堂的饺子/火锅/肉饼,主/刘记食堂的烤肉斯密达,徐/宋记食堂的鸡腿/饺子/丸子/火锅/啤酒饮料矿泉水/花生瓜子八宝粥……写着写着耳边竟自动响起一句话是怎么回事,“来,这位小伙子,把脚收一下来”……