<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_yueue's share</title><subtitle type="text">yueue.cnblogs.com</subtitle><id>http://feed.cnblogs.com/blog/u/23249/rss</id><updated>2010-07-14T03:22:17Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/23249/rss"/><entry><id>http://www.cnblogs.com/yueue/archive/2010/04/28/1723014.html</id><title type="text">JavaScript中的对象动态加载技术</title><summary type="text">什么是JavaScript对象动态加载JavaScript动态加载(JavaScript Object Dynamic Loading) - 之所以叫做动态，是应为其有别与通常的静态加载形式。典型的JavaScript静态加载方式，是通过&amp;lt;script&amp;gt;标签将我们可能需要的所有JS文件依次嵌入到一个HTML页面中，当浏览器执行到&amp;lt;script&amp;gt; 标签，就会到我们指定的地方去...</summary><published>2010-04-28T07:24:00Z</published><updated>2010-04-28T07:24:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/04/28/1723014.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/04/28/1723014.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff8000;"&gt;什么是JavaScript对象动态加载&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;JavaScript动态加载(JavaScript Object Dynamic Loading) - 之所以叫做动态，是应为其有别与通常的静态加载形式。&lt;/p&gt;&#xD;
&lt;p&gt;典型的JavaScript静态加载方式，是通过&amp;lt;script&amp;gt;标签将我们可能需要的所有JS文件依次嵌入到一个HTML页面中，当浏览器执行到&amp;lt;script&amp;gt; 标签，就会到我们指定的地方去加载JavaScript并运行，这时，文件中定义的无论方法、类、对象等，已经存在与浏览器，等待被使用。除非HTML页面被Unload，否则这些东西就一直存在。&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;而典型的动态加载方式，是不需要任何提前的准备，只有当需要一个JavaScript对象来为我们服务时，我们就临时去加载它所属的JS文件，然后使用它，使用完毕，销毁即可。正所谓&amp;ldquo;呼之即来，挥之即去&amp;rdquo;。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;就因为这&amp;ldquo;呼之即来，挥之即去&amp;rdquo;的能力，使得JavaScript真正的活了起来。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff8000;"&gt;JS动态加载解决了什么问题&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;给系统减了肥：可以将不必要的JavaScript代码延迟加载，未用到的功能不加载。 &lt;/li&gt;&#xD;
&lt;li&gt;模块化得以实现：可以将原本大块的功能或类，分解成合理的小块，便于管理与维护。 &lt;/li&gt;&#xD;
&lt;li&gt;方便的值传递：双向传值，无拘束。基于JSON，可以传递大对象。 &lt;/li&gt;&#xD;
&lt;li&gt;可以实现Service:可以基于Service理念,通过核心JavaScript对象使用其他的服务功能对象,完成业务的组装。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff8000;"&gt;JS动态加载应该有什么能力&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;可以异步的，或同步的，随心所遇加载外部JS文件。 &lt;/li&gt;&#xD;
&lt;li&gt;加载进来的JS文件的内容可以有效管理，包括作用域，开放性，生命周期。 &lt;/li&gt;&#xD;
&lt;li&gt;可以支持面向对象，以对象为基本点而不是方法或变量等。 &lt;/li&gt;&#xD;
&lt;li&gt;有好的封装，可以通过一个句柄操作整个被加载的JS。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff8000;"&gt;&lt;strong&gt;传统JS动态加载的实现&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;关于JS动态加载的实现，我见过很多种方法。早期的时候，人们想过很多办法。这些办法有自己发挥的空间，可以解决一些问题。但是都或多或少的存在弊端，以及实现上的繁琐，最大的问题就是，它们基本都不是面向对象的。下面就列举主要的2类：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;用嵌套iFrame的方式来加载JS文件:这种方式早期最多，通过在页面中包含一个iFrame，来调用一个另一个包含了&amp;lt;script&amp;gt;标签的HTML页面，实现JS的动态加载。最大的弊端就是无法传递参数，实现较繁琐。 &lt;/li&gt;&#xD;
&lt;li&gt;临时创建&amp;lt;script&amp;gt;标签:这种方式有很多人用。利用JavaScript操作页面Dom模型，临时创建一个&amp;lt;script&amp;gt;标签，然后appendChild到&amp;lt;body&amp;gt;上，或者动态改变已存在&amp;lt;scirpt&amp;gt;标签的src属性。弊端是只能同步加载，必须等待JS文件被读取完毕，才能进行下一步工作。且传值是通过调用被加载的JS内的变量实现，双向传值困难，作用域弱化。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;可以看出以上两种常见方式，都无法满足我们的要求。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff8000;"&gt;更优秀的解决方案&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;得益于神奇如阿拉丁神灯般的 eval() ,我们就可以实现以上所有的愿望 :) 。&lt;/p&gt;&#xD;
&lt;p&gt;绕了那么大圈子，想了那么多办法。其实最简单的方法就在眼皮底下.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;第一部分-调用方 main.js文件：&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;//动态读取JS对象的方法&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a&gt;//@FileName&lt;/a&gt;:要读取的JS对象URL,可以是本地路径。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a&gt;//@TheParameters&lt;/a&gt;:需要传递给被加载对象的参数，可以是任何对象。&lt;/p&gt;&#xD;
&lt;p&gt;function loadJSObj(FileName,TheParameters){ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ext.Ajax.request({&amp;nbsp;&amp;nbsp; //异步调用方法 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: FileName,&amp;nbsp;&amp;nbsp; //调用URL &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scope: this,&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; success: function(response){&amp;nbsp;&amp;nbsp; //成功后的回调方法response为返回内容 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var remoteObj = eval(response.responseText); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var mod = null; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mod = new remoteObj(TheParameters);&lt;/p&gt;&#xD;
&lt;p&gt;return mod; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; failure:function(){&amp;nbsp;&amp;nbsp; //失败后的回调方法 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(name+' - 读取失败，请检查网络或文件。');&lt;/p&gt;&#xD;
&lt;p&gt;return null; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br /&gt;}&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;这段代码使用Extjs类库封装的异步读取方法Ext.Ajax.request()。只是为了方便。如果你使用未封装的XMLHttpRequest对象也没什么问题。&lt;/p&gt;&#xD;
&lt;p&gt;先大概说下loadJSObj方法干的事情是：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;用XMLHttpRequest来了一次Ajax请求，将想要加载的JS文件源代码读过来。 &lt;/li&gt;&#xD;
&lt;li&gt;利用eval函数将刚才读到的远程JavaScript类实例化成为本地的对象（期间传递了构造参数）。 &lt;/li&gt;&#xD;
&lt;li&gt;返回这个对象，供使用。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;此处关键的代码在于&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;var remoteObj = eval(response.responseText); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var mod = null; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mod = new remoteObj(TheParameters);&lt;/p&gt;&#xD;
&lt;p&gt;return mod;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;可以看到，我们直接将被读取的JS文件传进eval 函数执行。并返回一个叫做 remoteObj的东西，这个东西其实就是被读取的JS的句柄（一个类，定义在被读取JS中的类，后面会详细说到），通过将remoteObj实例化，即mod = new remoteObj(参数) 就可以通过 mod 对象对被读取的JS随心所欲了操作了。&lt;/p&gt;&#xD;
&lt;p&gt;如此一来，远程的JS就被我们按照参数中指定的要求实例化成本地对象了，可以使用了。但是&amp;hellip;这只是一相情愿。因为被读取的JS得符合我们的要求，才能&amp;ldquo;两厢情愿&amp;rdquo;，最终得到结果&amp;hellip;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;第二部分 - 被调用方 login.js文件：&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p&gt;要想符合要求，被读取的JS文件也必须按照一定的规则来写。&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;//用户登录类 &lt;/p&gt;&#xD;
&lt;p&gt;Ext.extend(eueuy.module,{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; init:function(){&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //==Variables==// &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var userName = this.parameters.un;&amp;nbsp; //获取传递进来的参数un &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var passWord = this.parameters.pwd;&amp;nbsp;&amp;nbsp; //获取传递进来的参数pwd&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //==Methods==// &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //登录方法 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function loginOn(){ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (userName=='eueuy' || passWord=='123'){&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //登出方法&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function loginOff(){&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert('欢迎再来');&lt;/p&gt;&#xD;
&lt;p&gt;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;});&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;我们先看看这个登录类干了什么：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;继承自eueuy.moudle，并重写了构造函数。 &lt;/li&gt;&#xD;
&lt;li&gt;接收了2个传递进来的初始化参数，un 和 pwd。 &lt;/li&gt;&#xD;
&lt;li&gt;定义了2个成员方法和一个成员变量。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;没有任何特别的东西，就是Ext.extend方法用的有点怪,区别于平常的 XXX = Ext.extend();&lt;/p&gt;&#xD;
&lt;p&gt;没有赋值符号和类名。这恰恰是一个关键点：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;类的名字必须留空&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;为什么这样写？因为这样一来，这个没有类名的类， 就可以在eval()函数执行他的时候，再给他定义类名，这样就将类名的定义留在了调用的时候，也就是&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;main.js&lt;/span&gt;&lt;/em&gt;文件中。这个小技巧也将使调用方(&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;main.js&lt;/span&gt;&lt;/em&gt;)可以直接控制被调用方(&lt;span style="text-decoration: underline;"&gt;&lt;em&gt;login.js&lt;/em&gt;&lt;/span&gt;)的类。&lt;/p&gt;&#xD;
&lt;p&gt;最后，就可以在&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;main.js&lt;/span&gt;&lt;/em&gt;中用下面的代码，通过动态加载用户登录类，进行用户登录验证的工作：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;var loginModel = loadJSObj('http://www.eueuy.name/project1/js/login.js',{un:&amp;rsquo;eueuy&amp;rsquo;,pwd:&amp;rsquo;123&amp;rsquo;});&lt;/p&gt;&#xD;
&lt;p&gt;if (loginModel.loginOn()){&lt;/p&gt;&#xD;
&lt;p&gt;alert('登录成功,欢迎'+loginModel.userName);&lt;/p&gt;&#xD;
&lt;p&gt;}else{&lt;/p&gt;&#xD;
&lt;p&gt;alert('登录失败，错误的用户名密码');&lt;/p&gt;&#xD;
&lt;p&gt;}&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;可以看到，在上面的代码中，我们通过loginModel这个变量，控制了login.js中的登录类，可以访问其中的方法loginOn() ,还可以访问其中的变量 userName。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff8000;"&gt;结尾&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;至此，对象动态加载技术的理论已经讲解的差不多了，再下一篇博文中，我还会依据这些理论，给大家贴出一个基于动态加载的的项目框架。这个框架可以方便的实现One-Page，还可以看到一些具体的应用。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1723014.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/04/28/1723014.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/04/21/1717343.html</id><title type="text">追MM与23种设计模式 - 好通俗啊</title><summary type="text">&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1、FACTORY—追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工...</summary><published>2010-04-21T08:27:00Z</published><updated>2010-04-21T08:27:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717343.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717343.html"/><content type="html">&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1、FACTORY—追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory&lt;/p&gt;  &lt;p&gt;工厂模式：客户类和工厂类分开。消费者任何时候需要某种产品，只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时，工厂类也要做相应的修改。如：如何创建及如何向客户端提供。&lt;/p&gt;  &lt;p&gt;2、BUILDER—MM最爱听的就是“我爱你”这句话了，见到不同地方的MM,要能够用她们的方言跟她说这句话哦，我有一个多种语言翻译机，上面每种语言都有一个按键，见到MM我只要按对应的键，它就能够用相应的语言说出“我爱你”这句话了，国外的MM也可以轻松搞掂，这就是我的“我爱你” builder。（这一定比美军在伊拉克用的翻译机好卖）&lt;/p&gt;  &lt;p&gt;建造模式：将产品的内部表象和产品的生成过程分割开来，从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化，客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。&lt;/p&gt;  &lt;p&gt;3、FACTORY METHOD—请MM去麦当劳吃汉堡，不同的MM有不同的口味，要每个都记住是一件烦人的事情，我一般采用Factory Method模式，带着MM到服务员那儿，说“要一个汉堡”，具体要什么样的汉堡呢，让MM直接跟服务员说就行了。&lt;/p&gt;  &lt;p&gt;工厂方法模式：核心工厂类不再负责所有产品的创建，而是将具体创建的工作交给子类去做，成为一个抽象工厂角色，仅负责给出具体工厂类必须实现的接口，而不接触哪一个产品类应当被实例化这种细节。&lt;/p&gt;  &lt;p&gt;4、PROTOTYPE—跟MM用QQ聊天，一定要说些深情的话语了，我搜集了好多肉麻的情话，需要时只要copy出来放到QQ里面就行了，这就是我的情话prototype了。（100块钱一份，你要不要）&lt;/p&gt;  &lt;p&gt;原始模型模式：通过给出一个原型对象来指明所要创建的对象的类型，然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类，产品类不需要非得有任何事先确定的等级结构，原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。&lt;/p&gt;  &lt;p&gt;5、SINGLETON—俺有6个漂亮的老婆，她们的老公都是我，我就是我们家里的老公Sigleton，她们只要说道“老公”，都是指的同一个人，那就是我(刚才做了个梦啦，哪有这么好的事)&lt;/p&gt;  &lt;p&gt;单例模式：单例模式确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。&lt;/p&gt;  &lt;p&gt;[b:9ceca65206]结构型模式[/b:9ceca65206]&lt;/p&gt;  &lt;p&gt;6、ADAPTER—在朋友聚会上碰到了一个美女Sarah，从香港来的，可我不会说粤语，她不会说普通话，只好求助于我的朋友kent了，他作为我和Sarah之间的Adapter，让我和Sarah可以相互交谈了(也不知道他会不会耍我)&lt;/p&gt;  &lt;p&gt;适配器（变压器）模式：把一个类的接口变换成客户端所期待的另一种接口，从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。&lt;/p&gt;  &lt;p&gt;7、BRIDGE—早上碰到MM，要说早上好，晚上碰到MM，要说晚上好；碰到MM穿了件新衣服，要说你的衣服好漂亮哦，碰到MM新做的发型，要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题，自己用BRIDGE组合一下不就行了&lt;/p&gt;  &lt;p&gt;桥梁模式：将抽象化与实现化脱耦，使得二者可以独立的变化，也就是说将他们之间的强关联变成弱关联，也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系，从而使两者可以独立的变化。&lt;/p&gt;  &lt;p&gt;8、COMPOSITE—Mary今天过生日。“我过生日，你要送我一件礼物。”“嗯，好吧，去商店，你自己挑。”“这件T恤挺漂亮，买，这条裙子好看，买，这个包也不错，买。”“喂，买了三件了呀，我只答应送一件礼物的哦。”“什么呀，T恤加裙子加包包，正好配成一套呀，小姐，麻烦你包起来。” “……”，MM都会用Composite模式了，你会了没有？&lt;/p&gt;  &lt;p&gt;合成模式：合成模式将对象组织到树结构中，可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。&lt;/p&gt;  &lt;p&gt;9、DECORATOR—Mary过完轮到Sarly过生日，还是不要叫她自己挑了，不然这个月伙食费肯定玩完，拿出我去年在华山顶上照的照片，在背面写上“最好的的礼物，就是爱你的Fita”，再到街上礼品店买了个像框（卖礼品的MM也很漂亮哦），再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……，我们都是Decorator，最终都在修饰我这个人呀，怎么样，看懂了吗？&lt;/p&gt;  &lt;p&gt;装饰模式：装饰模式以对客户端透明的方式扩展对象的功能，是继承关系的一个替代方案，提供比继承更多的灵活性。动态给一个对象增加功能，这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。&lt;/p&gt;  &lt;p&gt;10、FACADE—我有一个专业的Nikon相机，我就喜欢自己手动调光圈、快门，这样照出来的照片才专业，但MM可不懂这些，教了半天也不会。幸好相机有Facade设计模式，把相机调整到自动档，只要对准目标按快门就行了，一切由相机自动调整，这样MM也可以用这个相机给我拍张照片了。&lt;/p&gt;  &lt;p&gt;门面模式：外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口，使得子系统更易于使用。每一个子系统只有一个门面类，而且此门面类只有一个实例，也就是说它是一个单例模式。但整个系统可以有多个门面类。&lt;/p&gt;  &lt;p&gt;11、FLYWEIGHT—每天跟MM发短信，手指都累死了，最近买了个新手机，可以把一些常用的句子存在手机里，要用的时候，直接拿出来，在前面加上MM的名字就可以发送了，再不用一个字一个字敲了。共享的句子就是Flyweight，MM的名字就是提取出来的外部特征，根据上下文情况使用。&lt;/p&gt;  &lt;p&gt;享元模式：FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。内蕴状态存储在享元内部，不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态，它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来，将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象，而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。&lt;/p&gt;  &lt;p&gt;12、PROXY—跟MM在网上聊天，一开头总是“hi,你好”,“你从哪儿来呀？”“你多大了？”“身高多少呀？”这些话，真烦人，写个程序做为我的Proxy吧，凡是接收到这些话都设置好了自动的回答，接收到其他的话时再通知我回答，怎么样，酷吧。&lt;/p&gt;  &lt;p&gt;代理模式：代理模式给某一个对象提供一个代理对象，并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下，客户不想或者不能够直接引用一个对象，代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真正的被代理对象，而仅仅持有一个被代理对象的接口，这时候代理对象不能够创建被代理对象，被代理对象必须有系统的其他角色代为创建并传入。&lt;/p&gt;  &lt;p&gt;[b:9ceca65206]行为模式[/b:9ceca65206]&lt;/p&gt;  &lt;p&gt;13、CHAIN OF RESPONSIBLEITY—晚上去上英语课，为了好开溜坐到了最后一排，哇，前面坐了好几个漂亮的MM哎，找张纸条，写上“Hi,可以做我的女朋友吗？如果不愿意请向前传”，纸条就一个接一个的传上去了，糟糕，传到第一排的MM把纸条传给老师了，听说是个老处女呀，快跑!&lt;/p&gt;  &lt;p&gt;责任链模式：在责任链模式中，很多对象由每一个对象对其下家的引用而接&lt;/p&gt;  &lt;p&gt;起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求，系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择：承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。&lt;/p&gt;  &lt;p&gt;14、COMMAND—俺有一个MM家里管得特别严，没法见面，只好借助于她弟弟在我们俩之间传送信息，她对我有什么指示，就写一张纸条让她弟弟带给我。这不，她弟弟又传送过来一个COMMAND，为了感谢他，我请他吃了碗杂酱面，哪知道他说：“我同时给我姐姐三个男朋友送COMMAND，就数你最小气，才请我吃面。”，&lt;/p&gt;  &lt;p&gt;命令模式：命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割开，委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来，使得请求的一方不必知道接收请求的一方的接口，更不必知道请求是怎么被接收，以及操作是否执行，何时被执行以及是怎么被执行的。系统支持命令的撤消。&lt;/p&gt;  &lt;p&gt;15、INTERPRETER—俺有一个《泡MM真经》，上面有各种泡MM的攻略，比如说去吃西餐的步骤、去看电影的方法等等，跟MM约会时，只要做一个Interpreter，照着上面的脚本执行就可以了。&lt;/p&gt;  &lt;p&gt;解释器模式：给定一个语言后，解释器模式可以定义出其文法的一种表示，并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后，使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构，也就是一系列的组合规则。每一个命令对象都有一个解释方法，代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。&lt;/p&gt;  &lt;p&gt;16、ITERATOR—我爱上了Mary，不顾一切的向她求婚。&lt;/p&gt;  &lt;p&gt;Mary：“想要我跟你结婚，得答应我的条件”&lt;/p&gt;  &lt;p&gt;我：“什么条件我都答应，你说吧”&lt;/p&gt;  &lt;p&gt;Mary：“我看上了那个一克拉的钻石”&lt;/p&gt;  &lt;p&gt;我：“我买，我买，还有吗？”&lt;/p&gt;  &lt;p&gt;Mary：“我看上了湖边的那栋别墅”&lt;/p&gt;  &lt;p&gt;我：“我买，我买，还有吗？”&lt;/p&gt;  &lt;p&gt;Mary：“我看上那辆法拉利跑车”&lt;/p&gt;  &lt;p&gt;我脑袋嗡的一声，坐在椅子上，一咬牙：“我买，我买，还有吗？”&lt;/p&gt;  &lt;p&gt;……&lt;/p&gt;  &lt;p&gt;迭代子模式：迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集，聚集对象是能够包容一组对象的容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中，从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭代子对象，每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。&lt;/p&gt;  &lt;p&gt;17、MEDIATOR—四个MM打麻将，相互之间谁应该给谁多少钱算不清楚了，幸亏当时我在旁边，按照各自的筹码数算钱，赚了钱的从我这里拿，赔了钱的也付给我，一切就OK啦，俺得到了四个MM的电话。&lt;/p&gt;  &lt;p&gt;调停者模式：调停者模式包装了一系列对象相互作用的方式，使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时，不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化，把对象在小尺度的行为上与其他对象的相互作用分开处理。&lt;/p&gt;  &lt;p&gt;18、MEMENTO—同时跟几个MM聊天时，一定要记清楚刚才跟MM说了些什么话，不然MM发现了会不高兴的哦，幸亏我有个备忘录，刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存，这样可以随时察看以前的记录啦。&lt;/p&gt;  &lt;p&gt;备忘录模式：备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下，将一个对象的状态捉住，并外部化，存储起来，从而可以在将来合适的时候把这个对象还原到存储起来的状态。&lt;/p&gt;  &lt;p&gt;19、OBSERVER—想知道咱们公司最新MM情报吗？加入公司的MM情报邮件组就行了，tom负责搜集情报，他发现的新情报不用一个一个通知我们，直接发布给邮件组，我们作为订阅者（观察者）就可以及时收到情报啦&lt;/p&gt;  &lt;p&gt;观察者模式：观察者模式定义了一种一队多的依赖关系，让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时，会通知所有观察者对象，使他们能够自动更新自己。&lt;/p&gt;  &lt;p&gt;20、STATE—跟MM交往时，一定要注意她的状态哦，在不同的状态时她的行为会有不同，比如你约她今天晚上去看电影，对你没兴趣的MM就会说“有事情啦”，对你不讨厌但还没喜欢上的MM就会说“好啊，不过可以带上我同事么？”，已经喜欢上你的MM就会说“几点钟？看完电影再去泡吧怎么样？”，当然你看电影过程中表现良好的话，也可以把MM的状态从不讨厌不喜欢变成喜欢哦。&lt;/p&gt;  &lt;p&gt;状态模式：状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里，每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候，其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时，系统便改变所选的子类。&lt;/p&gt;  &lt;p&gt;21、STRATEGY—跟不同类型的MM约会，要用不同的策略，有的请电影比较好，有的则去吃小吃效果不错，有的去海边浪漫最合适，单目的都是为了得到MM的芳心，我的追MM锦囊中有好多Strategy哦。&lt;/p&gt;  &lt;p&gt;策略模式：策略模式针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类，各种算法在具体的策略类中提供。由于算法和环境独立开来，算法的增减，修改都不会影响到环境和客户端。&lt;/p&gt;  &lt;p&gt;22、TEMPLATE METHOD——看过《如何说服女生上床》这部经典文章吗？女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤(Template method)，但每个步骤针对不同的情况，都有不一样的做法，这就要看你随机应变啦(具体实现)；&lt;/p&gt;  &lt;p&gt;模板方法模式：模板方法模式准备一个抽象类，将部分逻辑以具体方法以及具体构造子的形式实现，然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法，从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架，而将逻辑的细节留给具体的子类去实现。&lt;/p&gt;  &lt;p&gt;23、VISITOR—情人节到了，要给每个MM送一束鲜花和一张卡片，可是每个MM送的花都要针对她个人的特点，每张卡片也要根据个人的特点来挑，我一个人哪搞得清楚，还是找花店老板和礼品店老板做一下Visitor，让花店老板根据MM的特点选一束花，让礼品店老板也根据每个人特点选一张卡，这样就轻松多了；&lt;/p&gt;  &lt;p&gt;访问者模式：访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话，接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统，它把数据结构和作用于结构上的操作之间的耦合解脱开，使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易，就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中，而不是分散到一个个的节点类中。当使用访问者模式时，要将尽可能多的对象浏览逻辑放在访问者类中，而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1717343.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717343.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/04/21/1717341.html</id><title type="text">从代码学习设计模式 - 工厂模式</title><summary type="text">没有使用工厂模式时的代码： interface Fruit{&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void eat();&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; class Apple implements Fruit{&amp;#160;&amp;#160; &amp;#160;&amp;#...</summary><published>2010-04-21T08:25:00Z</published><updated>2010-04-21T08:25:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717341.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717341.html"/><content type="html">&lt;p&gt;&lt;br /&gt;没有使用工厂模式时的代码：&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;&lt;br /&gt;interface Fruit{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void eat();&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;class Apple implements Fruit{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void eat(){&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.out.println(&amp;quot;**吃苹果**&amp;quot;) ;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;class Orange implements Fruit{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void eat(){&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.out.println(&amp;quot;**吃橘子**&amp;quot;) ;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;public class FactoryDemo01{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static void main(String args[]){&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Fruit f = new Apple();&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.eat();&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;/*&amp;#160; &lt;br /&gt;E:\java&amp;gt;javac FactoryDemo01.java&amp;#160; &lt;br /&gt;E:\java&amp;gt;java FactoryDemo01&amp;#160; &lt;br /&gt;**吃苹果**&amp;#160; &lt;br /&gt;*/&amp;#160; &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;/*普通的代码编写方式*/     &lt;br /&gt;interface Fruit{      &lt;br /&gt;&amp;#160; public void eat();      &lt;br /&gt; }      &lt;br /&gt;class Apple implements Fruit{      &lt;br /&gt;&amp;#160; public void eat(){      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.out.println(&amp;quot;**吃苹果**&amp;quot;) ;      &lt;br /&gt;&amp;#160;&amp;#160; }      &lt;br /&gt; }      &lt;br /&gt;class Orange implements Fruit{      &lt;br /&gt;&amp;#160; public void eat(){      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; System.out.println(&amp;quot;**吃橘子**&amp;quot;) ;      &lt;br /&gt;&amp;#160;&amp;#160; }      &lt;br /&gt; }      &lt;br /&gt;public class FactoryDemo01{      &lt;br /&gt;&amp;#160; public static void main(String args[]){      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Fruit f = new Apple();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; f.eat();      &lt;br /&gt;&amp;#160;&amp;#160; }      &lt;br /&gt; }      &lt;br /&gt;/*      &lt;br /&gt;E:\java&amp;gt;javac FactoryDemo01.java&lt;/p&gt;    &lt;p&gt;E:\java&amp;gt;java FactoryDemo01     &lt;br /&gt;**吃苹果**      &lt;br /&gt;*/&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;使用工厂模式的代码：   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 工厂设计模式:&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 在Java中主方法就类似于一个客户端，当子类发生变化时，就必须要在客户端里改变声明的对象和类。&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 这使得客户端和子类就紧密的耦合在一起，因此，如果在子类发生改变时，客户端也要发生相应的改变。&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 在程序中加入一个工厂，使得子类的声明在工厂内发生，然后再把声明后的对象返回到客户端中，&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 这样就避免了客户端与子类耦合的发生。&amp;#160; &lt;br /&gt;&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;&lt;br /&gt;interface Fruit{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void eat();&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;class Apple implements Fruit{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void eat(){&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.out.println(&amp;quot;**吃苹果**&amp;quot;) ;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;class Orange implements Fruit{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void eat(){&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; System.out.println(&amp;quot;**吃橘子**&amp;quot;) ;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;class Factory{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static Fruit getFruit(String className){&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Fruit f = null;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /*在这里使用【字符串常量的匿名对象.equals(className)】可以有效的避免出现空指向异常。*/&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (&amp;quot;Apple&amp;quot;.equals(className)){&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f = new Apple();&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (&amp;quot;Orange&amp;quot;.equals(className)){&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f = new Orange();&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return f;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;public class FactoryDemo02{&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static void main(String args[]){&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /*直接使用工厂返回的对象。如果子类发生改变，就不再需要修改客户端。*/&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Fruit f = Factory.getFruit(args[0]);&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (f!=null)&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; f.eat();&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160; &lt;br /&gt;/*&amp;#160; &lt;br /&gt;E:\java&amp;gt;javac FactoryDemo02.java&amp;#160; &lt;br /&gt;E:\java&amp;gt;java FactoryDemo02 Apple&amp;#160; &lt;br /&gt;**吃苹果**&amp;#160; &lt;br /&gt;E:\java&amp;gt;java FactoryDemo02 Orange&amp;#160; &lt;br /&gt;**吃橘子**&amp;#160; &lt;br /&gt;*/ &lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1717341.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717341.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/04/21/1717317.html</id><title type="text">[转]JAVA使用JSON之Google Gson</title><summary type="text">比如一个User对象,我想要一个框架可以直接转换成{id:1001,name='张三'} 就目前来看，Google的GSON组件不错，而且支持 JDK5 的泛型。地址：http://code.google.com/p/google-gson/User 用户类：public class User {@Exposeprivate Long id;@Exposeprivate String name;p...</summary><published>2010-04-21T08:06:00Z</published><updated>2010-04-21T08:06:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717317.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717317.html"/><content type="html">&lt;pre&gt;比如一个User对象,我想要一个框架可以直接转换成{id:1001,name='张三'} &lt;/pre&gt;&#xD;
&#xD;
&lt;pre&gt;就目前来看，Google的GSON组件不错，而且支持 JDK5 的泛型。&#xD;
地址：&lt;a href="http://code.google.com/p/google-gson/"&gt;http://code.google.com/p/google-gson/&lt;/a&gt;&#xD;
&#xD;
User 用户类：&#xD;
public class User {&#xD;
@Expose&#xD;
private Long id;&#xD;
@Expose&#xD;
private String name;&#xD;
&#xD;
public Long getId() {&#xD;
    return id;&#xD;
}&#xD;
public void setId(Long id) {&#xD;
    this.id = id;&#xD;
}&#xD;
public String getName() {&#xD;
    return name;&#xD;
}&#xD;
public void setName(String name) {&#xD;
    this.name = name;&#xD;
}&#xD;
}&#xD;
&#xD;
// 测试 JavaBean 的转换&#xD;
public class Test {&#xD;
    public static void main(String[] args) {&#xD;
        User user = new User();&#xD;
        user.setId(1001L);&#xD;
        user.setName(&amp;quot;张三&amp;quot;);&#xD;
        GsonBuilder builder = new GsonBuilder();&#xD;
        // 不转换没有 @Expose 注解的字段&#xD;
        builder.excludeFieldsWithoutExposeAnnotation();&#xD;
        Gson gson = builder.create();&#xD;
        &#xD;
        String sUser = gson.toJson(user);&#xD;
        System.out.println(sUser);&#xD;
        // {&amp;quot;id&amp;quot;:1001,&amp;quot;name&amp;quot;:&amp;quot;张三&amp;quot;}&#xD;
        &#xD;
        // 将JSON字符串转换为 JavaBean&#xD;
        User user2 = gson.fromJson(sUser, User.class);&#xD;
        System.out.println(user2.getId() + &amp;quot;, &amp;quot; + user2.getName());&#xD;
        // 1001, 张三&#xD;
    }&#xD;
}&#xD;
&#xD;
// 测试 HashMap 的转换&#xD;
public class MapTest {&#xD;
    public static void main(String[] args) {&#xD;
        User user1 = new User();&#xD;
        user1.setId(1001L);&#xD;
        user1.setName(&amp;quot;张三&amp;quot;);&#xD;
        User user2 = new User();&#xD;
        user2.setId(1002L);&#xD;
        user2.setName(&amp;quot;李四&amp;quot;);&#xD;
        Map userMap = new HashMap();&#xD;
        userMap.put(&amp;quot;user1&amp;quot;, user1);&#xD;
        userMap.put(&amp;quot;user2&amp;quot;, user2);&#xD;
        GsonBuilder builder = new GsonBuilder();&#xD;
        // 不转换没有 @Expose 注解的字段&#xD;
        builder.excludeFieldsWithoutExposeAnnotation();&#xD;
        Gson gson = builder.create();&#xD;
        &#xD;
        String sUserMap = gson.toJson(user, new TypeToken&amp;gt;(){}.getType());&#xD;
        System.out.println(sUserMap);&#xD;
        // {&amp;quot;user1&amp;quot;:{&amp;quot;id&amp;quot;:1001,&amp;quot;name&amp;quot;:&amp;quot;张三&amp;quot;},&amp;quot;user2&amp;quot;:{&amp;quot;id&amp;quot;:1002,&amp;quot;name&amp;quot;:&amp;quot;李四&amp;quot;}}&#xD;
        &#xD;
        // 将JSON字符串转换为 HashMap&#xD;
        Map userMap2 = (Map)gson.fromJson(sUser, new TypeToken&amp;gt;(){}.getType());&#xD;
        System.out.println(userMap2.get(&amp;quot;user1&amp;quot;).getName());&#xD;
        // 张三&#xD;
    }&#xD;
}&#xD;
&#xD;
当然 GSON的JSON解析设置还不止这些，还有版本的注解、更改字段名称的注解等等。&#xD;
上面给的网址上有具体的开发文档，和详细的例子。&#xD;
如今 GSON 已被很多公司所采用，方便快捷。Google就是比较强大。&amp;lt;/STRING,&amp;gt;&amp;lt;/STRING,&amp;gt;&amp;lt;/STRING,&amp;gt;&amp;lt;/STRING,&amp;gt;&amp;lt;/STRING,&amp;gt;&amp;lt;/STRING,&amp;gt;&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1717317.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/04/21/1717317.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html</id><title type="text">JAVA中abstract,interface,final,static语法</title><summary type="text">一,抽象类:abstract &amp;#160;&amp;#160;&amp;#160; 1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类; &amp;#160;&amp;#160;&amp;#160; 2,抽象类中可以有具体的实现方法; &amp;#160;&amp;#160;&amp;#160; 3,抽象类中可以没有抽象方法; &amp;#160;&amp;#160;&amp;#160; 4,抽象类中的抽象方法必须被它的子类实现,如果子类没有实现,则该子类继续为...</summary><published>2010-04-20T01:13:00Z</published><updated>2010-04-20T01:13:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html"/><content type="html">&lt;p&gt;一,抽象类:abstract    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 2,抽象类中可以有具体的实现方法;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 3,抽象类中可以没有抽象方法;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 4,抽象类中的抽象方法必须被它的子类实现,如果子类没有实现,则该子类继续为抽象类     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 5,抽象类不能被实例化,但可以由抽象父类指向的子类实例来调用抽象父类中的具体实现方法;通常作为一种默认行为;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 6,要使用抽象类中的方法,必须有一个子类继承于这个抽象类,并实现抽象类中的抽象方法,通过子类的实例去调用;     &lt;br /&gt;二,接口:interface     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 1,接口中可以有成员变量,且接口中的成员变量必须定义初始化;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 2,接口中的成员方法只能是方法原型,不能有方法主体;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 3,接口的成员变量和成员方法只能public(或缺省不写),效果一样,都是public     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 4,实现接口的类必须全部实现接口中的方法(父类的实现也算,一般有通过基类实现接口中个异性不大的方法来做为适配器的做法)     &lt;br /&gt;三,关键字:final     &lt;br /&gt;&amp;#160;&amp;#160; 1,可用于修饰:成员变量,非抽象类(不能与abstract同时出现),非抽象的成员方法,以及方法参数     &lt;br /&gt;&amp;#160;&amp;#160; 2,final方法:不能被子类的方法重写,但可以被继承;     &lt;br /&gt;&amp;#160;&amp;#160; 3,final类:表示该类不能被继承,没有子类;final类中的方法也无法被继承.     &lt;br /&gt;&amp;#160;&amp;#160; 4,final变量:表示常量,只能赋值一次,赋值后不能被修改.final变量必须定义初始化;     &lt;br /&gt;&amp;#160;&amp;#160; 5,final不能用于修饰构造方法;     &lt;br /&gt;&amp;#160;&amp;#160; 6,final参数:只能使用该参数,不能修改该参数的值;     &lt;br /&gt;四,关键字:static     &lt;br /&gt;&amp;#160;&amp;#160; 1,可以修饰成员变量和成员方法,但不能修饰类以及构造方法;     &lt;br /&gt;&amp;#160;&amp;#160; 2,被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说，它不依赖类特定的实例，被类的所有实例共享     &lt;br /&gt;&amp;#160;&amp;#160; 3,static变量和static方法一般是通过类名直接访问,但也可以通过类的实例来访问(不推荐这种访问方式)     &lt;br /&gt;&amp;#160;&amp;#160; 4,static变量和static方法同样适应java访问修饰符.用public修饰的static变量和static方法,在任何地方都可以通过类名直接来访问,但用private修饰的static变量和static方法,只能在声明的本类方法及静态块中访问,但不能用this访问,因为this属于非静态变量.     &lt;br /&gt;五,static和final同时使用     &lt;br /&gt;&amp;#160;&amp;#160; 1,static final用来修饰成员变量和成员方法，可简单理解为“全局常量”！     &lt;br /&gt;&amp;#160;&amp;#160; 2,对于变量，表示一旦给值就不可修改，并且通过类名可以访问。     &lt;br /&gt;&amp;#160;&amp;#160; 3,对于方法，表示不可覆盖，并且可以通过类名直接访问。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1715863.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/03/31/1701487.html</id><title type="text">JavaScript使用ACTIVEX控件引起崩溃问题的解决</title><summary type="text">问题在本人目前的项目中，前端部分完全使用EXTJS基于&amp;ldquo;One-Page&amp;rdquo;理念搭建。除了一个HTML作为基本容器外，就全是JS文件了(页面是由JS文件实现的)。当用户切换页面时候，我们通过析构上一个页面对象，然后创建新页面对象并展现在HTML中。基于这种架构，我们还引入了一个ActiveX控件，用于展现报表。这一引入，问题就出来了：只要是访问有报表控件存在的页面，用户切换2...</summary><published>2010-03-31T07:47:00Z</published><updated>2010-03-31T07:47:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/03/31/1701487.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/03/31/1701487.html"/><content type="html">&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #ff8000;"&gt;问题&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在本人目前的项目中，前端部分完全使用EXTJS基于&amp;ldquo;One-Page&amp;rdquo;理念搭建。除了一个HTML作为基本容器外，就全是JS文件了(页面是由JS文件实现的)。当用户切换页面时候，我们通过析构上一个页面对象，然后创建新页面对象并展现在HTML中。基于这种架构，我们还引入了一个ActiveX控件，用于展现报表。这一引入，问题就出来了：只要是访问有报表控件存在的页面，用户切换2次页面，IE就会崩溃(FF无此问题)，百试不爽。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;&lt;span style="color: #ff8040;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;&lt;span style="color: #ff8000;"&gt;原因&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;因为系统设计时考虑到了资源释放，专门处理过析构部分，而且无ActiveX的页面不存在问题。故问题肯定是出在IE对包含在JS中的ActiveX控件释放出了问题。毕竟在传统的以HTML或JSP、PHP页搭建的前端中，ActiveX是属于页面的，只要用户一跳转，页面被Unload,其中的ActiveX也就销毁了;而我们的系统使用的是通过不断的重绘一张HTML页面实现跳转，也就是系统永不会刷新，也就没有Unload，ActiveX自然无法销毁，导致浏览器崩溃。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;&lt;span style="color: #ff8040;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;&lt;span style="color: #ff8000;"&gt;解决方法&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;知道了原因，我们就想想法子。既然IE无法帮我们销毁ActiveX控件。我们自己来就好了:&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;a&gt;//@AcitveXObjectID&lt;/a&gt;: 要查找的节点范围，从此节点一下查找待删除的ActiveX。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a&gt;//@ContianerID&lt;/a&gt;: 要删除的ActiveX控件ID。&lt;/p&gt;&#xD;
&lt;p&gt;function ActiveXKiller(AcitveXObjectID,ContianerID){&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&amp;nbsp;&amp;nbsp; ce=document.getElementById(ContianerID);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ce){       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var&amp;nbsp;&amp;nbsp; cce=ce.children;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(var&amp;nbsp;&amp;nbsp; i=0;i&amp;lt;cce.length;i=i+1){&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(cce[i].id==AcitveXObjectID){&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ce.removeChild(cce[i]);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;这个方法就是用来干掉ActiveX控件的。 原理也简单。就是根据给定的一个节点范围内(一般是ActiveX控件的父节点、容器), 用给定的ActiveX在Dom中的ID来逐级查找,一旦找到就手动Remove。&lt;/p&gt;&#xD;
&lt;p&gt;有了这个Killer，我们就能在页面重绘之前，先搞定ActiveX，避免了崩溃。    &lt;/p&gt;&#xD;
&lt;p&gt;另外要提到的，有一个特殊情况。就是当你将一个ActiveX控件放在了一个Ext.Window 里。而天真地想让Ext.Window在关闭的时候顺带帮你把里面的ActiveX也销毁，就必须符合一个条件：&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;ActiveX的容器必须是Ext.Window本身。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;也就是说：如果你将ActiveX控件放在一个Ext.Panel里，然后再放在Ext.Window里。就别指望Ext.Window关闭的时候可以带你的ActiveX控件&amp;ldquo;一起走&amp;rdquo;了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;&lt;span style="color: #ff8000;"&gt;GoodLuck!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1701487.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/03/31/1701487.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/03/18/1688866.html</id><title type="text">新的一年，您在学习和工作上，想坚守所学，还是尝试转型呢？</title><summary type="text">新的一年，您在学习和工作上，想坚守所学，还是尝试转型呢？(1) 继续钻研C# 4.0/ AJAX /LINQ to AD、LINQ to JavaScript / WF, WCF, WPF, Silverlight4.0/ Design Patterns / Entity Framework/ MVC/OR Mapping/ jQuery / 并行计算 &amp;amp; PLINQ/ 云计算 / Dat...</summary><published>2010-03-18T05:24:00Z</published><updated>2010-03-18T05:24:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/03/18/1688866.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/03/18/1688866.html"/><content type="html">&lt;p&gt;新的一年，您在学习和工作上，想坚守所学，还是尝试转型呢？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;(1) 继续钻研&amp;nbsp;&lt;a target="_blank" href="http://www.wintellect.com/CS/blogs/jeffreyr/archive/2009/11/01/what-s-new-in-clr-via-c-3rd-edition-as-compared-to-the-2nd-edition.aspx"&gt;C# 4.0&lt;/a&gt;&amp;nbsp;/ AJAX /&amp;nbsp;&lt;a target="_blank" href="http://www.codeplex.com/LINQtoAD"&gt;LINQ to AD&lt;/a&gt;、&lt;a target="_blank" href="http://www.codeplex.com/JSLINQ"&gt;LINQ to JavaScript&lt;/a&gt; / &lt;a target="_blank" href="http://msdn.microsoft.com/zh-cn/netframework/aa663328.aspx"&gt;WF&lt;/a&gt;, &lt;a target="_blank" href="http://msdn.microsoft.com/zh-cn/netframework/aa663324.aspx"&gt;WCF&lt;/a&gt;, WPF, Silverlight&amp;nbsp;4.0&amp;nbsp;/ Design Patterns / Entity Framework&amp;nbsp;/ &lt;a target="_blank" href="http://www.cnblogs.com/WizardWu/archive/2009/04/18/1438809.html"&gt;MVC&lt;/a&gt;&amp;nbsp;/&amp;nbsp;OR Mapping&amp;nbsp;/ jQuery / &lt;a target="_blank" href="http://blog.csdn.net/bitfan/archive/2009/09/09/4534359.aspx"&gt;并行计算&lt;/a&gt; &amp;amp; &lt;a target="_blank" href="http://blog.csdn.net/bitfan/archive/2009/10/20/4704055.aspx"&gt;PLINQ&lt;/a&gt;&amp;nbsp;/ &lt;a target="_blank" href="http://www.microsoft.com/windowsazure/"&gt;云计算&lt;/a&gt; / &lt;a target="_blank" href="http://msdn.microsoft.com/zh-cn/library/cc668792.aspx"&gt;Data Services&lt;/a&gt;&amp;nbsp;&amp;amp; &lt;a target="_blank" href="http://www.cnblogs.com/WizardWu/archive/2008/12/14/1354490.html"&gt;REST&lt;/a&gt;&amp;nbsp;/ &lt;a target="_blank" href="http://msdn.microsoft.com/zh-cn/windowsserver/ee695849(en-us).aspx"&gt;Velocity&lt;/a&gt; (已被纳入 &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/cc645013.aspx"&gt;AppFabric&lt;/a&gt;)&amp;nbsp;/ .NET 4,5,6,7,8,9,10,11,12,13 .....很多很多新技术。从程序员变资深程序员，钱少一点也无所谓，顺便祈祷这间公司不要倒闭，或因为自己年纪大被裁员。世界上没有比技术更有趣的事。&lt;br /&gt;&lt;br /&gt;(2) 接触 SD / &lt;a target="_blank" href="http://www.amazon.com/Microsoft%C2%AE-NET-Architecting-Applications-PRO-Developer/dp/073562609X"&gt;Architecture 架构设计&lt;/a&gt;&amp;nbsp;/ UML / Design Patterns / 组件、控件和框架的开发，或成为 R &amp;amp; D 人员，尽管相关职缺较少也无所谓，将来仍有机会&lt;a target="_blank" href="http://blog.csdn.net/Code6421/archive/2008/07/01/2600267.aspx"&gt;转作企业的技术雇问&lt;/a&gt;或某公司的技术总监，或自己开工作室。若创业失败，至不济，回去软件公司当个老屁股程序员，和年轻人拼技术。世界上没有比技术更有趣的事。宁愿当宅男工程师 + 草食男，死也绝不考虑转型当油头粉面的 IT 业务员。&lt;br /&gt;&lt;br /&gt;若要走这条路，建议一定要接触 Java / &lt;a target="_blank" href="http://www.amazon.com/Design-Patterns-Applied-Matjaz-Juric/dp/1861005288/ref=sr_1_32?ie=UTF8&amp;amp;s=books&amp;amp;qid=1261895437&amp;amp;sr=1-32"&gt;J2EE 的设计书籍&lt;/a&gt;或好手，而不要仅限于 .NET 领域 (&lt;a target="_blank" href="http://www.cnblogs.com/WizardWu/archive/2009/04/18/1438809.html"&gt;不是 3-Tier 就是 MVC&lt;/a&gt;，不然顶多就是 &lt;a target="_blank" href="http://msdn.microsoft.com/zh-cn/library/aa479070.aspx"&gt;PetShop&lt;/a&gt;)，否則企業級应用在設計思维上，會永遠跳脱不了既有的巢臼，尤其是中大型应用系统的分层设计、组件设计，写过 J2EE 应用的人，在组件设计上有许多独到之处，Java 在这方面甚至还有 &lt;a target="_blank" href="http://www.amazon.com/Certified-Enterprise-Architect-310-051-Certification/dp/0071488618/ref=sr_1_7?ie=UTF8&amp;amp;s=books&amp;amp;qid=1261895524&amp;amp;sr=1-7"&gt;SCEA 企业架构师&lt;/a&gt;的证照。此外，像是跨异质操作系统的分布式事务，.NET 平台上会受限于 Windows 里才有的 DTC 事务协调器组件；而 Java 方面，则有 &lt;a target="_blank" href="http://www.ibm.com/developerworks/cn/webservices/ws-transjta/"&gt;JTA (Java Transaction API)&lt;/a&gt;，可达到跨 Windows 以外的异质操作系统上的数据库的分布式事务。&lt;br /&gt;&lt;br /&gt;(3) 接触 SA 相关技能，如: UML、OOAD、MDA、&lt;a target="_blank" href="http://blog.csdn.net/Byron_Hu/archive/2007/05/01/1593950.aspx"&gt;BPM&lt;/a&gt;、企业流程的分析和规划，和业务员及客户的沟通技巧、对客户和主管的简报技巧、加强口才和忽悠能力&amp;hellip;等等，可了解许多产业的 know-how 和特性。但要开始穿西装打领带、逐渐远离编程技术，但收入比程序员稍优，至少不怕一辈子没钱买房、结婚。&lt;br /&gt;&lt;br /&gt;(4) 接触 PM 相关技能，如: 团队沟通技巧，和业务、客户的沟通技巧、对客户和主管的简报技巧、加强口才和忽悠能力&amp;hellip;等等。没事再去考个 &lt;a target="_blank" href="http://www.pmp.cn/"&gt;PMP 证照&lt;/a&gt;。逐渐远离所有技术，但相对的会有项目时程压力，工作压力也大得多，晚上还常会失眠，但收入比程序员优很多，至少不怕一辈子没钱买房、结婚。&lt;br /&gt;&lt;br /&gt;(5) 钻研某种少人玩，或很少有人有耐心研究的技术，如: SAP、Oracle ERP 和 AP 开发、BI、OLAP、资讯安全(考個 &lt;a target="_blank" href="http://bbs.cisps.org/viewforum.php?f=3"&gt;CISSP&lt;/a&gt;、TCSE、CISA &amp;hellip;证照)，或某个高贵的 workflow 产品。学成之后，辞掉现在这间接不到项目做的软件公司；新工作的求职目标，锁定金融业，或火红的电子、蕊片或光电大厂，或某个非&amp;nbsp;IT 行业的&amp;nbsp;MIS 程序员职缺，准备在某间非 IT 的公司 (金融、电子、传产或买卖业)，当后勤单位而非生财单位的 IT 通才，养老至死。&lt;br /&gt;&lt;br /&gt;(6) 从编程人员，转作网络和系统管理、考个 MCSE 或 CCxE 证照。最后却发现自己要全包所有的 IT 工作，包括修水电、换电灯炮。但最后仍免不了要继续写程序，而且工作反而变多。每天接公司员工和老板臭骂的电话，说 E-mail 收不到信或垃圾信太多、公司网络速度变慢&amp;hellip;等抱怨，连休假都要常赶回公司救火。&lt;br /&gt;&lt;br /&gt;(7) 花个几年深入钻研 SQL 语句，学到有能力改善企业的旧系统中，旧 &lt;a target="_blank" href="http://www.cnblogs.com/WizardWu/archive/2008/10/27/1320055.html"&gt;SQL 语句的性能&lt;/a&gt;，并专攻 SQL Server 或 Oracle 其中一种数据库变成专家。从编程人员，转作 DBA、考个 OCP 或 MCDBA 证照。最后却发现公司的系统，性能不佳时，明明超低超烂性能的代码不是你写的 (可能是外包或离职员工乱写的)，但所有人却都臭骂你这个 DBA。老板限期，要你一个月内改善系统性能。最后自己仍要跳下来写程序、包下旧系统维护的工作，工作量反而变多。&lt;br /&gt;&lt;br /&gt;我曾听台湾 IT 业界的人提到，某位数据库的稀有专家，帮别人公司的数据库做一次完整的 Tuning，收费可高达 30 万元台币 (人民币大约再除以 4)。不过其人必然是浸淫在 SQL 语句十几年的资深怪物级高手，绝非我等僅接触入门等级 SQL 语句的程序员，可与之比拟。&lt;br /&gt;&lt;br /&gt;(8) 学习另一个 know-how，花个一年时间钻研: 会计、财务、金融、IT法律&amp;hellip;等其中一至两项，最好再考个 会计&amp;hellip;等相关证照，以期结合本身 IT 编程技能，能维护或写出需要特定 know-how 的系统，甚至写出可销售的产品，加强自己在公司的不可取代性。你一离职的话，系统就没人可维护，老板也要看你眼色。&lt;br /&gt;&lt;br /&gt;(9) 转行，去当业务，练习口才和打扮得油头粉面，靠一张嘴吃饭，要加强忽悠和开会时说废话的能力，要接受专业的说废话训练。开始从宅男变型男，开始有女性会主动和你示好，运气好的话还可报公帐上酒店。且可避免像程序员，哪天眼睛会因为看萤幕看到瞎掉，或除夕夜还只能闭门猛啃 .NET 10 或 J2EE 10 的原文书，或大半辈子当工程师存的钱，最后都花在医院和复健。&lt;br /&gt;&lt;br /&gt;(10) 转行，去卖羊肉串或&lt;a target="_blank" href="http://www.cnblogs.com/WizardWu/archive/2009/01/29/1381275.html"&gt;香鸡排&lt;/a&gt;。但要先研究出好吃的秘方，并准备好打点流氓和警察、白道和黑道的地头费。否则每天日晒雨淋还赚不到钱，下场比写程序更惨。&lt;br /&gt;&lt;br /&gt;(11) 整合 (2)、(8) 的技术能力，及对特定产业的深入了解，加上运气好的话进入对的公司，去撰写特定产业 (如: 金融、电信、电子、制造业、&amp;hellip;)，跨系统，甚至跨公司、跨上下游产商的&amp;nbsp;Middleware，联系不同系统的中间件，实现 SOA 的整合服务概念。不过要能接触到这一块，可能需要一些机运和一流的研发能力。&lt;br /&gt;&lt;br /&gt;(12) 学习手机上的应用程序开发、靠创意突破，或转做嵌入式系统、重新学习 driver 或 firmware 的撰写，如果你的年纪还来得及转的话。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果您问我自己要选哪一项的话，我暂时会选第 (8) 项吧？&lt;br /&gt;&lt;br /&gt;玩技术累了，在做 ASP.NET 项目的公司又不被重视。准备花几个月，看纯纸本的 会计学、成本会计、ERP 财会系统开发&amp;hellip;相关书籍。晚上不开计算机感觉也满不错的，不会被声光和音效占满一整天的时间。重点是&amp;hellip;会计只要学一套、学一次就行了，不用每年追逐新版本，而我已经准备报考半年后的会计证照了。&lt;/p&gt;&#xD;
&lt;p&gt;而其中，我绝不可能选的是第 (9) 项，因为本人对该种嘴炮领域毫无兴趣。另一个原因，如同以下这份文章所描述的：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以下转贴自台湾在 2001 年 5 月发行的 Java 周报，原作者：洪志鹏 先生。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;我爱比尔盖茨&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;五一劳动节放假那天，我带儿子到诚品敦南店儿童馆看书 (注：台湾 24 小时营业的知名书店)。在书架上看到小时候常看的一套，东方出版社的世界伟人传记，怀旧之情油然而生。在爱迪生、哥白尼、爱因斯坦等伟人之中，忽然发现一个新的名字，仔细一看，居然是 &amp;ldquo;比尔盖茨 (Bill Gates)&amp;rdquo;。 拿出这本新的伟人传记一看，果然是那个比尔盖茨没错，封面除了他的手绘肖像之外，还有微软和 Windows 的 Logo。当时心想世风已经沦落至此，原本用来激励儿童奋发向上的伟人传记中，也得加上这位强取豪夺的世界首富。忿忿不平之余，也不禁用力思考，比尔盖茨何德何能和诸位世界伟人并列。想来想去，居然还让我想到一些比尔老兄的好处。虽然还不足以和爱迪生、达文西并列，但至少不会觉得那么格格不入。我甚至开始有点喜欢比尔盖茨了，下面是我的理由： &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;第一，他是一个 &amp;ldquo;技术人&amp;rdquo;。 &amp;ldquo;非我族类，其心必异&amp;rdquo;，要是用最简单的方式，把我们一般科技公司的人分成两类的话，就是 &amp;ldquo;懂技术&amp;rdquo; 和 &amp;ldquo;不懂技术&amp;rdquo;，&amp;ldquo;技术人&amp;rdquo; 和 &amp;ldquo;非技术人&amp;rdquo; 两种。一般我们程序员、系统分析师、项目经理都具有技术背景、技术知识，所以是 &amp;ldquo;技术人&amp;rdquo;。 其它的大老板、业务部门的 Sales，营销部门，则是 &amp;ldquo;非技术人&amp;rdquo;。 科技公司当然以科技产品为主，所以 &amp;ldquo;技术人&amp;rdquo; 是直接制造产品的功臣。 在 &amp;ldquo;技术人&amp;rdquo; 眼中，Sales，Marketing 最好都有技术背景，这样大家都很清楚问题出在哪儿，比较好沟通，因为大家都讲 &amp;ldquo;行话&amp;rdquo;。 如果碰到不懂技术的 Sales 甚至主管，相信这是技术人最大的梦魇。 项目时程乱订，随便更改规格，任意答应客户的无理要求，一切向钱看。 而且最让技术人受不了的是，这些 &amp;ldquo;非技术人&amp;rdquo; 往往都自以为是技术人的上司，自以为穿西装打领带、油头粉面就胜过 T 恤牛仔裤。&amp;ldquo;非技术人&amp;rdquo; 以为技术人只懂技术，&lt;span style="color: #ff0000;"&gt;光凭好技术成不了大事&lt;/span&gt;，非得靠他们这些 &amp;ldquo;懂得卖&amp;rdquo; 的人才能使公司成功。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;不过比尔盖茨的故事打破了这些神话，比尔盖茨是个 &amp;ldquo;技术人&amp;rdquo;，而且是个功力很强的 &amp;ldquo;技术人&amp;rdquo;。 没有人能否认他是一个好的 CEO，好的 Sales，好的 Marketing，是一个让对手闻风丧胆，或是咬牙切齿的公司领导人。但是基本上，他就是一个技术人。 在各大科技公司 MBA 挂帅的今日，比尔盖茨、Steve Jobs、杨致远 (注：以及后来的 Google 创办人)，这些都是技术人出头天的例子。如果就 &amp;ldquo;技术人&amp;rdquo; 和 &amp;ldquo;非技术人&amp;rdquo; 两边站开，比尔盖茨毫无疑问是 &amp;ldquo;技术人&amp;rdquo;，是 &amp;ldquo;我们这边的人&amp;rdquo;。 所以这是我开始喜欢他的第一个理由。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;理由二，他懂得技术的价值。记得之前比尔盖茨署名的信函上，他附加的头衔都是 &amp;ldquo; CEO, and a Basic Programmer&amp;rdquo;，DOS 中的 BASIC 是他一炮而红的关键，也是他念念不忘的最爱。 从 BASIC，QUICK BASIC，VISUAL BASIC，到未来的 VB.NET，虽然 BASIC 这个字占的比例越来越小，事实上也已经面目全非，但是这块神主牌永远不可能拿掉。 在他卸任 CEO 之后，新的头衔就是技术总监。 他很清楚&lt;span style="color: #ff0000;"&gt;技术是一切的根本&lt;/span&gt;，所以对技术高手一向礼遇有佳，从 NT、Windows 2000 的诞生，到现在连 Turbo Pascal 和 Delphi 的创始者 Anders Hejlsberg 也投入门下，协助打造 C# 以对抗强敌 Java。虽然他多年来不断推出漏洞百出的软件，却一样大发利市，而逐渐丧失对技术质量的要求。不过至少在表面上，他是非常尊重技术的价值。 比较起那些不学无术、花言巧语、天花乱坠，以为只靠 &amp;ldquo;销售技巧&amp;rdquo;、&amp;ldquo;沟通技巧&amp;rdquo;就能让公司成功的人，比尔盖茨还是可爱得多。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;理由三，他证明技术人可以不用 &amp;ldquo;转型&amp;rdquo;。什么叫 &amp;ldquo;转型&amp;rdquo;？ 尤其在我们台湾的科技界，有一种奇怪的说法，是写程序写久了就要&amp;ldquo;转型&amp;rdquo;，转成 Sales，或是 Project Leader。常常见到某种 Sales 自称有 &amp;ldquo;技术背景&amp;rdquo;，不过 &amp;ldquo;已经很久没 Coding 了&amp;rdquo;，&amp;ldquo;现在连代码都看不懂了&amp;rdquo;，还以此沾沾自喜，好像自此高人一等。其实我敢保证这种人就算真有 &amp;ldquo;技术背景&amp;rdquo;，也是鸦鸦乌的技术背景，现在看不懂代码，以前也没看懂过代码。 这种人我们真巴望他们都尽快&amp;ldquo;转型&amp;rdquo;，以免留在开发团队中，每天产生一堆垃圾代码。 哪有&amp;ldquo;转型&amp;rdquo;之后技术就全忘光的？ 难道换上西装领带，挂上 Sales 头衔，马上就得了失忆症，智商立刻减半？ 真懂技术的人，就算想换换跑道，当个 Sales 或 Marketing 人员，深厚的技术背景是自己的本钱，是如虎添翼的秘密武器，这些是丢不掉的。 像比尔盖茨，从 &amp;ldquo;BASIC Programmer&amp;rdquo; 起家，干了多年叱咤风云的 CEO，现在回到技术总监老本行，相信仍是技术高手。就算转型，随时可以再转回来，这才是真正的技术人。在科技这一行工作就是得具备技术知识，不然去卖保险、卖直销好了。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ece6ee;"&gt;所以，就技术眼光来看，比尔盖茨还是个不错的人。至少从这些角度想想，我就不会冲动地想发动群众来威胁书店禁止陈列这本书。不过即使这个人还可以，并不代表他们公司的产品没问题。事实上，这个星期我的 Notebook 又重灌了两次 Windows ME，想到这点我的怒气又上升了。还是赶快就此打住，免得破坏了本期赞扬比尔盖茨的和谐气氛。总而言之，比尔盖茨是一个技术人的成功范例，相信这点是无庸置疑的。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;但话说回来，遇到有「专业的傲慢」的技术人员，或不爱和人沟通的工程师，也是很让人头痛。以我自己来说，虽然不期望能辩才无碍，但在开发团队中，仍会尽量主动和工作同仁及客户，作有效且友善地沟通，尽量补足自己在编程技术以外，各方面的不足之处，而非死守住自己会的那一小块领域。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;感觉满累的，新的一年，换换口味学别的技能，半年内可能不碰新 IT 技术，说不定会有新的转机。Windows 桌面也不再放美女图，改放风景图换换口味，来张台湾東部，花蓮的「海传民宿」房间遥望出去的海景图：&lt;br /&gt;&lt;img src="http://pic002.cnblogs.com/img/WizardWu/200912/2009122715103661.jpg" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1688866.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/03/18/1688866.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/03/18/1688847.html</id><title type="text">Windows7下的CVSNT安装配置，用户分配</title><summary type="text">由于最近开发服务器送修，临时需要在windows7 下搭建一个CVS， 使用CVSNT， 但是发现安装后CVSNT Contral Panel无法使用。习惯了图形化操作 ， 突然不知道该怎么办了。 只好学习了一番CVS的命令行。顺便还解决了CVSNT没有图形化界面用来分用户，大家用一个administrator用户来commit 的尴尬。1、安装CVS。 先下载到一个CVSNT ，装上，然后重启，...</summary><published>2010-03-18T04:40:00Z</published><updated>2010-03-18T04:40:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/03/18/1688847.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/03/18/1688847.html"/><content type="html">&lt;p&gt;由于最近开发服务器送修，临时需要在windows7 下搭建一个CVS， 使用CVSNT， 但是发现安装后CVSNT Contral Panel无法使用。&lt;/p&gt;&#xD;
&lt;p&gt;习惯了图形化操作 ， 突然不知道该怎么办了。 只好学习了一番CVS的命令行。顺便还解决了CVSNT没有图形化界面用来分用户，&lt;/p&gt;&#xD;
&lt;p&gt;大家用一个administrator用户来commit 的尴尬。&lt;br /&gt;&lt;strong&gt;1、安装CVS。&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 先下载到一个CVSNT ，装上，然后重启，会发现 CVSNT Contral Panel 在windows7下面是无法启动的。&lt;/p&gt;&#xD;
&lt;p&gt;另外为了可以使用命令行还需要在环境变量"PATH"中加入CVSNT的安装目录，如 C:\Program Files\CVSNT&lt;/p&gt;&#xD;
&lt;p&gt;重启电脑后， 在dos环境下，输入cvs -v 检验一下是否安装成功。&lt;/p&gt;&#xD;
&lt;p&gt;下面使用命令行来创建Respository&lt;br /&gt;&lt;strong&gt;2、创建一个仓库&lt;/strong&gt;&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p&gt;想好将仓库放在什么位置。cvs中，仓库有计算机文件系统中的许多具有层次的文件和目录组成，在这你只需要告诉cvs这个层次结构&lt;/p&gt;&#xD;
&lt;p&gt;的顶层所在的位置。比如我这个数据仓库是放在 D:\pcms_cvs 里面。&lt;/p&gt;&#xD;
&lt;p&gt;在DOS中使用命令：cvs -d&amp;nbsp;&amp;nbsp; d:\pcms_cvs init&lt;/p&gt;&#xD;
&lt;p&gt;ok。你已经是一个cvs管理员了。CVS默认管理员的用户名和密码就是你现在的windows用户的用户名和密码.&lt;/p&gt;&#xD;
&lt;p&gt;你可以继续往这个仓库添加一个项目。然而，不能直接在仓库中创建文件：你只能使用cvs命令来操作文件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3、创建一个简单的项目(可由MyEclipse代劳，即share project)&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;导入项目，先转入到项目保存的位置。比如我的项目home就保存在d:\webserver\www\home下，在dos下转入到这个目录下。&lt;br /&gt;&amp;nbsp;&amp;nbsp; 使用命令：&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvs -d&amp;nbsp;&amp;nbsp; d:\webserver\code -m "home" home home initial&lt;/p&gt;&#xD;
&lt;p&gt;d:\webserver\code&amp;nbsp;&amp;nbsp; 是数据仓库所在的位置。&lt;br /&gt;&amp;nbsp;&amp;nbsp; -m&amp;nbsp;&amp;nbsp; &amp;ldquo;home&amp;rdquo;&amp;nbsp;&amp;nbsp; 是日志消息。&lt;br /&gt;&amp;nbsp;&amp;nbsp; 第一个home是项目名。&lt;br /&gt;&amp;nbsp;&amp;nbsp; 最后两个标记现在可以不用管。&lt;/p&gt;&#xD;
&lt;p&gt;提示：创建好项目后，不应该马上删除本地文件的内容，最好先从cvs提取home项目文件到本地，验证一下是否文件相同（只用查看一个&lt;/p&gt;&#xD;
&lt;p&gt;文件即可）。如果看起来没错，就可以删除原来的文件了&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3、管理用户和权限&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #000000;"&gt;cvs lsacl 查看权限&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvs ls&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 查看可访问的仓库&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvs passwd -r administrator -a mini 添加用户mini并绑定到administrator mini是用户,随后会提示输入此用户密码&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvs chacl -a reader,writer -u mini Root 设置用户权限（设置用户mini对仓库Root只要读写的权限）&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvs chacl -a none&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 设置所有人都无权限&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span style="color: #ff0000;"&gt;&amp;nbsp; （注：慎用，因为设置所有人都无权限将无法更权限，可以再设回所有人都拥有所有权限）&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvs chacl -a all&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 设置所有人都拥有所有权限&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;添加新用户[aaa]:cvs passwd -a aaa 回车,设置密码,OK,完成.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;绑定[aaa]到[Administrator]: cvs passwd -r administrator aaa 回车,设置密码,OK,完成&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;两次输入的密码可以不同,但以第二次输入的密码为最终密码.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;删除用户[aaa]: cvs passwd -x aaa 回车,OK,完成&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;strong&gt;3、其他注意事项&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp; 如果运行 cvs passwd 等命令的时候出现错示： cvs passwd:No CVSROOT Specified! 说明没有指定仓库路径。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp; &amp;nbsp;那么可以在命令中加入 -d 参数。即 cvs passwd -r administrator -d d:\pcms_cvs -a mini 进行操作。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp; &amp;nbsp;更简单可以配置环境变量 CVSROOT 。 即 set CVSROOT=d:\pcms_cvs 然后再进行其他操作。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;　-help 参数可以调出命令帮助， 很有用&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1688847.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/03/18/1688847.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/03/16/1687109.html</id><title type="text">My W3C Custom Mapping File</title><summary type="text">[hdhw]HotKey=WTip=Train Dragonha|cffffcc00w|rk Rider[Amls]HotKey=ZTip=Aerial Shackles -- (|cffffcc00Z|r)[Aclf]HotKey=XTip=Cloud -- (|cffffcc00X|r)[hfoo]HotKey=QTip=Train Footman -- (|cffffcc00Q|r)[hgy...</summary><published>2010-03-16T04:18:00Z</published><updated>2010-03-16T04:18:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/03/16/1687109.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/03/16/1687109.html"/><content type="html">&lt;div&gt;[hdhw]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Dragonha|cffffcc00w|rk Rider&lt;br /&gt;[Amls]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Aerial Shackles -- (|cffffcc00Z|r)&lt;br /&gt;[Aclf]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Cloud -- (|cffffcc00X|r)&lt;br /&gt;[hfoo]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Footman -- (|cffffcc00Q|r)&lt;br /&gt;[hgyr]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Flying Machine -- (|cffffcc00Q|r)&lt;br /&gt;[hkni]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train Knight -- (|cffffcc00E|r)&lt;br /&gt;[hmpr]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Priest -- (|cffffcc00W|r)&lt;br /&gt;[Ainf]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Inner Fire -- (|cffffcc00C|r)&lt;br /&gt;[Ahea]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Heal -- (|cffffcc00Z|r)&lt;br /&gt;[Adis]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Dispel Magic -- (|cffffcc00X|r)&lt;br /&gt;[hmtm]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Mortar Team -- (|cffffcc00W|r)&lt;br /&gt;[Afla]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Flare -- (|cffffcc00Z|r)&lt;br /&gt;[hpea]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Peasant -- (|cffffcc00Q|r)&lt;br /&gt;[hrif]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Rifleman -- (|cffffcc00W|r)&lt;br /&gt;[hsor]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Sorceress -- (|cffffcc00Q|r)&lt;br /&gt;[Aslo]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Slow -- (|cffffcc00Z|r)&lt;br /&gt;[Aply]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Polymorph -- (|cffffcc00C|r)&lt;br /&gt;[Aivs]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Invisibility -- (|cffffcc00X|r)&lt;br /&gt;[hspt]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train Sp|cffffcc00e|rll Breaker&lt;br /&gt;[Asps]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Spell Steal -- (|cffffcc00Z|r)&lt;br /&gt;[Acmg]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Control Magic -- (|cffffcc00X|r)&lt;br /&gt;[hrtt]&lt;br /&gt;[hgry]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Gryphon Rider -- (|cffffcc00Q|r)&lt;br /&gt;[Rhss]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Research Control Magic -- (|cffffcc00D|r)&lt;br /&gt;[Rhde]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Defend -- (|cffffcc00Z|r)&lt;br /&gt;[Rhrt]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Resear|cffffcc00c|rh Barrage&lt;br /&gt;[Rhfs]&lt;br /&gt;[hars]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Buil|cffffcc00d|r Arcane Sanctum&lt;br /&gt;[hctw]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Upgrade to Cannon Tower -- (|cffffcc00X|r)&lt;br /&gt;[hgtw]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Guard Tower -- (|cffffcc00Z|r)&lt;br /&gt;[hatw]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Upgrade to Ar|cffffcc00c|rane Tower&lt;br /&gt;[AHdr]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Siphon Mana - [|cffffcc00Level 1|r] -- (|cffffcc00C|r),Siphon Mana - [|cffffcc00Level 2|r] -- (|cffffcc00C|r),Siphon Mana - [|cffffcc00Level 3|r] -- (|cffffcc00C|r)&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Siphon Mana - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[AHfs]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Flame Strike - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Flame Strike - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Flame Strike - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Flame Strike - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AHbn]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Banish - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Banish - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Banish - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Banish - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AHpx]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Phoenix -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Phoenix -- (|cffffcc00V|r)&lt;br /&gt;[AHbz]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Bli|cffffcc00z|rzard - [|cffffcc00Level 1|r],Bli|cffffcc00z|rzard - [|cffffcc00Level 2|r],Bli|cffffcc00z|rzard - [|cffffcc00Level 3|r]&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Bli|cffffcc00z|rzard - [|cffffcc00Level %d|r]&lt;br /&gt;[AHwe]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Summon Water Elemental - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Summon Water Elemental - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Summon Water Elemental - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Summon Water Elemental - [|cffffcc00Level %d| -- (|cffffcc00X|r)&lt;br /&gt;[AHmt]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Mass Teleport -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Mass Teleport -- (|cffffcc00V|r)&lt;br /&gt;[AHtb]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Storm Bolt - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Storm Bolt - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Storm Bolt - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Storm Bolt - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AHtc]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Thunder Clap - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Thunder Clap - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Thunder Clap - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Thunder Clap - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AHav]&lt;br /&gt;[AHhb]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Holy Light - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Holy Light - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Holy Light - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Holy Light - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AHds]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Activate Divine Shield - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Activate Divine Shield - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Activate Divine Shield - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;UnHotKey=X&lt;br /&gt;UnTip=Deactivate Divine Shield -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Divine Shield - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AHre]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Resurrection -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Resurrection -- (|cffffcc00V|r)&lt;br /&gt;[CmdMove]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Move -- (|cffffcc00Q|r)&lt;br /&gt;[CmdAttack]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=Attack -- (|cffffcc00R|r)&lt;br /&gt;[CmdAttackGround]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Attack Ground -- (|cffffcc00F|r)&lt;br /&gt;[CmdBuildHuman]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Build Structure -- (|cffffcc00Z|r)&lt;br /&gt;[CmdBuildOrc]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Build Structure -- (|cffffcc00Z|r)&lt;br /&gt;[CmdBuildNightElf]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Create Building -- (|cffffcc00Z|r)&lt;br /&gt;[CmdBuildUndead]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Summon Building -- (|cffffcc00Z|r)&lt;br /&gt;[CmdHoldPos]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Hold Position -- (|cffffcc00E|r)&lt;br /&gt;[CmdPatrol]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=P|cffffcc00a|rtrol&lt;br /&gt;[CmdRally]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Set Rally Point -- (|cffffcc00F|r)&lt;br /&gt;[CmdSelectSkill]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Hero Abilities -- (|cffffcc00F|r)&lt;br /&gt;[CmdStop]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Stop -- (|cffffcc00W|r)&lt;br /&gt;[Ahar]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Gather -- (|cffffcc00F|r)&lt;br /&gt;UnHotKey=F&lt;br /&gt;UnTip=Return Resources -- (|cffffcc00F|r)&lt;br /&gt;[Ahrl]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Gather -- (|cffffcc00F|r)&lt;br /&gt;UnHotKey=F&lt;br /&gt;UnTip=Return Resources -- (|cffffcc00F|r)&lt;br /&gt;[Arep]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Repair -- (|cffffcc00S|r)&lt;br /&gt;[Anei]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Select User -- (|cffffcc00V|r)&lt;br /&gt;[Aloa]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Load -- (|cffffcc00Z|r)&lt;br /&gt;[Adro]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Unload All -- (|cffffcc00X|r)&lt;br /&gt;[Sdro]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Unload All -- (|cffffcc00X|r)&lt;br /&gt;[Adef]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Defend -- (|cffffcc00Z|r)&lt;br /&gt;UnHotKey=Z&lt;br /&gt;UnTip=Stop Defend -- (|cffffcc00Z|r)&lt;br /&gt;[Amil]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Call to Arms -- (|cffffcc00X|r)&lt;br /&gt;UnHotKey=X&lt;br /&gt;UnTip=Back to Work -- (|cffffcc00X|r)&lt;br /&gt;[Amic]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Call to Arms -- (|cffffcc00X|r)&lt;br /&gt;UnHotKey=X&lt;br /&gt;UnTip=Back to Work -- (|cffffcc00X|r)&lt;br /&gt;[Rhme]&lt;br /&gt;HotKey=Q,Q,Q&lt;br /&gt;Tip=Upgrade to Iron Forged Swords -- (|cffffcc00Q|r),Upgrade to Steel Forged Swords -- (|cffffcc00Q|r),Upgrade to Mithril Forged Swords -- (|cffffcc00Q|r)&lt;br /&gt;[Rhra]&lt;br /&gt;HotKey=W,W,W&lt;br /&gt;Tip=Upgrade to Black Gunpo|cffffcc00w|rder,Upgrade to Refined Gunpo|cffffcc00w|rder,Upgrade to Imbued Gunpo|cffffcc00w|rder&lt;br /&gt;[Rhar]&lt;br /&gt;HotKey=A,A,A&lt;br /&gt;Tip=Upgr|cffffcc00a|rde to Iron Plating,Upgr|cffffcc00a|rde to Steel Plating,Upgr|cffffcc00a|rde to Mithril Plating&lt;br /&gt;[Rhla]&lt;br /&gt;HotKey=S,S,S&lt;br /&gt;Tip=Upgrade to |cffffcc00S|rtudded Leather Armor,Upgrade to Reinforced Leather Armor -- (|cffffcc00S|r),Upgrade to Dragonhide Armor -- (|cffffcc00S|r)&lt;br /&gt;[Rhac]&lt;br /&gt;HotKey=W,W,W&lt;br /&gt;Tip=Upgrade to Improved Masonry -- (|cffffcc00W|r),Upgrade to Advanced Masonry -- (|cffffcc00W|r),Upgrade to Imbued Masonry -- (|cffffcc00W|r)&lt;br /&gt;[Rhgb]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Flying Machine Bombs -- (|cffffcc00Z|r)&lt;br /&gt;[Rhlh]&lt;br /&gt;HotKey=Q,Q&lt;br /&gt;Tip=Improved Lumber Harvesting -- (|cffffcc00Q|r),Advanced Lumber Harvesting -- (|cffffcc00Q|r)&lt;br /&gt;[Rhan]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Resear|cffffcc00c|rh Animal War Training&lt;br /&gt;[Rhpt]&lt;br /&gt;HotKey=X,X&lt;br /&gt;Tip=Priest Adept Training -- (|cffffcc00X|r),Priest Master Training -- (|cffffcc00X|r)&lt;br /&gt;[Rhst]&lt;br /&gt;HotKey=Z,Z&lt;br /&gt;Tip=Sorceress Adept Training -- (|cffffcc00Z|r),Sorceress Master Training -- (|cffffcc00Z|r)&lt;br /&gt;[Rhri]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Upgrade to Long Rifles -- (|cffffcc00X|r)&lt;br /&gt;[Rhse]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Resear|cffffcc00c|rh Magic Sentry&lt;br /&gt;[Rhfl]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Research Flare -- (|cffffcc00X|r)&lt;br /&gt;[Rhhb]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Storm Hammers -- (|cffffcc00Z|r)&lt;br /&gt;[Rhpm]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=|cffffcc00R|research Backpack&lt;br /&gt;[Rhfc]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Rese|cffffcc00a|rrch Flak Cannons&lt;br /&gt;[Rhcd]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Research Cloud -- (|cffffcc00X|r)&lt;br /&gt;[halt]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Build Altar of King|cffffcc00s|r&lt;br /&gt;[harm]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Build Workshop -- (|cffffcc00F|r)&lt;br /&gt;[hbar]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Build Barracks -- (|cffffcc00W|r)&lt;br /&gt;[hbla]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=Build Blacksmith -- (|cffffcc00R|r)&lt;br /&gt;[hcas]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Castle -- (|cffffcc00Z|r)&lt;br /&gt;[hhou]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Build F|cffffcc00a|rrm&lt;br /&gt;[hgra]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Build Gryphon Aviary -- (|cffffcc00X|r)&lt;br /&gt;[hwtw]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Build Scout Tower -- (|cffffcc00Z|r)&lt;br /&gt;[AHta]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Reveal -- (|cffffcc00Z|r)&lt;br /&gt;[hvlt]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Build Ar|cffffcc00c|rane Vault&lt;br /&gt;[hlum]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Build Lumb|cffffcc00e|rr Mill&lt;br /&gt;[hkee]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Keep -- (|cffffcc00Z|r)&lt;br /&gt;[htow]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Build Town Hall -- (|cffffcc00Q|r)&lt;br /&gt;[Hblm]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Summon Blood M|cffffcc00a|rge&lt;br /&gt;ReviveTip=Revive Blood M|cffffcc00a|rge&lt;br /&gt;AwakenTip=Revive Blood M|cffffcc00a|rge&lt;br /&gt;[Hamg]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Summon Archmage -- (|cffffcc00Z|r)&lt;br /&gt;ReviveTip=Revive Archmage -- (|cffffcc00Z|r)&lt;br /&gt;AwakenTip=Revive Archmage -- (|cffffcc00Z|r)&lt;br /&gt;[AHab]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Brillian|cffffcc00c|re Aura - [|cffffcc00Level %d|r]&lt;br /&gt;[Hmkg]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Summon Mountain King -- (|cffffcc00X|r)&lt;br /&gt;ReviveTip=Revive Mountain King -- (|cffffcc00X|r)&lt;br /&gt;AwakenTip=Revive Mountain King -- (|cffffcc00X|r)&lt;br /&gt;[AHbh]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Bash - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[Hpal]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Summon Paladin -- (|cffffcc00C|r)&lt;br /&gt;ReviveTip=Revive Paladin -- (|cffffcc00C|r)&lt;br /&gt;AwakenTip=Revive Paladin -- (|cffffcc00C|r)&lt;br /&gt;[AHad]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Devotion Aura - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[ogre]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Build Great Hall -- (|cffffcc00Q|r)&lt;br /&gt;[ostr]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Stronghold -- (|cffffcc00Z|r)&lt;br /&gt;[ofrt]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Fortress -- (|cffffcc00Z|r)&lt;br /&gt;[Ropg]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Pillag|cffffcc00e|r&lt;br /&gt;[Ropm]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=|cffffcc00R|research Backpack&lt;br /&gt;[obar]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Build Barracks -- (|cffffcc00W|r)&lt;br /&gt;[Robs]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Berserker Strength -- (|cffffcc00Z|r)&lt;br /&gt;[Robk]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Berserker Upgrade -- (|cffffcc00X|r)&lt;br /&gt;[Rotr]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Re|cffffcc00s|rearch Troll Regeneration, Re|cffffcc00s|rearch Improved Troll Regeneration, Re|cffffcc00s|rearch Advanced Troll Regeneration&lt;br /&gt;[Robf]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Burning Oil -- (|cffffcc00C|r)&lt;br /&gt;[ofor]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Build War Mill -- (|cffffcc00E|r)&lt;br /&gt;[Rome]&lt;br /&gt;HotKey=Q,Q,Q&lt;br /&gt;Tip=Upgrade to Steel Melee Weapons -- (|cffffcc00Q|r),Upgrade to Thorium Melee Weapons -- (|cffffcc00Q|r),Upgrade to Arcanite Melee Weapons -- (|cffffcc00Q|r)&lt;br /&gt;[Rora]&lt;br /&gt;HotKey=W,W,W&lt;br /&gt;Tip=Upgrade to Steel Ranged |cffffcc00W|reapons,Upgrade to Thorium Ranged |cffffcc00W|reapons,Upgrade to Arcanite Ranged |cffffcc00W|reapons&lt;br /&gt;[Rosp]&lt;br /&gt;HotKey=E,E,E&lt;br /&gt;Tip=Upgrad|cffffcc00e|r to Spiked Barricades,Upgrad|cffffcc00e|r to Improved Spiked Barricades,Upgrad|cffffcc00e|r to Advanced Spiked Barricades&lt;br /&gt;[owtw]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=Build Watch Towe|cffffcc00r|r&lt;br /&gt;[otrb]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Build Orc Burrow -- (|cffffcc00A|r)&lt;br /&gt;[Abtl]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Battle Stations -- (|cffffcc00Z|r)&lt;br /&gt;[Astd]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Stand Down -- (|cffffcc00X|r)&lt;br /&gt;[oalt]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Build Altar of |cffffcc00S|rtorms&lt;br /&gt;[osld]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Buil|cffffcc00d|r Spirit Lodge&lt;br /&gt;[Rowd]&lt;br /&gt;HotKey=X,X&lt;br /&gt;Tip=Witch Doctor Adept Training -- (|cffffcc00X|r),Witch Doctor Master Training -- (|cffffcc00X|r)&lt;br /&gt;[Rost]&lt;br /&gt;HotKey=Z,Z&lt;br /&gt;Tip=Shaman Adept Training -- (|cffffcc00Z|r),Shaman Master Training -- (|cffffcc00Z|r)&lt;br /&gt;[Rowt]&lt;br /&gt;HotKey=C,C&lt;br /&gt;Tip=Spirit Walker Adept Training -- (|cffffcc00C|r),Spirit Walker Master Training -- (|cffffcc00C|r)&lt;br /&gt;[obea]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Build Beastiary -- (|cffffcc00F|r)&lt;br /&gt;[Roen]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Ensnare -- (|cffffcc00Z|r)&lt;br /&gt;[Rwdm]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Upgrade War Drums -- (|cffffcc00C|r)&lt;br /&gt;[Rovs]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Re|cffffcc00s|rearch Envenomed Spears&lt;br /&gt;[Rolf]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Research Liqui|cffffcc00d|r Fire&lt;br /&gt;[otto]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Build Tauren Totem -- (|cffffcc00Z|r)&lt;br /&gt;[Rows]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Pulveri|cffffcc00z|re&lt;br /&gt;[ovln]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Build Voodoo Lounge -- (|cffffcc00X|r)&lt;br /&gt;[opeo]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Peon -- (|cffffcc00Q|r)&lt;br /&gt;[ogru]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Grunt -- (|cffffcc00Q|r)&lt;br /&gt;[ohun]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Troll Headhunter -- (|cffffcc00W|r)&lt;br /&gt;[Absk]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Berserk -- (|cffffcc00Z|r)&lt;br /&gt;[ocat]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train D|cffffcc00e|rmolisher&lt;br /&gt;[oshm]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Shaman -- (|cffffcc00Q|r)&lt;br /&gt;[Apg2]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Purge -- (|cffffcc00Z|r)&lt;br /&gt;[Ablo]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Bloodlust -- (|cffffcc00C|r)&lt;br /&gt;[Alsh]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Lightning Shield -- (|cffffcc00X|r)&lt;br /&gt;[Aeye]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Sentry Ward -- (|cffffcc00Z|r)&lt;br /&gt;[Asta]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Stasis Trap -- (|cffffcc00X|r)&lt;br /&gt;[Ahwd]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Healing Ward -- (|cffffcc00C|r)&lt;br /&gt;[ospm]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train Spirit Walk|cffffcc00e|rr&lt;br /&gt;[Adcn]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Disenchant -- (|cffffcc00X|r)&lt;br /&gt;[Acpf]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Corporeal Form -- (|cffffcc00V|r)&lt;br /&gt;UnHotKey=V&lt;br /&gt;UnTip=Ethereal Form -- (|cffffcc00V|r)&lt;br /&gt;[Aetf]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Ethereal Form -- (|cffffcc00V|r)&lt;br /&gt;UnHotKey=V&lt;br /&gt;UnTip=Corporeal Form -- (|cffffcc00V|r)&lt;br /&gt;[Aspl]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Spirit Link -- (|cffffcc00Z|r)&lt;br /&gt;[orai]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Raider -- (|cffffcc00Q|r)&lt;br /&gt;[Aens]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Ensnare -- (|cffffcc00Z|r)&lt;br /&gt;[okod]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Kodo Beast -- (|cffffcc00W|r)&lt;br /&gt;[Adev]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Devour -- (|cffffcc00Z|r)&lt;br /&gt;[owyv]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train Wind Rid|cffffcc00e|rr&lt;br /&gt;[Auco]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Unstable Concoction -- (|cffffcc00Z|r)&lt;br /&gt;[otbr]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=T|cffffcc00r|rain Troll Batrider&lt;br /&gt;[otau]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Tauren -- (|cffffcc00Q|r)&lt;br /&gt;[Obla]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Summon Blademaster -- (|cffffcc00Z|r)&lt;br /&gt;ReviveTip=Revive Blademaster -- (|cffffcc00Z|r)&lt;br /&gt;AwakenTip=Revive Blademaster -- (|cffffcc00Z|r)&lt;br /&gt;[AOwk]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Wind Walk - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Wind Walk - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Wind Walk - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Wind Walk - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AOmi]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Mirror Image - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Mirror Image - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Mirror Image - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Mirror Image - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AOww]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Bladestorm -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Bladestorm -- (|cffffcc00V|r)&lt;br /&gt;[Ofar]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Summon Far Seer -- (|cffffcc00X|r)&lt;br /&gt;ReviveTip=Revive Far Seer -- (|cffffcc00X|r)&lt;br /&gt;AwakenTip=Revive Far Seer -- (|cffffcc00X|r)&lt;br /&gt;[AOcl]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Chain Lightning - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Chain Lightning - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Chain Lightning - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Chain Lightning - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AOfs]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Far Sight - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Far Sight - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Far Sight - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Far Sight - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AOsf]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Feral Spirit - [|cffffcc00Level 1|r] -- (|cffffcc00C|r),Feral Spirit - [|cffffcc00Level 2|r] -- (|cffffcc00C|r),Feral Spirit - [|cffffcc00Level 3|r] -- (|cffffcc00C|r)&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Feral Spirit - [|cffffcc00Level %d|r]. -- (|cffffcc00C|r)&lt;br /&gt;[AOeq]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Earthquake -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Earthquake -- (|cffffcc00V|r)&lt;br /&gt;[Oshd]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Summon Sh|cffffcc00a|rdow Hunter&lt;br /&gt;ReviveTip=Revive Sh|cffffcc00a|rdow Hunter&lt;br /&gt;AwakenTip=Revive Sh|cffffcc00a|rdow Hunter&lt;br /&gt;[AOhw]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Healing Wave - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Healing Wave - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Healing Wave - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Healing Wave - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AOsw]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Serpent Ward - [|cffffcc00Level 1|r] -- (|cffffcc00C|r),Serpent Ward - [|cffffcc00Level 2|r] -- (|cffffcc00C|r),Serpent Ward - [|cffffcc00Level 3|r] -- (|cffffcc00C|r)&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Serpent Ward - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[Otch]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Summon Tauren |cffffcc00C|rhieftain&lt;br /&gt;ReviveTip=Revive Tauren |cffffcc00C|rhieftain&lt;br /&gt;AwakenTip=Revive Tauren |cffffcc00C|rhieftain&lt;br /&gt;[AOsh]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Shockwave - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Shockwave - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Shockwave - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Shockwave - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AOae]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Enduran|cffffcc00c|re Aura - [|cffffcc00Level %d|r]&lt;br /&gt;[AOws]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=War Stomp - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),War Stomp - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),War Stomp - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn War Stomp - [|cffffcc00Level %d|r]. -- (|cffffcc00X|r)&lt;br /&gt;[AOre]&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Reincarnation -- (|cffffcc00V|r)&lt;br /&gt;[Ashm]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Hi|cffffcc00d|re&lt;br /&gt;[Aeat]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Eat Tree -- (|cffffcc00Z|r)&lt;br /&gt;[Aroo]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Root -- (|cffffcc00C|r)&lt;br /&gt;UnHotKey=C&lt;br /&gt;UnTip=Uproot -- (|cffffcc00C|r)&lt;br /&gt;[etol]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Create Tree of Life -- (|cffffcc00Q|r)&lt;br /&gt;[etoa]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Tree of Ages -- (|cffffcc00Z|r)&lt;br /&gt;[etoe]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Tree of Eternity -- (|cffffcc00Z|r)&lt;br /&gt;[Repm]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=|cffffcc00R|research Backpack&lt;br /&gt;// Entangle gold mine&lt;br /&gt;[Aent]&lt;br /&gt;Tip=Entangle |cffffcc00G|rold Mine&lt;br /&gt;Hotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;// Entangled Gold Mine Cargo (load/unload)&lt;br /&gt;[Aenc]&lt;br /&gt;Tip=|cffffcc00L|road&lt;br /&gt;Hotkey=Z&lt;br /&gt;Untip=|cffffcc00U|rnload All&lt;br /&gt;Unhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;// Cargo Load entangled mine&lt;br /&gt;[Slo2]&lt;br /&gt;Tip=|cffffcc00L|road Wisp&lt;br /&gt;Hotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;// Cargo Unload (Instant, gold mine)&lt;br /&gt;[Adri]&lt;br /&gt;Tip=|cffffcc00U|rnload All&lt;br /&gt;Hotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;[Renb]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=R|cffffcc00e|rsearch Nature's Blessing&lt;br /&gt;[eaom]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Create Ancient of |cffffcc00W|rar&lt;br /&gt;[Reib]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Rese|cffffcc00a|rrch Improved Bows&lt;br /&gt;[Remk]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Marksmanship -- (|cffffcc00Z|r)&lt;br /&gt;[Remg]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Upgrade Moon Glaive -- (|cffffcc00X|r)&lt;br /&gt;[Repb]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Resear|cffffcc00c|rh Vorpal Blades&lt;br /&gt;[edob]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Cr|cffffcc00e|rate Hunter's Hall&lt;br /&gt;[Resm]&lt;br /&gt;HotKey=Q,Q,Q&lt;br /&gt;Tip=Upgrade to Strength of the Moon -- (|cffffcc00Q|r),Upgrade to Improved Strength of the Moon -- (|cffffcc00Q|r),Upgrade to Advanced Strength of the Moon -- (|cffffcc00Q|r)&lt;br /&gt;[Rerh]&lt;br /&gt;HotKey=S,S,S&lt;br /&gt;Tip=Upgrade to Reinforced Hide|cffffcc00s|r,Upgrade to Improved Reinforced Hide|cffffcc00s|r,Upgrade to Advanced Reinforced Hide|cffffcc00s|r&lt;br /&gt;[Reuv]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Upgrad|cffffcc00e|r to Ultravision&lt;br /&gt;[Rews]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=|cffffcc00R|research Well Spring&lt;br /&gt;[etrp]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=C|cffffcc00r|reate Ancient Protector&lt;br /&gt;[emow]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Cre|cffffcc00a|rte Moon Well&lt;br /&gt;[Ambt]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Replenish Mana and Life -- (|cffffcc00Q|r)&lt;br /&gt;[eate]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Create Altar of Elder|cffffcc00s|r&lt;br /&gt;[eaoe]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Create Ancient of Lore -- (|cffffcc00D|r)&lt;br /&gt;[Resi]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Abolish Magic -- (|cffffcc00Z|r)&lt;br /&gt;[Redc]&lt;br /&gt;HotKey=X,X&lt;br /&gt;Tip=Druid of the Claw Adept Training -- (|cffffcc00X|r),Druid of the Claw Master Training -- (|cffffcc00X|r)&lt;br /&gt;[Reeb]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Re|cffffcc00s|rearch Mark of the Claw&lt;br /&gt;[Rers]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Resear|cffffcc00c|rh Resistant Skin&lt;br /&gt;[Rehs]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Research Har|cffffcc00d|rened Skin&lt;br /&gt;[eaow]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Create Ancient of Wind -- (|cffffcc00Z|r)&lt;br /&gt;[Reht]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Hippogryph Taming -- (|cffffcc00Z|r)&lt;br /&gt;[Redt]&lt;br /&gt;HotKey=X,X&lt;br /&gt;Tip=Druid of the Talon Adept Training -- (|cffffcc00X|r),Druid of the Talon Master Training -- (|cffffcc00X|r)&lt;br /&gt;[Reec]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Re|cffffcc00s|rearch Mark of the Talon&lt;br /&gt;[edos]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Create Chimaera Roost -- (|cffffcc00X|r)&lt;br /&gt;[Recb]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Corrosive Breath -- (|cffffcc00Z|r)&lt;br /&gt;[eden]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Build An|cffffcc00c|rient of Wonders&lt;br /&gt;[ewsp]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Wisp -- (|cffffcc00Q|r)&lt;br /&gt;[Aren]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Renew -- (|cffffcc00S|r)&lt;br /&gt;[Awha]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Gather -- (|cffffcc00F|r)&lt;br /&gt;[Adtn]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Detonate -- (|cffffcc00X|r)&lt;br /&gt;[earc]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Archer -- (|cffffcc00Q|r)&lt;br /&gt;[Aco2]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Mount Hippogryph -- (|cffffcc00Z|r)&lt;br /&gt;[Adec]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Dismount Archer &amp;amp; Hippogryph -- (|cffffcc00Z|r)&lt;br /&gt;[esen]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Huntress -- (|cffffcc00W|r)&lt;br /&gt;[Aesn]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Sentinel -- (|cffffcc00Z|r)&lt;br /&gt;[ebal]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train Glaiv|cffffcc00e|r Thrower&lt;br /&gt;[edry]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Dryad -- (|cffffcc00Q|r)&lt;br /&gt;[Aadm]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Abolish Magic -- (|cffffcc00Z|r)&lt;br /&gt;[edoc]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Druid of the Cla|cffffcc00w|r&lt;br /&gt;[Aroa]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Roar -- (|cffffcc00Z|r)&lt;br /&gt;[Arej]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Rejuvenation -- (|cffffcc00X|r)&lt;br /&gt;[Abrf]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Bear Form -- (|cffffcc00V|r)&lt;br /&gt;UnHotKey=V&lt;br /&gt;UnTip=Night Elf Form -- (|cffffcc00V|r)&lt;br /&gt;[Ara2]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Roar -- (|cffffcc00Z|r)&lt;br /&gt;[emtg]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train Mountain Giant -- (|cffffcc00E|r)&lt;br /&gt;[Agra]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=War Club -- (|cffffcc00X|r)&lt;br /&gt;[Atau]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Taunt -- (|cffffcc00Z|r)&lt;br /&gt;[ehip]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Hippogryph -- (|cffffcc00Q|r)&lt;br /&gt;[Aco3]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Pick up Archer -- (|cffffcc00Z|r)&lt;br /&gt;[edot]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Druid of the Talon -- (|cffffcc00W|r)&lt;br /&gt;[Afae]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Faerie Fire -- (|cffffcc00Z|r)&lt;br /&gt;[Acyc]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Cyclone -- (|cffffcc00X|r)&lt;br /&gt;[Arav]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Storm Crow Form -- (|cffffcc00V|r)&lt;br /&gt;UnHotKey=V&lt;br /&gt;UnTip=Night Elf Form -- (|cffffcc00V|r)&lt;br /&gt;[Afa2]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Faerie Fire -- (|cffffcc00Z|r)&lt;br /&gt;[efdr]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train Fa|cffffcc00e|rrie Dragon&lt;br /&gt;[Amfl]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Mana Flare -- (|cffffcc00X|r)&lt;br /&gt;UnHotKey=X&lt;br /&gt;UnTip=Stop Mana Flare -- (|cffffcc00X|r)&lt;br /&gt;[Apsh]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Phase Shift -- (|cffffcc00Z|r)&lt;br /&gt;[echm]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Chimaera -- (|cffffcc00Q|r)&lt;br /&gt;[Edem]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Summon Demon Hunter -- (|cffffcc00Z|r)&lt;br /&gt;ReviveTip=Revive Demon Hunter -- (|cffffcc00Z|r)&lt;br /&gt;AwakenTip=Revive Demon Hunter -- (|cffffcc00Z|r)&lt;br /&gt;[AEmb]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Mana Burn - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Mana Burn - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Mana Burn - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Mana Burn - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AEim]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Activate Immolation - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Activate Immolation - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Activate Immolation - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;UnHotKey=X&lt;br /&gt;UnTip=Deactivate Immolation -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Immolation - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AEev]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Evasion - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[AEme]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Metamorphosis -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Metamorphosis -- (|cffffcc00V|r)&lt;br /&gt;[Ekee]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Summon Keeper of the Grove -- (|cffffcc00X|r)&lt;br /&gt;ReviveTip=Revive Keeper of the Grove -- (|cffffcc00X|r)&lt;br /&gt;AwakenTip=Revive Keeper of the Grove -- (|cffffcc00X|r)&lt;br /&gt;[AEer]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Entangling Roots - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Entangling Roots - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Entangling Roots - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Entangling Roots - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AEfn]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Force of Nature - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Force of Nature - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Force of Nature - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Force of Nature - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AEah]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Thorns Aura - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[AEtq]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Tranquility -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Tranquility -- (|cffffcc00V|r)&lt;br /&gt;[Emoo]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Summon Priestess of the Moon -- (|cffffcc00C|r)&lt;br /&gt;ReviveTip=Revive Priestess of the Moon -- (|cffffcc00C|r)&lt;br /&gt;AwakenTip=Revive Priestess of the Moon -- (|cffffcc00C|r)&lt;br /&gt;[AEst]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Scout - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Scout - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Scout - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Scout - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AHfa]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Searing Arrows - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Searing Arrows - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Searing Arrows - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Searing Arrows - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AEar]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Trueshot Aura - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[AEsf]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Starfall -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Starfall -- (|cffffcc00V|r)&lt;br /&gt;[Ewar]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Summon W|cffffcc00a|rrden&lt;br /&gt;ReviveTip=Revive W|cffffcc00a|rrden&lt;br /&gt;AwakenTip=Revive W|cffffcc00a|rrden&lt;br /&gt;[AEbl]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Blink - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Blink - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Blink - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Blink - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AEfk]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Fan of Knives - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Fan of Knives - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Fan of Knives - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Fan of Knives - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AEsh]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Shadow Strike - [|cffffcc00Level 1|r] -- (|cffffcc00C|r),Shadow Strike - [|cffffcc00Level 2|r] -- (|cffffcc00C|r),Shadow Strike - [|cffffcc00Level 3|r] -- (|cffffcc00C|r)&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Shadow Strike - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[Avng]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Spirit of Vengeance -- (|cffffcc00Z|r)&lt;br /&gt;[unpl]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Summon Necropolis -- (|cffffcc00Q|r)&lt;br /&gt;[unp1]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Halls of the Dead -- (|cffffcc00Z|r)&lt;br /&gt;[unp2]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Black Citadel -- (|cffffcc00Z|r)&lt;br /&gt;[Rupm]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=|cffffcc00R|research Backpack&lt;br /&gt;[uaco]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Acolyte -- (|cffffcc00Q|r)&lt;br /&gt;[Auns]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Unsummon Building -- (|cffffcc00X|r)&lt;br /&gt;[Aaha]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Gather -- (|cffffcc00F|r)&lt;br /&gt;[Arst]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Re|cffffcc00s|rtore&lt;br /&gt;[usep]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Summon Crypt -- (|cffffcc00W|r)&lt;br /&gt;[Ruac]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Rese|cffffcc00a|rrch Cannibalize&lt;br /&gt;[Rubu]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Re|cffffcc00s|rearch Burrow&lt;br /&gt;[Ruwb]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Research Web -- (|cffffcc00X|r)&lt;br /&gt;[Rusf]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Resear|cffffcc00c|rh Stone Form&lt;br /&gt;[ugho]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Ghoul -- (|cffffcc00Q|r)&lt;br /&gt;[Acan]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Cannibali|cffffcc00z|re&lt;br /&gt;[ucry]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Crypt Fiend -- (|cffffcc00W|r)&lt;br /&gt;[Aweb]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Web -- (|cffffcc00Z|r)&lt;br /&gt;[Abur]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Burrow -- (|cffffcc00V|r)&lt;br /&gt;UnHotKey=V&lt;br /&gt;UnTip=Unburrow -- (|cffffcc00V|r)&lt;br /&gt;[ugar]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Train Gargoyl|cffffcc00e|r&lt;br /&gt;[Astn]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Stone Form -- (|cffffcc00Z|r)&lt;br /&gt;UnHotKey=Z&lt;br /&gt;UnTip=Gargoyle Form -- (|cffffcc00Z|r)&lt;br /&gt;[ugol]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Haunt Gold Min|cffffcc00e|r&lt;br /&gt;[ugrv]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=Summon G|cffffcc00r|raveyard&lt;br /&gt;[Rume]&lt;br /&gt;HotKey=Q,Q,Q&lt;br /&gt;Tip=Upgrade to Unholy Strength -- (|cffffcc00Q|r),Upgrade to Improved Unholy Strength -- (|cffffcc00Q|r),Upgrade to Advanced Unholy Strength -- (|cffffcc00Q|r)&lt;br /&gt;[Rura]&lt;br /&gt;HotKey=W,W,W&lt;br /&gt;Tip=Upgrade to Creature Attack -- (|cffffcc00W|r),Upgrade to Improved Creature Attack -- (|cffffcc00W|r),Upgrade to Advanced Creature Attack -- (|cffffcc00W|r)&lt;br /&gt;[Ruar]&lt;br /&gt;HotKey=A,A,A&lt;br /&gt;Tip=Upgr|cffffcc00a|rde to Unholy Armor,Upgr|cffffcc00a|rde to Improved Unholy Armor,Upgr|cffffcc00a|rde to Advanced Unholy Armor&lt;br /&gt;[Rucr]&lt;br /&gt;HotKey=S,S,S&lt;br /&gt;Tip=Upgrade to Creature Carapace -- (|cffffcc00S|r),Upgrade to Improved Creature Carapace -- (|cffffcc00S|r),Upgrade to Advanced Creature Carapace -- (|cffffcc00S|r)&lt;br /&gt;[uzig]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Summon Ziggur|cffffcc00a|rt&lt;br /&gt;[uzg1]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Upgrade to Spirit Tower -- (|cffffcc00Z|r)&lt;br /&gt;[uzg2]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Upgrade to Nerubian Tower -- (|cffffcc00X|r)&lt;br /&gt;[uaod]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=|cffffcc00S|rummon Altar of Darkness&lt;br /&gt;[utod]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Summon Temple of the |cffffcc00D|ramned&lt;br /&gt;[Rune]&lt;br /&gt;HotKey=Z,Z&lt;br /&gt;Tip=Necromancer Adept Training -- (|cffffcc00Z|r),Necromancer Master Training -- (|cffffcc00Z|r)&lt;br /&gt;[Ruba]&lt;br /&gt;HotKey=X,X&lt;br /&gt;Tip=Banshee Adept Training -- (|cffffcc00X|r),Banshee Master Training -- (|cffffcc00X|r)&lt;br /&gt;[Rusl]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Resear|cffffcc00c|rh Skeletal Longevity&lt;br /&gt;[Rusm]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Research Skeletal Mastery -- (|cffffcc00D|r)&lt;br /&gt;[unec]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Necromancer -- (|cffffcc00Q|r)&lt;br /&gt;[Arai]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Raise Dead -- (|cffffcc00Z|r)&lt;br /&gt;[Auhf]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Unholy Frenzy -- (|cffffcc00X|r)&lt;br /&gt;[uban]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Banshee -- (|cffffcc00W|r)&lt;br /&gt;[Acrs]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Curse -- (|cffffcc00Z|r)&lt;br /&gt;[Aam2]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Anti-magic Shell -- (|cffffcc00X|r)&lt;br /&gt;[Aps2]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Possession -- (|cffffcc00C|r)&lt;br /&gt;[uslh]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Summon Slaughterhouse -- (|cffffcc00F|r)&lt;br /&gt;[Ruex]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Exhume Corpses -- (|cffffcc00Z|r)&lt;br /&gt;[Rupc]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Research Disease Cloud -- (|cffffcc00X|r)&lt;br /&gt;[Rusp]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Resear|cffffcc00c|rh Destroyer Form&lt;br /&gt;[umtw]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Meat Wagon -- (|cffffcc00Q|r)&lt;br /&gt;[Amel]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Get Corpse -- (|cffffcc00Z|r)&lt;br /&gt;[Amed]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Drop All Corpses -- (|cffffcc00X|r)&lt;br /&gt;[uabo]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Train Abomination -- (|cffffcc00W|r)&lt;br /&gt;[Acn2]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Cannibali|cffffcc00z|re&lt;br /&gt;[uobs]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Cr|cffffcc00e|rate Obsidian Statue&lt;br /&gt;[Arpm]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Spirit Touch -- (|cffffcc00X|r)&lt;br /&gt;[Arpl]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Essence of Blight -- (|cffffcc00Z|r)&lt;br /&gt;[ubsp]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Morph into Destroyer -- (|cffffcc00V|r)&lt;br /&gt;[Afak]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Orb of Annihilation -- (|cffffcc00X|r)&lt;br /&gt;[Advm]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Devour Magic -- (|cffffcc00Z|r)&lt;br /&gt;[Aabs]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Absorb Mana -- (|cffffcc00V|r)&lt;br /&gt;[usap]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Summon Sacrificial Pit -- (|cffffcc00Z|r)&lt;br /&gt;[Alam]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Sacrifice -- (|cffffcc00Q|r)&lt;br /&gt;[ubon]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Summon Boneyard -- (|cffffcc00X|r)&lt;br /&gt;[Rufb]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Research Free|cffffcc00z|ring Breath&lt;br /&gt;[ufro]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Train Frost Wyrm -- (|cffffcc00Q|r)&lt;br /&gt;[utom]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Summon Tomb of Reli|cffffcc00c|rs&lt;br /&gt;[Ucrl]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Summon Crypt Lord -- (|cffffcc00A|r)&lt;br /&gt;ReviveTip=Revive Crypt Lord -- (|cffffcc00A|r)&lt;br /&gt;AwakenTip=Revive Crypt Lord -- (|cffffcc00A|r)&lt;br /&gt;[AUim]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Impale - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Impale - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Impale - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Impale - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AUts]&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Spiked Carapace - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[Abu2]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Burrow -- (|cffffcc00V|r)&lt;br /&gt;UnHotKey=V&lt;br /&gt;UnTip=Unburrow -- (|cffffcc00V|r)&lt;br /&gt;[Abu3]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Burrow -- (|cffffcc00V|r)&lt;br /&gt;UnHotKey=V&lt;br /&gt;UnTip=Unburrow -- (|cffffcc00V|r)&lt;br /&gt;[AUls]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Locust Swarm -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Locust Swarm -- (|cffffcc00V|r)&lt;br /&gt;[Udea]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Summon Death Knight -- (|cffffcc00Z|r)&lt;br /&gt;ReviveTip=Revive Death Knight -- (|cffffcc00Z|r)&lt;br /&gt;AwakenTip=Revive Death Knight -- (|cffffcc00Z|r)&lt;br /&gt;[AUdc]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Death Coil - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Death Coil - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Death Coil - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Death Coil - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AUau]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Unholy Aura - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[AUdp]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Death Pact - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Death Pact - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Death Pact - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Death Pact - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AUan]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Animate Dead -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Animate Dead -- (|cffffcc00V|r)&lt;br /&gt;[Udre]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Summon Dreadlord -- (|cffffcc00X|r)&lt;br /&gt;ReviveTip=Revive Dreadlord -- (|cffffcc00X|r)&lt;br /&gt;AwakenTip=Revive Dreadlord -- (|cffffcc00X|r)&lt;br /&gt;[AUcs]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Carrion Swarm - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Carrion Swarm - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Carrion Swarm - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Carrion Swarm - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AUsl]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Sleep - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Sleep - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Sleep - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Sleep - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AUav]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Vampiri|cffffcc00c|r Aura - [|cffffcc00Level %d|r]&lt;br /&gt;[AUin]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Inferno -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Inferno -- (|cffffcc00V|r)&lt;br /&gt;[Ulic]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Summon Li|cffffcc00c|rh&lt;br /&gt;ReviveTip=Revive Li|cffffcc00c|rh&lt;br /&gt;AwakenTip=Revive Li|cffffcc00c|rh&lt;br /&gt;[AUfn]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Frost Nova - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Frost Nova - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Frost Nova - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Frost Nova - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[AUfu]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Frost Armor - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Frost Armor - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Frost Armor - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Frost Armor - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[AUdr]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Dark Ritual - [|cffffcc00Level 1|r] -- (|cffffcc00C|r),Dark Ritual - [|cffffcc00Level 2|r] -- (|cffffcc00C|r),Dark Ritual - [|cffffcc00Level 3|r] -- (|cffffcc00C|r)&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Dark Ritual - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[AUdd]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Death And Decay -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Death And Decay -- (|cffffcc00V|r)&lt;br /&gt;[Nngs]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Summon N|cffffcc00a|rga Sea Witch&lt;br /&gt;ReviveTip=Revive N|cffffcc00a|rga Sea Witch&lt;br /&gt;AwakenTip=Revive N|cffffcc00a|rga Sea Witch&lt;br /&gt;[ANms]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=A|cffffcc00c|rtivate Mana Shield - [|cffffcc00Level 1|r],A|cffffcc00c|rtivate Mana Shield - [|cffffcc00Level 2|r],A|cffffcc00c|rtivate Mana Shield - [|cffffcc00Level 3|r]&lt;br /&gt;UnHotKey=C&lt;br /&gt;UnTip=Dea|cffffcc00c|rtivate Mana Shield&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Mana Shield - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[ANfl]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Forked Lightning - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Forked Lightning - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Forked Lightning - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Forked Lightning - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[ANfa]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Frost Arrows - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Frost Arrows - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Frost Arrows - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Frost Arrows - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[ANto]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Tornado -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Tornado -- (|cffffcc00V|r)&lt;br /&gt;[Nplh]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Summon Pit Lord -- (|cffffcc00Z|r)&lt;br /&gt;ReviveTip=Revive Pit Lord -- (|cffffcc00Z|r)&lt;br /&gt;AwakenTip=Revive Pit Lord -- (|cffffcc00Z|r)&lt;br /&gt;[ANht]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Howl of Terror - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Howl of Terror - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Howl of Terror - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Howl of Terror - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[ANrf]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Rain of Fire - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Rain of Fire - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Rain of Fire - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Rain of Fire - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[ANdo]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Doom -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Doom -- (|cffffcc00V|r)&lt;br /&gt;[Npbm]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Summon Pan|cffffcc00d|raren Brewmaster&lt;br /&gt;ReviveTip=Revive Pan|cffffcc00d|raren Brewmaster&lt;br /&gt;AwakenTip=Revive Pan|cffffcc00d|raren Brewmaster&lt;br /&gt;[ANbf]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Breath of Fire - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Breath of Fire - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Breath of Fire - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Breath of Fire - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[ANdb]&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Drunken Brawler - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[ANdh]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Drunken Haze - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Drunken Haze - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Drunken Haze - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Drunken Haze - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[ANef]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Storm; Earth; And Fire -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Storm, Earth, And Fire -- (|cffffcc00V|r)&lt;br /&gt;[ANwk]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Wind Walk -- (|cffffcc00Z|r)&lt;br /&gt;[ACcy]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Cyclone -- (|cffffcc00X|r)&lt;br /&gt;[Adsm]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Dispel Magi|cffffcc00c|r&lt;br /&gt;[ANta]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Taunt -- (|cffffcc00Z|r)&lt;br /&gt;[Nbst]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Summon Beastmaster -- (|cffffcc00X|r)&lt;br /&gt;ReviveTip=Revive Beastmaster -- (|cffffcc00X|r)&lt;br /&gt;AwakenTip=Revive Beastmaster -- (|cffffcc00X|r)&lt;br /&gt;[ANsg]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Summon Bear - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Summon Bear - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Summon Bear - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Summon Bear - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[ANsq]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Summon Quilbeast - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Summon Quilbeast - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Summon Quilbeast - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Summon Quilbeast - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[ANsw]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Summon Hawk - [|cffffcc00Level 1|r] -- (|cffffcc00C|r),Summon Hawk - [|cffffcc00Level 2|r] -- (|cffffcc00C|r),Summon Hawk - [|cffffcc00Level 3|r] -- (|cffffcc00C|r)&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Summon Hawk - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[ANst]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Stampede -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Stampede -- (|cffffcc00V|r)&lt;br /&gt;[ANbl]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Blink -- (|cffffcc00Z|r)&lt;br /&gt;[Nbrn]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=|cffffcc00S|rummon Dark Ranger&lt;br /&gt;ReviveTip=Revive Dark Ranger -- (|cffffcc00S|r)&lt;br /&gt;AwakenTip=Revive Dark Ranger -- (|cffffcc00S|r)&lt;br /&gt;[ANba]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Black Arrow - [|cffffcc00Level 1|r] -- (|cffffcc00X|r),Black Arrow - [|cffffcc00Level 2|r] -- (|cffffcc00X|r),Black Arrow - [|cffffcc00Level 3|r] -- (|cffffcc00X|r)&lt;br /&gt;ResearchHotKey=X&lt;br /&gt;ResearchTip=Learn Black Arrow - [|cffffcc00Level %d|r] -- (|cffffcc00X|r)&lt;br /&gt;[ANsi]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Silence - [|cffffcc00Level 1|r] -- (|cffffcc00Z|r),Silence - [|cffffcc00Level 2|r] -- (|cffffcc00Z|r),Silence - [|cffffcc00Level 3|r] -- (|cffffcc00Z|r)&lt;br /&gt;ResearchHotKey=Z&lt;br /&gt;ResearchTip=Learn Silence - [|cffffcc00Level %d|r] -- (|cffffcc00Z|r)&lt;br /&gt;[ANdr]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Life Drain - [|cffffcc00Level 1|r] -- (|cffffcc00C|r),Life Drain - [|cffffcc00Level 2|r] -- (|cffffcc00C|r),Life Drain - [|cffffcc00Level 3|r] -- (|cffffcc00C|r)&lt;br /&gt;ResearchHotKey=C&lt;br /&gt;ResearchTip=Learn Life Drain - [|cffffcc00Level %d|r] -- (|cffffcc00C|r)&lt;br /&gt;[ANch]&lt;br /&gt;HotKey=V&lt;br /&gt;Tip=Charm -- (|cffffcc00V|r)&lt;br /&gt;ResearchHotKey=V&lt;br /&gt;ResearchTip=Learn Charm -- (|cffffcc00V|r)&lt;br /&gt;[sreg]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Purchase Scroll of Regeneration -- (|cffffcc00Q|r)&lt;br /&gt;[plcl]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Purchase Lesser Clarity Potion -- (|cffffcc00W|r)&lt;br /&gt;[phea]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Purch|cffffcc00a|rse Potion of Healing&lt;br /&gt;[pman]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Purcha|cffffcc00s|re Potion of Mana&lt;br /&gt;[stwp]&lt;br /&gt;HotKey=D&lt;br /&gt;Tip=Purchase Scroll of Town Portal -- (|cffffcc00D|r)&lt;br /&gt;[tsct]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Purchase Ivory Tower -- (|cffffcc00F|r)&lt;br /&gt;[ofir]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Purchase Orb of Fire -- (|cffffcc00Z|r)&lt;br /&gt;[ssan]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Purchase Staff of Sanctuary -- (|cffffcc00X|r)&lt;br /&gt;[hslv]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Purchase Healing Salve -- (|cffffcc00Q|r)&lt;br /&gt;[shas]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Purchas|cffffcc00e|r Scroll of Speed&lt;br /&gt;[olig]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Purchase Orb of Lightning -- (|cffffcc00Z|r)&lt;br /&gt;[tgrh]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Purchase Tiny Great Hall -- (|cffffcc00X|r)&lt;br /&gt;[moon]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Purchase Moonstone -- (|cffffcc00Q|r)&lt;br /&gt;[dust]&lt;br /&gt;HotKey=R&lt;br /&gt;Tip=Pu|cffffcc00r|rchase Dust of Appearance&lt;br /&gt;[spre]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Purchase Sta|cffffcc00f|rf of Preservation&lt;br /&gt;[oven]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Purchase Orb of Venom -- (|cffffcc00Z|r)&lt;br /&gt;[pams]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip= Purchase Anti-magic Potion -- (|cffffcc00X|r)&lt;br /&gt;[rnec]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Purchase Rod of Necromancy -- (|cffffcc00Q|r)&lt;br /&gt;[skul]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Purchas|cffffcc00e|r Sacrificial Skull&lt;br /&gt;[ocor]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Purchase Orb of Corruption -- (|cffffcc00Z|r)&lt;br /&gt;[shea]&lt;br /&gt;HotKey=X&lt;br /&gt;Tip=Purchase Scroll of Healing -- (|cffffcc00X|r)&lt;br /&gt;[bspd]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Purchase Boots of Speed -- (|cffffcc00Q|r)&lt;br /&gt;[prvt]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Purchase Periapt of Vitality -- (|cffffcc00W|r)&lt;br /&gt;[cnob]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Purchas|cffffcc00e|r Circlet of Nobility&lt;br /&gt;[spro]&lt;br /&gt;HotKey=A&lt;br /&gt;Tip=Purch|cffffcc00a|rse Scroll of Protection&lt;br /&gt;[pinv]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Purcha|cffffcc00s|re Potion of Invisibility&lt;br /&gt;[stel]&lt;br /&gt;HotKey=F&lt;br /&gt;Tip=Purchase Sta|cffffcc00f|rf of Teleportation&lt;br /&gt;[tret]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Purchase Tome of Retraining -- (|cffffcc00Z|r)&lt;br /&gt;[pnvl]&lt;br /&gt;HotKey=C&lt;br /&gt;Tip=Pur|cffffcc00c|rhase Potion of Lesser Invulnerability&lt;br /&gt;[ngsp]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Hire Goblin Sapper -- (|cffffcc00Q|r)&lt;br /&gt;[Asds]&lt;br /&gt;HotKey=Z&lt;br /&gt;Tip=Kaboom! -- (|cffffcc00Z|r)&lt;br /&gt;[nzep]&lt;br /&gt;HotKey=W&lt;br /&gt;Tip=Hire Goblin Zeppelin -- (|cffffcc00W|r)&lt;br /&gt;[ngir]&lt;br /&gt;HotKey=E&lt;br /&gt;Tip=Hir|cffffcc00e|r Goblin Shredder&lt;br /&gt;[Ahr2]&lt;br /&gt;HotKey=F&lt;br /&gt;UnHotKey=F&lt;br /&gt;UnTip=Return Resources -- (|cffffcc00F|r)&lt;br /&gt;[nbot]&lt;br /&gt;HotKey=Q&lt;br /&gt;Tip=Hire Transport Ship -- (|cffffcc00Q|r)&lt;br /&gt;[Ahrp]&lt;br /&gt;HotKey=S&lt;br /&gt;Tip=Repair -- (|cffffcc00S|r)&lt;br /&gt;//////////////////////////////////////////////////////&lt;br /&gt;// Neutral heroes &amp;amp; neutral hero abilities&lt;br /&gt;// Includes neutral hero summoned unit abilities&lt;br /&gt;// Does not include mercenaries or mercenary abilities&lt;br /&gt;//////////////////////////////////////////////////////&lt;/div&gt;&#xD;
&lt;div&gt;/////////////////////&lt;br /&gt;// Sea Witch Abilities&lt;br /&gt;/////////////////////&lt;/div&gt;&#xD;
&lt;div&gt;//sea witch&lt;br /&gt;[Nngs]&lt;br /&gt;Hotkey=A&lt;br /&gt;Tip=Summon Na|cffffcc00g|ra Sea Witch&lt;br /&gt;Revivetip=Revive Na|cffffcc00g|ra Sea Witch&lt;br /&gt;Awakentip=Revive Na|cffffcc00g|ra Sea Witch&lt;/div&gt;&#xD;
&lt;div&gt;// Mana Shield (Sea Witch)&lt;br /&gt;[ANms]&lt;br /&gt;Tip=Activate Ma|cffffcc00n|ra Shield - [|cffffcc00Level 1|r],Activate Ma|cffffcc00n|ra Shield - [|cffffcc00Level 2|r],Activate Ma|cffffcc00n|ra Shield - [|cffffcc00Level 3|r]&lt;br /&gt;Untip=Deactivate Ma|cffffcc00n|ra Shield&lt;br /&gt;Hotkey=C&lt;br /&gt;Unhotkey=C&lt;br /&gt;Researchtip="Learn Ma|cffffcc00n|ra Shield - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=C&lt;/div&gt;&#xD;
&lt;div&gt;// Forked Lightning (Sea Witch)&lt;br /&gt;[ANfl]&lt;br /&gt;Tip=|cffffcc00F|rorked Lightning - [|cffffcc00Level 1|r],|cffffcc00F|rorked Lightning - [|cffffcc00Level 2|r],|cffffcc00F|rorked Lightning - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip="Learn |cffffcc00F|rorked Lightning - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;// Frost Arrows (Sea Witch)&lt;br /&gt;[ANfa]&lt;br /&gt;Tip=F|cffffcc00r|rost Arrows - [|cffffcc00Level 1|r],F|cffffcc00r|rost Arrows - [|cffffcc00Level 2|r],F|cffffcc00r|rost Arrows - [|cffffcc00Level 3|r]&lt;br /&gt;Untip="|cffc3dbffRight-click to activate auto-casting.|r"&lt;br /&gt;Hotkey=X&lt;br /&gt;Unhotkey=X&lt;br /&gt;Researchtip="Learn F|cffffcc00r|rost Arrows - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;// Tornado (Sea Witch)&lt;br /&gt;[ANto]&lt;br /&gt;Tip=|cffffcc00T|rornado&lt;br /&gt;Hotkey=V&lt;br /&gt;Researchtip="Learn |cffffcc00T|rornado"&lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;/////////////////////&lt;br /&gt;// Pit Lord&lt;br /&gt;/////////////////////&lt;/div&gt;&#xD;
&lt;div&gt;//pit lord&lt;br /&gt;[Nplh]&lt;br /&gt;Hotkey=Z&lt;br /&gt;Tip=Summon P|cffffcc00i|rt Lord&lt;br /&gt;Revivetip=Revive P|cffffcc00i|rt Lord&lt;br /&gt;Awakentip=Revive P|cffffcc00i|rt Lord&lt;/div&gt;&#xD;
&lt;div&gt;// Howl of Terror (Pit Lord)&lt;br /&gt;[ANht]&lt;br /&gt;Tip=Howl of |cffffcc00T|rerror - [|cffffcc00Level 1|r],Howl of |cffffcc00T|rerror - [|cffffcc00Level 2|r],Howl of |cffffcc00T|rerror - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=T&lt;br /&gt;Researchtip="Learn Howl of |cffffcc00T|rerror - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;// Rain of Fire (Pit Lord)&lt;br /&gt;[ANrf]&lt;br /&gt;Tip=Rain of |cffffcc00F|rire - [|cffffcc00Level 1|r],Rain of |cffffcc00F|rire - [|cffffcc00Level 2|r],Rain of |cffffcc00F|rire - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip=Learn Rain of |cffffcc00F|rire - [|cffffcc00Level %d|r]&lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;// Cleaving Attack (Pit Lord)&lt;br /&gt;[ANca]&lt;br /&gt;Tip=Cleaving Attack - [|cffffcc00Level 1|r],Cleaving Attack - [|cffffcc00Level 2|r],Cleaving Attack - [|cffffcc00Level 3|r]&lt;br /&gt;Researchtip="Learn |cffffcc00C|rleaving Attack - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=C&lt;/div&gt;&#xD;
&lt;div&gt;// Doom (Pit Lord)&lt;br /&gt;[ANdo]&lt;br /&gt;Tip=|cffffcc00D|room&lt;br /&gt;Hotkey=V&lt;br /&gt;Researchtip="Learn |cffffcc00D|room"&lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;////////////////////////////////&lt;br /&gt;// Pandaren Brewmaster &lt;br /&gt;////////////////////////////////&lt;/div&gt;&#xD;
&lt;div&gt;//pandaren brewmaster&lt;br /&gt;[Npbm]&lt;br /&gt;Hotkey=D&lt;br /&gt;Tip=Summon Pa|cffffcc00n|rdaren Brewmaster&lt;br /&gt;Revivetip=Revive Pa|cffffcc00n|rdaren Brewmaster&lt;br /&gt;Awakentip=Revive Pa|cffffcc00n|rdaren Brewmaster&lt;/div&gt;&#xD;
&lt;div&gt;// Breath of Fire (Pandaren Brewmaster)&lt;br /&gt;[ANbf]&lt;br /&gt;Tip=Breath of |cffffcc00F|rire - [|cffffcc00Level 1|r],Breath of |cffffcc00F|rire - [|cffffcc00Level 2|r],Breath of |cffffcc00F|rire - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip="Learn Breath of |cffffcc00F|rire - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;// Drunken Brawler (Pandaren Brewmaster)&lt;br /&gt;[ANdb]&lt;br /&gt;Tip=Drunken Brawler - [|cffffcc00Level 1|r],Drunken Brawler - [|cffffcc00Level 2|r],Drunken Brawler - [|cffffcc00Level 3|r]&lt;br /&gt;Researchtip="Learn Drunken |cffffcc00B|rrawler - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=C&lt;/div&gt;&#xD;
&lt;div&gt;// Drunken Haze (Pandaren Brewmaster)&lt;br /&gt;[ANdh]&lt;br /&gt;Tip=|cffffcc00D|rrunken Haze - [|cffffcc00Level 1|r],|cffffcc00D|rrunken Haze - [|cffffcc00Level 2|r],|cffffcc00D|rrunken Haze - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=X&lt;br /&gt;Researchtip="Learn |cffffcc00D|rrunken Haze - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;// Storm, Earth, and Fire (Pandaren Brewmaster)&lt;br /&gt;[ANef]&lt;br /&gt;Tip="Storm, |cffffcc00E|rarth, And Fire"&lt;br /&gt;Hotkey=V&lt;br /&gt;Researchtip="Learn Storm, |cffffcc00E|rarth, And Fire"&lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;//////////////////////&lt;br /&gt;//Mini-Panda Abilities&lt;br /&gt;//////////////////////&lt;/div&gt;&#xD;
&lt;div&gt;// Wind Walk (wind panda)&lt;br /&gt;[ANwk]&lt;br /&gt;Tip=|cffffcc00W|rind Walk&lt;br /&gt;Hotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;// cyclone (Wind panda + various creeps -- shared ability)&lt;br /&gt;[ACcy]&lt;br /&gt;Tip=|cffffcc00C|ryclone&lt;br /&gt;Hotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;// dispel magic (wind panda + various creeps -- shared ability)&lt;br /&gt;[Adsm]&lt;br /&gt;Tip=|cffffcc00D|rispel Magic&lt;br /&gt;Hotkey=C&lt;/div&gt;&#xD;
&lt;div&gt;// Taunt (earth panda)&lt;br /&gt;[ANta]&lt;br /&gt;Tip=|cffffcc00T|raunt&lt;br /&gt;Hotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;////////////////////////&lt;br /&gt;// Beastmaster&lt;br /&gt;////////////////////////&lt;/div&gt;&#xD;
&lt;div&gt;//beastmaster&lt;br /&gt;[Nbst]&lt;br /&gt;Hotkey=X&lt;br /&gt;Tip=Summon Bea|cffffcc00s|rtmaster&lt;br /&gt;Revivetip=Revive Bea|cffffcc00s|rtmaster&lt;br /&gt;Awakentip=Revive Bea|cffffcc00s|rtmaster&lt;/div&gt;&#xD;
&lt;div&gt;// Summon Bear (Beastmaster)&lt;br /&gt;[ANsg]&lt;br /&gt;Tip=Summon |cffffcc00B|rear - [|cffffcc00Level 1|r],Summon |cffffcc00B|rear - [|cffffcc00Level 2|r],Summon |cffffcc00B|rear - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip=Learn Summon |cffffcc00B|rear - [|cffffcc00Level %d|r]&lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;// Summon Quilbeast (Beastmaster)&lt;br /&gt;[ANsq]&lt;br /&gt;Tip=Summon |cffffcc00Q|ruilbeast - [|cffffcc00Level 1|r],Summon |cffffcc00Q|ruilbeast - [|cffffcc00Level 2|r],Summon |cffffcc00Q|ruilbeast - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=X&lt;br /&gt;Researchtip=Learn Summon |cffffcc00Q|ruilbeast - [|cffffcc00Level %d|r]&lt;br /&gt;Researchhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;// Summon Hawk (Beastmaster)&lt;br /&gt;[ANsw]&lt;br /&gt;Tip=Summon Ha|cffffcc00w|rk - [|cffffcc00Level 1|r],Summon Ha|cffffcc00w|rk - [|cffffcc00Level 2|r],Summon Ha|cffffcc00w|rk - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=C&lt;br /&gt;Researchtip=Learn Summon Ha|cffffcc00w|rk - [|cffffcc00Level %d|r]&lt;br /&gt;Researchhotkey=C&lt;/div&gt;&#xD;
&lt;div&gt;// Stampede (Beastmaster)&lt;br /&gt;[ANst]&lt;br /&gt;Tip=S|cffffcc00t|rampede&lt;br /&gt;Hotkey=V&lt;br /&gt;Researchtip=Learn S|cffffcc00t|rampede&lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;// Blink (beastmaster bear)&lt;br /&gt;[ANbl]&lt;br /&gt;Hotkey=Z&lt;br /&gt;Tip=|cffffcc00B|rlink&lt;/div&gt;&#xD;
&lt;div&gt;///////////////////////&lt;br /&gt;//Dark Ranger Abilities&lt;br /&gt;///////////////////////&lt;/div&gt;&#xD;
&lt;div&gt;[Nbrn]&lt;br /&gt;Hotkey=S&lt;br /&gt;Tip=Summon Dark |cffffcc00R|ranger&lt;br /&gt;Revivetip=Revive Dark |cffffcc00R|ranger&lt;br /&gt;Awakentip=Revive Dark |cffffcc00R|ranger&lt;/div&gt;&#xD;
&lt;div&gt;// Black Arrow (Dark Ranger)&lt;br /&gt;[ANba]&lt;br /&gt;Tip=|cffffcc00B|rlack Arrow - [|cffffcc00Level 1|r],|cffffcc00B|rlack Arrow - [|cffffcc00Level 2|r],|cffffcc00B|rlack Arrow - [|cffffcc00Level 3|r]&lt;br /&gt;Untip="|cffc3dbffRight-click to activate auto-casting.|r"&lt;br /&gt;Hotkey=S&lt;br /&gt;Researchtip="Learn |cffffcc00B|rlack Arrow - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=S&lt;/div&gt;&#xD;
&lt;div&gt;// Silence (Dark Ranger)&lt;br /&gt;[ANsi]&lt;br /&gt;Tip=Sil|cffffcc00e|rnce - [|cffffcc00Level 1|r],Sil|cffffcc00e|rnce - [|cffffcc00Level 2|r],Sil|cffffcc00e|rnce - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip="Learn Sil|cffffcc00e|rnce - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;// Life Drain&amp;nbsp; (Dark Ranger)&lt;br /&gt;[ANdr]&lt;br /&gt;Tip=Life |cffffcc00D|rrain - [|cffffcc00Level 1|r],Life |cffffcc00D|rrain - [|cffffcc00Level 2|r],Life |cffffcc00D|rrain - [|cffffcc00Level 3|r]&lt;br /&gt;Hotkey=C&lt;br /&gt;Researchtip="Learn Life |cffffcc00D|rrain - [|cffffcc00Level %d|r]"&lt;br /&gt;Researchhotkey=C&lt;/div&gt;&#xD;
&lt;div&gt;// Charm (Dark Ranger)&lt;br /&gt;[ANch]&lt;br /&gt;Tip=|cffffcc00C|rharm&lt;br /&gt;Hotkey=V&lt;br /&gt;Researchtip=Learn |cffffcc00C|rharm&lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;/////////////////////// &lt;br /&gt;// 修补匠 &lt;br /&gt;/////////////////////// &lt;/div&gt;&#xD;
&lt;div&gt;//修补匠 &lt;br /&gt;[Ntin] &lt;br /&gt;Tip=(|cffffcc00Z|r)召唤修补匠 &lt;br /&gt;Hotkey=C &lt;br /&gt;Revivetip= (|cffffcc00Z|r)复活修补匠 &lt;br /&gt;Awakentip= (|cffffcc00Z|r)复活修补匠 &lt;/div&gt;&#xD;
&lt;div&gt;//修补匠 &lt;br /&gt;[Nrob] &lt;br /&gt;Tip=(|cffffcc00Z|r)召唤修补匠 &lt;br /&gt;Hotkey=C&lt;br /&gt;Revivetip= (|cffffcc00Z|r)复活修补匠 &lt;br /&gt;Awakentip= (|cffffcc00Z|r)复活修补匠 &lt;/div&gt;&#xD;
&lt;div&gt;//口袋工厂 &lt;br /&gt;[ANsy] &lt;br /&gt;Tip= (|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r] &lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip= &amp;ldquo;(|cffffcc00F|r)学习口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo; &lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;//口袋工厂 &lt;br /&gt;[ANs1] &lt;br /&gt;Tip=(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r] &lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip= &amp;ldquo;(|cffffcc00F|r)学习口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo; &lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;//口袋工厂 &lt;br /&gt;[ANs2] &lt;br /&gt;Tip=(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r] &lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip= &amp;ldquo;(|cffffcc00F|r)学习口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo; &lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;//口袋工厂 &lt;br /&gt;[ANs3] &lt;br /&gt;Tip=(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],(|cffffcc00F|r)口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r] &lt;br /&gt;Hotkey=Z&lt;br /&gt;Researchtip= &amp;ldquo;(|cffffcc00F|r)学习口袋工厂 &amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo; &lt;br /&gt;Researchhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;//火箭群 &lt;br /&gt;[ANcs] &lt;br /&gt;Tip=(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r] &lt;br /&gt;Hotkey=X&lt;br /&gt;Researchtip=&amp;ldquo; (|cffffcc00R|r)学习火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo; &lt;br /&gt;Researchhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;//火箭群 &lt;br /&gt;[ANc1] &lt;br /&gt;Tip=(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r] &lt;br /&gt;Hotkey=X&lt;br /&gt;Researchtip=&amp;ldquo; (|cffffcc00R|r)学习火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo; &lt;br /&gt;Researchhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;//火箭群 &lt;br /&gt;[ANc2] &lt;br /&gt;Tip=(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r] &lt;br /&gt;Hotkey=X&lt;br /&gt;Researchtip=&amp;ldquo; (|cffffcc00R|r)学习火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo; &lt;br /&gt;Researchhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;//火箭群 &lt;br /&gt;[ANc3] &lt;br /&gt;Tip=(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],(|cffffcc00R|r)火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r] &lt;br /&gt;Hotkey=X&lt;br /&gt;Researchtip=&amp;ldquo; (|cffffcc00R|r)学习火箭群 &amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo; &lt;br /&gt;Researchhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;//工程升级&amp;nbsp; &lt;br /&gt;[ANeg] &lt;br /&gt;Tip=工程升级 &amp;mdash;&amp;mdash; [|cffffcc00等级 1|r],工程升级 &amp;mdash;&amp;mdash; [|cffffcc00等级 2|r],工程升级 &amp;mdash;&amp;mdash; [|cffffcc00等级 3|r]&amp;nbsp; &lt;br /&gt;Hotkey=C&lt;br /&gt;Researchtip= &amp;ldquo;(|cffffcc00E|r)学习工程升级&amp;mdash;&amp;mdash; [|cffffcc00等级 %d|r]&amp;rdquo;&amp;nbsp; &lt;br /&gt;Researchhotkey=C&lt;/div&gt;&#xD;
&lt;div&gt;//机器人地精 &lt;br /&gt;[ANrg] &lt;br /&gt;Tip=&amp;ldquo; (|cffffcc00b|r)机器人地精&amp;rdquo; &lt;br /&gt;Hotkey=V&lt;br /&gt;Untip=&amp;ldquo; (|cffffcc00T|r)恢复到修补匠形态&amp;rdquo; &lt;br /&gt;Unhotkey=V&lt;br /&gt;Researchtip=&amp;ldquo; (|cffffcc00b|r)学习机器人地精&amp;rdquo; &lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;//机器人地精 &lt;br /&gt;[ANg1] &lt;br /&gt;Tip=&amp;ldquo; (|cffffcc00b|r)机器人地精&amp;rdquo; &lt;br /&gt;Hotkey=V&lt;br /&gt;Untip=&amp;ldquo; (|cffffcc00T|r)恢复到修补匠形态&amp;rdquo; &lt;br /&gt;Unhotkey=V&lt;br /&gt;Researchtip=&amp;ldquo; (|cffffcc00b|r)学习机器人地精&amp;rdquo; &lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;//机器人地精 &lt;br /&gt;[ANg2] &lt;br /&gt;Tip=&amp;ldquo; (|cffffcc00b|r)机器人地精&amp;rdquo; &lt;br /&gt;Hotkey=V&lt;br /&gt;Untip=&amp;ldquo; (|cffffcc00T|r)恢复到修补匠形态&amp;rdquo; &lt;br /&gt;Unhotkey=V&lt;br /&gt;Researchtip=&amp;ldquo; (|cffffcc00b|r)学习机器人地精&amp;rdquo; &lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;//机器人地精 &lt;br /&gt;[ANg3] &lt;br /&gt;Tip=&amp;ldquo; (|cffffcc00b|r)机器人地精&amp;rdquo; &lt;br /&gt;Hotkey=V&lt;br /&gt;Untip=&amp;ldquo; (|cffffcc00T|r)恢复到修补匠形态&amp;rdquo; &lt;br /&gt;Unhotkey=V&lt;br /&gt;Researchtip=&amp;ldquo; (|cffffcc00b|r)学习机器人地精&amp;rdquo; &lt;br /&gt;Researchhotkey=V&lt;/div&gt;&#xD;
&lt;div&gt;[nfsp] 召唤树魔影子牧师&lt;br /&gt;Hotkey=Q&lt;/div&gt;&#xD;
&lt;div&gt;[nftb] 召唤树魔狂战士&lt;br /&gt;Hotkey=W&lt;/div&gt;&#xD;
&lt;div&gt;[ngrk] 召唤泥潭傀儡&lt;br /&gt;Hotkey=E&lt;/div&gt;&#xD;
&lt;div&gt;[nogm] 召唤食人鬼拳手&lt;br /&gt;Hotkey=R&lt;/div&gt;&#xD;
&lt;div&gt;[ACdm] 树魔影子牧师驱散魔法&lt;br /&gt;Hotkey=Z&lt;br /&gt;Unhotkey=Z&lt;/div&gt;&#xD;
&lt;div&gt;[Anh1] 树魔影子牧师治疗魔法&lt;br /&gt;Hotkey=X&lt;br /&gt;Unhotkey=X&lt;/div&gt;&#xD;
&lt;div&gt;[ACsw] 泥潭傀儡减速魔法&lt;br /&gt;Hotkey=Z&lt;br /&gt;Unhotkey=Z&lt;/div&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1687109.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/03/16/1687109.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yueue/archive/2010/03/08/1680547.html</id><title type="text">JAVA与Tomcat环境变量配置</title><summary type="text">JAVA:[代码]Tomcat:[代码]</summary><published>2010-03-08T01:32:00Z</published><updated>2010-03-08T01:32:00Z</updated><author><name>yueue</name><uri>http://www.cnblogs.com/yueue/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yueue/archive/2010/03/08/1680547.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yueue/archive/2010/03/08/1680547.html"/><content type="html">&lt;p&gt;JAVA:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;JAVA_HOME&lt;br /&gt;D:\Program\Java\jdk1.&lt;/span&gt;&lt;span style="color: #800080;"&gt;6.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;CLASSPATH&lt;br /&gt;D:\Program\Java\jdk1.&lt;/span&gt;&lt;span style="color: #800080;"&gt;6.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;\lib;&lt;br /&gt;PATH&lt;br /&gt;D:\Program\Java\jdk1.&lt;/span&gt;&lt;span style="color: #800080;"&gt;6.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;\bin;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Tomcat:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;CATALINA_HOME&lt;br /&gt;D:\Program Files\Tomcat &lt;/span&gt;&lt;span style="color: #800080;"&gt;5.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;Path&lt;br /&gt;D:\Program Files\Tomcat &lt;/span&gt;&lt;span style="color: #800080;"&gt;5.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;\bin&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yueue/aggbug/1680547.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yueue/archive/2010/03/08/1680547.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
