计算机应用

计算机应用方面的小知识

222010

不夸张地说,我看过的几乎所有人的beamer幻灯片都有一个明显的问题:图形和表格的编号缺失了。也就是它们看起来是这样:

Figure: 标题内容

或者

Table: 标题内容

在(挑剔的)我看来,这是难以容忍的缺陷。图表怎么能没有编号呢?既不好看,又不方便交叉引用。beamer自身默认图表是没有编号的,如果需要把编号调出来,只需要在导言区加上:

\setbeamertemplate{caption}[numbered]
082010

我不确定这是不是R和Sweave能达到的最漂亮的境界:

下载:一份由pgfSweave生成的人模狗样的动态文档

这两天花了点时间,把跟LaTeX、LyX、Sweave有关的一系列中文问题从头到脚翻了个遍,目前为止,明白并解决了如下问题(基于带有MikTeX 2.8的CTeX 2.8.0.125、LyX 1.6.5、R 2.10.1、R包pgfSweave 1.0.3,操作系统Win XP,从头到尾一直用UTF-8编码):

  1. LaTeX说中文了)LaTeX生成可复制粘贴的中文PDF文档:由于我的惰性,还用着N年前的CTeX,那个老版本CTeX中的MikTeX貌似一直有问题,比如无法更新LaTeX宏包,更不必说那些dvipdfmx之类的程序了,估计人家作者都已经更新了无数个版本我还不知道。在我陈旧的印象中,要用LaTeX生成可复制粘贴的中文只有一种办法,就是用dvipdfmx把dvi转为pdf,而我陈旧的印象又记得dvi文件只能由latex命令生成,并且用latex编译的文档必须用EPS图形,这一直让我觉得很不爽,因为我实在不爱用EPS,比如R的postscript()设备(可生成EPS图形)不支持半透明色,而且图形中要用中文字符的话配置非常麻烦(N年前我请教了Paul Murrell,虽然搞明白了,但心里仍有疙瘩)。我的偏好是用pdflatex命令编译文档,图形也用PDF格式(pdflatex默认支持PDF和PNG图形),用R生成PDF图形也方便、漂亮,所以配合Sweave很容易生成一篇干净利索的PDF文档;但pdflatex命令直接编译生成的中文文档中,中文字符是不能复制粘贴的,因为复制出来就是乱码。所以呢,我陈旧的知识让我的这个“麻烦问题”一直没有得到解决。
222009

学习最好的方法莫过于实践,最快的途径莫过于示例,这段时间网站搬家,迫使我不断去看一些SQL操作方法,最终记载于此,以便将来参考。

1、时间操作

例:将GMT时间更改为GMT+8,可用INTERVAL把一段时间加到一个字段上。

UPDATE `wpcn_posts` SET `post_date` = `post_date_gmt` + INTERVAL 8 HOUR
  WHERE `post_date_gmt` = `post_date`

本例是为了对付Bo-Blog搬家到WP时大部分时间记录都没有被正确转换到GMT+8时区的问题。

2、字符查找替换

例:将某个图片的错误文件名更改为正确文件名。

UPDATE `wpcn_comments` SET `comment_content` = REPLACE (
`comment_content`,
'emot/ok',
'emot/pig'
)
WHERE `comment_content` LIKE '%emot/ok%'

本例是为了对付Bo-Blog的pig.gif图片文件名被错误替换为ok.gif的问题,用到了REPLACE函数和LIKE操作符,注意LIKE后面的字段用%%匹配,而非*

3、用R帮忙

例:批量更新日志的永久链接。

cat(sprintf("UPDATE `wpen_posts` SET post_name = '%s' WHERE ID =%d;",
    x[, 3], x[, 1]), sep = "\n")

由于我不知道SQL里面如何用数组或向量,因此在批量处理的时候就用笨办法执行了,即:写n条SQL语句一起执行。R一向都是向量化操作,因此只需要把日志的ID和post_name准备好,然后用一个sprintf()就生成所有的SQL语句了,扔到phpMyAdmin中执行一下,所有的日志链接就更新了,省得把每一篇日志打开依次修改。

以上R语句生成如下结果:

UPDATE `wpen_posts` SET post_name = 'tidy-up-your-r-code' WHERE ID =1;
UPDATE `wpen_posts` SET post_name = 'dare-be-defeated' WHERE ID =2;
....

插一句,对于英文日志,永久链接就是把空格替换为-,用正则表达式删掉不是[:alnum:]的字符即可。

4、用mysqldump备份数据库

这个命令可以以多种形式备份MySQL数据库,这里举例将数据库备份为*.sql的SQL语句脚本:

mysqldump -u db_user -p -r result_filename.sql database_name

由于mysqldump命令是独立的程序,所以不要先登录进mysql界面,直接在终端或command窗口运行即可。这样的备份文件可以在将来在mysql中用source命令导入:

source result_filename.sql

这样看来备份数据库也是很容易的事情,不过导入导出的时候可能会遇到编码问题。

132009

过于把LaTeX生成的PDF文档转成Word。

302008

这个话题关心的客官应该在网上看到过不少老外在他们的主页上强烈声明他们能接受的邮件格式,其中最广泛的一点可能就是关于HTML格式的邮件。很多人都反对或讨厌接受HTML格式的邮件,而仅仅接受纯文本格式的邮件,原因洋洋洒洒可以有几十条。如果你有足够的耐心,你不妨读一读这个页面

另一点就是MS Word附件,这也是他们非常反对的。关于这一点,当然属自由软件战士Richard Stallman在GNU网站上的声明最有名了。

本人没有耐心去阅读上述页面,但我非常同意这两点。HTML邮件纯粹是浪费空间,接收者只需要看邮件的文本即可,发送者不用自己加粗或放大字体,更有甚者如网易邮箱还使用信纸,这所有的工作对于你的接收者来说可能都是白费:他们的计算机和你的可能大不一样,你发过去的带格式的邮件在他们那里也许变形得没法看了,所以一般还是发纯文本邮件吧。MS Word也有同样的考虑:你的接收者未必使用Windows系统或者安装了Office的某个版本,换言之,MS Word不是跨平台通用的文档格式(不幸的是很多人都被微软洗脑了),因此对于发送的附件来说,要尽量考虑对方是否能够打开,例如PDF格式就是跨平台通用的,而且版本的影响很小(这一点要强烈谴责MS Office 2007!)。

使用Web界面收发邮件的用户可以设置邮箱使用纯文本格式发邮件,使用客户端的同样也可以设置软件切换为纯文本格式。

今天又遇到一例Word发过来打不开的情形,于是操起键盘写下如上两点注意事项。尤其是那些跟老外发邮件的同志们,切记要注意。另有一点,最好不要给洋鬼子看“雅虎邮箱,您的终生邮箱!”之类的签名。

202008

前提过的Processing是基于Java语言做动画,这次又发现另一个可视化工具Flare,它可以生成交互式Flash,而且有很多现成模块了。看了一下它的demo,觉得我昨天说的不完整,Flash本身对动画有很多内在的支持,写起代码来应该比Java更快。

有闲工夫的朋友们可以考虑怎样利用Flare改进Hans Rosling的数据表达方式(他只是用了气泡图和密度图,还有很多图形都可以在Flash中继续实现)。

122008

一直在想,怎样在文档中建立一个超级链接,只要点击就可以打开链接的文件。在Office中基本没什么障碍,但用LaTeX就不能直接通过链接文件地址达到目的了。今天Michael Friendly在邮件中告诉我一个小技巧:只要超级链接的地址前加上run:就可以了。例如,用hyperref宏包的href命令创建一个链接打开一个文件some.file就可以用\href{run:path/to/some.file}{some link}

这样的话,我们就可以直接在PDF中点击链接打开文件,而不必先切换界面再去点文件了。其实runhttpftp等一样,都是协议。

022008

样子我前一篇日志里面提到的问题并不是一个简单问题,到现在我基本上已经放弃了向Rweb提交代码获取结果的想法了,原因是多数浏览器不允许跨域(cross domain)提交表单并获得结果,据说是有安全问题,我没空去仔细研究里面的细节。现在在尝试了

  1. jQuery + Form插件
  2. Ajax
  3. iframe + JavaScript

三种方法之后,我决定给明尼苏达大学的Charles Geyer写信诉苦,我需要服务器支持以在网页上实时生成动画;仅凭我在客户端捣鼓,估计浪费一个星期时间也未必能捣鼓出来。

282008

下现在有个小技术问题,自己去钻研太浪费时间了,因此拜求江湖高手帮我一把。问题是这样,我想提交一个表单给某个网站的CGI执行,然后把执行返回结果中的图片地址都拿出来。提交和执行过程中不要影响当前的HTML页面(即:不要直接跳转到CGI页面,这似乎是Ajax的特征)。以下是普通的表单界面:

返回的图片URL放在一个数组中即可。谢谢!

102008

天看了Gregor Gorjanc的一篇小文章”Excel 2007 for statistics?“,主要是综述Excel在统计计算中的种种“罪行”。世人一向觉得Excel用起来方便(或者更多的人也许不知道这世界上还有Open Office或者Gnumeric),却不知里面各种严重问题。

其中有一段很有意思,说Microsoft在Office 2003的时候就像把Wichmann-Hill随机数发生器放进去,但是失败了(不仅会产生不在[0, 1]区间内的数字,而且会产生负值!),等到Office 2007发布的时候,这个随机数发生器还是没能被正确加入;而事实是,这个随机数发生器的代码不过是寥寥几行而已。不了解它的同志们请参考R帮助?RNG

—————————————-我是附加题分割线—————————————-

我突然想起那个猴子打字问题,比如某动物园有100只猴子每天在键盘上随机乱敲,问它们在4年内是否可能敲出Wichmann-Hill随机数发生器的源代码?或者换一个问题,假设这段源代码已经由别人写好,请问这100只猴子在4年内有没有可能把它正确插入到Excel的源代码中?

———————————————片尾广告———————————————

广告时间到了:生物统计和生物多样性数据分析培训班。11月我将去香山讲两天R语言,这次有望大力推进一步R在国内的发展。

WWW.YIHUI.NAME XIE@YIHUI.NAME © 2007 - 2010 by Yihui Xie