从圣诞节前一天到现在,我一直在更新animation包。在这五整天时间里,我提交了60次更新,完善了无数我曾想完善的细节,也增加了一些我期待的功能;到这个版本我才真的觉得可以开始正式宣传它了,以前都觉得灰头土脸,不可示人。这次在用户界面(也包括函数接口和文档)和程序逻辑、风格一致性上花了大工夫,尽量降低学习难度,尽量重用代码。具体说来有这么些变化:
-
新增
saveHTML()
函数,作为古老的ani.start()
和ani.stop()
的替代。现在包中的save*()
系列函数的用法都基本上统一,它们本身不再涉及动画参数,而是统一交给ani.options()
去处理。saveHTML()
做了这么几件工作:-
利用一个基于jQuery的JS库SciAnimator播放动画;本来这次我打算亲手用jQuery重写我的动画JS脚本的,结果就在我动手前几分钟,我去jQuery网站上看了一眼,发现有个人前几天刚刚发布了一个JS库,它做的工作跟我做的极其相似,这下省了我不少时间,正好直接拿来用;要是他晚发布几天,我肯定就要浪费时间了。SciAnimator这个库做得非常精致,不细看还真以为是个影音播放器,充分利用了现代CSS技术(你看,我就是以貌取人),扩展性也非常强。我用R生成一段JS脚本插入HTML页面,再调用这个库就可以播放动画了;
-
将制作动画的R代码以及部分
sessionInfo()
也写入HTML页面,并用SyntaxHighlighter高亮之;这样保证动画的可重复性——别人双击代码复制,粘贴到R里面就可以重现动画了;高亮的代码看起来也漂亮一些; -
另外,
saveHTML()
也有一定智能性,如果两次调用这个函数都指定了同样的HTML文件名(ani.options('htmlfile')
),那么两个动画就会被合并到同一个HTML页面中,这样,我们可以把多个动画放在同一个页面中,有时候一些动画的主题都相同,那么就可以合并在同一个页面中;
-
-
改写了
ani.options()
函数,它不再依赖于options()
来设定选项,而是自己有专门的选项变量供修改和读取,另外,它也不再限于给定的参数,可以设定任意选项; -
增加
ani.pause()
函数,功能为提供动画画面间的暂停,如果当前动画在一个非交互的图形设备中,那么这个暂定会被忽略,这样能在很多情况下节省等待时间;只有在交互式图形设备(如窗口设备)中才会停顿; -
saveLatex()
可以很方便在Sweave环境中使用了,它会自动检测自己是否在Sweave环境中并给自己智能命名; -
saveMovie()
和saveSWF()
都会尽最大努力在Windows下去自动找相应的软件的位置(如ImageMagick和SWF Tools),如果你装了这些软件,但这些函数仍然找不到,那你可就真的打败我了;
这次更新才明白了Emacs的fill的意思,每次我写NEWS文件都很痛苦,因为要自己调整空格,昨天才意识到,原来M-q是这个意思!……娘的,不早说。先用M-x text-mode
,然后M-q
,一切搞定。
源代码包和Windows二进制包都可以在GitHub的下载页面中找到,感兴趣的客官可以先玩玩。可惜CRAN管理员似乎还在度假中,24号以来传上去的包都没动静。
下一步还有三大任务:
-
既然有了方便的
saveHTML()
函数,那么我的动画维基网站基本上可以抛弃了——可以改用这个函数直接生成网页,这是个苦力活儿,希望有客官能和我合作; -
重新开始写包的vignette——现在有了LyX,有了pgfSweave,有了自动配置脚本,有了
saveLatex()
,可谓万事俱备只欠东风;一年多以前请左辰研究cacheSweave期待能写出动态的动画文档,后来一忙就搁下了,现在杀回来肯定很容易了;看这一年时间里,技术发生了翻天覆地的变化; -
两年多以前给JSS投了一篇关于这个包的论文,后来编辑返回了意见,但我一直没有修改,现在有底气可以修改论文重投了;
貌似寒假只剩十来天了,计划更新的书还没开动呢。昏死。
另:这次搞了个大显示器,分辨率1600 x 900,十分适合写代码——Emacs中C-x 3窗口一分为二,宽敞得很。