<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_hyddd</title><subtitle type="text">主攻方向：架构（软件设计方案，测试整体解决方案），安全测试，性能测试，操作系统，数据库。喜欢学习各类编程语言!</subtitle><id>http://feed.cnblogs.com/blog/u/49647/rss</id><updated>2011-05-10T20:29:30Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/49647/rss"/><entry><id>http://www.cnblogs.com/hyddd/archive/2011/05/11/2042780.html</id><title type="text">软件架构乱谈—SSH框架</title><summary type="text">不废话，直入主题。SSH框架（Struts + Spring + Hibernate）不用介绍，相信大家非常熟悉了。许多使用SSH进行开发java项目在开发效率和效果上都非常不错，但同时也有人质疑SSH中的Hibernate，指责其速度较慢。但今天，我想从另外一个角度谈谈我对Hibernate的看法，欢迎怕砖：）</summary><published>2011-05-10T20:24:00Z</published><updated>2011-05-10T20:24:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2011/05/11/2042780.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2011/05/11/2042780.html"/><content type="html">&lt;p&gt;不废话，直入主题。SSH框架（Struts + Spring + Hibernate）不用介绍，相信大家非常熟悉了。许多使用SSH进行开发java项目在开发效率和效果上都非常不错，但同时也有人质疑SSH中的Hibernate，指责其速度较慢。但今天，我想从另外一个角度谈谈我对Hibernate的看法，欢迎怕砖：）&lt;/p&gt; &lt;p&gt;Hibernate是一个ORM框架，主要处理ER（Entity-Relation）的问题。而Hibernate的本质，我认为有2点：&lt;/p&gt; &lt;p&gt;（1）. 一个严格满足数据库3范式的框架。&lt;/p&gt; &lt;p&gt;（2）. 一个自动化的DML的框架。&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;1. 下面是一个我遇到过的真实应用场景，大家可以参考一下：&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Category（分类）与Goods（商品），Category与Goods是一对多的关系，一个Category分类下可以有多个Goods，一个Goods只能属于一个Category。&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;由于Category和Goods的关系，我们在实施的时候马上会碰到这样几个问题（这里先不考虑Hibernate自身的性能问题，因为它可以通过缓存解决。）：&lt;/p&gt; &lt;p&gt;（1）. Category对象中是否应该有一个Goods List呢？&lt;/p&gt; &lt;p&gt;（2）. Goods对象中是应该否有一个Category对象？&lt;/p&gt; &lt;p&gt;&amp;#8230;&amp;#8230;恩，在这种场景下，重点关注点应该是Goods（因为Goods的数量肯定远远大于Category），我的答案是：如果Goods数量不多的情况下， 这样做完全没问题，并且利用 Hibernate的特性我可以很轻易做到这一点，同时在使用Goods和Category的时候也方便。&lt;/p&gt; &lt;p&gt;但如果在（中，大型系统中）Goods数量较多时，（1）的做法就显然有问题了。同时，（2）的做法也有一些问题，比如：如果Goods对象中存有了一个Category对象，那它是否需要把Type（商品类型）对象，Brand（商品品牌）对象&amp;#8230;&amp;#8230;等等存于Goods对象中呢？等等，这样搞显然不行！那么，你现在应该会马上想到以下方案：&lt;/p&gt; &lt;p&gt;（3）. Goods对象中存放category_id。&lt;/p&gt; &lt;p&gt;恩，你的想法是对的。这里多数人的做法是：&lt;strong&gt;Goods表存放category_id，category_name，把category_name作为冗余存在Goods里面&lt;/strong&gt;。&lt;/p&gt; &lt;p&gt;OK，到这里你发现Hibernate一个很重要的特性（对象关联）在这里用不上了。&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;2. 下面是另外一个问题：你认为在系统中很麻烦，但又经常会遇到的数据库操作是什么呢？&lt;/p&gt; &lt;p&gt;应该是&lt;strong&gt;联表查询/联表操作&lt;/strong&gt;，特别是中，大型系统，这种问题会经常遇到！显然，Hibernate对此问题都表示无能为力~~&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;3. 总结&lt;/p&gt; &lt;p&gt;&lt;strong style="color: red; "&gt;其实，以上两个问题都可以看作是：无法应用3范式的特征/不具备3范式特征，导致Hibernate功能大打折扣，这也和我之前提到的Hibernate本质有关。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong style="color: red; "&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 鉴于以上问题，Hibernate在中，大型系统中并不一定能带来多少好处，再加上性能的问题，所以在选用框架前一定要反复权衡！&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;WEB应用中，Hibernate多数情况下会用在小型项目。而在ERP中，多数的小，中型项目会应用Hibernate（一般的ERP项目的数据库设计都严格按照范式进行），但大型ERP则一般不用Hibernate，这又涉及到另外一个问题，大型ERP项目数据模型可能有几百个，他们间关系复杂，要修改某个模型影响很大，非常痛苦！所以大型ERP项目多数采用MDA（Model-driven architecture）的方式，统一抽象模型层，他们用统一的接口进行数据查询，如：&lt;/p&gt; &lt;p&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;span style="color: #000000;"&gt;&amp;nbsp; &amp;nbsp; Map&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Db.find(&amp;#8220;Goods&amp;#8221;,map{&amp;#8220;name&amp;#8221;,&amp;#8221;id&amp;#8221;,&amp;#8221;price&amp;#8221;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;其中代表作有：Ofbiz，用友U9&amp;#8230;&amp;#8230;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hyddd/aggbug/2042780.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hyddd/archive/2011/05/11/2042780.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2011/02/17/1956580.html</id><title type="text">List of Free Programming books</title><summary type="text">在stackoverflow找到了不错的东东，特此记录。源地址：http://stackoverflow.com/questions/194812/list-of-freely-available-programming-booksMeta-ListHow to Design Programs: An Introduction to Computing and Programming25 Free Computer Science EbooksFree Tech BooksMindView Inc(List of Free Books)Wikibooks: ProgrammingCheat S</summary><published>2011-02-16T18:08:00Z</published><updated>2011-02-16T18:08:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2011/02/17/1956580.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2011/02/17/1956580.html"/><content type="html">&lt;div&gt;&lt;span style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; line-height: 18px; "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;在stackoverflow找到了不错的东东，特此记录。源地址：&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;div style="display: inline !important; "&gt;&lt;a href="http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books"&gt;http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books&lt;/a&gt;&lt;/div&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Meta-List&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.htdp.org/2003-09-26/Book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;How to Design Programs: An Introduction to Computing and Programming&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.coderholic.com/25-free-computer-science-books/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;25 Free Computer Science Ebooks&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.freetechbooks.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Free Tech Books&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.mindviewinc.com/Books/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;MindView Inc&lt;/a&gt;&amp;nbsp;(List of Free Books)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://en.wikibooks.org/wiki/Category%3aComputer_programming" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Wikibooks: Programming&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://refcardz.dzone.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Cheat Sheets (Free)&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://blogs.msdn.com/wriju/archive/2009/01/07/free-ebooks-at-codeplex.aspx" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;CodePlex List of Free E-Books&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.booktraining.net/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Book Training - On Video!&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.spmn.com/products_guidebooks.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Sofware Program Managers Network - Free EBooks&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.linbai.info/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;EBook Share @ linbai.info&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.freebooksclub.net/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;FreeBooksClub.Net&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://theassayer.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Theassayer.org&lt;/a&gt;&amp;nbsp;(Free Online books)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://oreilly.com/openbook/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;O'Reilly's Open Books Project&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.techbooksforfree.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;TechBooksForFree.com&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.galileocomputing.de/katalog/openbook" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Galileo Computing&lt;/a&gt;&amp;nbsp;(Free Downloadable German Books)&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Graphics Programming&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;Nvidia&amp;nbsp;&lt;a href="http://http.developer.nvidia.com/GPUGems/gpugems_part01.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;GPU Gems 1&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;Nvidia&amp;nbsp;&lt;a href="http://http.developer.nvidia.com/GPUGems2/gpugems2_part01.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;GPU Gems 2&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;Nvidia&amp;nbsp;&lt;a href="http://http.developer.nvidia.com/GPUGems3/gpugems3_part01.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;GPU Gems 3&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.gamedev.net/reference/articles/article1698.asp" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Graphics Programming Black Book&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;Wolfgang Engel&amp;nbsp;&lt;a href="http://tog.acm.org/resources/shaderx/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;ShaderX&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Language Agnostic&lt;/strong&gt;:&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books/4342778#4342778" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Object-Oriented Reengineering Patterns&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://codebetter.com/files/folders/codebetter_downloads/entry179694.aspx" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Foundations of Programming&lt;/a&gt;&amp;nbsp;by Karl Seguin&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://scpd.stanford.edu/knuth/index.jsp" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Computer Musings&lt;/a&gt;&amp;nbsp;(Lectures by Donald Knuth)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.catb.org/esr/writings/cathedral-bazaar/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Cathedral and the Bazaar&lt;/a&gt;&amp;nbsp;(Introduction to Open Source Software)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.codeplex.com/AppArchGuide" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Patterns and Practices: Application Architecture Guide 2.0&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.cl.cam.ac.uk/~rja14/book.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Security Engineering&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.dspguide.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Digital Signal Processing For Engineers and Scientists&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://gettingreal.37signals.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Getting Real&lt;/a&gt;&amp;nbsp;(Courtesy&amp;nbsp;&lt;a href="http://37signals.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;37 Signals&lt;/a&gt;)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://mitpress.mit.edu/sicp/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Structure and Interpretation of Computer Programs&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.infoq.com/minibooks/domain-driven-design-quickly" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Domain Driven Design Quickly&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://homepage.mac.com/s_lott/books/oodesign.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;OO Design&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://smartbear.com/codecollab-code-review-book.php" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Best Kept Secrets of Peer Code Review&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.scribd.com/doc/7181362/NASA-Software-Measurement-Guidebook" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;NASA Software Measurement Handbook&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-manage.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;NASA Manager Handbook for Software Development&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.cl.cam.ac.uk/teaching/Lectures/funprog-jrh-1996/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Introduction to Functional Programming&lt;/a&gt;&amp;nbsp;- Class Lectures and Slides&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.htdp.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;How to Design Programs&lt;/a&gt;&amp;nbsp;- MIT Press&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.computer.org/portal/web/swebok" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Guide to the Software Engineering Body of Knowledge&lt;/a&gt;&amp;nbsp;- IEEE Computer Society Press&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://ocw.mit.edu/OcwWeb/web/home/home/index.htm" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Online Course Materials&lt;/a&gt;&amp;nbsp;- MIT&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.cs.berkeley.edu/~vazirani/algorithms.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Algorithms&lt;/a&gt;&amp;nbsp;(Draft Copy)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://dotnetslackers.com/projects/Data-Structures-And-Algorithms/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Data Structures and Algorithms&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.agileskills.org/download.html.en" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Essential Skills for Agile Development&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Programming Languages: Application and Interpretation&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://pine.fm/LearnToProgram/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Learn to Program&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.dreamsongs.com/Files/PatternsOfSoftware.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Patterns of Software: Tales from the Software Community&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://mindprod.com/jgloss/unmain.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;How to write Unmaintainable Code&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://catb.org/esr/writings/taoup/html/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Art of Unix Programming&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://nexus.realtimepublishers.com/dgbcq.php" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Definitive Guide to Building Code Quality&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://openbookproject.net/thinkcs/cpp.php" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;How to Think Like a Computer Scientist&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://planning.cs.uiuc.edu/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Planning Algorithms&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://greenteapress.com/semaphores/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Little Book of Semaphores&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.ii.uib.no/~michal/und/i227/book/book.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Mathematical Logic - an Introduction&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.cse.ohio-state.edu/~gurari/theory-bk/theory-bk.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;An Introduction to the Theory of Computation&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://devshaped.com/book" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Developers Developers Developers Developers&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.iecc.com/linker/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Linkers and loaders&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://beej.us/guide/bgnet/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Beej's Guide to Network Programming&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.infoq.com/minibooks/domain-driven-design-quickly" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Domain Driven Design Quickly&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://compilers.iecc.com/crenshaw/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Let's Build a Compiler&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://producingoss.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Producing Open Source Software&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.lindaspaces.com/book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;How to Write Parallel Programs&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.neildavidson.com/dontjustrollthedice.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Don't Just Roll the Dice&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://programmer.97things.oreilly.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;97 Things Every Programmer Should Know&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.fastchip.net/howcomputerswork/p1.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;How Computers Work&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://nlp.stanford.edu/IR-book/information-retrieval-book.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Introduction to Information Retrieval&lt;/a&gt;&amp;nbsp;- Cambridge University Press. 2008.&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Is Parallel Programming Hard, And, If So, What Can You Do About It?&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.jjj.de/fxt/#fxtbook" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Matters Computational&lt;/a&gt;&amp;nbsp;- Springer, 2010&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="https://www.cs.kent.ac.uk/people/staff/sjt/TTFP/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Type Theory and Functional Programming&lt;/a&gt;&amp;nbsp;- Addison-Wesley, 1991&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;ASP.NET MVC&lt;/strong&gt;:&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;NerdDinner Walkthrough&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Assembly Language&lt;/strong&gt;:&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;ProgrammingGroundUp&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://drpaulcarter.com/pcasm/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Paul Carter's Tutorial on x86 Assembly&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.agner.org/optimize/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Software optimization resources by Agner Fog&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Bash&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://tldp.org/LDP/abs/html/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Advanced Bash-Scripting Guide&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://mywiki.wooledge.org/BashGuide" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Lhunath's Bash Guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;C/C++&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.knosof.co.uk/cbook/cbook.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The new C standard - an annotated reference&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://publications.gbdirect.co.uk/c_book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The C book&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Thinking in C++, Second Edition&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://cppannotations.sourceforge.net/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;C++ Annotations&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.agner.org/optimize/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Software optimization resources by Agner Fog&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://cartan.cas.suffolk.edu/oopdocbook/opensource/index.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Introduction to Design Patterns in C++ with Qt 4&lt;/a&gt;&amp;nbsp;(Open Publication License) (&lt;a href="http://www.informit.com/store/product.aspx?isbn=0131879057" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;PDF&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;C#&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;See&amp;nbsp;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;.NET&lt;/strong&gt;&amp;nbsp;below&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Django&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://djangobook.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Djangobook.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Erlang&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://learnyousomeerlang.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Learn You Some Erlang For Great Good&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;F#&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.ctocorner.com/fsharp/book/ch0.aspx" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;F#&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Forth&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://home.iae.nl/users/mhx/sf.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Starting Forth&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://thinking-forth.sourceforge.net/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Thinking Forth&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Git&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://progit.org/book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Pro Git&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://book.git-scm.com/index.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Git Community Book&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Grails&lt;/strong&gt;&amp;nbsp;-&amp;nbsp;&lt;a href="http://www.infoq.com/minibooks/grails-getting-started" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Getting Start with Grails&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Haskell&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://learnyouahaskell.com/chapters" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Learn You a Haskell&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://book.realworldhaskell.org/read/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Real World Haskell&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;HTML&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://diveintohtml5.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Dive Into HTML5&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Java&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Sun's Java Tutorials&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.mindview.net/Books/TIJ/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Thinking in Java&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://openbookproject.net/thinkcs/java.php" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;How to Think Like a Computer Scientist&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.redbooks.ibm.com/redbooks/SG245118.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Java Thin-Client Programming&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://njbartlett.name/files/osgibook_preview_20091217.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;OSGi in Practice&lt;/a&gt;&amp;nbsp;(CreativeCommons Attribution Non-commercial Share Alike License)&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;JavaScript&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://eloquentjavascript.net/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Eloquent JavaScript&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.crockford.com/javascript/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Crockford's JavaScript&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.rebeccamurphey.com/jqfundamentals/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;jQuery Fundamentals&lt;/a&gt;&amp;nbsp;(starts with JavaScript basics)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="https://developer.mozilla.org/en/JavaScript/Guide" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;JavaScript Guide&lt;/a&gt;&amp;nbsp;(Mozilla Developer Network)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Essential Javascript &amp;amp; jQuery Design Patterns for Beginners&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Linux&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.advancedlinuxprogramming.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Advanced Linux Programming&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Lisp&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.gigamonkeys.com/book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Practical Common Lisp&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.paulgraham.com/onlisp.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;On Lisp&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.paulgraham.com/acl.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;ANSI Common Lisp&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.cs.cmu.edu/Groups/AI/html/cltl/mirrors.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Common Lisp the Language, 2nd Edition&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://psg.com/~dlamkins/sl/contents.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Successful Lisp&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://letoverlambda.com/index.cl/toc" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Let Over Lambda - 50 Years of Lisp&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Lua&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.lua.org/pil/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Programming In Lua&lt;/a&gt;&amp;nbsp;(for v5 but still largely relevant)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.lua.org/gems/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Lua Programming Gems&lt;/a&gt;&amp;nbsp;not entirely free, but has a lot of free chapters and accompanying code.&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Maven&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.maestrodev.com/better-build-maven" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Better Builds with Maven&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.sonatype.com/books/mvnex-book/reference/public-book.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Maven by Example&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.sonatype.com/books/mvnref-book/reference/public-book.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Maven: The Complete Reference&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.sonatype.com/books/nexus-book/reference/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Repository Management with Nexus&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.sonatype.com/books/m2eclipse-book/reference/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Developing with Eclipse and Maven&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Mercurial&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://hgbook.red-bean.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Mercurial: The Definitive Guide&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://hginit.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;HGInit - Mercurial Tutorial by Joel Spolsky&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;.NET (C#)&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.programmersheaven.com/2/CSharpBook" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Free C# Book&lt;/a&gt;&amp;nbsp;Covers C#1.0 and 2.0 (Courtesy of&amp;nbsp;&lt;a href="http://www.programmersheaven.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Programmers Heaven&lt;/a&gt;)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.infoq.com/minibooks/vsnettt" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Visual Studio Tips and Tricks&lt;/a&gt;&amp;nbsp;(VS 2003-2005 only)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://weblogs.asp.net/zeeshanhirani/archive/2008/12/05/my-christmas-present-to-the-entity-framework-community.aspx" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Entity Framework&lt;/a&gt;&amp;nbsp;(514 pages)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.charlespetzold.com/dotnet/index.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Charles Petzold's .NET Book 0&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.albahari.com/threading/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Threading in C#&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.csharpcourse.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;C# Yellow Book&lt;/a&gt;&amp;nbsp;(Intro to programming)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://en.wikibooks.org/wiki/C_Sharp_Programming" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;C# Programming - Wikibook&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.techotopia.com/index.php/C_Sharp_Essentials" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;C# Essentials&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.brpreiss.com/books/opus6/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Data Structures and Algorithms with Object-Oriented Design Patterns in C#&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://downloads.red-gate.com/ebooks/DotNet/illustratedcsharp2008.zip" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Illustrated C# 2008&lt;/a&gt;&amp;nbsp;(Download) (&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;.ZIP&lt;/strong&gt;) [dead link]&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.red-gate.com/products/ants_performance_profiler/be_ahead_of_the_game_ebook.htm?utm_source=simpletalk&amp;amp;utm_medium=email&amp;amp;utm_content=nlv_aheadofgame-ebook&amp;amp;utm_campaign=antsperformanceprofiler" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;O'Reilly's C# Pocket Reference Manual&lt;/a&gt;&amp;nbsp;(&lt;em style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-style: italic; background-position: initial initial; background-repeat: initial initial; "&gt;Free Ebook courtesy of&amp;nbsp;&lt;a href="http://red-gate.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Red Gate Software&lt;/a&gt;&lt;/em&gt;) [dead link]&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;NoSQL&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://books.couchdb.org/relax/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;CouchDB: The Definitive Guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Objective-C&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Objective-C Programming Language&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Oracle Server&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;Oracle&amp;nbsp;&lt;a href="http://tahiti.oracle.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Guides and Manuals&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Oracle PL/SQL&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/toc.htm" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;PL/SQL Language Reference&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/toc.htm" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;PL/SQL Packages and Types Reference&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.toadworld.com/Knowledge/DatabaseKnowledge/StevenFeuersteinsPLSQLObsession/tabid/153/Default.aspx" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Steven Feuerstein's PL/SQL Obsession - Videos and Presentations&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Parrot / Perl 6&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://github.com/perl6/book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Perl 6&lt;/a&gt;&amp;nbsp;(Work in progress)&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Perl&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://hop.perl.plover.com/book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Higher-Order Perl&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.greenteapress.com/perl/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Perl The Hard Way&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.extremeperl.org/bk/home" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Extreme Perl&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://linkmingle.com/list/13-plus-List-of-Free-Great-Perl-Books-available-Online-freebooksandarticles" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Perl Free Online EBooks&lt;/a&gt;&amp;nbsp;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Meta-List&lt;/strong&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.masonbook.com/book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Mason Book&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://modperlbook.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Practical mod_perl&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.perl.org/books/beginning-perl/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Beginning Perl&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.masonbook.com/book/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Embedding Perl in HTML with Mason&lt;/a&gt;&amp;nbsp;(Open Publication License)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://lwp.interglacial.com/index.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Perl &amp;amp; LWP&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.globalspin.com/thebook/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Perl for the Web&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://oreilly.com/openbook/webclient/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Web Client Programming with Perl&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.onyxneon.com/books/modern_perl/index.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Modern Perl 5&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;PHP&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.tuxradar.com/practicalphp" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Practical PHP Programming&lt;/a&gt;&amp;nbsp;(Wiki that contains O'Reilly's&amp;nbsp;&lt;em style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-style: italic; background-position: initial initial; background-repeat: initial initial; "&gt;PHP In a Nutshell&lt;/em&gt;)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.survivethedeepend.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Zend Framework: Survive the Deep End&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;PowerShell&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://powershell.com/cs/blogs/ebook/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Mastering PowerShell&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Prolog&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.amzi.com/ExpertSystemsInProlog/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Building Expert Systems in Prolog&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.amzi.com/AdventureInProlog/advfrtop.htm" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Adventure in Prolog&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://computing.unn.ac.uk/staff/cgpb4/prologbook/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Prolog Programming A First Course&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.ida.liu.se/~ulfni/lpp/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Logic, Programming and Prolog (2ed)&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.j-paine.org/prolog/mathnotes/files/pms/pms.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Introduction to Prolog for Mathematicians&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.learnprolognow.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Learn Prolog Now!&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://cs.union.edu/~striegnk/courses/nlp-with-prolog/html/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Natural Language Processing Techniques in Prolog&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://bookboon.com/int/student/it/prolog-techniques-applications-of-prolog" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Prolog techniques&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://bookboon.com/int/student/it/applications-of-prolog" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Applications of Prolog&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.cs.bris.ac.uk/~flach/SimplyLogical.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Simply logical&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;PostgreSQL&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.commandprompt.com/ppbook/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Practical PostgreSQL&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Python&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://diveintopython.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Dive Into Python&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://diveintopython3.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Dive Into Python 3&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.swaroopch.com/notes/Python" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Byte of Python&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://homepage.mac.com/s_lott/books/python.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Building Skills in Python Version 2.5&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://linkmingle.com/list/List-of-Free-Online-Python-Books-freebooksandarticles" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Python Free Online Ebooks&lt;/a&gt;&amp;nbsp;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Meta-List&lt;/strong&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://openbookproject.net/pybiblio/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Python Bibliotheca&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.greenteapress.com/thinkpython/thinkpython.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Think Python&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.brpreiss.com/books/opus7/html/book.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Data Structures and Algorithms in Python&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.greenteapress.com/thinkpython/thinkCSpy/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;How to Think Like a Computer Scientist: Learning with Python&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.openbookproject.net/py4fun/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Python for Fun&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://inventwithpython.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Invent Your Own Computer Games With Python&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://learnpythonthehardway.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Learn Python The Hard Way&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.mindview.net/Books/TIPython/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Thinking in Python&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://djangobook.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Django Book&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/" rel="nofollow" title="SWFK" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Snake Wrangling For Kids&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.nltk.org/book" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Natural Language Processing with Python (nltk-book)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Ruby&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.ruby-doc.org/docs/ProgrammingRuby/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Programming Ruby&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://mislav.uniqpath.com/poignant-guide/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Why's (Poignant) Guide to Ruby&lt;/a&gt;&amp;nbsp;(&lt;a href="http://www.scribd.com/doc/2236084/Whys-Poignant-Guide-to-Ruby" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Mirror&lt;/a&gt;&amp;nbsp;via&amp;nbsp;&lt;a href="http://www.scribd.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Scribd&lt;/a&gt;)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.humblelittlerubybook.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Mr. Neighborly's Humble Little Ruby Book&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://rubybestpractices.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Ruby Best Practices&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://macruby.labs.oreilly.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;MacRuby: The Definitive Guide&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.railstutorial.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Ruby on Rails Tutorial: Learn Rails By Example&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Scala&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.scala-lang.org/docu/files/ScalaTutorial.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;A Scala Tutorial for Java programmers&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.scala-lang.org/docu/files/ScalaByExample.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Scala By Example&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://programming-scala.labs.oreilly.com/index.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Programming Scala&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://github.com/leithaus/XTrace/tree/monadic/src/main/book/content/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Xtrace&lt;/a&gt;&amp;nbsp;(Github)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://github.com/tjweir/liftbook" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;List&lt;/a&gt;&amp;nbsp;(Github)&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://github.com/leithaus/XTrace/tree/monadic/src/main/book/content/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Pro Scala: Monadic Design Patterns for the Web&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://exploring.liftweb.net/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Exploring Lift&lt;/a&gt;&amp;nbsp;(published earlier as "The Definitive Guide to Lift",&amp;nbsp;&lt;a href="http://groups.google.com/group/the-lift-book" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;pdf&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Scheme&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.scheme.com/tspl4/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;The Scheme Programming Language (Edition 4)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Smalltalk&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://stephane.ducasse.free.fr/FreeBooks.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Smalltalk Free Ebooks&lt;/a&gt;&amp;nbsp;&lt;em style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-style: italic; background-position: initial initial; background-repeat: initial initial; "&gt;Courtesy of St&amp;#233;phane Ducasse&lt;/em&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.squeakbyexample.org/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Squeak By Example&lt;/a&gt;&amp;nbsp;(Smalltalk IDE)&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Subversion&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.phptr.com/content/images/0131855182/downloads/Nagel_book.pdf" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Subversion Version Control: Using the Subversion Version Control System in Development Projects&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://svnbook.red-bean.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Version Control with Subversion&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;SQL (Implementation agnostic)&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.cs.arizona.edu/people/rts/publications.html" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Developing Time-Oriented Database Applications in SQL&lt;/a&gt;,Richard T. Snodgrass&lt;/li&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://use-the-index-luke.com/" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;Use The Index, Luke!&lt;/a&gt;&amp;nbsp;- A guide to SQL database performance for developers&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; clear: both; word-wrap: break-word; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; font-weight: bold; background-position: initial initial; background-repeat: initial initial; "&gt;Vim&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; list-style-type: disc; list-style-position: initial; list-style-image: initial; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;a href="http://www.swaroopch.com/notes/Vim" rel="nofollow" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 14px; vertical-align: baseline; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; color: #0077cc; text-decoration: none; cursor: pointer; background-position: initial initial; background-repeat: initial initial; "&gt;A Byte of Vim&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/hyddd/aggbug/1956580.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hyddd/archive/2011/02/17/1956580.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2010/04/10/1709258.html</id><title type="text">【转】Tokyocabinet/Tokyotyrant文档大合集</title><summary type="text">本来打算自己整理下Tc的，呵呵，结果发现了下面这个不错的文档。Don't Repeat Yourself这条法则还是很重要的，故转载之。原文连接：http://www.162cm.com/p/tokyotyrant.html#toc4Tokyocabinet/Tokyotyrant文档大合集 [原文:整理于网络 整理:一米六二&amp;lt;xurenlu@gmail.com&amp;gt; 网络更新:http:...</summary><published>2010-04-10T14:26:00Z</published><updated>2010-04-10T14:26:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2010/04/10/1709258.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2010/04/10/1709258.html"/><content type="html">&lt;center&gt;&#xD;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;本来打算自己整理下Tc的，呵呵，结果发现了下面这个不错的文档。Don't Repeat Yourself这条法则还是很重要的，故转载之。&lt;br /&gt;&lt;/p&gt;&lt;p align="left"&gt;原文连接：http://www.162cm.com/p/tokyotyrant.html#toc4&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 24pt;"&gt;Tokyocabinet/Tokyotyrant文档大合集&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;em&gt; [原文:整理于网络 整理:一米六二&amp;lt;xurenlu@gmail.com&amp;gt; 网络更新:http://www.162cm.com/p/tokyotyrant.html]&lt;/em&gt;&lt;br /&gt;&#xD;
Last Updated: 2009-12-04 &lt;/center&gt; &lt;hr noshade="noshade" size="1" /&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;1. 前言&lt;/span&gt; &lt;/li&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;2. 参考资料链接&lt;/span&gt; &lt;/li&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3. 使用介绍&lt;/span&gt;&#xD;
     &lt;ul&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.1. 基本概念&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.2. Tokyo Cabinet 简介&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.3. 性能介绍&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.4. tokyotyrant和Memcached的优势比较&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.4.1. 故障转移&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.4.2. 日志文件体积小&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.4.3. 超大数据量下表现出色&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.5. 安装&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.5.1. 编译安装tokyocabinet数据库&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.5.2. 编译安装tokyotyrant&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.6. tokyotyrant的配置&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.6.1. 创建tokyotyrant数据文件存放目录&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.6.2. 启动tokyotyrant的主进程（ttserver）&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.6.3. 停止tokyotyrant（ttserver）&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;3.7. 调用&lt;/span&gt; &lt;/li&gt;&#xD;
     &lt;/ul&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;4. 程序架构&lt;/span&gt;&#xD;
     &lt;ul&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;4.1. 流程介绍&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;4.1.1. 多线程&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;4.1.2. TokyoTyrant vs. Memcached&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;4.1.3. 启动流程&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;4.1.4. 请求处理&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;4.1.5. 数据结构&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
     &lt;/ul&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5. 数据库存储基础&lt;/span&gt;&#xD;
     &lt;ul&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.1. tokyocabinet的源代码结构&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.2. tokyotyrant的存储类型&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.3. tokyotyrant的缓存&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.4. 异步&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.5. 索引&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6. 数据的Hash&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1. 冷存储&lt;/span&gt;&#xD;
             &lt;ul&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1.1. 一级hash索引：bidx&lt;/span&gt; &lt;/li&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1.2. 二级hash索引：hash&lt;/span&gt; &lt;/li&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1.3. key值对比&lt;/span&gt; &lt;/li&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1.4. 存储时的主要逻辑&lt;/span&gt; &lt;/li&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1.5. 数据文件结构&lt;/span&gt; &lt;/li&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1.6. 内存映射的一级索引&lt;/span&gt; &lt;/li&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1.7. bnum参数&lt;/span&gt; &lt;/li&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;5.6.1.8. 预告&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;/ul&gt;&#xD;
             &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
     &lt;/ul&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;6. 线程和事件&lt;/span&gt;&#xD;
     &lt;ul&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;6.1. 工作线程&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;6.1.1. 什么是工作线程组&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;6.1.2. 从这里开始&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;6.1.3. ttservdeqtasks的工作过程&lt;/span&gt;&#xD;
             &lt;ul&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;6.1.3.1. **存取请求**&lt;/span&gt; &lt;/li&gt;&#xD;
                 &lt;li&gt;&lt;span style="color: #0000ff;"&gt;6.1.3.2. 线程处理请求&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;/ul&gt;&#xD;
             &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
     &lt;/ul&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;7. MemcacheDB,Tokyo Tyrant和Redis 性能对比测试&lt;/span&gt;&#xD;
     &lt;ul&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;7.1. 测试环境&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;7.1.1. 软件环境&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;7.1.2. 配置&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;7.1.3. 测试客户端&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;7.2. 小数据量测试结果&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;7.3. 大数据量测试结果&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;7.4. Some notes about the test&lt;/span&gt; &lt;/li&gt;&#xD;
     &lt;/ul&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;8. Tokyo Tyrant 的问题和Bug&lt;/span&gt;&#xD;
     &lt;ul&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;8.1. Bug report&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;8.2. tokyotyrant大规模出错的问题&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;8.3. Bugs&lt;/span&gt; &lt;/li&gt;&#xD;
     &lt;/ul&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9. 延伸阅读:key-value-pair database的比较&lt;/span&gt;&#xD;
     &lt;ul&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.1. 满足极高读写性能需求的Kye-Value数据库：Redis，Tokyo Cabinet， Flare&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.1.1. Redis&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.1.2. Tokyo Cabinet和Tokoy Tyrant&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.1.3. Flare&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.2. 满足海量存储需求和访问的面向文档的数据库：MongoDB，CouchDB&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.2.1. MongoDB&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.2.2. CouchDB&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.3. 满足高可扩展性和可用性的面向分布式计算的数据库：Cassandra，Voldemort&lt;/span&gt;&#xD;
         &lt;ul&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.3.1. Cassandra&lt;/span&gt; &lt;/li&gt;&#xD;
             &lt;li&gt;&lt;span style="color: #0000ff;"&gt;9.3.2. Voldemort&lt;/span&gt; &lt;/li&gt;&#xD;
         &lt;/ul&gt;&#xD;
         &lt;/li&gt;&#xD;
     &lt;/ul&gt;&#xD;
     &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;hr noshade="noshade" size="1" /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1. 前言&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里不是我个人原创,是我对网络上整理到的资料的再加工,以更成体系,更方便研究阅读.主要是对其中跟主题无关的文字删除,部分人称稍做修改;本人无版权,您可以将本页面视为对参考页面的镜像.第二部分已经给出所有的参考资料; &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2. 参考资料链接&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt; 利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统[原创]》:[&lt;a target="_blank" href="http://blog.s135.com/post/362/"&gt;http://blog.s135.com/post/362/&lt;/a&gt;] &lt;/li&gt;&#xD;
     &lt;li&gt;tokyotyrant源代码研究-程序架构与运行流程:[&lt;a target="_blank" href="http://lgone.com/blog/html/y2009/302.html"&gt;http://lgone.com/blog/html/y2009/302.html&lt;/a&gt;] &lt;/li&gt;&#xD;
     &lt;li&gt;tokyocabinet的hash存储机制:[&lt;a target="_blank" href="http://lgone.com/blog/html/y2009/529.html"&gt;http://lgone.com/blog/html/y2009/529.html&lt;/a&gt;] &lt;/li&gt;&#xD;
     &lt;li&gt;tokyocabinet源代码研究：存储机制:[&lt;a target="_blank" href="http://lgone.com/blog/html/y2009/505.html"&gt;http://lgone.com/blog/html/y2009/505.html&lt;/a&gt;] &lt;/li&gt;&#xD;
     &lt;li&gt;tokyotyrant源代码研究-第三线程:[&lt;a target="_blank" href="http://lgone.com/blog/html/y2009/342.html"&gt;http://lgone.com/blog/html/y2009/342.html&lt;/a&gt;] &lt;/li&gt;&#xD;
     &lt;li&gt;tokyotyrant源代码研究-工作线程组:[&lt;a target="_blank" href="http://lgone.com/blog/html/y2009/348.html"&gt;http://lgone.com/blog/html/y2009/348.html&lt;/a&gt;] &lt;/li&gt;&#xD;
     &lt;li&gt;tokyotyrant大规模出错的问题:[&lt;a target="_blank" href="http://lgone.com/blog/html/y2009/491.html"&gt;http://lgone.com/blog/html/y2009/491.html&lt;/a&gt;] &lt;/li&gt;&#xD;
     &lt;li&gt;MemcacheDB, Tokyo Tyrant, Redis performance test: [&lt;a target="_blank" href="http://timyang.net/data/mcdb-tt-redis/"&gt;http://timyang.net/data/mcdb-tt-redis/&lt;/a&gt;] &lt;/li&gt;&#xD;
     &lt;li&gt;robbin,为什么要用非关系数据库;[&lt;a target="_blank" href="http://robbin.javaeye.com/blog/524977"&gt;http://robbin.javaeye.com/blog/524977&lt;/a&gt;] &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3. 使用介绍&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.1. 基本概念&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;tokyocabinet :一个key-value的DBM数据库，但是没有提供网络接口，以下称TC。 &lt;/li&gt;&#xD;
     &lt;li&gt;tokyotyrant :是为TC写的网络接口，他支持memcache协议，也可以通过HTTP操作，以下称TT。 &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.2. Tokyo Cabinet 简介&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
     &lt;li&gt; 项目主页:&lt;a target="_blank" href="http://tokyocabinet.sourceforge.net/"&gt;http://tokyocabinet.sourceforge.net/&lt;/a&gt; &lt;/li&gt;&#xD;
     &lt;li&gt;简介 Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序列,既可以是二进制也可以是字符串。这里没有数据类型和数据表的概念。当做为Hash表数据库使用时，每个key必须是不同的,因此无法存储两个key相同的值。提供了以下访问方法:提供key,value参数来存储，按 key删除记录，按key来读取记录，另外，遍历key也被支持，虽然顺序是任意的不能被保证。这些方法跟Unix标准的DBM,例如GDBM,NDBM 等等是相同的，但是比它们的性能要好得多（因此可以替代它们) 当按B+树来存储时，拥用相同key的记录也能被存储。像hash表一样的读取，存储，删除函数也都有提供。记录按照用户提供的比较函数来存储。可以采用顺序或倒序的游标来读取每一条记录。依照这个原理，向前的字符串匹配搜索和整数区间搜索也实现了。另外，B＋树的事务也是可用的。对于定长的数组，记录按自然数来标记存储。不能存储key相同的两条或更多记录。另外，每条记录的长度受到限 制。读取方法和hash表的一样。 Tokyo Cabinet是用C写的，同时提供c,perl,ruby,java的API。Tokyo Cabinet在提供了POSIX和C99的平台上都可用，它以GNU Lesser Public License协议发布。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.3. 性能介绍&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Tokyo Cabinet 是日本人 平林幹雄 开发的一款 DBM 数据库，该数据库读写非常快，哈希模式写入100万条数据只需0.643秒，读取100万条数据只需0.773秒，是 Berkeley DB 等 DBM 的几倍。 &lt;/p&gt;&#xD;
&lt;center&gt;&lt;img src="http://www.162cm.com/p/resources/images/tokyocabinet.gif" alt="" align="center" border="0" /&gt;&lt;/center&gt; Tokyo Tyrant 加上 Tokyo Cabinet，构成了一款支持高并发的分布式持久存储系统，对任何原有Memcached客户端来讲，可以将Tokyo Tyrant看成是一个Memcached，但是，它的数据是可以持久存储的。这一点，跟新浪的Memcachedb性质一样。 &#xD;
&lt;p&gt;&lt;strong&gt;3.4. tokyotyrant和Memcached的优势比较&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;相比Memcachedb而言，Tokyo Tyrant具有以下优势: &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.4.1. 故障转移&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Tokyo Tyrant支持双机互为主辅模式，主辅库均可读写，而Memcachedb目前支持类似MySQL主辅库同步的方式实现读写分离，支持&amp;#8220;主服务器可读写、辅助服务器只读&amp;#8221;模式。 &lt;/p&gt;&#xD;
&lt;center&gt;&lt;img src="http://www.162cm.com/p/resources/images/addserver.gif" alt="" align="center" border="0" /&gt;&lt;/center&gt; 这里使用 $memcache-&amp;gt;addServer 而不是 $memcache-&amp;gt;connect 去连接 Tokyo Tyrant 服务器，是因为当 Memcache 客户端使用 addServer 服务器池时，是根据&amp;#8220;crc32(key) % current_server_num&amp;#8221;哈希算法将 key 哈希到不同的服务器的，PHP、C 和 python 的客户端都是如此的算法。Memcache 客户端的 addserver 具有故障转移机制，当 addserver 了2台 Memcached 服务器，而其中1台宕机了，那么 current_server_num 会由原先的2变成1。&#xD;
&lt;p&gt;引用 memcached 官方网站和 PHP 手册中的两段话： &lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&lt;a target="_blank" href="http://www.danga.com/memcached/"&gt;http://www.danga.com/memcached/&lt;/a&gt; &lt;br /&gt;&#xD;
If a host goes down, the API re-maps that dead host's requests onto the servers that are available. &lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;a target="_blank" href="http://cn.php.net/manual/zh/function.Memcache-addServer.php"&gt;http://cn.php.net/manual/zh/function.Memcache-addServer.php&lt;/a&gt; &lt;br /&gt;&#xD;
Failover may occur at any stage in any of the methods, as long as other servers are available the request the user won't notice. Any kind of socket or Memcached server level errors (except out-of-memory) may trigger the failover. Normal client errors such as adding an existing key will not trigger a failover.&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.4.2. 日志文件体积小&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Tokyo Tyrant用于主辅同步的日志文件比较小，大约是数据库文件的1.3倍，而Memcachedb的同步日志文件非常大，如果不定期清理，很容易将磁盘写满 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.4.3. 超大数据量下表现出色&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;center&gt;&lt;img src="http://www.162cm.com/p/resources/images/tokyotyrant.gif" alt="" align="center" border="0" /&gt;&lt;/center&gt; 但是，Tokyo Tyrant 也有缺点：在32位操作系统下，作为 Tokyo Tyrant 后端存储的 Tokyo Cabinet 数据库单个文件不能超过2G ，而64位操作系统则不受这一限制。所以，如果使用 Tokyo Tyrant，推荐在64位CPU、操作系统上安装运行。&#xD;
&lt;p&gt;&lt;strong&gt;3.5. 安装&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;notice &lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;** 这里假定了tokyotyrant的版本是1.1.29,请注意.** &lt;/li&gt;&#xD;
     &lt;li&gt;** 请先安装tokyocabinet,再安装tokyotyrant.后者依赖前者** &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.5.1. 编译安装tokyocabinet数据库&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;wget &lt;a target="_blank" href="http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.28.tar.gz"&gt;http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.28.tar.gz&lt;/a&gt;&lt;br /&gt;&#xD;
tar zxvf tokyocabinet-1.4.28.tar.gz&lt;br /&gt;&#xD;
cd tokyocabinet-1.4.28/&lt;br /&gt;&#xD;
./configure&lt;br /&gt;&#xD;
make&lt;br /&gt;&#xD;
make install&lt;br /&gt;&#xD;
cd ../&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.5.2. 编译安装tokyotyrant&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;wget &lt;a target="_blank" href="http://tokyocabinet.sourceforge.net/tyrantpkg/tokyotyrant-1.1.29.tar.gz"&gt;http://tokyocabinet.sourceforge.net/tyrantpkg/tokyotyrant-1.1.29.tar.gz&lt;/a&gt;&lt;br /&gt;&#xD;
tar zxvf tokyotyrant-1.1.29.tar.gz&lt;br /&gt;&#xD;
cd tokyotyrant-1.1.29/&lt;br /&gt;&#xD;
./configure&lt;br /&gt;&#xD;
make&lt;br /&gt;&#xD;
make install&lt;br /&gt;&#xD;
cd ../&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.6. tokyotyrant的配置&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.6.1. 创建tokyotyrant数据文件存放目录&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&lt;br /&gt;&#xD;
mkdir -p /ttserver/&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.6.2. 启动tokyotyrant的主进程（ttserver）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
     &lt;li&gt;单机模式&#xD;
     &lt;div&gt;&#xD;
     &lt;pre&gt;ulimit -SHn 51200&lt;br /&gt;&#xD;
     ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     &lt;/div&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;双机互为主辅模式 服务器192.168.1.91:&#xD;
     &lt;div&gt;&#xD;
     &lt;pre&gt;ulimit -SHn 51200&lt;br /&gt;&#xD;
     ttserver -host 192.168.1.91 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 91 -mhost 192.168.1.92 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tch&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     &lt;/div&gt;&#xD;
     服务器192.168.1.92:&#xD;
     &lt;div&gt;&#xD;
     &lt;pre&gt;ulimit -SHn 51200&lt;br /&gt;&#xD;
     ttserver -host 192.168.1.92 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 92 -mhost 192.168.1.91 -mport 11211 -rts /ttserver/ttserver.rts /ttserver/database.tch&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     &lt;/div&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt; 参数说明 ttserver &lt;a target="_blank" href="http://www.162cm.com/p/name"&gt;-host&lt;/a&gt; &lt;a target="_blank" href="http://www.162cm.com/p/num"&gt;-port&lt;/a&gt; &lt;a target="_blank" href="http://www.162cm.com/p/num"&gt;-thnum&lt;/a&gt; &lt;a target="_blank" href="http://www.162cm.com/p/num"&gt;-tout&lt;/a&gt; [-dmn] &lt;a target="_blank" href="http://www.162cm.com/p/path"&gt;-pid&lt;/a&gt; &lt;a target="_blank" href="http://www.162cm.com/p/path"&gt;-log&lt;/a&gt; [-ld|-le] &lt;a target="_blank" href="http://www.162cm.com/p/path"&gt;-ulog&lt;/a&gt; &lt;a target="_blank" href="http://www.162cm.com/p/num"&gt;-ulim&lt;/a&gt; [-uas] &lt;a target="_blank" href="http://www.162cm.com/p/num"&gt;-sid&lt;/a&gt; &lt;a target="_blank" href="http://www.162cm.com/p/name"&gt;-mhost&lt;/a&gt; &lt;a target="_blank" href="http://www.162cm.com/p/num"&gt;-mport&lt;/a&gt; &lt;a target="_blank" href="http://www.162cm.com/p/path"&gt;-rts&lt;/a&gt; [dbname]&#xD;
     &lt;pre&gt;-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。&lt;br /&gt;&#xD;
     -port num : 指定需要绑定的端口号。默认端口号为1978 &lt;br /&gt;&#xD;
     -thnum num : 指定线程数。默认为8个线程。 &lt;br /&gt;&#xD;
     -tout num : 指定每个会话的超时时间（单位为秒）。默认永不超时。 &lt;br /&gt;&#xD;
     -dmn : 以守护进程方式运行。&lt;br /&gt;&#xD;
     -pid path : 输出进程ID到指定文件（这里指定文件名）。&lt;br /&gt;&#xD;
     -log path : 输出日志信息到指定文件（这里指定文件名）。&lt;br /&gt;&#xD;
     -ld : 在日志文件中还记录DEBUG调试信息。&lt;br /&gt;&#xD;
     -le : 在日志文件中仅记录错误信息。&lt;br /&gt;&#xD;
     -ulog path : 指定同步日志文件存放路径（这里指定目录名）。&lt;br /&gt;&#xD;
     -ulim num : 指定每个同步日志文件的大小（例如128m）。&lt;br /&gt;&#xD;
     -uas : 使用异步IO记录更新日志（使用此项会减少磁盘IO消耗，但是数据会先放在内存中，不会立即写入磁盘，如果重启服务器或ttserver进程被kill掉，将导致部分数据丢失。一般情况下不建议使用）。&lt;br /&gt;&#xD;
     -sid num : 指定服务器ID号（当使用主辅模式时，每台ttserver需要不同的ID号） &lt;br /&gt;&#xD;
     -mhost name : 指定主辅同步模式下，主服务器的域名或IP地址。&lt;br /&gt;&#xD;
     -mport num : 指定主辅同步模式下，主服务器的端口号。&lt;br /&gt;&#xD;
     -rts path : 指定用来存放同步时间戳的文件名。&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     如果使用的是哈希数据库，可以指定参数&amp;#8220;#bnum=xxx&amp;#8221;来提高性能。它可以指定bucket存储桶的数量。例如指定&amp;#8220;#bnum=1000000&amp;#8221;，就可以将最新最热的100万条记录缓存在内存中：&#xD;
     &lt;div&gt;&#xD;
     &lt;pre&gt;ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ttserver/ttserver.pid -log /ttserver/ttserver.log -le -ulog /ttserver/ -ulim 128m -sid 1 -rts /ttserver/ttserver.rts /ttserver/database.tch#bnum=1000000&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     &lt;/div&gt;&#xD;
     如果大量的客户端访问ttserver，请确保文件描述符够用。许多服务器的默认文件描述符为1024，可以在启动ttserver前使用ulimit命令提高这项值。例如：&#xD;
     &lt;div&gt;&#xD;
     &lt;pre&gt;ulimit -SHn 51200&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     &lt;/div&gt;&#xD;
     &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.6.3. 停止tokyotyrant（ttserver）&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;ps -ef | grep ttserver&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
找到ttserver的进程号并kill，例如：&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;kill -TERM 2159&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.7. 调用&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
     &lt;li&gt;任何Memcached客户端均可直接调用tokyotyrant。 &lt;/li&gt;&#xD;
     &lt;li&gt;还可以通过HTTP方式调用，下面以Linux的curl命令为例，介绍如何操作tokyotyrant;&#xD;
     &lt;ul&gt;&#xD;
         &lt;li&gt;写数据:将数据&amp;#8220;value&amp;#8221;写入到&amp;#8220;key&amp;#8221;中：&#xD;
         &lt;div&gt;&#xD;
         &lt;pre&gt;curl -X PUT &lt;a target="_blank" href="http://127.0.0.1:11211/key"&gt;http://127.0.0.1:11211/key&lt;/a&gt; -d "value"&lt;br /&gt;&#xD;
         &lt;/pre&gt;&#xD;
         &lt;/div&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt;读数据，读取&amp;#8220;key&amp;#8221;中数据:&#xD;
         &lt;div&gt;&#xD;
         &lt;pre&gt;curl &lt;a target="_blank" href="http://127.0.0.1:11211/key"&gt;http://127.0.0.1:11211/key&lt;/a&gt;&lt;br /&gt;&#xD;
         &lt;/pre&gt;&#xD;
         &lt;/div&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt;删数据，删除&amp;#8220;key&amp;#8221;:&#xD;
         &lt;div&gt;&#xD;
         &lt;pre&gt;curl -X DELETE &lt;a target="_blank" href="http://127.0.0.1:11211/key"&gt;http://127.0.0.1:11211/key&lt;/a&gt;&lt;br /&gt;&#xD;
         &lt;/pre&gt;&#xD;
         &lt;/div&gt;&#xD;
         &lt;/li&gt;&#xD;
     &lt;/ul&gt;&#xD;
     &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4. 程序架构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4.1. 流程介绍&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;总的说来，从编码方式上来看，tokyocabinet是一个很优秀的代码，整体架构条理十分清楚，看起来不很费劲,下面先看一个图，大概说一下TT的工作流程。 &lt;/p&gt;&#xD;
&lt;center&gt;&lt;img src="http://www.162cm.com/p/resources/images/tt.jpg" alt="" align="center" border="0" /&gt;&lt;/center&gt; &#xD;
&lt;p&gt;&lt;strong&gt;4.1.1. 多线程&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;主线程通过网络接口侦听请求连接，然后将得到的请求放到一个全局的队列中，然后work线程从队列头取出请求进行处理并返回给用户。另外还有一个timer线程，他是用于全局做timeout检测的，这个后面再具体说。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4.1.2. TokyoTyrant vs. Memcached&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;现在对TT的处理流程有了一个大概了解，其实可以把它和memcache对比一下，他们都支持比较高的并发，他用的是linux原生的epoll. 而memcache是用的libevent库，在linux下也是用的epoll。这种异步事件处理机制可以说是专为高并发而生。 &lt;/p&gt;&#xD;
&lt;p&gt;不同的是memcache的实现上，每一个线程有一个自己的处理队列，而TT中是总的用一个队列，其实大家可以想像，肯定TT在处理上就会不如MC 了。那是当然的，MC是存内存，所以他后面的线程们可以工作得很快，如果上面这样设计，那么如果队列同样长，就会导致经常空队列的情况，但是太长可能又会占用太多资源，而且线程间的同步调度又会需要浪费更多的时间在上面。总的来说是瓶颈不同，memcache基本不存在读写上的瓶颈，所以可以做成多队列的。这是我个人的一点理解。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4.1.3. 启动流程&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;好，言归正传。我们的TT这样设计是没有问题的。上面已经论述。那么他具体的实现是如何的呢，下面我先做一个简单的介绍，以后再对各部分进行深入分析。整个运行流程的开始是在TT/ttutil.c文件的ttservstart函数开始的，他首先创建了主socket用于接受请求。接下来初始化所有线程并进入ttservdeqtasks函数入口运行。其实这时候已经开始不停地在队列的尾部处理请求了，不过现在没有请求，所以就是在空转。 &lt;/p&gt;&#xD;
&lt;p&gt;然后构造epoll的描述符。 下一步是将上面创建的主socket放到epoll的侦听列表中，开始进入大循环进行整个接收请求工作。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4.1.4. 请求处理&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当一个请求来到，epoll通知进行通知，如果是对主socket的连接请求，那么主线程会创建一个新的socket然后将它一起放到epoll的侦听列表中。如果这个请求是对派生socket的请求，那么这个派生的socket会被包装起来，放进我们上面那个队列中，这个过程是通过tclistpush完成的。 其实这已经是一个完整的流程了，子线程的处理是同步的在创建线程的时候进行的。现在我们回头来说一下。当我们的队列有了数据，也就是有了具体的请求之后。我们的从线程们就可以读过来处理，当然，一个线程一次拿走一个进行处理。这个过程在代码中是怎么样的呢？我们知道从线程的入口是ttservdeqtasks。在这个函数中，也有一个大的循环，这个循环什么作用？当然就是不停地去队列尾上问，有没有任务。没有就再进行循环，有的话就调用tclistshift2函数将这个任务取出来。然后进行处理。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4.1.5. 数据结构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;大体流程就是上面这样的，重要的数据结构有： &lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;TTREQ:其实就是代表每一个线程，多了一些附加数据。 &lt;/li&gt;&#xD;
     &lt;li&gt;TTSERV:我们这个网络服务器就是一个他的实例，包含了一些参数的设置，比如host,port之流。 &lt;/li&gt;&#xD;
     &lt;li&gt;TTSOCK:在具体的线程处理请求中，针对的是一个socket，这个socket就是这个类型。 +++程序流程+++ 下面再说一下整个程序流程。 &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;ol&gt;&#xD;
     &lt;li&gt;先从ttserver.c的main函数开始，接收命令行参数做好了配置就进入同一个文件中的proc函数。进行了一些初始化的工作。 &lt;/li&gt;&#xD;
     &lt;li&gt;然后进入ttutil.c文件的ttservstart开始真正的启动过程，在这个函数中创建socket，启动线程，epoll侦听等等，如上面说的。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;程序就是这么走过来的。大多东西也都是在上面说的两个文件里，有时候你会发现一些函数是tc开头的好像找不到，其实他是在TC的源代码中，还有一些数据结构也是。比如我们上面那个队列元素就是。 @startquote 其它收获：想说一下自己看代码的感想，前段时间我一直在做TT的性能测试工作，测试我很不爽，因为不知道具体的流程，所以很多结果出了也不知道对不对，很多问题出了也不清楚是为什么。终于开始看代码，很爽 。首先是整个代码非常有条理。和我前一两周看的wordpress代码真是风格完全不同，当然读完代码的享受也不同。第二是我总结了我看代码的一个比较好的方法，就是先看大流程，再看整体架构和数据结构。其它细节就很简单了。大流程就是跟着main去看，如果有资料当然更好。整体架构就是从主要数据结构出发看过去，其实你会发现无非就是一些文件操作，网络编程。就是把数据结构倒过去倒过来。其实如果一开始你能知道每个数据结构是做什么的，那程序其实也不用看了。所以说主体数据结构很重要，有的人不喜欢看.h文件，我觉得是很不对的。 @endquote &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5. 数据库存储基础&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里的数据库不是关系型数据库,是key-value数据库.tokyotyrant是在tokyocabinet的基础上开发的.进入tokyocabinet的源码目录,大致结构如下: &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.1. tokyocabinet的源代码结构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;~/download/tokyocabinet-1.4.17@aragorn $ ls -ahl *.c |awk '{print $8}'&lt;br /&gt;&#xD;
md5.c&lt;br /&gt;&#xD;
myconf.c&lt;br /&gt;&#xD;
tcadb.c&lt;br /&gt;&#xD;
tcamgr.c&lt;br /&gt;&#xD;
tcatest.c&lt;br /&gt;&#xD;
tcawmgr.c&lt;br /&gt;&#xD;
tcbdb.c&lt;br /&gt;&#xD;
tcbmgr.c&lt;br /&gt;&#xD;
tcbmttest.c&lt;br /&gt;&#xD;
tcbtest.c&lt;br /&gt;&#xD;
tcfdb.c&lt;br /&gt;&#xD;
tcfmgr.c&lt;br /&gt;&#xD;
tcfmttest.c&lt;br /&gt;&#xD;
tcftest.c&lt;br /&gt;&#xD;
tchdb.c&lt;br /&gt;&#xD;
tchmgr.c&lt;br /&gt;&#xD;
tchmttest.c&lt;br /&gt;&#xD;
tchtest.c&lt;br /&gt;&#xD;
tctdb.c&lt;br /&gt;&#xD;
tctmgr.c&lt;br /&gt;&#xD;
tctmttest.c&lt;br /&gt;&#xD;
tcttest.c&lt;br /&gt;&#xD;
tcucodec.c&lt;br /&gt;&#xD;
tcumttest.c&lt;br /&gt;&#xD;
tcutest.c&lt;br /&gt;&#xD;
tcutil.c&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;其中,tca*.c是抽象出来的数据库的代码，这个的库可以是hashtable,fix-length array database,b+ tree database 中的任何一种。tcb*.c是b+ tree数据库的相关代码,tcf*.c是fix-length array 数据库的相关代码,tch*.c是hashtable型数据库相关代码,tct*.c是table database相关的代码。理解了这些数据存储类型的区别,才能理解后来tokyotyrant的一些参数设置.在下一节就专门讲述这些; tcu*.c是工具类的杂项函数集。基本上所有的数据库类型都有*test和*mttest,*mgr三个二进制程序。比如fix-length-array database有tcftest.c,tcftest.c,tcfmttest.c都有是main函数的。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.2. tokyotyrant的存储类型&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;If the name is &amp;#8220;*&amp;#8221;, the database will be an on-memory hash database. //类似于MC的内存HASH存储 &lt;/li&gt;&#xD;
     &lt;li&gt;If it is &amp;#8220;+&amp;#8221;, the database will be an on-memory tree database. //内存中的B+树存储 &lt;/li&gt;&#xD;
     &lt;li&gt;If its suffix is &amp;#8220;.tch&amp;#8221;, the database will be a hash database. //硬盘上的HASH存储 &lt;/li&gt;&#xD;
     &lt;li&gt;If its suffix is &amp;#8220;.tcb&amp;#8221;, the database will be a B+ tree database. //硬盘上的B+树存储 &lt;/li&gt;&#xD;
     &lt;li&gt;If its suffix is &amp;#8220;.tcf&amp;#8221;, the database will be a fixed-length database. //像数组一样的连续数字对应定长值的存储 &lt;/li&gt;&#xD;
     &lt;li&gt;If its suffix is &amp;#8220;.tct&amp;#8221;, the database will be a table database. //一个key值下面对应很多个name-&amp;gt;value的形式 &lt;/li&gt;&#xD;
     &lt;li&gt;这些资料是从tokyotyrant的文档得到的,跟tokyocabinet中的基本相对应; &lt;/li&gt;&#xD;
     &lt;li&gt;table型(tct)是后来加入的功能,早先的版本并无这个类型. &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.3. tokyotyrant的缓存&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;请大家参照"安装和使用"部分(来源:张宴)，基本也是中文世界的第一篇研究文章，里面讲到用tch表时，如果加上#bnum=***，就可以缓存多少数据在内存中。也就是说TC是一个可以缓存磁盘数据的存储系统，这个缓存可以配置，配置不仅是bnum这一个参数决定，还有rcnum， xmsiz这两个参数，具体意思请看官方和源代码注释。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.4. 异步&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;TC支持异步的写入机制，就是说写入的数据可以不一定刷到磁盘上，可以等到一定条件后再进行同步操作。这个异步的好处当然就是快，坏处当然就是可能在突发情况下丢失一些数据。TC的大部分写入方法都是同步的，而且会在操作过程中进行异步数据的同步磁盘写入。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.5. 索引&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;HASH 方式存储的数据是如何索引的？这个想必看过MC和PHP 的HASH数据实现的人都应该设计得出来，那就是一个大的HASH表，一个key来了，做一下HASH，通过HASH值到大的HASH表中找到具体数据的位置，相同的HASH值再串成一个链，跟着这个链再对比key值就能找到你的数据了。TC的设计大概也是这样，不同的是他的这个位置不是一个指针，也是一个offset值，代表他相对于数据文件首位置的偏移量。然后具体在写入读取的时候，通过这个偏移量去调用pwrite和pread两个系统调用去做写入读取工作。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6. 数据的Hash&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;tokyocabinet的硬盘hash存储方式，又分为在数据文件中的冷存储和在内存中的热存储，冷存储用于保存所有key-value的对应值，热存储是对经常get的数据的一个缓存，达到对频繁使用的数据的快速读取的目的。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1. 冷存储&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这是从讲tokyo系列产品的官方ppt上的截图: &lt;/p&gt;&#xD;
&lt;center&gt;&lt;img src="http://www.162cm.com/p/resources/images/bucket-table.jpg" alt="" align="center" border="0" /&gt;&lt;/center&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1.1. 一级hash索引：bidx&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;冷存储的第一级索引是一个hash表，叫做bucket table，也就是上图第一行表示的，运用过程是通过key值用一个hash算法算出一个bidx值，然后在这个表里查这个bidx对应的key- value值存在哪里，再在文件中查找。这个bucket table的大小，就是由我们跟在数据文件名后面的设置参数bnum设置的。 &lt;/p&gt;&#xD;
&lt;p&gt;当然，一开始的时候这个bucket array是空的。比如当第一个数据来了的时候，他请求存储，比如这时计算到他的index值是1000，那么我们会找一下1000对应的位置，发现是 NULL，那么我们就将这个值存在目前数据存储区的第一个可用位置。然后将这个位置记录到bucket array里。过程确实很简单。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1.2. 二级hash索引：hash&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;但是我们都知道，hash算法是会冲突的，当不同的key值算到了同样的hash，那我们仅用上面的一个bucket array是不能区分的，所以这里又加了第二层hash，其实加几层都是一样，冲突不可避免，最后还是要通过key的比较来判断，所以这个过程一共是三步。 &lt;/p&gt;&#xD;
&lt;p&gt;第一个取到index，得到初始的存储位置。可能这个位置的这条记录的第二个hash值hash2并不与目标的hash2相等，也就是第一个hash冲突了。 &lt;/p&gt;&#xD;
&lt;p&gt;因为第一个hash相等的所有记录都是互相用数据单元的left，right指针（其实就是一个offset值）连接起来的。而且按第二个hash 值的大小按序排列的，所以当我们要存储的数据的第一个hash值index与该bidx指向的第一个数据单元的第二hash值hash2不同的时候，我们就按照大小分别在不同的方向上找到自己的位置然后将数据插入。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1.3. key值对比&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在存储数据时，当已经存在这个key值时，我们可能会选择覆盖，可能会选择保留原值，可能会将新值连接在老数据后面，到底进行哪一个操作，取决于我们调用的是哪个方法。因为所有的存储，包括replace，set等，都是调用一个叫tchdbputimpl的函数来实现数据存储的。 &lt;/p&gt;&#xD;
&lt;p&gt;（数据缓存部分待后续） &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1.4. 存储时的主要逻辑&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
     &lt;li&gt;通过第一个hash值bidx在bucket array中找到对应的bidx的offset值。 &lt;/li&gt;&#xD;
     &lt;li&gt;通过offset值取到一个数据单元。 &lt;/li&gt;&#xD;
     &lt;li&gt;考查这个数据单元的hash值，是否与待处理数据一样。&#xD;
     &lt;ol&gt;&#xD;
         &lt;li&gt;如果一样，那再考查key是否一样。&#xD;
         &lt;ol&gt;&#xD;
             &lt;li&gt;如果key也一样，那么采用覆盖，替换，连接等几种方法来处理， 具体采用哪个方法取决于调用这个函数的一方为函数提供了怎样参数（具体在最后一个参数）。 &lt;/li&gt;&#xD;
         &lt;/ol&gt;&#xD;
         &lt;/li&gt;&#xD;
         &lt;li&gt; 如果不同，那对比这个数据元的hash值与待处理的数据的hash值的大小，如果大于待处理的值，就再对比这个数据单元右边的一个数据，如果小于则向左。如此循环，直到找到合适的位置。 +如果这个位置已经有数据，比较这个数据的key与这个位置的数据元的数据的key的大小。&#xD;
         &lt;ol&gt;&#xD;
             &lt;li&gt;如果一样大，那采用上面的方法，覆盖，替换，连接等几种方法来处理。 &lt;/li&gt;&#xD;
             &lt;li&gt;如果不一样大，那再通过大小的对比采用向左或向右的方法来寻找，直到找到相同的key，或者根本就没有相同的key已经存储了，那就在中间插入一项。 &lt;/li&gt;&#xD;
         &lt;/ol&gt;&#xD;
         &lt;/li&gt;&#xD;
     &lt;/ol&gt;&#xD;
     &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;不知道说清楚没有，其实就是一般的双向有序链表的查找，不同的是他在第一个标识的基础上又有第二第三个。第一个是bidx，第二个是hash，第三个是key。这里hash的算法我没有具体看，但是应该是与key按同样顺序增长的，也就是hash大的，key比较时也大，不然可以想一下，第一次如果找到一个单元，因为hash的大小比较而向左，向左后又因为key而让向右。这个时候可能就会死循环了。 &lt;/p&gt;&#xD;
&lt;p&gt;下面再说一下数据文件的结构，及一部分的缓存数据。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1.5. 数据文件结构&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;数据文件的结构，首先是一个&amp;#8220;ToKyO CaBiNeT&amp;#8221;字串，他占一行，只是起一个前导标识的作用。然后是bucket array的存储，就是一个长度为&amp;#8220;bnum&amp;#8221;（配置参数）的连续存储空间，和内存中的形式一样，后面是我现在还不是很明白的free block pool相关的一些数据，然后是填充空间的一些空白数据。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1.6. 内存映射的一级索引&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其中在第一行的&amp;#8220;ToKyO CaBiNeT&amp;#8221;字串之后，开始进行的内存映射，映射的大小由配置参数xmsiz，与bucket array的大小，与上面说的文件的大小三者有关系，总的结果是会至少包含整个bucket array表。也就是说这个一级索引是存在内存中的。这里如果你配置了过小的xmsiz，也不会有影响。因为他第一步是取xmsiz和bucket array空间之中的大的那个。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1.7. bnum参数&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;总的说来，这里需要注意的是bnum参数。他决定了我们的bucket array的大小，基本上也决定了你数据的冲突情况，平均查找情况，所以这个数字的设定相当重要，在这方面我没有什么经验，看到有推荐为需要存储的记录总数的0.4-4倍。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;5.6.1.8. 预告&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这只是缓存的一部分，是完全存储的一级索引，另一部分是数据的缓存，也就是对常用数据直接可像memcached一样从内存取数据，这个我下面再接着说。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;6. 线程和事件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;tokyotyrant 使用多线程+epoll的基础架构.因此只能在linux或其他支持epoll的系统上运行,不支持windows;由于基于epoll,可以支持高并发,同时由于是多线程,相对多进程来说更省内存; tokyotyrant 在工作时会创建一定数量的工作线程和定时器线程(也可以叫做第三线程),下面将依次介绍; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;6.1. 工作线程&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;6.1.1. 什么是工作线程组&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其实本来想取名字叫第二线程，因为这个作线程组就是由主线程在epoll侦听前创建的那N个线程，这个N是由命令行启动参数设置的。 &lt;/p&gt;&#xD;
&lt;p&gt;这个线程是处理所有请求的，如果说主线程是个推销员，那这类线程就是车间里的工人了。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;6.1.2. 从这里开始&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;线程在ttservstart里被创建，就是那个循环次数为thnum的循环，他创建了reqs这个数组，其实每个数组就是一个工作线程的包装。这个数组的数据类型是TTREQ，下面还是将这个数据结构列一下： &lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;typedef struct _TTREQ { /* type of structure for a server */&lt;br /&gt;&#xD;
pthread_t thid; /* thread ID */&lt;br /&gt;&#xD;
bool alive; /* alive flag */&lt;br /&gt;&#xD;
struct _TTSERV *serv; /* server object */&lt;br /&gt;&#xD;
int epfd; /* polling file descriptor */&lt;br /&gt;&#xD;
double mtime; /* last modified time */&lt;br /&gt;&#xD;
bool keep; /* keep-alive flag */&lt;br /&gt;&#xD;
int idx; /* ordinal index */&lt;br /&gt;&#xD;
} TTREQ;&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
如上所言，他主要就是工作线程的包装。&#xD;
&lt;p&gt;上面线程创建的时候，入口地址是ttservdeqtasks()，同样是在ttutil.c文件中实现。这个函数的作用就是读取工作队列中的工作单元，然后处理这个单元。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;6.1.3. ttservdeqtasks的工作过程&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们还记得，在前面说过主线程接受请求，然后将他压入到队列中，那时用了一个方法名叫tclistpush()，而现在我们的工作线程的任务正好相反，是要从队列的另一头取出请求，这时用的方法是tclistshift2()。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;6.1.3.1. **存取请求**&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里必须得说一个这个队列的结构，这个队列是作为serv数据结构的一个属性存在的，就是那个TCLIST类型的queue指针。 &lt;/p&gt;&#xD;
&lt;p&gt;好，我们看一下TCLIST类型： &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;typedef struct { /* type of structure for an array list */&lt;br /&gt;&#xD;
TCLISTDATUM *array; /* array of data */&lt;br /&gt;&#xD;
int anum; /* number of the elements of the array */&lt;br /&gt;&#xD;
int start; /* start index of used elements */&lt;br /&gt;&#xD;
int num; /* number of used elements */&lt;br /&gt;&#xD;
} TCLIST;&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;第一个叫array的元素确实指向一个数组，其实这个数组就是队列的容器，后面就是队列这种数据结构的起始位置等参数。 &lt;/p&gt;&#xD;
&lt;p&gt;我们上面说的tclistpush()和tclistshift2()两个函数就是对这个数据结构进行操作的。 &lt;/p&gt;&#xD;
&lt;p&gt;而存入和取出的东西，主要就是一个fd，就是epoll接收到连接的时候用accept创建的新的fd。当时接收到联接就将这个fd放入队列，然后工作线程从队列另一头取出它。过程就是这样。取出队列处理，相当于从这个fd读取请求，再将请求的返回写到这个fd中。 &lt;/p&gt;&#xD;
&lt;p&gt;好，我们看tclistshift2()函数之后，取到fd然后再将这个fd与此时处理这个fd的req传给ttservtask()进行处理。到这一步，就相当于是将一个线程与一个具体的请求挂在一起了。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;6.1.3.2. 线程处理请求&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;ttservtask() 的实现也在当前文件中，他的实现极简单，就是调用了serv的do_task函数指针所指函数，此函数指针在前面已经赋值为do_task()函数了，这个函数位于ttserver.c中，和do_slave()是挨在一起的，这两个最核心的函数放在一起。 &lt;/p&gt;&#xD;
&lt;p&gt;他主要是从fd中解析出请求内容，然后调用TC的接口处理，再返回。就是这样。 &lt;/p&gt;&#xD;
&lt;p&gt;但是我们知道TT可是支持MC协议，telnet连接与HTTP的REST功能的，所以呢，这个do_task函数就分成几块来做的了。根据读出来的第一个字节不同，分别调用了不同的方法实现，而所有的方法无非都是调用TC的接口。具体看ttserver.c中的do_task函数中调用的函数的实现。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7. MemcacheDB,Tokyo Tyrant和Redis 性能对比测试&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7.1. 测试环境&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;+++硬件++ 2 Linux boxes in a LAN, 1 server and 1 test client Linux Centos 5.2 64bit Intel(R) Xeon(R) CPU E5410 @ 2.33GHz (L2 cache: 6M), Quad-Core * 2 8G memory SCSI disk (standalone disk, no other access) &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7.1.1. 软件环境&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;db-4.7.25.tar.gz libevent-1.4.11-stable.tar.gz memcached-1.2.8.tar.gz memcachedb-1.2.1-beta.tar.gz redis-0.900_2.tar.gz tokyocabinet-1.4.9.tar.gz tokyotyrant-1.1.9.tar.gz &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7.1.2. 配置&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;Memcachedb 启动参数&#xD;
     &lt;div&gt;&#xD;
     &lt;pre&gt;Test 100 bytes&lt;br /&gt;&#xD;
     ./memcachedb -H /data5/kvtest/bdb/data -d -p 11212 -m 2048 -N -L 8192&lt;br /&gt;&#xD;
     (Update: As mentioned by Steve, the 100-byte-test missed the -N paramter, so I added it and updated the data)&lt;br /&gt;&#xD;
     Test 20k bytes&lt;br /&gt;&#xD;
     ./memcachedb -H /data5/kvtest/mcdb/data -d -p 11212 -b 21000 -N -m 2048&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     &lt;/div&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;Tokyo Tyrant (Tokyo Cabinet) configuration&#xD;
     &lt;div&gt;&#xD;
     &lt;pre&gt;Use default Tokyo Tyrant sbin/ttservctl&lt;br /&gt;&#xD;
     use .tch database, hashtable database&lt;br /&gt;&#xD;
     &lt;br /&gt;&#xD;
     ulimsiz=&amp;#8221;256m&amp;#8221;&lt;br /&gt;&#xD;
     sid=1&lt;br /&gt;&#xD;
     dbname=&amp;#8221;$basedir/casket.tch#bnum=50000000&amp;#8243; # default 1M is not enough!&lt;br /&gt;&#xD;
     maxcon=&amp;#8221;65536&amp;#8243;&lt;br /&gt;&#xD;
     retval=0&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     &lt;/div&gt;&#xD;
     &lt;/li&gt;&#xD;
     &lt;li&gt;Redis configuration&#xD;
     &lt;div&gt;&#xD;
     &lt;pre&gt;timeout 300&lt;br /&gt;&#xD;
     save 900 1&lt;br /&gt;&#xD;
     save 300 10&lt;br /&gt;&#xD;
     save 60 10000&lt;br /&gt;&#xD;
     # no maxmemory settings&lt;br /&gt;&#xD;
     &lt;/pre&gt;&#xD;
     &lt;/div&gt;&#xD;
     &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7.1.3. 测试客户端&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Client in Java, JDK1.6.0, 16 threads Use Memcached client java_memcached-release_2.0.1.jar JRedis client for Redis test, another JDBC-Redis has poor performance. &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7.2. 小数据量测试结果&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Test 1, 1-5,000,000 as key, 100 bytes string value, do set, then get test, all get test has result. Request per second(mean) &lt;/p&gt;&#xD;
&lt;center&gt;&lt;img src="http://www.162cm.com/p/resources/images/key-value-performance-11.png" alt="" align="center" border="0" /&gt;&lt;/center&gt;&#xD;
&lt;table border="1" cellpadding="4"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Store&lt;/td&gt;&#xD;
             &lt;td&gt;Write&lt;/td&gt;&#xD;
             &lt;td&gt;Read&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Memcached&lt;/td&gt;&#xD;
             &lt;td&gt;55,989&lt;/td&gt;&#xD;
             &lt;td&gt;50,974&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;memcachedb&lt;/td&gt;&#xD;
             &lt;td&gt;25,583&lt;/td&gt;&#xD;
             &lt;td&gt;35,260&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Tokyo Tyrant&lt;/td&gt;&#xD;
             &lt;td&gt;42,988&lt;/td&gt;&#xD;
             &lt;td&gt;46,238&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Redis&lt;/td&gt;&#xD;
             &lt;td&gt;85,765&lt;/td&gt;&#xD;
             &lt;td&gt;71,708&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
     &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Server Load Average&lt;/strong&gt; &lt;/p&gt;&#xD;
&lt;table border="1" cellpadding="4"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Store&lt;/td&gt;&#xD;
             &lt;td&gt;Write&lt;/td&gt;&#xD;
             &lt;td&gt;Read&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;memcachedb&lt;/td&gt;&#xD;
             &lt;td&gt;1.80, 1.53, 0.87&lt;/td&gt;&#xD;
             &lt;td&gt;11.17, 1.16, 0.83&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;memcachedb&lt;/td&gt;&#xD;
             &lt;td&gt;11.44, 0.93, 0.64&lt;/td&gt;&#xD;
             &lt;td&gt;4.35, 1.94, 1.05&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Tokyo Tyrant&lt;/td&gt;&#xD;
             &lt;td&gt;3.70, 1.71, 1.14&lt;/td&gt;&#xD;
             &lt;td&gt;2.98, 1.81, 1.26&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Redis&lt;/td&gt;&#xD;
             &lt;td&gt;1.06, 0.32, 0.181&lt;/td&gt;&#xD;
             &lt;td&gt;1.56, 1.00, 0.54&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
     &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7.3. 大数据量测试结果&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Test 2, 1-500,000 as key, 20k bytes string value, do set, then get test, all get test has result. Request per second(mean) (Aug 13 Update: fixed a bug on get() that read non-exist key) &lt;/p&gt;&#xD;
&lt;center&gt;&lt;img src="http://www.162cm.com/p/resources/images/key-value-performance-21.png" alt="" align="center" border="0" /&gt;&lt;/center&gt;&#xD;
&lt;table border="1" cellpadding="4"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Store&lt;/td&gt;&#xD;
             &lt;td&gt;Write&lt;/td&gt;&#xD;
             &lt;td&gt;Read&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;memcachedb&lt;/td&gt;&#xD;
             &lt;td&gt;357&lt;/td&gt;&#xD;
             &lt;td&gt;327&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Tokyo Tyrant&lt;/td&gt;&#xD;
             &lt;td&gt;3,501&lt;/td&gt;&#xD;
             &lt;td&gt;257&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;Redis&lt;/td&gt;&#xD;
             &lt;td&gt;1,542&lt;/td&gt;&#xD;
             &lt;td&gt;957&lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
     &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7.4. Some notes about the test&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;When test Redis server, the memory goes up steadily, consumed all 8G and then use swap(and write speed slow down), after all memory and swap space is used, the client will get exceptions. So use Redis in a productive environment should limit to a small data size. It is another cache solution rather than a persistent storage. So compare Redis together with MemcacheDB/TC may not fair because Redis actually does not save data to disk during the test. &lt;/p&gt;&#xD;
&lt;p&gt;Tokyo cabinet and memcachedb are very stable during heavy load, use very little memory in set test and less than physical memory in get test. &lt;/p&gt;&#xD;
&lt;p&gt;MemcacheDB peformance is poor for write large data size(20k). &lt;/p&gt;&#xD;
&lt;p&gt;The call response time was not monitored in this test. &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;8. Tokyo Tyrant 的问题和Bug&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;8.1. Bug report&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;请将Bug 汇报给 hirarin#gmail.com (您应当知道如何发邮件的); &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;8.2. tokyotyrant大规模出错的问题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
     &lt;li&gt; 错误描述在进行大量数据缺口插入时，eg.连接插入100W条1000字长的数据。key为0-999999的简单字串。在中途出现插入失败，并且后续插入全部失败的情况，比如在40多万之前插入成功，后面全部失败。 &lt;/li&gt;&#xD;
     &lt;li&gt;原因 MC的php客户端设置有超时机制，如果服务器端处理时间过长，则从客户端主动关闭此TCP连接，当然连接关闭了，后面的操作也就全部失败了。 &lt;/li&gt;&#xD;
     &lt;li&gt;解决方法 设置connect函数的第三个参数timeout为一个比较大的数字。 &lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;8.3. Bugs&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我猜这是一个小小的bug: &lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;file ttserver.c ,line 524:&lt;br /&gt;&#xD;
if(mhost){&lt;br /&gt;&#xD;
ttservlog(g_serv, TTLOGINFO,&lt;br /&gt;&#xD;
"warning: replication is omitted because the SID is not&lt;br /&gt;&#xD;
specified");&lt;br /&gt;&#xD;
mhost = NULL;&lt;br /&gt;&#xD;
}&lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
我认为应该是:&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;if(mhost){&lt;br /&gt;&#xD;
ttservlog(g_serv, TTLOGINFO,&lt;br /&gt;&#xD;
"warning: replication is omitted because the mhost is&lt;br /&gt;&#xD;
not specified");&lt;br /&gt;&#xD;
mhost = NULL;&lt;br /&gt;&#xD;
} &lt;br /&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9. 延伸阅读:key-value-pair database的比较&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.1. 满足极高读写性能需求的Kye-Value数据库：Redis，Tokyo Cabinet， Flare&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.1.1. Redis&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Redis 是一个很新的项目，刚刚发布了1.0版本。Redis本质上是一个Key-Value类型的内存数据库，很像memcached，整个数据库统统加载在内存当中进行操作，定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作，Redis的性能非常出色，每秒可以处理超过10万次读写操作，是我知道的性能最快的Key-Value DB。 &lt;/p&gt;&#xD;
&lt;p&gt;Redis的出色之处不仅仅是性能，Redis最大的魅力是支持保存List链表和Set集合的数据结构，而且还支持对List进行各种操作，例如从 List两端push和pop数据，取List区间，排序等等，对Set支持各种集合的并集交集操作，此外单个value的最大限制是1GB，不像 memcached只能保存1MB的数据，因此Redis可以用来实现很多有用的功能，比方说用他的List来做FIFO双向链表，实现一个轻量级的高性能消息队列服务，用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间，因此也可以被当作一个功能加强版的memcached来用。 &lt;/p&gt;&#xD;
&lt;p&gt;Redis的主要缺点是数据库容量受到物理内存的限制，不能用作海量数据的高性能读写，并且它没有原生的可扩展机制，不具有scale（可扩展）能力，要依赖客户端来实现分布式读写，因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。目前使用Redis的网站有 github，Engine Yard。 &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.1.2. Tokyo Cabinet和Tokoy Tyrant&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;TC和TT的开发者是日本人Mikio Hirabayashi，主要被用在日本最大的SNS网站mixi.jp上，TC发展的时间最早，现在已经是一个非常成熟的项目，也是Kye-Value 数据库领域最大的热点，现在被广泛的应用在很多很多网站上。TC是一个高性能的存储引擎，而TT提供了多线程高并发服务器，性能也非常出色，每秒可以处理 4-5万次读写操作。 &lt;/p&gt;&#xD;
&lt;p&gt;TC除了支持Key-Value存储之外，还支持保存Hashtable数据类型，因此很像一个简单的数据库表，并且还支持基于column的条件查询，分页查询和排序功能，基本上相当于支持单表的基础查询功能了，所以可以简单的替代关系数据库的很多操作，这也是TC受到大家欢迎的主要原因之一，有一个 Ruby的项目miyazakiresistance将TT的hashtable的操作封装成和ActiveRecord一样的操作，用起来非常爽。 &lt;/p&gt;&#xD;
&lt;p&gt;TC/TT在mixi的实际应用当中，存储了2000万条以上的数据，同时支撑了上万个并发连接，是一个久经考验的项目。TC在保证了极高的并发读写性能的同时，具有可靠的数据持久化机制，同时还支持类似关系数据库表结构的hashtable以及简单的条件，分页和排序操作，是一个很棒的NoSQL数据库。 &lt;/p&gt;&#xD;
&lt;p&gt;TC的主要缺点是在数据量达到上亿级别以后，并发写数据性能会大幅度下降，NoSQL: If Only It Was That Easy提到，他们发现在TC里面插入1.6亿条2-20KB数据的时候，写入性能开始急剧下降。看来是当数据量上亿条的时候，TC性能开始大幅度下降，从TC作者自己提供的mixi数据来看，至少上千万条数据量的时候还没有遇到这么明显的写入性能瓶颈。 &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.1.3. Flare&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;TC是日本第一大SNS网站mixi开发的，而Flare是日本第二大SNS网站green.jp开发的，有意思吧。Flare简单的说就是给TC添加了 scale功能。他替换掉了TT部分，自己另外给TC写了网络服务器，Flare的主要特点就是支持scale能力，他在网络服务端之前添加了一个 node server，来管理后端的多个服务器节点，因此可以动态添加数据库服务节点，删除服务器节点，也支持failover。如果你的使用场景必须要让TC可以scale，那么可以考虑flare。 &lt;/p&gt;&#xD;
&lt;p&gt;flare唯一的缺点就是他只支持memcached协议，因此当你使用flare的时候，就不能使用TC的table数据结构了，只能使用TC的key-value数据结构存储。 &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.2. 满足海量存储需求和访问的面向文档的数据库：MongoDB，CouchDB&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;面向文档的非关系数据库主要解决的问题不是高性能的并发读写，而是保证海量数据存储的同时，具有良好的查询性能。MongoDB是用C++开发的，而CouchDB则是Erlang开发的. &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.2.1. MongoDB&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;MongoDB是一个介于关系数据库和非关系数据库之间的产品，是非关系数据库当中功能最丰富，最像关系数据库的。他支持的数据结构非常松散，是类似 json的bjson格式，因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大，其语法有点类似于面向对象的查询语言，几乎可以实现类似关系数据库单表查询的绝大部分功能，而且还支持对数据建立索引。 &lt;/p&gt;&#xD;
&lt;p&gt;Mongo主要解决的是海量数据的访问效率问题，根据官方的文档，当数据量达到50GB以上的时候，Mongo的数据库访问速度是MySQL的10倍以上。Mongo的并发读写效率不是特别出色，根据官方提供的性能测试表明，大约每秒可以处理0.5万－1.5次读写请求。对于Mongo的并发读写性能，我（robbin）也打算有空的时候好好测试一下。 &lt;/p&gt;&#xD;
&lt;p&gt;因为Mongo主要是支持海量数据存储的，所以Mongo还自带了一个出色的分布式文件系统GridFS，可以支持海量的数据存储，但我也看到有些评论认为GridFS性能不佳，这一点还是有待亲自做点测试来验证了。 &lt;/p&gt;&#xD;
&lt;p&gt;最后由于Mongo可以支持复杂的数据结构，而且带有强大的数据查询功能，因此非常受到欢迎，很多项目都考虑用MongoDB来替代MySQL来实现不是特别复杂的Web应用，比方说why we migrated from MySQL to MongoDB就是一个真实的从MySQL迁移到MongoDB的案例，由于数据量实在太大，所以迁移到了Mongo上面，数据查询的速度得到了非常显著的提升。 &lt;/p&gt;&#xD;
&lt;p&gt;MongoDB也有一个ruby的项目MongoMapper，是模仿Merb的DataMapper编写的MongoDB的接口，使用起来非常简单，几乎和DataMapper一模一样，功能非常强大易用。 &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.2.2. CouchDB&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;CouchDB现在是一个非常有名气的项目，似乎不用多介绍了。但是我却对CouchDB没有什么兴趣，主要是因为CouchDB仅仅提供了基于HTTP REST的接口，因此CouchDB单纯从并发读写性能来说，是非常糟糕的，这让我立刻抛弃了对CouchDB的兴趣。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt; 这里一米六二插一句话:本人觉得,CounchDB这个玩意儿,光顾着加时尚元素，忘记自己是干什么的了;json又怎么样,erlang写的又怎么样? 建议玩玩,千万别真用它.... &lt;/span&gt; &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.3. 满足高可扩展性和可用性的面向分布式计算的数据库：Cassandra，Voldemort&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;面向scale能力的数据库其实主要解决的问题领域和上述两类数据库还不太一样，它首先必须是一个分布式的数据库系统，由分布在不同节点上面的数据库共同构成一个数据库服务系统，并且根据这种分布式架构来提供online的，具有弹性的可扩展能力，例如可以不停机的添加更多数据节点，删除数据节点等等。因此像Cassandra常常被看成是一个开源版本的Google BigTable的替代品。Cassandra和Voldemort都是用Java开发的： &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.3.1. Cassandra&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Cassandra项目是Facebook在2008年开源出来的，随后Facebook自己使用Cassandra的另外一个不开源的分支，而开源出来的Cassandra主要被Amazon的Dynamite团队来维护，并且Cassandra被认为是Dynamite2.0版本。目前除了 Facebook之外，twitter和digg.com都在使用Cassandra。 &lt;/p&gt;&#xD;
&lt;p&gt;Cassandra 的主要特点就是它不是一个数据库，而是由一堆数据库节点共同构成的一个分布式网络服务，对Cassandra的一个写操作，会被复制到其他节点上去，对Cassandra的读操作，也会被路由到某个节点上面去读取。对于一个Cassandra群集来说，扩展性能是比较简单的事情，只管在群集里面添加节点就可以了。我看到有文章说Facebook的Cassandra群集有超过100台服务器构成的数据库群集。 &lt;/p&gt;&#xD;
&lt;p&gt;Cassandra也支持比较丰富的数据结构和功能强大的查询语言，和MongoDB比较类似，查询功能比MongoDB稍弱一些，twitter的平台架构部门领导Evan Weaver写了一篇文章介绍Cassandra：&lt;a target="_blank" href="http://blog.evanweaver.com/articles/2009/07/06/up-and-running-%20with-cassandra/"&gt;http://blog.evanweaver.com/articles/2009/07/06/up- and-running-with-cassandra/&lt;/a&gt;，有非常详细的介绍。 &lt;/p&gt;&#xD;
&lt;p&gt;Cassandra以单个节点来衡量，其节点的并发读写性能不是特别好，有文章说评测下来Cassandra每秒大约不到1万次读写请求，我也看到一些对这个问题进行质疑的评论，但是评价Cassandra单个节点的性能是没有意义的，真实的分布式数据库访问系统必然是n多个节点构成的系统，其并发性能取决于整个系统的节点数量，路由效率，而不仅仅是单节点的并发负载能力。 &lt;/p&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9.3.2. Voldemort&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Voldemort是个和Cassandra类似的面向解决scale问题的分布式数据库系统，Cassandra来自于Facebook这个SNS网站，而Voldemort则来自于Linkedin这个SNS网站。说起来SNS网站为我们贡献了n多的NoSQL数据库，例如 Cassandar，Voldemort，Tokyo Cabinet，Flare等等。Voldemort的资料不是很多，因此我没有特别仔细去钻研，Voldemort官方给出Voldemort的并发读写性能也很不错，每秒超过了1.5万次读写。 &lt;/p&gt;&lt;img src="http://www.cnblogs.com/hyddd/aggbug/1709258.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hyddd/archive/2010/04/10/1709258.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2010/04/08/1706865.html</id><title type="text">【转】vim快捷键</title><summary type="text">转自：http://www.ya21.com/index.php/suptools/vim/107-t-tools-vim/184-vim- vim是一个多模式的编辑器。就目前来看，主要有以下几个主要模式。 　　1.通常模式(n) 在其它任何一个模式下,用ESC或者 ctrl+c 键可以退到通常模式。　　2.插入模式(i)  在这个模式下,vim像一个常见的编辑器.在通常模式下,用i或者a可以进行...</summary><published>2010-04-07T17:30:00Z</published><updated>2010-04-07T17:30:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2010/04/08/1706865.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2010/04/08/1706865.html"/><content type="html">&lt;div id="blog_text"&gt;转自：http://www.ya21.com/index.php/suptools/vim/107-t-tools-vim/184-vim-&lt;br /&gt; &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;vim是一个多模式的编辑器。就目前来看，主要有以下几个主要模式。&lt;br /&gt; &lt;/span&gt;　　&lt;span style="font-size: 12pt;"&gt;1.通常模式(n) 在其它任何一个模式下,用ESC或者 ctrl+c 键可以退到通常模式。&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 12pt;"&gt;2.插入模式(i)  在这个模式下,vim像一个常见的编辑器.在通常模式下,用i或者a可以进行本模式,当然,还有一些其它命令也可以。&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 12pt;"&gt;3.可视模式(v)  在这个模式下,可以使用hjkl进行选择.然后进行copy,paste或者其它操作. 在通常模式下,用v命令进行可视模式。&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 12pt;"&gt;4.  块操作模式(V) 这是块操作模式. 在通常模式下,用ctrl+v进入本模式。&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 12pt;"&gt;5. 修改模式(R)  这是改写的模式.很多软件法用insert键来完成这个切换.在vim中,从通常模式用R即可进入改写模式。&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 12pt;"&gt;6. 扩展命令模式(ex)  这是命令执行模式 在通常模式下用:切换到此模式。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;输入模式&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;table border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+d&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向前缩进&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+t&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向后缩进&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+f&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;首行缩进&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+a&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;全选&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+x&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;剪切&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+c&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;复制&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+z&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;撤销&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+v&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;粘贴&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+o &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;切换到通常模式(只执行单个命令后返回输入模式)&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+w&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;或&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+u&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;删除光标到行首得字符&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+i&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;当前光标插入空格&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+m &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;或&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt; Ctrl+j&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;换行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+Pgup&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;上个标签&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+PgDn&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;下个标签&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Alt+PgUp&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向上翻页&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Alt+PgDn&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向下翻页&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;F3&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;打开过的文件补全&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Shift+F3&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;当前目录下文件补全窗口&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;F9&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;插入当前日期&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+l&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;程序关键字补全&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+X   Ctrl+O&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;程序关键字补全&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+X   Ctrl+F&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;文件路径补全&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+X   Ctrl+P&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;文件中出现的关键字补全&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+\&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;拼音输入法补全&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Alt+\&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;代码模板补全&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;             &lt;br /&gt;&lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;/p&gt;             &lt;br /&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;通常模式&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;table border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;G&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳最后一行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;gg&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳到第一行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;dd&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;删除当前行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;yy &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;复制当前行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;;p&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;粘贴当前行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;k&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;光标向上移动&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;j&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;光标向下移动&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;h&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;光标向左移动&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;l&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;光标向右移动&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;ctrl+f&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向下翻页&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;ctrl+b&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向上翻页&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;ctrl+d&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向下半翻页&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;ctrl+u&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向上半翻页&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;ctrl+a&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;数字加1&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;ctrl+x&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;数字减1&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;$&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;移动行尾&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;0&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;移动行首&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;w&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;移动下一个词&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;b&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;移动到上一个词&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;v&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;转到可视模式&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;23gg&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳到第23行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;23G&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳到第23行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;dib&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;删除内含 '(' ')' 块&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;diB&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;删除内含 '{' '}' 大块&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;ggVG&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;全选&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;gg=G&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;自动缩进&lt;/span&gt;&lt;/p&gt;             &lt;p&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Fa&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳到光标所在行的位置的前面的a处&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;qa&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;记录宏a&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;F10&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;打开文件Tree&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;F1&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;打开帮助&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;F2&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;打开编码选择窗口&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;F3&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;变量和方法查看窗口&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;F11&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;全屏模式切换&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;a&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;进入输入模式(追加)&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;i&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;进入输入模式(插入)&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;*&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;高亮当前选择单词&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;$&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳到行末&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;%&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳到匹配的括号处（"{   }""[]""()"）&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;b&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳到行开始处&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;e&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;跳到行结束处&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;f&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;还原窗体&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;ff&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;最大化&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;n&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;下一个高亮的关键字&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;shift+n&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;上一个高亮的关键字&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;/&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;进行高亮关键字输入&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;/p&gt;             &lt;br /&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;扩展命令模式&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;table border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;:5,56s/aa/bb/g&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;从第5行到56行替换aa为bb&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;: 5,%s/aa/bb/g&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;从第5行到最后一行替换aa为bb&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;:%s/aa/bb/&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;替换全部aa为bb&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;:tabe &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;新建窗口标签&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;:g/^$/d&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;删除空行&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;:%s/^M//g &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;或&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt; :%s/\r//g&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;每一行都会多出一个^M&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;可视模式&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;table border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;SHIFT+&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向后缩进&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;SHIFT+&amp;lt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;向前缩进&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;i"&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;选择内含双引号块&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;i{&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;选择内含大括号块&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;iw&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;选择单词&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;Ctrl+q&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;选择快&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 12pt;"&gt;r&amp;#8221;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;span style="font-size: 12pt;"&gt;将选择的替换为双引号&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="142"&gt;             &lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;             &lt;br /&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/hyddd/aggbug/1706865.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hyddd/archive/2010/04/08/1706865.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2010/04/08/1706863.html</id><title type="text">【转】高效使用vim</title><summary type="text">英文出处：jmcpherson.org/editing.html 翻译引用：tingsaode.spaces.live.com/blog/cns!FE95D0EE01558610!780.entry 原文地址：http://hi.baidu.com/gone1210/blog/item/41c0e60b000230c33ac76328.html  之于我, vi即禅. 用vi如修禅, vi命令如禅...</summary><published>2010-04-07T17:24:00Z</published><updated>2010-04-07T17:24:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2010/04/08/1706863.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2010/04/08/1706863.html"/><content type="html">英文出处：&lt;a href="http://jmcpherson.org/editing.html" target="_blank"&gt;jmcpherson.org/editing.html&lt;/a&gt;&lt;br /&gt;&lt;div id="blog_text"&gt; 翻译引用：&lt;a href="http://tingsaode.spaces.live.com/blog/cns%21FE95D0EE01558610%21780.entry?wa=wsignin1.0&amp;amp;sa=305465865" target="_blank"&gt;tingsaode.spaces.live.com/blog/cns!FE95D0EE01558610!780.entry&lt;/a&gt;&lt;br /&gt; 原文地址：&lt;a target="_blank" href="http://hi.baidu.com/gone1210/blog/item/41c0e60b000230c33ac76328.html"&gt;http://hi.baidu.com/gone1210/blog/item/41c0e60b000230c33ac76328.html&lt;/a&gt;&lt;br /&gt; &lt;strong style="background-color: #6aa84f;"&gt;&lt;span&gt; &lt;p&gt;&lt;span style="color: red; font-size: 14pt;"&gt;之于我, vi即禅.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: 14pt;"&gt; 用vi如修禅,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: 14pt;"&gt; vi命令如禅之心印.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: 14pt;"&gt; 用者不可窥其堂奥,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: 14pt;"&gt; 门外汉视其晦涩如天书.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: 14pt;"&gt; 常用之, 实可知其道.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: 14pt;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/p&gt; &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="background-color: #6aa84f;"&gt; &lt;p&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt;高效移动&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt; 珍爱生命, 远离插入模式 &lt;/span&gt;&lt;/p&gt; &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span&gt; &lt;p&gt;一般情况下, 你应该尽量少把时间花在插入模式, 因为在这种模式下vi和其它sb编辑器区别不大. 这也是大部分vim新手把大部分时间花在插入模式的原因 -- 插入模式很易用. 但是vim真正的优势在命令模式. 你会发现越了解vim, 你花在插入模式的时间越少. &lt;/p&gt; &lt;p&gt;&lt;span style="color: #808080; font-size: 12pt;"&gt;使用h,j,k, l &lt;/span&gt;&lt;/p&gt; &lt;p&gt;高效率用vim编辑的第一步是绝了你用方向键(上下左右)的念头. vim设计出"模式"操作方式的一大优势就是可以让你不需要老是把手从方向键和字母键之间移来移去. 当你在命令模式下, 用字母h, j, k, l对应方向左, 下, 上, 右. 这个需要练习一下才能习惯, 但是你会发现一旦你习惯了它们, 比用方向键快多了. (译注: 这几个移动键一定要动手试, 然后反复用, 靠记忆忒艰难了) &lt;/p&gt; &lt;p&gt;在你编辑电子邮件或其他段落式文本的时候, 你可能注意到移动方向跳的行数比你料想的多. 这是因为你的段落对vim来说在很长的同一个行里. 用h, j, k, l移动前输入g可以让移动相对于屏幕看上去的行数而不是vim内部的行数. &lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 12pt; color: #808080;"&gt;用m&lt;/span&gt;&lt;span style="font-size: 12pt; color: #808080;"&gt;otio&lt;/span&gt;&lt;span style="font-size: 12pt; color: #808080;"&gt;n&lt;/span&gt;&lt;span style="font-size: 12pt; color: #808080;"&gt;在当前行移动 &lt;/span&gt;&lt;br style="color: #999999;" /&gt; &lt;/p&gt; &lt;p&gt;&lt;span style="color: #808080;"&gt;(译注: 没想到特别合适的词翻译motion, 可以理解为"高级移动", 另请注意, motion仅在当前行移动) &lt;/span&gt;&lt;/p&gt; &lt;p&gt;大部分编辑器只有简单的光标移动功能(上下左右, 行首行尾等等). vim有非常高级的光标移动命令, 这些命令叫做Motion. 当用motion把光标从文本中的一个点移动到另一个点的时候, 两点间的文本(包括两个点本身)被motion"掠过". (这个概念在接下来的教程中非常重要.) (译注: 举例说明一下"掠过"概念, 比如你有一行文本, 内容是abcdefg, 当前光标在c上, 如果你用motion $, 光标移动到了g上, 那么从c到g这段文本就被motion $"掠过"了). &lt;/p&gt; &lt;p&gt;&lt;span style="color: #808080;"&gt;以&lt;/span&gt;&lt;span style="color: #808080;"&gt;下是一些有用的motion: &lt;/span&gt;&lt;/p&gt; &lt;table width="593" border="1" cellpadding="0" cellspacing="0" height="257"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;fx&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;在当前行向前移动光标到下一个字符x (很明显, x可以是任意你想要移动到的字符). 这是一个超级有用的命令. 你可以输入;来重复前一个f命令.&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;tx&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;和上面的命令基本相同, 除了移动光标到字符x之前而不是x字符本身. (这个真的很有用)&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;Fx&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;在当前行向后移动光标到上一个字符x.&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;w&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;将光标向前移动一个词.&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;b&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;将光标向后移动一个词.&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;0&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到当前行首.&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;^ &lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到当前行的第一个字符. (译注: 第一个字符可能不是行首, 比如行首有space, tab等不可见符号, 0会把光标停在这些符号之前, 而^会把光jk标停在这些符号之后的第一个可见字符.)&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;$ &lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到当前行尾.&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;) &lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到下一个句子. (写电子邮件或者文本文档的时候很有用.)&lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="33"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;( &lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="560"&gt;             &lt;p&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到上一个句子. &lt;/span&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;span style="font-size: 14pt; color: #ff6600;"&gt;在文件中高效移动 &lt;/span&gt;&lt;/p&gt; &lt;p&gt;vim有很多命令可以让你在文件中任意移动光标 -- 很少需要手工一页一页滚动. 以下按键技术上说不算motion, 因为它们是在文件中移动, 而不是在某一特定的行. &lt;/p&gt; &lt;table width="595" border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;&amp;lt;C-F&amp;gt;&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;将光标向前(下)移动一页(屏幕).&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;&amp;lt;C-B&amp;gt;&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;将光标向后(上)移动一页.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;G&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;移动到文件尾&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;numG&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到某一行. (例如, 10G是把光标移动到第10行.)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;gg&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到文件开头&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;H&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到当前页的第一行.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;M&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到当前页的中间一行.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;L&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;将光标移动到当前页的最后一行. (译注: 有了HML3个命令, 可以把鼠标撇了, 爽)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;*&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;读取光标下的字串, 然后移动到当前文件中下一次出现该字串的位置. (比如说如果你的光标所在的位置的字串为"bob,", 按了*之后, 光标将移动文件中下一个"bob"出现的位置.)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;#&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;和*命令基本相同, 除了它移动到上一次出现字串的位置.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;/&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;text &lt;/em&gt;&lt;span style="color: #ff6600;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp; &lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;从当前光标位置开始, 查找下一个含有text的字串并且移动到那里. 需要按回车(Enter)键来执行查找. 如果要重复执行查找, 输入n(n代表next occurance). (译注: text指你想搜索的字串, 比如你要在文件查找字串"abc", 就输入/abc然后回车)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;?&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;text&lt;/em&gt;&lt;span style="color: #ff6600;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;和/text相似, 区别是?text进行反向查找(查找上一个字串).&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;ma&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;给当前光标所在位置设置一个名字为a的书签. 书签的名字可以是任何小写字母. 你看不到书签, 但它确实在.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;`a&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;移动光标到书签a. 注意`不是单引号, 大部分键盘上它在数字1的左面. (译注: 本人使用的vim 7.1 windows版本用单引号也能完成同样功能)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="52"&gt;&lt;span style="color: #ff6600;"&gt;`.&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="541"&gt;&lt;span style="color: #ff6600;"&gt;移动到你之前编辑过的行. 这个又是"真有用". 如果你需要在文件中"滚来滚去"查看一些东西, 你可以用这个命令回到你之前编辑的行尽管你没把它设成书签. &lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt;高效输入&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt; 使用关键字自动完成(补全) &lt;/span&gt;&lt;/p&gt; &lt;p&gt;vim 有个非常好的关键字自动完成系统. 就是说你可以只输入很长的词的一部分, 按一个键, vim帮你把这个词自动补全. 比如说在你的代码中有一个变量叫iAmALongAndAwkwardVarName, 你可能不愿意每次用这个变量都把整个词打一遍, 这时候就可以用自动完成功能. &lt;/p&gt; &lt;p&gt;要使用关键字自动完成, 只要输入一个字串的前几个字母 (比如 iAmAL) 然后按 &amp;lt;C-N&amp;gt; (按住Ctrl然后按N&amp;gt;)或者&amp;lt;C-P&amp;gt;. 如果vim没有选择你需要的字串, 继续按&amp;lt;C-N&amp;gt;或&amp;lt;C-P&amp;gt; -- vim会遍历所有和你输入的前几个字母匹配的字串. &lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 14pt; color: #ff6600;"&gt;用点脑子开始插入模式 &lt;/span&gt;&lt;/p&gt; &lt;p&gt;大部分新用户输入i来进入插入模式. 这种方法有时候相当低效, vi有一堆可以高效进入插入模式的命令. 这里是最常用的一些: &lt;/p&gt; &lt;table width="596" border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="77"&gt;&lt;span style="color: #ff6600;"&gt;i &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;在当前字符的左侧开始插入.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="77"&gt;&lt;span style="color: #ff6600;"&gt;I &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;在当前行行首开始插入.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="77"&gt;&lt;span style="color: #ff6600;"&gt;a&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;在当前字符的右侧开始插入.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="77"&gt;&lt;span style="color: #ff6600;"&gt;A &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;在当前行行尾开始插入.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="77"&gt;&lt;span style="color: #ff6600;"&gt;o&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;在当前行的下一行开始新的一行并在那插入. (译注, 写code用这个很爽)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="77"&gt;&lt;span style="color: #ff6600;"&gt;O&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;在当前行的上一行开始新的一行并在那插入.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="77"&gt;&lt;span style="color: #ff6600;"&gt;c&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;{motion}&lt;/em&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;删除(change)motion"掠过"的文本然后插入新文本代替它. 比如说, c$会删除当前光标位置到当前行尾的文本并开始插入模式. ct!会删除当前光标位置到下一个!出现位置(不包括!本身)之间的文本并进入插入模式. 删除的文本会被复制到剪切板可以被粘贴使用. (译注: 可以到前面复习一下"掠过"的概念, 参考例子. 输入c{motion}命令的时候, 不需要输入花括号)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="77"&gt;&lt;span style="color: #ff6600;"&gt;d&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;{motion}&lt;/em&gt;&lt;span style="color: #ff6600;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;删除motion"掠过"的文本 -- 和c{motion}相似, 但是不进入插入模式.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt;高效移动成块的的文本&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt; 用可视化选择, 用合适的选中模式 &lt;/span&gt;&lt;/p&gt; &lt;p&gt;和最早的vi不同, vim可以让你把文本置为高亮然后对高亮的文本操作. 以下是主要的3个可视化选中模式 (即文本高亮模式). &lt;/p&gt; &lt;table width="596" border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="51"&gt;&lt;span style="color: #ff6600;"&gt;v&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="545"&gt;&lt;span style="color: #ff6600;"&gt;字符选中模式. 大部分人习惯用这个, 所以玩其他模式之前先把这个练熟.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="51"&gt;&lt;span style="color: #ff6600;"&gt;V&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="545"&gt;&lt;span style="color: #ff6600;"&gt;行选中模式. 选中整行. 当你需要复制或移动几行的时候, 这个比字符选中模式要好.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="51"&gt;&lt;span style="color: #ff6600;"&gt;&amp;lt;C-V&amp;gt;&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="545"&gt;&lt;span style="color: #ff6600;"&gt;块选中模式. 超级nb而且很少有其他的编辑器支持(译注: 还是有一些支持的, 比如ultraedit, 但是得付钱...). 你可以在任何文本中选择一个矩形块来操作. (译注: 在windows版本的vim中&amp;lt;C-V&amp;gt;默认被映射为粘贴, 可以通过更改键盘映射或者使用&amp;lt;C-Q&amp;gt;来进行块操作)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;所有常用的光标移动键都可以在可视模式使用, 比如vwww会进入字符选中模式并且选中光标之后的3个词. Vjj将会进入行选中模式并且选中当前行及之后的两行. &lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 14pt; color: #ff6600;"&gt;在可视化选中模式下进行剪切和复制 &lt;/span&gt;&lt;/p&gt; &lt;p&gt;一旦你有了高亮选择, 你可能想要干点啥. 以下是对选中的高亮文本最有用的命令:&lt;/p&gt; &lt;table width="596" border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="24"&gt;&lt;span style="color: #ff6600;"&gt;d&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="572"&gt;&lt;span style="color: #ff6600;"&gt;剪切(删除)高亮选中的文本到剪切板. (译注: 据本人所知, vim所有的删除其实都是剪切)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="24"&gt;&lt;span style="color: #ff6600;"&gt;y&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="572"&gt;&lt;span style="color: #ff6600;"&gt;复制 (或者说"拽"(yank), vim用"拽"来表示复制...)高亮选中的文本到剪切板.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="24"&gt;&lt;span style="color: #ff6600;"&gt;c &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="572"&gt;&lt;span style="color: #ff6600;"&gt;剪切高亮选中的文本到剪切板. 和d很相似, 只是c会进入插入模式.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt;在非可视化选择模式进行剪切和复制&lt;/span&gt;&lt;br style="font-size: 14pt;" /&gt;　　 如果你确知你想要复制或者剪切什么, 你可以不进入可视化选择模式就完成这些操作. 这样速度更快.&lt;/p&gt; &lt;table width="596" border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;d&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;{motion}&lt;/em&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;把由motion"掠过"的文本剪切到剪切板. 比如dw把当前光标开始的一个词剪切到剪切板, 而dfS把从当前行从光标是到下一个S之间的文本剪&lt;/span&gt;&lt;span style="color: #ff6600;"&gt;切到剪切板.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;y&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;{motion}&lt;/em&gt;&lt;span style="color: #ff6600;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;把motion"掠过"的文本复制到剪切板.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;c&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;{motion}&lt;/em&gt;&lt;span style="color: #ff6600;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;把motion"掠过"的文本剪切到剪切板并且进入插入模式.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;dd&amp;nbsp; &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;剪切当前行到剪切板.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;yy &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;复制当前行到剪切板.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;cc &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;剪切当前行到剪切板并且进入插入模式.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;D &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;剪切光标当前位置到行尾的文本到剪切板.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;Y &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;复制整行到剪切板, 和yy相似. (yes, 这个命令和命令D的操作方式没保持一致, 你可以用y$完成类似D的操作)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;C&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;剪切光标当前位置到行尾的文本到剪切板并进入插入模式.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;x&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;剪切当前字符. (类似于命令模式的退格(backspace)键)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;s &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;剪切当前字符并进入插入模式. &lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;span style="color: #ff6600; font-size: 12pt;"&gt;粘贴&lt;/span&gt;&lt;br style="color: #ff6600;" /&gt;　　&lt;span style="color: #ff6600; font-size: 12pt;"&gt;粘贴很简单. 把光标移动到你想要粘贴的位置输入p. (译注: 粘贴操作需要在命令模式下, 另外P(大写)命令把剪切板的内容粘贴到光标当前位置之前, 对用惯其它编辑器的人来说, P命令可能更符合习惯) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 14pt; color: #ff6600;"&gt;使用多个剪切板 &lt;/span&gt;&lt;/p&gt; &lt;p&gt;大部分编辑器只有一个剪切板. (译注: 貌似不算太'大部分') vim有多个. 在vim里剪切板叫做寄存器(regiseter). 你可以输入:reg列出所有当前定义过的寄存器和它们的内容. 大多数情况下你会使用以小写字母命名寄存器, 其他的有各自不同的vim内部用途, 偶尔可能会有用. &lt;/p&gt; &lt;p&gt;要使用指定的某个寄存器来完成复制和粘贴, 很简单, 在复制粘贴操作之前输入"a, a表示你希望用的寄存器. &lt;/p&gt; &lt;p&gt;举个例子, 复制当前行到寄存器k, 输入"kyy. (也可以用V"ky. 想想为啥这个也成). 那一行就会被存放在寄存器k里, 直到有其他的东西被复制到到寄存器k覆盖它. 复制之后可以用"kp来把寄存器k里存放的内容粘贴到到文本中.&lt;/p&gt; &lt;p&gt;&lt;span style="font-size: 14pt; color: #ff6600;"&gt;不干机械劳动&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 14pt; color: #ff6600;"&gt; 给你惊喜的.命令&lt;/span&gt;&lt;/p&gt; &lt;p&gt;在vi中, 输入.(英文的句号)可以重复上一个你执行过的命令. 比如你上一个命令是dw, 当你输入.命令, vi会删除下一个词. &lt;/p&gt; &lt;p&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt;使用计数器执行重复操作&lt;/span&gt;&lt;/p&gt; &lt;p&gt;计数器是vim最nb的提速功能. 任何命令之前都可以加一个数. 这个数告诉vim你想把命令执行多少次. 例如:&lt;br /&gt; 3j会把光标向下移动3行.&lt;br /&gt; 10dd会删除10行文本.&lt;br /&gt; y3"在当前行, 把光标当前位置到第三个双引号之间的文本复制到剪切板. 这种计数器用法可以大大扩展motion的操作范围. (译注: 本人认为y3"不能完成这样的功能, 对应的命令应该是y3f", 可能原作者漏写了f命令, 有空的时候问问原作者) &lt;/p&gt; &lt;p&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt;录制宏 &lt;/span&gt;&lt;/p&gt; &lt;p&gt;你可能偶然会发现你对一个文档中的某块文本反反复复的进行相同的操作. vim可以录制一个特定的宏来完成这些操作. &lt;/p&gt; &lt;table width="596" border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;q&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;register&lt;/em&gt;&lt;span style="color: #ff6600;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;开始录制一个宏并保存在某个有名字的寄存器. 比如qa开始录制一个宏并把这个宏存放在寄存器a中.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;q &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;结束录制&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="79"&gt;&lt;span style="color: #ff6600;"&gt;@&lt;/span&gt;&lt;em style="color: #ff6600;"&gt;register&lt;/em&gt;&lt;/td&gt;             &lt;td valign="top" width="517"&gt;&lt;span style="color: #ff6600;"&gt;回放存放在某个寄存器的宏. 比如@a播放寄存器a中的宏. &lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;请注意宏只是记录你的按键并且回放; 不是神奇的魔法. 因为在vim中可以用多个命令执行某个任务, 录制宏几乎成了一种艺术形式, 你必须非常小心的选择要用的命令才能用宏达到你想要的效果. &lt;/p&gt; &lt;p&gt;&lt;span style="color: #ff6600; font-size: 14pt;"&gt;用vim写程序代码 &lt;/span&gt;&lt;/p&gt; &lt;p&gt;vim是优秀的源代码编辑器, 有很多的功能是专门为写程序设计的. 这里是一些常用的: &lt;/p&gt; &lt;table width="596" border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="39"&gt;&lt;span style="color: #ff6600;"&gt;]p&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="557"&gt;&lt;span style="color: #ff6600;"&gt;和p相似, 但是它可以自动调整粘贴的代码和已有的代码缩进. 试试吧.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="39"&gt;&lt;span style="color: #ff6600;"&gt;%&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="557"&gt;&lt;span style="color: #ff6600;"&gt;把光标放在某个花括号{}, 中括号[]或者圆括号()上, 按%会把光标移动到与之对应的花括号, 中括号或者圆括号上. 对于修正多层嵌套逻辑代码块的括号解析问题来说, 这个功能堪称救人于水火之中.&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="39"&gt;&lt;span style="color: #ff6600;"&gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="557"&gt;&lt;span style="color: #ff6600;"&gt;缩进高亮选中的代码. (对高亮选中请查看前面章节, 如果没有文本被高亮选中, 则将当前行缩进)&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="39"&gt;&lt;span style="color: #ff6600;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="557"&gt;&lt;span style="color: #ff6600;"&gt;和&amp;gt;&amp;gt;类似, 但是反方向(译注: 缩进是向右移动行, 反方向既向左移动).&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="39"&gt;&lt;span style="color: #ff6600;"&gt;gd&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="557"&gt;&lt;span style="color: #ff6600;"&gt;把光标移动到当前光标所在位置的函数或者变量的定义(definition)(或声明(declaration)).&lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="39"&gt;&lt;span style="color: #ff6600;"&gt;K&lt;/span&gt;&lt;/td&gt;             &lt;td valign="top" width="557"&gt;&lt;span style="color: #ff6600;"&gt;打开当前光标所在词对应的手册页(man page). (比如你的光标当前在sleep这个词上, vim会显示sleep的手册页) (译注: 这个功能貌似只对vim的原生OS--unix上有用) &lt;/span&gt;&lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;(译注: 结合ctags, cscope之类的辅助工具, vim可以提供更强大的程序代码编写功能)&lt;/p&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/hyddd/aggbug/1706863.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hyddd/archive/2010/04/08/1706863.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2010/02/03/1663088.html</id><title type="text">《构建高性能WEB站点》读书笔记--第一章</title><summary type="text">1.等待的真相： （1）数据在网络上的传输时间。 （2）服务端处理请求，并生成返回数据的时间。 （3）浏览器本地计算与渲染的时间。 2.瓶颈在哪里，问题的本质是什么？你搞清楚么，了解本质的原理么？ 3.常见的调优方案： （1）增加带宽。 （2）减少网页中的HTTP请求。 （3）加快服务端脚本的计算速度（解析器优化）。 （4）动态内容缓存。 （5）数据缓存。（动态内容缓存整个网页，这里只缓存数据） ...</summary><published>2010-02-03T15:23:00Z</published><updated>2010-02-03T15:23:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2010/02/03/1663088.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2010/02/03/1663088.html"/></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2010/02/03/1662333.html</id><title type="text">Java EE启示录</title><summary type="text">    最近的这段时间一直在学习Java EE，刚刚完成了从0到1的蜕变，所以顺便整理一下我所了解到的Java EE，给刚入门学习的新人一些头绪，而所谓“启示录”，就是这个意思。</summary><published>2010-02-02T18:24:00Z</published><updated>2010-02-02T18:24:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2010/02/03/1662333.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2010/02/03/1662333.html"/></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2010/01/04/1639283.html</id><title type="text">对做“互联网产品”的一些想法</title><summary type="text">其实我的工作是自动化测试，但在工作中不断和产品及开发人员打交道，对做产品逐渐有了自己的一些想法，在此整理一下思路。 （1）产品是什么？ 产品就是针对用户需求的解决方案。这句话很浅显，但它带出了&amp;#8220;需求&amp;#8221;二字，说实在，现在我还没有能力悟透这两个字&amp;#8230;在现实世界，极少用户会跟清楚描述需求，这种情况在做通用产品时尤甚，如何抓住大小需求中的精髓和核心，是产品成果的关键。 （...</summary><published>2010-01-04T15:59:00Z</published><updated>2010-01-04T15:59:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2010/01/04/1639283.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2010/01/04/1639283.html"/></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2010/01/04/1638630.html</id><title type="text">硬盘基础知多少</title><summary type="text">硬盘很重要，程序员实在很有必要了解这东西。</summary><published>2010-01-03T19:54:00Z</published><updated>2010-01-03T19:54:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2010/01/04/1638630.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2010/01/04/1638630.html"/></entry><entry><id>http://www.cnblogs.com/hyddd/archive/2009/12/31/1637227.html</id><title type="text">用VS2005写Loadrunner测试脚本</title><summary type="text">不知道有多少人了解，其实，我们可以用VS2005写Loadrunner的测试脚本，如果你因为Loadrunner IDE的代码提示、编辑、Debug功能烦躁不堪，又或者对C代码内存溢出烦闷苦恼的时候，这篇文章相信对你很有帮助。 首先，在继续看下本文之前，你必须确认你会用C#，囧~~~因为我选用的将是.Net协议。（1）先把License换为Global的。（支持1000个用户的Global Lic...</summary><published>2009-12-31T15:47:00Z</published><updated>2009-12-31T15:47:00Z</updated><author><name>hyddd</name><uri>http://www.cnblogs.com/hyddd/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hyddd/archive/2009/12/31/1637227.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hyddd/archive/2009/12/31/1637227.html"/></entry></feed>
