发布新日志

  • 关联啊关联

    2008-08-25 09:36:20

    [转]详细介绍如何做关联

    2008-08-15 10:41:24 / 个人分类:LoadRunner相关知识

    如何在脚本中做关联(一)
     
    文章出处:51testing博客 作者:笨笨 发布时间:2007-04-03
     
     如何在脚本中做关联 (Correlation)
    当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,您可以找到浏览器与服务器之间所有的对话,包含通讯内容、日期、时间、浏览器的请求、服务器的响应内容等等。脚本和Recording Log最大的差别在于,脚本只记录了client端要对server端所说的话,而Recording Log则是完整纪录二者的对话。

    当执行脚本时,您可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站伺服器重新说一遍,VuGen企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给VuGen。
    所以纪录在脚本中要跟服务器所说的话,完全与当初录制时所说的一样,是写死的(hard-coded)。这样的作法在遇到有些比较聪明的服务器时,还是会失效。这时就需要透过「关联(correlation)」的做法来让VuGen可以再次成功地骗过服务器。
    何谓关联(correlation)?
    所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。
    举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。
    下面的图示说明了这样的情形:
    当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的数据,当浏览器再送出网页B的情求时,这时就要用到ID=123的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。
    在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的数据,而不是用服务器新给的ID=456,整个脚本的执行就会失败。

    要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它撷取下来,放到某个参数中,并且取代掉脚本中有用到Session ID的部份,这样就可以成功骗过服务器,正确地完成整个交易了。
    哪些错误代表着我应该做关联(correlation)?
    假如脚本需要关联(correlation),在还没做之前是不会执行通过的,也就是说会有错误讯息发生。不过,很不幸地,并没有任何特定的错误讯息是和关联(correlation)有关系的。会出现什么错误讯息,与系统实做的错误处理机制有关。错误讯息有可能会提醒您要重新登入,但是也有可能直接就显示HTTP 404的错误讯息。
    要如何做关联(correlation)?
    关联(correlation)函数
    关联(correlation)会用到下列的函数:
    ? web_reg_save_param:这是最新版,也是最常用来做关联(correlation)的函数。
    语法:
    web_reg_save_param ( “Parameter Name” , < list of Attributes >, LAST );
    ? web_create_html_param、web_create_html_param_ex:这二个函数主要是保留作为向前兼容的目的的。建议使用 web_reg_save_param 函数。
    详细用法请参考使用手册。在VuGen中点选【Help】>【Function reference】>【Contexts】>【Web and Wireless Vuser Functions】>【Correlation Functions】。
    如何找出要关联(correlation)数据
    简单的说,每一次执行时都会变动的值,就有可能需要做关联(correlation)。
    VuGen提供二种方式帮助您找出需要做关联(correlation)的值:
    1. 自动关联
    2. 手动关联
    自动关联
    VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并且自动使用关联函数建立关联。
    自动关联提供下列二种机制:
    ? Rules Correlation:在录制过程中VuGen会根据订定的规则,实时自动找出要关联的值。规则来源有两种:
    o 内建(Built-in Correlation):
    VuGen已经针对常用的一些应用系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,内建关联规则,这些应用系统可能会有一种以上的关联规则。您可以在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。
    您也可以在【Recording Options】>【Internet Protocol】>【Correlation】检视每个关联规则的定义。
    o 使用者自订(User-defined Rules Correlation):
    除了内建的关联规则之外,使用者也可以自订关联规则。您可以在【Recording Options】>【Internet Protocol】>【Correlation】建立新的关联规则。
    ? Correlation Studio:有别于Rules Correlation,Correlation Studio则是在执行脚本后才会建立关联,也就是说当录制完脚本后,脚本至少须被执行过一次,Correlation Studio才会作用。Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。
    Rule Correlation
    请依照以下步骤使用Rule Correlation:
    1. 启用auto-correlation
    1. 点选VuGen的【Tools】>【Recording Options】,开启【Recording Options】对话窗口,选取【Internet Protocol】>【Correlation】,勾选【Enable correlation during recording】,以启用自动关联。
    2. 假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应的应用系统。
    3. 或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。
    4. 设定当VuGen侦测到符合关联规则的数据时,要如何处理:
    ? 【Issue a pop-up message and let me decide online】:跳出一个讯息对话窗口,询问您是否要建立关联。
    ? 【Perform correlation in sceipt】:直接自动建立关联
    2. 录制脚本
    开始录制脚本,在录制过程中,当VuGen侦测到符合关联规则的数据时,会依照设定建立关联,您会在脚本中看到类似以下的脚本,此为BroadVision应用系统建立关联的例子,在脚本批注部分可以看到关联前的数据为何。

    3. 执行脚本验证关联是OK的。
    Correlation Studio
    当录制的应用系统不属于VuGen预设支持的应用系统时,Rule Correlation可能既无法发挥作用,这时可以利用Correlation Studio来做关联。
    Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。
    使用Correlation Studio的步骤如下:
    1. 录制脚本并执行
    2. 执行完毕后,VuGen会跳出下面的【Scan Action for Correlation】窗口,询问您是否要扫描脚本并建立关联,按下【Yes】按钮。

    3. 扫描完后,可以在脚本下方的【Correlation Results】中看到扫描的结果。

    4. 检查一下扫瞄的结果后,选择要做关联的数据,然后按下【Correlate】按钮,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。
    注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。
    5. 一般来说,您必须一直重复步骤1~4直到所有需要做关联的数据都找出来为止。因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。
    有可能有些需要做关联的动态数据,连Correlation Studio都无法侦测出来,这时您就需要自行做手动关联了。
    手动关联
    手动关联的执行过程大致如下:
    1. 使用相同的业务流程与数据,录制二份脚本
    2. 使用WinDiff工具协助找出需要关联的数据
    3. 使用web_reg_save_param函数手动建立关联
    4. 将脚本中有用到关联的数据,以参数取代
    接下来将详细的说明如何执行每个步骤
    使用相同的业务流程与数据,录制二份脚本
    1. 先录制一份脚本并存档。
    2. 依照相同的操作步骤与数据录制第二份脚本并存盘。注意,所有的步骤和输入的数据一定都要一样,这样才能找出由服务器端产生的动态数据。
    有时候会遇到真的无法使用相同的输入数据,那您也要记住您使用的输入数据,到时才能判断是您输入的数据,还是变动的数据。
    使用WinDiff工具协助找出需要关联的数据
    1. 在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份脚本。
    2. 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选【Options】>【View】>【Show Inline Differences】)。
    3. 逐一检视二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。选取差异的脚本,然后复制。
    在复制时,有时并不需要取整行脚本,可能只会选取脚本中的一部分。
    注意:请忽略lr_thik_time的差异部份,因为lr_thik_time是用来模拟每个步骤之间使用者思考延迟的时间。

    4. 接着要在Recording Log(单一protocol)或是Generation Log(多重protocol)中找这个值。将鼠标光标点到Recording Log的第一行开头,按下Ctrl+F,开启【Find】窗口,贴上刚刚复制的脚本,找出在Recording Log第一次出现的位置。

     结果会有二种:
    o 在Recording Log中找不到要找的数据,这时请先确认您找对了脚本,毕竟现在开启了二个几乎一样的脚本,很容易弄错。
    o 在Recording Log中找到了要找的数据,这时要确认数据是从服务器端传送过来的。首先可以先检查数据的标头,从标头的Receiving response可以知道数据是从服务器端传送到client端的。假如此数据第一次出现是在Sending request中,则表示此数据是由client端产生,不需要做关联,但是有可能需要做参数化(parameterized)。
    您要找的标头格式如下:
    *** [tid=b9 Action1 2] Receiving response from host astra.merc-int.com:80 ( 25/11/2002 12:04:00 )

    5. 现在您已经找到录制二次都不一样,而且是由服务器所产生的动态数据了,而此数据极有可能需要做关联。
    使用web_reg_save_param函数手动建立关联
    在找到是由服务器所产生的动态数据之后,接下来要做的就是找出适当的位置,使用web_reg_save_param函数,将这个动态数据撷取到某个参数中。
    1. 要在哪里使用web_reg_save_param函数?
    在之前的步骤,我们已经在Execution Log找到可能需要关联的动态数据。在Execution Log中选取动态数据前的文字然后复制,我们将会利用这段文字,来帮助我们找出要关联的动态数据。

    不过在这之前我们要先找出使用web_reg_save_param函数的正确位置,所以我们要再重新执行一遍脚本,而且这次会开启所有的Log。
    1. 在VuGen中点选【Vuser】>【Run-Time Settings】。
    2. 点选【General】>【Log】。
    3. 勾选【Enable logging】、【Always sends messages】、【Extended log】,以及【Extended log】下的所有选项。
    4. 按下【OK】就可以执行脚本了。
    执行完脚本之后,在Execution Log中搜寻刚刚复制的字符串。找到字符串后,在字符串前面会有A.tion1.c(7),这个7就是到时候要插入web_reg_save_param函数的位置,也就是要插入到脚本的第7行。
    在脚本的第7行前插入一行空白行,然后输入
    web_reg_save_param(“UserSession”,
    “UserSession” 这个 “UserSession” 就是到时要使用的参数名称,建议给个有意义的名字。
    注意:到这里整个web_reg_save_param函数还没完成。

    2. 找出web_reg_save_param中要用到的边界
    web_reg_save_param函数主要是透过动态数据的前面和后面的固定字符串,来辨识要撷取的动态数据的,所以我们还需要找出动态数据的边界字符串。
    找出左边界字符串
    再回到Execution Log中,选取动态数据前的字符串并且复制它。
    这时会有个问题,到底要选取多少字符串才足以唯一识别要找的动态数据呢?建议是越多越好,但是尽量不要包含到特殊字符。
    在这边我们选取「input type=hidden name=userSession value=」字符串。选好之后,还要再确认一次这段字符串真的是可以唯一识别的,所以我们在Execution Log中透过Ctrl+F的搜寻,找找看这段字符串是否可以找到要找的动态数据。假如找不到,web_reg_save_param函数还有个ORD参数可以使用,ORD参数可以设定出现在第几次的字符串才是要找的字符串。
    将这个边界字符串加到未完成的web_reg_save_param函数中:
    web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”,
    找出右边界字符串
    接下来要找出动态数据的右边界字符串,这个字符串就比较好找了,从动态数据的最后一个字符开始,通常就是我们要找的右边界字符串了。
    以这个例子来看,就是「>」,所以再把右边界字符串加入,web_reg_save_param函数中,这时web_reg_save_param函数已经快完成了。最后再加上「LAST);」就完成整个web_reg_save_param函数了。
    web_reg_save_param(“UserSession”, “LB= input type=hidden name=userSession value=”, “RB=>”, LAST);

    将脚本中有用到关联的数据,以参数取代
    当使用web_reg_save_param建立参数后,接下来就是用“UserSession”参数去取代脚本中写死的(hard-coded)资料。
    范例:

    “Name=userSession”, “Value=75893.0884568651DQADHfApHDHfcDtccpfAttcf”, ENDITEM,
    换成
    “Name=userSession”, “Value={UserSession}”, ENDITEM,

    到这里您已经完成了一个关联了,接下来就是执行脚本,是否能成功运行,假如还是有问题,就要检查看看是否还需要再做另一个关联。
    关于 web_reg_save_param 函数
    对于关联(correlation)来说,web_reg_save_param是最重要的一个函数,其功能是在下载的网页内容中,透过设定的边界字符串,找出特定的数据并将其储存在一个参数中,以供后续脚本使用。
    接下来将针对web_reg_save_param做比较详细的说明。
    Service and registration type function
    web_reg_save_param是一个Service function。service function主要是用来完成一些特殊的工作的,如关联、设定proxy、提供认证信息等,当其作用时,不会对网页的内容做任何的修改。
    web_reg_save_param同时也是一个registration type function (只要函数名称中包含_reg_的字眼,表示其为registration type function)。registration type function意味着其真正作用的时机是在下一个action function完成时执行的。举例来说,当某个web_url执行时所接收到的网页内容中包含了要做关联的动态数据,则必须将web_reg_save_param放在此web_url之前,则web_reg_save_param会在web_url执行完毕后,也就是网页内容都下载完后,再执行web_reg_save_param找寻要做关联的动态数据并建立参数。
    所以要记住一点,要使用registration type function时,要注意其放置的位置必须在要作用的action function之前。
    语法
    int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);
    参数说明
    ParamName:存放动态数据的参数名称
    list of Attributes:其它属性,包含 Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, 以及 SaveLen。属性值不分大小写,例如 Search=all。以下将详细说明每个属性值的意义:
    ? Notfound:指定当找不到要找的动态数据时该怎么处置。
    o Notfound=error:当找不到动态数据时,发出一个错误讯息。假如没设定此属性,此为LoadRunner的默认值。
    o Notfound=warning:当找不到动态数据时,不发出错误讯息,只发出警告,脚本也会继续执行下去不会中断。在对角本除错时,可以使用此属性值。
    ? LB:动态数据的左边界字符串。此属性质是必须要有的,而且区分大小写。
    ? RB:动态数据的右边界字符串。此属性质是必须要有的,而且区分大小写。
    ? RelFrameID:相对于URL而言,欲搜寻的网页的Frame。此属性质可以是All或是数字,而且可有可无。
    ? Search:搜寻的范围。可以是Headers(只搜寻headers)、Body(只搜寻body部分,不搜寻header)、Noresource(只搜寻body部分,不搜寻header与resource)或是All(搜寻全部范围,此为默认值)。此属性质可有可无。
    ? ORD:指明从第几次出现的左边界开始才是要撷取的数据。此属性质可有可无,默认值是1。假如值为All,则所有找到符合的数据会储存在数组中。
    ? SaveOffset:当找到符合的动态数据时,从第几个字符开始才开始储存到参数中。此属性质不可为负数,其默认值为0。
    ? Convert:可能的值有二种:
    o HTML_TO_URL: 将HTML-encoded数据转成URL-encoded数据格式
    o HTML_TO_TEXT:将HTML-encoded数据转成纯文字数据格式
    ? SaveLen:从offect开始算起,到指定的长度内的字符串,才储存到参数中。此参数可有可无,默认值是-1,表示储存到结尾整个字符串。
    范例
    web_reg_save_param("A", "LB/ic=<a href=", "RB='>", "Ord=All", LAST);nner会搜寻网页中所有以 「<a href=」 开头,且以 「’>」结束,当中包含的字符串,并且储存在「A」参数中。
    Tips and Tricks
    以下提供一些关联的常见问题:
    ? 如何打印出参数值?
    lr_output_message这二个函数来做到。例如:
    lr_output_message(“Value Captured = %s”, lr_eval_string(“{ParameterName}”));
    lr_eval_string与lr_output_message函数的使用说明请参考LoadRunner Online Function Reference。
    ? 在脚本的data目录下找不到路制时的快照(snapshot)
    造成在脚本的data目录下找不到路制时的快照(snapshot)的可能原因如下:
    o 脚本是由VuGen 6.02或更早的版本所录制的
    o 汇入的Action不会包含快照(snapshot)的档案
    o 脚本是储存在只读的目录下,早成VuGen无法储存执行时撷取的快照(snapshot)
    o 某些步骤并不会产生快照(snapshot),如浏览某个资源
    o 快照(snapshot)功能被取消
    【Tools】>【General options】>【Correlation】tab >【Save correlation information during replay】
    ? 开启WinDiff时出现「File no longer available」的错误讯息
    WinDiff这个工具有些限制,无法开启包含空格符的目录或是脚本,所以建议命名时不要使用空格符,并且尽可能将名称取短一点。
    ? 录制时突然跳出【Correlation warning】对话窗口
    当你有勾选自动关联的【Issue a popup message and let me decide online】选项,当VuGen发现有可能要做关联的数据时,就会跳出【Correlation warning】的窗口,询问你要做关联(Correlation in scrīpt)还是要忽略(Ignore)。
    另外你也可以勾选【Perform correlation in scrīpt】,让VuGen自动作关联,不会再跳出询问窗口。
    或是勾选【Disable correlation engine】,关闭自动关联的功能。

    ? 如何手动启动「Scan action for correlation」的功能
    要手动启动「Scan action for correlation」的功能,请先执行脚本一次后,点选【Vuser】>【Scan Action for Correlation】。

    ? 执行完脚本后并未出现【Scan Action for Correlation】窗口
    要启用【Scan Action for Correlation】功能,请点选【Tools】>【General options】>【Correlation】tab,勾选【Show Scan for correlation popup after replay of Vuser】选项。


    关联函数一个有用的选项


    在LR中,关联函数web_reg_save_param的NotFound参数有两个选项,含义分别如下:

    ERROR:当关联函数未能找到匹配值时,LR将抛出一个Error信息;
    EMPTY:当关联函数未能找到匹配值时,LR将空值赋给该关联的参数值。

    默认情况下,该值为Error,在大多数情况下,这是可以满足要求的。然而在某些时候,我们可能需要利用关联值做一些条件判断,例如设定当关联到的值为空时,让脚本做一些特殊处理,此时如果使用默认的选项就不合适了,因为当LR识别到该关联值为空时,将抛出一个错误信息,提示未找到关联记录。怎么办呢?此时就可以使用NotFound的另外一个选项,即将NotFound参数值设为Empty,

    例:

    web_reg_save_param("customer","LB=name=\"classiAssetsSelected\" value=\"","RB=\"","NotFound=EMPTY",LAST);

    令LR将空值赋给customer参数,然后在后面的脚本中结合判断条件语句,如:

    if(strcmp("", lr_eval_string("{customer}")) !=0),就可以让脚本根据判断条件做相应的控制。
     

  • 如何才能正确找到手动关联的左右边界呢?

    2008-06-06 16:30:41

    看了很多51testing上的贴子,可是到现在还是无法确定到底该如何找对手动关联的边界,也就是因为总是找不到这个,手动关联从来都没有成功!~继续在51上搜索吧?哎!~
  • 电脑使用变慢七大原因解析

    2007-10-17 08:52:19

       

        相信绝大多数用户在使用电脑的过程中都会发现电脑越用越慢,而其中的大部分人会抱着“慢就慢点儿吧”的心理继续使用,殊不知这样一来弊端会越积累越多,最后导致更严重的问题发生,下面我们就简单的来看一下几种常见的电脑变慢的原因和解决办法,希望给广大用户一些提示。


      1> 在开机时加载太多程序
      电脑在启动的过程中,除了会启动相应的驱动程序外,还会启动一些应用软件,这些应用软件我们称为随即启动程序。随机启动程序不但拖慢开机时的速度,而且更快地消耗计算机资源以及内存,一般来说,如果想删除随机启动程序,可去“启动”清单中删除,但如果想详细些,例如是QQ、msn之类的软件,是不能在“启动”清单中删除的,要去“附属应用程序”,然后去“系统工具”,再去“系统信息”,进去后,按上方工具列的“工具”,再按“系统组态编辑程序”,进去后,在“启动”的对话框中,就会详细列出在启动电脑时加载的随机启动程序了!XP系统你也可以在“运行”是输入Msconfig调用“系统配置实用程序”才终止系统随机启动程序,2000系统需要从XP中复制msconfig程序。


      2> 桌面图标太多会惹祸
      桌面上有太多图标也会降低系统启动速度。很多用户都希光将各种软件或者游戏的快捷方式放在桌面上,使用时十分方便,其实这样一来会使得系统启动变慢很多。由于windows每次启动并显示桌面时,都需要逐个查找桌面快捷方式的图标并加载它们,图标越多,所花费的时间当然就越多。同时有些杀毒软件提供了系统启动扫描功能,这将会耗费非常多的时间,其实如果你已经打开了杀毒软件的实时监视功能,那么启动时扫描系统就显得有些多余,还是将这项功能禁止吧! 建议大家将不常用的桌面图标放到一个专门的文件夹中或者干脆删除!


      3>把windows变得更苗条
      与DOS系统相比,Windows过于庞大,而且随着你每天的操作,安装新软件、加载运行库、添加新游戏以及浏览网页等等使得它变得更加庞大,而更为重要的是变大的不仅仅是它的目录,还有它的注册表和运行库。因为即使删除了某个程序,可是它使用的DLL文件仍然会存在,因而随着使用日久,Windows的启动和退出时需要加载的DLL动态链接库文件越来越大,自然系统运行速度也就越来越慢了。这时我们就需要使用一些彻底删除DLL的程序,它们可以使Windows恢复苗条的身材。建议极品玩家们最好每隔两个月就重新安装一遍windows,这很有效。


      4>桌面上不要摆放桌布和关闭activedesktop
      不知大家有否留意到,我们平时一直摆放在桌面的壁纸,其实是很浪费计算机资源的!不但如此,而且还拖慢计算机在执行应用程序时的速度!本想美化桌面,但又拖慢计算机的速度,在这时,你是否会有一种"不知怎样"的感觉呢?还有一点,不知大家有否试过,就是当开启壁纸时,每逢关闭一个放到最大的窗口时,窗口总是会由上而下、慢慢、慢慢地落,如果有这种情况出现,你必须关闭壁纸!方法是:在桌面上按鼠标右键,再按内容,然后在“背景”的对话框中,选“无”,建议在“外观”的对话框中,在桌面预设的青绿色,改为黑色……至于关闭activedesktop,即关闭从桌面上的Web画面,例如在桌面上按鼠标右键,再按内容,然后在“背景”的对话框中,有一幅壁纸布,名为windows98,那副就是Web画面了!


      5> 删除一些不必要的字体
      系统运行得慢的其中一个原因,就是字体多少的关系。安装的字体越多,就占用越多的内存,从而拖慢计算机的速度!所以我们要删除一些不必要的字体。要删除一些不必要的字型,你可到控制面板,再进去一个叫“字体”的文件夹,便可删除字体,但是要怎样才知道,那些字体有用,那些字体没用呢?例如:如果你不常到ms_dos模式的话,就删除dos 字体!因为各个人都可能喜爱某种字型,所以我也不能确定要删除那些字体,不过在这里有个秘决教你,如果你有华康粗黑字型,且又有新细明体的字型,建议你删除华康粗黑字型,如果你有新细明体,且又有细明体,就删除细明体吧!


      6>设定虚拟内存
      硬盘中有一个很宠大的数据交换文件,它是系统预留给虚拟内存作暂存的地方,很多应用程序都经常会使用到,所以系统需要经常对主存储器作大量的数据存取,因此存取这个档案的速度便构成影响计算机快慢的非常重要因素!一般win98预设的是由系统自行管理虚拟内存,它会因应不同程序所需而自 动调校交换档的大小,但这样的变大缩小会给系统带来额外的负担,令系统运作变慢!有见及此,用家最好自定虚拟内存的最小值和最大值,避免经常变换大小。要设定虚拟内存,在“我的电脑”中按右键,再按内容,到“性能”的对话框中,按“虚拟内存”,然后选择"让自已设定虚拟内存设定值",设定"最小值"为64,因为我的计算机是32mbram,所以我就设定为64,即是说,如果你的内存是64mbram,那在"最小值"中,就设为128。顺带一提,在"效能"的对话框中,选择"档案",将原先设定的" 桌上型计算机",改为"网络服务器",是会加快系统运作的;还有,在"磁盘"的对话框中,不要选"每次开机都搜寻新的磁盘驱动器",是会加快开机速度的!


      7>彻底删除程序
      大家都知道,如果想移除某些程序,可到"添加/删除程序"中移除,但大家又知不知道,它只会帮你移除程序,而不会帮你移除该程序的注册码和一些登录项目呢?这不是win98蠢,而是它在这方面不够专业,要彻底删除程序,要找回些“专业”删除软件来移除才成事!先前symantec公司出品的nortonuninstall(以下简称为nud),因为有某部份破坏了某些删除软件的版权,故此全世界已停止出售,正因如此,symantec才出了cleansweep(以下简称为cs),不过论功能上,还是nud更胜一寿!言归正传,其实除了这两个软件外,还有很多同类软件都能有效地移除程序,既然nud已绝版,那我就说cs吧。下载并安装后,如果你想移除程序,只要用cs来移除,它便会一拼移除该程序的登录项目和注册码!

  • 说不定会感动你!

    2007-09-11 13:42:30

    网络转载:

        在这五年里,没有一天不想念我的孩子。不管我如何努力让自己忘却,但总会在某一个不经意的时刻,某一个不经意的碰触,让我泪流满面。
      我喜欢男孩,我一直认为男孩比较皮实比较好养。我喜欢淘气顽皮的小男孩。
      我知道我是一个小小的小女人。并为此而自豪。
      后来,我有了儿子。有了一个真正属于自己的孩子。
      我给儿子起了一个名字叫——臭臭。
      有孩子的日子是快乐的,每个孩子给父母带来的快乐都是无价的,都是永恒和真实的。现在回想起和臭臭在一起的那段时光,我仍然能感到那一份从心底涌出的温柔。那是一种能让钢铁融化的温柔。
      还记得,刚出生时,臭臭是那样的娇小和丑陋。红红的皮肤皱皱的。像一个小老太太。我甚至不敢碰他不敢抱他。他不停地哭。饿也哭,渴也哭,拉也哭,尿也哭。很长时间我才醒悟,他所有的表达方式也只有这些了。于是开始学习怎样当一个合格的母亲,初为人母的我好像突然之间长大了,好像一下子有了责任了。因为这个小小的生命只有靠我才能存活,他只有在我的怀里才会感到安全,才会安静地睡,才会停止哭泣。
      我快乐的看着我的孩子,并真心地感谢上天赐予我这个如此美丽的小精灵。
      随着孩子一天天地长大,我发觉,原来我可以这样地温柔和宁静,可以这样地慈爱和善良,可以这样地勇敢和真诚。我的心中充满了爱,让我对每一个人都微笑。是的,我不停地发现着新的自己。
      到现在我仍然固执地认为,一个女人如果不结婚会很不完整,如果不做母亲就永远不会成为一个真正的女人。孩子会让你的心异常柔软。他那天使般的笑声可以洗涤尘世的一切污秽和烦恼,他那纯洁的眼睛会使你心灵如西藏的天空般地空灵和宁静。当你抱着他的时候,当他小小的身体信赖地依偎着你的时候,你会发现,在这个世界上你是如此地被人需要和不可缺少。当他用纯真的声音喊你妈妈的时候,你会发现你真的是世界上最最幸福的人!
      慢慢地,他开始学走路。开始他在学步车里学习。他学得很快。常常看到他的身影在家里冲来撞去。他很好奇,他看见镜子里的自己会微笑,然后亲一下,看见加湿器冒出的白烟也会伸手去抓。在我给他做饭的时候,他会把车停在厨房门口,好奇地张望。他很依赖我,不论我在哪里,他都跟着。哪怕是我在洗澡和去卫生间,他都会重重地敲打着门,在确认我在里面的情况下,安静地等待我出去。
      我现在仍清楚地记得,那是1996年的春天,五月的微风温柔地吹拂着我绿色的短风衣。明媚的阳光温暖地照耀着我,一切都暖洋洋的,我吸着芬芳的空气,迈着轻快的步伐去接我的孩子。很突然,就同被雷击中了一般,我心中涌出来的幸福压得我要窒息,那是一种暖暖的暗流,轻轻地流遍我的全身,直达到我的指间。甚至,我身上的每一寸肌肤每一个毛孔都感觉到了那种幸福。那一刻我问我自己:还有什么不满足的呢?我有一个爱我的丈夫和可爱的儿子。我是多么地幸福。那是一种真真切切的、扎扎实实的幸福。那一年我25岁,我儿子刚刚到一岁。
      快乐的我啊,丝毫没有察觉到灾难就藏在我幸福的背后。它总是在你不经意的时刻来临。
      在他一岁三个月的一天夜里,他突然哭闹起来,我和爱人一直哄着他,但他仍不停地哭,直到他哭累了,才睡去。第二天,他睁开眼睛的时候,左眼红红的。我抱他去医院检查,医生只是告诉我,点点消炎药水就好了。于是,我给孩子按时点药。但红还是没有消。快一个星期了,我又带孩子去查。这次大夫好像很紧张的样子。仔细地查了又查。最后告诉我,孩子的左眼失明。而且,怕还有别的毛病。我惊呆了!一会儿医生把我的爱人叫了进去,当爱人出来后,脸色苍白地告诉我:“臭臭可能是眼癌!”我一下就呆住了:“眼癌?不可能!一定是错了!”我抱着我的孩子走出医院。我不相信。我的孩子健康活泼,就算他的眼睛有问题了,也不可能是什么癌!我不相信!我要去北京复查!
      第二天,我和爱人带孩子去了北京。
      结果终于出来了。
      臭臭真的是视网膜母细胞瘤。真的是眼癌!
      我一下子跌坐到了地上。很久才发现我已失声痛哭。我的心中狂喊:“不可能!决不可能!”我感到血被抽干了,心被揉碎了。爱人让爷爷把孩子先带走,然后拉着我走出医院,我们拉着手,漫无目的地穿梭在北京喧闹的人流中,泪水在我脸上疯狂地流着,我无法抑制自己的悲伤。我知道茫茫人海没有人能帮助我的孩子,我也不能。医生告诉过:得这个病的孩子在走的时候两只眼睛会都瞎的,而且随着肿瘤的长大和游走,脸部要变形,会惨不忍睹的。想着孩子欢笑的脸,我不能相信这一切真的。他才一岁三个月啊,他的生命才刚刚开始,难道就要结束吗?这一切是真的吗?医生告诉我,臭臭现在可以化疗,也许还有50%的希望,但是他必须进行眼球摘除手术,包括眼眶,化疗的结果是这半边脸永远是他一岁时的脸,而那半边脸却正常生长。而且,即使手术成功化疗成功也只能活到七八岁左右。我真的很想给他化疗,当时我疯狂地抓着医生的手一个劲地喊:“给他做手术!做手术!”但我也清楚地知道,这对才一岁多的孩子来讲太痛苦了,更残忍的是如果他活到了七岁,如果他懂事以后,他的痛苦也是不可想像的,因为他难逃一死啊!
      那天晚上我和爱人作出了我们一生最难做的决定。我清楚地记得在作出这个决定时我那坚强的爱人那张没有血色的脸和悲伤的眼睛。我对我爱人狂喊:“不可以!医生说若不做手术,孩子会双目失明的,最后双眼会长出菜花一样的东西,头也要变形的,我该怎么办!当臭臭伸着双手呼唤我‘妈妈,妈妈,你在哪里?’时,我该怎么办啊?我会疯的!做手术吧!不管结果怎样,我们都不会后悔的,就算是倾家荡产,剜骨剔肉也要给他治啊!
    毕竟还有一丝的希望啊!我不能眼睁睁地看着我的孩子死去!”面对着我的歇斯底里,我爱人,我心爱的人只是使劲地抱着疯狂的我,向我吼道:“春儿,你清醒一点!你难道让臭臭长到可以质问你‘妈妈。我为什么不能活下来啊!’的时候吗?你难道让他就用一只眼睛来面对这个冷酷的事实吗?你难道让他饱受身体的摧残还要面对那些好奇的目光吗?”然后他使劲地擦了一把眼泪。
      孩子,原谅父母吧!我们是残忍的,但也是无奈的!我们必须这样决定。我们宁愿让你快快乐乐地活上一年,在你什么也不懂的时候走,也不要你受尽折磨才走。虽然我知道这个决定会让我把内疚背负一生。
      第二天晚上,我独自背着我的臭臭,躲开了亲人。我背着他走在午夜安静的城市里,一直走着,累了就休息,渴了就买瓶水。我不知道要带他去哪里,也不在乎去哪里。我只知道我要背着他走,我要和他在一起。路上,我抱着我的臭臭问他:“臭臭,妈妈爱你,你知道吗?”臭臭告诉我:“知道。”
    我流着泪告诉他:“臭臭,妈妈爱你,不管妈妈怎么做,你要知道妈妈是爱你的。”臭臭回答我:“知道。”我问他:“臭臭,你来世还做我的儿子好吗?”我的臭臭,什么话都会答的臭臭却什么也没说。我的泪水滴到了他的脸上。于是,我又换了话题问他:“臭臭,你爱我吗?”他清楚地回答:“爱。”   日子一天天地过,我还抱着一丝的幻想和希望。也许是误诊,或许会钙化。也许这一切都是梦幻。于是,我恐惧地开始一天天地观察我的孩子。他的左眼已经失明了,但还看不出来,眼里只是红红的,后来就消了,但渐渐地本来是黑色的眼仁变成了灰色。在那一年里,我每天早晨第一件事就是看孩子的眼睛,我提心吊胆地看着他睁开眼睛。如果,他向我微笑,如果,他清脆地喊我妈妈,我的一天就会很轻松很愉快地度过。但更多的时候他总是皱着小小的眉头,闭着眼睛赖在我的怀里告诉我:“妈妈,我难受。”然后不停地翻转他小小的身体。每当这时,我的心就紧缩在一起,我能做的只是抱着他,紧紧地抱着他。希望这样能减少他的疼痛。希望能把他所有的疼痛都吸附到我的身上。我不停地告诉他:“臭臭,妈妈在这里呢。不怕,妈妈在呢,妈妈抱着你呢。”然后让他在我的泪水和歌声中昏睡。我心碎啊,碎成了一片片,又被碾成粉末。每当这时,我总是痛苦地问自己:我们的决定对不对啊?我要救我的孩子啊。哪怕把我的眼睛和生命给他啊。我问苍天:为什么!为什么要让我的孩子忍受这样的折磨呢?为什么不让他一下子死去!为什么让他一点点地忍受疼痛呢?我抱着我的儿子,抱着这个柔软的小生命,这个依靠我,难受时只会喊妈妈的小生命。我很害怕,我怕自己总有一天会承受不了,我怕随着他一天天地长大,他向我诉说他的感觉,我真的怕啊。我教会他很多的故事和诗歌,但我从不教他“疼”、“痛”和有关的字词,所以,他临走的时候仍只会告诉我:“妈妈,我难受。”我知道,只有我知道这个难受的意思。那个难受里包含了多少不能忍受的折磨!我的臭臭毕竟才一岁多啊!
    还记得很久以前,有一则新闻:一个母亲在自己走投无路的情况下把孩子推到车轮下,而后自杀。新闻播出后是一片谴责那个母亲的声音。而我,可以深深体会到那个母亲的绝望和痛,因为她已准备了死亡,她不能忍受自己的孩子孤单地生活在这个世上。孩子的眼睛一天天地变化,变灰,变红,再变灰。我恐惧地看着它在不停地变化。我不止一次地想像要杀死臭臭,好结束病痛对他的折磨。我想像着给他打空气针,吃安眠药,放煤气,捂死他,或一家人*脆跳下楼。我每天骑着摩托车带着臭臭穿梭在车流不息的公路上,不止一次地想:要是有哪位好心的司机一下子把我们都撞死该多好啊。很多次我都不得不停下车来稳定一下自己想撞车的情绪。是的,我承认我是脆弱的。我无法忍受他的痛苦和我的绝望。
      我的孩子活了958天,两年7个月15天。
      我的臭臭活着的时候,他出奇地乖巧,出奇地聪明,他和同龄的孩子一样地可爱,不,甚至更机灵。他会用不同的语气来喊妈妈,来喊我的名字,他很会表达他的需要和感情,他会看眼色,会哄人。他很独特,很抢眼。不只是因为他留着童子头,也不只是他有一根长长的小辫子。而是他很活泼很有礼貌,他见到谁都称呼。他喜欢小汽车,我给他买了近百辆大小不同的小汽车,每天他都不停地摆弄他的车。是的,我溺爱他,倾我所有来满足他的愿望。看着他在不疼痛的时间认真地玩,对我是一种享受和幸福,我知道我看的日子不会很多了。
      在他病的日子里,我用了很多偏方给他治病。我带他找过气功大师,给他喝过他自己的尿液,给他吃蛤蟆的眼睛,去寺庙许愿等等。我知道我很愚昧,但是一切都没有用。臭臭仍然做了手术。因为他的眼睛里的东西已长大了,真的突出来了,他合不上眼睛。每次我帮他合眼睛的时候,看到他应该是眼球的地方已被一块灰色的东西代替的时候,我都在颤抖。我真的快崩溃了,我抓着爱人的手,狠狠地抓着,不能说话,但我爱人明白我眼里的疯狂。我知道,再这样下去,我会疯的。或者,我当时在别人的眼里已经疯了。
      臭臭被推进了手术室,他小小的身体躺在大大的床上,那么地单薄和可怜。我望着手术室的门。我的生命似乎被抽*了。我向上天默默祈祷:“让我的臭臭不要活着下来,让他死在手术台上吧。”我真的是疯了,世界上还有这样的祈祷词吗?但我当时就是那样想的。我知道,臭臭的眼睛将被挖掉。他那个眼睛的地方将是一个黑黑的窟窿。我害怕,我不知道我该怎样面对他的痛苦。他即使做了手术也是要死的,不如在麻醉中安静地没有痛苦地死去。我颤抖着。牙齿不停地打颤,身体不停地抖,止不住地抖。我的爱人拉着我的手,我们坐在手术室外的台阶上,远离人群。紧紧地握着对方的手,那是我们惟一能抓住的地方。
      手术车推了出来。我却躺到了另一张床上。我很虚弱,从心里的虚弱。我支撑着起来。我必须起来,我是母亲。我看到了他安静的身体,小小的身体。一动不动地躺在床上。我抱起他,他是那么地轻盈,我抱紧他,我怕他飞走。他的左眼蒙着一块大大的纱布。他的麻药还在起着作用。他很安静。那一刻我忽然有个幻觉:是不是他死的时候也是这样的?我狠狠地咬了一下嘴唇——不要想啊。
      臭臭疯了,他疯狂地拉着他脸上的纱布。他疼啊。麻药劲儿过去了。他挣扎着大叫:“妈妈,难受啊!妈妈啊!难受啊!”爱人用力地抓着他的手,一边喊我:“春儿,快点,帮我抓住他!不要让他把纱布拽掉!”我勉强站了起来,正在这时,臭臭挣扎着向我伸出了手并喊出了我一生中最难忘的一句话:“春儿!妈妈啊——!”那个声音是那样地凄凉和无助,又是那样地震撼!
      我终于崩溃了。我长这么大第一次晕倒了。
      当我醒来时,臭臭已被打了安定针,昏睡过去了。
      在医院的日子是没有记忆的日子,我现在仍然想不起来。不知道为什么,我现在只记得臭臭左眼睛上那一块白的刺眼的纱布。
      我曾尝试过闭上我的左眼,想看看臭臭能看到的世界。当我看到后,我感到很悲哀。真的。
      他常常用他那仅存的右眼信赖地看着我,那是一只清澈如泉水般的眼睛。眼睛里流露出的信任让我悲伤。
      我是脆弱的。我从来就没敢看我孩子那做完手术的左眼。我怕,我真的很怕。每次带孩子去换药的时候,我总是不敢进去。我躲到了眼科走廊。但我还是能听到臭臭狂喊:“妈妈——妈妈——”的声音。我躲到了电梯里,随电梯上上下下,我用力捂住自己的耳朵,但臭臭的叫声仍能听到。那无奈的喊妈妈的声音飘荡在医院的每一个角落,挥之不去。是的,我逃不掉,永远也逃不掉。每次,我抱着换完药挣扎的没力气了的臭臭,抱起满面泪痕但仍在哽咽的臭臭,抱起向我扑过来让我保护的臭臭的时候,我的心不是用一个“痛”字就能描述的。
      我问苍天:这一切都是为什么啊?
      苍天无语。
      在他做完手术后,医生告诉我臭臭还能活半年。我真的以为他能活半年呢,但只有两个月,我的臭臭就走了。
      臭臭要走了,我不知道。我真的不知道那是他要离开我的征兆。他不吃不喝,安静地躺在我的怀里,轻飘得像一片羽毛,他小小的眉头紧紧地皱着。我抱着他,只能紧紧地抱着他。而臭臭也只让我抱着。他不停地在我的怀里扭动,不停地喊:“妈妈,难受。妈妈,难受。”我抱着他,只能紧紧地抱着他。
      谁能救救我的孩子啊!
      我把臭臭送到了医院。在病房,我爱人去取住院的东西,我抱着我的孩子,抱着即将离开我的孩子,我哭了,没有任何顾及地放声哭了。我任泪水在我的脸上疯狂地流淌。我问臭臭:“为什么,为什么你要离开我!我是你的妈妈,可我为什么却救不了你啊!”是的。悲哀的不是孩子有病,是我做妈妈的救不了孩子,我只能眼睁睁地看着他离开我,却没有任何办法。在空空的病房里,我无奈的哭声在回荡。上苍有灵啊!如果泪水能唤回我的臭臭,我宁愿让我的泪流成海!如果用我的生命能救回我的孩子,我情愿死一万次!我的孩子,我的臭臭!只有他能听得到我的呼唤。但他已昏迷了。
      臭臭走了。永远地走了。真的走了。真的永远地走了!我永远记得那一天:1997年10月9日。我的灵魂被永远地带走了。
      但我仍感谢上苍。他走的时候没有像医生预言的那样,他的面貌没怎么变。虽然他的脸有些轻微的变形,但他的右眼没有失明,他临走的时候仍看得见我,他仍能准确地用他的小手紧紧地抓住我的手,他仍知道他的妈妈在他的身边——永远!
      我选择了给他火葬。老人告诉我,这样小就夭折的孩子最好埋在路边。我坚决不同意。臭臭在世的时候已饱受折磨,我不能容忍他小小的身体在冰冷的泥土中孤单地睡去,不能想像他的身体受虫蚁的侵害。我怕他冷,怕他寂寞,怕他醒来哭喊着找妈妈。我要他化成轻烟,随风散去。我要他干干净净地来,干干净净地走。
      但火葬的时候我没有去,我没敢去。我无法面对我死去的孩子,我怕自己控制不了自己。我的爱人和我的同事去送的臭臭。回来后,我望着我的爱人默默地流泪。我的爱人啊,我坚强的丈夫,在孩子有病的时候他没有哭过,但此刻,他在床上打着滚,用力抓着自己的胸膛,撕扯着衣服,放声大哭。他只是不停地告诉我:“春儿,我疼啊!我心疼啊!”我抱住他的头,他虚弱得像一个婴儿。他喃喃地告诉我:“我看到臭臭被烧的情景了,那一刻,我真的想跳进炉子里去。”我抱着我的爱人,泪水不停地流。我只能告诉他:“你真傻,你怎么能去看呢?”爱人告诉我:“我把臭臭的奶瓶放到了他的身边,还有他的小玩具陪着他。我把他从冷柜里抱出来的时候,他那个样子就像在睡觉,我亲了亲他的脸。我总感觉他马上能睁开眼睛喊爸爸似的。我把他脸上的纱布摘了,我不要他在投胎的时候还带着那块可恨的纱布。”我的泪水滴在了爱人的脸上,我心疼啊,心疼我的爱人。这个坚强的男人!第一次流露出他的脆弱,他对孩子的爱同样是那样地深沉。他一直在支撑着我。在有些时候我可以逃,但他不能。我可以哭,但他不能。我可以去述说,他不能。他只能去面对,只能选择坚强。因为他是男人。在孩子病的时候,我把全部的精力都放在了孩子身上,忽略了对爱人的关心。在以后的日子里他的同事告诉我:“他上班时总是在那里发呆,或者一个人转来转去,像疯了一样。”我的爱人啊,让我心疼的爱人啊,你不说,你什么也不说,你只是默默地独自承受这一切……
      晚上,我和爱人把臭臭所有的玩具、衣服和臭臭用过的东西,照片和我的日记,到十字路口全部烧掉了。
      我悄悄地留下了臭臭的一缕胎毛和一张他百天的照片。在那张照片上我有一张幸福的笑脸,快乐地拥抱着我的孩子。这是我留下的与臭臭的惟一的联系,也是我做过母亲的惟一纪念。再有,就是我对臭臭永远的记忆和无尽的思念。
      我仍不记得那一夜我和爱人是怎样熬过的了,那一夜我没有记忆。
      第二天上午。我把我的睡衣和爱人睡觉时常穿的背心剪了,在胸口那个地方剪的。我小心地把臭臭那少得可怜的骨灰包了起来。我期望在冥冥之中臭臭能感到温暖,感到父母的呵护和体温。但是,去埋藏孩子的时候,爱人仍没让我去,所以至今我仍不知道我心爱的臭臭的坟在哪里。
      我的孩子这一次真的走了,我今生今世也看不到他了,再也听不到他清脆的笑,再也听不到他那特有的喊妈妈的声音了。
                        除非在梦里。  

  • 不能一起吃的两种食物

    2007-07-04 09:21:55

    20种不能一起吃的食物 1. 猪肉*菱
    角——肚子痛 2. 牛肉*栗子——引起呕吐 3. 羊肉*西瓜——伤元气 4. 狗肉*绿
    豆——会中毒 5. 兔肉*芹菜——脱发 6. 鸡肉*芹菜——伤元气 7. 鹅肉*鸡蛋——伤
    元气 8. 甲鱼*苋菜——会中毒 9. 鲤鱼*甘草——会中毒 10. 螃蟹*柿子——腹泻 11.
    白酒*柿子——会胸闷 12. 红薯*柿子——会得结石 13. 糖精(片)*鸡蛋——会中
    毒、重则死亡 14. 红塘*皮蛋——会中毒 15. 洋葱*蜂蜜——伤眼睛 16. 豆腐*蜂
    蜜——耳聋 17. 萝卜*木耳——得皮炎 18. 马铃薯*香蕉——面部生斑 19. 芋头*香
    蕉——腹涨 20. 花生*黄瓜——会伤身
Open Toolbar