Category Archives: 专业

Google Docs的Chart功能

Google Docs有chart功能很久了,最近看到YCG博客介绍也相信是存在已久的Google Visualization API,想到可以通过Google Docs的chart功能来试用,因为想必Google Docs的charts功能就是调用Google Visualization API的。以下是我弄的一个图,熟悉溶液和胶体理论的都应该都知道这个图是啥了吧。

[cf]JScript[/cf]

在Wordpress的博客正文直接贴Java Script代码会出错,Wordpress好像会自动修改代码。要先把代码帖到Custom Field那里,然后用Custom fields shortcode插件在正文中引用custom field的内容,代码才能原样出现正文的html源码中。

用什么软件画Graphical Abstract?

文章退修,说修改完之后请顺带把Graphical Abstract也画好了发回去。于是要画Graphical Abstract了。

现在好多期刊都要求投稿人自己提供Graphical Abstract(GA)。例如像ACS的journal,明显不同文章的GA风格迥异,因此应该确实是各作者自己画的,平均水平很有限,一般比较直白,不讲究色彩搭配。有些一看就知道是在Windows自带的“画图”下面用鼠标描的,看起来跟某小学周末电脑兴趣班的画图作业一样拙嫩。有些颜色大红大绿大黄大紫,虽然醒目但却嫌丑。有的把分辨率很低的片直接放大,像素化严重,也不管。以上的一般出现在档次不高的journal例如Langmuir或者Polymer,档次高的Journal普遍这些情况会少很多,GA看着顺眼,例如Angew. Chem.、Acc. Chem. Res.等。Nature/Science的图就更是浑然天成了,整篇文章所有的Figure,不管是数据曲线、柱/饼图、示意图、实物照片的线条、填充色都有统一的风格,让人怀疑到底是作者自己画的还是Nature和Science帮画的(恕鄙人愚钝浅狭没投过Nature/Science)。据闻有些人若是投Nature或Science的话会花钱请工作室来作图。

现在已经老了,想当年我还年轻的时候,曾经喜欢弄Photoshop,在审美上有一些自己的要求,因此现在轮到GA这件事,我总认为自己能画得更好看。但是我一直只对Photoshop比较熟悉,而论文的示意图常常是图形组合,最好用矢量作图软件来画。如果用Photoshop的话(以我用熟悉的CS2为例,现在都CS5了,不得不认老),不是不行但吃力不讨好。所以对于画矢量图,我在工具上还是个新手。这几天为了GA我试了一下现有的一些软件,画同样的图来比较:纯Laponite凝胶的house-of-card结构,以及被PEG包覆了的Laponite。

我个人认为,一个适合GA创作的软件应该具备以下一些条件:

  • 不是CorelDraw,CorelDraw太强大太复杂了,一方面杀鸡用牛刀,另一方面——我不懂用!
  • 要满足基本的矢量作图概念。虽然是有现成的形状工具,但画出来必须是由线条路径和填充块组成,可以分别进行修改。
  • 丰富的snap选项以便作出规整对齐的图。
  • 支持包括SVG格式在内的所有矢量图格式(包括xaml、eps、wmf、emf、ai等等),支持导入像素图文件(矢量化算法)。
  • 一些方便的小功能例如自动把手画的曲线进行平滑处理、雾化、加阴影、加3D。
  • 最好能结合流程图创作,提供有逻辑响应性的形状和连接线。
  • 免费或者容易找到正版破解。

唯一满足所有以上要求的软件是Inkscape

最直接的方法是用PowerPoint来画,里面已经有很多形状,可直接设置填充和线条。容易获得风格统一和美观的示意图。但是它的形状修改功能太弱了。以下是我用PowerPoint 2003做的结果。是用SVG格式,如果你的浏览器无法显示,就要SVG显示插件了:


Laponite粘土片(PowerPoint 2003)


Laponite+PEG (PowerPoint 2003)

步骤是先画个椭圆,然后加3D效果,就成Laponite片了。PEG链就用自由线条工具,加阴影效果。可惜对于Laponite片如果用了3D效果,填充色就不能使用渐变和透明度,对于PEG链的线条也无法用渐变效果,而且PowerPoint 2003的阴影没办法雾化。可能2007版本在这方面功能会增强我没用过不知道。PowerPoint不支持直接保存为SVG格式。另存为emf格式之后在Inkscape导入正常,在IE 9.0 beta和Chrome 8.0里显示正常(这两个浏览器是不需要插件就能显示SVG图片的)。

另一个可以作矢量图的Office成员是Visio。这个本来是用来作流程图的,但也有自创图形的工具,并且有一定的曲线修改功能,但是它并不是将曲线和色块分开处理的,而且路径功能也很有限。在Visio 2003里面没有找到3D效果功能,因此粘土片的立体感需要另外画一个形状在椭圆下面来实现。这样的话也就不能使用透明度了。Visio 2003支持SVG格式,但是保存的格式虽然Inkscape里打开正常,但是在IE 9.0 beta和Chrome 8.0里显示异常,不知道是不是SVG协议版本太旧的原因?

还有一个选择就是使用Microsoft Expression Studio中的Expression Design成员。由于最近微软开展了DreamSpark计划,国内很多高校都被授予了包括Visual Studio和Expression Studio在内的多个产品的免费liscense。因此也成为一个比较顺手的选择。虽然我举例用的Expression Studio 4 Ultimate软件也比较庞大,但就其中的Expression Design成员而言还算比较节制的了。Expression Design比较倾向于帮且用户导出点阵图,用矢量作图方式进行编辑或创作,然后又导出成点阵图。它别说不支持SVG了,它简直不支持所有的矢量格式。它支持导出成微软自家产品Silverlight的XAML格式,但是在Inkscape打开后显示不正常。最终,我发现它可以导出成矢量图的PDF(等价于AI格式),然后能用Inkscape正常打开,因此也算是可以实现矢量格式的支持吧。就矢量作图而言Expression Design算是原汁原味的了,因此我可以顺利地获得我自己想要的Laponite效果:


最后是用Inkscape自己做的效果,使用了Drop Shadow滤镜功能——滤镜是Inkscape特有的功能:

试用完这些之后,个人感觉Inkscape和Expression Design的体验好。Expression Design还胜在用户界面设计上,毕竟是Microsoft,Inkscape的界面就太差了,跟同是开源免费产品GIMP比还差得远。至于CorelDraw和Adobe Illustrator,由于软件很大而且不得不用盗版,我从一开始就没想用。

尾巴绑了画笔的小乌龟——我学习编程的过程

北上广跟我同龄的年轻人用过386电脑的应该都不算少了。本博客以前也有文章讲过关于我小时候学电脑的回忆。其实我还曾有幸试操作过Apple II,在上面学习过一下LOGO语言

这个计算机语言抽象来讲其实只是一个轨迹作图工具,但是不知道是谁把那个小三角型称为“乌龟”,尾巴绑了一支画笔,我们要用LOGO语句指挥乌龟画画。我天生就特别喜爱乌龟这种动物,因此在玩LOGO的时候我脑子里是真的以为自己在指挥着一直乌龟,哪怕Apple II 320×240的单色屏幕显示的归根结底只是个很小的三角型。我想象着,在那球面CRT又厚又凉的玻璃后面有着一个比这屏幕所能显示的更为丰富的世界,在那个世界里,这个三角型就真的是一只乌龟。

可是这个LOGO语言我只玩过这么一次,不过它在八九十年代中国还是流行过一阵的,作为少年儿童学习计算机编程的入门教材。那时候订阅的什么《电脑学习报》之类的刊物,就经常有用LOGO语言的范例。不过我自己家有了电脑之后直接就学习BASIC语言了。那个小乌龟只能存在于我的想象之中,但我肯定它也存在于每一个玩过LOGO的小孩的想象之中。相信每个这样的小孩都曾经想在哪儿亲眼看到那只乌龟的“真身”一次——而不只是被拙劣的显示器抽象成的三角形。我就这么想着想着转眼就长大了不想了。今天在Youtube看到一个视频,才知道原来大学里有那么一种学生课题就是制作真实的乌龟机器人,带上一个墨笔,根据电脑Logo代码运动。当我看到视频里那个机器乌龟慢慢爬行的时候,差点没忍住掉眼泪,好像什么毕生梦想终于成真了似的。

这里还有希腊一所学校的机器龟课题网页。这里有一篇非常难得的Apple II时代LOGO语言的图文介绍。

引自:http://www.sydlexia.com/logo.htm

在youtube找了一下又找到了七十年代美国小孩在计算机上玩LOGO语言的实况视频:

多好玩啊!我有时想现在的小孩绝对没办法体会我小时候的那种兴奋和乐趣了(尽管理性告诉我只要是小孩玩啥都会特兴奋特有乐趣,我的时代在这方面没什么特殊的)!

Windows 3.x版本的画图程序
Windows 3.x版本的画图程序,在繁体中文版中叫做“调色盘”

其实我小时候跟这些美国小孩相比也不逊色的。我也懂用BASIC语言画画。我姨丈以前是在香港开电脑公司的,我小学六年级的时候有一次去香港(那时候去申请去一次香港探亲可不容易),我姨丈带着我这个大陆来的小朋友去他公司玩。那时候我自己家的电脑还是安装的DOS系统,可是他公司里的已经全部是Windows 3.1系统了。在上面可以用“调色板”(英文版叫Paint,简体中文版叫“画笔”,繁体中文板叫“调色板”)画画。画了一会儿就没意思了,我就问旁边的哥哥怎样进DOS,找到我熟悉的QBASIC来打发时间。我用LINE和CIRCLE等绘图语句在屏幕中间画了一个青蛙的头,两个眼珠按每秒间隔左右转动,然后还在屏幕右下角显示一个数字时钟。由于我学过手风琴,懂五线谱,我懂得用PLAY语句编写音乐字符串。电脑的PC speakerp突然响起音乐来,让在我右边干活的哥哥大吃一惊,我姨丈出来看了也很惊讶,觉得我人小本事却不小。那次从香港回来,我姨丈给了我一套用十几张3.5寸软盘拷贝的Windows 3.1繁体中文版带回广州安装,于是我算是我同龄人之中比较早接触Windows的人了,后来过了一两年内地才普及PWIN32。

由于我太迷电脑,有一段时间妈妈不让我开电脑。于是我只能通过看编程书上面的范例来解馋,这又无形中开扩了我的视野,一些简单的算法都是那时候了解的。加上没有电脑的话我必须在自己的脑子演算程序的实际运行效果,很多程序含有嵌套的条件判断和循环分支,这都极大的锻炼了我的记忆力和复杂思维能力。

由于我已经使用Windows了,但每次要编程都要回到DOS运行QBASIC,而且编的程序也只能在DOS环境下运行,渐渐地就觉得有点别扭。有一次,我问在中大学计算机的峰舅父,怎样编出在Windows下运行的程序。他说,要用Visual Basic。这是我第一次听说一种能编Windows程序的BASIC语言。但当我真正接触到他,就已经到高中了,Windows也已经升级到95。

我的高中同这徐立是参加校电脑小组的,我有一次去机房找他玩,他就跟我介绍了Visual Basic。他知道我已经很懂BASIC语言,但是在Visual Basic上实现一个程序,还是跟DOS下面的BASIC有很大的不同。他真是个极其牛逼的老师!我至今都知道他给我举的例子:一个文件浏览器。先放几个控件,然后利用控件的方法和属性,就可以很直观地设计我想要的功能,一个长得很像Windows程序的东西就这么做成了。之后我每次我脑子一下子转不过来的时候,想起徐立给我介绍的这个例子就马上转过来了。就这样,从老BASIC转到Visual BASIC,我几乎没遇到过什么困难。

高中在Visual Basic 5.0上尝试过很多小程序,但都是没有什么实用性的东西。直到高三,我买了希望出板社和Microsoft Press出的官司方教材:程序员手册和控件参考手册(其实就是把MSDN里的两份文本翻译成中文),啃了起来。通过这两本书,我理解了所谓“面向对象”的编程方法。上了本科,我在机房通过设计对象,来做了一个小游戏(可是有一些bug,并不完美)。大三大四的时候,我又学习VB+Access数据库编程,后来接触Visual Studio.net(6.0是ADO,.net升级为ADO.net,好用很多)。那时候,经济学院的一位老师找到了我,希望我帮她的博士课题做一个分析软件。她的课题是上市股票优劣性的一种评价方法(大致是这样吧,具体为一个公式),为了显示这种方法的好坏,她需要用若干年的原始数据来进行验证,这涉及到每年近千支股票(近千行),每个股票有十几个指标(十几列)。她的公式还是有条件和选择性的,因此不得不利用数据库编程。我最后成功地帮她做出了软件来,她给了我三百块钱。这算是我赚的第一桶金了(我整个大学就没去做过家教)。

其实到了那时候,学习编程的资料已经非常好找了。MSDN的盗版碟满街有卖的,那时我还经常上CSDN论坛上转呢。

读研之后,我已经不再经常编程了,但是有需要的时候我还会利用编程的技能做些小软件。例如,由于我喜欢听音乐睡觉,又没钱买MP3。就算我有Discman,但每次快睡着时候都要再醒过来把它关掉这点很不爽。我那时电脑里存有海量的古典音乐。我心想,假如能直接听我电脑的音乐睡觉,而且电脑音量能逐渐变小,最后自动关机,那就好了。在网上找来找去都找不到这样的软件,因此我就自己编了一个这样的软件,买根音频延长线从电脑拉到床上,终于实现了这一目的。这是本科时候的事情。硕士住西六的时候,陶洪有一次在外地让我给他编一个Timer程序,适合在学术会议上提醒演讲者用的。他上网找的界面不是很难看就是很卡通,或者声音很夸张,不适合学术会议的场合。希望我快点整个。我花一晚上时间把Visual Basic捡回来,弄了一个叫Lecture Time的东西,顺利实现。

今天看到LOGO的事,想起了以上这些,于是又禁不住搜索了一翻,发现2008年微软出了一个Small Basic可在现在的Windows系统中使用。它是一个界面和功能都极其原始的编程工具,变量没有类和定义域,随便用(有点像Visual Basic里的Variant类型),功能调用延用Visual Basic的对象的模式,而且有些对象特别新潮(如Flickr对象)。具有基本的条件判断、循环和分支结构。这个是作为编程入门者学习的工具,它极大的免去了以往初学者不得不熟翻各种具体编程环境和语言关键词的麻烦(Small Basic只有14个关键词!),把初学者精力集中在最基本的程序概念上,同时又极其容易在屏幕实验(这又免去了界面动态的设计这一麻烦事)。

以下是胶体粒子运动的简单模拟程序,算是跟我现在的课题非常相关吧(2022年更新,以下程序已经不可用)。