科普一下人工智能

最近我看了一位科普作家关于人工智能(AI)的几期视频,并查看了视频下的留言。发现该作家和许多观众都对目前的 AI 技术存在一些严重的误解。因此,我想写一篇科普文章,尽可能消除读者对 AI 的误解。

这篇文章专为 AI 领域之外的读者而写,我会尽量使用最简单的语言来解释和回答一些我认为最容易被大众所误解的问题,例如:

  • AI 的行为是否连其设计者都不能理解?
  • AI 是否能表现出超出设计行为?
  • AI 是否具有创造力?
  • AI 是否能产生自我意识?
  • AI 为什么最近才能力爆发?

AI 发展历史

首先,让我们简单回顾一下 AI 的历史。AI 的提出已经有八十年了。在过去的 80 年中,AI 曾几度引发热潮,人们都热衷于畅想 AI 的美好未来,也曾担心 AI 会取代人类。每一次热潮都没有持续太久,人们很快就会发现 AI 的局限性,AI 的话题也会再次淡出人们的视野。

虽然我对 AI 早有兴趣,但正式开始系统学习 AI 还是在 2012 年左右。当时,已经不再流行 AI 这个概念,取而代之的是“机器学习”(ML)。理论上来说,机器学习是人工智能的一种实现方法,实际上,我估计主要是因为当时 AI 正处于冷静期,不那么受追捧,而 ML 显得更为时尚、引人注目。

机器学习包含很多算法,例如朴素贝叶斯、决策树等等。你可能没有听说过这些算法,但你一定听说过神经网络。尽管现在神经网络占据了主导地位,但在我学习 AI 那会,它并没有受到多数专家的青睐。这主要是因为神经网络也是一种有些历史的算法了,但在最初几十年的发展历程中,并没有表现出特别优异的性能。在图像领域中,它无法与支持向量机相媲美;在自然语言处理领域中,它又不如隐马尔可夫模型。当时很多人认为神经网络可能没有什么前途了。

然而,神经网络最终还是崛起了。现在所有引人注目的 AI 项目都是基于神经网络的,因此有必要简要介绍一下神经网络的工作原理。在下文中提到 AI 时,默认指代的就是神经网络模型。

神经网络的原理

我们可以把需要解决的问题抽象为一个函数。比如,一个用来计算乘法的函数,它的输入是两个数,x 和 y,输出是另一个数;用于聊天的函数,它的输入是一些文字,输出是另一些文字;用于绘图的函数,输入是一些文字,输出是一张图片。

有些函数是非常简单的,比如乘法函数,根本用不着神经网路,有更高效简洁的方法可以解决。神经网络主要应用于那些特别复杂的问题,比如通过文字绘图的函数,人们没办法直接为这类函数提炼出一个简单直观的数学公式。但问题还是可以解决:如果读者听说过“级数”这个概念,可能已经知道了,任何一个函数,都可以被看作是很多很多其它函数的叠加;如果没听说过也不要紧,只要记住这个结论就可以了:如果遇到一个极其复杂的函数,我们可以把它拆解成许许多多简单的小函数,再让这些小函数的结果叠加在一起,恰好可以实现复杂函数的功能。

假设存在一个复杂的函数,输入 x 会产生输出 y,可以将其分解为多个简单函数的和,形如:

Y = (w0*x + b0) + (w1*x + b1) + (w2*x + b2) + …….. + (wn*x + bn)

其中每个 (w*x + b) 的部分就是神经网络中的一个节点。而 w0 ~ wn 和 b0 ~ bn 则是神经网络中的参数。这些参数的值不是人为设定的,而是通过神经网络的训练过程去找到的。实际应用中的神经网络会比上述例子更加复杂,比如每个节点的函数会是更复杂一点的非线性函数,会有更多的层次等,但原理依然相同。

为了找到最适合的参数值,首先需要为模型构建一个训练集,例如,对于生成图片的模型,每个训练条目包含两部分:输入的文字和输出的图片。模型首先使用输入的文字作为输入,使用当前的参数生成一张图片,然后将其与目标图片进行比较,提取差异。根据差异的大小,调整网络中的每个参数,使其产生更接近目标图片的结果。不断重复这一过程,直到模型产生的图片与目标图片相似为止。

这个过程可以看作是模拟数据集或拟合目标函数的过程。

AI 的行为是否连其设计者都不能理解?

当我训练好一个神经网络之后,我是否能够知道网络中每个参数的值呢?是的,只要想要,我就可以知道。从上文所述的模型训练过程可以看出,这是一个机械的数学计算过程。如果给定相同的初始值和训练数据,重复相同的训练过程,必然会得到相同的参数。但作为模型设计者,我实际上并不关心每个参数的具体值,因此我不会去查看每个参数的值。

这就造成了很多人对于神经网络的一个误解,他们会说:原来你都不知道神经网络里具体的数据啊,肯定更不知道每个参数的含义啦,你自己设计的神经网络你自己都理解不了,看来人工智能要摆脱人类控制了。

这种说法类似于对一个火箭设计者说:你连每个燃料分子燃烧的位置都不知道,你怎么能理解你设计的火箭呢?但实际上,设计火箭并不需要了解每个分子的情况,只要知道所有燃料作为一个整体能否提供足够的动力就可以了。同样的,神经网络的设计者也不需要,更不应该去纠结网络中每个参数的值,设计者应该去了解的是当所有参数作为一个整体时,能否拟合目标函数。

现在读者应该可以看出来了,所谓 AI 设计者不了解自己设计的 AI,纯粹是一种误解。其实,只要换位思考一下就知道这种误解的不合逻辑之处:读者自己是否理解 AI 的工作原理?如果理解不那么深刻,那么你能够设计出一个 AI 模型吗?如果你因为不完全了解 AI 而无法设计一个 AI 模型,又怎么能相信别人会在不了解 AI 的情况下就设计出了一个好用的 AI 模型呢?

AI 是否能表现出超出设计的行为?

神经网络的学习过程本质上是在尝试最大限度地拟合训练数据集,它通过不断调整网络中的参数来达到这个目的。然而,这也意味着神经网路被训练到极致,最多也就是完美得模仿了训练数据集。

上文用图片生成做过示例,再用文字生成为例讲解一下 AI 如何工作。大家可能觉得AI聊天写作文等功能挺神奇的,但实际上,文字的生成也可以被看作是一个函数:这个函数的输入是一些文字,输出是下一个要产生的字。

现在的大语言模型常常会使用网络上能够收集到的所有文章、对话作为训练集。这样,训练出的模型,就可以模仿网络上的文字。比如:把“我爱祖”三个子输入给训练好的 AI 模型,AI 模型由于在训练集中看到了大量“我爱祖国”这样的组合,于是就会输出一个“国”字。“我喜欢祖国”可能并不常见,但模型在训练集中会发现有大量的情况“喜欢”和“爱”这两个词是可以互换的。 所以,如果把“我喜欢祖”这四个字输入给模型,模型也会在这里输出一个“国”字。如果输入“小明:你喜欢祖冲之吗?AI:我喜欢祖”这几个字输入给模型,模型因为在大量的训练集中已经发现了,对话中的文字必须是上下文相关,所以会在这里输出一个“冲”字,再把“小明:你喜欢祖冲之吗?AI:我喜欢祖冲”几个字输入给模型,模型会再返回一个“之”字。

训练好的模型,可以写文章,可以解释法律、医学等问题,但无论它看上去多么令人惊叹,也只是在忠实的按照设计目标,去模仿网上的文章与对话。它无法超越设计者给它限定的范围。

同时这也可以解释为什么现在的大语言模型有时会一本正经的胡说八道:在遇到训练集中没有的问题时,它会提取一些最相关的内容进行拼凑,但它无法判断拼凑出来的东西是否正确。

AI 有没有创造力?

这要看你如何定义创造力了。一个 AI 在学习了猫头,狗身的照片之后,可以画出一张猫头狗身拼接在一起的照片。如果你觉得这算是创造力,那么AI确实具有了一定的创造力。

如果你觉得不算,只有 AI 画出了训练集中没有的东西才算创造,比如训练集中只有猫和狗,但模型却能画出一匹马。如果你这样定义创造力的话,那么 AI 没有创造力,AI 无法输出任何训练集中没有的东西,它最多只能把训练集中的内容进行整理拼接。

AI 能不能产生自我意识?

就目前AI的技术来说,AI 是绝不会产生自我意识的。目前训练 AI 的方法就是让 AI 去模拟训练集中的输入输出。我们可以脑洞一下,如果有一个 AI 模型突然就有自我意识了,训练程序让它画猫,它决定放飞自我,画了一只鸡。结果会怎样呢?结果是:因为它没有达到设计目标,这个模型被销毁了。

以目前的 AI 技术而言,AI 本质上与螺丝刀、扳手等工具没有什么区别,都是由人类设计和使用的工具:人类怎么操作它,它就怎么工作,除此之外无法做任何事情。任何人类不知道如何解决的问题,AI 也同样解决不了。比如,人类如果不知道如何证明黎曼猜想,AI 也无法自己证明。

总有人觉得 AI 参数这么多,结构这么复杂,说不定它自己突然灵光一现,就产生了自我意识呢?这个想法,就有点类似于,把组成生命的各种化学物质放到一个瓶子里,然后晃一晃瓶子,就指望里面的分子自己重新排列,构建一个生命体出来。我们有时候会有一些美好的愿望,希望自己并不了解的东西可以自发的产生魔法和奇迹。但是最终这些愿望基本都会落空。

为什么神经网络这么强大,却直到最近才功能爆发?

AI 最近爆火起来,是它在绘画,文字生成等领域都展现出了前所未有的好结果。那么为什么它之前没有,而现在突然就强大了呢?

早期神经网络主要是全链接神经网路,也就是网络中的每个神经节点都和下一层的所有神经节点相连。理论上,一层这样的神经网络就可以拟合任何函数,但在实际应用中,它始终面临着三个未能解决的问题:

  • 训练效率差,尤其是大型,多层神经网络,很多情况下根本无法训练。
  • 硬件不能提供足够的计算资源。要拟合复杂的问题,少量神经节点肯定是不够的,节点必然越多越好。
  • 缺少训练集,标注训练集是非常贵的。

近些年,以上几个问题都得到了实质性的改进。首先是算法和网络架构的创新解决了模型训练的问题。使用一些特殊的网络结构(如卷积网络、残差网络和注意力机制等)代替全链接网络,可以提高模型的训练效率和表现。这些结构可以构建上百层甚至更深的网络结构,“深度学习”由此得名。现在,那些最为知名的大型模型都是基于“变形金刚”这种链接结构构建的。

要解决更复杂的问题,必然需要更多的神经元。在硬件方面,GPU的出现,为神经网络提供了足够的计算资源。

人为标注的训练集依然十分昂贵,但是这些年互联网的蓬勃发展使得网络上的文字和图像内容极其丰富,这些内容都可以被用来做训练。

于是乎,解决了以上几个问题的 AI 开始了新一轮的大爆发。作为相关从业人员,我希望这一次的热度可以坚持更长的时间。

广告

在美国购物 – 电脑

    以前来美国基本都没给自己买什么的东西,不过这次买了一台笔记本电脑:)
    我原来使用的一台笔记本电脑已经用了五年多了,虽然最近升级了内存,也只能从事单个任务工作。想一边开着LabVIEW一边写文章,基本上是不能胜任了。打算买新电脑的念头也有几个月了,不过毕竟是笔大花销,一直没下决心买。这次来美国出差正好是个机会,美国有些电脑型号比国内便宜得多,可以买个便宜货了。

    如果不考虑价格,我最喜欢的是苹果电脑,外观漂亮、性能也高。唯一的问题是价格太贵,不适合咱这样的穷人。我这次看中了它的一个新产品,要1500美金。我在苹果专卖店里围着它转了好几圈,最后还是没舍得买。惠普笔记本也不错,我也是比较喜欢的。不过它的性价比也不高,我看中的几款都比较贵,所以也放弃了。据说宏基电脑是几个大厂商了性价比最高的,可惜我周围买了宏基电脑的人没一个说他好的。不但质量差,售后服务更差,所以宏基我也没敢买。
    综合考虑,我觉得比较让我满意的是戴尔的Latitude E6400。我对戴尔的印象非常好,我之前的笔记本是戴尔的Latitude D500。我用了它五年,期间带它去了不少地方,经常把它和行李一起摔来摔去。即便这样,它依然工作正常,从来没出过任何硬件毛病(戴尔家用机质量没这么好)。所以这次还打算买同一系列的电脑,就是质量比较稳定,性能和便携性平衡的那种电脑。
    不过最后我还是买了联想的ThinkPad T400,唯一的原因是配置类似的T400比Latitude E6400便宜了一百多美金。ThinkPad T系列笔记本的质量也有着不错的口碑,相信质量不会比Latitude差。这两个型号的电脑相比,Latitude E6400移动性比较好:全金属外壳、重量轻、更省电;ThinkPad T400性能更好一些:DDR3内存、双显卡。相比之下T400的优点对我更有吸引力,更何况它还便宜。所以我就买了联想的。
    ThinkPad T系列在中国价格相当的高,是公款和暴发户的象征,但是它在美国却便宜的离谱。看联想上个季度的财政报告,他在全世界都亏损,只有中国有大额盈利。看来他就是铁了心赚中国人的钱然后去救济全世界人民的。

    在网上买电脑比在店里要便宜得多,联想和戴尔都有直销,可以直接在他们的网站上配置购买自己的电脑。如果最求低价的话,可以在联想和戴尔的网上折扣店中购买,折扣店中主要是客户退还的电脑,比全新电脑可以便宜两三成。不过我还是有点担心它们的质量,没敢买折扣店里的东西。
    再有,为了买个好价钱,就要努力去找优惠券了。戴尔Latitud系列电脑的优惠券十分罕见,我找来找去找不到,所以放弃买它了。联想不论哪个系列的产品,都常常有优惠。10%的优惠是非常常见的,20%就比较少见了。20%的优惠比联想员工价还便宜,如果见到就可以不用犹豫直接下手了。联想和戴尔网上卖的电脑都有两个标价,一个是原价,一个是现价,比原价低个几百块钱。联想的优惠券是在现价上打折,而戴尔的是在原价上打折。所以戴尔的优惠券有时候看着挺诱人,达到30%,实际上还是没有联想的实惠。
    这次快到感恩节的时候,我就遇到了联想20%的优惠。可惜我在美国时间有限,我在那之前就已经下了订单了。网上买电脑的缺点就是比较慢,正常情况是下单两个星期后才能拿到电脑。好在我找的优惠也不错全部算下来,加上税共计960美金,合人民币6600。我配置电脑的经验是:不太容易升级的配件可以配置高一点,比如CPU,显示屏等,这样能延长电脑被淘汰的时间;很容易自己升级的配件,比如内存、硬盘什么的,可以选择最基础的配置,然后再自己去买配件升级,这样可以省一些钱。配置电脑的时候,我也到中国买电脑的网站去看了一下,和我同样配置的电脑在中国买行货要一万二三的样子,整贵了一倍啊。其它品牌的电脑几乎没有差价这么大的。
《生活随笔》目录

好一段时间没更新了

最近一直没有更新我的 blog,大家提的问题也都没仔细看过。
这一段时间有些私事比较忙的,不过现在好一些了。
另外现在回到家里还是上不了网,直接影响了我写 blog 的兴致。
我11月份的时候会搬家,搬家之后,我打算装上宽带网,以后上网就方便了。

发现一个新的搜索网站

    网站名叫“有道 Youdao”:http://www.yodao.com/
    它有两个比较有特色的搜索栏目。一个是博客搜索,在搜到相关博客同时,还会提供出博客的一些统计数据。
    比如这是本博客的统计数据:http://blog.yodao.com/search?q=url:http%3A%2F%2Fruanqizhen.spaces.live.com%2F&t=b&lq=labview&keyfrom=blog.blog

    另一个是海量辞典,做技术翻译比金山词霸更有用。我以前还写过一篇文章关于如何在网上搜索翻译的,本以为有了这个网站,那篇文章就过时了。但是刚才试了一下,这个海量辞典还不是非常智能,看来我的土办法还能再用上一阵子:)

    提到搜索,Google是老大,一般性的网页搜索可以不去考虑其它搜索引擎了。不过这也不表示其它搜索网站就没法活了。Google 也不是把所有方面都做到了最好。其它搜索网站,搞搞有特色的东西,在某些搜索功能上超过Google也很正常。

我回来啦

    好久没来更新了。前一段时间公司刚搬了家,我比以前要每天多花两小时在路上。作息时间一时调整不过来,业余的活动只好都停一停了。一个多月过去了,总算是有一点适应了。上个星期还买了自行车,骑车上班大约10公里左右的路程,单趟要花30~40分钟。不过这也比公交好,现在公司在张江集电港,公交极差。以前上班乘989,连续三四辆都挤不上车也是很正常的。现在至少不用跟别人去挤了。并且,有了自行车,可以下班后稍微晚走一会,就有时间写blog了。
    明天开始,看留言,回答问题:) 然后再写新文章。
 

最近没时间更新了

有些日子没来更新 blog 了,给我的留言也没有处理。最近不论是工作还是私事都特别忙(公司在忙着搬家,我在忙着结婚:),看样子整个二月份都没啥心情写东西了。
等忙完了这段再说吧。

回答一个关于 IVI 仪器驱动程序的问题

    今天在我的 blog 上看到了一个关于 IVI 的问题,在这里回答一下。

问题
    “阮先生,你好,我看过你写的关于IVI的文章,写得很详细,有个问题想请教一下,我现在是用LabVIEW的,CVI没有用过,我应该也可以用LabVIEW来开发自己的IVI仪器驱动吧?目前我已经安装了IVI Compliance Package (ICP) 2.5,但是如果要使用自己开发的IVI驱动能出现在MAX上面,是否还需要一些Toolset?比如IVI Installer Creator and the IVI Specific Driver Test Suite之类的?还是我可以用其他什么方法做到.好像那些Toolset不是免费的,我有没有方法可以尽量不用购买什么工具包就可以使用自己的IVI仪器驱动呢?谢谢!
    阮先生你好,我是问你IVI问题的那个人,我想到一个方法不知道能不能行得通,如果说我只是使用IVI驱动里某一类驱动程序(比如信号源)很简单的通用属性(比如只是使用到信号源的二个通用属性:频率和功率,全部信号源都支持这二个属性的设置),那我可不可以在NI的网站上下载某一型号信号源的IVI驱动(我手上有另外一种不同型号的信号源,但没有发现我手头上这个信号源的IVI驱动程序),然后安装这个IVI驱动,把其他特有的属性去掉,只留下共用的属性,然后用这个下载的IVI驱动来驱动我手头上这个信号源(假设二种信号源在设置频率和功率时所使用到的命令都是完全相同的,尽管它们的型号是不一样的)?不知道有没有把问题说清楚,还请多多指教.另外,不知道在这里问问题合不合适.谢谢”

回答:
    目前不能用 LabVIEW 编写 IVI 仪器驱动程序,只能用 C 语言编写 IVI。LabVIEW IVI 驱动程序是在已有的 C IVI 驱动程序基础上包装一下得来的,不能在没有 C IVI 的时候直接去开发 LabVIEW IVI。
    现存的直接使用 LabVIEW 编写仪器驱动程序大多是符合 VXIpnp 标准的仪器驱动程序。如果你用不到互换性,VXIpnp 仪器驱动程序就可以满足要求了。目前,IVI 的可互换性的应用也不是很多,也许你可以考虑直接编写 LabVIEW VXIpnp 仪器驱动程序。

    如果要开发 IVI 驱动程序,最好要有最新版的 CVI 和 IVI Compliance Package (ICP)。其它工具包都可以不用。

    IVI Spacific Driver 是针对某一型号的仪器专用的 IVI 驱动程序。它是不能被用到其它型号的一起上的,就算是只用到通用属性也不行。原因有两个,一个是每个仪器的命令可能是不同的,另一个是驱动程序在初始化的时候就会检查仪器是不是自己所支持的。如果两个型号的仪器所用的命令完全相同,你也好要改一下 Init 函数的源代码才能把驱动用到另一台仪器上。

相关文章:
   
可互换虚拟仪器驱动程序的开发
    一个 IVI 驱动程序的开发过程

编辑

洗澡的故事

    前几天去南京招聘去了,所以也没时间更新 blog。

    同去南京的是两男两女共四个人:me, 男同事, mma, mmb。
    到南京的头一天下午,我们就去学校做了宣讲会,收到了一大堆学生的简历。开完宣讲会已经到晚饭时间了,我们直接去吃晚饭。饭后散步回酒店的路上,恰好经过一个水果摊,于是我们又买了一个柚子,半斤青枣作为零食。
    回到旅馆,我们就开始忙着挑选简历。投递简历的学生太多了,但是我们只能从中选出一部分参加第二天的笔试。挑选简历主要由三个人负责,mma 相对清闲一些。大家正在认真挑简历的时候,男同事突然叫了 mma 一声,然后诚恳地对她说:“你要是不忙,就先帮我洗个枣吧。”

编辑

人的脑袋还是很结实的

    昨晚和同事一起打羽毛球,是双打。我同伙拼劲全力一记扣杀,结果直接把球拍拍到了我的前额上。他的球拍当场断裂,而我的头也出了点血。

    虽然头上肿起一个大包,却也没影响我工作。我现在摸着我的脑袋想,我的头骨还真结实啊,否则裂开的就不是球拍,而是我的脑袋了。赶紧吃点钙片,骨头结实是很重要的 :)

一个 IVI 驱动程序的开发过程

这篇文章是我本科的毕业论文,它只是对我实习工作的记录,描述了开发一个IVI驱动程序的全过程,谈不上什么技术含量。
可惜的年头已久,我竟然找不到它的最终版本了,我只从备份光盘里翻出了一个未完成的版本。
以前的很多东西我没有注意保存下来,真是可惜啊!今天想找出一份我以前写的代码,也找不到了。以后我就会把写的东西都放到网上来,以免这为数不多的东西再被遗失了。
 


 

[摘要]

在虚拟仪器系统中,仪器驱动程序是连接仪器与用户界面的桥梁,是系统设计的一个关键。IVI驱动程序(Interchangeable Virtual Instrument Driver 可互换性虚拟仪器驱动程序),虽然刚出现不久,但因其性能卓越,IVI驱动程序已成为了驱动程序的发展方向。本文论述了IVI驱动程序的工作原理。并结合实例,讲述了用LabWindows/CVI语言为YOKOGAWA FG200/FG300 系列信号发生器编写IVI驱动程序的全过程。

关键词:虚拟仪器、可互换虚拟仪器驱动程序、信号发生器、FG200/FG300、VXI即插即用规范、LabWindows/CVI。

[Abstract]

In virtual instrument system, the instrument drivers are the bridges between instruments and user interface. It is also the key technique of system design. IVI driver is a new technology in industry science. Because of its excellent performance, IVI already became the direction of driver development. The principle of IVI driver is discussed. And we paid more attention in the implementation of IVI driver for FG200/FG300 series function generators with LabWindows/CVI.

Key words: virtual instrument, IVI, interchangeable virtual instrument driver, function generator, FG200/FG300, VXI plug&play specification, LabWindows/CVI.

第一章 驱动程序工作原理

一、 驱动程序的发展背景:

1、 测试系统的工作方式:

在工业生产中,测试过程需要使用到各种各样的仪器。计算机被用来控制这些仪器及生成用户界面。现代的大规模生产线需要用到成百上千的测试仪器,要实现自动化测试必须使用计算机控制这些仪器。

在计算机控制仪器发展的早期,仪器与仪器之间、仪器与计算机之间的接口大多通过GPIB接口总线;编程采用的是BASIC语言的I/O操作语句。每一台仪器都有自己的一套ASCII命令集。测试程序的编写者在编写测试程序前需要熟悉硬件设备和其一大套命令,这对于一般的软件人员来说较为困难。

编程常常成为开发自动检测系统中最耗费时间的意向工作,当检测系统使用到多种不同型号的仪器时,情况会更遭。并且,变成人员还会发现当他们在为一台仪器编写新的应用程序时,需要做大量的重复性工作,浪费严重。

2、 解决办法:

显而易见,如果编程人员在编写程序时,只调用一些例行程序的高层函数,而不需要直接面对低层的函数命令,则开发费用和开发时间都会大大下降。这些可被重复利用的理性函数就是仪器驱动程序。

二、 设备驱动程序的发展历史:

1、GPIB接口总线标准。计算机与仪器之间的接口总线以GPIB(通用并接口总线)最为常见,其它还有RS232、485、VXI等。GPIB总线的雏形是惠普公司(Hewlett Packard)在60年代制定的公司内部总线标准HP-IB。在此基础上,美国国家工程师协会于1975年制定了意在统一接口总线结构的IEEE488接口总线标准。1978年,又对IEEE标准在编码、格式、传输协议方面作了修订,这就是IEEE488.2标准。我们现在开发的GPIB设备驱动程序都必须遵循以上标准。此类标准中的最新版本是于1990年制定的SCPI(Standard Commands for Programmable Instruments)标准。

2、VXI plug&play标准的出现。VXI是一种仪器工业中常见的总线结构,通常我们把采用这种接口总线进行信息传送的集成卡式仪器也称为VXI。由于这种卡式仪器没有用户界面,通常被用来与计算机配合使用。VXI plug&play 标准的产生是为给VXI板卡制造商们提供一个统一的接口标准。后来VXI plug&play 标准被引用到整个仪器及计算机板卡制造业。现在大多数仪器制造商的产品都支持VXI plug&play 标准。

VXI plug&play 标准也为驱动程序的编写提供了固定格式。如驱动程序向仪器发送命令时必须遵守以下步骤:1〉初始化仪器。2〉设置变量参数。3〉设置测量命令。4〉进一步数据分析。5〉关闭进程。

由于使用诸如LabWindows/CVI一类的编程语言可以方便的产生满足VXI plug&play结构框架的驱动程序,VXI plug&play标准的出现极大的推动了现有仪器的发展。

3、VISA标准。 VXI plug&play 标准制定了驱动程序的结构框架,但这还不够完全。现在,许多驱动程序的数据类型都采用的是VISA(Virtual Instrument Software Architecture)标准。VISA标准还统一了驱动程序中一部分用户接口函数,这就为设备的互换奠定了基础。

4、IVI标准。VXI标准并不是最新的设备驱动程序标准。IVI(Interchangeable Virtual Instrument)驱动程序标准在此基础上又向前迈进了一步,VIV标准产生的时间是1998年7月。

三、 IVI驱动程序的特点和优点:

1、可互换性: IVI驱动程序完全符合VXI plug&play和VISA标准,是对以上两种标准的发展和完善。“IVI协会”为五大类仪器(数字万用标、示波器、信号发生器、开关、电源)定义了标准属性(Classic attribute)和标准用户接口函数(Classic function)。因此,使用IVI驱动程序的仪器设备在标纯特性范围内可以实现互换。对于每种型号仪器的特独特性能,可以通过非标准属性和非标准用户接口实现。

2、智能化与状态缓存功能:IVI驱动程序引入了状态缓存(State Cache)功能。现代设备控制中,影响系统速度提升的主要瓶颈是仪器与计算机间的信息传输速率。VXI p&p标准的驱动程序不存在状态缓存功能,因此,每执行一条测量函数都要对仪器进行一次设置,即便仪器已经设置正常也是如此。而IVI的驱动程序可以自动将仪器状态放入缓冲区,并根据此次状态截断向仪器发送的冗余设置命令。以此优化命令结构,提高系统效率。

3、模拟功能:模拟状态指在缺少真实仪器的情况下,IVI驱动程序可以产生一个模拟的输出值,以保证高层程序正常工作。使用模拟功能可以帮助我们自在没有仪器的情况下开发驱动程序、编写、检查测试程序,以及检测新的仪器是否与测试程序匹配。

4、安全的多线程工作方式:这使得测试工程师可以充分利用多线程程序的优点。

5、数据范围检测和状态检测功能:这些工具减轻了测试程序编写人员的工作量并提高了程序的可靠性。

四、 IVI驱动程序的结构和工作原理:

1、 IVI驱动程序是建立在由“国际IVI协会”制定的仪器属性模型的基础上的。我们对五大类仪器(数字万用表类、示波器类、信号发生器类、开关类、电源类)分别定义了其属性模型,使其具有可互换性,状态缓存等功能。

仪器设备上的每一个参数设置都对应一条属性。如信号发生器,我么可以把它的输出波形,频率电压等都定义为其属性。IVI驱动程序的“SetAttribute”和“GetAttribute”两个低层函数时对用户开放的。高级用户可以直接在他们的测试程序中设置仪器的某个独立属性。但是,以为在大多数情况下,仪器的各个属性之间是有联系的,IVI驱动程序提供了高层函数来一次性设置一组相关联的几个属性。这些高层函数减轻了用户的任务。

2、 IVI驱动程序的工作过程:

IVI结构的核心是IVI引擎对仪器属性的读写。

IVI驱动程序利用CallBack函数(回调函数)对仪器设置进行读写操作,利用RangTable(取值范围表)核查仪器属性的取值是否合法。IVI引擎会自动选择实际访问RangeTable和CallBack函数。

例如:我们要使用FG300_ConfigureTriangleSymmetry函数来设置仪器产生的三角波的对称度,并假设其对称度为30(30%)。

当用户调用FG300_ConfigureTriangleSymmetry函数后,驱动程序和IVI引擎需要作以下工作:

1〉 驱动程序调用Ivi_SetAttributeViReal64()函数,对属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY的值进行设置。同时,SetAttribute函数将会激发IVI引擎。

 
  clip_image001

2〉 如果继承属性(Ingerent attribute)FG300_ATTR_RANGE_CHECK的值为VI_TRUE(值为真,允许值范围检查),IVI引擎则自动调用属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY的RangeCheckCallBack函数。检查值30是否在属性的RangTable的允许范围内。如果取值超出范围,SetAttribute函数会结束任务,并将出错代码作为返回值返回。有时,IVI引擎还利用RangeTable把输入值强行转换至某一范围内。

3〉 如购继承属性FG300_ATTR_CACHE的值为VI_TRUE(允许状态缓存),IVI引擎会检查属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY的当前值是否就是30。如果是这样,SetAttribute函数立即结束任务,并正常返回。

4〉 如果继承属性FG300_ATTR_SIMULATE的职位VI_TRUE(允许模拟状态),IVI引擎将值30赋给属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY后即正常返回,不进行任何I/O操作。

5〉 如果以上情况都不成立,IVI引擎会调用属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY的CallBack函数,通过CallBack函数中的I/O操作命令设置值输出至仪器。

6〉 如果继承属性FG300_ATTR_QUERY_INSTR_STATUS的值为VI_TRUE(允许状态检查),IVI引擎会调用CheckStatusCallBack函数读取仪器的状态。

第二章 FG300信号发生器

一、 信号发生器的工作原理:

1、 信号发生器的分类:

根据信号波形产生的原理可将信号发生器分为以下三类:

1〉 模拟发生器(Analog generation)模拟发生器利用积分运算电路和比较运算电路来产生三角波和矩形波信号。正弦波由三角波信号通过一个由二极管和电阻组成的电路来产生。模拟发生器的价格便宜,大多数信号发生器都是采用这种方式工作的。但是模拟发生器的频率精度比较低,而且低频工作状态不稳定。

2〉 PLL发生器(Phase-locked loop generation 锁相环路发生器)。PLL发生器电路包括:(a)一个电压可调的振荡器,用输入电压来调节输出频率;(b)一个可编程可任意设置的分频器;(c)一个基准振荡器;(d)一个低通滤波器;(e)一个相位比较器,用于比较基准振荡器发出的信号波于滤波器输出波形之间的相位差异。

工作时,PLL发生器用相位差异来调节控制电压,使输出频率与基准振荡器经分频器产生的频率保持一致。因此它的频率精度非常高。PLL发生器的缺点是价格高、频率变化缓慢,低频工作状态不稳定。

3〉 DDS发生器(Direct digital synthesis generation 直接数字合成发生器)。DDS发生器把各种样式的波形的数字信息纪录于内存。当用户选定波形与频率,发生器则按照选定的时钟频率将波形数据读出。取出的数据通过D/A转换器转变为模拟信号。由于采用了全数字的方法,DDS发生器已经克服了传统信号发生器的缺点。

2、 DDS信号发生器的工作原理:

1〉 原理图:

clip_image002

其电路中包括:晶体振荡器,用来产生基准时钟信号;相位运算部分;波形存储区;数/模转换器;低通滤波器。波形存储器存储了样本信号在一个完整周期内的数据。存储单元的地址与相位相对应。

2〉 工作过程:

首先,根据用户选择的频率确定N值。锁存器的输出在第一个时钟周期内也是N,这就是第一次读波形存储器时的地址。锁存器的输出值反馈给加法器,以后每个时钟周期,锁存器的输出都会增加N(2N、3N、4N……),波形存储器会根据这些地址信号送出波形数据,再由D/A转换器转换成模拟信号。你可以通过改变N值来修改输出频率。

clip_image004

二、 FG300的主要性能指标:

生产厂家: YOKOGAWA

波形输出:

输出通道数: 2

输出波形: 正弦波、矩形波、三角波、脉冲波、任意波形

输出信号: 连续输出、触发输出、门控输出、直流输出

频率:

频率范围: 正弦波、矩形波: 1μHz – 15 MHz

三角波、脉冲波、任意波形: 1μHz – 200 kHz

分辨率: 1μHz ;九位数字

精度: ±20 PPM

稳定性: ±20 PPM

基准频率: 40.2107 MHz

输出特性:

最大输出电压: ±10 V

幅值调节范围: ±20 Vpp (分辨率:1 mVpp)

幅值精度: ±(0.8%×幅值+14 mVpp)

幅值频率特性:

正弦波: ≤100 kHz ±0.1 dB

≤1 MHz ±0.2 dB

≤10 MHz ±0.5 dB

≤15 MHz ±1 dB

矩形波、脉冲波(50% duty cycle):

≤10 kHz ±2%

三角波: ≤10 kHz ±3%

偏移电压范围: ±10V

输出阻抗: 50Ω±1%

输出衰减: 1/1、1/10、1/100

调制特性:

调制方式: 调幅(AM)、双边调幅(DSBAM)、调频(FM)、调相(PM)、偏移调制(Offset Modulation)、脉宽调制(PWM)

调制波波形: 正弦波、矩形波、三角波、脉冲波、任意波形

调制波频率: 1 mHz – 50 Hz

通用特性:

预热时间: 30分钟

工作环境温度: 5C – 40C

工作环境湿度: 20% – 80%

电源电压: 100 – 240 V Ac

电源频率: 50 Hz – 60 Hz

功率: 125 W

外形尺寸: 350×213×132 mm (长×宽×高)

重量: 5 kg

详细资料参见附录。

三、 FG300的工作原理:

1、 FG300是DDS类的信号发生器。

2、 信号流程:

1〉 它将信号的波形数据存储在波形存储器中。

2〉 相位的递增计算由一个48bit的相位计算器完成。波形存储器的地址输入至于相位计算器的输出值相对应。

3〉 波形存储器的数字输出信号经过一个12位的D/A转换器,转换为模拟信号。

4〉 模拟信号首先要经过滤波器滤除高频谐波。

5〉 FG300中的方波是由正弦波通入比较锁存器后产生的。

6〉 经滤波后的模拟信号由多路转换器选择输出通道。

7〉 幅值调整和偏移量调整。

8〉 通入放大器和衰减器。

9〉 信号由FG300的连接器输出。

四、 编程准备:

FG300信号发生器采用的是消息型通讯方式(message-based)。就是说,FG300与计算机或控制器之间的通讯采用字符串的方式,我们称这些标准字符为消息(message, MSG)。从控制器发送至仪器的消息成为程序消息(program message);从仪器发送至控制器的消息成为反馈消息(response message)。

每条程序消息可以由数个程序消息单元组成,

第三章 LabWindows/CVI开发语言

一、 LabWindows/CVI开发环境简介

LabWindows/CVI是一种C语言开发系统。与其它开发系统相比,CVI增添了一个交互式程序开发环境、数据采集函数库、仪器控制工具等工具。同时,LabWindows/CVI包含一整套用来进行数据采集、分析、显示等处理的软件工具。

clip_image006

你可以利用CVI的交互式环境编写调试ANSI C语言(美国国家标准C语言),还可以使用LabWindows/CVI自带的库函数以及调用其它的C语言模块、动态链接库函数、C语言库函数、仪器驱动程序等。

CVI最大的优势在于功能强的的函数库。它的函数库包含了对数据处理的每一过程及仪器进行控制的各种函数。具体分类如下:

1〉 数据采集类包括以下函数库:GPIB/IEEE 488.2函数库、数据采集函数库、DAQ卡的IO操作函数库、RS-232函数库、VISA库、VXI库。

2〉 数据分析方面:数据格式转换和标准化函数库、数据分析函数库、高级数据分析函数库。

3〉 数据显示方面有用户界面函数库。

4〉 在网络操作和信息交换方面有四个函数库:动态数据交换(DDE)函数库、信息交换控制协议(TCP)函数库、X Property控件函数库和Active X控件函数库。

仪器控制函数库是CVI特有的,它包括了各种采用GPIB、VXI、和RS-232接口的仪器的驱动程序,例如示波器、万用表等。用户还可以利用CVI全套的驱动程序开发软件工具开发自己的驱动程序。

二、 LabWindows/CVI程序开发过程简介:

1〉 通开发其它语言的程序一样,在书写程序源代码前,你先要设计好程序个部分的功能,并以文件的形式记录下来。

2〉 LabWindows/CVI是一种在一起操作方面大大增强了的C语言。在使用CVI之前,你一定要熟悉C语言。

3〉 CVI程序的结构。通常,一个CVI程序由以下几部分组成:

Ø 用户界面

Ø 主控程序

Ø 数据采集

Ø 数据分析

4〉 用户界面:使用LabWindows/CVI的用户界面编辑工具可以轻易的制作出精美的交互式用户界面。使用图形化用户界面可以使你的程序更加友好,更加确切的表达出你的程序的功能和用途。因此,我们编写一个CVI程序往往是从事及用户界面开始的。

5〉 程序框架和代码生成:LabWindows/CVI会自动根据设计好的用户界面生成程序框架。这个程序框架内包括用户界面的调用函数(Callback Function)和装载用户界面的主函数(Main Function)。CVI的代码生成器可以大大节约用户编写Windows程序的时间。

6〉 主控程序部分:主控程序用来协调数据采集、数据分析、和用户界面部分的工作,控制程序执行的流程。大部分主控程序部分的程序代码要由用户自己书写,你可以参考LabWindows/CVI软件包中的范例程序。

7〉 数据采集:LabWindows/CVI已经包含有控制GPIB、RS-232和VXI设备的驱动程序和接口函数,用户可直接调用这些函数。

8〉 数据分析。

第四章 驱动程序开发步骤

第一节 整理仪器属性和用户界面函数

为了确保仪器的可互换性,国际IVI协会为仪器驱动程序的开发制定了一系列的标准。其中一个重要部分就是制定了标准的通用仪器属性和通用高层接口函数。针对信号发生器部分的文件是《IviFgen Class Specification》。

《IviFgen Class Specification》文件包含了信号发生器的最常用功能,绝大多数的信号发生器都支持这些功能。但每台仪器实现这些功能的方法可能是不同的;仪器与计算机之间的通讯方式和指令也存在较大差别。

驱动程序中,基本上每条属性(Attribute)对应一条仪器设置命令。在开始工作前,要熟悉仪器的命令体系和IVI通用属性(Classic Attribute)及用户界面函数(Classic Function)的定义。

首先,要满足文件《IviFgen Class Specification》 中定义的属性和界面函数。

第二节 使用仪器驱动程序开发向导创建驱动程序文件:

clip_image008

一、 打开LabWindows/CVI的主工作窗口,在“Tools”菜单下选取“Create IVI Instrument Driver”,开始进入驱动程序开发向导。

二、 在“Select an Instrument Driver”对话框中,选取显见驱动程序的信息:

clip_image010

1〉 新建一个驱动程序(Create a new driver)。

2〉 接口中线类型为:GPIB。

3〉 仪器类型为信号发生器(Function Generator)。

按下“Next”键,进行下一步。

三、 在“General Information”对话框中,填写以下信息:

1> 仪器的名称:“TOKOGAWA FG300 Function Generator”;

clip_image012

2> 仪器前缀名:“FG300”;

3> 作者姓名及公司等;

4> 程序方在何目录下。

按下Next键,进行下一步。

四、 在General Command Strings 对话框中填写以下信息:

clip_image014

1〉 填写默认的设置命令,FG300可以不需要默认的设置命令。

2〉 列出仪器的通道数,FG300共有两个通道。

按下Next键,进行下一步。

五、 在Stand Operation对话框种选择仪器支持的基本操作。

clip_image016

六、 在ID Query对话框中填入仪器用来询问ID号的命令,以及希望得到的返回值。

clip_image018

七、 在Reset对话框中填入仪器用来进行重设置的命令。

clip_image020

八、 在Self Test对话框中填入以下内容:

clip_image022

1〉 在自检命令控制栏中填入自检命令:“*RST?”;

2〉 FG300的自检返回信息中只有状态码;

3〉 选择“%hd”通用符作为格式化模式。

clip_image024

九、 在Error Query对话框中填入以下信息:

1〉 FG300的错误查询命令为:“:STAT:ERR?”;

2〉 FG300的错误查询返回值中即包括错误代码,也包含错误信息。

3〉 选择通配符“%ld,\”%256[”\”]”作为格式化模式。

clip_image026

十、 在Revision对话框中填入FG300的版本询问命令:“*IDN?”;并选用通配符“%x[^,],%x[^,],%x[^,],%256[^\n]”作为返回信息的格式化模式。

clip_image028

十一、 Test对话框:

如果这台仪器已经连在计算机上,你可以在建立驱动程序前,先测试以下你在前面几个对话框中输入的命令是否正确。

1〉 填入仪器的GPIB地址;

2〉 填入仪器的复位时间和自检时间。

3〉 按下Run Tests键,CVI开始检查仪器。

十二、 按下Next键,CVI就会按前面输入的信息生成该仪器驱动程序的程序框架。

第三节 编辑仪器的属性:

clip_image030

当时用“仪器驱动程序开发向导”生成了驱动程序的框架后,可以直接装入属性编辑器,也可以在将来的任何时候,通过选择Tools菜单中的Edit Instrument Attributes项来调出属性编辑器编辑仪器属性。

一、 制定仪器属性:

clip_image032

选定你要编辑的属性,按Edit键,或按下Add Attribute添加新的属性,就会进入Edit Attribute对话框。在此对话框内,需要填写或修改以下内容:

1〉 属性的名称;

2〉 属性的描述性名称;

3〉 属性的数据类型;

4〉 属性的取值范围表;

5〉 属性的默认值;

6〉 属性需要达到的精度;

7〉 该实行的简要说明;

8〉 属性的一些特殊标志;

9〉 该属性与其它属性或函数之间的关系。

二、 编写或修改属性的Callback函数。

一个仪器的属性可能会用到六个Callback函数。通常,每个Callback函数的作用如下:

1〉 Read Callback函数,用来读取仪器当前的设置值或数据信息,该函数一般由几个询问仪器设置或数据的命令组成。

2〉 Write Callback函数,用来设置仪器的值或把数据传递给仪器,该函数常由一组设置命令组成。

3〉 Compare Callback函数,用来比较属性的值是否改变。

4〉 Range Check Callback函数,察看属性取值范围表,检查赋给属性的值是否在允许的范围内。

5〉 Coerce Callback函数,把赋给属性的值,按规律转换值一定的范围内。

6〉 Range Table Callback函数,用来为仪器的当前状态选择一个合适的取值范围表。

在“Edit Driver Attribute”对话框中,选择要编辑的函数,按下“Go To Callback Source”键,即可找到Callback函数的源代码进行编辑。

三、 删除无用的属性。

由开发向导生成的驱动程序中,有一些属性在FG300中用不到。在编写驱动程序的过程中,应该删除这些属性。

第四节 编辑高层函数。

1、编辑或创立一个高层函数。

clip_image034

clip_image036

用户在使用仪器时,为完成某一任务,通常需要一次设置一组相关的几个属性;很少需要对某个单个的属性进行设置。因此,IVI驱动程序为用户提供了高层函数,以方便操作。一个高层函数常常由几个设置仪器属性的自函数组成。选择Tools菜单中的“Edit function tree”项,或打开“ykfgxx0.fp”函数面板文件,就会看到驱动程序的函数树列表。我们把函数树中的每一项成为一个结点,每一个结点都对应一个高层函数。修改一个已有的函数或创建一个新的函数可以按以下步骤进行:

1〉 用鼠标右键点击需要修改的结点,或选择Greate菜单中的“Function Panel Window”项创建一个新的结点,就会进入“Edit Node”对话框,此对话框用来编辑结点名及其对应的函数名。

2〉 编辑函数面板。为了方便用户了解和数用一个函数,CVI为每一个函数都设置了一个函数面板。面板中列出了函数的全部参数,并提供了函数及其参数的简要说明。我们同样需要为自己的函数设计一个函数面板,以方便驱动程序的使用者。

3〉 如果选中的结点是新建的,先要用“Generate Source For Function Node”项为函数创建源代码。若源代码已经存在,可直接选择“Go To Definition”想找到函数源代码。

4〉 编写源代码。

第五节 建立驱动程序的文档。

为了更清楚的向用户介绍你的驱动程序,你可以直接利用CVI为你的程序生成两种说明文档,供用户参考。

 

用科学的方法追女朋友 之 奢侈论

    有人问我信仰什么,我说我信仰科学。信仰不是随便说说的,要事事以科学为指导才够虔诚,包括追女朋友。前些天我看了一档科技节目,讲的是吸引异性中的一些科学道理。现在听我添油加醋地把其中与奢侈相关的话题总结一番。

 
    许多动物身上都有一些器官是需要消耗它大量资源,而又对生存没有任何帮助,甚者是个累赘的。比如公孔雀的大尾巴。这条大尾巴要消耗大量的能源,而其在躲避捕食者的时候是个严重负担。我们把这种开销巨大,却又无益生存的东西叫做奢侈品。

    虽然孔雀的大尾巴对生存无益,但对于吸引异性至关重要。母孔雀就是根据公孔雀尾巴的漂亮程度来确定他是不是一个合格的好老公的。这种选择方式的科学依据是,一个好老公不但能自己吃得饱,还要有余粮来养活小孔雀。咋看得出有没有余粮呢,凭的就是花尾巴这个奢侈品了。动物和人一样,营养不足的时候,先要保证最重要的与生存相关的器官的供应。比如心脏,只有一份能量也要先给他。而花尾巴这样的奢侈品只好牺牲掉了。所以只有食物丰富,心肝脾肺肾都补给充足了的孔雀才有能力养一条漂亮的花尾巴。尾巴越漂亮,说明余粮越多,越养得起小孔雀。

 
    人类跟其他动物的择偶标准在本质上其实是相同的,只不过表现形式更复杂多样一些。奢侈品在吸引异性中的作用仍然至关重要。比如,你月薪一千,但是平时不吃不喝,睡自行车棚,省的钱购置一身名牌,穿出去绝对比那些月薪一万,却衣着老土,脚蹬布鞋,捧着本 C++ 的人更能吸引小姑娘。当然,如果月薪一万的人能勒紧裤腰带,买辆二手宝马,就算只穿拖鞋,也会有一群小姑娘在后边追着不放的。

 
    这就是奢侈品的功效。不过上面说的这些都太肤浅了,人类最奢侈的东西并非名车名表,而是人的大脑。大脑只占人体重量的2%,但是却要消耗人类摄入资源的1/4。大脑自然需要做一些与人生存相关的工作,但他的主要精力都被看电视、打游戏、聊天、做白日梦等等浪费掉了。这个才是人身上最大的奢侈品,也是最吸引异性的地方。

    越会用脑的人,越显示得出大脑的奢侈。比如,会甜言蜜语,讲个笑话什么的,都很能吸引异性。不过这些都是小聪明,创造力才是大智慧,尤其是在艺术领域的创造力最为奢侈。艺术创作极其耗费脑力,却既不能吃也不能穿,最没用,因而也就最能吸引异性。追星族最能体会这一点了。

    然而艺术和创造力还不是最奢侈的。一个人能够达到的最奢侈的层次,也是他最具魅力的品性叫做善良。一般来说,人总是先满足自己,再满足别人。善举越多越能证明自己的能力。前些天听说世界首富和二富分别准备捐出自己100%和85%的财产,这真是太奢侈了–自己的财产,自己甚至自己的亲属都不许用,全留给素不相识的人。相信他们的魅力值会随着他们财产的减少而上窜n个数量级。

    这奢侈论推而广之,不但可以指导爱情,更可以帮助你在人生其他方面取得成功。以工作为例,仅仅做好本职工作,还不足以体现你的能力,如果你还能抽空打听打听别人都在干啥,甚至培训一下新员工,隔三岔五做个 presentation 什么的,就离升职加薪不远了。作为软件工程师,写的软件仅仅完成功能,那你只能算个初级程序员;如果打开你的代码,满篇都是注释,看不见几条语句,那你就是高级程序员了;如果还能像我这样,有时间写写 blog 啥的,就离专家不远了。

 

《生活随笔》

用TWiki搭建公司内部网站

 
最近我开始把平时工作中的一些内部文档整理整理放到公司内部的TWiki网站上去。用过了几天越发觉得当初决定把内部网站转移到wiki上去是非常明智的。
 
以前我们也有内部网站,如果员工要更新点什么内容,需要先到文件服务器,把相应的文件下载下来,修改,再上传到文件服务器,然后等上几十分钟,网页服务器刷新了,才能看到自己修改的内容。过程及其麻烦。所以基本上没什么同事肯维护自己相关的页面。
 
TWiki可以允许用户直接在网页上进行修改,而且被修改的内容立即生效。所以我修改网页的积极性大大提高。两个多星期里,我就勤奋的做了一百多次更新 :)
 
这是我们组的TWiki页面:http://twiki.natinst.com/twiki/bin/view/SAST/ 
不过这是内部网站,所以只有NI同事可以看。
 
 
相关文章:
 

使用 Google 桌面的一点感想

    我们公司有很多软件和文件在公司的几台文件服务器上。经常有人需要安装一个软件时,不知道上哪去找。如果要根据文件内容找到一个以前放置在服务器上的文件就更困难了。
    我们公司的 Email 系统使用的是 Lotus Notes,它的数据过搜索功能非常差,比如一些我们常用的数据库,只允许搜索每个项目标题中出现的文字。如果只知道一个项目大致内容,不知道标题,就没办法把它搜索出来。
   使用 Google Desktop 企业版基本上可以解决我们所遇到的问题了。 Google Desktop 可以为所有本地盘符下的文件和指定的网路路经下的文件建立索引,使用户快速找到需要的文件。可以解析文件内容。可以检索 Lotus Notes 邮件,数据库。
    但是它也有一些缺点,比如:每个用户都需要自己安装一份,并设置需要抓取的网络路经。索引文件是比较大的,一般有几个G,需要占用每个用户的硬盘。当很多用户设置抓取网络路经后,会大大增加服务器和网络的负担。不能检索服务器上的没有在Windows下共享的 Notes 数据库。
   我觉得一个可行的改进措施是公司IT部门利用 Google Desktop 提供的 API 做一些针对性地开发。比如在在某一台服务器上设置搜索引擎,负责抓取我们本地所有文件服务器上的文件,和公共的 Lotus Notes 数据库。员工可以利用浏览器访问这台服务器查询搜索结果。