<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_CoderZh的技术博客</title><subtitle type="text">“专注、热爱、 全心贯注于你所期望的事物上，必有收获。” - 爱默生</subtitle><id>http://feed.cnblogs.com/blog/u/20472/rss</id><updated>2011-09-27T04:26:17Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/20472/rss"/><entry><id>http://www.cnblogs.com/coderzh/archive/2011/05/08/CEGUI_Coding_Style.html</id><title type="text">从CEGUI源码看代码规范</title><summary type="text">CEGUI（Crazy Eddie’s GUI）是一个使用C++实现的基于LGPL协议的的开源GUI库，主要应用于游戏界面。连著名的开源游戏引擎Orge3D也放弃了自己的界面引擎而使用第三方的开源界面引擎CEGUI。对于开源的代码工程，我首先会观察它的代码规范。比如，使用什么命名法，是否使用异常等等，这很有用。看不同的开源工程，可以看到各种不同的代码规范，其中有很多是值得借鉴的。代码规范本身并没有绝对的对错之分，但我们往往为了某一个代码规范争论的面红耳赤。比如，是否使用匈牙利命名法，使用BOOL还是bool等等。这时，就必须综合考虑团队现有的使用习惯和既有代码的风格，制定出一套适合自己的统一的</summary><published>2011-05-08T11:30:00Z</published><updated>2011-05-08T11:30:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2011/05/08/CEGUI_Coding_Style.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2011/05/08/CEGUI_Coding_Style.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.cegui.org.uk/" target="_blank"&gt;CEGUI&lt;/a&gt;（Crazy Eddie&amp;#8217;s GUI）是一个使用C++实现的基于LGPL协议的的开源GUI库，主要应用于游戏界面。连著名的开源游戏引擎Orge3D也放弃了自己的界面引擎而使用第三方的开源界面引擎CEGUI。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
对于开源的代码工程，我首先会观察它的代码规范。比如，使用什么命名法，是否使用异常等等，这很有用。看不同的开源工程，可以看到各种不同的代码规范，其中有很多是值得借鉴的。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
代码规范本身并没有绝对的对错之分，但我们往往为了某一个代码规范争论的面红耳赤。比如，是否使用匈牙利命名法，使用BOOL还是bool等等。这时，就必须综合考虑团队现有的使用习惯和既有代码的风格，制定出一套适合自己的统一的规范。所以，规范除了对与错，最关键的地方还是要统一。存在即合理，我们不要一味去排斥其他人的使用习惯和规范，而应该多读读别人的代码，看看著名的开源代码，了解别人的做法，然后对自己的做法进行一些反思。这才是面对代码规范正确的心态。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
CEGUI是一套不错的界面库，界面布局使用XML来描述，提供了专用的界面编辑器，让界面制作变得更简单。CEGUI作为一个成熟的开源产品，代码已经经历了无数的千锤百炼，整体风格比较统一，是一个很好的学习范本。接下来，我粗浅的分析一下CEGUI一些值得学习的地方。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Camel命名法&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CEGUI完全摈弃了匈牙利命名法，而使用更贴近语义的不使用变量类型前缀的Camel(骆驼)命名法，这也是现今代码通用的做法。匈牙利命名法在较老的工程中比较常见。无数使用Camel的著名开源工程，很好的告诉了匈牙利命名法的支持者，不使用匈牙利命名法，代码依然清晰可读，甚至会更好。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. 成员变量前缀&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CEGUI中无论是class还是struct，成员变量都统一加d_前缀。通常的两种做法是不加前缀和加m_前缀。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. struct&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CEGUI中，struct的命名没有使用全大写，而是和class的大小写命名一样。在struct中，只可能出现数据成员，操作符重载函数，构造函数等。struct只用来数据结构存储使用，不使用任何其他的成员函数。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4. 字符串处理&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CEGUI中的字符串处理没有使用char, wchar_t, TCHAR，std:string，ATL::CString，而是自己实现了一套String类（CEGUIString.h）。自己实现的String类优势非常明显，可以让程序员从繁琐的字符指针操作中解脱出来，将更多的精力放在功能的实现上。自定义的String可以实现更多方便、切合实际使用的函数。（比如CEGUI中的find_first_not_of，replace等函数。）如果要实现一个String类，CEGUI中的CEGUIString是一个很好的范本。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5. 使用bool&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;使用bool和BOOL都有各自的理由，CEGUI中全部使用bool，是现在流行，最常见的，也是我喜欢的做法。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;6. 异常机制&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CEGUI中完全使用异常机制，通过重载std::exception定义了一套完整的异常机制。通过异常的处理，使得程序员从繁琐的错误检查和错误返回值中解放出来。如果想了解C++中如何能够很好的使用异常，看看CEGUI中异常的实现吧（CEGUIExceptions.h）。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;7. 不用goto&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;几乎每一本教材都会告诫用户，不要使用goto，这会让你的代码变得凌乱不堪。然而当真正成为一个程序员，加入一个公司甚至大型公司，里面的代码照样充斥了无数的goto语句。goto的滥用是绝对不允许的，goto在某些情况下的确有它的合理之处（比如保证函数单一出口，释放资源）。还是那句话，存在即合理。CEGUI中完全不使用goto，有了错误，立即抛异常，或者直接返回。我本人也是比较喜欢这种提前返回的方式。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;8. 简单易用的Log系统&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果想实现一个既简单，又易用的Log系统，就看看CEGUI中的实现吧（CEGUILogger）。支持Log等级（Error，Warning等），输出日期、当前代码行等功能。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;9. Singleton的实现&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CEGUI中使用了一个通用的Singleton&amp;lt;T&amp;gt;模板基类，这个技巧非常好使。实现也非常简单：&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;template&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;typename&amp;nbsp;T&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CEGUIEXPORT&amp;nbsp;Singleton&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&#xD;
#ifdef&amp;nbsp;__MINGW32__&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CEGUIEXPORT&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;#endif&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;T&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ms_Singleton;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Singleton(&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert(&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;ms_Singleton&amp;nbsp;);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ms_Singleton&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;static_cast&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;T&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;~&lt;/span&gt;&lt;span style="color: #000000;"&gt;Singleton(&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;assert(&amp;nbsp;ms_Singleton&amp;nbsp;);&amp;nbsp;&amp;nbsp;ms_Singleton&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;T&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;getSingleton(&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;assert(&amp;nbsp;ms_Singleton&amp;nbsp;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;ms_Singleton&amp;nbsp;);&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;T&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;getSingletonPtr(&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;(&amp;nbsp;ms_Singleton&amp;nbsp;);&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Singleton&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;operator&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;const&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Singleton&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&amp;nbsp;}&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Singleton(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;const&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Singleton&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;{}&lt;br /&gt;&#xD;
};&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;如上面的Logger类，要使用Singleton，则这样定义：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CEGUIEXPORT&amp;nbsp;Logger&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Singleton&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Logger&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;这样做最大的一个好处是统一，不会在代码中出现各种稀奇古怪不同的Singleton实现。同时哪个class是Singleton也一目了然。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;总结 &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本文仅仅讨论CEGUI中的代码规范，而且也只是其中很小的一部分，如有疏漏欢迎一起讨论。之后我会更加关注CEGUI现细节，如有收获将与大家分享。&lt;br /&gt;最后，我还是那句话：&lt;span style="color: red; "&gt;不要完全排斥任何一种规范，将每种规范了解和使用过后，再来思考自己应该怎样做。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: red; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;CEGUI主页：&lt;a href="http://www.cegui.org.uk/wiki/index.php/Downloads"&gt;http://www.cegui.org.uk&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;源码下载 ：&lt;a href="http://www.cegui.org.uk/wiki/index.php/Downloads"&gt;http://www.cegui.org.uk/wiki/index.php/Downloads&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/2040499.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2011/05/08/CEGUI_Coding_Style.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2011/03/06/flash-android.html</id><title type="text">Android刷机备忘录</title><summary type="text">G2 Magic上的Android1.6用了好久一直没去刷，直到今天早上实在忍不住刷到了Android2.2。刷之前在网上看了很多教程和注意事项，感觉好复杂，一步一步跟着做，最后发现其实并不复杂。需要特别注意的几点是：1. 找一个适合自己手机型号的、功能稳定、耗电量少的ROM。可到论坛上看看大家刷的评测，国内阿兴和蛋哥的评价还可以。2. 查看ROM刷机的版本需要（SPL、Radio、Recovery的版本），比如：SPL1.33、Radio3.22、Recovery1.6.2。有一个一键转换工具RadioSwitchGUI很好用。3. 满足了刷机需求，有一个合适的ROM版本，就可以开始刷了。备</summary><published>2011-03-06T13:42:00Z</published><updated>2011-03-06T13:42:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2011/03/06/flash-android.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2011/03/06/flash-android.html"/><content type="html">&lt;p&gt;G2 Magic上的Android1.6用了好久一直没去刷，直到今天早上实在忍不住刷到了Android2.2。刷之前在网上看了很多教程和注意事项，感觉好复杂，一步一步跟着做，最后发现其实并不复杂。需要特别注意的几点是：&lt;/p&gt;&lt;p&gt;1. 找一个适合自己手机型号的、功能稳定、耗电量少的ROM。可到论坛上看看大家刷的评测，国内阿兴和蛋哥的评价还可以。&lt;/p&gt;&lt;p&gt;2. 查看ROM刷机的版本需要（SPL、Radio、Recovery的版本），比如：SPL1.33、Radio3.22、Recovery1.6.2。有一个一键转换工具&lt;a href="http://www.hiapk.com/bbs/viewthread.php?tid=466183&amp;amp;highlight=SPL" target="_blank"&gt;RadioSwitchGUI&lt;/a&gt;很好用。&lt;/p&gt;&lt;p&gt;3. 满足了刷机需求，有一个合适的ROM版本，就可以开始刷了。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;备忘：&lt;/p&gt;&lt;p&gt;1. 进入fastboot模式的方法：关机状态下长按&lt;span style="color: red; "&gt;返回键和关机键。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2. 查看SPL、Radio版本的方法：进入fastboot模式后有显示。&lt;/p&gt;&lt;p&gt;3.&amp;nbsp;RadioSwitchGUI使用方法：PC上安装&lt;a href="http://java.com/zh_CN/download/" target="_blank"&gt;Java&lt;/a&gt;环境，手机进入fastboot模式，连接USB数据线到PC，运行WinRun.bat。&lt;/p&gt;&lt;p&gt;4. fastboot模式，接入USB后，安装驱动程序：Win7下我没找到合适的独立驱动程序，所以我安装了&lt;a href="http://www.htc.com/asia/SupportDownload.aspx?p_id=267&amp;amp;cat=3&amp;amp;dl_id=1073" target="_blank"&gt;HTC Sync for all HTC Android Phones&lt;/a&gt;，内含驱动。&lt;/p&gt;&lt;p&gt;5. 进入recovery模式进行刷机：关机状态下长按&lt;span style="color: red; "&gt;Home键和关机键&lt;/span&gt;。如果长按后出现一个叹号和手机图片，原因是recovery版本较旧，这时同时按接听和挂机键，然后再按Home键和关机键可进入recovery模式。如果出现这种情况，建议升级recovery到1.6.2。&lt;/p&gt;&lt;p&gt;6. 进入recovery模式后，先执行WIPE，把所有选项都WIPE一遍，然后进入flash zip from sdcard，按照说明的顺序开刷。比如，先ROM，然后PORT，然后google补丁包。（前提先将下载好的ROM、PORT、Google补丁包文件拷贝到SD卡的根目录）&lt;/p&gt;&lt;p&gt;7. 刷之前先备份联系人和短信。联系人可同步到Google。如果之前的版本是阿兴版，短信有备份还原功能，这个功能最好不要用，因为刷到2.2很可能没有备份还原功能，我就是这么悲剧。所以找个第三方的软件备份一下短信吧。比如91助手。&lt;/p&gt;&lt;p&gt;8. 名词解释：&amp;nbsp;&lt;/p&gt;&lt;p&gt;SPL： &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 类似于PC的BIOS&lt;/p&gt;&lt;p&gt;ROOT权限：刷SPL前必须获取的东西，一般也用不到（除官方rom外，大部分民间rom自带root）&lt;/p&gt;&lt;p&gt;金卡： &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;刷特定ROM要用到的东西，一般也用不到&lt;/p&gt;&lt;p&gt;RADIO: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;无线通信模块，负责手机通讯的东西&lt;/p&gt;&lt;p&gt;固件： &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;目前分为1.5~1.6~2.0~2.2&lt;/p&gt;&lt;p&gt;ROM： &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 基于固件基础上的刷机包&lt;/p&gt;&lt;p&gt;Recovery： 关机状态同时按挂机键+房子键，出来的界面就是recovery画面了。刷机、备份、恢复等都在此界面进行&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;只要动手刷过一次，就不会觉得麻烦了。本文只是介绍大致刷机方法，提供的链接并不适合所有时期和型号的手机。所以，重要的是掌握方法，以后直接到论坛找最新的合适的ROM刷，就不是什么难事了。&lt;/p&gt;&lt;p&gt;不过还是要提醒一句：刷机有风险，动手请谨慎。刷前看清楚，否则成砖头。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;参考资料：&lt;/p&gt;&lt;p&gt;1.&amp;nbsp;&lt;a href="http://www.hiapk.com/bbs/viewthread.php?tid=479391&amp;amp;extra=page%3D1%26amp;filter%3Dtype%26amp;typeid%3D149" target="_blank"&gt;HTC MAGIC(G2) 刷机教程！四步刷机！ 全新更新&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2.&amp;nbsp;&lt;a href="http://www.hiapk.com/bbs/viewthread.php?tid=466183&amp;amp;highlight=SPL" target="_blank"&gt;最好用的G2 32A SPL&amp;amp;Radio一键转换工具&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3.&amp;nbsp;&lt;a href="http://www.hiapk.com/bbs/viewthread.php?tid=616250&amp;amp;extra=page%3D1%26amp;filter%3Dtype%26amp;typeid%3D211" target="_blank"&gt;现今最完美2.2中文ROMS CM6.1RC1原版 加OC614 PORT 稳定 省电 快速 加入来电归属！&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1972516.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2011/03/06/flash-android.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2011/01/06/start2011.html</id><title type="text">启程2011</title><summary type="text">2011年已经来临，我甚至还来不及对2010年做个总结，过去的2010年是折腾的一年。回顾了09年的总结，2010年我主要完成做了： 　1. 博客61篇，相对去年49篇，一定的进步。完成了平均每周一篇的目标。 　2. 博客园排名从220名前进到128名，离目标100名还有点差距。2011年争取有更好的成绩吧。 　3. Google Reader中统计的博客订阅数达到544。感谢订阅的朋友，我会更加努力，完成更多更有价值的文章。 　4. 开源项目：NancyWiki，基于Google App Engine的个人Wiki系统。最新版本已经有近200个下载。 　5. 对Android开发有个粗浅的认</summary><published>2011-01-05T17:28:00Z</published><updated>2011-01-05T17:28:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2011/01/06/start2011.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2011/01/06/start2011.html"/><content type="html">&lt;p&gt;2011年已经来临，我甚至还来不及对2010年做个总结，过去的2010年是折腾的一年。回顾了09年的总结，2010年我主要完成做了： &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. 博客61篇，相对去年49篇，一定的进步。完成了平均每周一篇的目标。    &lt;/p&gt;&lt;p&gt;2. 博客园排名从220名前进到128名，离目标100名还有点差距。2011年争取有更好的成绩吧。    &lt;/p&gt;&lt;p&gt;3. Google Reader中统计的博客订阅数达到544。感谢订阅的朋友，我会更加努力，完成更多更有价值的文章。    &lt;/p&gt;&lt;p&gt;4. 开源项目：&lt;a href="http://code.google.com/p/nancywiki/" target="_blank"&gt;NancyWiki&lt;/a&gt;，基于Google App Engine的个人Wiki系统。最新版本已经有近200个下载。    &lt;/p&gt;&lt;p&gt;5. 对Android开发有个粗浅的认识，写了一个简单的小游戏&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/03/23/android-nancyglines-design.html" target="_blank"&gt;NancyGLines&lt;/a&gt;。    &lt;/p&gt;&lt;p&gt;6. 学习了两门新的编程语言：Ruby和Lua。都还不是很熟，今年要重点攻Lua了。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;ul&gt; &lt;/ul&gt;  &lt;p&gt;2010年，我的工作有些起伏：   &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. 金山毒霸（1~6月份）    &lt;/p&gt;&lt;p&gt;2. 金山快快的秘密项目研究（7、8月，一段神奇的经历）    &lt;/p&gt;&lt;p&gt;3. 金山软件管家开发（8月，十分短暂的时间，这个项目后来被无情的拿掉了）    &lt;/p&gt;&lt;p&gt;4. 西山居月影传说Online（9~12月，转身进入网游界）    &lt;/p&gt;&lt;p&gt;5. 。。。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;ul&gt; &lt;/ul&gt;  &lt;p&gt;2010年的一篇《&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/03/27/three-years-work-thinking.html" target="_blank"&gt;三年之痒&lt;/a&gt;》，加上公司上上下下的变化，我换了好几个岗位。期间，考虑过去令人向往的ThoughtWorks，面试之后，感觉自己英语水平和表达能力有待提高，同时也希望自己在行业再多一些积累经验，最后，我主动放弃了。再次感谢&lt;a href="http://www.google.com/profiles/mechiland#buzz"&gt;Michael Chen&lt;/a&gt;的推荐。期间，我还考虑过去金山快盘做服务端开发，本身自己也不太乐意去做Java开发，面试时被一句&amp;#8220;只要Java熟手，不给学习时间&amp;#8221;回绝，于是回去狠心把快盘卸载，从此不再使用。只注重当前的业务能力，而不注重之后的潜力，也许这是快盘的损失。期间，还考虑过加入赖勇浩的创业团队，最后，我还是选择了去西山居。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2010年9月，我加入了西山居。曾经的我，也是一个在网游的世界里迷途的孩子，让我迷途的游戏，正是金山西山居的网游。时光轮回，我自己加入了西山居。有同事开玩笑说，我们曾经都被游戏毒害过，所以我们是来报复社会的。在西山居，如果你真正接触那些满怀梦想，而富有激情的同事，你就会明白，他们为之付出青春的原因。与西山居CTO&lt;a target="_blank" href="http://t.qq.com/freewaychen"&gt;陈飞舟&lt;/a&gt;的接触和了解，让我顿时对他产生了巨大的崇敬和敬仰之情。他技术超群，充满梦想，剑网三良好的技术架构和代码规范由他把控的如此完美。身兼CTO及副总裁的他，仍然坚持在一线写代码，就这一点，也让很多CTO感到羞愧。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;然而，这是一个残酷的时代。理想主义者把游戏当做艺术品来做，在商业上就不会太成功。剑网三的高调亮相和后来的表现平平已经很好的说明了这一点。反而是那些想方设法坑钱的IB游戏大行其道，获取了商业上巨大的成功。于是越来越多的人涌入网游这个市场，使得整个行业变得非常的浮躁。游戏的寿命越来越短，坑钱的手段越来越多，甚至还些还使用心理营销，让用户心里知道被骗，嘴里骂着游戏厂商，但手上还是不断的给游戏厂商送钱。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;从《&lt;a href="http://book.douban.com/subject/1152971/" target="_blank"&gt;DOOM启世录&lt;/a&gt;》里，我看到了天才、激情与梦想，在&lt;a href="http://www.popcap.com/" target="_blank"&gt;Popcap&lt;/a&gt;身上，我看到了创意、执着与成功。浮躁的是这个行业，静下心来研究游戏开发技术才是我的乐趣源泉。我要感谢将我带入这一行业的同事，感谢你们对我的支持和认可。还有一直在默默支持我的老婆，我爱你！&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;2011年，我的目标简单一点：争取能看懂大部分《&lt;a href="http://book.douban.com/subject_search?search_text=%E6%B8%B8%E6%88%8F%E7%BC%96%E7%A8%8B%E7%B2%BE%E7%B2%B9&amp;amp;cat=1001" target="_blank"&gt;游戏编程精粹&lt;/a&gt;》里的文章。同时希望在下次年终总结时，会有一款出色的游戏出来！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1926953.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2011/01/06/start2011.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2010/12/31/testing-topic.html</id><title type="text">Google Test交流与测试开发经验总结</title><summary type="text">昨天晚上做的一个讲座。想了很多，希望对这几年来的测试开发工作做一个总结。PPT花了一些心思，尽量做到配图，每个Slide尽量少的字，代码尽量的短，尽量把我以前遇到的问题，总结的内容都囊括进去。也是我做的最长的一个演示稿，一共56页。年底了，心情有些低落。讲座开始时，才发现今天还没开口说过两句话，再加上有点紧张，口干舌燥，讲的效果不是很好。如何让自己讲的东西变得生动，以及如何组织自己的语言，达到通顺和连贯，是我以后需要提高的。GTest交流与经验总结View more presentations from coderzh.</summary><published>2010-12-30T16:33:00Z</published><updated>2010-12-30T16:33:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2010/12/31/testing-topic.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2010/12/31/testing-topic.html"/><content type="html">&lt;p&gt;昨天晚上做的一个讲座。想了很多，希望对这几年来的测试开发工作做一个总结。PPT花了一些心思，尽量做到配图，每个Slide尽量少的字，代码尽量的短，尽量把我以前遇到的问题，总结的内容都囊括进去。也是我做的最长的一个演示稿，一共56页。&lt;/p&gt;&#xD;
&lt;p&gt;年底了，心情有些低落。讲座开始时，才发现今天还没开口说过两句话，再加上有点紧张，口干舌燥，讲的效果不是很好。如何让自己讲的东西变得生动，以及如何组织自己的语言，达到通顺和连贯，是我以后需要提高的。&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;div style="width: 425px;" id="__ss_6408876"&gt;&lt;strong style="display: block; margin: 12px 0pt 4px;"&gt;&lt;a href="http://www.slideshare.net/coderzh/gtest-6408876" title="GTest交流与经验总结"&gt;GTest交流与经验总结&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse6408876" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gtest-101230100842-phpapp01&amp;stripped_title=gtest-6408876&amp;userName=coderzh" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse6408876" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gtest-101230100842-phpapp01&amp;stripped_title=gtest-6408876&amp;userName=coderzh" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding: 5px 0pt 12px;"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/coderzh"&gt;coderzh&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1922618.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/12/31/testing-topic.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2010/12/26/twiki.html</id><title type="text">TWiki安装和使用心得</title><summary type="text">TWiki是一个开源（GPL）的wiki程序。软件定位为“灵活、强大、易于使用的企业协作平台”，运行于Perl环境。拥有编程技能的人可以使用变量创建动态页面，譬如内容表格，或者嵌入式搜索结果的页面。默认内置所见即所得编辑器，完善的用户权限系统，不需要任何数据库，完全基于文件目录的格式化引擎。TWiki部署起来稍微有点复杂，下面是我在Ubuntu上部署TWiki的一些心得。1. 环境准备[代码]2. 下载[代码]3. 配置[代码]修改LocalLib.cfg中的$twikiLibPath为：[代码]生成twiki.conf文件：http://twiki.org/cgi-bin/view/TWik</summary><published>2010-12-26T05:16:00Z</published><updated>2010-12-26T05:16:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2010/12/26/twiki.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2010/12/26/twiki.html"/><content type="html">&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;img alt="" src="http://twiki.org/p/pub/TWiki/TWikiLogos/T-logo-140x40-t.gif" height="40" width="140" /&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.allwiki.com/wiki/TWiki"&gt;TWiki&lt;/a&gt;是一个开源（GPL）的wiki程序。软件定位为&amp;#8220;灵活、强大、易于使用的企业协作平台&amp;#8221;，运行于Perl环境。拥有编程技能的人可以使用变量创建动态页面，譬如内容表格，或者嵌入式搜索结果的页面。默认内置所见即所得编辑器，完善的用户权限系统，不需要任何数据库，完全基于文件目录的格式化引擎。&lt;/p&gt;&lt;p&gt;TWiki部署起来稍微有点复杂，下面是我在Ubuntu上部署TWiki的一些心得。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 环境准备&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;apt&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;get&amp;nbsp;install&amp;nbsp;apache2&amp;nbsp;perl&amp;nbsp;cron&amp;nbsp;grep&amp;nbsp;rcs&amp;nbsp;patch&amp;nbsp;php5&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;apt&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;get&amp;nbsp;install&amp;nbsp;libapache2&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;mod&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;php5&amp;nbsp;libcgi&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;session&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;perl&amp;nbsp;libdigest&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;sha1&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;perl&amp;nbsp;libhtml&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;parser&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;perl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;2. 下载&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;wget&amp;nbsp;http:&lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;downloads.sourceforge.net&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;project&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;twiki&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;TWiki&lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt;20all&lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt;20Platforms&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;TWiki&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;5.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;TWiki&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;5.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tgz&lt;/span&gt;&lt;span style="color: #000000;"&gt;?&lt;/span&gt;&lt;span style="color: #000000;"&gt;r&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;ts&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;1293085896&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;use_mirror&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;nchc&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;tar&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;xvzf&amp;nbsp;TWiki&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;5.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tgz&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;cp&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a&amp;nbsp;twiki&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;www&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;chown&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;R&amp;nbsp;www&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;data:www&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;data&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;www&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;twiki&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;3. 配置&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;cp&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;www&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;twiki&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;bin&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;LocalLib.cfg.txt&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;www&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;twiki&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;bin&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;LocalLib.cfg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;修改LocalLib.cfg中的$twikiLibPath为：&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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: #800080;"&gt;$twikiLibPath&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;#8220;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;www&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;twiki&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&amp;#8221;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;生成twiki.conf文件：http://twiki.org/cgi-bin/view/TWiki/ApacheConfigGenerator，并复制到/var/www/twiki/twiki.conf&lt;br /&gt;修改/etc/apache2/httpd.conf，加入一行：&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/var/www/twiki/twiki.conf&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;(或者复制一份/var/www/twiki/twiki_httpd_conf.txt为twiki.conf，然后修改里面的路径相关的设置)&lt;/div&gt;&lt;p&gt;&lt;br /&gt;修改twiki.conf文件中的 &lt;br /&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;FilesMatch "^(configure)$"&amp;gt; 节点，设置允许访问configure页面的来路IP或者用户名。&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;Allow&amp;nbsp;from&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;127.0&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;0.1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;192.168&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;1.100&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;Require&amp;nbsp;user&amp;nbsp;CoderZh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;重启apache2&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;etc&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;init.d&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;apache2&amp;nbsp;restart&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;访问：http://&amp;lt;ipaddress&amp;gt;/twiki/bin/configure 可进入配置页面，配置完成后进入主页。&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;使用技巧&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 中文支持&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div&gt;TWiki默认是iso8859-1编码，不支持中文编辑， 界面也是全英文。让TWiki支持中文，首先，确保服务器的locale安装有zh_CN.UTF-8。&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;locale&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;gen&amp;nbsp;zh_CN&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;locale&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;gen&amp;nbsp;zh_CN.UTF&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;dpkg&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;reconfigure&amp;nbsp;locales&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;然后在configure里配置如下：&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;{UserInterfaceInternationalisation}&amp;nbsp;&amp;#8730;&lt;br /&gt;{Languages}{'zh&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;cn'}{Enabled}&amp;nbsp;&amp;#8730;&lt;br /&gt;{DisplayTimeValues}&amp;nbsp;servertime&lt;br /&gt;{UseLocale}&amp;nbsp;&amp;#8730;&lt;br /&gt;{Site}{Locale}&amp;nbsp;zh_CN.UTF&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;{Site}{LocaleRegexes}&amp;nbsp;&amp;#8730;&lt;br /&gt;{Site}{CharSet}&amp;nbsp;UTF&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;{Site}{Lang}&amp;nbsp;zh&lt;br /&gt;{Site}{FullLang}&amp;nbsp;zh&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;cn&lt;br /&gt;{PluralToSingular}&amp;nbsp;&amp;#8730;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;2. 发邮件&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;TWiki支持自动发送验证邮件，用于用户注册和找回密码。要支持发邮件，首先在服务器上安装sendmail： &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;$&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sudo&amp;nbsp;apt&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;get&amp;nbsp;install&amp;nbsp;sendmail&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;然后，在configure页面设置邮件相关项目，以下两项留空。 &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;{SMTP}{MAILHOST}&amp;nbsp;留空&lt;br /&gt;{SMTP}{SENDERHOST}&amp;nbsp;留空&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. 批量添加用户&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;进入页面：http://&amp;lt;ipaddress&amp;gt;/twiki/bin/view/TWiki/BulkRegistration ，里面有详细说明。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. 页面设置&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;WebPreferences和TopicPreferences页面，可对Web或Topic进行设置，比如权限等等。详细的有哪些设置项，可参考：&lt;br /&gt;&lt;/p&gt;&lt;div&gt;http://&amp;lt;ipaddress&amp;gt;/twiki/bin/view/TWiki/TWikiPreferences&lt;/div&gt;&lt;br /&gt;比如，要设置管理员才能修改的权限，之需要在Wiki内容或者当前Topic的设置页面，添加如下语句： &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set&amp;nbsp;ALLOWTOPICCHANGE&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;TWikiAdminGroup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;注意格式为：[3个空格]Set[空格]xxx[空格]=[空格]xxx&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;更多其他的内容，就靠自己去发现和总结了。 有任何问题，也欢迎和我交流。 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1917152.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/12/26/twiki.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2010/12/01/cpp-and-lua.html</id><title type="text">C++与Lua互操作学习</title><summary type="text">今天了解了一下C++与Lua之间的互操作，感觉还算简单，不像之前不了解时那么神秘了。 下面是找到的很好的学习资料，不知道是不是原出处了，反正我找了一下只有cpprog里有。  1.http://www.cppprog.com/2009/0209/62.html - 在C++中使用Lua(一)2.http://www.cppprog.com/2009/0210/63.html - 在C++中使用Lu...</summary><published>2010-12-01T13:07:00Z</published><updated>2010-12-01T13:07:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2010/12/01/cpp-and-lua.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2010/12/01/cpp-and-lua.html"/><content type="html">&lt;p&gt;&lt;img alt="" src="http://www.lua.org/images/lua.gif" height="101" width="101" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;今天了解了一下C++与Lua之间的互操作，感觉还算简单，不像之前不了解时那么神秘了。 &lt;/p&gt;&#xD;
&lt;p&gt;下面是找到的很好的学习资料，不知道是不是原出处了，反正我找了一下只有cpprog里有。 &lt;br /&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;1.&amp;nbsp;&lt;a href="http://www.cppprog.com/2009/0209/62.html"&gt;http://www.cppprog.com/2009/0209/62.html&lt;/a&gt; - 在C++中使用Lua(一)&lt;/p&gt;&lt;p&gt;2.&amp;nbsp;&lt;a target="_blank" href="http://www.cppprog.com/2009/0210/63.html"&gt;http://www.cppprog.com/2009/0210/63.html&lt;/a&gt; - 在C++中使用Lua(二) &lt;br /&gt; &lt;/p&gt;&lt;p&gt;3.&amp;nbsp;&lt;a target="_blank" href="http://www.cppprog.com/2009/0211/64.html"&gt;http://www.cppprog.com/2009/0211/64.html&lt;/a&gt; - 在C++中使用Lua(三)&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;最后，Lua简明实用手册，非常实用：&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.cppprog.com/2009/0211/64_2.html"&gt;http://www.cppprog.com/2009/0211/64_2.html&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;看过上面的文章，保证你清楚C++与Lua之间的秘密。 &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1893837.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/12/01/cpp-and-lua.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2010/11/30/goodby-google-app-engine.html</id><title type="text">Google App Engine的14宗罪</title><summary type="text">最近一位老外朋友很郁闷，使用Google App Engine平台，花了15000欧(), 却用的很不爽。于是耐心的写了一篇《Goodbye Google App Engine》，引来众人围观，其中还包括Google的工程师亲临指导。我也是Google App Engine的使用者，不过我基本上是属于个人开发，从来没有超过标，不需要给美刀，用的也挺爽。不过这位老兄是正儿八经的使用GAE进行企业级工...</summary><published>2010-11-29T17:41:00Z</published><updated>2010-11-29T17:41:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2010/11/30/goodby-google-app-engine.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2010/11/30/goodby-google-app-engine.html"/><content type="html">&lt;p&gt;最近一位老外朋友很郁闷，使用Google App Engine平台，花了15000欧(&lt;img src="http://www.cnblogs.com/Emoticons/QQ/01.gif" alt="" /&gt;), 却用的很不爽。于是耐心的写了一篇《&lt;a href="http://www.carlosble.com/?p=719" target="_blank"&gt;Goodbye Google App Engine&lt;/a&gt;》，引来众人围观，其中还包括Google的工程师亲临指导。我也是Google App Engine的使用者，不过我基本上是属于个人开发，从来没有超过标，不需要给美刀，用的也挺爽。不过这位老兄是正儿八经的使用GAE进行企业级工程的开发，确实把他郁闷坏了。老外说话都比较啰嗦，我帮他总结了一下他提到的GAE14宗罪，同时也加上自己的一点注释。&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image: none; border: 0px none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" title="image" alt="image" src="http://images.cnblogs.com/cnblogs_com/coderzh/Windows-Live-Writer/a06c36f0ed3d_930/image_thumb.png" border="0" height="185" width="240" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. 需要Python2.5版本&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ubuntu中早已经默认不是2.5版本了，现在主流版本已经进入到2.6甚至2.7了，所以用个GAE还要再装个2.5版本，让人很不爽。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. 不支持Https&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.&amp;nbsp; 请求超过30秒将会返回失败&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;对于上传大数据到数据库来说，简直不可想象。迫不得已的做法是将数据分割成多个小块进行上传。多痛苦。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4. 每个GET或POST请求从Server到别的地址，如果没有在5秒内完成，将会自动停止&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5. 不能使用基于C的Python模块&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;6. 不支持LIKE操作&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;虽然有通过starts with的hack方法实现，但是和全文检索还有很大差距。可以想象，数据库中的数据不能执行条件搜索，多么不可思议。所以很多GAE站点的站内搜索都直接交给了Google Search。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;7. 不支持数据库表的Join操作&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;一般的一个小型网站，多表查询也是很常用的，GAE告诉你，俺就是不支持！&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;8. 数据库实在太慢&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;所谓的BigTable到底是坑爹呢还是咋的，速度确实不敢恭维。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;9. 本地调试时的数据库行为和上传后不一致&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;本地调试指的是用dev_appserver.py在本地调试，每次本地执行好好的，单元测试也都通过的，一上传，就嗝屁了~~&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;10. 数据库太多的索引(index)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;写一个Hello World还可以，如果真的要写一个企业级应用，数据库表的字段多的很给力，基于多个字段查询时，GAE也很给力的自动给你加上很多indexs。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;11. 一次查询不能返回超过1000条的记录&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;过去我也为这个懊恼，其实现在的GAE版本已经将这个限制去掉了，为此我还和一位同学打过赌，最后我输的很惨。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;12. 不支持文件系统&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;想要操作服务器的文件系统，写个配置文件，或上传个文件？还是不要想了。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;13. 数据库和Memcache操作经常失败&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;每做一次数据库或Memcache操作，都要担心一把是否操作失败，确实闹心。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;14. 每个Memcache值最大为1M，Google是否想让我们把所有东西都放人Memcache？&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;似乎这个大哥犯了个错，Memcache通常大小限制也是1M。不过，我确实怀疑，Google的Memcache，是我们所认识的那个Memcache吗？&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="color: red;"&gt;上面的14宗罪主要代表这个国外老兄自己的意见，同时加上了一点本人的看法，欢迎大家反驳。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;虽然GAE有很多限制和缺陷，但是我对GAE还是喜爱有加的。GAE是免费的，任何人都可以很轻松的通过GAE实现自己的Web应用。比如，做一些实用的小工具，实现一个博客程序来练手。通过GAE，我们可以轻松的搭建属于自己的Blog(&lt;a target="_blank" href="http://micolog.xuming.net/zh-cn"&gt;micolog&lt;/a&gt;)，搭建属于自己的Wiki系统(&lt;a target="_blank" href="http://code.google.com/p/nancywiki/"&gt;NancyWiki&lt;/a&gt;)。&lt;/p&gt;  &lt;p&gt;没有GAE，就不会有大家都懂的&lt;a target="_blank" href="http://www.cnblogs.com/coderzh/admin/www.williamlong.info/archives/1697.html"&gt;gappproxy&lt;/a&gt;，&lt;a target="_blank" href="http://code.google.com/p/gtap/"&gt;gtap&lt;/a&gt;，&lt;a target="_blank" href="http://code.google.com/p/twitter-feed/"&gt;twiter-feed&lt;/a&gt;。是的，你懂的。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1891646.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/11/30/goodby-google-app-engine.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2010/11/29/lupa.html</id><title type="text">Lupa - Python中调用Lua</title><summary type="text">Lupa将LuaJIT集成到了Python模块中，可以在Python中执行Lua代码。 比较有意思，也许以后用的着，记录一下。基本用法：[代码]Lua中的Python对象[代码]Lua中的迭代循环： [代码]Lua中的Table： [代码]（等等……）参考：1. http://pypi.python.org/pypi/lupa/0.18 2. http://androguard.blogspot.com/2010/11/lupa-lua-from-python.html</summary><published>2010-11-29T15:34:00Z</published><updated>2010-11-29T15:34:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2010/11/29/lupa.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2010/11/29/lupa.html"/><content type="html">&lt;p&gt;&lt;a target="_blank" href="http://pypi.python.org/pypi/lupa/0.18"&gt;Lupa&lt;/a&gt;将LuaJIT集成到了Python模块中，可以在Python中执行Lua代码。 比较有意思，也许以后用的着，记录一下。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;基本用法：&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lupa&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lupa&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;import&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;LuaRuntime&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;LuaRuntime()&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;1+1&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_func&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;function(f,&amp;nbsp;n)&amp;nbsp;return&amp;nbsp;f(n)&amp;nbsp;end&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;def&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;py_add1(n):&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;n&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_func(py_add1,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;python.eval("&amp;nbsp;2&amp;nbsp;**&amp;nbsp;2&amp;nbsp;")&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;True&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;python.builtins.str(4)&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;4&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;True&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lua中的Python对象&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_func&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;function(obj)&amp;nbsp;return&amp;nbsp;obj["get"]&amp;nbsp;end&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;d&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;{&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;get&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;got&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;value&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_func(d)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;value&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;got&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;True&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dict_get&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_func(&amp;nbsp;lupa.as_attrgetter(d)&amp;nbsp;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dict_get(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;get&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;got&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;True&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_func&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;function(obj)&amp;nbsp;return&amp;nbsp;python.as_attrgetter(obj)["get"]&amp;nbsp;end&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dict_get&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_func(d)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;dict_get(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;get&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;got&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;True&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lua中的迭代循环： &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_copy&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'''&lt;/span&gt;&lt;span style="color: #800000;"&gt;&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function(L)&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;local&amp;nbsp;t,&amp;nbsp;i&amp;nbsp;=&amp;nbsp;{},&amp;nbsp;1&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;item&amp;nbsp;in&amp;nbsp;python.iter(L)&amp;nbsp;do&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;t[i]&amp;nbsp;=&amp;nbsp;item&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;i&amp;nbsp;=&amp;nbsp;i&amp;nbsp;+&amp;nbsp;1&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;t&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br /&gt;...&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;'''&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;table&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua_copy([&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;])&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;len(table)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;table[&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Lua&amp;nbsp;indexing&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Lua中的Table： &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;table&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;{10,20,30,40}&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;table[&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;table[&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;40&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;list(table)&lt;br /&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;list(table.values())&lt;br /&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;30&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;40&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;len(table)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;mapping&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;{&amp;nbsp;[1]&amp;nbsp;=&amp;nbsp;-1&amp;nbsp;}&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;list(mapping)&lt;br /&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;mapping&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;lua.eval(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;{&amp;nbsp;[20]&amp;nbsp;=&amp;nbsp;-20;&amp;nbsp;[3]&amp;nbsp;=&amp;nbsp;-3&amp;nbsp;}&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;mapping[&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;mapping[&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sorted(mapping.values())&lt;br /&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sorted(mapping.items())&lt;br /&gt;[(&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;mapping[&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;-3&amp;nbsp;used&amp;nbsp;as&amp;nbsp;key,&amp;nbsp;not&amp;nbsp;index!&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;mapping[&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sorted(mapping)&lt;br /&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;sorted(mapping.items())&lt;br /&gt;[(&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;),&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;20&lt;/span&gt;&lt;span style="color: #000000;"&gt;)]&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;（等等&amp;#8230;&amp;#8230;）&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;参考：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1. &lt;a target="_blank" href="http://pypi.python.org/pypi/lupa/0.18"&gt;http://pypi.python.org/pypi/lupa/0.18&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2. &lt;a target="_blank" href="http://androguard.blogspot.com/2010/11/lupa-lua-from-python.html"&gt;http://androguard.blogspot.com/2010/11/lupa-lua-from-python.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1891611.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/11/29/lupa.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2010/11/08/nancywiki1_0_1.html</id><title type="text">NancyWiki1.0.1更新 - 代码自动着色</title><summary type="text">[代码]看到有一些朋友下载并且使用NancyWiki，感到很欣慰！于是这个周末对NancyWiki进行了一些更新，希望使用NancyWiki的朋友之后能继续给我提意见，让NancyWiki越来越好用！NancyWiki1.0.1版本更新如下：1. 增加&amp;#8220;索引&amp;#8221;菜单链接。2. 代码自动着色。（无需指定编程语言）3. 修复代码中&amp;#8220;_&amp;#8221;被转义成&amp;#8220...</summary><published>2010-11-07T18:21:00Z</published><updated>2010-11-07T18:21:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2010/11/08/nancywiki1_0_1.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2010/11/08/nancywiki1_0_1.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;NancyWiki是基于Google&amp;nbsp;App&amp;nbsp;Engine开发的，使用的语言是Python。Wiki标记语言采用的是Markdown，因为它简单，易用。&amp;nbsp;NancyWiki致力于打造用户真正想要的个人Wiki系统。多看书，多学习，多记笔记，就用NancyWiki！&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;看到有一些朋友下载并且使用NancyWiki，感到很欣慰！于是这个周末对NancyWiki进行了一些更新，希望使用NancyWiki的朋友之后能继续给我提意见，让NancyWiki越来越好用！&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://nancywiki.googlecode.com/files/nancywiki1.0.1.zip"&gt;NancyWiki1.0.1&lt;/a&gt;版本更新如下：&lt;/p&gt;&lt;p&gt;1. 增加&amp;#8220;索引&amp;#8221;菜单链接。&lt;/p&gt;&lt;p&gt;2. 代码自动着色。（无需指定编程语言）&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3. 修复&lt;span id="comment_body_1956388"&gt;代码中&amp;#8220;_&amp;#8221;被转义成&amp;#8220;&lt;span id="comment_body_1956388"&gt;&amp;# 95;&amp;#8221;&lt;/span&gt;&lt;/span&gt; 的BUG。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;代码自动着色&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;大部分代码着色工具，像&lt;a target="_blank" href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;syntaxhighlighter&lt;/a&gt;，使用时都需要指定代码所使用的语言。对于使用标准MarkDown来说，使用改变标准的方式去给一段代码着色是不太友好的，而且，用户使用起来也会比较麻烦。因为需要用户自己去写类似class="brush:python"之类的东西。于是，我想的是，在不改变MarkDown标准的情况下，不需要指定代码所使用的语言，就能对不同代码进行着色。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;标准MarkDown贴代码的方式有两种：&lt;/p&gt;&lt;p&gt;1. 将代码放入``中，比如：&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;span style="color: #000000;"&gt;`&lt;/span&gt;&lt;span&gt;printf(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;Hello&amp;nbsp;World&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;);`&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;2. ``的方式适用于单行，或是没有空白行的多行代码。如果需要贴多行代码，同时中间还有空白的行，可以使用四个空格或Tab。比如：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;a&amp;nbsp;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a&amp;nbsp;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;nbsp;a&amp;nbsp;&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;上述两种标记方法，都会被自动转化为以下的格式：&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;pre&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;code&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;xxx&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;!--&lt;/span--&gt;&lt;span style="color: #000000;"&gt;code&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;!--&lt;/span--&gt;&lt;span style="color: #000000;"&gt;pre&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;或&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;code&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;xxx&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;!--&lt;/span--&gt;&lt;span style="color: #000000;"&gt;code&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;知道转化原则后，我们再来突破一下着色难点，即，不需要指定代码语言的情况下，对代码进行着色。所幸，&lt;a href="http://google-code-prettify.googlecode.com/"&gt;prettify&lt;/a&gt;&lt;span&gt; 正是我所要的，它只需要在任何代码处，使用如下的格式就能进行着色：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;pre&amp;nbsp;&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;prettyprint&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;xxx&lt;/span&gt;&lt;span&gt;&lt;!--&lt;/span--&gt;&lt;span&gt;pre&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;tt&gt;或&lt;/tt&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;cod&lt;/span&gt;&lt;span&gt;e&amp;nbsp;&lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;prettyprint&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;xxx&lt;/span&gt;&lt;span&gt;&lt;!--&lt;/span--&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;tt&gt;嗯，和MarkDown转化的代码只差一步，就是class="prettyprint"，我需要自动加上这个class。这时候，jquery就派上用场了。我需要给每个code节点自动加上class属性：&lt;/tt&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&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: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;code&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).addClass(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;prettyprint&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;);&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;于是，效果就出来了。你还是像往常一样贴代码，而NancyWiki会自动根据你的代码语言，进行着色。下面是效果：&lt;/tt&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;原始的着色前的代码（代码行每行前面4个空格）：&lt;/tt&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('bdfc3586-8d4f-43c4-ad40-954ed34ee3ec')"&gt;&lt;div id="cnblogs_code_open_bdfc3586-8d4f-43c4-ad40-954ed34ee3ec"&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; C#代码示例：&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [TestMethod]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;Test_ExecuteCommands()&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Plateau&amp;nbsp;plateau&amp;nbsp;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Plateau(&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;roverFactory&amp;nbsp;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;NASARoverFactory();&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rover&amp;nbsp;rover1&amp;nbsp;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;nbsp;roverFactory.Create();&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rover1.Deploy(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;N&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;plateau);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rover1.ExecuteCommands(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;LMLMLMLMM&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;);&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;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assert.AreEqual(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;1&amp;nbsp;3&amp;nbsp;N&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;rover1.ReportState());&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rover&amp;nbsp;rover2&amp;nbsp;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;nbsp;roverFactory.Create();&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rover2.Deploy(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;E&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;plateau);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rover2.ExecuteCommands(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;MMRMMRMRRM&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;);&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;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assert.AreEqual(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;5&amp;nbsp;1&amp;nbsp;E&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;rover2.ReportState());&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;着色后的代码：&lt;/tt&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="max-width: 800px;" src="http://images.cnblogs.com/cnblogs_com/coderzh/rover.jpg" alt="" /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;还等什么，下载NancyWiki1.0.1试试吧：&lt;/p&gt;&lt;p&gt;下载 : &lt;a target="_blank" href="http://nancywiki.googlecode.com/files/nancywiki1.0.1.zip"&gt;http://nancywiki.googlecode.com/files/nancywiki1.0.1.zip&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;主页：&lt;a target="_blank" href="http://nancywiki.googlecode.com/"&gt;http://nancywiki.googlecode.com&lt;/a&gt;&lt;/p&gt;&lt;p&gt;演示：&lt;a href="http://wiki.coderzh.com/"&gt;http://wiki.coderzh.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1871418.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/11/08/nancywiki1_0_1.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/coderzh/archive/2010/10/07/thinclient-secret-of-nomachine.html</id><title type="text">瘦客户端那些事 - NoMachine的秘密</title><summary type="text">上篇中我们介绍了各种远程传输协议用于实现瘦客户端，在各种协议当中，NX要我要重点推荐和介绍的。理由很简单，性能！大家都知道，网络带宽、网络传输是瘦客户端的重大瓶颈，谁能够在低带宽、慢速率的网络环境下工作良好，谁就是王者。本文将讲述NoMachine是如何做到这些的。 </summary><published>2010-10-07T07:37:00Z</published><updated>2010-10-07T07:37:00Z</updated><author><name>CoderZh</name><uri>http://www.cnblogs.com/coderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/coderzh/archive/2010/10/07/thinclient-secret-of-nomachine.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/coderzh/archive/2010/10/07/thinclient-secret-of-nomachine.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/09/24/thinclient-protocol.html"&gt;上篇&lt;/a&gt;中我们介绍了各种远程传输协议用于实现瘦客户端，在各种协议当中，NX要我要重点推荐和介绍的。理由很简单，性能！大家都知道，网络带宽、网络传输是瘦客户端的重大瓶颈，谁能够在低带宽、慢速率的网络环境下工作良好，谁就是王者。本文将讲述NoMachine是如何做到这些的。     &lt;br /&gt;    &lt;br /&gt;199x年，满怀梦想的&lt;a href="http://en.wikipedia.org/wiki/Keith_Packard"&gt;Keith Packard&lt;/a&gt;，当时工作于&lt;a href="http://en.wikipedia.org/wiki/SuSE"&gt;SuSE&lt;/a&gt;，是&lt;a href="http://en.wikipedia.org/wiki/Xfree86"&gt;XFree86&lt;/a&gt;的核心开发成员，一心想要开发一个在低带宽下依然性能完好的传输协议（&lt;a href="http://en.wikipedia.org/wiki/LBX"&gt;LBX&lt;/a&gt; - Low Bandwidth X）。他为了LBX倾注心血，将LBX视为自己的孩子，然而最后他还是失败了，LBX最终并没有得到广泛应用。原因是LBX的性能还不够好。于是，他在2001年写一篇LBX的验尸报告 - &lt;a href="http://keithp.com/%7Ekeithp/talks/lbxpost/paper.html"&gt;An LBX Postmortem&lt;/a&gt;，以告慰后人，想要实现这样一个高性能的协议是多么的不可能。     &lt;br /&gt;    &lt;br /&gt;2001年3月，XFree86的邮件组里横空出现了一篇题为&lt;a href="http://www.xfree86.org/pipermail/forum/2003-March/002325.html"&gt;About our effort at NoMachine&lt;/a&gt;的文章，作者是Gian Filippo Pinzari。文章隆重的介绍了经过作者三年研究，在低带宽下依然工作良好的，兼容RDP，VNC等协议的&lt;a href="http://en.wikipedia.org/wiki/NX_technology"&gt;NX&lt;/a&gt;协议。Gian将NX的核心组件基于GPL&lt;a href="http://www.nomachine.com/sources.php"&gt;开源&lt;/a&gt;出来，他说，&amp;#8220;它就在这，大家都来用吧！&amp;#8221;。     &lt;br /&gt;    &lt;br /&gt;Gian的公司&lt;a href="http://www.nomachine.com/"&gt;NoMachine&lt;/a&gt;开发的NX Client、Server等都是收费的产品。但是NX核心组件是开源的，于是出现了大量的开源的NX Client和NX Server。比如，NX Client就有&lt;a href="http://www.opennx.net/"&gt;OpenNX&lt;/a&gt;，&lt;a href="http://blog.gwright.org.uk/articles/2006/08/23/qtnx-ready-for-public-consumption"&gt;QtNX&lt;/a&gt;，NX Server又有&lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;sqi=2&amp;amp;ved=0CBMQFjAA&amp;amp;url=http%3A%2F%2Ffreenx.berlios.de%2F&amp;amp;rct=j&amp;amp;q=freenx&amp;amp;ei=RTytTMaINZKssAPz1oHcDA&amp;amp;usg=AFQjCNHrVhiiKIAf_8gjKnwOiZqnzgiXZQ&amp;amp;cad=rja"&gt;FreeNX&lt;/a&gt;，&lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBMQFjAA&amp;amp;url=http%3A%2F%2Fcode.google.com%2Fp%2Fneatx%2F&amp;amp;rct=j&amp;amp;q=neatx&amp;amp;ei=XjytTIGbIIr2swP04Mn_Cw&amp;amp;usg=AFQjCNE7E3WuLZl-C-WJKJpWaKbGsldMVA&amp;amp;cad=rja"&gt;NeatX&lt;/a&gt;等等。     &lt;br /&gt;    &lt;br /&gt;NoMachine的NX是如何做到的呢？NoMachine的秘密，主要有三个：     &lt;br /&gt;1. 在X协议的基础上，使用优化的压缩算法，进行压缩传输。压缩比达到10:1，甚至100：1。     &lt;br /&gt;2. 在客户端和服务端使用了缓存机制(Cache)，避免同样的数据进行不必要的重复传输。     &lt;br /&gt;3. 减少客户端与服务端请求、回应的时间。     &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NX使用 &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;NoMachien的NX主要分为两部分：NX Client和NX Server。NX Server的部署见&lt;a href="http://www.nomachine.com/documents/server/install.php" target="_blank"&gt;文档&lt;/a&gt;，还不算复杂。部署完成后，就可以使用NX Client进行连接了。NX Client有Windows版本，Linux版本，Mac版本和Solaris版本。    &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;div id="cnblogs_code_open_ba78c766-e056-4d6d-aa76-9cdbf8199e47"&gt;     &lt;div&gt;&lt;span style="color: #000000;"&gt;需要先安装：&amp;nbsp; &lt;br /&gt;yum install libjpeg&amp;nbsp; &lt;br /&gt;openssl&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;devel&amp;nbsp; &lt;br /&gt;netcat&amp;nbsp; &lt;br /&gt;expect&amp;nbsp; &lt;br /&gt;          &lt;br /&gt;源码安装libpng&amp;nbsp; &lt;br /&gt;wget http:&lt;/span&gt;&lt;span style="color: #000000;"&gt;//&lt;/span&gt;&lt;span style="color: #000000;"&gt;download.sourceforge.net&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;libpng&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;libpng&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;1.4&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tar.gz         &lt;br /&gt;          &lt;br /&gt;下载以下包，比如，下载到：~&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&amp;nbsp; &lt;br /&gt;nxcomp&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3.3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tar.gz&amp;nbsp; &lt;br /&gt;nxproxy&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3.3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tar.gz&amp;nbsp; &lt;br /&gt;nxagent&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3.3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;13&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tar.gz&amp;nbsp; &lt;br /&gt;nxcompext&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3.3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tar.gz&amp;nbsp; &lt;br /&gt;nxauth&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3.3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tar.gz&amp;nbsp; &lt;br /&gt;nxcompshad&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3.3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tar.gz&amp;nbsp; &lt;br /&gt;nx&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;X11&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;3.3&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tar.gz&amp;nbsp; &lt;br /&gt;          &lt;br /&gt;解压所有：&amp;nbsp; &lt;br /&gt;find . &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;name &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;*tar.gz&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;exec tar &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;zxf {} \;&amp;nbsp; &lt;br /&gt;          &lt;br /&gt;编译：&amp;nbsp; &lt;br /&gt;cd nx&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;X11&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;make World&amp;nbsp; &lt;br /&gt;cd ..&amp;nbsp; &lt;br /&gt;cd nxproxy&amp;nbsp; &lt;br /&gt;.&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;configure &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt; make&amp;nbsp; &lt;br /&gt;          &lt;br /&gt;cp &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a nx&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;X11&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;X11&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;libX11.so&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&amp;nbsp; &lt;br /&gt;cp &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a nx&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;X11&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;Xext&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;libXext.so&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&amp;nbsp; &lt;br /&gt;cp &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a nx&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;X11&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;Xrender&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;libXrender.so&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&amp;nbsp; &lt;br /&gt;cp &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a nxcomp&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;libXcomp.so&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&amp;nbsp; &lt;br /&gt;cp &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a nxcompext&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;libXcompext.so&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&amp;nbsp; &lt;br /&gt;cp &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a nxcompshad&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;libXcompshad.so&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;lib&amp;nbsp; &lt;br /&gt;cp &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a nx&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;X11&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;programs&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;Xserver&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;nxagent &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;bin&amp;nbsp; &lt;br /&gt;cp &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt;a nxproxy&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;nxproxy &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;NX&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;bin&amp;nbsp; &lt;br /&gt;          &lt;br /&gt;设置LD_LIBRARY_PATH&amp;nbsp; &lt;br /&gt;export LD_LIBRARY_PATH&lt;/span&gt;&lt;span style="color: #000000;"&gt;=/&lt;/span&gt;&lt;span style="color: #000000;"&gt;usr&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;NX&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;lib:&lt;/span&gt;&lt;span&gt;$LD_LIBRARY_PATH&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp; &lt;br /&gt;          &lt;br /&gt;&lt;/span&gt;&lt;span&gt;这时，&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;usr&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;NX&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;bin&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;nxproxy 和 &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;usr&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;NX&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;bin&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;nxagent 应该可以用了         &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;Window平台下，NXWin的编译过程，参考&lt;/span&gt;&lt;a href="http://www.nomachine.com/ar/view.php?ar_id=AR01F00503" target="_blank"&gt;&lt;span&gt;这里&lt;/span&gt;&lt;/a&gt;&lt;span&gt;：&lt;/span&gt;&lt;/p&gt;  &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;    &lt;div id="cnblogs_code_open_9e16b9ac-c139-4202-92d0-1754cb15c7eb"&gt;     &lt;div&gt;&lt;span&gt;下载：         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;nx&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;X11&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;compat&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;X.Y.Z&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;N.tar.gz&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span&gt;nxwin&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;X.Y.Z&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;N.tar.gz&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span&gt;nxauth&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;X.Y.Z&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;N.tar.gz&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span&gt;nxcomp&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;X.Y.Z&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;N.tar.gz&amp;nbsp; &lt;br /&gt;          &lt;br /&gt;&lt;/span&gt;&lt;span&gt;在cygwin中，执行：         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; tar zxvf nx-X11-compat-X.Y.Z-N.tar.gz &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; tar zxvf nxwin-X.Y.Z-N.tar.gz &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; tar zxvf nxauth-X.Y.Z-N.tar.gz &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; tar zxvf nxcomp-X.Y.Z-N.tar.gz &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; cd nxcomp &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; ./configure &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; make &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; cd .. &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; cd nx-X11 &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span&gt;#&lt;/span&gt;&lt;span&gt; make World &lt;/span&gt;&lt;span style="color: #008000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;         &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;strong&gt;&lt;span&gt;     &lt;br /&gt;NX Cilent开发步骤&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;基于NX Library开发一个NX Client并不是什么难事，在freenx的svn库里有好几个NX Client工程，比如：qtnx，还有Python的实现版本gnx（仅限linux系统），因此，可以参照这些工程的实现。 &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;svn co &lt;/span&gt;&lt;a href="http://svn.berlios.de/svnroot/repos/freenx/trunk"&gt;&lt;span&gt;http://svn.berlios.de/svnroot/repos/freenx/trunk&lt;/span&gt;&lt;/a&gt;&lt;span&gt; freenx&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;NX Client与NX Server的交互过程见：&lt;/span&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/10/07/nxclient-develop.html" target="_blank"&gt;&lt;span&gt;NX Client开发步骤&lt;/span&gt;&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;瘦客户端那些事 系列：&lt;/span&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/09/11/thincilent.html"&gt;&lt;span&gt;瘦客户端那些事 - 开篇&lt;/span&gt;&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/09/24/thinclient-protocol.html"&gt;&lt;span&gt;瘦客户端那些事 - 远程传输协议&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/10/07/thinclient-secret-of-nomachine.html"&gt;&lt;span&gt;瘦客户端那些事 - NoMachine的秘密&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;span&gt;......&lt;/span&gt;&lt;img src="http://www.cnblogs.com/coderzh/aggbug/1845125.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/coderzh/archive/2010/10/07/thinclient-secret-of-nomachine.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
