﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小小-随笔分类-技术文章</title><link>http://www.blogjava.net/xiaoxiao/category/34739.html</link><description>IT</description><language>zh-cn</language><lastBuildDate>Wed, 24 Feb 2010 01:18:57 GMT</lastBuildDate><pubDate>Wed, 24 Feb 2010 01:18:57 GMT</pubDate><ttl>60</ttl><item><title>ORACLE中字符串split的一种方法</title><link>http://www.blogjava.net/xiaoxiao/archive/2010/02/24/313749.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Tue, 23 Feb 2010 21:22:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2010/02/24/313749.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/313749.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2010/02/24/313749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/313749.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/313749.html</trackback:ping><description><![CDATA[一种方法是用函数：这里转帖网上摘抄的一个函数
<p>　　CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);</p>
<p>　　CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)</p>
<p>　　RETURN str_split</p>
<p>　　PIPELINED</p>
<p>　　AS</p>
<p>　　v_length&nbsp;&nbsp; NUMBER := LENGTH(p_string);</p>
<p>　　v_start&nbsp;&nbsp;&nbsp; NUMBER := 1;</p>
<p>　　v_index&nbsp;&nbsp;&nbsp; NUMBER;</p>
<p>　　BEGIN</p>
<p>　　WHILE(v_start &lt;= v_length)</p>
<p>　　LOOP</p>
<p>　　v_index := INSTR(p_string, p_delimiter, v_start);</p>
<p>　　IF v_index = 0</p>
<p>　　THEN</p>
<p>　　PIPE ROW(SUBSTR(p_string, v_start));</p>
<p>　　v_start := v_length + 1;</p>
<p>　　ELSE</p>
<p>　　PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));</p>
<p>　　v_start := v_index + 1;</p>
<p>　　END IF;</p>
<p>　　END LOOP;</p>
<p>　　RETURN;</p>
<p>　　END splitstr;</p>
<p>　　这里提供另外一种方法，<a href="http://tbw.shwel.com/">tbw</a>利用oracle的正则相关函数实现：</p>
<p>　　select dbms_lob.substr(regexp_substr('abc,def,ggg,1,2,3,4,5', '[^,]+', 1, x.n)) as player_guid</p>
<p>　　from dual a, (select rownum n from dual connect by rownum &lt; 100) x</p>
<p>　　这里利用了函数 regexp_substr和connect by</p>
<p>　　其中rownum &lt; 100 会连接限制split的次数 '[^,]+'为split拆分的正则表达式，这里为【，】逗号</p>
<p>　　上面sql语句结果是：</p>
<p>　　abc</p>
<p>　　def</p>
<p>　　ggg</p>
<p>　　1</p>
<p>　　2</p>
<p>　　3</p>
<p>　　4</p>
<p>　　5</p>
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/313749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2010-02-24 05:22 <a href="http://www.blogjava.net/xiaoxiao/archive/2010/02/24/313749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql语句实现循环添加1000个数据</title><link>http://www.blogjava.net/xiaoxiao/archive/2010/02/24/313748.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Tue, 23 Feb 2010 21:21:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2010/02/24/313748.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/313748.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2010/02/24/313748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/313748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/313748.html</trackback:ping><description><![CDATA[select * from ausertable order by userid;
<p>　　commit;&nbsp; //执行 结束</p>
<p>　　1：最近刚开始用oracle 数据库，很多东西都不怎么懂，要在<a href="http://www.shwel.com">tbw</a>账号表添加 1000个账号，找了一些资料，经过测试可以使用，开始 我吧语法 都跟SqlServer&nbsp; 里面的混了，花了一个上午的时间，下面就是测试的数据的代码：特别注意的是：'01'||to_char(i)这里 一直meiyo</p>
<p>　　DECLARE</p>
<p>　　i number:=0;</p>
<p>　　BEGIN</p>
<p>　　for i in 1..100 loop</p>
<p>　　insert into AUSERTABLE(USERID,USERPID,USERNAME)</p>
<p>　　values('01'||to_char(i),'8','武汉');</p>
<p>　　dbms_output.put_line(i);</p>
<p>　　end loop;</p>
<p>　　END;</p>
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/313748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2010-02-24 05:21 <a href="http://www.blogjava.net/xiaoxiao/archive/2010/02/24/313748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>教你如何Oracle数据导入</title><link>http://www.blogjava.net/xiaoxiao/archive/2010/02/13/312655.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Fri, 12 Feb 2010 17:58:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2010/02/13/312655.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/312655.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2010/02/13/312655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/312655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/312655.html</trackback:ping><description><![CDATA[学习Oracle时，你可能会遇到Oracle数据导入问题，这里将介绍Oracle数据导入问题的解决方法，在这里拿出来和大家分享一下。Oracle数据导入实用程序(Import utility)允许从数据库提取数据，并且将数据写入操作系统文件。imp使用的基本格式：imp[username[/password[@service]]]，以下例举imp常用用法。
<p>　　1. 获取帮助</p>
<p>　　imp help=y</p>
<p>　　2. 导入一个完整数据库</p>
<p>　　imp system/manager file=bible_db log=dible_db full=y ignore=y</p>
<p>　　3. 导入一个或一组指定用户所属的全部表、索引和其他对象</p>
<p>　　imp system/manager file=seapark log=seapark fromuser=seapark imp</p>
<p>　　system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)</p>
<p>　　4. 将一个用户所属的数据导入另一个用户</p>
<p>　　imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy</p>
<p>　　imp system/manager file=tank log=tank fromuser=(seapark,amy)</p>
<p>　　touser=(seapark1, amy1)</p>
<p>　　5. 导入一个表</p>
<p>　　imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)</p>
<p>　　6. 从多个文件导入</p>
<p>　　imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)</p>
<p>　　log=paycheck, filesize=1G full=y</p>
<p>　　7. 使用参数文件</p>
<p>　　imp system/manager parfile=bible_tables.par</p>
<p>　　Import the sample tables used for the Oracle8i Database Administrator's</p>
<p>　　Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import</p>
<p>　　8. 增量导入</p>
<p>　　imp system./manager inctype= RECTORE FULL=Y FILE=A</p>
<p>　　Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件，imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库，一个用来测试，一个用来正式使用。</p>
<p>　　执行环境：可以在SQLPLUS.EXE或者DOS(命令行)中执行，DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径，该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。oracle用java编写，SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类，完成导入导出功能。<br />
转载：<a href="http://www.mengbu.com/">http://www.mengbu.com/</a>&nbsp; 地址:<a href="http://www.mengbu.com/news/56/">http://www.mengbu.com/news/56/</a> </p>
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/312655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2010-02-13 01:58 <a href="http://www.blogjava.net/xiaoxiao/archive/2010/02/13/312655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iis rewrite 规则收集整理 精华 推荐！</title><link>http://www.blogjava.net/xiaoxiao/archive/2010/02/04/311865.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Wed, 03 Feb 2010 19:31:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2010/02/04/311865.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/311865.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2010/02/04/311865.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/311865.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/311865.html</trackback:ping><description><![CDATA[<p done0="8" done2="8" done3="8">转载请注明来源：<a href="http://www.imfeng.com/" target="_blank"><font color="#4eb0e9">枫子</font></a>整理并发布于：<a href="http://www.imfeng.com/iis-rewrite-rules-collect-isapi-rewrite/" target="_blank"><font color="#4eb0e9">http://www.imfeng.com/iis-rewrite-rules-collect-isapi-rewrite/</font></a></p>
<p>二级域名：<br />
RewriteCond Host: (?!/.|www|ww)(.*).gongluela.com<br />
RewriteRule (.*) http/://www.gongluela.com/$1$2 [I,R]</p>
<p>防盗链：<br />
ISAPI_Rewrite的httpd.ini内容写的是下面内容，如果你也遇到盗链的困扰，建议可以参考一下：</p>
<p>RewriteCond Host: (.+)<br />
RewriteCond Referer: (?!http://(?:www\.gongluela\.com|www\.imfeng\.com|www\.goboyo\.com|www\.soso\.com|www\.google\.com|cache\.baidu\.com)).+<br />
RewriteRule .*\.(?:jpg|kmz|kml|zip) /block.gif [I,O]</p>
<p>注释：第二行里面的域名是允许链接图片的网站列表，目前我允许我自己的两个站和另外bloglines、zhuaxia、google、baidu这四个网站引用我站文件，其他网站的引用被禁止。</p>
<p>　　第三行是禁止引用的文件类型，包括jpg图片、Google Earth的kmz和kml、zip文件。当然，还可以增加其他类型，比如gif、rar等，因为我站没有那些文件，所以没有添加上去。</p>
<p>下面是转载的一点文章，特转给帅哥看的。</p>
<p done0="10" done2="10" done3="10">发这个帮助文件是因为在给朋友设置主机的时候发现他们的<a href="http://www.imfeng.com/iis-rewrite-rules-collect-isapi-rewrite/" target="_blank"><font color="#4eb0e9">ISAPI Rewrite</font></a>的设置都有些不正确，有些甚至阻碍了站点的正常运行。就把官方自带的英文帮助粗略的翻译了一下。大家可以自由使用和转载。但转载时如果你愿意请注明是 蓝色 翻译的版本。</p>
<p>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />
ISAPI Rewrite 配置简介：</p>
<p>在NT/2000/XP和2003平台上，ISAPI Rewrite在系统帐户下射入INETINFO进程与 IIS 以共存模式过滤器运行。所以系统帐户应该给予对ISAPI- REWIRITE DLLS Internet匿名访问组 可读可执行权限 和所有的 HTTPD。INI 文件可读权限，还应该给予系统帐户对于所有包括 HTTPD。INI 文件的文件夹的可写权限，这将允许产生 HTTP。 PARSE。ERRORS 日志文件，来记录配置文件语法错误。对于PROXY模块也需要额外的权限，因为它将运行于连接池或HIGH-ISPLATED 应用模式，IIS帐户共享池和HIGH-ISOLATION池应被给予对RWHELPERE。DLL的可读权限。缺省情况下IWAM-《计算机名》被用于所有的池，在相应的COM+应用设置中应借助COM+ADMINISTRATION MMC SNAP-IN建立池帐户</p>
<p>配置文件格式化：</p>
<p>配置文件分为两种： GLOBAL（服务器全局模式）和 INDIVIDUAL（站点独立设置模式）文件，GLOBAL（服务器端全局模式）配置文件应该被放在ISAPI-REWRITE 安装目录中，名为 httpd.ini 。这个文件可以通过开始菜单的快捷方式访问和配置，这个文件里面的映射规则为全局规则，将针对所有站点起效。INDIVIDUAL（站点独立设置模式）配置文件应该被放在虚拟站点的根目录内，也被命名为httpd.ini文件，这里面应该放置针对站点的映射配置设置，只针对被放置的虚拟站点有效。两种类型的 httpd.ini 都是标准的windows ini 文件。所有的映射规则应该被放置在 [ISAPI_Rewrite] 之后。之前的文件文本将被忽略。<br />
HTTPD.INI文件示例</p>
<p>[ISAPI_Rewrite]</p>
<p># This is a comment</p>
<p># 300 = 5 minutes</p>
<p>CacheClockRate 300</p>
<p>RepeatLimit 20</p>
<p># 设置其他人没有下载 httpd.ini 和 httpd.parse.errors 文件的权限</p>
<p>RewriteRule /httpd(?:\.ini|\.parse\.errors) / [F,I,O]</p>
<p># Block external access to the Helper ISAPI Extension</p>
<p>RewriteRule .*\.isrwhlp / [F,I,O]</p>
<p># 配置规则</p>
<p>RewriteCond Host: (.+)</p>
<p>RewriteCond 指令</p>
<p>Syntax:（句法） RewriteCond TestVerb CondPattern [Flags]</p>
<p>这一指令定义一个条件规则，在 RewriteRule 或者 RewriteHeader或 RewriteProxy指令前预行RewriteCond指令，后面的规则只有它的，模式匹配URI的当前状态并且额外的条件也被应用才会被应用。</p>
<p>TestVerb</p>
<p>Specifies verb that will be matched against regular expression.</p>
<p>特别定义的动词匹配规定的表达式</p>
<p>TestVerb=(URL | METHOD | VERSION | HTTPHeaderName: | %ServerVariable) where:</p>
<p>URL &#8211; returns Request-URI of client request as described in RFC 2068 (HTTP 1.1);</p>
<p>返回客户端在RFC2068中描述的需求的Request-URI</p>
<p>METHOD &#8211; returns HTTP method of client request (OPTIONS, GET, HEAD, POST, PUT, Delete or TRACE);</p>
<p>返回客户端需求(OPTIONS, GET, HEAD, POST, PUT, Delete or TRACE)的HTTP方法</p>
<p>VERSION &#8211; returns HTTP version;</p>
<p>返回HTTP版本</p>
<p>HTTPHeaderName &#8211; returns value of the specified HTTP header. HTTPHeaderName can be any valid HTTP header name. Header names should include the trailing colon &#8220;:&#8221;. If specified header does not exists in a client&#8217;s request TestVerb is treated as empty string.</p>
<p>返回特定义的HTTP头文件的值</p>
<p>HTTPHeaderName =</p>
<p>Accept:</p>
<p>Accept-Charset:</p>
<p>Accept-Encoding:</p>
<p>Accept-Language:</p>
<p>Authorization:</p>
<p>Cookie:</p>
<p>From:</p>
<p>Host:</p>
<p>If-Modified-Since:</p>
<p>If-Match:</p>
<p>If-None-Match:</p>
<p>If-Range:</p>
<p>If-Unmodified-Since:</p>
<p>Max-Forwards:</p>
<p>Proxy-Authorization:</p>
<p>Range:</p>
<p>Referer:</p>
<p>User-Agent:</p>
<p>Any-Custom-Header</p>
<p>得到更多的关于HTTP头文件的和他们的值的信息参考RFC2068</p>
<p>ServerVariable 返回特定义的服务器变量的值 。例如服务器端口，全部服务器变量列表应在IIS文档中建立，变量名应用%符预定；</p>
<p>CondPattern</p>
<p>The regular expression to match TestVerb</p>
<p>规则表达式匹配TestVerb</p>
<p>[Flags]</p>
<p>Flags is a comma-separated list of the following flags:</p>
<p>O (nOrmalize)</p>
<p>Normalizes string before processing. Normalization includes removing of an URL-encoding, illegal characters, etc. This flag is useful with URLs and URL-encoded headers</p>
<p>RewriteRule 指令</p>
<p>Syntax: RewriteRule Pattern FormatString [Flags]</p>
<p>这个指令可以不止发生一次，每个指令定义一个单独的重写规则，这些规则的定义命令很重要，因为这个命令在应用运行时规则是有用途的</p>
<p>I (ignore case）</p>
<p>不管大小写强行指定字符匹配(<a href="http://www.chnjc.com/" target="_blank">http://www.chnjc.com/</a>)，这个FLAG影响RewriteRule指令和相应的RewriteCond 指令</p>
<p>F (Forbidden)</p>
<p>对客户端做反应，停止REWRITING进程并且发送403错误，注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。</p>
<p>L (last rule)</p>
<p>不应用任何重写规则在此停止重写进程，使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写</p>
<p>N (Next iteration)</p>
<p>强制REWRITINGENGINE调整规则目标并且从头重启规则检查（所有修改将保存），重启次数由RepeatLimit指定的值限制，如果这个数值超过N FLAG将被忽略</p>
<p>NS (Next iteration of the same rule)</p>
<p>以N标记工作不从相同的规则重启规则规则进程（例如强制重复规则应用），通过RepeatLimit指令指定一个反复实行某一规则的最大数目，</p>
<p>P (force proxy)</p>
<p>强制目的URI在内部强制为代理需求并且立即通过ISAPI扩展应付代理需求，必须确认代理字符串是一个有效的URI包括协议主机等等否则代理将返回错误</p>
<p>R (explicit redirect）</p>
<p>强制服务器对客户端发出重定向指示即时应答，提供目的URI的新地址，重定向规则经常是最后规则</p>
<p>RP (permanent redirect)</p>
<p>几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码</p>
<p>U (Unmangle Log)</p>
<p>当URI是源需求而不是重写需求时记载URI</p>
<p>O (nOrmalize)</p>
<p>在实行之前标准化字符串。标准化包括URL-ENCODING，不合法的字符的再移动等，这个标记对于URLS和URLS-ENDODED头是有用的</p>
<p>CL (Case Lower)</p>
<p>小写</p>
<p>CU (Case Upper)</p>
<p>大写</p>
<p>RewriteHeader directive</p>
<p>Syntax: RewriteHeader HeaderName Pattern FormatString [Flags]</p>
<p>这个指令是RewriteRule的更概括化变种，它不仅重写URL的客户端需求部分，而且重写HTTP头，这个指令不仅用于重写。生成，删除任何HTTP头，甚至改变客户端请求的方法</p>
<p>HeaderName</p>
<p>指定将被重写的客户头(<a href="http://www.yaopinwang.org/" target="_blank">http://www.yaopinwang.org/</a>)，可取的值与 RewriteCond 指令中TestVerb参数相同</p>
<p>Pattern</p>
<p>限定规则表达式以匹配Request-URI，</p>
<p>FormatString</p>
<p>限定将生成新的URI的FormatString</p>
<p>[Flags]</p>
<p>是一个下列FLAGS的命令分隔列表</p>
<p>I (ignore case）</p>
<p>不管大小写强行指定字符匹配，这个FLAG影响RewriteRule指令和相应的RewriteCond 指令</p>
<p>F (Forbidden)</p>
<p>对客户端做反应，停止REWRITING进程并且发送403错误，注意在这种情况下FORMATSTRING 是无用的并可以设置为任何非空字符串。</p>
<p>L (last rule)</p>
<p>不应用任何重写规则在此停止重写进程，使用这个FLAG以阻止当前被重写的URI被后面的规则再次重写</p>
<p>N (Next iteration)</p>
<p>强制REWRITINGENGINE调整规则目标并且从头重启规则检查（所有修改将保存），重启次数由RepeatLimit指定的值限制，如果这个数值超过N FLAG将被忽略</p>
<p>NS (Next iteration of the same rule)</p>
<p>以N标记工作不从相同的规则重启规则规则进程（例如强制重复规则应用），通过RepeatLimit指令指定一个反复实行某一规则的最大数目，</p>
<p>R (explicit redirect）</p>
<p>强制服务器对客户端发出重定向指示即时应答，提供目的URI的新地址，重定向规则经常是最后规则</p>
<p>RP (permanent redirect)</p>
<p>几乎和[R]标记相同但是发布301HTTP状态而不是302HTTP状态代码</p>
<p>U (Unmangle Log)</p>
<p>当URI是源需求而不是重写需求时记载URI</p>
<p>O (nOrmalize)</p>
<p>在实行之前标准化字符串。标准化包括URL-ENCODING，不合法的字符的再移动等，这个标记对于URLS和URLS-ENDODED头是有用的</p>
<p>CL (Case Lower)</p>
<p>小写</p>
<p>CU (Case Upper)</p>
<p>大写</p>
<p>&nbsp;</p>
<p>要重移动头，FORMAT STRING模式应该生成一个空字符串，例如这一规则将从客户请求中重移代理信息</p>
<p>RewriteHeader User-Agent: .* $0</p>
<p>并且这一规则将把OLD-URL HEADER 加入请求中。</p>
<p>RewriteCond URL (.*)RewriteHeader Old-URL: ^$ $1</p>
<p>最后一个例子将通过改变请求方法定向所有的WEBDAV请求到/WEBDAV。ASP</p>
<p>RewriteCond METHOD OPTIONS</p>
<p>RewriteRule (.*) /webdav.asp?$1</p>
<p>RewriteHeader METHOD OPTIONS GET</p>
<p>RewriteProxy directive</p>
<p>Syntax: RewriteProxy Pattern FormatString [Flags]</p>
<p>强制目的URI在内部强制为代理需求并且立即通过ISAPI扩展应付代理需求，这将允许IIS作为代理服务器并且重路由到其他站点和服务器</p>
<p>Pattern</p>
<p>限定规则表达式以匹配Request-URI，</p>
<p>FormatString</p>
<p>限定将生成新的URI的FormatString</p>
<p>[Flags]</p>
<p>是一个下列FLAGS的命令分隔列表</p>
<p>D (Delegate security)</p>
<p>代理模式将试图以当前假冒的用户资格登陆远程服务器，</p>
<p>C (use Credentials)</p>
<p done0="11" done2="11" done3="11">代理模式将试图一在URL或基本授权头文件中指定的资格登陆远程服务器，用这个标记你可以使用<a href="http://user:password@host.com/path/" target="_blank"><font color="#4eb0e9">http://user:password@host.com/path/</font></a> syntax 作为URL</p>
<p>F (Follow redirects)</p>
<p>缺省情况下ISAPI_Rewrite 将试图将MAP远程服务器返回的重定向指令到本地服务器命名空间，如果远程服务器返回重定向点到那台服务器其他的某个位置，ISAPI_Rewrite 将修改这一重定向指令指向本服务器名，这将避免用户看到真实（内部）服务器名称</p>
<p>使用F标记强制代理模式内部跟踪远程服务器返回的重定向指令，使用这个标记如果你根本不需要接受远程服务器的重定向指令，在WINHTTP设置中有重定向限制以避免远程重定向循环</p>
<p>I (ignore case)</p>
<p>不管大小写强行指定字符匹配</p>
<p>U (Unmangle Log)</p>
<p>当URI是源需求而不是重写需求时记载URI</p>
<p>O (nOrmalize)</p>
<p>在实行之前标准化字符串。标准化包括URL-ENCODING，不合法的字符的再移动等，这个标记对于URLS和URLS-ENDODED头是有用的</p>
<p>CacheClockRate directive</p>
<p>Syntax: CacheClockRate Interval</p>
<p>这个指令只在GLOBAL配置内容中出现，如果这个指令在SITE-LEVEL内容中出现将被忽略并把错误信息写入httpd.parse.errors 文件</p>
<p>ISAPI_Rewrite caches每次在第一次加载时配置(<a href="http://www.mshuba.com/" target="_blank">http://www.mshuba.com/</a>)，使用这个指令你可以限定当一个特定站点从缓存中清理的不活动周期，把这个参数设置的足够大你可以强制 ISAPI_Rewrite 永不清理缓存，记住任何配置文件的改变将在下次请求后立即更新而忽略这个周期</p>
<p>Interval</p>
<p>限定特定配置被清理出缓存的不作为时间（以秒计），缺省值3600（1小时）</p>
<p>EnableConfig and DisableConfig directives</p>
<p>Syntax:</p>
<p>EnableConfig [SiteID|"Site name"]</p>
<p>DisableConfig [SiteID|"Site name"]</p>
<p>对所选站点激活或不激活SITE-LEVEL配置或者改变缺省配置，缺省SITE-LEVEL配置不激活，这个指令只出现在GLOBAL配置内容中</p>
<p>SiteID</p>
<p>Numeric metabase identifier of a site</p>
<p>Site name</p>
<p>Name of the site as it appears in the IIS console</p>
<p>不用参数使用这个命令将改变缺省配置到ENABLE/DISABLE配置进程</p>
<p>例子</p>
<p>下面例子将使配置仅作用于ID=1（典型是缺省站点）名字是MY SITE的站点</p>
<p>DisableConfig</p>
<p>EnableConfig 1</p>
<p>EnableConfig&#8221;My site&#8221;</p>
<p>下边例子将激活名称为SOMESITE配置因为它分割设置重载了缺省设置</p>
<p>EnableConfig&#8221;Some site&#8221;</p>
<p>DisableConfig</p>
<p>EnableRewrite and DisableRewrite directives</p>
<p>Syntax:</p>
<p>EnableRewrite [SiteID|"Site name"]</p>
<p>DisableRewrite [SiteID|"Site name"]</p>
<p>对所选站点激活或不激活重写或者改变缺省配置，缺省重写配置激活，这个指令只出现在GLOBAL配置内容中</p>
<p>SiteID</p>
<p>Numeric metabase identifier of a site</p>
<p>Site name</p>
<p>Name of the site as it appears in the IIS console.</p>
<p>不使用参数这个命令将全部激活或者不激活</p>
<p>RepeatLimit directive</p>
<p>Syntax: RepeatLimit Limit</p>
<p>这个指令可以出现在GLOBAL和SITE-LEVEL配置文件中，如果出现在GLOBAL配置文件中竟改变GLOBAL对于所有站点的限制，出现在SITE-LEVEL配置中竟只改变对于这个站点的限制并且这个限制不能超过GLOBAL限制</p>
<p>ISAPI_Rewrite在实行规则时允许循环，这个指令允许限制最大可能循环的数量，可以设置为0或1而不支持循环，</p>
<p>LIMIT</p>
<p>限制最大循环数量，缺省32</p>
<p>RFStyle directive</p>
<p>Syntax: RFStyle Old | New</p>
<p>Configuration Utility</p>
<p>ISAPI_Rewrite Full包括配置功用（可以在 ISAPI_Rewrite 程序组中启动），它允许你浏览测试状态并输入注册码（如果在安装过程中没有注册），并且调整部分与代理模式操作相关的产品功能，UTILITY是由三个页面组成的属性表</p>
<p>Trial page允许你浏览TIRAL状态并输入注册码（如果在安装过程中没有注册）</p>
<p>Settings page</p>
<p>这页包含对下列参数的编辑框</p>
<p>Helper URL</p>
<p>这个参数影响过滤器和代理模块之间的联系方式，它即可以是以点做前缀的文件扩展名（如 .isrwhlp）也可以是绝对路径，</p>
<p>第一种情况下扩展名将追加在初始请求URI上并且代理模块竟通过SCRIPT MAP激活，缺省扩展名isrwhlp在安装进程中加在global script map 中，如果你改变这个扩展名或者你的应用不继承global script map 设置你应该手动添加向script map 所需求的入口。这个应该有如下参数</p>
<p>Executable: An absolute path to the rwhelper.dll in the short form</p>
<p>Extension: Desired extension (.isrwhlp is default)</p>
<p>Verbs radio button: All Verbs</p>
<p>Script engine checkbox: Checked</p>
<p>Check that file exists checkbox: Unchecked</p>
<p>我们已经创建了一个WSH script proxycfg.vbs ，可以简单在一个a script maps中注册，她位于安装文件夹并且可以在命令行一如下方式运行</p>
<p>cscript proxycfg.vbs [-r] [MetabasePath]</p>
<p>Optional -r 强制注册扩展名</p>
<p>Optional MetabasePath parameter allows specification of the first metabase key to process. By default it is &#8220;/localhost/W3SVC&#8221;.</p>
<p>要在所有现存的 script maps 中注册你可以以如下命令行激活 script</p>
<p>cscript proxycfg.vbs -r</p>
<p>&nbsp;</p>
<p>第二种情况下你应该提供一个URI作为&#8217;Helper URL&#8217;的值(<a href="http://www.gongluela.com/" target="_blank">http://www.gongluela.com/</a>)，你也应该map 一个 ISAPI_Rewrite的安装文件夹作为美意个站点的虚拟文件家</p>
<p>注意：根据顾客反应，IIS5（也许包括IIS4）对长目录名有问题。所以我们强烈推荐使用短目录名</p>
<p>Worker threads limit</p>
<p>这个参数限制在代理扩展线程池中工作线程数，缺省为0意味着这个限制等于处理器数量乘以2</p>
<p>Active threads limit</p>
<p>这个参数限制当前运行线程数，这个数量不可大于&#8221;Worker threads limit&#8221;. 缺省0意思是等于处理器数量</p>
<p>Queue size 这个参数定义最大请求数量，如果你曾经看到Queue timeout expired&#8221; 信息在 the Application event log中你可以增加这个参数</p>
<p>Queue timeout</p>
<p>这个参数定义你在内部请求队列中防止新请求的最大等待时间，如果你曾经看到Queue timeout expired&#8221; 信息在 the Application event log中你可以增加这个参数</p>
<p>Connect timeout</p>
<p>以毫秒设定代理模块连接超时</p>
<p>Send timeout</p>
<p>以毫秒设定代理模块发送超时</p>
<p>Receive timeout</p>
<p>以毫秒设定代理模块发送超时</p>
<p>About page.</p>
<p>It contains copyright information and a link to the ISAPI_Rewrite&#8217;s web site.</p>
<p>Regular expression syntax</p>
<p>这一部分覆盖了 ISAPI_Rewrite规定的表达句法</p>
<p>Literals</p>
<p>所有字符都是原意除了 &#8220;.&#8221;, &#8220;*&#8221;, &#8220;?&#8221;, &#8220;+&#8221;, &#8220;(&#8221;, &#8220;)&#8221;, &#8220;{&#8221;, &#8220;}&#8221;, &#8220;[", "]&#8220;, &#8220;^&#8221; and &#8220;$&#8221;.，这些字符在用&#8220;\&#8221;处理时是原意，原意指一个字符匹配自身</p>
<p>Wildcard</p>
<p>The dot character &#8220;.&#8221; matches any single character except null character and newline character</p>
<p>以下为句法</p>
<p>Repeats</p>
<p>A repeat is an expression that is repeated an arbitrary number of times. An expression followed by &#8220;*&#8221; can be repeated any number of times including zero. An expression followed by &#8220;+&#8221; can be repeated any number of times, but at least once. An expression followed by &#8220;?&#8221; may be repeated zero or one times only. When it is necessary to specify the minimum and maximum number of repeats explicitly, the bounds operator &#8220;{}&#8221; may be used, thus &#8220;a{2}&#8221; is the letter &#8220;a&#8221; repeated exactly twice, &#8220;a{2,4}&#8221; represents the letter &#8220;a&#8221; repeated between 2 and 4 times, and &#8220;a{2,}&#8221; represents the letter &#8220;a&#8221; repeated at least twice with no upper limit. Note that there must be no white-space inside the {}, and there is no upper limit on the values of the lower and upper bounds. All repeat expressions refer to the shortest possible previous sub-expression: a single character; a character set, or a sub-expression grouped with &#8220;()&#8221; for example.</p>
<p>Examples:</p>
<p>&#8220;ba*&#8221; will match all of &#8220;b&#8221;, &#8220;ba&#8221;, &#8220;baaa&#8221; etc.</p>
<p>&#8220;ba+&#8221; will match &#8220;ba&#8221; or &#8220;baaaa&#8221; for example but not &#8220;b&#8221;.</p>
<p>&#8220;ba?&#8221; will match &#8220;b&#8221; or &#8220;ba&#8221;.</p>
<p>&#8220;ba{2,4}&#8221; will match &#8220;baa&#8221;, &#8220;baaa&#8221; and &#8220;baaaa&#8221;.</p>
<p>Non-greedy repeats</p>
<p>Non-greedy repeats are possible by appending a &#8216;?&#8217; after the repeat; a non-greedy repeat is one which will match the shortest possible string.</p>
<p>For example to match html tag pairs one could use something like:</p>
<p>&#8220;&lt;\s*tagname[^&gt;]*&gt;(.*?)&lt;\s*/tagname\s*&gt;&#8221;</p>
<p>In this case $1 will contain the text between the tag pairs, and will be the shortest possible matching string.</p>
<p>Parenthesis</p>
<p>Parentheses serve two purposes, to group items together into a sub-expression, and to mark what generated the match. For example the expression &#8220;(ab)*&#8221; would match all of the string &#8220;ababab&#8221;. All sub matches marked by parenthesis can be back referenced using \N or $N syntax. It is permissible for sub-expressions to match null strings. Sub-expressions are indexed from left to right starting from 1, sub-expression 0 is the whole expression.</p>
<p>Non-Marking Parenthesis</p>
<p>Sometimes you need to group sub-expressions with parenthesis, but don&#8217;t want the parenthesis to spit out another marked sub-expression, in this case a non-marking parenthesis (?:expression) can be used. For example the following expression creates no sub-expressions:</p>
<p>&#8220;(?:abc)*&#8221;</p>
<p>Alternatives</p>
<p>Alternatives occur when the expression can match either one sub-expression or another, each alternative is separated by a &#8220;|&#8221;. Each alternative is the largest possible previous sub-expression; this is the opposite behaviour from repetition operators.</p>
<p>Examples:</p>
<p>&#8220;a(b|c)&#8221; could match &#8220;ab&#8221; or &#8220;ac&#8221;.</p>
<p>&#8220;abc|def&#8221; could match &#8220;abc&#8221; or &#8220;def&#8221;.</p>
<p>Sets</p>
<p>A set is a set of characters that can match any single character that is a member of the set. Sets are delimited by &#8220;[" and "]&#8221; and can contain literals, character ranges, character classes, collating elements and equivalence classes. Set declarations that start with &#8220;^&#8221; contain the compliment of the elements that follow.</p>
<p>Examples:</p>
<p>Character literals:</p>
<p>&#8220;[abc]&#8221; will match either of &#8220;a&#8221;, &#8220;b&#8221;, or &#8220;c&#8221;.</p>
<p>&#8220;[^abc] will match any character other than &#8220;a&#8221;, &#8220;b&#8221;, or &#8220;c&#8221;.</p>
<p>Character ranges:</p>
<p>&#8220;[a-z]&#8221; will match any character in the range &#8220;a&#8221; to &#8220;z&#8221;.</p>
<p>&#8220;[^A-Z]&#8221; will match any character other than those in the range &#8220;A&#8221; to &#8220;Z&#8221;.</p>
<p>Character classes</p>
<p>Character classes are denoted using the syntax &#8220;[:classname:]&#8221; within a set declaration, for example &#8220;[[:space:]]&#8221; is the set of all whitespace characters. The available character classes are:</p>
<p>alnum Any alpha numeric character.</p>
<p>alpha Any alphabetical character a-z and A-Z. Other characters may also be included depending upon the locale.</p>
<p>blank Any blank character, either a space or a tab(<a href="http://www.xbszgs.com/" target="_blank">http://www.xbszgs.com/</a>).</p>
<p>cntrl Any control character.</p>
<p>digit Any digit 0-9.</p>
<p>graph Any graphical character.</p>
<p>lower Any lower case character a-z. Other characters may also be included depending upon the locale.</p>
<p>print Any printable character.</p>
<p>punct Any punctuation character.</p>
<p>space Any whitespace character.</p>
<p>upper Any upper case character A-Z. Other characters may also be included depending upon the locale.</p>
<p>xdigit Any hexadecimal digit character, 0-9, a-f and A-F.</p>
<p>word Any word character &#8211; all alphanumeric characters plus the underscore.</p>
<p>unicode Any character whose code is greater than 255, this applies to the wide character traits classes only.</p>
<p>There are some shortcuts that can be used in place of the character classes:</p>
<p>\w in place of [:word:]</p>
<p>\s in place of [:space:]</p>
<p>\d in place of [:digit:]</p>
<p>\l in place of [:lower:]</p>
<p>\u in place of [:upper:]</p>
<p>Collating elements</p>
<p>Collating elements take the general form [.tagname.] inside a set declaration, where tagname is either a single character, or a name of a collating element, for example [[.a.]] is equivalent to [a], and [[.comma.]] is equivalent to [,]. ISAPI_Rewrite supports all the standard POSIX collating element names, and in addition the following digraphs: &#8220;ae&#8221;, &#8220;ch&#8221;, &#8220;ll&#8221;, &#8220;ss&#8221;, &#8220;nj&#8221;, &#8220;dz&#8221;, &#8220;lj&#8221;, each in lower, upper and title case variations. Multi-character collating elements can result in the set matching more than one character, for example [[.ae.]] would match two characters, but note that [^[.ae.]] would only match one character.</p>
<p>Equivalence classes</p>
<p>Equivalenceclassestakethegeneralform[=tagname=] inside a set declaration, where tagname is either a single character, or a name of a collating element, and matches any character that is a member of the same primary equivalence class as the collating element [.tagname.]. An equivalence class is a set of characters that collate the same, a primary equivalence class is a set of characters whose primary sort key are all the same (for example strings are typically collated by character, then by accent, and then by case; the primary sort key then relates to the character, the secondary to the accentation, and the tertiary to the case). If there is no equivalence class corresponding to tagname, then [=tagname=] is exactly the same as [.tagname.].</p>
<p>To include a literal &#8220;-&#8221; in a set declaration then: make it the first character after the opening &#8220;[" or "[^", the endpoint of a range, a collating element, or precede it with an escape character as in "[\-]&#8220;. To include a literal &#8220;[" or "]&#8221; or &#8220;^&#8221; in a set then make them the endpoint of a range, a collating element, or precede with an escape character.</p>
<p>Line anchors</p>
<p>An anchor is something that matches the null string at the start(<a href="http://www.jiamengku.com/" target="_blank">http://www.jiamengku.com/</a>) or end of a line: &#8220;^&#8221; matches the null string at the start of a line, &#8220;$&#8221; matches the null string at the end of a line.</p>
<p>Back references</p>
<p>A back reference is a reference to a previous sub-expression that has already been matched, the reference is to what the sub-expression matched, not to the expression itself. A back reference consists of the escape character &#8220;\&#8221; followed by a digit &#8220;1&#8243; to &#8220;9&#8243;, &#8220;\1&#8243; refers to the first sub-expression, &#8220;\2&#8243; to the second etc. For example the expression &#8220;(.*)\1&#8243; matches any string that is repeated about its mid-point for example &#8220;abcabc&#8221; or &#8220;xyzxyz&#8221;. A back reference to a sub-expression that did not participate in any match, matches the null string. In ISAPI_Rewrite all back references are global for entire RewriteRule and corresponding RewriteCond directives. Sub matches are numbered up to down and left to right beginning from the first RewriteCond directive of the corresponding RewriteRule directive, if there is one.</p>
<p>Forward Lookahead Asserts</p>
<p>There are two forms of these; one for positive forward lookahead asserts, and one for negative lookahead asserts:</p>
<p>&#8220;(?=abc)&#8221; matches zero characters only if they are followed by the expression &#8220;abc&#8221;.</p>
<p>&#8220;(?!abc)&#8221; matches zero characters only if they are not followed by the expression &#8220;abc&#8221;.</p>
<p>Word operators</p>
<p>The following operators are provided for compatibility with the GNU regular expression library.</p>
<p>&#8220;\w&#8221; matches any single character that is a member of the &#8220;word&#8221; character class, this is identical to the expression &#8220;[[:word:]]&#8221;.</p>
<p>&#8220;\W&#8221; matches any single character that is not a member of the &#8220;word&#8221; character class, this is identical to the expression &#8220;[^[:word:]]&#8221;.</p>
<p>&#8220;\&lt;&#8221; matches the null string at the start of a word.</p>
<p>&#8220;\&gt;&#8221; matches the null string at the end of the word.</p>
<p>&#8220;\b&#8221; matches the null string at either the start or the end of a word.</p>
<p>&#8220;\B&#8221; matches a null string within a word.</p>
<p>Escape operator</p>
<p>The escape character &#8220;\&#8221; has several meanings.</p>
<p>The escape operator may introduce an operator for example: back references, or a word operator.</p>
<p>The escape operator may make the following character normal, for example &#8220;\*&#8221; represents a literal &#8220;*&#8221; rather than the repeat operator.</p>
<p>Single character escape sequences:</p>
<p>The following escape sequences are aliases for single characters:</p>
<p>Escape sequence Character code Meaning</p>
<p>\a 0&#215;07 Bell character.</p>
<p>\t 0&#215;09 Tab character.</p>
<p>\v 0&#215;0B Vertical tab.</p>
<p>\e 0&#215;1B ASCII Escape character.</p>
<p>\0dd 0dd An octal character code, where dd is one or more octal digits.</p>
<p>\xXX 0xXX A hexadecimal character code, where XX is one or more hexadecimal digits.</p>
<p>\x{XX} 0xXX A hexadecimal character code, where XX is one or more hexadecimal digits, optionally a unicode character.</p>
<p done0="12" done2="12" done3="12">\cZ z-@ An ASCII escape sequence control-Z, where Z is any ASCII character greater than or equal to the character code for <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#50;&#48;&#64;" target="_blank"><font color="#4eb0e9">&#8216;@&#8217;</font></a>.</p>
<p>Miscellaneous escape sequences:</p>
<p>The following are provided mostly for perl compatibility, but note that there are some differences in the meanings of \l \L \u and \U:</p>
<p>Escape sequence Meaning</p>
<p>\w Equivalent to [[:word:]].</p>
<p>\W Equivalent to [^[:word:]].</p>
<p>\s Equivalent to [[:space:]].</p>
<p>\S Equivalent to [^[:space:]].</p>
<p>\d Equivalent to [[:digit:]].</p>
<p>\D Equivalent to [^[:digit:]].</p>
<p>\l Equivalent to [[:lower:]].</p>
<p>\L Equivalent to [^[:lower:]].</p>
<p>\u Equivalent to [[:upper:]].</p>
<p>\U Equivalent to [^[:upper:]].</p>
<p>\C Any single character, equivalent to &#8216;.&#8217;.</p>
<p>\X Match any Unicode combining character sequence, for example &#8220;a\x 0301&#8243; (a letter a with an acute).</p>
<p>\Q The begin quote operator, everything that follows is treated as a literal character until a \E end quote operator is found.</p>
<p>\E The end quote operator, terminates a sequence begun with \Q.</p>
<p>What gets matched?</p>
<p>The regular expression will match the first possible matching string, if more than one string starting at a given location can match then it matches the longest possible string. In cases where their are multiple possible matches all starting at the same location, and all of the same length, then the match chosen is the one with the longest first sub-expression, if that is the same for two or more matches, then the second sub-expression will be examined and so on. Note that ISAPI_Rewrite uses MATCH algorithm. The result is matched only if the expression matches the whole input sequence. For example:</p>
<p>RewriteCond URL ^/somedir/.* #will match any request to somedir directory and subdirectories, while</p>
<p>RewriteCond URL ^/somedir/ #will match only request to the root of the somedir.</p>
<p>Special note about &#8220;pathological&#8221; regular expressions</p>
<p>ISAPI_Rewrite uses a very powerful regular expressions engine Regex++ written by Dr. John Maddock. But as any real thing it&#8217;s not ideal: There exists some &#8220;pathological&#8221; expressions which may require exponential time for matching; these all involve nested repetition operators, for example attempting to match the expression &#8220;(a*a)*b&#8221; against N letter a&#8217;s requires time proportional to 2N. These expressions can (almost) always be rewritten in such a way as to avoid the problem, for example &#8220;(a*a)*b&#8221; could be rewritten as &#8220;a*b&#8221; which requires only time linearly proportional to N to solve. In the general case, non-nested repeat expressions require time proportional to N2, however if the clauses are mutually exclusive then they can be matched in linear time &#8211; this is the case with &#8220;a*b&#8221;, for each character the matcher will either match an &#8220;a&#8221; or a &#8220;b&#8221; or fail, where as with &#8220;a*a&#8221; the matcher can&#8217;t tell which branch to take (the first &#8220;a&#8221; or the second) and so has to try both.</p>
<p>Boost 1.29.0 Regex++ could detect &#8220;pathological&#8221; regular expressions and terminate theirs matching. When a rule fails ISAPI_Rewrite sends &#8220;500 Internal Server error &#8211; Rule Failed&#8221; status to a client to indicate configuration error. Also the failed rule is disabled to prevent performance losses</p>
<p>Format string syntax</p>
<p>In format strings, all characters are treated as literals except: &#8220;(&#8221;, &#8220;)&#8221;, &#8220;$&#8221;, &#8220;\&#8221;, &#8220;?&#8221;, &#8220;:&#8221;.</p>
<p>To use any of these as literals you must prefix them with the escape character \</p>
<p>The following special sequences are recognized:</p>
<p>Grouping:</p>
<p>Use the parenthesis characters ( and ) to group sub-expressions within the format string, use \( and \) to represent literal &#8216;(&#8217; and &#8216;)&#8217;.</p>
<p>Sub-expression expansions:</p>
<p>The following perl like expressions expand to a particular matched sub-expression:</p>
<p>$` Expands to all the text from the end of the previous match to the start of the current match, if there was no previous match in the current operation, then everything from the start of the input string to the start of the match.</p>
<p>$&#8217; Expands to all the text from the end of the match to the end of the input string.</p>
<p>$&amp; Expands to all of the current match.</p>
<p>$0 Expands to all of the current match.</p>
<p>$N Expands to the text that matched sub-expression N.</p>
<p>Conditional expressions:</p>
<p>Conditional expressions allow two different format strings to be selected dependent upon whether a sub-expression participated in the match or not:</p>
<p>?Ntrue_expression:false_expression</p>
<p>Executes true_expression if sub-expression N participated in the match, otherwise executes false_expression.</p>
<p>Example: suppose we search for &#8220;(while)|(for)&#8221; then the format string &#8220;?1WHILE:FOR&#8221; would output what matched, but in upper case</p>
<p>Escape sequences:</p>
<p>The following escape sequences are also allowed:</p>
<p>\a The bell character.</p>
<p>\f The form feed character.</p>
<p>\n The newline character.</p>
<p>\r The carriage return character.</p>
<p>\t The tab character.</p>
<p>\v A vertical tab character.</p>
<p>\x A hexadecimal character &#8211; for example \x0D.</p>
<p>\x{} A possible unicode hexadecimal character &#8211; for example \x{1A0}</p>
<p>\cx The ASCII escape character x, for example \c@ is equivalent to escape-@.</p>
<p>\e The ASCII escape character.</p>
<p>\dd An octal character constant, for example \10</p>
<p>Examples例子</p>
<p>Emulating host-header-based virtual sites on a single site</p>
<p done0="13" done2="13" done3="13">例如你在两个域名注册<a href="http://www.imfeng.com/iis-rewrite-rules-collect-isapi-rewrite/www.gongluela.com" target="_blank"><font color="#4eb0e9">www.gongluela.com</font></a> 和 <a href="http://www.imfeng.com/iis-rewrite-rules-collect-isapi-rewrite/www.jiamengku.com" target="_blank"><font color="#4eb0e9">www.jiamengku.com</font></a>，现在你可以创建两个不同的站点而使用单一的物理站点。把以下规则加入到你的httpd.ini 文件</p>
<p>[ISAPI_Rewrite]</p>
<p>#Fix missing slash char on folders</p>
<p>RewriteCond Host: (.*)</p>
<p>RewriteRule ([^.?]+[^.?/]) http\://$1$2/ [I,R]</p>
<p>#Emulate site1</p>
<p>RewriteCond Host: (?:www\.)?site1\.com</p>
<p>RewriteRule (.*) /site1$1 [I,L]</p>
<p>#Emulate site2</p>
<p>RewriteCond Host: (?:www\.)?site2\.com</p>
<p>RewriteRule (.*) /site2$1 [I,L]</p>
<p>现在你可以把你的站点放在/site1 和 /site2 目录中.</p>
<p>或者你可以应用更多的类规则：</p>
<p>[ISAPI_Rewrite]</p>
<p>#Fix missing slash char on folders</p>
<p>RewriteCond Host: (.*)</p>
<p>RewriteRule ([^.?]+[^.?/]) http\://$1$2/ [I,R]</p>
<p>RewriteCond Host: (www\.)?(.+)</p>
<p>RewriteRule (.*) /$2$3</p>
<p>为站点应该命名目录为 /somesite1.com, /somesite2.info, etc.</p>
<p>Using loops (Next flag) to convert request parameters</p>
<p done0="15" done2="15" done3="15">假如你希望有物理URL如 <a href="http://www.myhost.com/foo.asp?a=A&amp;b=B&amp;c=C" target="_blank"><font color="#4eb0e9">http://www.myhost.com/foo.asp?a=A&amp;b=B&amp;c=C</font></a> 使用请求如 <a href="http://www.myhost.com/foo.asp/a/A/b/B/c/C" target="_blank"><font color="#4eb0e9">http://www.myhost.com/foo.asp/a/A/b/B/c/C</font></a> 参数数量可以从两个请求之间变化</p>
<p>至少有两个解决办法。你可以简单的为每一可能的参数数量添加一个分隔规则或者你可以使用一个技术说明如下面的例子</p>
<p>ISAPI_Rewrite]</p>
<p>RewriteRule (.*?\.asp)(\?[^/]*)?/([^/]*)/([^/]*)(.*) $1(?2$2&amp;:\?)$3=$4$5 [NS,I]</p>
<p>这个规则将从请求的URL中抽取一个参数追加在请求字符的末尾并且从头重启规则进程。所以它将循环直到所有参数被移动到适当的位置，或者直到超过RepeatLimit</p>
<p done0="17" done2="17" done3="17">也存在许多这个规则的变种。但使用不同的分隔字符，例如。使用URLS如<a href="http://www.myhost.com/foo.asp~a~A~b~B~c~C" target="_blank"><font color="#4eb0e9">http://www.myhost.com/foo.asp~a~A~b~B~c~C</font></a> 可以应中下面的规则：</p>
<p>ISAPI_Rewrite]</p>
<p>RewriteRule (.*?\.asp)(\?[^~]*)?~([^~]*)~([^~]*)(.*) $1(?2$2&amp;:\?)$3=$4$5 [NS,I]</p>
<p>Running servers behind IIS</p>
<p done0="18" done2="18" done3="18">假如我们有一个内网服务器运行IIS而几个公司服务器运行其他平台，这些服务器不能从INTERNET直接进入，而只能从我们公司的网络进入，有一个简单的例子可以使用代理标记映射其他服务器到<a href="http://www.imfeng.com/tag/iis/" target="_blank"><font color="#4eb0e9">IIS</font></a>命名空间：</p>
<p>[ISAPI_Rewrite]</p>
<p>RewriteProxy /mappoint(.+) http\://sitedomain$1 [I,U]</p>
<p>Moving sites from UNIX to IIS</p>
<p>这个规则可以帮助你把URL从 /~username 改变到 /username 和从 /file.html 改变到 /file.htm. 这个在你仅仅把你的站从UNIX移动到IIS并且保持搜索引擎和其他外部页面对老页面的连接时是有用的</p>
<p>[ISAPI_Rewrite]</p>
<p>#redirecting to update old links</p>
<p>RewriteRule (.*)\.html $1.htm</p>
<p>RewriteRule /~(.*) http\://myserver/$1 [R]</p>
<p>Moving site location</p>
<p done0="19" done2="19" done3="19">许多网管问这样的问题：他们要重定向所有的请求到一个新的网络服务器，当你需要建立一个更新的站点取代老的的时候经常出现这样的问题，解决方案是用<a href="http://www.imfeng.com/iis-rewrite-rules-collect-isapi-rewrite/" target="_blank"><font color="#4eb0e9">ISAPI_Rewrite </font></a>于老服务器中</p>
<p>[ISAPI_Rewrite]</p>
<p>#redirecting to update old links</p>
<p>RewriteRule (.+) http\://newwebserver$1 [R]</p>
<p>Browser-dependent content</p>
<p>Dynamically generated robots.txt</p>
<p>robots.txt是一个搜索引擎用来发现能不能被索引的文件，但是为一个大站创建一个有许多动态内容的这个文件是很复杂的工作，我们可以写一个robots.asp script</p>
<p>现在使用单一规则生成 robots.txt</p>
<p>[ISAPI_Rewrite]</p>
<p>RewriteRule /robots\.txt /robots.asp</p>
<p>Making search engines to index dynamic pages</p>
<p>站点的内容存储在XML文件中，在服务器上有一个/XMLProcess.asp 文件处理XML文件并返回HTML到最终用户，URLS到文档有如下形式</p>
<p done0="20" done2="20" done3="20"><a href="http://www.mysite.com/XMLProcess.asp?xml=/somdir/somedoc.xml" target="_blank"><font color="#4eb0e9">http://www.mysite.com/XMLProcess.asp?xml=/somdir/somedoc.xml</font></a></p>
<p>但是许多公共引擎不能索引此类文档，因为URLS包含问号（文档动态生成），</p>
<p>ISAPI_Rewrite可以完全消除这个问题</p>
<p>[ISAPI_Rewrite]</p>
<p>RewriteRule /doc(.*)\.htm /XMLProcess.asp\?xml=$1.xml</p>
<p done0="21" done2="21" done3="21">现在使用如同<a href="http://www.mysite.com/doc/somedir/somedoc.htm" target="_blank"><font color="#4eb0e9">http://www.mysite.com/doc/somedir/somedoc.htm</font></a>的URL进入文档，搜索引擎将不知道不是somedoc.htm 文件并且内容是动态生成的</p>
<p>Negative expressions (NOT</p>
<p>有时当模式不匹配你需要应用规则，这种情况下你可以使用在规则表达式中称为Forward Lookahead Asserts</p>
<p>例如你需要不使用IE把所有用户移动到别的地点</p>
<p>[ISAPI_Rewrite]</p>
<p># Redirect all non Internet Explorer users</p>
<p># to another location</p>
<p>RewriteCond User-Agent: (?!.*MSIE).*</p>
<p>RewriteRule (.*) /nonie$1</p>
<p>Dynamic authentification</p>
<p>例如我们在站点上有一些成员域，我们在这个域上需要密码保护文件而我们不喜欢用BUILT-IN服务器安全，这个情况下可以建立一个ASP脚本（称为proxy.asp），这个脚本将代理所有请求到成员域并且检查请求允许，这里有一个简单的模板你可以放进你自己的授权代码</p>
<p>现在我们要通过配置 ISAPI_Rewrite 通过这个页面代理请求:</p>
<p>[ISAPI_Rewrite]</p>
<p># Proxy all requests through proxy.asp</p>
<p>RewriteRule /members(.+) /proxy.asp\?http\://mysite.com/members$1</p>
<p>保护图片 防止盗链<br />
Blocking inline-images (stop hot linking</p>
<p>假设我们在http://www.mysite.com/下有些页面调用一些GIF、jpg、png图片，不允许别人盗链引用到他们自己的页面上，因为这样大大增加了服务器流量。<br />
当然我们不能100%保护图片，但我们至少可以在得到浏览器发出的HTTP Referer header的地方限制这种情况，因为这个可以判断是否我们自己的站点调用了我们自己的图片。</p>
<p>[ISAPI_Rewrite]</p>
<p>RewriteCond Host: (.+)</p>
<p>RewriteCond Referer: (?!http://\1.*).*</p>
<p>RewriteRule .*\.(?:gif|jpg|png) /block.gif [I,O]</p>
<p done0="22" done2="22" done3="22"><span style="color: #ff0000" done0="22" done2="22" done3="22">注：ISAPI_Rewrite分精简(Lite)和完全(Full)版.精简版不支持对每个虚拟主机站点进行重写,只能进行全局处理.不过对于有服务器的朋友,精简版也就够啦.精简版下载地址:<a href="http://www.helicontech.com/download/" target="_blank"><font color="#4eb0e9">http://www.helicontech.com/download/</font></a>,就是那Lite Version (free)啦。</span></p>
<div id="digg_block">
<div id="div_digg"></div>
</div>
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/311865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2010-02-04 03:31 <a href="http://www.blogjava.net/xiaoxiao/archive/2010/02/04/311865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国内博客营销是如何的 </title><link>http://www.blogjava.net/xiaoxiao/archive/2008/10/12/233823.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Sat, 11 Oct 2008 20:03:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2008/10/12/233823.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/233823.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2008/10/12/233823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/233823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/233823.html</trackback:ping><description><![CDATA[<p>本来这篇准备写几个<strong><font color="#ff0000">博客营销</font></strong>做的比较好的案例，不过欣欣提醒我说除了广告商之外，部分博客的不认真对待是更主要的问题，因此我这里从参与话题广告的博客的角度再谈一谈自己的一些看法。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在我所见的<strong><font color="#ff0000">话题广告</font></strong>文章中，的确有部分用户只是敷衍了事，比如把广告的相关介绍抄上，然后随便写两句无关痛痒的评价了事。我在上一篇文章中强调广告主应该努力去与博客交流与对话，不过前提是建立在博客认真了解并使用相关产品，表达自己独到的见解与观点之后。只有这样，广告主与博客之间的交流与对话才有产生的条件。那怎么成为一个合格的参与话题广告的博客，个人觉得应该注意以下几点：</p>
<p>1、选择自己感兴趣的广告。不用接受一个自己毫不了解的广告然后无病呻吟一番，那样不但你写着不舒服，让你的读者看着也不舒服。</p>
<p>2、认真了解与使用产品。至少你应该看看产品的 FAQ，帮助文档，了解该产品到底有些什么功能与特点，然后试用每一项功能。因为只有这样，你的评论才是有价值的。</p>
<p>3、写文章之前先用搜索看看其他人怎么说。当然这并不是要求每一个博客都有独到的见解，不过当你尽可能多的了解其他人的评论，对自己的评论质量也是有帮助的。</p>
<p>4、按照广告要求完成文章。其实这一点是很多博客忽视的，比如加相关的申明图片和链接，达到字数要求等等，而最终导致文章得不到通过。永远记住，你参与的是一场商业活动，既然参与，你就得遵守游戏规则。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 博客与广告商应该做的我都说到了，那让我们再来看看夹在中间的 <strong><font color="#ff0000">Feedsky</font></strong> 做得怎样。前段时间 Feedsky 对所有参与话题广告的博客进行了重新定价并开始收取 50% 的手续费，很多定价降低的博客表达了强烈的不满，特别是那些数据很高，唯独在 Feedsky 中订阅数很少的博客影响最大。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我在前面提到广告商不要关心博客营销中的点击数据，而要重视与博客的交流与对话。从另一方面讲，博客的各项数据不应该成为对博客定价的唯一标准。广告商需要的是一个典型的用户，有见解的用户，能提供有价值意见的用户，而对产品的传播是次要的。而 Feedsky 应该将博客在每次参与话题广告中的表现加入到定价的考虑因素之内，而且权重要高才行。简单点说，就是写得好的，不管博客的其他数据怎样，定价会越来越高；写得差的，即便博客其他数据高，定价也会调低。而 Feedsky 已经投放了不少的话题广告，相信在这一点上也是有条件做到的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我始终都是看好话题广告的，不过这需要在这条关系链上的各方共同完善，哪一个环节出了问题影响都会很大。当然以上不管对广告商、博客还是 Feedsky 提出的意见都是个人不成熟的看法，如有不妥之处，还请大家多多指证。</p>
<p>转载：<a href="http://www.uusee5.org.cn/"><font color="#0c3785">UUSee下载</font></a>：<a href="http://www.uusee5.org.cn/"><font color="#0c3785">http://www.uusee5.org.cn/</font></a></p>
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/233823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2008-10-12 04:03 <a href="http://www.blogjava.net/xiaoxiao/archive/2008/10/12/233823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关BIOS的二十四个解答</title><link>http://www.blogjava.net/xiaoxiao/archive/2008/09/24/231006.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Wed, 24 Sep 2008 15:53:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2008/09/24/231006.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/231006.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2008/09/24/231006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/231006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/231006.html</trackback:ping><description><![CDATA[<p>文章来源：<a href="http://www.cnblogs.com/fengzi520/admin/www.yiludu.cn">一路读</a> <a href="http://www.yiludu.cn/">www.yiludu.cn</a></p>
<p>1.&nbsp;什么是可擦写(Flash)的BIOS&nbsp;?&nbsp;<br />
<br />
BIOS的发音是"bye-ose,"&nbsp;是基本输入/输出系统的缩写。BIOS是机器的硬件自带的、<br />
<br />
在电脑没有访问磁盘上程序之前决定机器基本功能的软件系统。就PC而言，BIOS&nbsp;包含了<br />
<br />
控制键盘、显示屏幕，磁盘驱动器，串行通讯设备和很多其它功能的代码。<br />
<br />
一般地，BIOS存储在主板上的ROM&nbsp;芯片（所以通常叫&nbsp;ROM&nbsp;BIOS），这确保了BIOS的<br />
<br />
一般可用性和不会因为磁盘的问题而损坏。它也确保了机器能够启动。因为RAM&nbsp;比ROM的<br />
<br />
速度快,&nbsp;很多的机器制造商设计的BIOS在机器启动时能从ROM被拷贝到RAM去运行，这项技<br />
<br />
术也叫shadowing。<br />
<br />
当今，很多PC的主板都有flash&nbsp;BIOS,&nbsp;意味这BIOS&nbsp;是存储在可重新改写的flash&nbsp;内<br />
<br />
存芯片,&nbsp;如果需要的话改写毫不费力。<br />
<br />
PC机的BIOS是标准化的，所有的PC在BIOS这一级别上是类似的(尽管因为生产商不同<br />
<br />
，BIOS的版本非常多)。而常说DOS功能是通过磁盘上的软件实现的，&nbsp;所以不用更换BIOS<br />
<br />
，你可以很简单地升级你的DOS系统。<br />
<br />
能够处理Plug-and-Play&nbsp;(PnP)&nbsp;设备的BIOS叫&nbsp;PnP&nbsp;BIOS,&nbsp;或PnP-aware&nbsp;BIOS。一般<br />
<br />
而言，flash&nbsp;BIOS都是PnP&nbsp;BIOS。<br />
<br />
<br />
2.&nbsp;怎么确定我的系统里是可擦写的BIOS（Flash&nbsp;Bios&nbsp;chip）&nbsp;?&nbsp;<br />
<br />
很简单，把机箱打开，揭开BIOS&nbsp;芯片上(一般是28&nbsp;或&nbsp;32脚的双列直插式集成电路，<br />
<br />
上面是贴的是印有BIOS生产商的封条）的封条，可以看到芯片的型号。对照下面，你就可<br />
<br />
以确定系统里是否包含可擦写的BIOS。<br />
<br />
Am29F010:&nbsp;AMD&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
Am28F010,&nbsp;Am28F010A:&nbsp;AMD&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
AT28C010,&nbsp;AT28MC010,&nbsp;AT29C010,&nbsp;AT29LC010,&nbsp;AT29MC010:&nbsp;Atmel&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
CAT28F010V5,&nbsp;CAT28F010V5I:&nbsp;Catalyst&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
CAT28F010,&nbsp;CAT28F010I:&nbsp;Catalyst&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
28F010:&nbsp;Fujitsu（富士通）&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;或&nbsp;ISSI&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
HN58C1000:&nbsp;Hitachi（东芝）&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
HN28F101,&nbsp;HN29C010,&nbsp;HN29C010B,&nbsp;HN58C1001,&nbsp;HN58V1001:&nbsp;<br />
Hitachi&nbsp;（东芝）12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
A28F010,&nbsp;28F001BX-B,&nbsp;28F001BX-T,&nbsp;28F010:&nbsp;Intel&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
M5M28F101FP,&nbsp;M5M28F101P,&nbsp;M5M28F101RV,&nbsp;M5M28F101VP:&nbsp;<br />
Mitsubishi&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
MX28F1000:&nbsp;MXIC&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
MSM28F101:&nbsp;OKI&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
KM29C010:&nbsp;Samsung&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
DQ28C010,&nbsp;DYM28C010,&nbsp;DQM28C010A:&nbsp;SEEQ&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
DQ47F010,&nbsp;DQ48F010:&nbsp;SEEQ&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
M28F010,&nbsp;M28F1001:&nbsp;SGS-Thomson&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
28EE011,&nbsp;29EE010:&nbsp;SST&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
PH29EE010:&nbsp;SST&nbsp;ROM&nbsp;Chip&nbsp;-&nbsp;可擦写（Flashable）&nbsp;<br />
TMS29F010:&nbsp;Texas-Instr.&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
TMS28F010:&nbsp;Texas-Instr.&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
W29EE011:&nbsp;Winbond&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
W27F010:&nbsp;Winbond&nbsp;12&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
X28C010,&nbsp;X28C010I,&nbsp;XM28C010,&nbsp;XM28C010I:&nbsp;XICOR&nbsp;5&nbsp;伏的&nbsp;flash&nbsp;ROM&nbsp;<br />
29LVxxx&nbsp;-&nbsp;3V&nbsp;Flash&nbsp;memory&nbsp;(较少见)&nbsp;<br />
28Cxxx&nbsp;-&nbsp;EEPROM,&nbsp;和Flash&nbsp;memory&nbsp;相似<br />
27Cxxx&nbsp;-&nbsp;With&nbsp;window.&nbsp;EPROM:&nbsp;只读,&nbsp;一次性写入。<br />
<br />
其它型号开头的字母不是28或29的芯片可能就是普通的ROM。<br />
3.&nbsp;我需要升级BIOS吗&nbsp;?&nbsp;<br />
<br />
升级BIOS有很多的理由，其中有重要的，也有不太重要的。就我们PC用户而言，最重<br />
<br />
要的原因就是和Windows&nbsp;有关。如果在一台机器上的BIOS过时了，Windows&nbsp;的配置就不会<br />
<br />
达到最佳状态。<br />
<br />
现在市场上出售的硬盘容量都会远大于528M，为了支持这些大容量硬盘，BIOS必须支<br />
<br />
持LBA&nbsp;(Logical&nbsp;Block&nbsp;Addressing，逻辑块寻址)&nbsp;的技术。如果你的&nbsp;BIOS&nbsp;不支持，而<br />
<br />
你又想使用硬盘的全部容量，就必须使用能&#8220;欺骗&#8221;BIOS的专用软件。而这些专用软件的<br />
<br />
使用会让Windows访问硬盘时采用兼容模式，造成性能的降低。<br />
<br />
为了让Windows能充分支持Plug&nbsp;'n&nbsp;Play&nbsp;的设备，你也需要&nbsp;PnP-BIOS。这也是升级<br />
<br />
BIOS的重要原因。<br />
<br />
第三个重要原因就是升级BIOS可以解决以前BIOS的错误（bugs）。<br />
<br />
其它不太重要的原因包括：BIOS有新的设置，从光驱启动机器，从SCSI设备上启动等<br />
<br />
等。<br />
<br />
4.&nbsp;从哪儿下载Flash&nbsp;BIOSs&nbsp;?&nbsp;<br />
<br />
a、各大主板厂商的BIOS更新数据相关网址&nbsp;<br />
<br />
1）华硕ASUShttp://www.asus.com.tw&nbsp;<br />
<br />
486电脑BIOS升级程序网址（&nbsp;http://www.asus.com.tw/Products/Bios/bios-486.html&nbsp;;<br />
<br />
）<br />
Pentium电脑BIOS升级程序网址（&nbsp;http://www.asus.com.tw/Products/Bios/bios-<br />
<br />
p54.html&nbsp;）<br />
Pentium&nbsp;pro和PentiumⅡ电脑BIOS升级程序网址（&nbsp;<br />
<br />
http://www.asus.com.tw/Products/Bios/bios-p6.html）<br />
<br />
2）技嘉GIGABYTEhttp://www.giga-byte.com&nbsp;;）<br />
<br />
Beta&nbsp;BIOS系列http://www.giga-byte.com/gigabyte-web/sw_bata.htm）<br />
AGP&nbsp;BIOS系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swagp.htm&nbsp;;）<br />
Intel&nbsp;440GX&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swgx.htm&nbsp;;）<br />
Intel&nbsp;440BX&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swbx.htm&nbsp;;）<br />
Intel&nbsp;440ZX&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swzx.htm&nbsp;;）<br />
Intel&nbsp;440EX&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swex.htm&nbsp;;）<br />
Intel&nbsp;440LX&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swlx1.htm&nbsp;;）<br />
Intel&nbsp;430TX&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swtx.htm&nbsp;;）<br />
VIA&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swvia.htm&nbsp;;）<br />
ALi&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swali.htm&nbsp;;）<br />
SiS&nbsp;系列（&nbsp;http://www.giga-byte.com/gigabyte-web/swsis.htm&nbsp;;）<br />
其他旧型号主板（&nbsp;http://www.giga-byte.com/gigabyte-web/swother.htm&nbsp;;）<br />
<br />
3）微星MSIhttp://www.ecs.com.tw）<br />
<br />
MS-41系列主板（&nbsp;http://www.msi.com.tw/chinese/bios/486.htm&nbsp;;）<br />
MS-51系列主板（&nbsp;http://www.msi.com.tw/chinese/bios/51.htm&nbsp;;）<br />
MS-61系列主板（&nbsp;http://www.msi.com.tw/chinese/bios/61.htm&nbsp;;）<br />
<br />
4）升技&nbsp;[ABIT]&nbsp;http://www.abit.com.tw/html/cload.htm)&nbsp;<br />
<br />
5）联尚&nbsp;[AIR]&nbsp;http://www.airwebs.com/download.html)&nbsp;<br />
<br />
6）浩鑫&nbsp;[SHUTTLE]&nbsp;(&nbsp;ftp://ftp.spacewalker.com/bios/)&nbsp;<br />
<br />
7）建基&nbsp;[AOPEN]&nbsp;http://w3.aopen.com.tw/tech/biosdrv.htm)&nbsp;<br />
<br />
8）映泰&nbsp;[BIOSTAR]&nbsp;http://192.72.144.27/service.htm)&nbsp;<br />
<br />
9）艾崴&nbsp;[IWILL]&nbsp;http://www.iwill.com.tw/csupport/index_bios.html)&nbsp;<br />
<br />
10）捷邦&nbsp;[J-BOND]&nbsp;http://www.jbond.com/companyf.html)&nbsp;<br />
<br />
11）迈科&nbsp;[MICRONICS]&nbsp;http://www.micronics.com/)&nbsp;<br />
<br />
12）梅捷&nbsp;[SOYO]&nbsp;http://www.soyo.com.tw/chinese/product/biosup.htm)&nbsp;<br />
<br />
13）丽台&nbsp;[SUPERMICRO]&nbsp;http://www.supermicro.com/download/dlframe.htm)&nbsp;<br />
<br />
14）磐英&nbsp;[EPOX]&nbsp;http://www.epox.com/support/bios.html)&nbsp;<br />
<br />
15）忆华&nbsp;[EFA]&nbsp;http://www.efa.com.tw/elec/efa/c-service.html)&nbsp;<br />
<br />
16）友通&nbsp;[DFI&nbsp;]&nbsp;http://components.dfiweb.com/support/downloads.asp)&nbsp;<br />
<br />
17）精英&nbsp;[ECS]&nbsp;http://www.ecs.com.tw/ecs/ecs/spp-m.htm)&nbsp;<br />
<br />
18）大众&nbsp;[LEO]&nbsp;http://www.fic.com.tw/techsupport/bios/index.htm)&nbsp;<br />
<br />
19）迈肯&nbsp;[MYCOMP]&nbsp;http://www.mycomp-tmc.com/BIOS.htm)&nbsp;<br />
<br />
20）福扬&nbsp;[FYI]&nbsp;http://www.fyi.com.tw/download-c.htm)&nbsp;<br />
<br />
21）中凌&nbsp;[ATREND]&nbsp;http://www.atrend.com.tw/download/frame-bios.html)&nbsp;<br />
<br />
22）海洋&nbsp;[OCTEK]&nbsp;http://www.oceanhk.com/drivers/others/biso)&nbsp;<br />
<br />
23）宏基&nbsp;[ACER]&nbsp;http://www.aopenamerica.com/tech/mainbd/default.htm)&nbsp;<br />
<br />
24）联想&nbsp;[QDI]&nbsp;http://www.qdigrp.com/driver.htm)&nbsp;<br />
<br />
25）宏鹰&nbsp;[PCCHIPS]&nbsp;http://www.pcchips.com.tw/BIOS.html)&nbsp;<br />
<br />
26）捷波&nbsp;[JETBOARD]&nbsp;http://www.jetway.com.tw/evisn/jwd/jwd01/index.html)&nbsp;<br />
<br />
27）联讯&nbsp;[DATAEXPERT]&nbsp;http://www.dataexpert.com.tw/service/)&nbsp;<br />
<br />
28）皇朝&nbsp;(&nbsp;http://megastar.kamtronic.com&nbsp;&nbsp;<br />
<br />
29）承启(&nbsp;http://www.chintech.com.tw&nbsp;&nbsp;<br />
<br />
30）钻石(&nbsp;http://www.dfiweb.com&nbsp;&nbsp;<br />
<br />
31）致福(&nbsp;http://www.gvc.com.tw&nbsp;<br />
<br />
32）英特尔(&nbsp;http://www.intel.com&nbsp;&nbsp;<br />
<br />
33）华基(&nbsp;http://www.zida.com&nbsp;&nbsp;<br />
<br />
34）麒麟(&nbsp;http://www.pcchips.com&nbsp;&nbsp;<br />
<br />
b、主要&nbsp;BIOS&nbsp;生产公司网站<br />
<br />
Award&nbsp;BIOS&nbsp;公司&nbsp;(美国)&nbsp;http://www.award.com/）<br />
Award&nbsp;BIOS&nbsp;公司&nbsp;(台湾)&nbsp;http://www.award.com.tw/）<br />
Award&nbsp;技术咨询中心&nbsp;（只限email，mailto:support@unicore.com&nbsp;）<br />
AMI&nbsp;BIOS&nbsp;公司&nbsp;http://www.amibios.com/）<br />
Microid&nbsp;Research&nbsp;http://www.mrbios.com/）<br />
Micro&nbsp;Firmware&nbsp;,&nbsp;开发并发行Phoenix&nbsp;BIOS及升级BIOS数据文件&nbsp;<br />
<br />
http://www.firmware.com/）<br />
Phoenix&nbsp;BIOS&nbsp;公司&nbsp;http://www.phoenix.com/）<br />
Unicore&nbsp;（提供BIOS升级数据文件&nbsp;，只限Award&nbsp;BIOS。&nbsp;http://www.unicore.com/<br />
5.&nbsp;主板的名称不知道怎么办&nbsp;?&nbsp;<br />
<br />
如果你的BIOS是Award&nbsp;BIOS,&nbsp;你可以向award888@ms1.hinet.net或<br />
<br />
support@unicore.com发封邮件，里面附上你的BIOS的1)&nbsp;版本号&nbsp;2)&nbsp;系列号(part&nbsp;<br />
<br />
number)&nbsp;3)&nbsp;发布日期。award的系列号包含了它所支持芯片的信息。这个信息出现在机器<br />
<br />
启动后，屏幕显示正在进行内存检验的时刻。这时按PAUSE键，就可以读系列号，BIOS的<br />
<br />
日期和版本了。不过，有的主板生产商把这个信息去除了，你只有向他们查询。<br />
<br />
6.&nbsp;如何升级我的BIOS&nbsp;?&nbsp;<br />
<br />
升级BIOS需要1)&nbsp;BIOS的读写程序（&nbsp;flasher）&nbsp;和&nbsp;2)&nbsp;BIOS的最新数据文件。读写程<br />
<br />
序将把这个数据文件写入到BIOS的芯片里。下面是不同BIOS的升级命令：<br />
<br />
awdflash&nbsp;xxx.bin&nbsp;(对&nbsp;Award&nbsp;BIOSs)<br />
amiflash&nbsp;xxx.bin&nbsp;(对&nbsp;AMI&nbsp;BIOSs)<br />
mrflash&nbsp;xxx.bin&nbsp;(对&nbsp;MRBIOSs)<br />
<br />
注意：<br />
<br />
a、&nbsp;在读写器要求你存储当前的BIOS时，选&#8220;YES&#8221;，这样在升级BIOS时如果出现问<br />
<br />
题了还可以恢复原来的BIOS。<br />
<br />
b、有些主板生产商提供自己的升级软件程序（一般不能拷贝），注意在升级前在<br />
<br />
BIOS里把&#8220;System&nbsp;BIOS&nbsp;Cacheable&#8221;的选项设为NO。<br />
<br />
c、千万不要使用错误的BIOS数据文件，否则你的机器就不能启动了。<br />
<br />
7.&nbsp;升级Award&nbsp;BIOS时出现提示&#8220;Insufficient&nbsp;memory&nbsp;（内存不足）&#8221;怎么办？<br />
<br />
解决方法有：<br />
<br />
a.&nbsp;在CMOS&nbsp;的&#8220;Chipset&nbsp;Features&#8221;的设置里，&nbsp;Disable掉&#8220;&nbsp;Video&nbsp;Bios&nbsp;<br />
<br />
Cacheable&#8221;。<br />
<br />
b.&nbsp;按&nbsp;Esc,F10,存储退出。<br />
<br />
c.&nbsp;重启动，在出现"Windows&nbsp;Starting"&nbsp;时按Ctrl+F5,这可以不加载Drvspace.bin，<br />
<br />
省了大约108K&nbsp;的内存空间。<br />
<br />
d.&nbsp;开始升级BIOS&nbsp;，重启动。<br />
<br />
e.&nbsp;重进入CMOS的&#8220;Chipset&nbsp;Features&#8221;的设置里，&nbsp;Enable&#8220;&nbsp;Video&nbsp;Bios&nbsp;<br />
<br />
Cacheable&#8221;。按&nbsp;Esc,F10,存储退出。<br />
<br />
9.&nbsp;如何恢复损坏的BIOS&nbsp;?&nbsp;<br />
<br />
方案一：利用根区BIOS（Boot-block&nbsp;BIOS）<br />
<br />
当今大多数基于AWARD&nbsp;BIOS的主板里都有根区BIOS，这是个在升级BIOS时不会被覆盖<br />
<br />
的一小部分BIOS。它只支持很基本的硬件如：软盘等。如果你的显卡是PCI的，在BIOS被<br />
<br />
损坏后你的屏幕将是漆黑一片，因为根区BIOS只支持ISA&nbsp;的显卡。<br />
<br />
根区BIOS&nbsp;可以执行可引导软盘上的AUTOEXEC.BAT。这样我们可以把Award&nbsp;flasher&nbsp;<br />
<br />
和正确的&nbsp;BIOS&nbsp;文件（*.bin&nbsp;）放在软盘上并在AUTOEXEC.BAT&nbsp;里加入BIOS升级命令。<br />
<br />
方案二:&nbsp;得到新的BIOS芯片<br />
<br />
a、联系主板生产商，看是否他们能提供BIOS芯片。有些生产商是免费提供的。<br />
<br />
b、联系卖相关芯片的电脑公司，如Unicore&nbsp;Softwarehttp://www.unicore.com/）&nbsp;<br />
<br />
或&nbsp;Midco&nbsp;Computers&nbsp;(以前的&nbsp;RC&nbsp;Systems公司http://www.midcocomputers.com/)。下<br />
<br />
面是Midco的一段广告:&nbsp;<br />
"我们向公众提供BIOS的更换芯片。请访问&nbsp;www.midcocomputers.com&nbsp;，我们将乐意帮助<br />
<br />
你。&nbsp;"<br />
<br />
方案三：热交换<br />
<br />
注意：本人不对本方法导致的任何问题负责，风险自负。<br />
<br />
用另外一块可以正常使用的BIOS芯片来更换当前损坏的芯片，而正常BIOS芯片的主板<br />
<br />
必须尽量和损坏的一致。在正常芯片的机器上先把&#8220;System&nbsp;BIOS&nbsp;cacheable&#8221;设为<br />
<br />
ENABLE，进入DOS后，把正常的芯片拔掉，用损坏的芯片来替代，然后正确地升级BIOS即<br />
<br />
可。<br />
<br />
注意：建议使用MRBIOS的读写程序，他们的产品名声最好。可以访问<br />
<br />
ftp://ftp.mrbios.com找相关软件。<br />
<br />
方案四:&nbsp;(适用于INTEL主板)&nbsp;<br />
<br />
把Flash&nbsp;Recovery&nbsp;的跳线放在recovery&nbsp;mode的位置，把可启动的BIOS升级软盘放入<br />
<br />
，启动机器。<br />
因为没被覆盖的根区BIOS不支持PCI的显卡，这时屏幕上什么都没有。你可以通过鸣笛声<br />
<br />
和软盘LED来观察。当机器响了一下，接着软盘的LED亮时，系统就正在升级你的BIOS。当<br />
<br />
软盘的LED灯灭时，说明恢复已完成，关机。把跳线恢复到缺省位置，重启动继续恢复。<br />
<br />
10.&nbsp;如果我的BIOS有问题而目前又找不到升级文件怎么办？<br />
<br />
可以试着找到主板型号不同但BIOS生产商相同的BIOS。下面的文字是从新闻组里摘录<br />
<br />
的：<br />
<br />
&#8220;最近我在本人的Triton&nbsp;芯片组的主板上进行了一系列的BIOS的测试，是为了检验<br />
<br />
一种主板能否使用不同主板生产商提供的BIOS。结论是：大多数是可以的。所以，即使是<br />
<br />
不同生产商提供的BIOS也可以一定限度地通用。<br />
<br />
实验内容：我想升级我的Amptron&nbsp;PM7700B&nbsp;主板的BIOS，版本号从v4.50PG&nbsp;BIOS&nbsp;到<br />
<br />
v4.51PG，希望能纠正电源管理方面的错误（显示器随机空白，硬盘老处于&#8220;睡眠&#8221;状态<br />
<br />
）。我的机器配置是：Maxtor&nbsp;1.6GB&nbsp;硬盘（IDE0的master模式）,&nbsp;Aztech的&nbsp;4x&nbsp;CD-ROM&nbsp;<br />
<br />
（IDE1的Slave模式）,&nbsp;SB16声卡,&nbsp;AMD&nbsp;5x86-75&nbsp;超频到90MHz&nbsp;(老式的SSA-5&nbsp;版本).&nbsp;<br />
<br />
实验里所使用的BIOS有：ASUS（华硕）460FX主板使用的Award&nbsp;v4.51PG，FIC的PT-<br />
<br />
2003&nbsp;430FX主板使用的Award&nbsp;v4.50PG，ECS&nbsp;TR5510主板使用的&nbsp;Award&nbsp;v4.51PG，还有<br />
<br />
Shuttle&nbsp;HOT-541&nbsp;主板使用的Award&nbsp;v4.51PG。<br />
<br />
请注意，如果主板生产商提供的BIOS升级程序和其他的不同（比如华硕），它就不能<br />
<br />
被用来升级别的主板的BIOS。所以，除了华硕的主板，AWDFLASH&nbsp;v5.2&nbsp;都能顺利地升级其<br />
<br />
他主板BIOS。<br />
<br />
笔者还发现，MR-BIOS的29C010.EXE&nbsp;(请使用和你的主板芯片组相符合的软件）能更<br />
<br />
新所有主板的BIOS。ftp://ftp.mrbios.com里你可以找到29C010.EXE&nbsp;和&nbsp;28F010.EXE&nbsp;<br />
<br />
，在那里长度大于60k的zip文件里有不少好的东西。<br />
<br />
结果：<br />
<br />
a、华硕（&nbsp;ASUS&nbsp;）BIOS&nbsp;工作正常,&nbsp;但内存只检测到8MB（实际上有16MB），因为内<br />
<br />
存的原因，&nbsp;Win95还&#8220;发现&#8221;了不少新的设备。<br />
<br />
b、升级了FIC&nbsp;430FX&nbsp;BIOS,&nbsp;机器不能访问软盘（尝试后，系统死机），但硬盘正常<br />
<br />
启动和工作。<br />
<br />
c、ECS&nbsp;TR5510&nbsp;BIOS&nbsp;表现最好，最终我也采用了它。它解决了电源管理的错误，还<br />
<br />
解决了以前按SHIFT-F5不能直接进入纯DOS模式的问题。（该问题估计是Amptron的&nbsp;BIOS<br />
<br />
和AMD&nbsp;5x86&nbsp;CPU不兼容的缘故）同时，在WinTune96的测试下内存和硬盘的访问速度也增<br />
<br />
加了几个MB/S。<br />
<br />
d、Shuttle&nbsp;HOT-541&nbsp;BIOS和ESC的BIOS一样，解决了同样的问题。但在win95下，不<br />
<br />
能直接检测到光驱。<br />
<br />
结论：<br />
<br />
a、所有实验用的BIOS都没有导致永久性的、不可恢复性的错误，90-100%&nbsp;的功能都<br />
<br />
正常(ECS的甚至解决了原Amptron&nbsp;BIOS的问题)。<br />
<br />
b、如果你也想尝试这样的作法，请记住一定要使用相同芯片组的BIOS升级文件，输<br />
<br />
入/输出（I/O）的芯片也要和你自己的相同。我主板上所使用的I/O&nbsp;芯片是UM8669&nbsp;。如<br />
<br />
果你的I/O芯片不同，升级后可能会导致串口不工作或更糟的结果。<br />
<br />
c、在硬盘里保存一份完好的BIOS文件和升级软件。避免如果软盘不能启动，恢复不<br />
<br />
了BIOS的情况。&nbsp;<br />
<br />
d、实验用的BIOS没有一种让我的机器变得彻底毁坏，不过你的运气就不一定这么好<br />
<br />
了。<br />
<br />
e、一般初学者不要使用不同生产商提供的BIOS，除非<br />
<br />
1)&nbsp;你有EPROM烧录器，写片BIOS芯片对你来说非常容易。<br />
2)&nbsp;你有同种类型的芯片，能非常熟练地*作&#8220;热插拔&#8221;技术。<br />
3)&nbsp;你有冒险的勇气。<br />
<br />
11.&nbsp;在Award或AMI的网站里为何没有我的BIOS的升级文件&nbsp;?&nbsp;<br />
<br />
Award&nbsp;和AMI会为特定的主板生产商提供符合特定主板和芯片组的BIOS升级文件，然<br />
<br />
后生产商再利用Award/AMI提供的工具,&nbsp;对这些BIOS文件作出最后的修改和优化。<br />
<br />
也就是说，生产商比Award/AMI更了解他们的主板，能提供更好的BIOS升级。<br />
<br />
注意：http://www.award.com.tw/download/bios/里包括了好多主板如ali、cyrix&nbsp;<br />
<br />
、intel、opti、sis&nbsp;、via的BIOS升级文件。不过你最好先在主板生产商自己的网页里找<br />
<br />
升级文件，如果没有的话，才来此处下载。<br />
<br />
12.&nbsp;在哪儿能找到我的BIOS的技术帮助&nbsp;?&nbsp;<br />
<br />
在你主板的网站上（如果有的话），有问题也可以向他们发电子邮件。<br />
<br />
13.&nbsp;PROM,&nbsp;EPROM,&nbsp;EPROM&nbsp;这些名词代表什么&nbsp;?&nbsp;<br />
<br />
PROM&nbsp;(可编程只读存储器&nbsp;programmable&nbsp;read-only&nbsp;memory)&nbsp;是数据只可写入一次的<br />
<br />
存储器芯片。一旦数据写入到PROM,&nbsp;就永久保存。不象PC系统里的内存，PROM在关机时里<br />
<br />
面的信息依然保存。<br />
<br />
PROM&nbsp;和&nbsp;ROM&nbsp;(只读存储器)&nbsp;的差异是PROM&nbsp;生产出来后是空白的存储器，而ROM在生<br />
<br />
产出来后就已经被写入信息了。要想写入到PROM&nbsp;，需要特殊的设备--PROM&nbsp;编程器或PROM&nbsp;<br />
<br />
烧录器。<br />
<br />
EPROM&nbsp;(可擦除可编程只读存储器erasable&nbsp;programmable&nbsp;read-only&nbsp;memory)属于特<br />
<br />
殊的一种&nbsp;PROM，内部的信息可以用紫外线来擦除。一旦擦除后，就可以被写入信息。<br />
<br />
而EEPROM和PROM类似,&nbsp;但擦除时需要电而不是紫外线。EEPROM(电擦除可编程只读存<br />
<br />
储器&nbsp;electrically&nbsp;erasable&nbsp;programmable&nbsp;read-only&nbsp;memory)和PROM一样，关机后信<br />
<br />
息不会消失，没有RAM快。<br />
<br />
一种特殊的EEPROM,&nbsp;称之为flash&nbsp;EEPROM,&nbsp;在电脑里可以被重写，不再需要特殊的烧<br />
<br />
录器。我们常说的可读写式BIOS的芯片就是有它们构成的。<br />
<br />
14.&nbsp;Award&nbsp;Flasher&nbsp;5.33&nbsp;有什么新的功能?&nbsp;<br />
<br />
Award&nbsp;BIOS&nbsp;的二进制数据文件的文件名一般是和BIOS系列号一致的。因为文件名的<br />
<br />
类似，用户可能偶然失误使用错误的数据文件。<br />
<br />
为了避免这个问题，在新版的&nbsp;AWDFLASH.EXE&nbsp;version&nbsp;5.33增加了检测的功能，如果<br />
<br />
它发现用户使用的数据文件和主板的型号不符就报警，报警信息是：&#8220;The&nbsp;program&nbsp;<br />
<br />
file's&nbsp;part&nbsp;number&nbsp;does&nbsp;not&nbsp;match&nbsp;with&nbsp;your&nbsp;system&nbsp;&#8221;<br />
<br />
如果你认为自己不会犯这样的错误，可以用&#8220;/Py&#8221;PASS掉检测功能：Awdflash&nbsp;<br />
<br />
2Axxxxxx.BIN&nbsp;/Py&nbsp;<br />
<br />
15.&nbsp;为何在网站里不再有MRBIOS&nbsp;的软件&nbsp;?&nbsp;<br />
<br />
因为他们不再属于共享软件了，需要请ftp://ftp.mrbios.com里找找。最新MRBIOS<br />
<br />
的版本是3.42&nbsp;。<br />
<br />
16.&nbsp;在DEBUG里如何恢复BIOS的出厂值？<br />
<br />
a、针对AMI/Award&nbsp;BIOS:<br />
<br />
C:\DEBUG&nbsp;(在纯DOS下，不是windows里的DOS窗口)<br />
-O&nbsp;70&nbsp;17<br />
-O&nbsp;71&nbsp;17<br />
Q<br />
<br />
b、针对Phoenix&nbsp;BIOS:<br />
<br />
C:\DEBUG&nbsp;(在纯DOS下，不是windows里的DOS窗口)<br />
-O&nbsp;70&nbsp;FF<br />
-O&nbsp;71&nbsp;17<br />
Q<br />
<br />
17.&nbsp;我的密码忘了，如何破解BIOS里的密码保护?&nbsp;<br />
<br />
a、针对&nbsp;Award&nbsp;BIOS:<br />
<br />
试试下面的密码:&nbsp;AWARD_SW,&nbsp;j262&nbsp;,&nbsp;HLT,&nbsp;SER,&nbsp;SKY_FOX,&nbsp;BIOSTAR,&nbsp;ALFAROME,&nbsp;<br />
<br />
lkwpeter,&nbsp;<br />
j256,&nbsp;AWARD?SW,&nbsp;LKWPETER,&nbsp;Syxz,&nbsp;aLLy,&nbsp;589589,&nbsp;589721,&nbsp;awkward,&nbsp;CONCAT<br />
<br />
也可在网上下载有关的破解程序。<br />
<br />
b、针对AMI&nbsp;BIOS:<br />
<br />
试试下面的密码:AMI,&nbsp;BIOS,&nbsp;PASSWORD,&nbsp;HEWITT&nbsp;RAND,&nbsp;AMI?SW,&nbsp;AMI_SW,&nbsp;LKWPETER,&nbsp;<br />
<br />
A.M.I.<br />
<br />
也可在网上下载有关的破解程序。<br />
<br />
18.&nbsp;AMI&nbsp;BIOS&nbsp;的鸣笛有何含义？<br />
<br />
除去8声鸣笛，其他的都会造成机器不能启动：<br />
<br />
1&nbsp;声鸣笛&nbsp;刷新失败<br />
2&nbsp;声鸣笛&nbsp;奇/偶校验错误<br />
3&nbsp;声鸣笛&nbsp;基本64K&nbsp;内存错误<br />
4&nbsp;声鸣笛&nbsp;定时器失效<br />
5&nbsp;声鸣笛&nbsp;处理器错误<br />
6&nbsp;声鸣笛&nbsp;8042&nbsp;的&nbsp;A20信号错误<br />
7&nbsp;声鸣笛&nbsp;处理器特殊中断错误<br />
8&nbsp;声鸣笛&nbsp;显存读/写错误<br />
9&nbsp;声鸣笛&nbsp;ROM&nbsp;校验错误<br />
10&nbsp;声鸣笛&nbsp;CMOS&nbsp;关闭寄存器读/写错误<br />
11&nbsp;声鸣笛&nbsp;Cache&nbsp;内存损坏<br />
<br />
19.&nbsp;如何解决上述的鸣笛错误？<br />
<br />
对1&nbsp;、&nbsp;2、3&nbsp;声鸣笛，可以试着重安装内存条，如果错误仍然存在，更换好的内存条<br />
<br />
。<br />
<br />
对4、5、7&nbsp;、10声鸣笛，到经销商处更换主板。<br />
<br />
对6声鸣笛，重新安装键盘控制器芯片。如果错误继续，更换该芯片。如果错误继续<br />
<br />
，检查和键盘有关的部件，如更换好的键盘，检查主板上是否有键盘保险丝。<br />
<br />
对8声鸣笛，&nbsp;更换显卡或显存。<br />
<br />
对9声鸣笛，更换BIOS芯片。<br />
<br />
如果没有任何鸣笛，而显示器上漆黑一片，先检查电源，连接主板上的POWER&nbsp;LED到<br />
<br />
LED上，如果LED亮，而驱动器有转动的声音就说明电源是好的。<br />
<br />
接着，检查主板上有没有松动的部件。松动的处理器，BIOS芯片，晶振或芯片组都能<br />
<br />
导致主板不工作。<br />
<br />
接着，除了显卡，把所有的插卡都拔掉。这时系统至少能加电并出现显卡信息。然后<br />
<br />
，再一次一个地插卡，直到问题出现。<br />
<br />
上述方法失效的话，只有到经销商更换主板了。<br />
<br />
20.&nbsp;如何在MRBIOS里插入NCR&nbsp;SCSI&nbsp;BIOS&nbsp;v3.07&nbsp;或&nbsp;4.03&nbsp;？<br />
<br />
其实很简单，不过针对不同版本的mr&nbsp;bios方法也不同。<br />
<br />
首先，到Windows95.com&nbsp;下载'Hex&nbsp;Workshop'，它能在二进制状态下编辑文件。插入<br />
<br />
SCSI&nbsp;BIOS的原理就是把&nbsp;mr&nbsp;bios前面没用的空间删除，在附加上NCR&nbsp;的flash&nbsp;BIOS，然<br />
<br />
后存储文件。<br />
<br />
尽管mr&nbsp;bios&nbsp;网站上说它的BIOS大小是92k，可下载后文件长度要大于这个值。用上<br />
<br />
述的二进制编辑软件把它前面的空格删除，以保正长度为92k。再将NCR&nbsp;v3.07&nbsp;的BIOS&nbsp;追<br />
<br />
加上，这样文件长度就是108k&nbsp;(92k&nbsp;+&nbsp;16k&nbsp;NCR&nbsp;v3.07&nbsp;)，&nbsp;也可追加32k的&nbsp;NCR&nbsp;v4.03，<br />
<br />
长度是124k.&nbsp;<br />
<br />
<br />
21.&nbsp;如何对INTEL&nbsp;OEM主板升级它的Intel&nbsp;AMI&nbsp;BIOS？&nbsp;<br />
<br />
比如：想把1.00.xx.CB0H&nbsp;升级到1.00.xx.CB0。"1.00.xx.CB0H"里的H表示这是INTEL<br />
<br />
为其他主板生产商（此处代表VOBIS公司）制造的OEM主板，所以下面的方法也适用于任何<br />
<br />
使用AMI&nbsp;BIOS的INTEL&nbsp;OEM主板&nbsp;，比如从1.00.xx.BC0R升级到1.00.xx.BC0。<br />
<br />
背景资料：<br />
<br />
"1.00.xx.CB0"的BIOS是AMI为Intel的主板芯片组特制的(也叫"Advanced-E/V"主板)<br />
<br />
，然后主板生产商VOBIS再对它作稍微的修改，称之为"1.00.xx.CB0H"。很可能字母"H"代<br />
<br />
表&nbsp;他们生产PC上标注的"HIGHSCREEN"&nbsp;。所以，我们可以使用常见的AMI的BIOS来升级它<br />
<br />
。<br />
<br />
你可以ftp://download.intel.nl/design/motherbd/ev/里下载"1.00.xx.CB0"的<br />
<br />
BIOS版本，版本号为02,&nbsp;03,&nbsp;04,&nbsp;05&nbsp;和&nbsp;06&nbsp;。如果你现在试着用这些BIOS，就会有错误<br />
<br />
信息：&nbsp;"the&nbsp;data&nbsp;are&nbsp;corrupt&nbsp;or&nbsp;you&nbsp;are&nbsp;using&nbsp;a&nbsp;wrong&nbsp;BIOS"（数据错误或BIOS文<br />
<br />
件有误）。原因就是INTEL提供的BIOS的ID字符串只是1.00.02.CB0，与机器中现有的<br />
<br />
1.00.02.CB0H不符,所以升级程序不执行，升级失败。<br />
<br />
解决方法：<br />
<br />
a.&nbsp;下载和目前机器里版本号相同的1.00.02.CB0&nbsp;和最新版本号的1.00.06.CB0。<br />
<br />
b.&nbsp;按照网页"http://developer.intel.com/design/motherbd/genbios.htm";的指令<br />
<br />
，创建2张启动盘，一个版本号一个。<br />
<br />
c.&nbsp;在1.00.02.CB0的软盘里，有文件"1002cb0_.bio"&nbsp;和"1002cb0_.bi1"。用文本编<br />
<br />
辑器把里面的"CB0&nbsp;"&nbsp;(注意CB0后面的空格不能省略)&nbsp;替换为&nbsp;"CB0H"。每个文件只有一个<br />
<br />
，只能替换一处。<br />
<br />
d.&nbsp;用修改的启动盘引导机器，令人惊奇的是现在机器的BIOS-ID&nbsp;变成了1.00.02.CB0&nbsp;<br />
<br />
，而不是1.00.02.CB0H。<br />
<br />
e.&nbsp;用另一张启动盘（1.00.06.CB0）引导，并升级成功，当前的BIOS版本是<br />
<br />
1.00.06.CB0。<br />
<br />
注意：<br />
<br />
a.&nbsp;Intel提供的升级软件有保存当前BIOS的功能，应该使用它并创建一启动盘。这样<br />
<br />
升级出现问题时，可以利用主板提供的BIOS-recovery跳线，来恢复原来的BIOS。<br />
<br />
b.&nbsp;有可能直接修改06版本号的启动盘，而升级成功。<br />
<br />
c.&nbsp;如果VOBIS不仅往BIOS里添加了他们的公司名，还作了功能性的修改，上述的*作<br />
<br />
就有一定的风险。<br />
<br />
22.&nbsp;如何对INTEL&nbsp;OEM主板升级它的Intel&nbsp;Phoenix&nbsp;BIOS&nbsp;？<br />
<br />
a、到INTEL的网站上下载针对该主板的最新的BIOS，把它放在一张可启动的软盘里。<br />
<br />
b、进入BIOS，&nbsp;enable选项'Check&nbsp;for&nbsp;User&nbsp;Flash&nbsp;ROMS'&nbsp;，并关机。<br />
<br />
c、把主板上的BIOS跳线设置为RECOVERY模式。将启动盘放入引导机器，它将自动进<br />
<br />
入恢复程序，并加载软盘里最新的BIOS。<br />
<br />
d、关机，恢复BIOS跳线到正常模式，开机即可。<br />
<br />
23.&nbsp;如何更换Award&nbsp;BIOS启动时的EPA&nbsp;logo&nbsp;画面？<br />
<br />
a、首先，要有BIOS数据文件（&nbsp;*.BIN&nbsp;）用来先编辑再写入BIOS里，要确认该文件和<br />
<br />
你主板是对应的。<br />
<br />
b、http://members.aol.com/mrosenb257/下载BMPtoEPA，&nbsp;BMPtoEPA是个自由软件<br />
<br />
，运行于Windows9x下，能把BMP&nbsp;文件转换为EPA&nbsp;。<br />
<br />
c、有了需要的EPA&nbsp;文件后，要找到专用软件CBROM&nbsp;或&nbsp;CBROM6，它能把EPA文件放在<br />
<br />
*.BIN文件里，格式为：cbrom&nbsp;*.BIN&nbsp;/EPA&nbsp;savedEPA.epa&nbsp;（*.BIN&nbsp;是BIOS数据文件，<br />
<br />
savedEPA.epa是需要的EPA文件）。另外，CBROM&nbsp;适用于Award&nbsp;V4.51&nbsp;，而CBROM6适用于<br />
<br />
Award&nbsp;V6.0&nbsp;。<br />
<br />
d、现在就可以升级你的BIOS了，成功后EPA&nbsp;logo画面就变成你需要的了。<br />
<br />
24.&nbsp;如何在windows里避免&#8220;IRQ&nbsp;Routing&nbsp;Table&nbsp;errors&#8221;？<br />
<br />
如果你主板使用的是VIA芯片组，就需要安装最新的VIA&nbsp;IRQ&nbsp;Routing的补丁软件<br />
<br />
http://www.via.com.tw/）。<br />
<br />
如果还不行，就在BIOS里disable掉&nbsp;'OnChip&nbsp;USB'。如果成功的话，就应和主板生产<br />
<br />
商联系获得最新的BIOS。（比如，Shuttle&nbsp;HOT591P&nbsp;主板就有这种情况，升级BIOS后就没<br />
<br />
问题了。）</p>
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/231006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2008-09-24 23:53 <a href="http://www.blogjava.net/xiaoxiao/archive/2008/09/24/231006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员创业失败的16个原因 </title><link>http://www.blogjava.net/xiaoxiao/archive/2008/09/24/230796.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Tue, 23 Sep 2008 18:51:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2008/09/24/230796.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/230796.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2008/09/24/230796.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/230796.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/230796.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;来源：<a href="http://www.yiludu.cn/"><u><font color="#810081">一路读</font></u></a> &nbsp;<a href="http://www.yiludu.cn/"><u><font color="#810081">http://www.yiludu.cn/</font></u></a></p>
<p>&nbsp;&nbsp;&nbsp; 1) &nbsp; 没有明确的生活目标。没有奋斗的中心目标或明确的努力主向，就没有成功的希望。 <br />
<br />
　　2) &nbsp; 没有非同寻常的雄心抱负。 <br />
<br />
　　如果对凡事漠不关心，不想在人生中求发展，不愿付出代价，那么这样的人也将成功无望。 <br />
<br />
　　3) &nbsp; 缺乏自律。 <br />
<br />
　　纪律来自自我控制，这意味着人必须控制所有的消极思想，只能先控制自己，才能控制环境。自制是人类面对的最艰巨任务，如果无法战胜自我，就会被自我征服。 <br />
<br />
　　4) &nbsp; 拖拉。 <br />
<br />
　　这是失败最普遍的原因之一，拖拉&#8220;老人&#8221;存在于每个人心中的阴暗角落，正是因为一直都在等待&#8220;适当时机&#8221;，才开始做那些值得做的事情，其实时机永远不会&#8220;适当&#8221;。 <br />
<br />
　　5) &nbsp; 缺乏毅力。 <br />
<br />
　　不管做什么，大部份人开始时都满怀信心，但却不能善始善终。大部份人一遇到失败就容易放弃。毅力是不可取代的。把毅力当座右铭奉行到底的人，发现失败会自行退下，失败是无法对抗毅力的。 <br />
<br />
　　6) &nbsp; 消极的个性。 <br />
<br />
　　因为消极的个性，而将别人拒于千里之外者，不会有成功的希望。成功来自力量的运用，而力量又来自与他人的合作，消极的个性无法促成合作。 <br />
<br />
　　7) &nbsp; 无法克制&#8220;不劳而获&#8221;的欲望。这种机体本能使很多人走向失败。 <br />
<br />
　　8) &nbsp; 缺乏果断的决策力。 <br />
<br />
　　成功的人士会果断决策，然后如果有必要，再慢慢改进。失败者往往花很长时间才能作出决策，但很快就需要修改，而且要频繁修改。犹豫和拖拉是一对双包胎，只要找到其中一个就一定能找到另一个，所以必须趁它们没有将你完全束缚在失败的车轮上，果断地把它们消灭。 <br />
<br />
　　9) &nbsp; 过度谨慎。 <br />
<br />
　　不主动抓住机会的人往往只能捡别人挑剩的机会，过度谨慎和不够谨慎都不可取，人生本来就充满偶然成分。 <br />
<br />
　　10) &nbsp; 迷信与偏见。 <br />
<br />
　　迷信是恐惧的一种形式，也是无知的表现，成功人士心胸宽广，无所畏惧。 <br />
<br />
　　11) &nbsp; 目标不专。&#8220;万事通，万事松&#8221;，要全心全意专注于一个主要目标。 <br />
<br />
　　12) &nbsp; 缺乏热情。 <br />
<br />
　　没有热情，一个人就没有说服力，而且热情有一种感染力，一个人如果拥有热情，并能适当控制热情，往往会受到人们的欢迎。 <br />
<br />
　　13) &nbsp; 偏执。心胸狭窄很难取得任何进步，偏执说明一个人不积极获取知识。 <br />
<br />
　　14) &nbsp; 蓄意不忠。 <br />
<br />
　　诚实是一种不可替代的品质，受无法控制的环境所迫，一个人可能一时不忠诚，也不会带来永久的破坏。但是，如果一个人蓄意不忠，则无药可救。他的得行为迟早会被发现，他负出的代价可能是失去信誉，甚至失去自由。 <br />
<br />
　　15) &nbsp; 自私和虚荣。这些品质问题好比亮起红灯，让人不敢靠近，是妨碍成功的致命因素。 <br />
<br />
　　16) &nbsp; 猜测而不思考。 <br />
<br />
　　多数人往往漫不经心或者过于懒惰，不愿费心获取用于准确思考的事实。他们喜欢根据猜测或仓促得出的&#8220;结论&#8221;了事。观念改变人生!选择决定未来!行动决定成败!</p>
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/230796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2008-09-24 02:51 <a href="http://www.blogjava.net/xiaoxiao/archive/2008/09/24/230796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初用Google Gears 有感</title><link>http://www.blogjava.net/xiaoxiao/archive/2008/09/21/230206.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Sat, 20 Sep 2008 17:12:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2008/09/21/230206.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/230206.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2008/09/21/230206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/230206.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/230206.html</trackback:ping><description><![CDATA[<p>文章来源：<a href="http://www.yiludu.cn/"><font color="#000000">一路读</font></a> <a href="http://www.yiludu.cn/"><font color="#000000">http://www.yiludu.cn/</font></a> </p>
<p>做了一些年的web开发，见到了一些web技术的革新和进步.作为从事b/s开发的人来说，是很欣慰的。<br />
以前出现了一种ajax技术，应该是很有革新意义的，<br />
Ajax应用程序的优势在于：<br />
　　1. 通过异步模式，提升了用户体验<br />
　　2. 优化了浏览器和服务器之间的传输，减少不必要的数据往返，减少了带宽占用<br />
　　3. Ajax引擎在客户端运行，承担了一部分本来由服务器承担的工作，从而减少了大用户量下的服务器负载。<br />
<br />
今天我说的google gears,我想也是一个技术革新.<br />
<br />
最近的项目遇到一个问题，使用cdma网络，对某一个数据的输入需要实现google那样输入快速连动显示的功能，<br />
而数据量又有点大，要快速连动，几乎不可能.<br />
<br />
所以只能考虑一些新的技术，这就是google gears了。将数据库本地化.<br />
http://code.google.com/apis/gears/sample.html<br />
这里有简单详细的例子，试用的感觉的确是不错的。<br />
<br />
他含有3个重要的模块。<br />
1，Database module就是本地数据，可以使用标准的sql语法操作，比如建表查询删除等等。<br />
这样很多常用数据我们都可以本地化存储，不用每次都从server端下载，<br />
提升了用户体验,减少不必要的数据往返.<br />
特别是对网络环境不好的。如果用户在操作的时候断网络，就可以把输入的数据现保存到本地库，<br />
后期网络正常后在同步。<br />
<br />
2，LocalServer module就是本地服务器，大家都知道b/s的文件都是存放在server端的，<br />
不存在什么客户端，如果网络出了什么问题，那么系统也就不能访问了,<br />
LocalServer module就是为让断网的时候依然可以使用b/s系统，他将server端的一些文件存储到本地.<br />
比如我们要登记一个资料，以前没有b/s的系统断网了肯定不行，录入的界面打不开，打开了也无法录入提交到服务器.<br />
用了LocalServer module,我们就可以在断网的情况下打开录入界面，然后录入，然后使用Database module存储，<br />
网络好了的时候在同步，我们也不用总是担心数据没及时录入以免以后就忘记录入了。<br />
(这一点我们暂时没有使用，和界面的设计有些关系，对我们的系统不太容易应用，有些界面暂时没办法本地化)<br />
<br />
3,WorkerPool module.工作者池，这是一个最重要的模块，用过pool技术的都知道，<br />
就是pool中的各个主体独自工作，这里的pool是实现了让多个js在后台异步运行互不干涉.<br />
这样用户在使用系统的时候，是感受不到有js在运行的，以前js运行的时候，界面都是不可操作的，<br />
必须要等js运行完了，才能做其他操作，使用WorkerPool module就可以解决这个问题，<br />
比如在我们的系统中，要把服务器的数据库（某个表）本地化，大概需要1个小时，<br />
如果使用传统的js来操作，界面就要运行一个小时(可能没有响应)，ie基本都是白屏.<br />
这显然是行不通的了，所有我们只能用WorkerPool module,在用户没有感觉的情况下，<br />
在后台通过ajax分段获取到服务器的数据，然后启动WorkerPool module写入，效果感觉非常的不错。<br />
<br />
<br />
以上就是自己试用(也算是正式的用了)后的一点感受，和大家一起分享。<br />
<br />
web开发，真的是其乐无穷。感谢哪些技术牛人。</p>
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/230206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2008-09-21 01:12 <a href="http://www.blogjava.net/xiaoxiao/archive/2008/09/21/230206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>真正技术高手是如何炼成的? </title><link>http://www.blogjava.net/xiaoxiao/archive/2008/09/21/230205.html</link><dc:creator>小小it</dc:creator><author>小小it</author><pubDate>Sat, 20 Sep 2008 17:09:00 GMT</pubDate><guid>http://www.blogjava.net/xiaoxiao/archive/2008/09/21/230205.html</guid><wfw:comment>http://www.blogjava.net/xiaoxiao/comments/230205.html</wfw:comment><comments>http://www.blogjava.net/xiaoxiao/archive/2008/09/21/230205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaoxiao/comments/commentRss/230205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaoxiao/services/trackbacks/230205.html</trackback:ping><description><![CDATA[<p>在由CSDN和《程序员》杂志联合举办的第三届中国软件技术英雄会(上海站)上，由主持人CSDN首席分析师孟岩，上海群硕大中华区软件开发总监邵荣，阿里软件技术总监叶伟，盛大游戏首席技术官朱继盛， 趋势科技(中国)有限公司技术总监蔡昇钦，巨人网络集团首席技术官CTO宋仕良，淘宝网首席架构师王文彬共同参与的CTO论坛上，就有关CTO是否必须为技术高手，从程序员到技术高手成长之路，知名互联网公司如何招聘人才等问题与参会者进行了深入的交流。</p>
<p>精彩观点：<br />
我觉得CTO并不必须是技术大拿，大家今天可以看到，从CTO的定义来看，CTO的角色是用技术服务公司的商业模式。从这个定义，只要你对技术有相当性的掌握，其实你可以不必从底层做起。——王文彬</p>
<p>CTO很重要的目标是在于它能够整合公司的商业能力，成为一个CTO的重点，是你对公司核心技术的了解度跟掌握度，还有公司主要的核心业务的掌握度。——蔡昇钦</p>
<p>技术高手和CTO这两个角色，打个比方，像一个乐队里面，技术高手像小提琴演奏者，或者是一个钢琴演奏者，但是CTO相当于一个乐队的总指挥，乐队的指挥需要有对音乐的整体感觉，这方面肯定更拿手。——朱继盛</p>
<p>CTO还是应该是一个内功高手，还是要有点内功，这说明什么，你在技术方面，应该有技术的洞察力，要看到商业和技术的结合。——叶伟</p>
<p>跟技术团队，尤其跟程序员，跟工程师，你要有共同语言，我觉得如果说没有一定技术深度的话，其实很难能够融进整个的团队。——邵荣</p>
<p>如果作为一家创业型的公司，特别是互联网，特别是软件行业，CTO必须是一个技术高手，因为你是一家创业公司，技术平台应该是公司的核心业务，如果CTO不是技术高手，这个公司很难在商业上有大的作为。——宋仕良</p>
<p>程序员或高手容易犯的错误是什么，或者我觉得做得不够的地方，是程序员容易觉得我做的这个东西很好，很牛，我这个东西别人应该喜欢用，由我来推演别人。——邵荣</p>
<p>要成为高手，就像练功一样，你必须能耐得住寂寞，要关在研究室里面，像大家一样，晚上写代码，有时候这种东西不是平常人可以做到的，假如你可以呆过这段期间的话，我相信你练到功成了以后，这些东西你就可以发挥出来了，我想这是成为高手很重要的因素。——王文彬</p>
<p>我建议大家去尝试做产品经理或者系统分析师，架构师很多人误解为纯技术的，其实许多的架构师对商业的分析是非常擅长，对于系统分析师，因为系统分析师是非常清晰地要描绘出商业的目标在什么地方，分解成什么东西，跟技术有关联。——叶伟</p>
<p>首先在于留住人才，我们让工程师知道，工程师他不是低于管理者的，也就是说，你一个经理，他所拿到的整个薪资，不一定要大于他所管理的工程师。——蔡昇钦</p>
<p><br />
以下为论坛实录：</p>
<p>主持人：在正式开始之前想先做一个小调查，我想请问一下，在座的六位CTO都是技术管理者，都是技术大拿，你们谁认为成为一个技术管理的高手，或者CTO，成为技术高手是必经之路，想成为一个CTO必须先成为一个技术高手吗？</p>
<p>淘宝网首席架构师王文彬：先说明一下，我是假CTO，我的职位其实是做技术，在淘宝做品牌架构，说实在的，我有一个技术背景，但我觉得CTO并不必须是技术大拿，大家今天可以看到，从CTO的定义来看，CTO的角色是用技术服务公司的商业模式。从这个定义，只要你对技术有相当性的掌握，其实你可以不必从底层做起，我们今天讲的是CTO是不是一定要从底层的技术人员干起，假如从这个角度，我觉得做CTO不一定经过必须这个角色，当然现在业界很多CTO，我想在座很多CTO是从技术出身，这是现实，但是理论上我不觉得是一定的事实。</p>
<p>趋势科技技术总监蔡昇钦：我认为CTO有很重要的目标是在于它能够整合公司的商业能力，成为一个CTO的重点，是你对公司核心技术的了解度跟掌握度，还有公司主要的核心业务的掌握度，所以不一定说非要从底层干起，当然CTO也可以是掌握技术最高的那个人，但是这不是一个唯一的一个对应关系。</p>
<p>盛大游戏首席技术官朱继盛：技术高手和CTO这两个角色，打个比方，像一个乐队里面，技术高手像小提琴演奏者，或者是一个钢琴演奏者，但是CTO相当于一个乐队的总指挥，乐队的指挥需要有对音乐的整体感觉，这方面肯定更拿手，但是你说他，说到他必须是一个小提琴高手，或者必须是一个钢琴高手，这不一定，也说明作为一个CTO的话，不一定是从一个技术高手成长过来的，作为一个CTO，他最主要的职能在于整体的协调，对于音乐整体的把握，或者技术整体的把握上。</p>
<p>阿里软件技术总监叶伟：这个问题很难回答，是不是一定要成为一个高手，我曾经发现自己技术上好像也有点高，但是很快发现自己不高了，因为高手太多，刚才盛大的朱总也谈到了，你不可能样样都精通，我本来想打这个比喻也差不多，不过总的感觉，还是应该是一个内功高手，还是要有点内功，这说明什么，你在技术方面，应该有技术的洞察力，要看到商业和技术的结合。我还得补充一点，我们就从CTO的词上来说，最后一个词是officer，officer什么意思，实际上是个管理者，你真正的本事是把一个团队凝聚在一起，并且服务于商业，如果你没有那方面的能力，你今天编程越厉害，或者某个方面精通的，根本不能把你放到CTO这个位置上面，越放到上面越危害，你带着一帮人不知道往哪方面奔，你纯粹只是兴趣，无法为给公司带来商业价值，大家都知道公司其实是要产生这个价值。</p>
<p>群硕大中华区软件开发总监邵荣：我更倾向于必须成为技术高手才能成为CTO。刚刚几位的观点我是认同的，但是还有一些不同的想法。第一个就是自己大言不惭来讲，我自己是走技术这条路过来的，然后在这个过程里面，我自我感觉，就是说你跟技术团队，尤其跟程序员，跟工程师，你要有共同语言，我觉得如果说没有一定技术深度的话，其实很难能够融进整个的团队，尤其，当这个团队，比如说从很小规模，你很可能在前面做很高指点的话，能够落地，给他们一些帮助，所以说在整个我觉得成为一个技术主管的过程当中，如果说有相关的比较深的这样一个经验的话，我想应该会有一定的帮助，整个到后面真正成为CTO，或者成为技术的主管的时候，那个时候是不是技术还是跟原来一样重要，不是，它只是属于在整个的过程当中，其中一环吧。</p>
<p>巨人网络集团首席技术官宋仕良：刚才几位的观点我是同意的，我之所以更倾向于必须成为技术高手才能成为CTO，其实我自己也是一个从技术的底层干起来，我也是写程序的，我为什么觉得这个问题可能要分两个部分来看，如果作为一家创业型的公司，特别是互联网，特别是软件行业，CTO必须是一个技术高手，因为你是一家创业公司，你的公司要创业，技术平台应该是公司的核心业务，如果CTO不是技术高手，我觉得这个公司可能是很难在商业上有大的作为，如果像一些传统的公司，或者做金融那些公司，它来有一个做IT的部门，就不一定是一个技术高手，更重要的是偏重管理，或者是对业务流程的熟练，并不一定是对技术要专注。</p>
<p>主持人：不管怎么说，台上的六位都是我们心目中公认的技术高手，我想问其中几位，台下有很多人，有的人已经是高手了，有的人还在成为高手的路上，我想你们跟大家分享一下，如何才能成为一名技术高手，成为一个技术高手一个最重要的经验是什么，我想邵荣首先与大家分享一下你的观点。</p>
<p>邵荣：先简单说说我自己的一个成长经历，其实我在95年、96年左右的时候，我在操作系统上玩java，我的导师要求我在一个月之内掌握当时的内容，其实就在那个时间开始做很多事，凭着狂热，后面我在DOS里面写自己的Windows的驱动，去驱动整个的鼠标、键盘，再到后面，帮那个研究所做过一个，大家不知道南极星，我自己做了一个，帮香港的一个公司做了一个斯托尼方。我那个时候真的有点不知天高地厚，就想走出苏州，我以前在苏州大学里面，自己也做了老师，还教软件工程，教C++，当时我走出苏州的时候，我讲了一句话，在整个苏州可能没有人在C++上超过我，最多只能跟我沟通交流，过了多少年才知道自己错得多厉害，当时自己的自信心很膨胀，我那时候基本上把白天黑夜倒过来干，基本上是每天吃完早饭回去睡觉，然后别人吃中饭，我吃早饭，连续很多年，大概是最起码4、5年时间一直这么来干活和工作的。但事实上随着时间推移，号称自己觉得还可以，慢慢开始有不同的理解，当中有一个关于互联网，我不知道有多少人知道&#8220;白云黄鹤&#8221;这个BBS，这是在教育网里面仅次于清华的，我当过两年版主，通过在里面解决问题，带来很多思索，之后我又开始疯狂看软件工程，后面又开始看管理，在市面上的管理方面的书我都看过，事实上一步一步走过来，到今天我思索很多东西，很多时候在里面思索一些商业模式，思考整个团队的建设，思考很多东西三年之后会发生什么事情，客户那边是什么东西，那这么多年里面，我觉得有一个词，就是我影响很深刻的，可能对大家有些启发，叫EMPATHY，这个词的中文含义叫移神，那么我把它去更形象化来讲，就是将心比心，我觉得这么多年过来了，从技术高手转到现在为止，可能很多时间是负责技术的方向，甚至于是整个业务方向，从原来的执行者变到现在的一个布局者，我觉得很多很多时候，EMPATHY这个词给我自己很大的一个促进或启迪吧，程序员或高手容易犯的错误是什么，或者我觉得做得不够的地方，我做的这个东西很好，很牛，我这个东西别人应该喜欢用，由我来推演别人，EMPATHY这个东西，我做这个东西首先站到别人的角度看，我想要带团队，我会站到团队角度看这个问题，你必须在很早的时候预估到很多部分，我觉得很多程序员应该了解，但是最后没有做的事情是尝试性的一些东西，所以随着时间推移，我觉得做真正的技术高手，或者想成为技术高手，我觉得应该往一些更软性的东西想，讲句实话，我往管理方向做的时候，看了很多哲学和心理学的书，这些东西对拟人生有非常多的促进，不要走太多刚硬的路。</p>
<p>主持人：邵总很性急，一下把我后面要问的问题全都回答了。我们接着往下问问叶总，我知道您的技术非常好，思路也很活跃，所以您走上技术这条路，但是我有一个问题是，您后来为什么没有走上创业的路线，您觉得怎么评价一个技术人员的价值，跟着人干也算成功，还是我非要自己创业呢？</p>
<p>叶伟：这个问题相信很多人都面临着，不管你曾经或者将来，你最终选择了什么，你有可能选择了去创业，也可能这时候没有想创业，我个人认为呢，有几个方面，一个是来自于客观上，比如说跟人的性格有关系，有些人可能性格上并不善于冒风险，大家都知道创业是非常冒风险的。第二个，你的知识结构能力方面可能有局限性，你创业，所有的责任都是你在承担，你要考虑是否能得到成功，你会考察你的特长在什么地方，从性格方面说，可能有的人说我希望去宁为鸡头，不为牛尾。我另外有一个观点，这也是我自己的，可能我没有去创业的很重要的想法，我真正想创造社会价值，这个价值要摆在舞台上，这个舞台如果适合你发展，而且它也很大，而且我们大家都知道互联网可以把全世界都联合起来，你有没有智慧，你跟着英明的道路走，这是你可以考虑的。说实在的，我自己的经历，我开始的时候，没有进外企，为什么呢，我读书的时候去打工，所以我在民营企业，很快做大了，那时候我做CTO，管理几十个人，后来我觉得这个行业比较小，我做ERP，我也不再做CTO了，ERP大家知道会影响很多的企业，OK，我去做这个东西，我进了金蝶，在行业里比较大，然后后来我进了互联网行业，阿里巴巴，因为我们要去做电子商务，电子商务它将影响更大范围的人，所以我觉得这个能够创造更大的社会价值。</p>
<p>主持人：我昨天去巨人访问的时候，巨人的同事向我们说，宋总其实是一个不善于言词的人，但是我想问的问题是，您这样典型的技术人员的个性，怎么样管理一个团队呢。</p>
<p>&nbsp;宋仕良：确实我平时在工作中是不善言词的，因为我应该说比较喜欢做技术工作，我在学校里面天天钻研技术，工作之后也遇到一些朋友，然后朋友都是一些技术高手，因为我工作的时候去一家公司，那家公司的同事也是技术高手，在清华BBS上被评为中国十大黑客之一，那不是贬义的，是软件高手或者技术高手，是做输入法的一个作者，我从他的身上看到一个真正的技术高手，是一个什么样的人，就是说平时不去太追逐一些功名这些东西，回到刚才说的话题，我一个不善言词的人如何把100多人的团队带下来，主要还是靠朋友，可能我会跟我的另一个搭档，他的沟通能力比较强，然后他在从事人际交往，在管理当中会比较擅长一点，我专注于做技术这块，相当于一个黄金组合了。</p>
<p>主持人：王文彬先生是我们淘宝网的首席架构师，我知道您在淘宝网上扮演两种角色，一种是带领团队的角色，另外一种是掌管整个淘宝的架构。您觉得这两种角色，CTO带团队的角色和做架构师是什么关系?您是如何协调好这两者的关系的？</p>
<p>王文彬：的确有点挑战，我老板每次跟我说你架构为什么没有做好，我说我一个人扮演两个角色(笑)，但是这个角色里面是有相关的，比如我下面的同仁，其实大家都关注架构，所以其实我今天在带领淘宝团队做架构的时候，会依赖他们实行部分的架构设计，因为淘宝这么大的网站不是一个人就可以做得出来的，这也需要大家通力合作。这样自然就有一个团队，我想我只是起带头作用，带这个团队成本比较小，这也是为什么我两方面能够兼顾的原因吧。其实我再补充一点，刚刚主持人问怎么去变成技术高手，需要什么调整，我也一直在思考，其实我同意邵总的讲法，今天你做程序，技术上的东西最需要的是热情，这个热情也需要你具备一定的条件，我总结我自己的经验来看，当然我也有一点运气，加入了一流的团队，我想这会刺激一个人潜力的发挥，假如我今天没有遇到这群人，我不觉得我今天的看法能够到这种程度，但是另外一点，我觉得你今天要走技术这条路，有一点，要成为高手，就像练功一样，你必须能耐得住寂寞，要关在研究室里面，像大家一样，晚上写代码，有时候这种东西不是平常人可以做到的，假如你可以呆过这段期间的话，我相信你练到功成了以后，这些东西你就可以发挥出来了，我想这是成为高手很重要的因素。现在在中国，很多公司都在征才，其实大家对技术高手的需求是非常大的，只要把握这几点，相信大家有机会成为一个技术高手。</p>
<p>主持人：叶总好像有什么想补充的？</p>
<p>叶伟：是的，我想补充的是说，管理这个东西，它是你的工具，你的手段，对一个CTO来说，或者对负责技术研发的总监来说，实现这个目标，这是你的责任，管理是你的手段之一，你搭好架构，也是你的手段之一，这些东西你都要去管，没有一项可以落下来。另外一方面，这些责任不见得是跑在最顶上的人才有责任，其实我们的一个技术主管，经理他都会有责任，你说他当经理不要管团队，也要，只是CTO更专注在商业和技术架构之间形成桥梁，他需要把商业的东西分解成技术解决方案，反过来又要用我们的技术驱动创新，形成商业上的一些想法，所以我觉得是说，管理它是一个工具，帮助我们，你不要去忽略它，然后我想补充一下，刚才邵总前面谈的问题，怎么样成为一个CTO，一个是说你要以终为始，你看CTO核心的能力点在什么地方，我们刚才谈到是说，它是在跨越商业和技术，所以你要有这个技术，第二个你要组得起团队来搞攻坚战，这两方面都要，你要练很多东西，我今天讲不完，我提两个主要的，你可以同时去尝试，可能你距离CTO就近一些，第一个是做项目经理，没有丰富的项目经理，你根本就不知道怎么样跟人家合作，怎么样取舍，怎么样排列优先顺序，怎么样控制你的资源，前面我说CTO是个officer，第二个方面，他更多要有站得高看得远的角色，所以我建议大家去尝试做产品经理或者系统分析师，我谈架构师，因为谈架构师很多人误解为纯技术的，许多的架构师对商业的分析是非常擅长，所以我还是谈一谈系统分析师，因为系统分析师是非常清晰地要描绘出商业的目标在什么地方，分解成什么东西，跟技术有关联，我建立大家在这两个角色方面尝试一下。</p>
<p>主持人：谢谢叶总，我们还有一位没发言。我知道趋势科技有一个特别优良的传统，你们在培养人才，以及留住人才这件事情上很有功力，我想了解一下，您怎么在您的技术团队里面培养人才，留住人才，这是一个大家现在很关心的话题。</p>
<p>蔡昇钦：培养人才在趋势科技的做法，就是你给他舞台，然后他就是自己的编剧，他就是自己的导演，用这样的方式来做，我们在培养技术高手的层面上，在公司的框架当中，我们是把人才分成两个方面来看，在技术这条路上走的话，首先在于留住人才，我们让工程师知道，工程师他不是低于管理者的，也就是说在趋势，你一个经理，他所拿到的整个薪资，不一定要大于他所管理的工程师，因为我们必须让公司的团队知道，你喜欢钻研技术，那是因为你的兴趣所在，你喜欢管理团队，你喜欢跟人打交道，那是你的兴趣所在，从一个公司角度看，我们鼓励人基于自己的兴趣做好他的发展，所以从这样的情况了解员工后段的需求，然后安排他去他有可能的位置，很自然而然员工就会跟公司走得很近。像我通常会跟我的团队的人员讲，不管是资深的还是资浅的，我每年会问他们一个问题，你有没有想过你5年后干嘛，我会记得他们2006年跟我讲什么，2007年跟我讲什么，2008年跟我讲什么，他有没有改变他人生的五年规划，三年规划，我们尽可能在公司的范畴满足员工的需要，我想这样子，员工就会成长，就会跟公司走在一起。</p>
<p>主持人：人才的问题其实是现在大家都很关心的，我在主持这个会之前，有人特意给我发消息，建议我多问在座的CTO一些关于怎样招募团队，保留团队的问题，由于我们现在人才培养存在一些问题，导致我们市场上优秀人才的数量有限，就带来保留人才和争夺人才之间的矛盾，我想问一下宋总，我昨天去巨人的时候，听说你们团队相当稳定，你觉得除了巨人的收入高以外，这个当然是很重要的因素，你还有什么诀窍吗？</p>
<p>宋仕良：应该还是说公司重视技术人员，首先你重视人才，你应该是要尊重人才，一个技术人员，他有他自己的想法，而且每个人的想法都是不一样的，你要重视他的想法。&nbsp;&nbsp;&nbsp; </p>
<p>主持人：这种想法跟公司的目标不一致怎么办。</p>
<p>宋仕良：目标不一致的话，那应该是给他做工作，就找他谈心，这个肯定要统一目标的，如果目标不一致，大家肯定走不到一起来，首先你在组建这个团队的时候，在选人方面，应该是物以类聚，我觉得至少应该选大家有兴趣，或者有共同拼搏方向的，或者是大家奋斗的方向是一致的，至少奋斗的目标一致的话，才能够很好地沟通，不会说我提出一个观点，另外一个人会有很大的反驳，首先你在组建团队的时候，每个人虽然达不到完全一致，但是大家的目标是一致，中间团队在磨合的过程中，肯定会出现这样那样的问题，这些问题我想都是可以解决的，因为公司或者通过一些协调，或者是互相的理解，互相的支持。</p>
<p>主持人：朱总您觉得盛大在保持人员不流失方面如何。</p>
<p>朱继盛：我觉得核心的思想只有一点，给相应的人自己的舞台，施展他自己的东西。可以举一些例子，比如说我们盛大集团的副总裁是80后的，他能作为一个上市公司的总裁。再举一个例子，去年盛大有很优秀的员工离职了，这个离职并没有任何人劝他，他自己有这个意愿，要自己创业，盛大有机制，让他自己编一个游戏，他在盛大的周围去工作，这样的例子，实际上在盛大有非常多这样的例子。</p>
<p>主持人：谢谢台上的嘉宾和底下的观众。</p>
<p>嘉宾：谢谢大家。(付江/整理)</p>
<p>&nbsp;</p>
文章来源：<a href="http://www.yiludu.cn/">一路读</a> <a href="http://www.yiludu.cn/">http://www.yiludu.cn/</a> 
<img src ="http://www.blogjava.net/xiaoxiao/aggbug/230205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaoxiao/" target="_blank">小小it</a> 2008-09-21 01:09 <a href="http://www.blogjava.net/xiaoxiao/archive/2008/09/21/230205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>