Qizhen's profileLabVIEWPhotosBlogListsMore Tools Help

LabVIEW

LabVIEW工程师的生活

计数器

Qizhen Ruan

文章安内容分类

Search

Loading...
O Troupe of little vagrants of the world, leave your footprints in my words.
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.
Qizhen Ruanwrote:
Jie Wang:

我没有使用过MatLab,所以不太好对他俩进行比较。LabVIEW的mathscript遵循的语法与MatLab应当是同一个,所以它俩写出来的程序应该是相同的。
LabVIEW主要还是在工控测试领域中应用,其它行业的工具包的确没有MatLab多。mathscript只是LabVIEW以下部分,我觉得LabVIEW最具特色的还是它的图形化编程方法。
5 days ago
Jie Wangwrote:
What do you think about LabView when comparing with MatLab? LabView seems a good one for signal processing and measurement, and instrument simulation. LabView uses the same mathscripts from MatLab. MatLab has a huge amount of various toolboxs from engineering, bioinformatics to finance. Personally, I think LabView is still specialized in instruments. It would be a very long way if NI wants it to be generalized.
June 25
Jie Wangwrote:
Hello, come here when googling LabView in Chinese. You make a very good site! I am a professor of Computer Science. However, this Summer I am teaching LabView for Mechanical Engineering students. I have to learn it and teach it at the same time. Sad I hope I will get some help from reading your blog. Thank you.
June 25
Yuan Pengwrote:
阮老师,您好!我在调用visa函数做串口通信时,在没有接外部设备,而只是把电脑上的两个串口连起来,相当与从一个端口发送出去而从另外一个端口接收,怎就通信不了?是不是labview做的串口只针对和PCI-232这些设备通信?
这个我试过 一台PC作为发送端,负责串口的写数据,另一台作为接收端,负责读数据,安装了VISA后用串口函数很容易实现的。
June 14
Qizhen Ruanwrote:
我没试过把两台电脑连在一起,可能串口有服务端和客户端区分的,如果两台电脑相连,需要把一台电脑改为客户端。
June 13
June 13
莉莉 古wrote:
阮老师,您好!我在调用visa函数做串口通信时,在没有接外部设备,而只是把电脑上的两个串口连起来,相当与从一个端口发送出去而从另外一个端口接收,怎就通信不了?是不是labview做的串口只针对和PCI-232这些设备通信?
June 12
俊杰wrote:
控件说明上面也是这么说的,但在labview中我还是不太会实现。您看这样做可以吗:在程序面板创建一个数组,然后用索引数组引出一个内容连至lpDataBuffer,这样对吗?我像看看数组传递的例子,请问阮老师哪里可以找到?谢谢!
June 12
Qizhen Ruanwrote:
在LabVIEW中没有指针的概念。你可以像VB一样,先造一个数组,然后把数组传递给它。
June 9
俊杰wrote:
阮老师,您好,向您请教一个问题。我在用labview调用ocx控件进行对数据采集器的编程,数据采集结束后要用一个函数进行读取采样结果,控件的说明是这样的:

long ReadSamplResult(long* lpDataBuffer, long size):读取采样结果

lpDataBuffer:采样结果存放指针,在C语言中,可以传递一个指针给该参数,在VB中,需要先声明一个数组,然后将该数组的第一个值作为参数传递给该参数。

Size:传递的数组大小。如果该值大于仪器内部的RAM的大小,则超过RAM部分的值都会是0,如果小余RAM的设定值,则该函数不能读取完,只能读取size的大小。剩下的部分不能再次读入了。

返回值:返回最后读取到的数据个数,读取失败返回0或者FALSE

我在labview中该如何实现呢?谢谢了

June 8
Boone Luwrote:
欢迎阮老师来QQ群:13267790指点。
May 8
Boone Luwrote:
哈哈哈,有点偷梁换柱的意思。
谢谢!
May 8
Qizhen Ruanwrote:
Boone Lu,使用LabVIEW制作的安装包可能没有这个功能。你可以改用专业的安装包制作软件来制作安装包。
如果不能使用专业安装包软件,也可以这样:
假设你程序运行时需要用到 foo.access 这个文件,在安装时,给它改个名字,比如安装的文件叫做access.bak。当程序运行时,先检查是否有 foo.access 这个文件。如果有,则继续运行;如果没有,则把 access.bak 这个文件拷贝一份,命名为 foo.access。
May 7
Boone Luwrote:
阮老师,你好!我在安装时遇到个问题:我的项目里包含了一个ACCESS的文件,用来保存测试记录的,当我重新安装时数据库文件会被覆盖掉,有什么解决办法吗?
陆迅海
May 6
Qizhen Ruanwrote:
运行过程中不可以改变控件方向。
实现你说的功能比较简单:使用一个控制控件,需要让它显示数据时,把值赋给控件的局部变量就可以了。
May 5
莉莉 古wrote:
阮老师,你好,我最近学习Labview遇到了一个问题想向你请教.Labview在程序运行时是不可以把一个控制控件改为显示控件的,但我现在想让一个控件既可作为显示控件又可作为控制控件,有什么办法啊?我看了Labview自带的例子,可以做一个这样的Xcontrol控件,除了这个方法还有更好的方法没有啊?
Apr. 20
莉莉 古wrote:
你好,最近看了你写的关于Labview文章,让我这个Labview初学者受益匪浅,很是期待你的书早日出版。
Apr. 18
lingzhiwrote:
哦,谢谢你的指点。
Apr. 10
Qizhen Ruanwrote:
不过,你可以把这XControl的数据类型定义为某个类,需要处理的各种数据类型全部封装成它的子类。这样,这个XControl就可以处理多种不同的类数据类型了。
Apr. 10
Qizhen Ruanwrote:
不可以,只能使用一种数据类型。
Apr. 10
lingzhiwrote:
Qizhen,你好。目前我所知道的用xcontrol实现的组件接口是单输入的,我想问一下,组件接口可以是不同类型的多输入吗?如果可以,是否有案例?
Apr. 10
Qizhen Ruanwrote:
具体时间我也不能确定,不过还要等几个月吧。
Apr. 8
Hongyan Wuwrote:
你好呀,请问你的书什么时候出版呢?很想看看呢~~
Apr. 7
Qizhen Ruanwrote:
Hi wen, I'm sorry, but I can not check your coursework.  I don't have enough time and I don't familiar with your course.  I think you'd better ask your tutor to check it.
Mar. 11
Qizhen Ruanwrote:
数据采集肯定需要使用硬件的。
LabVIEW只能实现数据采集后,对数据的处理工作。比如分析、显示等。
Mar. 11
Photo 1 of 218

Express VI 2 - 工作原理

普通的子VI有前面板和程序框图。子VI前面板上的控件定义了这个子VI所使用的参数;程序框图上的代码实现了这个子VI的功能。在某个VI程序框图上,双击一个普通子VI的图标,可以打开子VI的前面板;按住Ctrl键再双击子VI的图标可以同时打开它的程序框图。

Express VI 的行为与普通子VI有所不同:在程序框图上双击一个Express VI的图标,弹出的是一个配置对话框。应用软件中的大量普通子VI都是有程序员自己开发的,因此,他需要打开子VI的前面板与程序框图进行编辑。而Express VI通常是LabVIEW或LabVIEW工具包自带的,不需要普通程序员去创建或修改一个Express VI,因此程序员一般也不需要看到它内部的代码。一个Express VI 通常会集成多种功能,因此程序员在使用它时,需要方便的打开Express VI 的配置对话框,根据自己的需要,选则适合的配置参数。

普通的子VI的程序框图等被保存在一个.vi文件中,而你是看不到程序中使用到的某个Express VI的.vi文件的。对于普通子VI来说,不论在应用程序的哪个地方调用它,或是哪个应用程序来调用它,所执行的代码都是相同的,就是保存在.vi文件中的程序框图。对于Express VI来说,却不是这样。程序员可以修改Express VI配置对话框中的内容,配置一旦被改变,Express VI的执行代码也会发生变化。因此,在不同的地方调用同一个Express VI运行的代码却可能是不同的。这也就决定了Express VI的程序框不不能被保存在单一的一个.vi文件中。实际上,Express VI的程序框图是被保存在调用它的VI的.vi文件中的。比如说某个VI名为A,它被保存在A.vi中。A调用了一个Express VI,B。则B的程序框图也被保存在A.vi中。只不过咱们没办法直接看到B的程序框图。

有些Express VI是允许用户查看其程序框图的(有些不提供这一功能)。在一个 Express VI 的右键菜单中选择“打开前面板”,LabVIEW会把Express VI转换成不可配置的普通子VI,这样它就有了可以打开的前面板和程序框图。

以“从动态数据转换”Express VI 为例(函数选板“Express –> 信号操作 –> 从动态数据转换”)。在某一VI的程序框图上放置两个“从动态数据转换”Express VI,分别命名为“数据转换1”和“数据转换2” 。对“数据转换1”Express VI的配置是“结果数据类型”为“一维波形数组”,如图1所示。

image图1:“数据转换1”Express VI 的配置对话框

把Express VI 转换为普通VI并常看其程序框图,如图2所示。

image
图2:打开Express VI的前面板,然后打开程序款图

这个Express VI 的程序框图由一个简单的子VI构成,如图3所示

image
图3:“数据转换1”的程序框图

对“数据转换2”Express VI的配置是“结果数据类型”为“二维标量数据”;标量数据类型为“布尔”,如图4所示。

image
图4:“数据转换2” Express VI 的配置对话框

使用同样方法打开“数据转换2” Express VI 的程序框图,可以看到,它与“数据转换1” 的程序框图完全不同,因为它们实际上需要完成不同的功能。

image
图5:“数据转换2”的程序框图

Express VI 1 - 什么是 Express VI

LabVIEW自带的子VI中有一些VI的图标看起来与普通子VI的不太一样,这就是Express VI。大部分Express VI可以在函数选板“Express”中找到。

从函数选板上直接就可以看出哪些VI是Express VI,它们的共同特点是图标周围有一圈浅蓝色的边框。如图1中的“时间延迟”和“已用时间”VI。

image 
图1:函数选板上的Express VI

Express VI在使用时,也与普通VI有些不同。Express VI通常都配有一个配置对话框(图 2),用于设定Express VI运行时用到的一些数据,因而不必再在程序框图上输入数据。这就大大简化了程序框图。Express VI的功能通常都比一般的VI强大,某些常见的简单程序,譬如基本的数据采集显示程序,仅需使用几个Express VI就可以实现。加之使用它编程也比较简单,所以得名“Express VI(中文直译快捷VI)”。

image image 
图2:“时间延迟”Express VI和它的对话框

Express VI的功能强大、使用便捷,但付出的代价是效率较低。应用程序的功能可能比较简单,但是它所调用的Express VI中却包含了大量应用程序根本用不到的功能。这部分功能既占用内存空间,又会影响程序的运行速度。所以,对于效率要求较高的程序,不适合使用Express VI。

拼图游戏

大鸟送了我一套纸质拼图游戏,于是这两天有个好玩具玩。尽管已经二十年没玩这东西了,不过我当建筑工人的天赋还在,不用看图纸就把所有的零件都搭起来了。实际上,现在的拼图玩具跟我小时候玩的那种已经完全不同了。现在的拼图材质大为提高,印刷也很精美,更重要的是不再需要胶水了,所有的零件只通过插接就可以牢固的拼装在一起。

这就是我搭起来的国会山:
 image

放在地板上看:
image

转个角度看:
image

玩具还附带了三个小模型,大风车:
image

帝国大厦:
image

悉尼港大桥:
image

内容补充和注释

在本书完稿后,我仍然会坚持记录一些使用LabVIEW的经验。这些文章可以作为对书中内容的补充。此外,如果书中某些段落解释的不够清晰或详细,我也会在此针对那些薄弱环节追加一些文字。

针对书中章节 简要说明 详文链接
2.4.5 属性节点 介绍控件的闪烁属性 控件的闪烁属性
编写代码时的小技巧 鼠标配合Ctrl键的妙用
     
     
     
     
     
     
     
     

返回《我和LabVIEW》主页

鼠标配合Ctrl键的妙用

LabVIEW中有众多的快捷键,这些快捷键可以大大加快编程速度。不过记住这些快捷键本身也是个挑战,比如说我吧,我只能记住几个最常用的快捷键,比如 Ctrl+C,Ctrl+V 等。我编程序主要还是依赖鼠标,单一个鼠标应付各种工作还是显得有些吃力的,编程速度可能没有熟练使用快捷键那么迅速。编的程序多了,不经意间就发现了一些鼠标配合Ctrl键的妙用,于是就把最有用的几种用法记录下来了。

复制对象

在前面板或程序框图上选中一个或多个对象(控件、接线端、函数等),然后拖动鼠标到另一个位置。这时如果按下Ctrl键,光标的箭头旁就会出现一个加号,表示这时的操作变成的复制,而不再是移动对象了。先松开鼠标,再松开Ctrl键,就会在光标的新位置上放置一个选中对象的副本。这种复制对象的方法比使用 Ctrl+C,Ctrl+V 还便捷。这个方法还可以复制一些使用 Ctrl+C,Ctrl+V 无法复制的对象,比如对控件的属性节点和调用节点。

image
图1:按下Ctrl键,用鼠标拖动一个对象

image
图2:生成了被拖动对象的一个副本

先按下Ctrl键,再按鼠标选中一个对象,然后拖动它,也可复制这个对象。先按下Shift键,再按鼠标选中一个对象,然后拖动它,也有特定的功能。它可以使得对象只在完全水平或者垂直的方向上移动一个对象。如果同时按下Ctrl和Shift键,再按鼠标选中一个对象,然后拖动它,就是把前两项功能合用:在当前对象的正上下或左右方复制一份新对象,这有利于直接编写出整洁的代码。

拓展程序框图空间

有时候编着编着程序,就发现,需要在当前程序框图的某处插入一些额外的代码,而这里已经挤满的节点,在没有额外空间容纳新节点了。这时,可以按下Ctrl键,再在需要放置新代码的地方按下鼠标,拖动鼠标拉出一块矩形区域。松开鼠标,程序框图会自动把代码向周围拖动,空出这块区域用于放置新代码。

比如图3中的程序,需要在程序最中央位置,“Play One”常量的左侧腾出一块控件放置新代码。这时,按下Ctrl键,再在这一位置点击鼠标左键,然后拖动,拉出合适大小的一个方块。松开鼠标,这个方块的位置就空出来了,原来的代码被挤到旁边去了(图4)。

image
图3:按下Ctrl键,用鼠标在需要插入代码的地方拖出一个方块

image
图4:腾出空间后的程序框图

直接打开子VI的程序框图

在程序框图上,鼠标双击一个子VI,会打开这个VI的前面板。实际上,对于子VI来说,我们通常不关心它的前面板,而是需要查看它的程序框图。如果按住Ctrl键,再双击程序框图上的一个子VI,就可以直接打开这个子VI的程序框图了。

调换函数输入参数的连线

图5中程序有一个加法函数,它的两个输入数据线相连。但是这两条线出现了交叉,如果能交换一下它们的位置,程序会显得整洁不少。这时,先把鼠标移动到加法函数的输入参数接线端上,再按下Ctrl键,光标会变成一个倒着的“&”符号的形状。松开鼠标,这两个输入端的连线就会交换位置,交换位置后的程序如图6所示。这个方法只对有两个输入参数的函数有效。

image
图5:准备交换加法函数两个输入数据连线的位置

image
图6:交换位置后的程序框图

翻看选择结构、事件结构、层叠式顺序结构的页面

以选择结构为例:它每次只能显示一个页面,也就是一个条件处理分支。如果需要查看下一分支或上一分支的代码,可以把光标移动到条件结构内部的空白处,按下Ctrl键,然后滚动鼠标滚轮。每滚一下,条件结构就会切换显示一页。

《我和LabVIEW》内容介绍

本书特点

近几年,随着LabVIEW在中国的普及,市面上与之相关的书籍也越来越多。不过它们多以介绍LabVIEW的函数、VI的功能为主。比如,列举一个VI的功能为何,它的参数有哪些,表示什么含义等。而本书则更加侧重于介绍如何解决问题,比如针对一个具体的编程问题,本书会介绍LabVIEW中有哪些可以实现的方法,各自优缺点是什么。

本书的内容都是我在学习和使用LabVIEW过程中积累的经验。受写作时间和个人能力的限制,本书并没有覆盖LabVIEW所有细节内容和功能,也没有详细解释书中所使用到的LabVIEW自带VI或函数的参数设置及用法。不过这些内容在LabVIEW的帮助文档中均有详细介绍,所以在阅读本书时,若对某些具体的函数有疑问,可以打开LabVIEW,查阅相关的帮助文档。

内容选取

在写作本书前,我陆续在博客上发表了多篇关于LabVIEW编程的文章。本书大约有三分之一的内容直接选取了博客上的内容。在把它们编辑成书的过程中,我又对它们进行了重新编辑和扩充。博客文章在介绍某些知识点时,面向的是是有经验的LabVIEW程序员,所以讲解并不详细。在本书的写作过程中,考虑到LabVIEW初学者也可能参考本书,所以对知识点的介绍更加细致。书中其余三分之二的内容则是完全新写的。

在具体选择书中内容时,主要偏重如下几部分:

LabVIEW中最常用的功能。本书所介绍的内容都是LabVIEW编程者最经常使用到的功能。随着LabVIEW版本的更新,其功能也越来越多,有一些功能是极少被使用到的。这些偏僻的功能对于大多数读者帮助不大,所以本书也未做讲解。况且,目前市场上已经有过多本比较详细介绍LabVIEW控件、函数使用的中文书籍,本书就没有一一详细介绍这方面的内容。

LabVIEW学习过程中的常见问题及易犯的错误。我曾经作为LabVIEW高级课程的讲师,给客户讲授过LabVIEW的课程,也经常在博客、论坛或通过Email解答过LabVIEW使用者们的一些疑问,在公司内部,也经常检查和指导新员工改进他们编写的LabVIEW程序。在这一过程中,我发现有些问题在LabVIEW初学者中出现的频率相当高。指正这些通病可能会使更多读者收益,所以本书有相当部分篇幅用来讲解这方面的内容。

我个人所擅长的领域。为了保证本书的质量,本书所介绍的内容都属于我比较了解的范畴。而我平时接触不多、没有太多实际经验的部分,则不是本书涉及的范围。

尽量不重复LabVIEW帮助文档中的内容。LabVIEW的帮助文档应当是最全面、最权威的LabVIEW工具书,它记载了LabVIEW中每一个函数、VI的使用方法,每一个对话框上的内容……对于这些可以在LabVIEW帮助文档中直接查阅到的内容,本书就不再重复描述了。那些LabVIEW帮助文档中没有涉及到的内容,如LabVIEW程序设计的原理、原则,如何选取最适合当前情景的编程方法,编程时的注意事项,LabVIEW的学习方法等等,才是本书着重介绍的内容。

列举实际案例。在介绍LabVIEW的功能和用法时,书中会配合编程实例进行讲解。

LabVIEW版本

书中介绍的LabVIEW功能和编程方法,是以LabVIEW 8.6专业版为范本的。这是在本书写作时LabVIEW的最新版本,也将是今后一段时间内,使用最为广泛的LabVIEW版本。本书侧重介绍的是那些最为常用的功能,所以书中绝大部分内容同样适用于更早版本的LabVIEW。

当本书出版时,也许更新版的LabVIEW已经面世了。但是,LabVIEW的编程思想不会有任何改变,并且新版本的普及也需要较长一段时间。所以即便读者使用的是新版本的LabVIEW,同样可以使用本书作为学习LabVIEW的参考书。

如果新版本的LabVIEW有较大改进,导致本书介绍的内容不再适用时,我将会在个人博客中,及时更新,进行详细的解说。

插图和示例

为本书编写的示例和以及在书中截取的大部分插图是在LabVIEW 8.6中文版下编写和截取的。但受条件限制,有小部分示例和插图是在旧版本的LabVIEW,或英文版的LabVIEW中制作的。书中部分插图在Windows XP系统下截取,部分在Windows Vista系统下截取。因此,书中不同截图窗口风格可能略有不同。

受篇幅的限制,本书一般只收录一些关键设置和程序关键部分的截图。没有收录的程序框图,读者在学习本书时可以自己尝试编写,也可以直接下载本书的示例辅助学习。本书所用到的全部示例,包含插图中出现的VI,都可以从网上下载到,具体下载地址可参考我博客中的链接。

更正和注解

受本人水平所限,在编写此书的过程中难免会有疏忽和差错。在此,诚挚希望各位读者及时批评指正书中纰漏,也欢迎读者就书中内容进行讨论。对本书的任何意见和建议都可以直接发表在我的博客中。

本书出版之后,我会继续对其进行维护,包括修订错误、补充相关内容、回答读者疑问等。所有相关的更新也都会及时发布在我的博客中。

相关链接:
搜索书中内容(以后添加)
本书详细目录(以后添加)
《我和LabVIEW》主页

控件的闪烁属性

今天在MSN群上看到有人讨论这个属性,于是自己也研究了一下。以前还真没用过这个属性。

设置了闪烁属性后,程序在运行时,控件的颜色会不断变化。比如说一个文本框控件,它的底色会不断的在白色和红色之间切换。控件不停闪烁可以引其别人注意,在程序中,正好可以利用控件的这一特性进行报警。界面上,如果某一控件的值超出了预定范围,让它闪烁起来就可以提醒用户注意了。

image
图1:当旋钮的值超过50时,设置其闪烁

image
图2:当旋钮闪烁时,它的指示标志会不断切换颜色

 image
图3:在LabVIEW选项对话框中的前面板页面上,可以设置闪烁的频率;在颜色页面上可以设置闪烁的颜色

下载示例:http://bbs.gsdzone.net/showtopic-482.aspx

LabVIEW论坛、博客和群

如果在学习过程中遇到问题,可以考虑通过互联网来寻求帮助。把相关的问题张贴在相关的论坛或高手博客上,便可得到别的的帮助。

论坛

论坛网址 论坛名称 注释
http://forums.ni.com/
http://forums.ni.com/ni/board?board.id=2170
NI官方论坛
NI官方中文论坛
这个论坛活跃程度很高,并且时常有NI的技术支持和研发工程师来回答问题。论坛有专门的中文讨论区,但如果自己英文尚可,最好是去英文讨论区提问。英文讨论区人气更旺,更容易获得帮助。
http://forums.lavag.org/ LAVA
(LabVIEW Advanced Virtual Architects)
这是官方之外最大的LabVIEW社区,也是寻求帮助的好地方。该网站没有官方背景,讨论起来可以更自由些,但这里只能用英文讨论。
http://www.vihome.com.cn/bbs/ 测量与测试技术交流社区 这是目前最活跃的中文LabVIEW论坛。
http://www.gsdzone.net/community.aspx 图形化设计LabVIEW社区 新开张不久,但是得到了NI官方的大力支持。应该非常有潜力
http://www.cpubbs.com/bbs/forum-4-1.html CPUBBS论坛  
http://bbs.avrvi.com/thread.php?fid-8.html AVR与虚拟仪器  
http://forum.simwe.com/forum-25-1.html 仿真科技论坛  

 

MSN和QQ群

群地址 群名 注释
msngroup7773@hotmail.com LabVIEW MSN 群 把它加为MSN好友即可。在它上面讨论问题最大的好处是可以即时得到回应。在群上发言,所有在线用户都会即时收到信息。

 

博客

(注释内容引自“虚拟仪器技术文摘”博客

博客网址 博客名称 注释

http://ruanqizhen.spaces.live.com/

   
http://labview7i.blog.sohu.com/   第一次查有关LabVIEW的博客就查到了这里,以前是在ednchina的,现在搬到了sohu;对于LabVIEW的感情很深,去年的NI Days上也有幸见到了真人,非常和蔼的一个LabVIEW老“粉丝”,里面的内容可能会觉得没有阮大侠的那么技术,却更有人情味。
http://tm.eefocus.com/myspace/blog/indexx.php?bid=43958   国内某LabVIEW大牛的技术博客,里面对于LabVIEW编程技巧有很多很细致深入的探索。
     
     

 

返回《我和LabVIEW》主页

初读《大话设计模式》

昨天把新买的《大话设计模式》翻了一下,发现它在介绍面向对象编程时居然使用了和我同样的例子。我在《我和LabVIEW》中使用的一个例子是编写程序让一只小狗叫一声,再让一只小鸡叫一声;《大话设计模式》是让小狗和小猫叫一声,而它又注释说这个例子改变自《编程的奥秘》一书。看来大家的想法经常是会有类似的。这本书的作者也是先在博客上发文章,受到大家欢迎后才整理成书的。
初看《大话设计模式》这本书,觉得他写的还是相当不错的。我以前买过两本设计模式方面的书,不过它们都是理论性太强,看起来太累,所以都只看了一点就放弃了。新买的这本书一是语言比较通俗,二是讲解方式增加了不少娱乐性,读起来没那么枯燥了,这次终于有希望把设计模式看完了。

《一生的理财功课》读后感

  这绝对算不上一本优秀的书,所以没几天我就把它翻看完了。书中主要是在介绍一些基本的经济知识,没什么作者的创新思想。不过看完一本书能想明白一两个问题,也算是没白看了。我看完这本书,唯一想明白了的一个问题就是“通货膨胀对富人的影响大还是对穷人的影响大?”。
  我以前只粗略的想过:通货膨胀就是钱贬值,富人比穷人钱多,所以通货膨胀对富人更不利。不过读完这本书,重新考虑一番,才发现通货膨胀其实是劫贫济富。现实生活中是这样的:穷人稍微有点钱就去存款,然后银行把穷人的钱再拿去借给富人。所以,现金和存款主要是属于穷人的,一旦通货膨胀,穷人会更穷。单算现金的话,富人通常是欠债的,一旦通货膨胀,他们就可以少还债了。富人的资产主要体现在其拥有的房地产、股票、实业等方面,这些资产并不会受通货膨胀影响而贬值。

  我上次去书城的时候,正好看到这本《一生的理财功课》摆在一摞书最上面,所以就顺手买来了。最近业余时间充裕了,所以今天又逛了一趟书城,买了两本书来看,都是专业相关的。一本《算法导论》,一本《大话设计模式》。可是不知道有没有毅力把它们都看完Embarrassed

《我和LabVIEW》的写作过程

  我刚踏上工作岗位不久,父母就鼓励我把日常工作中的经验教训和心得随时记录成文。一来可以总结经验教训,二来可以与人分享。当时我总觉得自己经验有限、文思笨拙,又加之比较懒惰,所以迟迟没有行动。

  大约三年前,公司几个同事鼓动我一起写书,赚点外快。我们对当时市面上的LabVIEW书籍以及它们的销售情况都进行了分析。结论是,撰写LabVIEW方面的书籍,并不会取得很好的经济收益。所以几个同事渐渐对写书失去了兴趣。不过,对于我来说,最大的吸引力在于写书带来的成就感。因此我并没有马上放弃这个念头,开始认真研究写书的可能性。
  真正动笔尝试写书的时候,我才发现自己写作的进度太慢。我需要一边构思内容,一边编程调试,一边写作。每星期也只能写一千字左右,照这样进行下去,不知猴年马月才可拼凑成册。
  通过这次尝试,我清楚地意识到了自己的不足。于是改为从短片文章写起,先锻炼自己的写作能力,同时积累素材。我开始不断地把自己平时的一些想法记录下来,并发表在个人博客上。这之后,又有几次同事或者出版商和我联系讨论写书的事项,而我都觉得自己准备还不充分,没有参与。

  2008年夏,北航出版社的胡晓柏老师,给我展示了他们的一个出版计划。我觉得他们的计划和设计非常好,如果能参与其中也不错。而我太太此时也积极鼓励我,于是我又动了出书的念头。虽说当时写博客只有两年多,积累的文章还不算丰富,但我觉得第一次写书也不必过分追求完美,不需要一下子就写部大著作出来,先把一部分经验总结出版,也是个不错的开端。
  写博客时,可以随兴而写,想到什么话题,就写什么话题。写书虽然不要求面面俱到,但至少也应该前后连贯。所以,虽然这本书的名字还继续沿用了我博客上LabVIEW文章系列的名字《我和LabVIEW》,但其大部分内容却是全新的。
这次写书的难度和工作量大大超过了以往写博客。由于只能利用个人的业余时间进行写作,我不得不放弃了大量看电视、打游戏、上网吹牛聊天的时间。跟出版社签订了合同后的头三个月,我干劲十足,一口气写完了全书近一半的章节。但是随后,由于赴国外出差,比较忙碌,加上工作任务繁重,渐渐感到心力疲惫,写作进程一度十分缓慢。在接下来的两个月,我只写完了一章,眼看就赶不上交稿日期了。但想到我出书的心愿终于可以达成,我于是重新打起精神,再接再厉,又用了三个月时间,完成了书中其余章节。又反复检查和修改了两个月,最终定稿。

写书过程中大事记:

返回《我和LabVIEW》主页

《第十三楼》观后感

最近虽然工作时间还是一样忙,不过下班总算不用再写书了,所以一下子轻松不少。终于可以安安心心的看几部电影了。电影中我最喜欢看的是科幻电影,我喜最欣赏想象力丰富的故事,科幻电影通常都充满各种奇思妙想。昨天看了一部影片叫做《The Thirteenth Floor》的电影,中文翻译为《异次元骇客》或《第十三楼》。

电影中的男主角是一家软件公司(公司在一栋大楼的第13层)的技术骨干,跟着老板一起开发了一套游戏软件。游戏玩家可以身临其境的进入到1937年的世界中,游戏中每个人物都和真实世界的一模一样:有感情、有思想。公司老板是第一个开始尝试此游戏的人。他在不断往返于真实和虚拟的世界的过程中,发现了一个不应被他知道的秘密。他深知此秘密事关重大,自己可能因此而被灭口,于是在虚拟的1937世界中,给男主角留下了一封信。之后,老板果然被杀,男主角为了找到真凶,进入了虚拟的1937世界。

俺们软件行业有句著名的话:“Software has bugs.”。电影中主角和他老板编写的这套虚拟游戏也同样充斥着各种漏洞,最糟糕的是其中一个漏洞被1937虚拟世界中的一个酒店职员发现了。这位店员是个聪明人,并且与进入游戏的老板有过接触。经过一番对漏洞的调查和研究,店员得出结论:自己是被虚拟出来的,他周围的一切都是虚幻的。哪一天,真实世界中的计算机电源插头一拔,他就会和自己的世界一起消失。虚拟世界的店员在知道真相后非常痛苦,对这一虚拟世界的制造者充满了怨恨。当他发现了进入虚拟世界的男主角后,就和他角争吵起来,甚至打算杀死男主角。

“世界是虚拟的,虚拟世界中的人物也可以发现真相”,这就是老板留给男主角的信息。死里逃生的男主角在返回自己的世界后,开始循着老板留下的提示去调查,终于发现了这个“真实”世界的漏洞。他痛苦的意识到,自己所处的世界也是被虚拟出来的,不过是另一世界玩家的一场游戏。
什么是幸福?幸福就是无知!

《生活随笔》目录

重新整理了插图

弄了三天,终于把书中所有的图片都转存成了TIFF格式的文件,正好顺便统计了一下书中图片的数量。书中共有692幅图片,其中623幅是带标签标注的图片。不带标签的图片或者是尺寸非常小,就直接嵌在文字中间;或者是图片嵌在表格中,而表格是有标签的。

《我和LabVIEW》的写作过程

重新截取书中插图

本以为交稿就万事大吉了,结果才没轻松几天,就又要忙了。今天收到编辑的信说书稿中图片分辨率太低,需要重新截取。虽然打开word文档看那些插图还蛮清楚的,但放在排版软件中就非常模糊了。估计是因为常用的排版软件和word文档的兼容性不好,在格式转换时,图片质量损失严重。我现在只好再把所有插图重新存为TIFF-无压缩RGB格式的文件。
我书中插图量特别大,至少四五百幅。天啊!这下有的忙了。
把编辑给我的建议分享一下,也许以后大家写书用得上:
“拷屏键然后粘贴到Word中的插图,采用的PNG格式。虽然在Word中,可以很清楚的看到这个图片,在打印机上打印也是清楚的,但用到出版社和后面的出片,就很容易产生图片模糊的情况。出版社一般使用的都是方正书版、方正飞腾这样的专业排版软件,与Word这样的字处理软件有很大不同。最好是保存图片的时候选择“TIFF文件”,且“子格式”是“未压缩的RGB”。TIFF格式是图片质量最好的一种格式,且可以跨平台使用,是出版上的首选格式。”

《我和LabVIEW》的写作过程

《我和LabVIEW - 一位NI工程师的十年编程经验》

本书尚未出版,预期八月底面世。这里是本书相关的链接(正在建设中)。