2009年12月9日星期三

文件编码害死人,聪明反被聪明误

最近给DoCoMo的手机编一个小程序。DoCoMo手机上的程序称为iAppli,是DoCoMo定制的Java程序。DoCoMo提供iAppli模拟器,可以在PC上调试此类程序。

我用VIM编辑程序代码,遇到奇怪的输出乱码问题。看了模拟器的设置,在程序中指定了字体,做了编码转换,做了种种努力,黔驴技穷,死活不知道问题在哪里。最后用上了愚公移山的办法,把各部分代码逐渐拷贝到一个正常运行的例子程序中去,一点一点试,直到例子程序完全与出问题的程序一样了,还是正常输出,我快要疯了。

在Cygwin下用file命令查看,才发现文件编码不同:

$ file serialtest1.java
serialtest.java: Non-ISO extended-ASCII Java program text, with CRLF line terminators

$ file serialtest2.java
serialtest2.java: UTF-8 Unicode Java program text, with CRLF line terminators

前者是从模拟器自带的例子程序直接修改的,后者则是重新建立的文件。iAppli模拟器竟然不支持UTF-8!

这个沉痛教训再一次证明,问题通常都很简单,KISS不仅适用于设计程序,也适用于调试程序。
[......]

2009年11月24日星期二

Quicksilver的Linux替代软件

Quickslive是Mac下著名软件,用户可以使用键盘快速地启动程序,操作文件数据,执行脚本。Linux下也有功能类似的软件。当然,最自然的就是Shell命令行了,各种选项加上命令补全,在高手那里威力无穷。对于喜欢图形界面的朋友,可以选择下面的程序(我使用Xfce,所以对此环境下的应用更多一些关注):

  1. Launchy:功能强大,原来是Windows下的程序,现在也移植到了Linux。
  2. Gnome do:有很多插件,功能强大(对于Xfce用户:Gnome do是Gnome程序,但是并不会降低Xfce的速度,只是需要安装额外的软件包,升级时自然也需要更多的时间。)
  3. gmrun:功能非常简单,但是完美无缺。提供一个"run program"的窗口,具有bash一样的TAB补全,支持CTRL-R / CTRL-S / "!" 等搜索历史命令的功能,使用CTRL-Enter可以在终端运行,还支持打开URL。有了这个,就不用总是开着终端了。
  4. bashrun:功能少,但是可以使用bash下自定义的别名。
  5. dmenu:轻量,功能简单。
  6. Gnome-Launch-Box:轻量,功能较多,对借助于wine安装的程序及桌面上的脚本程序也有效,但是似乎停止开发了。
  7. xfce4-appfinder:Xfce自带的程序查找软件,功能单一。
  8. Xfrun:Xfce自带,类似Windows下开始菜单的“运行程序”。

可以参考wikipedia上的比较列表,以及这里的讨论:Arch Linux Forums / Alternative menu/Quicksilver Launcher for Xfce?
[......]

2009年11月21日星期六

香妞1岁啦!


朋友的爱女,大名的最后一个字是“香”,我自作主张亲切地叫她“香妞,香妞”,可是她不答应,只是不解地看着我,意思是,你在说什么呢?

祝愿香妞健康成长,聪明快乐!

[......]

2009年10月19日星期一

古镇一角


闲着无事,看到一个小饰物上的图案,就看着画起来。大概10分钟左右,有事要做,就放下了。不想再修饰了,就这么放上来。

由于手机屏幕狭窄,精简了不少。比较喜欢原图的白描类型,笔墨不多,特点尽显。期望某一天,看着实景或者凭借回忆与想象,寥寥几笔就勾勒出特征鲜明的画图,我心足矣。

[......]

2009年8月16日星期日

美黑运动

21世纪末期,非洲国家异军突起,经济和军事实力傲视全球,为核战废墟中重建的亚欧北美提供了巨大的人力物力资金支持,非洲文化也随之风靡世界。例如,黑肤丰肌受到爱美人士的推崇,日光浴和户外健身热潮迭起。尤其是黄种人妇女,摆脱了美白的困扰,走出室外,亲近自然,投入轰轰烈烈的阳光健身运动,又称美黑运动。此名字并不贴切,非黑种人妇女没有像历史上追求白人肤色那样追求黑人肤色,而是崇尚健康自然。关于此名字的流行,有大量的学术著作进行探讨,是美黑学的重要组成部分。

据有关机构统计,由于妇女健身狂潮,男女平均寿命差屡创新高。另一个相关因素——男性战争伤亡,由于众所周知的原因未被媒体提及。著名搜索引擎Hoohle显示,2199年的搜索关键字中,“三八男人节”首次超过“三八妇女节”的搜索次数。由于影响深远,美黑运动与历史上欧洲妇女解除束胸、中国妇女解除裹脚,一并被誉为三大妇女解放运动,是核战带来的唯一积极后果。

护肤品制造商与时俱进,雪肌类型换成了墨黑系列。据称,增强阳光吸收并保持皮肤光洁远比阻止阳光制造白皙效果困难得多,因而科技含量更高。“墨一样黑亮,墨一样柔腻”的广告词脍炙人口,中国的徽墨也受惠与此,销量大增,甚至受到收藏家追捧。

男人也深受美黑运动的影响。据报道,死于忧郁症的欧洲著名白人舞蹈艺人逊克杰生前酷爱日光浴,甚至睡觉时也要用500W的白炽灯照着,有人怀疑其严重的忧郁症与此有关。
......


在海滨浴场游泳时,大铃为了防止晒出色斑,带着帽子撑着伞,只在岸边踩踩水,遂有上面的胡思乱想。
[......]

2009年8月7日星期五

Mayavi2 用户手册4——使用Mayavi应用程序

内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入。其他文档的帖子在这里

章节概要

本章主要关注如何使用mayavi2应用程序。这里的一些内容也适用于在脚本中使用mayavi。我们建议新用户阅读此章以获得关于交互使用库程序的知识。

用户界面(UI)的通常布局

mayavi2应用程序启动时,将出现一个如下图所示的用户界面。

Mayavi的初始用户界面窗口

Mayavi的初始用户界面窗口

此用户界面包括如下几部分。

菜单

使用菜单可以打开文件,载入模块,设置首选项等。

Mayavi引擎树视图(engine tree view)

这是mayavi管道的树视图。 * 右键单击一个树节点可以可以重命名、删除、复制对象。

  • 左键单击一个节点,可以在树视图下面的对象编辑器中编辑其属性。

  • 可以在树视图上拖动节点。例如可以把一个模块从一组模块拖到另一组,或者把一个场景从一个可视化移到另一个可视化。

对象编辑器(object editor)

当单击mayavi管道中的一个对象时,在这里可以编辑其属性。

TVTK场景(scene)

这里显示数据可视化结果。可以使用鼠标和键盘与场景交互。更多细节在下面的章节中。

Python解释器(interpreter)

内置的Python解释器可以用来执行mayavi脚本和做其他事情。可以从mayavi的树视图内将节点拖到解释器内,然后对此节点所代表的对象编写脚本。

如果你安装了高于0.9.1的IPython,Python解释器将使用IPython。

日志(Logger)

可以在此查看应用程序日志消息。

Mayavi的用户界面布局具有高可配置性:

  • 可以拖动各部分之间的线以改变相应视图的大小。

  • 大部分标签可以拖到程序内的任意地方。

  • 每个视图(mayavi引擎视图,对象编辑器,python解释器和日志)都可以在“View”菜单中打开和关闭。

每次改变mayavi的界面设置,都被保存下来,下一次启动应用程序会保持相同的设置。另外,也可以使用View->Perspectives菜单项将不同的布局保存为不同的“perspectives”。

下面是一个特定配置的mayavi用户界面。这里各部分的大小都被改变了。

特定配置的mayavi用户界面

特定配置的mayavi用户界面

可视化数据

在Mayavi中可视化数据可通过下列步骤实现:将数据载入为数据源(data sources),将可视化模块应用于这些数据源以可视化数据,更多描述请参考an-overview-of-mayavi和learning-mayavi-by-example。

在使用模块过滤器之前,需要载入数据或进行类似的操作。Mayavi支持几种数据文件格式,最主要的是VTK数据文件格式。或者,mlab 可用来从numpy矩阵中载入数据。关于数据结构的更多信息,请参考 data-structures-used-by-mayavi。

数据被载入后,就可以使用各种过滤器filters过滤或其他方法修改数据,然后使用几个模块 modules来可视化数据。

这里列出所有的Mayavi模块过滤器。此列表作为参考很有用:

Unknown element:
.. toctree::

modules.rst filters.rst

与场景交互

在用户界面中的TVTK场景可以通过单击标签的“x”图标来关闭。每个场景有一个工具栏,包括各种功能:

  • 设置沿着X、Y和Z轴正负方向的等比例视图的按钮。

  • 打开平行投影代替默认的透视投影的按钮。查看二维图形时特别有用。

  • 显示xyz坐标轴的按钮。

  • 打开全屏视图的按钮。注意,进入全屏模式后,可以输入“q”或“e”回到正常窗口。

  • 将场景保存为各种图形格式的按钮。图形格式取决于文件后缀。

  • 打开场景配置界面的按钮。

与场景交互的主要方法是使用鼠标和键盘。

鼠标交互

有两种鼠标交互的模式。

  • 照相机模式:默认模式,使用鼠标操作照相机。输入“c”键可激活此模式。

  • 角色模式(Actor mode):使用鼠标操作其所指向的角色。输入“a”键可激活此模式。

场景视图可以通过操作鼠标进行变换,通常是按住鼠标键然后拖动从而完成操作。

  • 按住鼠标左键并拖动将在移动的方向上旋转照相机/角色。

    • 同时按住“SHIFT”键将移动场景——正如按住鼠标中键并拖动一样。

    • 同时按住“CONTROL”将围绕照相机焦点旋转。

    • 同时按住“SHIFT”和“CONTROL”并向上拖动将放大,向下则缩小。这与右键相同。

  • 按住右键并向上拖动将放大(或增加角色比例),向下拖动则缩小(或减小角色比例)。

  • 按住鼠标中键并拖动将移动场景或移动(translate)对象。

  • 向上滚动鼠标滚轮将放大,反之缩小。

键盘交互

场景支持下列键盘命令:

  • '3': 打开/关闭立体渲染(stereo render)。如果“stereo”首选项没有设为True,此命令可能无效。

  • 'a': 将鼠标交互设为角色模式。

  • 'c': 将鼠标交互设为照相机模式。

  • 'e'/'q'/'Esc': 退出全屏模式。

  • 'f': 将照相机焦点移到鼠标所指位置。这将移动照相机焦点从而将视图中心移动至鼠标所指位置。

  • 'j': 将鼠标交互设为操纵杆模式。在操纵杆模式中,鼠标在一定程度上模拟操纵杆。例如,按住鼠标左键从中心移开将转动场景。

  • 'l': 配置场景的照明。这将打开一个弹出窗口以改变照明设置。

  • 'p': 获取鼠标位置处的数据。这将打开一个弹出窗口显示获取的数据。此界面允许用户改变获取数据的来源:单元(cell),点(point),或任意点(arbitrary point)。

  • 'r': 重置照相机焦点和位置。这是个很方便的命令。

  • 's': 将场景保存为图片。这将打开一个文件选择对话框,文件名后缀决定图片类型。

  • 't': 将鼠标交互设为轨迹球模式(trackball mode),此为鼠标交互的默认模式。

  • '='/'+': 放大。

  • '-': 缩小。

  • '方向键': 按方向键可以转动照相机。同时按下"SHIFT"键,则移动照相机。

内置的Python解释器

内置的Python解释器为产生超强功能提供了可能性。此解释器具有命令补全、文档自动生成、工具提示和多行编辑等功能。另外,它还提供下列功能:

  • 名字mayavi自动地绑定到enthought.mayavi.script.Script实例,方便编写mayavi脚本。

  • 名字``application``绑定到envisage程序。

  • 如果通过File->Open File...菜单项打开Python文件,可以使用一个具有语法高亮功能的编辑器对其编辑。使用Control-r可以执行脚本,Control-s可保存文件,当编写简单mayavi脚本时很方便。也可以使用Control-nControl-s增大和减少字体。

  • 正如上面提到的,可以从Mayavi引擎树视图中将节点拖入Python解释器,对象将被正常写入脚本语句。通常使用的模式如下:

       >>> tvtk_scene_1

    >>> s = _

    在此例中,名称\ ``s``\ 被绑定到拖入的tvtk_scene对象。\ ``_``\ 变量保存了最后使用的表达式,这里即为拖入的对象。使用\ ``tvtk_scene_1``\ 也可以,但此变量名称是系统自动生成的,其中的数字没有具体含义(mouthful)。

自动生成脚本

Mayavi具有非常便利和强大的脚本记录功能,可用于下列方面:

  • 将所有操作记录为易于阅读的Python脚本,可以用来重新生成可视化结果。

  • 易于学习Mayavi的编码基础和如何编辑脚本。

录制mayavi操作为脚本

这里是使用此功能的方法:

  1. 当启动mayavi2程序时,引擎视图(树视图)的工具栏有一个红色的记录图标,在问号图标旁边,单击此图标。此操作也可以在独立的mlab会话中进行。

  2. 将弹出一个窗口,其中有一些样本代码行,可以独立运行或使用下列方式运行:mayavi2 -x script.py或者python script.py

  3. 在UI内进行想做的操作,此时可以看到执行这些操作所需的代码。例如,产生一个新数据源(通过增加节点对话框,文件菜单或右键单击任意选项),然后增加一个模块/过滤器等等。在树视图中编辑对象。

  4. 移动UI中的照相机,旋转,放大,缩小。所有这些操作将产生相应的代码。对于照相机,只有最终位置被存下来(否则将产生无数无用的代码行)。对于场景的主要键盘操作将被记录(除了 'c'/'t'/'j'/'a')。这意味着程序将记录方向键和'+'/'-'键等。

    进行操作的同时代码被更新,这是学习mayavi API的好方式。

  5. 完成操作后,再次单击记录图标,程序将询问保存文件的名称,例如script.py。如果只对代码感兴趣而不愿保存文件,单击'cancel'。

  6. 关闭记录窗口,退出Mayavi(如果你愿意)。

  7. 现在从解释器输入:

     $  mayavi2 -x script.py

    或:

     $ python script.py

    这样将运行所有代码,回到你上次离开时的状态。你可以自由地修改此脚本--事实上这正是自动代码生成的意义所在!

也可以对现有的Mayavi会话进行编程,理解这一点很重要。所以,如果启动mayavi后,你做了一些操作,或运行一个mayavi脚本,接着想记录以 后的操作,这是可以完成的。按照以前一样的流程进行即可。这里需要记住的一点是脚本记录器不创建你在此会话中已经建立的对象。

Note

也可以删除或拖动mayavi树视图中的对象。然而这可能不是你想在自动记录的脚本中所进行的操作。

正如前面所谈到的,脚本记录在mlab会话中或其他使用mayavi的地方都有效。任何mlab专用代码不会被记录,只有使用OO Mayavi API的代码才会被记录下来。

限制

脚本记录器将记录大多数重要的操作。但不支持下列操作:

  • 在场景中,“c”/“t”/“j”/“a”/“p”按键操作不能正确地记录。原因在于其实现非常复杂,对于基本的脚本编写没有必要。

  • 对界面的任意的脚本显然不会正常工作。

  • 只有改变特性(trait)和执行的特定方法(call)能被记录在代码中。所以执行任意对象的任意方法通常不会被记录下来,只有mayavi引擎的特定方法可以被记录下来。

命令行参数

下面的章节将介绍几个``mayavi2``应用程序的命令行参数。这些介绍也可以在mayavi2的用户手册中找到。

完整的管道可以通过命令行建立起来,所以Mayavi可以集成在shell脚本中提供可视化功能。

可以如下运行Mayavi:

 mayavi2 [options] [args]

这里的arg1arg2等等是可选的文件名,对应于已经保存的Mayavi2可视化(filename.mv2),Mayavi2脚本(filename.py)或任何Mayavi支持的数据文件。如果没有提供参数或选项,mayavi将以默认的空白场景启动。

这些选项如下:

-h

打印所有命令行选项然后退出。与--help相同。

-V

打印Mayavi版本然后退出。与--version相同。

-z file_name

载入之前保存的Mayavi2可视化。与--viz file_name--visualization file_name相同。

-d data_file

打开所支持格式的数据文件或非文件的数据源对象,包括VTK文件格式(.vtk, .xml, .vt[i,p,r,s,u], .pvt[i,p,r,s,u]),VRML2 (.wrl),3D Studio (.3ds),PLOT3D (*.xyz)和其他所支持的格式。

data_file``也可以是非文件的数据源,例如\ ``ParametricSurfacePointLoad将载入对应的数据源。本选项与--data相同。

-m module-name

模块是事际上对数据进行可视化的对象。给定的module-name将被载入当前ModuleManager。模块名字必须有效,否则将得到出错信息。

如果模块像这样给出:package.sub.module.SomeModule,那么模块(SomeModule)将从``package.sub.module``中导入。mayavi2的标准模块不需要完整路径,例如:

 mayavi2 -d data.vtk -m Outline -m user_modules.AModule

在此例中,Outline是标准模块,user_modules.AModule是某个用户自定义模块。本选项与--module相同。

-f filter-name

过滤器是以某种方式过滤数据的对象。filter-name将载入并对应于当前的源对象或过滤器对象。过滤器必须有效,否则将得到出错信息。

如果过滤器像这样给出:package.sub.filter.SomeFilter,那么过滤器(SomeFilter)将从package.sub.filter导入。mayavi2的标准过滤器不需要完整路径。例如:

 mayavi2 -d data.vtk -f ExtractVectorNorm -f user_filters.AFilter

在此例中,ExtractVectorNorm是一个标准过滤器,user_filters.AFilter是某个用户定义的过滤器。本选项与--filter相同。

-M

在Mayavi管道中启动一个新模块管理器。与--module-mgr相同。

-n

建立一个新窗口或场景。在此之后的选项将作用于新创建的场景。与--new-window相同。

-o

在offscreen模式下运行Mayavi,没有任何图形用户界面。此模式在需要后台渲染图片(例如动画)时非常有用,避免弹出扰人的用户界面。Mayavi脚本(通过-x选项运行)应该在此模式下工作得很好。与--offscreen相同。

-x script-file

运行给定的脚本,同时确保名字空间中的“mayavi”是Mayavi的脚本实例 --就像在内置的Python解释器内一样。与--exec相同.

-s python-expression

对最后建立的对象执行Python命令。假设前一个对象是个模块,如果要设置其颜色并保存场景,可以这样做:

 $ mayavi2 [...] -m Outline -s"actor.property.color = (1,0,0)" \
-s "scene.save('test.png', size=(800, 800))"

应在命令前后使用引号。本选项与--set相同。

Warning

-x--exec使用execfile,如果脚本做不合适的操作将很危险。类似的,-s--set使用exec,如不适当使用也很危险。

还有很重要的一点,mayavi的命令行参数是按照给出顺序依次处理的。由此用户可以实现一些有趣的操作。

下面是一些命令行参数的例子:

 $ mayavi2 -d ParametricSurface -s "function='dini'" -m Surface \
-s "module_manager.scalar_lut_manager.show_scalar_bar = True" \
-s "scene.isometric_view()" -s "scene.save('snapshot.png')"

$ mayavi2 -d heart.vtk -m Axes -m Outline -m GridPlane \
-m ContourGridPlane -m IsoSurface

$ mayavi2 -d fire_ug.vtu -m Axes -m Outline -m VectorCutPlane \
-f MaskPoints -m Glyph

在上面的例子中,heart.vtkfire_ug.vtu等VTK文件可以在源文件目录的examples/data中找到。它们是否安装到你的电脑取决于你的操作系统。

[......]

2009年8月4日星期二

天神脸谱


从杂志封面上看到“青森ねぶた祭”的一个大型灯笼的照片,于是将其脸部画下来。可是没有规划好大小,头盔画不下了。

“青森ねぶた祭”是日本青森县的著名节日,其中一个重要活动是大型灯笼游行。灯笼造型多取材于天神(菅原道真 雷神と化す)或古代英雄(義経渡海),有一些甚至出自三国志(呉軍の先鋒・鈴の甘寧)和水浒传(水滸伝より「黒旋風・李逵と張順」)。详情可查看下面的网站:

[......]

2009年7月18日星期六

找回xfce桌面上的图标和文件


不知什么原因,某天启动电脑后,桌面上的图标、文件和背景图片都不见了。一直没有时间去折腾,今天终于回复原状了。

打开“开始菜单-设置-xfce4设置中心-桌面“对话框,选中“允许xfce管理桌面”,并记得关机时选中“保存设置”,这样才能在下次启动时也有效。

[......]

2009年7月12日星期日

天一,生日快乐!


天一是朋友的女儿,他们住在巴黎。这一张是根据她六个月时的照片画的。她的父母用那张照片做了圣诞卡片发给朋友们。所以我就照着画了。其实,现在的天一已经长大很多了。

上次见面时,你一看到我就哭;下次再见,希望你能用三种语言喊我叔叔哦。

生日快乐,天一!

[......]

Mayavi2 用户手册3.5——探索向量场

内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入。其他文档的帖子在这里

在此例中,我们从标量场的梯度(gradient)中产生向量场,然后交互地查看。此例介绍怎样交互地进行类似前面例子的操作,例如使用过滤器 (filter)和模块(module)。前面的例子使用 `numpy`进行大多数操作,这一步则需要对 Mayavi 和 VTK 过滤器有更多的了解。与之对应的益处是可以交互地进行可视化。

首先,我们生成与前面例子相同的标量场。打开 Mayavi,在 Python 命令行内输入下面的代码:

 from enthought.mayavi import mlab
import numpy as np

def V(x, y, z):
""" A 3D sinusoidal lattice with a parabolic confinement. """
return np.cos(10*x) + np.cos(10*y) + np.cos(10*z) + 2*(x**2 + y**2 + z**2)
X, Y, Z = np.mgrid[-2:2:100j, -2:2:100j, -2:2:100j]
mlab.contour3d(X, Y, Z, V)

像前面的例子一样,可以改变调色板(color map)和在等值面中选定的数值。

为了使用标量场梯度生成向量场,我们将使用`CellDerivative`滤波器。此滤波器可获得单元(也就是点之间,请参考data- structures-used-by-mayavi)内数据的微分。首先使用`PointToCellData`滤波器对单元内各点进行插值,然后使用 `CellDerivatives`滤波器,接着使用`CellToPointData`滤波器重新获得点数据。

使用`VectorCutPlane`模块可以可视化向量场。生成的标量数据太大,我们可以在`Glyph`标签(以及在此标签内的`Glyph` 标签)将缩放比例(scale factor)减少为0.2。向量场还是太密集,可以在`Masking`标签打开遮蔽(masking)功能,将`on ratio`设为6 (one arrow out of 6 is masked)并关闭随机模式(random mode)。

example_vector_cut_plane.jpg

为了获得更漂亮的颜色,可以改变向量场的调色板:在`VectorCutPlane`上面的`Colors and legend`节点,找到**in the VectorLUT**标签,选择查找表,那里有向量和标量数据的不同调色板。

不像之前的例子,我们可以在对话框中试试各种参数,例如遮蔽,或在`Glyph`标签选择`color_by_scalar`来显示势值(the value of the potential)。我们也可以拖动显示向量的剖面。

既然有了3D向量场,可以使用Mayavi集成(integrate)其中一个粒子的轨迹。为此,我们可以使用streamline模块。此模块显 示起始于种子(seed)表面顶点的轨迹。选择`Point Widget`作为种子(在`Seed`标签),可以在3D场景中拖动种子点。这使我们可以在产生于初始标量场的势位中探索轨迹。这里,所有的轨迹终止于 局部极小势位。可以移动种子点,使我们可以看到每个点将陷入的极小值之处,换句话说,每个局部极小的吸引盆(basin of attraction)。

example_streamline.jpg

[......]

2009年6月28日星期日

Mayavi2 用户手册3.4——与 scipy 一起使用 Mayavi

内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入

此教程的例子讲解当使用 scipy 进行数值计算时如何利用 Mayavi 交互地可视化 numpy 数组。此教程假设你熟悉 Python 的数值工具,然后讲解如何使用 Mayavi 与这些工具协同工作。

让我们来研究电势(potential)中例子的轨迹。这在物理和工程中是很常见的问题,电势和轨迹可视化的关键是理解此问题。

我们所关心的电势是一个周期性栅格(periodic lattice), 沉浸在抛物线约束(parabolic confinement)中。我们振动此电势然后查看粒子从一个栅格的洞(hole)跳到另一个的情况。抛物线约束在那里限制粒子的偏移 (excursion)。:

 import numpy as np

def V(x, y, z):
""" A 3D sinusoidal lattice with a parabolic confinement. """
return np.cos(10*x) + np.cos(10*y) + np.cos(10*z) + 2*(x**2 + y**2 + z**2)

既然我们定义好了电势,我们看看在三维中看起来是什么样子。我们可以创建一个点组成的三维网格,然后在这些点处进行采样:

 X, Y, Z = np.mgrid[-2:2:100j, -2:2:100j, -2:2:100j]
V(X, Y, Z)

我们将使用 mlab 模块(请参考simple-scripting-with-mlab)交互地可视化此容量数据(volumetric data)。为此,最好在 Python 的交互命令行输入命令,使用 Mayavi2 内建的命令行或 ipython -wthread。下面我们可视化电势的三维 iso 曲面:

 from enthought.mayavi import mlab
mlab.contour3d(X, Y, Z, V)

我们可以与上面的命令产生的可视化结果进行交互,例如旋转视图。但是为了更好的理解电势的结构,变化 iso 曲面是很有用的。我们可以在 Mayavi 管道树(如果你从 ipython 中运行,需要单击场景中的 Mayavi 图标以弹出管道树) 中双击`IsoSurface`。这将打开一个对话框,允许我们选择轮廓的数值。好的电势视图可以这样获得:关闭 auto contour 并选择 -0.5 作为第一个轮廓数值 (例如,在左边的文本输入框输入数值并按 tab 键)。单击蓝色箭头并选择"Add after"可以加入第二个轮廓值。使用数值15可以得到较好的结果。

我们现在可以管道线中单击 Colors and legends 然后选择不同的 LUT (查找表)以改变使用的颜色。让我们选择 'Paired',因为它可以很好的分开层次。

example_potential_ipython.jpg

为了得到更好的电势视图,我们想显示更多的轮廓,但是其问题是封闭的轮廓隐藏了内部情况。一个解决方案是使用剖面。右击 IsoSurface 节点,通过 "Add module" 子菜单添加 ScalarCutPlane。单击并拖动它可以移动此剖面。

为了实现 numpy 数组和可视化之间的联系,我们可以使用相同的菜单添加 Axes 和 Outline。最后,让我们添加一个颜色条。输入下面的命令:

 mlab.colorbar(title='Potential', orientation='vertical')

或者使用先前使用的 LUT 中的选项。

example_potential.jpg

我们想研究此电势中粒子的运动。为此我们需要推导电势陡度(gradient)相应的力。我们建立陡度函数:

 def gradient(f, x, y, z, d=0.01):
""" Return the gradient of f in (x, y, z). """
fx = f(x+d, y, z)
fx_ = f(x-d, y, z)
fy = f(x, y+d, z)
fy_ = f(x, y-d, z)
fz = f(x, y, z+d)
fz_ = f(x, y, z-d)
return (fx-fx_)/(2*d), (fy-fy_)/(2*d), (fz-fz_)/(2*d)

为了检查陡度函数是否工作正常,让我们可视化它产生的向量场。为了避免显示太多的向量,我们将仅仅评定 X=50 处剖面的陡度,并且只在网格中每三个点评定一个:

 Vx, Vy, Vz = gradient(V, X[50, ::3, ::3], Y[50, ::3, ::3], Z[50, ::3, ::3])
mlab.quiver3d(X[50, ::3, ::3], Y[50, ::3, ::3], Z[50, ::3, ::3],
Vx, Vy, Vz, scale_factor=-0.2, color=(1, 1, 1))

example_gradient.jpg

现在我们可以使用 scipy 积分轨迹。首先必须定义动态流体,这是一个这些参数和时间的函数,返回不同参数的导数。此流体被每个 ODE (常微分方程) 解算器(solver)所使用。它给出系统动态(dynamic)。我们关心的动态由电势推导出的力造成,而我们在三个方向上随时间振动此电势,作为阻尼力。调节阻尼系数及振动的数量和频率可以给出有趣的动态。 :

 def flow(r, t):
""" The dynamical flow of the system """
x, y, z, vx, vy, vz = r
fx, fy, fz = gradient(V, x-.2*np.sin(6*t), y-.2*np.sin(6*t+1), z-.2*np.sin(6*t+2))
return np.array((vx, vy, vz, -fx - 0.3*vx, -fy - 0.3*vy, -fz - 0.3*vz))

现在我们可以积分轨迹:

 from scipy.integrate import odeint

# Initial conditions
R0 = (0, 0, 0, 0, 0, 0)
# Times at which we want the integrator to return the positions:
t = np.linspace(0, 50, 500)
R = odeint(flow, R0, t)

右击对应的管道线节点,选择 delete 可除去剖面和向量场。然后我们开始绘制此轨迹。同时关闭相应的 Colors and legends 节点的第一个颜色条。我们用与它相关的标量信息绘制轨迹,通过调色板(colormap)显示时间:

 x, y, z, vx, vy, vz = R.T
trajectory = mlab.plot3d(x, y, z, t, colormap='hot',
tube_radius=None)
mlab.colorbar(trajectory, title='Time', orientation='vertical')

example_trajectories.jpg
[......]

2009年6月27日星期六

Mayavi2 用户手册3.3——可视化富数据集(rich dataset): 例子数据 fire_ug.vtu

内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入

类似 heart.vtk,例子数据集 fire_ug.vtu 也可以在目录 examples/data 中找到。此数据集是一个非结构化的网格(unstructured grid),存在一个 VTK XML 文件中,表示一个角落中有火的房间。通过模拟此火焰的流体,将一个特定时刻的结果保存在此文件中。此数据集由 Philip Rubini 博士提供 (当时 Rubini 博士在 Cranfield 大学)。同时提供了一个 VRML 文件,显示火焰被取走的房间情况。

  1. 启动 mayavi2,选择 File->Load data->Open file 来载入数据。再次在左边的树形显示中看到一个节点,但在 TVTK 场景中没有任何显示。此数据集在一个文件中包含了不同的标量和向量数据。如果选择左边的 VTK XML file... 节点,在对象编辑器中将配置读入器(reader)。在其中,可以看到此数据文件中所有标量和向量的下拉列表。任意选择其中一个。

  2. 按照前面所述,使用 Outline 模块建立数据的轮廓。建立 IsoSurface 模块以查看数据的 iso-曲面。也请试试 ScalarCutPlane 模块。

  3. 单击 Colors and legends 节点,选中 Show scalar bar,显示映射颜色的标尺(通过查找表(Look up table)将标量映射为颜色)。试试不同的默认颜色映射。

  4. 现在单击 VTK XML file ... 并选择不同的标量来查看数据如何变化。当标量改变时,图例将自动更新。

  5. 此数据也包括向量。标量数据有 uvw,但没有速度的大小。假设我们希望查看速度大小的 iso-曲面,可以使用 ExtractVectorNorm 过滤器。选择 Visualize->Filters->Extract Vector Norm 菜单可以使用此过滤器。

  6. 如果现在建立 ScalarCutPlane,可以在 ExtractVectorNorm 节点下看到 Colors and legends 节点。这个标量剖面用颜色显示此过滤器生成的速度大小。可以将 iso-曲面模块从另一个 Colors and legends 节点下拖到此 Colors and legends 节点下,使得生成的 Iso-曲面 是关于速度大小的,而不是关于所选的标量。

    注意:左边的显示树表示如下的数据流动管道, source -> filter -> modules。本质上是数据从父节点流到其下的子节点。

    现在如果你想在管道的不同分支进行可视化,例如你想查看温度数据的 iso 曲面,必须单击模块或源对象(VTK XML File ... 节点)本身,然后选择菜单项。当选择了显示树中的一项,此项目成为当前对象,其后选择的菜单项将在当前对象下建立新模块/滤波器。

  7. 可以过滤"已经过滤的数据"。选择 ExtractVectorNorm 节点使其成为当前对象。现在通过 Visualize->Filters->Threshold 建立 Threshold 滤波器。然后在对象编辑器中设置上限和下限,例如 0.5 和 3.0。如果在这里建立 VectorCutPlane 模块,并且移动此剖面,应该能看到箭头,但是只有位于上下限之间的箭头。因此可以使用这样的步骤建立很复杂的可视化管道。

  8. 有几个向量模块:VectorCutPlaneVectorsWarpVectorCutPlaneStreamlines。如果查看流线(streamline),mayavi 将产生数据集中向量的流线。为了查看初始数据集的流线,可以单击原先的 Outline 模块(或数据源),然后选择 Streamline 菜单项。可以使用3D小部件移动屏幕上不同类型的种子(seed)。这些位置的种子点(seed point)用来跟踪流线。球(Sphere)、线和平面源可以用来初始化流线种子。

  9. 选择 File->Open->VRML2 file 菜单项打开 VRML 文件``room_vis.wrl``,可以查看着火的房间。

  10. 建立起复杂的可视化管道后,想将其保存下来以便以后再查看,可以通过 File->Save Visualization 菜单项保存整个可视化。可以使用 File->Load Visualization 菜单项载入保存后的文件。此选项并不是100%鲁棒,仍在实验阶段。后续版本将改善此功能。毕竟,此功能暂时可以使用。

再次说明,此例中的可视化是使用用户界面生成的,但可以完全使用 Python 脚本完成。一个简单的脚本 examples/streamline.py 演示了几个上面的模块。用户可以研究一下此文件。可按照如下方式运行此脚本:

 $ cd examples
$ python streamline.py

或者:

 $ mayavi2 -x streamline.py

从此例可以看到,编写脚本使用 mayavi 进行可视化是很简单的。下面是此脚本生成的图形。


[......]

2009年6月10日星期三

收到Google寄来的礼物


今年2月份时,由于 feedburner出错(Google's poor planning on Feedburner),曾收到Google的道歉信,许诺给我寄一份礼物。就在我几乎忘记此事时,昨天收到了Google寄来的包裹:一个无线光电鼠标(包括一个PS2转usb转换器),一支签字笔,一个无源USB集中器。

免费服务出了错还赔礼道歉送礼物,而很多公司收了钱却不好好干活,真是天壤之别。

我这个用户的忠诚度又飙升了两米。


[......]

2009年5月19日星期二

VPython和WxPython协作的演示程序


一直在用VPython 4.0Beta,忽然发现VPython跳过4.0直接发布了5.0,特发一个自己编写的VPython和WxPython协作的演示程序以示祝贺。

此演示程序在VPython 4.0Beta和WxPython 2.8下测试通过,操作系统为WinXP和Hiweed2RC3,不过在Hiweed中似乎不能正常退出。程序很简单:
  1. 显示一个VPython生成的动画窗口和WxPython生成的控制窗口
  2. 在动画窗口中有一辆行驶的汽车
  3. 在控制窗口中可以启动、停止动画窗口内的汽车,可调节行驶速度,可单步前进后退


下面的命令可启动程序:
python main.py


欢迎来信指教、讨论。源程序在这里:


[......]

2009年5月17日星期日

松锦连理


五一期间,大铃受邀主持闺中好友的婚礼,我也跑跑龙套,客串技术支持,按程序播放相应乐曲和PPT。

大铃的主持台词动情,世界各地同学传来的祝福温情,介绍成长经历和爱情故事触景生情,以致新娘子泪流满面,新郎也眼含热泪,大铃自己强忍哽咽,我则差点误了PPT的播放。本来当地有在宴席上捉弄新人及双方父母的传统,据说相当低俗,这次却被结婚仪式的高雅路线镇住了,甚至新郎没有被灌酒。

此涂鸦送给两个幸福的人儿,正所谓“窈窕淑女君子好逑”。

[......]

2009年4月18日星期六

日语中的简化

刚学日语时,犯过“举一反三”的错误。学了“おはよう”和“おはようございます”,以为加上“ございます”就可以变成敬语,于是说出这样令日本同事捧腹的“日语”:
こんにちはございます
后来查了查,才知道这些日常问候语原来都是缩略语:
おはよう ← お早く ← お早く○○ですね
こんにちは ← 今日は御機嫌いかがですか
こんばんは ← 今晩はいい晩です
さようなら ← 然様ならお別れいたしましょう
以及
ござります(る) → ございます

除了这类年代久远、已经成为正式用语的缩略语外,现代口语相对书面语的简略更多。下面这些简略是使发音更为容易。
すみません → すいません
走っている、考えている → 走ってる、考えてる
くだらない、変わらない → くだんない、変わんない(→ くだんねえ、変わんねえ)
どこか → どっか
すごい → すげ
最后那个似乎只有年轻人才说,目前还属于不正确的日语。

日语中有一类敬语是在普通说法上加上“ございます”、“いただき”等语素,就是用繁琐来体现尊敬。有趣的是,现在日本人既想表达尊敬又想简略,竟然想到去掉前面的主体,只说“ございます”等部分。例如:
おはようございます → ございます
我工作的研究所的门卫很讲礼貌,早上见到每个人都要问好。上班人多的时候,把最后的“す”拖长,同时眼睛扫过一大片人,这样就不必说很多次,也算一种简化吧。

日语在汉字的书写上也有简化。现代日语的汉字基本上使用汉语的繁体字,但是也有一些简化,有些与汉语的简体字相同,有些属于自创。例如:
學 → 学
國 → 国
廣 → 広
氣 → 気
價 → 価
上年级的日本人还认识前面的繁体,但能正确书写的则不多见。我的一个52岁的上司就以能写繁体“學”而骄傲,呵呵。

日语中还有简繁同时使用的例子,例如“機”和“机”,不过两者意思不同;前者和汉语相同,后者则是“桌子”的意思。另外,在手写时,简化的趋势就更明显了。和同事讨论工作时,我们常使用白板。令我吃惊的是,日本同事竟书写很多简体字,例如“问”,只有我这个外国人才认真的写“問”。

日语相对汉语和英语要繁琐得多。日本的电视台常播放英日双语的新闻节目,日语播音员的语速明显比英语播音员快很多。平时听同事说敬语,像机关枪一样打出一长串后缀,不由得感叹他们的嘴真是灵巧啊。即便仍然繁琐,作为一个日语初学者,我还是能感受到日语简化的趋势。

不由地联想到汉语的繁简之争。虽然有些字简化得不够合理,但我支持简体字。丁启阵教授的文章很精彩,我就不狗尾续貂了。
[......]

2009年4月12日星期日

Mayavi2 用户手册3.2——载入标量数据: 例子heart.vtk

内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入

本章介绍一个使用 heart.vtk 文件的简单例子。这是一个 32 x 32 x 12 个点的3D 数据,每个点处是标量数据,并且这些点在空间平均分布。这是一个结构化数据集(structured dataset),事实上是 ImageData。以后我们会读入很多这样的数据,但是现在只要将其当作空间上平均分布的点,每个点有标量数据与之相对应。此数据显然是心脏的CT扫描数据--我不知道这是谁的心脏。此文件是一个易读的文本文件,如果你愿意,可以使用文本编辑器查看。

  1. 确保 mayavi2 已经启动。首先打开数据文件。使用 File->Load data->Open file 菜单项,在打开的文件对话框内,找到包含例子数据的目录,选中 heart.vtk 文件。

    一旦选中数据,可以在 Mayavi 左面的显示树中看到新节点,VTK file (heart.vtk)。注意,在 TVTK 场景中还看不到任何图形。

  2. 为了查看轮廓(outline)——一个方框,找到 Visualize->Modules 菜单项,选择 Outline 模块。在 TVTK 场景中可以立刻看到一个白色方框。在显示树中,也应看到两个新节点,`Colors and legends` 和其下面的 Outline

  3. 单击左面的 Outline 节点可以改变轮廓的属性。这将在窗口的左下部,显示树的下面,生成“对象编辑窗口”。试着修改其设置,并查看结果。如果你双击左面的节点,将弹出编辑器对话框,而不是嵌入的对象编辑器。

    注意,通常 Module 的编辑器窗口有一部分是 Actor`(角色),一部分为 `Mapper`(映射器),一部分为 `Property`(属性)。这些对应于 TVTK/VTK 术语。可以将 `Property 看作与颜色、表示(representation)(曲面、线框等等)、线宽等等相关。Actor 部分与屏幕上渲染的对象有关,编辑器通常可设置其是否显示。 在 VTK 术语中,Mapper 是指将数据转换为图元(graphics primitive)的对象。与其相关的属性包含在 Mapper 部分。

  4. 关于与 TVTK 场景交互的详细信息,请参考此章节 interaction-with-the-scene并尝试其例子直到熟悉为止。

  5. 现在,保持选中 Outline 节点,选择 Visualize->Modules->IsoSurface 菜单项,生成 iso-曲面。在左面可以看到一个新节点 IsoSurface,在场景中可以看到标量数据的 iso-轮廓。当选中某个 iso数值时,此 iso-曲面被相应地染上颜色。试试修改此模块的各项设置。

  6. 要产生有意义的可视化图形,需要了解每种颜色代表什么。单击显示树的 Colors and legends 节点,在对象编辑器内选中 Show scalar bar`,将在 TVTK 场景中显示颜色图例。单击并拖动图例可以将其在场景中任意移动,单击并拖动其边缘,可以改变其大小。在对象编辑器中选择不同的选项可以改变颜色映射特性。

  7. 生成一个简单的"网格平面(grid plane)"来查看点在网格上的情况。这可以通过 `Visualize->Modules->GridPlane 菜单项,使用 GridPlane 模块来实现。

  8. 右键单击一个特定模块并选择"删除"可将其删除。请在 GridPlane 模块中试试删除以及其他右键菜单选项。

  9. 试试 ContourGridPlane 模块和 ScalarCutPlane 模块。

    ScalarCutPlane 模块有个很强大的特性,称为 三维小部件(3D widgets)。在 TVTK 场景窗口中,可以看到一个剖面(cut plane) 以不同颜色表示切片上的数据。此剖面轮廓为红色,有一个箭头伸出来。可以直接点击并拖动此剖面;点击并拖动箭头可以转动此剖面。也可以使用对象编辑器窗口重设标量剖面。

  10. 单击 TVTK 场景中的保存图标或使用 File->Save Scene As 菜单项可以将可视化结果保存为图片。

你应该得到一个如下所示的图像。

由 heart.vtk 获得的可视化例子

mayavi 的一个优点是:虽然这里所有的操作都通过用户界面完成,但是所有这些操作都可以通过 Python 脚本完成。相关的更多信息请参考这里simple-scripting-with-mlab (更深入的内容请参考advanced-scripting-with-mayavi)。

打开数据文件和启动模块也可以通过命令行完成。例如,可以简单的使用下面的命令:

 $ mayavi2 -d /path/to/heart.vtk -m Outline -m IsoSurface \
> -m GridPlane -m ScalarCutPlane

更多信息在此章command-line-arguments。

[......]

Mayavi2 用户手册3.1——参数曲面(parametric surface): 对可视化的简单介绍

内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入
如果不能立刻找到作为例子的数据,参数曲面是非常方便的选择。参数曲面通常由两个变量 u 和 v 参数化获得。VTK 有一系列的类可用来查看参数曲面。Mayavi 也有这个功能。这样的数据是嵌入到三维中的两维表面。曲面上也有标量数据。有关 VTK 参量曲面的更多信息,可以参看 Andrew Maclean 的 Parametric Surfaces
  1. 启动 mayavi2 后,选择 File->Load data->Create Parametric Surface source 可以生成参数曲面源。生成数据后,可以在 Mayavi 左面的显示树(tree view)中的 ParametricSurface 部分看到新节点。请注意,在 TVTK 场景中,目前还看不到可视化图形。

    可以通过单击 ParametricSurface 的节点来修改参数曲面的特性。

  2. 为了查看轮廓(outline)——一个方框,找到 Visualize->Modules 菜单项,选择 Outline 模块。也可以右键单击 ParametricSurface 节点打开上下文菜单,选择 Add Module->Surface。在 TVTK 场景中将立刻看到一个网架立方体。在显示树中,也应看到两个新节点,`Colors and legends` 和其下面的 Outline

  3. 单击左面的 Outline 节点可以改变轮廓的属性。这将在窗口的左下部,显示树的下面,生成“对象编辑窗口”。试着修改其设置,并查看结果。例如,修改颜色域的数值以改变轮廓方框的颜色。如果你双击左面的节点,将弹出编辑器对话框,而不是嵌入的对象编辑器。

  4. 关于场景的详细信息,请参考此章节 interaction-with-the-scene并尝试其例子。

  5. 选择 Visualize->Modules->Surface 生成 Surface 模块,可以查看实际的曲面。单击左面的 Surface 节点,打开 Enable contours`,可以显示此曲面上的标量数据。

  6. 单击显示树的 `Modules 节点,可以显示颜色图例(用于将标量数值映射为颜色)。在 'Scalar LUT' 标签,选中 Show scalar bar`,将在 TVTK 场景中显示图例。单击并拖动图例可以将其在场景中任意移动,单击并拖动其边缘,可以改变其大小。在对象编辑器中选择不同的查询表(lookup table),可以改变颜色映射特性。

  7. 可以添加任意多的模块,但不是所有的模块对所有数据都有意义。Mayavi 还没有将对特定数据无意义的模块变成灰色(使其无效)。这一功能将在未来实现。但是犯错误并不可怕,所以请大胆尝试。

  8. 可以添加任意多的数据源。通过选择场景节点然后载入另一个参数曲面源,可以在同一场景中添加两个不同的参数曲面。这是否有意义,取决于用户。也可以添加任 意多的场景,并在其中查看任意数据。还可以在显示树上单击右键,通过上下文菜单在任意节点间剪切/粘贴/复制数据源和模块。

  9. 右键单击 `Outline 节点,选择 Delete,可以删除 Outline 模块。你也可以试试其他的选项。

  10. 使用 File->Save Scene As 菜单项可以将渲染的可视化结果保存为多种文件格式。

  11. 可视化本身可以通过 File->Save Visualization 菜单项保存为文件,也可以使用 Load visualization 菜单项重新载入。

下面是一个使用参数曲面数据源的可视化例子。请注意,在屏幕上移动角色(actor)会影响不同曲面的定位(使用场景的角色模式,通过‘a’键可以移动角色)。更多信息请参考interaction-with-the-scene.

使用参数曲面的可视化例子

[......]

Mayavi2 用户手册3——使用例子学习 Mayavi

内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入
章节概要

本章给出一些例子,详细解释如何使用 Mayavi 应用程序,同时介绍其特点。

本章主要介绍 Mayavi 应用程序,这也是将 Mayavi 作为库程序使用的基础。如果你只希望尽快将 Mayavi 简单地像 Matlab 一样作为画图库程序使用,可以直接跳到这一章 simple-scripting-with-mlab,然后再回来深入理解。

要认识 mayavai,首先像下面这样在命令行启动 Mayavi2:

 $ mayavi2

在 Windows 中,可以双击可执行文件 mayavi2.exe (通常在 Python2X\Scripts 目录中);如果你安装了 python(x,y) 或 EPD,可以使用开始菜单中的快捷方式。

Mayavi 启动后,可以改变用户界面各个面板的大小以获得舒服的布局。这些设置将成为mayavi的默认属性。有关用户界面的详细信息可以在此章节获得general-layout-of-ui。

在进行下一步之前,有必要首先找到一些用来做实验的数据。下面的例子中,有两个要使用mayavi 自带的数据,可以在 mayavi 根目录中的 examples/data 目录中找到。如果没有安装这些数据,可以从这里下载: http://code.enthought.com/enstaller/eggs/source/

例子:

  1. 参数曲面(parametric surface): 对可视化的简单介绍
  2. 载入标量数据: 例子heart.vtk
  3. 可视化富数据集(rich dataset): 例子数据 fire_ug.vtu
  4. 与 scipy 一起使用 Mayavi
  5. 探索向量场
[......]

2009年4月10日星期五

遭遇域名劫持

这几天突然无法访问 YouTube。清空了 FireFox 的缓存,试了 elinks,甚至用 wget 下载首页,都失败。难道日本也封了 YouTube?到了研究所一试,显示得刷刷的。ping 了一下域名,记下 IP 地址:208.117.236.69。回来再 ping,得到:4.36.66.178。原来是DNS的问题!再一检查 /etc/resolv.conf:
nameserver 202.106.196.115
nameserver 202.106.0.20

太奇怪了,什么时候设置了网通的 DNS??!!立刻改回到 YahooBB 的 DNS:
nameserver 218.176.253.97
nameserver 218.176.253.65

立刻,YouTube 显示得刷刷的。

在国外浏览国外的网站(主域名服务器在国外的域名),还遭到国内的域名劫持,真是滑稽啊。
[......]

2009年4月4日星期六

关西话如何说“不用谢”

标准日语中,“谢谢”和“不用谢”分别是
「有難う御座います」
「どういたしまして」
关西方言的“谢谢”是
「おおきに」
那么对应的“不用谢”该如何说?我请教了周围的日本同事,他们商量了好一阵,最后的结论竟然是:没有!
[......]

2009年3月31日星期二

非诚勿扰



纪念小侄女出生百天——迟到了20天。

祝小侄女健康聪明快乐!

呵呵,确实是小女娃,为了以后秀发飘飘,所以理个和尚头先。


[......]

2009年3月26日星期四

人迹罕至

Ross Ching 编制了下面这段视频 Eclectic 3.0: The Roads Less Traveled。那云影变幻时光流转着实令人着迷。另外,记得打开音箱,不要错过了绝妙的背景音乐。

Ross 在隆冬季节独自到美国西部人迹罕至的地方拍摄了1万5千多张静止照片,剪辑成此视频。这里标记了他的拍摄地点。他说,令人惊奇的是:当你漫无目的探索时,会穿过那么多美丽的地方。当他离开公路进入荒野,好像一个新世界在面前展开,一些地方类似火星表面,方圆50英里内只有他一人。在Glen峡谷区,他驱车100英里没有看到一个人。

正所谓“世之奇伟、瑰怪、非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。”


[......]

2009年3月21日星期六

使用 linux 版的 skype 发短信


目前, linux 版的 skype(2.0.0.72) 还没有提供发短信的界面,但其核心已经具备此功能。Vincent开发了一个命令行的 Skype 工具 Skype Tools 0.11,可以用来发短信:
esn@esn-laptop:~/script/skype_linux_tools$ ./send_sms.py +861234567 Hello World
# 弹出一个对话框,询问是否允许使用 Skype,允许即可
Your SMS has 1 chunk(s).
# 等待......
+861234567890 has been successfully delivered
All targets successfully delivered

此工具需要 Skype4Py,下载后可以按照下面的步骤进行安装:
$ tar -zxvf Skype4Py-x.x.x.x.tar.gz
$ cd Skype4Py-x.x.x.x
$ sudo python setup.py install

除了发短信,此工具还有另外一些功能:

注意,使用此工具时,需要首先登录 Skype。

还有一个图形界面工具 SkySentials 可以发短信,当然,它也有其他一些功能。我没有用过此工具,这里略过。

[......]

用wget从防火墙后检出 Googlecode

由于防火墙相关端口设置的问题,在防火墙后可能无法使用下面的标准方式检出 Googlecode:
svn checkout http://mayavi2-cn.googlecode.com/svn/trunk/ mayavi2-cn-read-only
使用 wget 可以解决此问题。
wget -nc -np -r -nH --cut-dirs=2 -R ".html" http://mayavi2-cn.googlecode.com/svn/trunk/
其中各选项的功能如下
  • -nc 防止相同链接下载多次
  • -np 防止下载指向上层目录的链接
  • -r 递进下载子目录
  • -nH 不创建主机目录
  • --cut-dirs=2 不创建从主机开始的两层目录,这里就是不创建svn/trunk/
  • -R ".html" 不下载 html 文件(如果源文件中包括网页文件,请不要使用此选项)

补充几个有用的选项:
  • --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3"
    伪装为Linux下的Firefox
  • -e robots=off 忽略网站的robot设置。如果不做此设置,遇到如下robot.txt文件,wget将停止所有下载:
    User-agent: *
    Disallow: /
  • --wait=33 --random-wait 每下载一个文件之前随机等待0到33秒
[......]

2009年3月20日星期五

眼见为实?

有句老话叫“眼见为实”,真是这样吗?

现代科技日新月异,“移花接木”的手段也与时俱进,哪天看到希特勒和布什拥抱也不稀罕,那些低劣造假就不提了;另外还有各种视错觉,不少目击飞碟就是错觉造成的。可以说,现代人已经对自己的眼睛不那么有信心了。

那么,即使没有造假没有错觉,是不是就眼见为实呢?下面这个视频,会令人对自己的认知能力彻底怀疑起来。



何谓眼大无神,何谓视而不见,呜呼哀哉!

[......]

2009年3月15日星期日

荷风送香气

3月7日凌晨,奶奶解脱了人世的苦痛,西行而去。。。。。。

由于爸妈工作忙,上学前我基本上是与爷爷奶奶住在一起。有时候回家住,晚上闹起脾气,爸爸只能深更半夜把我送回奶奶家。上了小学,也经常放学后跑到奶奶家,害得爸妈着急以为我丢了。小时候的事情记忆模糊了,但有两个镜头很清晰:一个是奶奶教我认表,那种罗马数字的大钟,另一个是我做了错事,奶奶拿着擀面杖追着我在院子里跑。

到外地上高中后,见奶奶的次数就少了。上大学后,每次见奶奶,都能感觉到明显得变老,人佝偻得越来越小,但她都要给我做饭吃。去年冬天开始浑身疼痛做不了家务,近几个月甚至没力气接电话。去年9月份回去看奶奶,她对我说,以后我再打电话,她可能不和我说话了,让我不要记挂,人都是要走的。

奶奶的一生像那个时代的大多数家庭妇女一样平凡。

由于穷,又是女孩,奶奶没有上过学。解放后政府办扫盲班,她终于有机会识字。但是没过多长时间,除了她,其他学生都不去了,扫盲班只能停办。但奶奶一直坚持自学。我上小学后,奶奶还经常让我教她认字。她有几样学字的宝贝:石板,石笔,两本字典。后来她能基本看懂报纸。

奶奶18岁结婚,生育了7个孩子,其中一个流产,一个没钱看病幼年夭折,一个养不起送人。奶奶告诉我这些时,我还小,并不理解那是怎样的痛。

奶奶为人善良,帮助邻里是常事。大铃去做公务员时,奶奶嘱咐“要一碗水端平”。

奶奶爱玩华容道,九连环等智力游戏,也非常爱看《祖国各地》,《世界各地》,《动物世界》等电视节目,但是没有旅游过。我上大学时,曾想带奶奶去北京玩,但是没有成行,成了永远的遗憾。

奶奶操劳了一辈子家务。她曾经对我说,自己哪儿都没去过,什么事都没做,白活了一辈子。奶奶,你一生平凡,但是我不会忘记,忘不了你做的家常饭,忘不了你讲的老照片故事,忘不了你锲而不舍地学字,忘不了你佝偻的背影……奶奶,想念你啊

奶奶信佛,附上我画的荷花和大铃写的诗:
听说,您去得安详
此刻,必在佛乐悠扬中
紧随飞天的舞带 开眼于佛国的完美
想来——那里可以解脱绵延的病苦,
没有众多人力不及的无奈。

愿您在笑得超凡脱俗之后
从田田的莲叶中拈得最幽香的花
花瓣上镌刻着最喜欢的经文
永是被光明的点拨 不间断地彻悟
眼口心耳都是隽永馨柔

我们想起您的时候,
定是温善恭俭的美好句语
都是顽强不息的坚韧意志
愿这样的每一回
您都正微笑着俯视我们
无忧无虑地 散花香世来
[......]

2009年3月11日星期三

Mayavi2 用户手册2 安装


内容来自Mayavi2的中文文档项目。本篇文档的源文件在这里。欢迎感兴趣的朋友加入


章节概要

本章详细介绍各种安装和编译 Mayavi 的方法。

如果你已经可以运行 Mayavi ,请略过此部分。

最新的安装指南可以在 Mayavi2 的 wiki 页面找到。下面将给出通用的安装过程以及可以找到更多信息的地方。

安装准备好的发布

Windows: 在 Window 中,安装 Mayavi 的最好方式是安装一个完整的 Python 发行版,例如 EPD 或者 Pythonxy。注意,Pythonxy 有一个特殊的下载,提供 Mayavi 和所依赖的软件包的完整安装程序,比 EPD 和完整的 Pythonxy 小很多。
MacOSX: MacOSX中也有完整的 Python 发行版,EPD_ (包括 Mayavi)。除非你真的喜欢复杂的编译过程,这是安装 Mayavi 的最好方式。
Ubuntu 或 Debian: Mayavi 在 Debian 和 Ubuntu 中有打好的软件包。另外,对于 Ubuntu 的稳定版,在这里可以找到最新的 Mayavi 的发行包: https://launchpad.net/~gael-varoquaux/+archive。实验性的 Debian 包在这里:http://newpeople.debian.org/~varun/。
RedHat EL3 和 EL4: 对于 RHEL3 和 4,有完整的 Python 发行版 EPD (包含 Mayavi)。

手动安装的前提条件

如果你没有使用准备就绪的完整的科学计算 Python 发布,需要满足 Mayavi 的条件。

Mayavi 至少需要下面的软件包:

  • VTK >= 4.4 (5.x 最佳)

  • numpy >= 1.0.1

  • setuptools (用于安装和建立egg)

  • Traits >= 3.0 (Traits`,`TraitsGUITraitsBackendWXTraitsBackendQt)

下面的要求是可选的,但是强烈建议安装,特别是初次使用 Mayavi 时:

可以通过几种方式安装需要的软件包。

  • Windows 和 MacOSX: 即使你想从源码安装,最好仍是安装一个上面提到的发布。注意:在Windows中,EPD_ 带了一个编译器 (mingw),用来编译Mayavia。

  • Linux:大部分 Linux 发行版都有上述软件包的二进制安装程序。例如, 在 Debian 或者 Ubuntu 中,需要安装 python-vtkpython-wxgtk2.6python-setuptoolspython-numpypython-configobj。 更多关于特定发行版以及如何满足其安装要求的信息可以在这里找到:

    https://svn.enthought.com/enthought/wiki/Install

  • Mac OS X:关于此平台的最有效信息在这里 IntelMacPython25

下面将说明安装 TVTKTraits 和 Mayavi 的几种方法。

自己动手:Python 软件包:Egg

首先确认已满足必需条件,例如已经安装下面的软件包:

更多细节在前一节中。

Mayavi2 是 Enthought 工具套件(ETS)的一部分。它作为 ETS 的一部分而分发 ,所以 ETS 的二进制包和源码包包括 Mayavi2。Mayavi 的发布总是伴随着 ETS 的发布。你可以选择安装整个 ETS 或仅安装 Mayavi2。

ETS 被组织为几个不同 Python 包。这些包被分发为 Python Egg。Python egg 相当成熟,包含对其它 egg 的依赖关系。 因此它们很快成为分发 Python 包的标准。

使用 ETS egg 主要有两种方法。

  1. 第一种,也是最容易的方法,是使用特定平台上的预编译包。下面会给出 更详细的说明。

  2. 第二种是从源码 tarball 包建立 egg。如果你有正确的编译环境,这也是很 容易的方法。

要安装 egg,首先确认已满足必要条件,然后如下所示生成和安装 egg:

 $ easy_install "Mayavi[app]"

这个命令将下载、生成和安装所有需要的 ETS 相关模块,它们都是 Mayavi 所需的 ETS 最新发布版。如果你碰到问题,请查看此页 Enthought Install

在安装中一个常见的问题来源是系统中存在下列软件包的旧版 本:traits,mayavi,envisage 或 tvtk。在安装 Mayavi 的新版本前首先确认 已经清除了 site-packages。另一个经常遇到的问题可能是生成系统的错 误,显示为“sandbox violation”。这种情况下,多试几次上面的下载和安装命令 会有用。

在此背景下,请看下面的说明:

  • Enthought Install 讲述如何用 egg 安装 ETS。请首先查看此页,它含 有在各种平台上使用预编译的 egg 进行安装的信息,包括解决依赖关系。

在 Windows 中使用 egg 循序渐进安装说明

如果你不想在 Windows 中安装准备好的发行版,下面的说明(由 Guillaume Duclaux 提供)将指导你通过必要的步骤配置 Mayavi 运行的 Windows 环 境。

  1. 安装 Python 2.5。把 “C:\Python25;” 添加到系统路径里。

  2. 安装 Mingw32。使用 http://www.mingw.org/ 的下载部分的 MinGW5.1.4 安 装程序。把 “C:\MinGW\bin;” 添加到系统路径里。

  3. 创建文件 “c:\documents and settings\USERNAME\pydistutils.cfg” (这里 的USERNAME是登录名),内容如下:

     [build]
    compiler=mingw32
  4. 建立新的环境变量 HOME,并设置其值为: 'c:\docume~1\USERNAME;' (这里的 USERNAME 是登录用户名)

  5. 下载安装 Setuptools(0.6c9 二进制包),添加系统路径“C:\Python25\Scripts;”

  6. 安装 VTK 5.2(使用 Charl P. Botha 博士的 Windows 二进制包, http://cpbotha.net/2008/09/23/python-25-enabled-vtk-52-windows-binaries/)

    • 解压缩此目录中的内容“C:\Program Files\VTK5.2_cpbotha”

    • 添加系统路径“C:\Program Files\VTK5.2_cpbotha\bin;”

    • 创建新系统变量 PYTHONPATH 并设其值为“C:\Program Files\VTK5.2_cpbotha\lib\site-packages;”

7. 安装 Numpy (1.2.1 版的二进制包可以从这里下载 http://numpy.scipy.org/ )

  1. 安装 wxPython (2.8 版的二进制包可以从这里下载 http://www.wxpython.org/ )

  2. 在命令行(cmd.exe)运行:

     easy_install Sphinx EnvisageCore EnvisagePlugins configobj
  3. 最后,在命令行(cmd.exe)运行:

     easy_install Mayavi[app]

最前沿:SVN

如果你想获得最新的 Mayavi 开发版,我们推荐从 SVN 检出源码。Mayavi 依赖于几 个属于 ETS 的软件包。开发中的 Mayavi 非常有可能依赖于一些还未发布的组件的特性。所以一次检出所有 Mayavi 递进依赖的 ETS 项目是非常方便的。为了方便执行此操作,Dave Peterson 创建了一个软件包 ETSProjectTools。首先安装此软件包,即可检出任何与 ETS 有关的软件仓库。下面是如何获得最新 的开发源码。

  1. 按照下面的步骤安装 ETSProjectTools :

     $ svn co https://svn.enthought.com/svn/enthought/ETSProjectTools/trunk \
    ETSProjectTools
    $ cd ETSProjectTools
    $ python setup.py install

    这样会有一个很有用的脚本 ets。关于此工具的详细信息和选项,请查看 ETSProjectTools 的 wiki 页面。

  2. 为了获得 Mayavi 的源码和所有依赖的包,运行下列下面的命令:

     $ ets co "Mayavi[app]"

    此命令将查找最新的 mayavi,解析 ETS 的依赖关系,检出相关的源码。如果想要某个特定版本的 Mayavi,运行如下命令:

     $ ets co "Mayavi[app]==3.0.1"

    如果想得到整个 ETS,运这样的命令(示例):

     $ ets co "ets==3.0.2"

    此命令将从 SVN 检出所有相关的源码。请耐心等待,这要花一些时间。关于 ets 工具的更多选项,请看此页面 ETSProjectTools

  3. 一旦检出源码,就可以执行下面的命令:

     $ ets develop

    此命令将通过对每个软件包执行 setup.py develop 命令而安装所有检出的源码。

  4. 或者,你可能想从源码建立二进制 egg。ets bdist 命令可以像下面这样用来建立 egg (这里我们假设 ets co 将源码检出到 ets-3.0.3):

     $ cd ets-3.0.3
    $ ets bdist

    上面的命令将建立所有 egg 并放到 dist 子目录中。运行 ets bdist -h 可以获得更多 bdist 的选项。可以通过下面的命令安装Mayavi 的开发 egg 和依赖软件的 egg:

     $ easy_install -f dist "Mayavi[app]"

    或者,如果你希望通过 setup.py develop 只安装 Mayavi,而其它的保持为二进制 egg,可以执行下面的命令:

     $ cd Mayavi_x.y.z
    $ python setup.py develop -f ../dist

    上面的命令将从 egg 获得各种依赖关系。

现在你已经安装了最新版 Mayavi,并可以使用了。

测试你的安装

测试安装是否正确的最简单方法是像下面这样运行 mayavi2 应用程序:

 mayavi2

如下可以获得关于此命令更多的帮助信息:

 mayavi2 -h

mayavi2 是 mayavi 的应用程序。在一些平台上,如 win32,你需要双击 Python2X\Scripts 目录中的 mayavi2.exe 程序。请确认这个目录在系统路径中。

Note

Mayavi 有其它多种使用方式,但是 mayavi2 应用程序是最简单的开始方式。

如果你有 mayavi 的 tarball 源码包,或者从 SVN 仓库检出了源码,可以运行 enthought.mayavi*/examples 里的例子,这里有大量的例子演示各种特性。在子目录 enthought.mayavi*/tests 中有测试程序。

解决问题

如果你在安装过程中遇到问题,可以在此页 getting-help 获得如何查询信息和使用邮件列表的详细信息。

[......]

2009年2月28日星期六

看世界,不用眼睛

生活总是充满了可能性,奇迹,惊喜——那位用蔬菜做乐器的哥们令人赞叹,生活可以如此有趣;而失明的 Ben 则给人以鼓舞,生活的可能性超乎想象。

Ben 三岁时失去双眼,现在他可以靠反射的声音感知周围的环境,类似海豚、蝙蝠那样(它们是通过超声波,但Ben的听觉范围与普通人一样),“看见”附近的大楼,汽车、障碍物等等,他可以滑旱冰、投篮,骑车,甚至在车上做杂技动作。

他的妈妈 Aquanetta Gordon 谈到,由于癌症,不得不在眼睛和生命之间抉择:
“My Choice was, you know, to, remove the eyes (我的选择是,你知道,是,是摘除眼睛)”

手术后他们有这样的对话:
“Mum, I can't see any more, any more (妈妈,我再也看不见了,再也看不见了)”
“Yes, baby,you can see, with your hands...nose...ears,baby, you can still see (不,孩子,你可以,可以用手看见...用鼻子...用耳朵,你仍然能看见) ...”
这位母亲总是给 Ben 信心,鼓励,她从不在孩子面前哭泣,从不让他知道妈妈为他难过。在视频的前半段,她还提到
“Ben knows that nothing is impossible for him (Ben 知道,对他没有什么是不可能的)”
这是对片名的最好注解——这段视频属于系列片“Extraordinary People (非凡之人)”




视频的后面4段在这里
[Part 2] http://www.youtube.com/watch?v=G1QaCe... (10:37)
[Part 3] http://www.youtube.com/watch?v=ikpNZO... (10:20)
[Part 4] http://www.youtube.com/watch?v=3Px-aP... (10:34)
[Part 5] http://www.youtube.com/watch?v=MNkJ1d... (05:12)
[......]

用蔬菜做乐器

记得小时候有本杂志,有个栏目叫“大千世界”,讲述自然界的奇闻轶事。现在看来,编辑的眼界还是小了点。自然界的奇观固然无可比拟,人的想象力、创造力也无奇不有啊。下面视频的主角是位日本先生,用蔬菜做乐器,令人捧腹




下面则是他用白萝卜吹“My Grandfather's Clock”,演奏得有板有眼。


[......]

2009年2月25日星期三

给大铃的生日礼物


祝大铃生日快乐!

改来改去,越看越不像,最后本着没功劳也有苦劳的想法,收工传过去,大铃乐了,“80岁预言啊”。至少博得一笑,呵呵。功力不够啊,看看下面的视频就更理解那句话了:“人和人咋就差距那么大呢?”

最后,请欣赏性感老男人的歌:“Happy Birthday Darling”


[......]

feedburner出错:Google's poor planning on Feedburner

今天收到下面这封信,由于google在合并feedburner用户时,计划失误,出现同名的情况,而我属于倒霉的那个,订阅地址被修改了。难道就没有其他更好的解决办法吗?使用不同的域名不可以吗?

不知道google的改名程序用什么策略。和我同名的是EuroScience.Net,比我的园子老,2005年就成立了,可能订阅数也多,但是去年12月后就没有更新了。

信的最后说,作为补偿,Google会送一份礼物。希望他们不要糊弄我受伤的心,呼呼。

那个用于填写地址的spreadsheet倒很有意思,可以用来做调查,什么时候试试——好嘛,刚被修理了,不知回头,反而越陷越深。

自动给出的名字太不堪,改为下面这个。希望已经订阅的朋友能看到此帖,烦请修改地址:
http://feeds2.feedburner.com/esnblg

如果原先订阅的是如下地址,可以继续使用,不过建议还是修改为上面的,这样以后万一园子搬家,你不必做任何修改就能继续接收订阅。当然前提是google不再出昏招。
http://zesn.blogspot.com/feeds/posts/default


Hello,

First of all, thank you for using FeedBurner and AdSense for feeds. We really appreciate every minute you spend using our services.

We also know you've come to depend on us to deliver your feed reliably without ever requiring you to change anything (unless you want to). Unfortunately, due some poor planning on Google's part since you created your new feed, http://feeds2.feedburner.com/esn, we have been forced to change its address to http://feeds2.feedburner.com/esn2.

WHY DID THIS HAPPEN?
We have worked hard to ensure that any feed that already exists on feeds.feedburner.com cannot be created in the new Google-hosted feeds environment, feeds2.feedburner.com. However, a few feeds, including your own, did end up with the same address on both sides. We've used an automatic conflict-resolution system to determine which feed's address to change, and the choice ended up being this feed.

WHAT NEXT?
This change in feed address means you may need to make a few other changes in order to make sure your subscribers can still subscribe to your content.

1. If you:
- use the WordPress FeedSmith plugin with a WordPress self-hosted blog;
- OR have a "Post Feed Redirect URL" setting in a Blogger account;
- OR have applied any redirects with an Apache web server you use to host your site;

...you will need to change the redirection address to http://feeds2.feedburner.com/esn2.

2. If you use FeedBurner's feed to email service, you will need to regenerate your email subscription form in the Email Subscriptions section of the Publicize tab at http://feedburner.google.com and re-insert it on your website.

3. If you use FeedBurner's subscription chicklets, or use FeedBurner's FeedCount icon, you will also need to get new code for those images on the Publicize tab at http://feedburner.google.com and re-insert it on your website.

4. Any other links to your feed, posted on your website, will need to be changed to http://feeds2.feedburner.com/esn2


If these steps are not completed, it is likely your subscribers will see the wrong content.

SINCE THIS IS TOTALLY OUR MISTAKE...
Along with our profuse apologies for allowing this to even happen in the first place, we would like to send you some free stuff. Please fill out the following form and provide your postal mail address:

https://spreadsheets.google.com/viewform?formkey=cDdzVUM...0Yk1DUEE6MA

We'll get a package off to you shortly!

Warm regards,

The FeedBurner and AdSense for feeds teams
[......]

2009年2月23日星期一

Mayavi2 用户手册1 概览


这个帖子说明有朋友在寻找Mayavi的信息时访问了本园子,现在就贴一篇关于Mayavi2的介绍,希望他们能再次光临。

内容来自Mayavi2的中文文档项目。去年10月底就建立了此项目,由于时间比较紧,进展极其缓慢。Mayavi2的文档采用reStructuredText格式(本篇文档的源文件在这里),使用Sphinx将rst文件及图片等转换为完整的文档网站。帖子中没有给出的链接,正是指向其它文档页面。我会陆续贴上来。也欢迎感兴趣的朋友加入

章节摘要

本章简要介绍什么是 Mayavi,并告诉你在这本手册的什么地方可以找到与你的情况相关的信息。

简介

Mayavi2 致力于简便的3D数据可视化功能。主要通过下列方式实现:

  • 可选的富用户界面,包括可与可视化中的所有数据和对象交互的对话框。

  • 简洁的 Python 脚本界面,包括即用型3D可视化功能,与 Matlab 或 matplotlib (使用 mlab ), 或面向对象的编程界面。

  • 不需要 VTK 即可使用其强大功能。

另外,Mayavi2 努力成为可重用的工具,即以各种方式嵌入你的库程序或应用软件里,或与 Envisage 应用程序创建框架(application-building framework)共同组建特定领域的工具。

Mayavi2 是什么?

Mayavi2 是一个通用的、跨平台 3D 科学数据可视化工具。其特点如下:

  • 标量、向量、张量的 2D 和 3D 的可视化。

  • 可方便地使用Python编写脚本。

  • 可方便地修改源代码,模块和数据过滤器进行扩展。

  • 可读入多种数据格式:VTK (legacy 和 XML), PLOT3D 等。

  • 保存可视化操作。

  • 以多种图形格式保存渲染的可视化结果。

  • 通过 mlab 为快速科学绘图提供方便的功能。 (参考 simple-scripting-with-mlab).

不像它的前身 Mayavi1,Mayavi2 重新设计为具有脚步和可扩展功能。Mayavi2 提供 ``mayavi2``应用程序,其本身可独立使用。而且,Mayavi2 可以像 matplotlib 或 gnuplot 那样在脚本中用作绘图引擎,就像其它应用程序中用作交互可视化的库程序。它也可以用作 Envisage 的插件,天然地嵌入基于 Envisage 的应用程序中。

技术细节

Mayavi2 提供通用的可视化引擎,像VTK那样基于管道架构。Mayavi2 也提供 Envisage 插件,用于2D/3D科学数据可视化。Mayavi2 使用 Enthought 工具包(ETS),如 Traits, TVTK 和 Envisage_,下面是它的一部分特点:

  • Pythonic API 利用了 Traits 的所有优势。

  • Mayavi 可以天然地、透明地与 numpy 矩阵一起使用。(得益于 TVTK 的使用)

  • 由于使用了 MVC 设计,比 Mayavi-1 更容易编写脚本。

  • 方便地通过加入资源、组件、模块和数据过滤器进行扩展。

  • 提供 Envisage 插件,这意味着:

    • 在 Mayavi 中很容易地使用其他 Envisage 插件。例如,Mayavi 提供嵌入的 Python 命令行解释器。这是一个 Envisage 插件,在 Mayavi 中只需要一行代码。

    • 在基于 Envisage 的应用程序中容易地使用 Mayavi。因此所有基于 Envisage 的应用程序可以轻松使用 Mayavi 插件,编写脚本以可视化数据。

  • 基于 wxPython/Qt4 的 GUI(得益于 Traits,PyFace 和 Envisage). 很重要的一点是 Mayavi 的源程序中没有直接使用 wxPython 或 Qt4。

  • 非侵入式、重用型设计。不用基于 wxPython 或 Qt4 的图形界面,也可以使用 Mayavi。

Note

下面所有章节均假设你已经有工作正常的 Mayavi 。下载和安装 Mayavi,请参考下一章 installation.

将 Mayavi 作为独立程序或库程序?

用户主要有三种方法使用 Mayavi :

  1. 图形方式使用 mayavi2 应用程序.更多相关信息请参考 :ref:using-the-mayavi-application`。

  2. 在简单的 Python 脚本中用作绘图引擎. 脚本 API mlab 提供了在批处理脚本中使用 Mayavi 的简单方式,更多相关 信息请参考 :ref:`simple-scripting-with-mlab`。

  3. 在 Python 中编写 Mayavi 应用脚本。Mayavi 应用程序本身提供了强大的 通用脚本 API,可以适应你的需求。

    1. 可在使用 mayavi2 应用程序时编写脚本自动完成任务及扩展 Mayavi。

    2. 可在自己的基于 Python 的应用中编写 Mayavi 脚本。

    3. 可使用 Envisage 或其他各种方式将 Mayavi 嵌入你的应用中。

    更多详细信息请参考 :ref:`advanced-scripting-with-mayavi`。

场景(Scenes)、数据源和可视化模块:管道模块

Mayavi 使用类似 VTK 的管道(pipeline)结构。对用户而言,可以简化为如下层次。

  • 数据被载入 Mayavi 后存储在数据源中(使用文件或由脚本产生)。可以打开任意多个数据文件或数据对象。数据源是富对象,描述了数据但没有指定如何可视化。

  • 这些数据可以使用过滤器处理(可选),使用可视化模块进行可视化操作。这些过滤器和模块可以通过用户界面的 `Visualize 菜单项或上下文菜单访问到,或在编写 Mayavi 脚本将其实例化为 Python 对象。

    区别数据源、数据容器和可视化工具的原因是由于有很多不同的查看数据方式。例如下面的图片都是相同数据通过应用不同的模块而获得的。



  • 所有对象属于一个 场景 -- 这是 3D 可视化中的一片区域。在交互应用程序中,新的场景可以通过使用菜单 File->New->VTK Scene 来创建。

将数据载入 Mayavi

Mayavi 是一个科学数据可视化工具。准备数据的主要方式有两个:

  1. 将数据存入其所支持的数据文件格式,例如 VTK legacy 或 VTK XML 文件等。更多关于 VTK 的信息请参考 VTK 文件格式 VTK file formats。这些文件在交互应用程序中可以通过菜单载入。

  2. 通过 numpy 数组或其它序列产生 TVTK 数据集(dataset)。最容易的方式是使用脚本API, 例如 `mlab`。 (参看这一段 creating data sources with mlab ,或者 3D 绘图函数: mlab_plotting_functions).

另外,如果你希望通过建立 VTK 数据结构或文件以获得更深入的理解,请参考此章节关于数据集的一般信息 data-structures-used-by-mayavi。

[......]

2009年2月19日星期四

在 Hiweed2RC3 安装emacs23 CSV

下载最新CSV源码
esn@esn-laptop:~/Tools$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/cvsroot/emacs co emacs


安装图形包,以显示图片
esn@esn-laptop:~/Tools$ sudo aptitude install libxpm-dev libpng-dev libz-dev libjpeg-dev libtiff-dev libgif-dev


安装其他相关的包
esn@esn-laptop:~/Tools$ sudo aptitude install emacs21 xserver-xorg-dev xorg-dev libncurses5 libncurses5-dev libidl-dev libgtk2.0-dev m17n-db m17n-lib-bin libotf-dev


建立独立的编译目录
esn@esn-laptop:~/Tools$ mkdir emacs_bld
esn@esn-laptop:~/Tools/$ cd emacs_bld/


编译
esn@esn-laptop:~/Tools/emacs_bld$ ../emacs/configure
esn@esn-laptop:~/Tools/emacs_bld$ make


测试
esn@esn-laptop:~/Tools/emacs_bld$ src/emacs


一切正常,就可以安装了
esn@esn-laptop:~/Tools/emacs_bld$ sudo make install


参考:
http://forum.ubuntu.org.cn/viewtopic.php?f=68&t=18274
http://www.emacswiki.org/cgi-bin/emacs-en/EmacsFromCVS
http://cvs.savannah.gnu.org/viewvc/emacs/emacs/INSTALL?revision=1.86.2.24&view=markup

更新:发现X window下速度非常慢,终端下正常,不知问题在哪里。安装了emacs-snapshot,问题依旧。头痛啊。。。
[......]

2009年2月17日星期二

解决linux音频独占的问题

是否遇到过以下情况:浏览了一个有flash的网页之后,所有的程序都没有声音了;或者使用mplayer时,stardict无法朗读单词。这并不是声卡驱动有问题,而是没有配置多音频造成的问题。按照下面的步骤修改 /etc/pulse/default.pa 可解决问题。原文在这里

找到:
#load-module module-alsa-sink ...
改为
load-module module-alsa-sink device=dmix

找到:
load-module module-suspend-on-idle
改为
#load-module module-suspend-on-idle

另外:
找到: (解决录音问题,如skype和audacity)
load-module module-hal-detect
改为:
#load-module module-hal-detect

这样,通过使用dmix,PulseAudio就不会霸占整个audio系统。PulseAudio将成为alsa的其中一个MixChannel。然后,ALSA和PulseAudio便能很好地共存。


然后注销重新登录即可。
[......]

2009年2月14日星期六

情人节快乐


天各一方,涂鸦送给我的爱人,情人节快乐!

注:非原创,以前看到过类似的意思,硬着头皮称为“再创”吧。
[......]

2009年2月9日星期一

终于下雪了


正月十五雪打灯——老家终于下雪了!

今年冬天晋冀鲁豫陕甘皖严重干旱,全国43%的小麦产区受灾,370万人、185万头大牲畜饮水吃紧。金融危机还在盘旋呼啸,天气又作怪,而对抗旱灾最重要的农田水利设施问题重重,天灾人祸不单行。

苍天怜悯,雪人难道只能是童话人物。。。。。。
[......]

2009年2月7日星期六

贺岁篇 4 牛头,年贺状,暖宝,四字熟语


不好意思,快到正月十五了,还在贺岁。其实早有内容了,只是没空发图。对,此文主要是图(点击图片可看大图)。先发个牛头打头炮——新年那天的面包。

言归正传,上回说到日本不过春节,但把公历新年称为“正月”,很多习俗也与中国过年类似,比如送贺卡,称为“年贺状”。不过很有意思的是,日本的邮局集中在新年那一天投递年贺状。新年那天商店通常有一些优惠活动,比如销售福袋。下面照片中是一位会说中文的日本朋友送的年贺状。旁边是新年那天在附近超市买的暖宝,都装在前面的那个小袋里。是不是觉得装不下?嗯,起初我也不相信。那是商店的一个新年优惠活动,自助装袋,一袋500日元。由于别人都在抢着挑选福袋,而我不解风情,一大早去买圆珠笔。负责那片的服务员非常热情地招呼我这位新年1号顾客,不好冷落他的热情,从不使用暖宝的我开始装袋。服务员两次拦住要去交钱的我,一再强调,装得越多,今年的好运就越多。刚交完钱,就天女散花了,希望今年的好运也多得爆棚啊。

年贺状和自助装袋的暖宝

下面是写有“谨贺新年”的贺岁包装和普通包装的盒装牛奶。上面的红色日文意思是“恭请2009年一如既往垂青惠顾”。“谨贺新年”属于日本的“四字熟语”。四字熟语,类似于成语,而且很多都来源于中国成语。有个关于四字熟语的笑话:对于下面的填空问题,(_)肉(_)食,很多日本人,尤其是年轻人,会不假思索的填为“烧肉定食”。不过,知不知道“弱肉强食”这个词,与娴熟运用此原理是两码事——这是题外话了,也不符合和谐的主旋律,背离贺岁的基调,打住。

谨贺新年

虽然现在日语中外来语泛滥成灾,但是汉字水平仍然是文化品味的重要标志,例如汉字检定考试非常热门,甚至出了相关的腐败问题。下面是一些祝福许愿的四字熟语,看看能否找到对应的成语。都是搞技术的人写的,丑了点,凑合看吧,至少都没写错字。

四字熟语

最后看看当今日本首相麻生先生的新年贺词。发现问题了吗?竟然写错一个字!倒也符合他的语文水平。由于他一再出演白字先生,以至于日本最近流行的教育孩子的话变为:“你再这样下去,就要变成首相了”。为了不成为首相,汉字解读类书热销,一时“洛阳纸贵”。

白字先生
[......]

2009年2月5日星期四

Google的网站管理员工具

不是特意给google做广告,只是有些结果很有趣。下面是网站管理员工具官方文档的一段说明:
Google 网站管理员工具提供免费的简易方法,让您的网站更容易被 Google 抓取。该工具可显示 Google 对您网站的意见,帮助您诊断问题并让您与我们共享信息来提高您网站的展示率。
这里介绍一下其中的“热门搜索查询”项目,可以查看最能让自己网站出现的前 20 条查询,以及这些常见的 20 条查询在每次搜索中的百分比。下面是本博客在2009年1月的统计结果:

# % 查询 排名
1 21% "让 大地 重光" 孔庆东 32
2 12% mayavi mayavi2 区别 1
3 9% colinux python 2
4 6% spe python3 1
5 6% canon dcim 5
6 6% gg mayavi2 5
7 6% python traceback 信息 7
8 6% hiweed 1.0 8
9 6% python "之 不如 空" 9
10 6% "塩 の 街" 下载 13
11 6% "孔 庆 东" "狼心狗肺 的 不是 春 晚" 18
12 6% "塩 の 街" 21

这里和自己的博客内容有确定关系的关键词有pythonspecolinuxmayavi2hiweed 1.0,其他的就有些不明不白。
  • 最奇怪的是,排名最高的搜索(及第11位)与我的博客内容竟然没有一点关系!虽然我每天都看孔教授的博客,但我至今没有写过一篇关于他的文章,仅仅在侧栏给出其博客地址及自动给出最新文章的链接。沾了名人的光,面上实在无光,那就挖掘一下此信息的价值吧
    • “32”这个数字意义不大,应该是最近的排名。默认情况下这已经是第四页了,在转载如此流行的情况下,即使原文被删除了,也早就在第一页找到文章内容了,后面的搜索结果根本没人看。搜索结果的排名应该是动态的,估计当初我的文章应该比较靠前,毕竟咱是与东博书院同步给出链接。现在转载的多了,自然就靠后了。而且,如果现在还在搜诉结果中出现,就是100%垃圾信息了,我的博客上早就自动更新为孔大侠最新博文了。建议google重新计算排名(即这里的32),按照点击时的排名算平均值,或者这样如果代价太大,就直接去掉这个排名,反正没有用处
    • 这短暂时间里有限的网友点击竟促成我的搜索引擎带来的最大流量,可想而知google给我的贡献之小。
  • 第一位的让我失望,第二位的则更让搜索的朋友失望了。我有一篇讲如何解决安装mayavi2中出现问题的帖子,但没有涉及mayavi不同版本间的区别。而且我的页面竟然出现在搜索结果的第一项,这是好事,但是看看google给出的结果:
  • 共有 4 项符合mayavi mayavi2 区别的查询结果,以下是第 1 - 4 项 (搜索用时 0.68 秒)

    您是不是要找: miyavi mayavi2 区别

    搜索结果

    1. ESN的菜园: 感冒进行时

      ... 感冒进行时 · Howto:连接Canon powershot A70 和linux · ► 十一月 (2). 安装bash-completion · 安装最新的Mayavi2 ... Mayavi image of the week ...
      zesn.blogspot.com/2008/12/blog-post.html - 126k - 网页快照 - 类似网页
    2. ESN的菜园: 学习心肺复苏术

      十一月 (2). 安装bash-completion · 安装最新的Mayavi2 ... Mayavi image of the fortnight · New Scientist - Online News · Global warming could suffocate the sea ...
      zesn.blogspot.com/2008/12/blog-post_21.html - 124k - 网页快照 - 类似网页
      zesn.blogspot.com站内的其它相关信息 »
    3. PageSize -

      5691 SzerkesztésiSegédlet; 5687 SciPy2007; 5683 Cookbook/MayaVi/ ... 4592 ArndBaecker/MayaVi2; 4570 康宝莱--宝莱; 4569 HelpOnActions; 4556 HelpOnActions/ ...
      www.scipy.org/PageSize - 363k - 网页快照 - 类似网页
    4. TitelListe -

      Cookbook/MayaVi/ScriptingMayavi2 Cookbook/MayaVi/ScriptingMayavi2/BasicModules [7 attachments] ..... 无人化打包 无线路由、AP、网桥之区别详解篇 无锡房产网 ...
      www.scipy.org/Wiki/TitelListe - 207k - 网页快照 - 类似网页
      www.scipy.org站内的其它相关信息 »

    为了提供最相关的结果,我们省略了与已显示的 4 个类似的条目。
    根据您的意愿,可将省略的结果纳入搜索范围后再重新搜索

    您是不是要找: miyavi mayavi2 区别

    什么“感冒进行时”,“心肺复苏术”,真是让人苦笑不得。而真正有一点点关系的页面安装最新的 Mayavi2却没有作为结果出现,是我的RSS feed有问题吗?点过来的网友一定很失望,信息没用啊。其实,他们还算运气好的,能在侧栏里找到那篇文章,而2月份再点过来的网友就什么都找不到了,因为侧栏的存档只显示当前月的文章题目列表,之前时间只有月份的链接。这里,对google提点建议,现在博客的页面结构多是一个或多个侧栏,其中的内容有不少是动态的,最好能分析出页面结构,在侧栏搜索结果的时效性上多加注意,对于“随机文章”条目就更不能用在搜索结果中了。呵呵,班门弄斧了。
  • 在排名第六的gg mayavi2中,现在我的页面在搜索结果中上升到第一(2009年2月6日),不过,说实话,我确实不知道gg与mayavi2有什么关系,我只是把google缩写为gg,当然也可为“狗狗”。
  • 第9、10、12就根本摸不着头脑了。
看了上面的信息,明白自己的博客为什么没人看了——作为第一大流量来源的搜索引擎大部分文不对题,驴子耳朵,多长两撇。不过这个统计结果还是很有用的,例如可以考虑多写写mayavi2,spe,colinux,相关的中文资料如此之少;也可写写对孔大侠的评论,不枉网友到此一游。

另外,也推荐使用 Google Analytics (分析)


[......]