<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Targeted novice</title><subtitle type="text">2011年目标：个人提升，心智成长，时间管理，究深涉广，敏捷开发，多读一本书</subtitle><id>http://feed.cnblogs.com/blog/u/8487/rss</id><updated>2011-06-26T09:03:55Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/8487/rss"/><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/12/1982493.html</id><title type="text">记一次jQuery+WCF页面的离岸协作</title><summary type="text">背景：与美国某公司的一个离岸外包中的一个页面，最后交付物为，20来多存储过程，4000行左右的C#代码量，2000行左右的JS代码量，数个文件，7个jQuery plugins，参与人员及职责： BA一名（美国方），负责把握进度、控制风险、阐述需求、解答需求问题。 Application Developer（美国方技术接口人），负责建议/帮忙解决开发中出现的技术疑问，负责C#及SQL Code r...</summary><published>2011-03-12T15:44:00Z</published><updated>2011-03-12T15:44:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/12/1982493.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/12/1982493.html"/><content type="html">&lt;p&gt;背景：与美国某公司的一个离岸外包中的一个页面，最后交付物为，20来多存储过程，4000行左右的C#代码量，2000行左右的JS代码量，数个文件，7个jQuery plugins，参与人员及职责：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;BA一名（美国方），负责把握进度、控制风险、阐述需求、解答需求问题。  &lt;li&gt;Application Developer（美国方技术接口人），负责建议/帮忙解决开发中出现的技术疑问，负责C#及SQL Code review，审核代码质量、安全性和性能，负责性能测试。  &lt;li&gt;jQuery前端开发人员（美国方），是临时从另一个项目中调派过来的，负责所有前台的代码，包括jQuery及插件的使用和选择，与BA沟通确定方法接口，负责解决客户端有关的性能问题和BUG修复。初期稳定后，会撤离项目组。  &lt;li&gt;C#和数据库（我），负责所有的C#、WCF和数据库相关开发，BUG修复，稳定后的维护工作。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;难点：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;离岸协作，16小时时差，即美国上班时中国在睡觉，所以基本都是美国方在加班与我进行协作，通常都是他们晚上9~11点，我这儿中午12~1点。  &lt;li&gt;代码交付问题，尤其是前后端的衔接非常紧密，所以若有一方因为代码交付问题，另一方则会完全被stuck住，风险较难控制。  &lt;li&gt;由于使用典型的敏捷迭代，所以时间的要求上其实很急，规定上线时间根本没得商量，如果不能完成只能等下一次迭代。  &lt;li&gt;各种新技术：采用全新jQuery dataTables展现grid，后期使用线上数据库才发现性能完全不行。性能测试不足，出现之前没有预料的问题。  &lt;li&gt;沟通，我这边的老大曾经建议过直接onsite开发，不过美国方没有同意，这个页面因为需要无间的配合，所以对沟通的要求其实很高，我们后期是采用的每日~每两日一次会（会经常持续达半~1个半小时，有几次甚至达到了2小时，包括我和前端讲述头天已完成项，整理BUG完成情况，讲解新发现的BUG，指派新BUG的负责人，列出明日交付计划等等），每天必须使用邮件来更新开发进度并列出明天的计划和交付。倘若交付出问题（也确实出过），整体交付的日期会延迟。  &lt;li&gt;整个过程使用英语沟通。  &lt;li&gt;其它。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;我们的协作方式：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;由BA确定需求时，对方技术负责人告知前端与我的技术需求、扩展和重构，&lt;br&gt;我之前从来没用过WCF，我需要在这期间做出WCF POC，更新我的auto-complete控件使之支持WCF，&lt;br&gt;前端需要了解dataTables等相关技术。&lt;br&gt;（耗时一周左右）  &lt;li&gt;初步需求文档，列出主要web methods，当时一共只有15个，在这段过程中web methods的命名和需求往返超过不下于8次&lt;br&gt;前端给出后台需返回的JSON结构及request参数等。  &lt;li&gt;任务分解。  &lt;li&gt;前端进行页面代码的初步编写和插件研究；我同步进行数据库设计，后台代码框架等，并做出几个初步的web methods，准确代码合并。  &lt;li&gt;第一次代码合并是比较痛苦的，因为前端会改我的后台代码，他本身也懂C#，这样我们经常会有代码冲突，于是此时美国的技术接口人提出了协作原则，洋洋洒洒一大篇，即双方不允许互相修改对方代码。我补充说，希望每天有一次进度汇报，包括change log、明日计划、needs等。  &lt;li&gt;第一次合并后，发现问题很多，比如我写的web method对方不能使用或出错，第二次我就开始做unit testing，每个方法都使用Nunit进行过单元测试，这样大大提高了我每日后台代码的交付质量。  &lt;li&gt;在开发阶段，每天会有一次这样的报告，发现BUG会及时汇报，每日back and forth不下于5次，好在美国方总在晚上8~11点能联系到（即中国时间早10点~中午1点），所以这期间能clarify很多疑点，总之每天计划都能完成，第二天另一方会收到相应的代码更新。  &lt;li&gt;开发近一周半后，第一个版本发布到DEV服务器上，初步测试开始，BA生成简单的excel文档记录BUG清单，excel包含2个sheet，一个列出bug，一个列出尚未实现或打算实现的功能。每天会有一次电话会议，来确定这些BUG的负责人，并写上计划完成日期，每日有更新。每日会有一次构建，都会在DEV服务器上发布新版本以供BA测试和检验BUG修复情况。新BUG仍然会有层出。这个BUG清单最后有80来条，各种大大小小包括performance和页面布局问题等。  &lt;li&gt;第二次成熟版本发布后，对方使用线上数据库（dune版）来做性能测试。性能测试的结果，比如：loading会有timeout的错误，正式发布前都有处理。  &lt;li&gt;全部的回归测试。  &lt;li&gt;发布上线。从协作开发到第一版本上线一共耗时一个月整。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;关键词：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;任务&lt;/strong&gt;：任务分解、初期需求不必完美、过程控制、任务负责人清楚明确  &lt;li&gt;&lt;strong&gt;沟通&lt;/strong&gt;：每日进度汇报及计划、快速跟进修复BUG、积极响应、频繁会议、清晰沟通、无情绪沟通  &lt;li&gt;&lt;strong&gt;测试&lt;/strong&gt;：单元测试、性能测试、集成测试  &lt;li&gt;&lt;strong&gt;交付&lt;/strong&gt;：严格遵循不修改对方代码、bug tracking、遵行每日计划交付目标、后期每日构建、允许迭代&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;遇到的技术难点：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;上线后，当即发现另一个性能问题，因为使用jQuery datatables我们当时并没有做服务器分页，所有filter和pagination全部客户端，即提交查询请求后，从数据库返回全部数据（比如5000行），形成庞大的json串会导致出现script无法响应强制终止脚本的提示。BA当即只能决定将先只返回800条查询数据，在第二次迭代中再想办法提升。  &lt;li&gt;另一个性能问题就是左侧层级列表，数据量不少，页面载入后，分别有左侧4个及右侧3个widgets的数据需要异步载入，第一次访问页面的速度很慢。使用cache也不能很好解决这个问题，只能将左侧jstree做成服务器端异步提交显示。  &lt;li&gt;end-users的反馈很强烈，很多人使用得不习惯，很多抱怨和反馈纷至踏来。  &lt;li&gt;很多东西都必须改，第二次迭代开发开始。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;我们开始第二次迭代：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;所有存储过程都需要分页，问题比较麻烦，因为存储过程和C#方法有27个之多，如果每个存储过程都必须加上7个参数（startFrom, limit, sortBy, totalCount, Archived totalCount, etc)，每个接口也必须如何加上7个参数，所有方法都需要动。后来使用一个struct、一个统一方法、一个存储过程来解决这个问题，以利于扩展。 &lt;li&gt;左侧jstree需要改动。  &lt;li&gt;更多performance tunning。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;我们开始第三次迭代：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;由于客户端已基本稳定，前端退出开发团队，我继续进行维护工作，并需要了解所有使用到的前端技术和jQuery插件等。客户反应渐好。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;总结：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;深刻感受到西方的敏捷开发模式和沟通方式，很受启发，很喜欢。  &lt;li&gt;交付质量和承诺至关重要，否则一天的耽搁，可能会引起两到三天的延时，严重者会使进度失控。  &lt;li&gt;一个小遗憾：我做出的WCF其实并没有体现WCF data contract的优势，仍然返回JSON串，可是时间太紧，一直没有去解决这个问题。也是后期想要解决的。&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1982493.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/12/1982493.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/09/1977770.html</id><title type="text">读潘正磊访谈录</title><summary type="text">下午在读《潘正磊谈微软研发团队管理之道》和《潘正磊：做最好、做美的你》，有颇多感触，感谢潘正磊，感谢InfoQ。匆匆写博望与您共同思考。前者不是新文，相信不少朋友已经早已看过。 注：潘正磊，一位出色的微软女性经理，执掌中美两个研发团队。2010年11月应旨在帮助并支持技术型女性员工不断进步的英特尔女性员工网络（Women at Intel Networks, WIN）邀请，她与英特尔亚太研发公司近...</summary><published>2011-03-08T16:55:00Z</published><updated>2011-03-08T16:55:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/09/1977770.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/09/1977770.html"/><content type="html">&lt;p&gt;下午在读《&lt;a href="http://www.infoq.com/cn/interviews/team-management-panzhenglei"&gt;潘正磊谈微软研发团队管理之道&lt;/a&gt;》和《&lt;a href="http://www.cnblogs.com/stbchina/archive/2011/03/08/bring-out-the-best-of-yourself.html" target="_blank"&gt;潘正磊：做最好、做美的你&lt;/a&gt;》，有颇多感触，感谢潘正磊，感谢InfoQ。匆匆写博望与您共同思考。前者不是新文，相信不少朋友已经早已看过。&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;注：潘正磊，一位出色的微软女性经理，执掌中美两个研发团队。2010年11月应旨在帮助并支持技术型女性员工不断进步的英特尔女性员工网络（Women at Intel Networks, WIN）邀请，她与英特尔亚太研发公司近100位上海员工畅谈了18年微软职业生涯中几个故事及其个人感悟。&lt;/p&gt;&lt;/blockquote&gt; &lt;hr&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;在微软，每次的年度总结不仅要回顾你写了多少行代码，更重要的是归纳出自己的哪些技能有所提高，明年需要改进哪些方面。因此，&lt;font color="#008000"&gt;每年都应该选定一两个目标，而且一定是那种“需要踮起脚尖”才可以够到的目标&lt;/font&gt;。过去18年，我就是这样提高我的能力和积累经验的。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;与此有异曲同工之妙的，是这一条微博：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;@黄乐LELE：【Cisco Mid-Year Career Discussion】5个问题，很好的帮助自己清晰职业生涯的近期和远期规划。1. What motivates me? 2. What are my long-term career aspirations? 3. What progress have I made? 4. My development goals still relevant to long-term career aspirations? 5. Resources needed.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;我不知道有多少公司或团队甚至个人在做这件事，但我确定这是很有意义而必要的事。&lt;/p&gt; &lt;hr&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;成长过程中，人们经常会问“我需要提高哪一点”？无意间就踏入了一个误区：&lt;font color="#008000"&gt;看到别人的长处总想要去学习，而不考虑自己是否需要。&lt;/font&gt;&lt;/p&gt; &lt;p&gt;每个团队有一两个这样的专才就可以了，&lt;font color="#008000"&gt;一个好的团队每个人应该各有所长。所以，你应该想想自己在团队里发挥什么样的作用，跟别人的差异化优势是什么&lt;/font&gt;。当然，某些基本技能一直不掌握会成为个人发展的瓶颈，就绝对不能马虎。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;最近我也正在陷入这样的局面，希望自己成为一个既深又广的全才相反让自己疲劳追寻一无所得，我刚刚还在看于丹的《庄子心得》，虽然书写得并不是特别妙，不过刚看到的一段印象比较深，讲的是一个富人家的怀表掉到了木匠屋被满地的木屑刨花所遮掩，一群人累得筋疲力尽到天黑无功而返，有一男孩晚上一个人呆在漆黑的小屋居然是找到了，富人很惊讶，问其原因，男孩说“因为很安静，所以怀表的嘀哒声好明显，我顺着声音抹开了木屑就找着了”，虽然场景有些牵强，不过于丹用这个故事来表达：疲劳追寻是没有意义的，人需要静下心来才能听得到找得到。结合这个故事，再看这段，想来也是感触不已。&lt;/p&gt; &lt;hr&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;我觉得每个人的长处是不太一样的，我觉得我自己的长处，第一是技术方面还不错，因为一开始在做工程师，如果你技术上面做不好，是不可能往上走的。另一方面，我觉得我对&lt;font color="#008000"&gt;资源整合&lt;/font&gt;这一方面是比较强的，我的一个强项是我很快就&lt;font color="#008000"&gt;能看出我下面的员工他们最适合什么，他们不太适合什么，那把他们放在最适合于他们的工作岗位上。这样第一能够是最大的调动他们的积极性，第二整个团队可以成一个非常高效的团队。&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;关于“每个团队有一两个这样的专才就可以了”以及“资源整合”，我现在真是感同身受，也认为是现如今团队可以改善的一个方向，我相信没有几个大牛是全才，在04年就有听过一句话“我们团队不希望出现个人英雄，我们希望人人都是必要的都是英雄”，这表示全才能有一个已经足够甚至可以不需要，因为在一个健康的团队中，每人都应该有自己的专长及专注点 - 不止一个两个，这样一个团队应该才是健康与完整的，因为，这样每个人就能找到自己的位置，每个人在与自己专长相关的讨论中能发挥更积极的主导作用，能给出更多建议，并能在这过程中得到的个人满足感更强烈，但他首先应该知道他在这方面adept了，如此一来，队员互相需求、认同、分享以及帮助的。比如A君是MVC专家，B君对MCF有丰富经验、C君曾在当前项目中多次使用过某技术。这是外包的一个优势，大家所处的项目不同，用到的技术、架构，都不同，如果能互相分享告知，则&lt;font color="#0000ff"&gt;能很容易在需要找到资源时，迅速定位，马上获取handy的resource。&lt;/font&gt;&lt;/p&gt; &lt;hr&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;你看，我这个考虑思路跟你完全不一样，我不会觉得我团队里面有谁对我是有所威胁的，我的出发点就是我希望能够培养一批人才，如果有一天我能够不用去上班了，而且我的团队还可以执行得非常好，这才是我的目标，所以我是希望有人能够来代替我。如果我这个工作做完了，如果我下面培养出一批人才，能够取代于我的话，那还有更加具有挑战性的工作在等着我去做。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;很坦白的说，我也曾经有过“害怕自己被取代”的想法。lili有次一句话让我很醍醐，“作为TL和PM，让别人成功就是自己的成功”。现在，我接纳更多更优秀的员工共事，享受没有芥蒂的交流沟通，接纳批评，完全认同这种共同发展，甚至看到对方跑得比我快也会“笑纳”，再加把劲的追上去，这是一种成长一种绝佳动力。&lt;/p&gt; &lt;p&gt;从另一方面来讲，能早日培养出合格的back-up是必要的，这意味着，你可以抽身做更多有挑战性的工作。&lt;/p&gt; &lt;hr&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;在这样一种环境（微软）中，你怎么样能够跟大家交流，怎么样可以说服大家同意你的观点，怎么样听取别人的反馈，&lt;font color="#008000"&gt;自信心实际上是一个非常基本的素质。如果你没有这个素质，就是作为一般的开发工程师也不会走的太远的。 &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;在一年以前，我从来不觉得我有懂过“自信”这两个字，从小到大，几乎所有的人都会用这句话来“鼓励”我 -&amp;nbsp; “要对自己有信心！要相信自己一定可以做到！”可每每听到，却是越发的胆怯、害怕、无力、无穷压力，我甚至非常憎恨有人对我说这些，我觉得这是对我的莫大伤害。在这一年中，我所感受到的对“自信”的理解，却与那时截然不同 - &lt;/p&gt; &lt;p&gt;自信并非是茫然无措的给自己握拳头说加油然后全身发抖的站在最前方，而是在当下，你&lt;strong&gt;所有&lt;/strong&gt;需要做的，只不过就是&lt;strong&gt;全心投入。&lt;/strong&gt;&lt;strong&gt;绝对也永远&lt;/strong&gt;不可轻言放弃，不对自己说“不可能”，只需要心无旁骛，做好当下你所有能做的，你就成功了，结果并没有&lt;strong&gt;那么重要&lt;/strong&gt;，如果你可以很安然的告诉自己，我尽力了，没有人可以对我说 - 你本来还能做得更好，那你就是成功了。2年前，有一句话撼动我至深 - “这个世界上，只有三件事，你的事、别人的事、老天的事”。&lt;/p&gt; &lt;p&gt;至于另一个相近的词&amp;nbsp; - “信任”，也是说来容易实际实施起来，却需要更多尊重和由此思彼。相信队友，相信他们的交付能力，相信他们处理问题的能力，在内心深处给予他们失败和总结改正的机会，再多信任几次，再耐心一些，再多看一下。如果你觉得你眼光并没有错，那么，何不为了更好的获得付出些许代价呢？懂得帮人承担，出问题尽量帮助解决。我庆幸在这方面，我有一个很优秀的lead，他让我看到更多、想得更多。&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;潘正磊对项目经理、产品经理、产品总监、总经理的区别给出她的理解：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;作为一个开发工程师来说，你最主要的是要把你的代码写得越快越多越好。你的代码行写得多，那这个功能才增加得多，&lt;font color="#008000"&gt;你写的代码行是最难的那部分，&lt;/font&gt;那才说明你对这个产品最主要的核心部分有贡献，这是作为开发工程师。（注：还应该加上质量好才对）&lt;/p&gt; &lt;p&gt;作为一个开发主管来说，就是我们叫Development Lead，第一方面，作为管理者，你对这个团队的价值，不仅仅是说你自己写了多少行代码，这相对来说是比较少的，&lt;font color="#008000"&gt;最主要是你这个团队对整个产品的贡献是什么，那还是基于你这个开发的功能有多少，然后你这个功能是不是做得好，你架构是不是做得好，但是你的核心价值是把你这些资源都组合起来，然后能够帮助你团队的员工扫平障碍，让他们非常顺利地开发。&lt;/font&gt;如果要整个团队都能够非常顺利高效，你就要想“我怎么样让这十个人互相之间能够（协调好）”，就&lt;font color="#008000"&gt;是很多程序是有顺序的问题，把顺序问题安排好，有些东西可能要需要一些决定，尽早的把决定做好，下面的架构可以做好，跟其他团队的关系要搞好&lt;/font&gt;，因为他们可能有些东西要拿来，他们先做完之后我们才能做，所以有很多东西Dependency Management，这些东西全部都要管理好，就像造房子，管理一个项目一样。这样管理好你这十个人才能都是马不停蹄、非常高效地把这个东西做好。&lt;/p&gt; &lt;p&gt;等你做开发经理的时候，开发经理因为不是一个第一线的管理者，而是第二线的管理者，这个时候最最有挑战性可能是，你很多东西要通过你第一线的开发主管传达到下面去，&lt;font color="#008000"&gt;如果你开发主管对你说的话不认可，那你的观念、决定不一定真正能够传达到最下面的开发人员&lt;/font&gt;。而且你下面的开发主管可能每个人都还要管一摊不同的东西，你怎么样&lt;font color="#008000"&gt;让他们之间能够互相配合、互相合作，从一个大局上面来看你整个这个开发团队缺什么&lt;/font&gt;，有的时候他们开发主管在那里面做，他不一定会知道说。&lt;/p&gt; &lt;p&gt;从开发经理来说，我在美国喜欢说三个P，&lt;font color="#008000"&gt;你要管理产品（Product），你要管理人员（People），你还要管理流程（Process），这三样东西都要抓起来&lt;/font&gt;，你才能作为一个合格的开发经理，然后让整个团队都能高效地运行。从开发经理来说，他还只是主要是管开发团队的。开发团队总的来说只是占了可能是1/3。&lt;/p&gt; &lt;p&gt;总经理跟产品经理是两个不同的概念，产品经理是说你管一个产品，那&lt;font color="#008000"&gt;总经理你是管多种产品&lt;/font&gt;，像我刚才所说的，实际上我现在这个组里面有三种不同的产品。怎么样管理这一套产品线，而且跟我们的市场部，跟我们的营销部，跟我们的DPE（开发工具及平台事业部），那些合作都是在这个层面上面是完全不同的。看你每一个产品到底里面放多少的资源进去，为什么这个产品放这么多资源，而且要看你成功的定义是什么。&lt;/p&gt; &lt;p&gt;而做一个产品的开发经理，这么多资源实际上已经分配给你的，你在这个资源的基础上面把它做到最大最好，所以这还是不同的概念。 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;我一直是一个开发工程师，而且未必是算上得合格的，读清需求、写好代码、按时按质完成交付、上传下达、必要沟通等，上述这段我几乎是大量的coy过来，是因为整条线路相当清晰，给出一个部门organization up-to-down从大局到细节部分的一个总览，是极为完美的开发职场规划路线之一。我看到的是，管理产品意味着有敏锐的市场调研，&lt;font color="#0000ff"&gt;是懂经济&lt;/font&gt;，管理人员意味着有敏锐的将最适合人员分配到最适合岗位，&lt;font color="#0000ff"&gt;是懂人&lt;/font&gt;，管理流程意味着自律、严格（当然不仅仅是），&lt;font color="#0000ff"&gt;是懂做事&lt;/font&gt;。管理多个产品，则是分配资源，对市场对定位的研究，我说的这几句可能不完全正确和全面，但就我目前所能悟的这些，已是足够我思考和自省的了。&lt;/p&gt; &lt;hr&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;我本人是比较愿意去试验新的方法，&lt;font color="#008000"&gt;我会让一个feature crew (功能小组)去试验这个方法。然后给他一段时间，他来给我反馈&lt;/font&gt;，这个不管是方法还是新的工具，他有什么优点，他有什么缺点，因为很多时候你想是想不出来，你还一定要去试，试了之后才知道它到底是好用还是不好用，它什么地方好，什么地方不好，就跟车一样，你得要去试开一下。然后在这之后，&lt;font color="#008000"&gt;根据他的好处跟坏处，你还再可以跟现有的方法再看，再评估一下&lt;/font&gt;，你是把它全盘拿过来呢，还是把它改动之后再引用，或者有没有什么办法把它好的地方能够结合到现有的方法之中，不好的地方把它抛开不用。&lt;/p&gt; &lt;p style="margin-right: 0px" dir="ltr"&gt;&lt;font color="#008000"&gt;工作方法不是我来改进的，是我的团队来改进的。&lt;/font&gt;因为他在日常工作（开发、测试）中发现了问题，发现什么是更好的解决方案，他要有这种主观能动性，他要明白我想解决的问题是什么，他才能够主动帮我来想更好的解决方法。那想出解决方法之后，我们大家再分享，一般都是这样。 &lt;/p&gt; &lt;p&gt;这个问题我早就知道了，但是我现在决定不解决，因为可能有其他的方方面面的原因，所以我不解决；或者说&lt;font color="#008000"&gt;这个想法非常好，我给你资源，你去给我做一个试验原型出来&lt;/font&gt;，然后我们再来看一下，这是非常常见的。 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;开发工作中，团队成员如果有这种主观能力性去研究新东西，并时常愿意给你新的IDEA，你给他机会让他尝试，会激励他下次继续努力。而身为执行者的开发人员，我也应该多多将我自己认为好的建议提出来，可能遭到反驳，可能会被伤害（我做得辛苦你只需要说说大话之类的心态，我想在西方企业文化中是不存在的）。鼓励新思维新技术，open to all suggestions。我现在对这些西方企业文化的兴趣更加浓了，希望能多多通过这种文章了解和学习他们。比如，我一直希望能提上日程的周四培训计划，一直在拖延，而且，本身我的完美主义倾向就有很严重的问题，如果凡事连让自己犯错的机会都不给，让自己被责骂都会觉得不如不说之类的，那就真的是自己先与这种文化格格不入了。&lt;/p&gt; &lt;hr&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;你怎么样能够调动员工最大的积极性，而且我觉得有的时候中国的员工不够主动，你让他做他会做得非常好，但是你不跟他说的事情，他也许就不做。这个我看得比较多，不管在美国和中国的华人员工里面都是比较常见的一个问题。&lt;font color="#008000"&gt;作为一个管理者，你怎么样能够让他能够非常主动把问题告诉你，而且把解决方案也告诉你，这个是从微软文化上面来说是非常重要的一件事情。&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这是非常有趣的一段话，有意思的是，&lt;strong&gt;我前几天看了下我05年的博客，上面有段话，我现在看来很有意思，里面批评了我当时的lead，认为他很不合格，我在里面对lead表达了这种一种要求 -&lt;/strong&gt; （&lt;strong&gt;我原封不动的将这段拿上来&lt;/strong&gt;）&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;&lt;font color="#666666"&gt;一个&lt;strong&gt;没有CMM标准&lt;/strong&gt;的软件开发公司&lt;strong&gt;开发过程过份幼稚，没有前期的项目文档，只有简单的所谓UI&lt;/strong&gt;。对一个coder来说，绝对不是一个良好的经历。&lt;strong&gt;不规范的编程风格，小作坊式的开发模式，落后的开发工具，原始的测试手段。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#666666"&gt;规则..... 对我来说，是一种具争议的概念。我不是流水线工人，你也不是监工，我能大大提前既定时间完成同样时间别人完成不了的任务，我需要这种意义上的“激情"吗? 我没有任务，全都是我的错吗? &lt;strong&gt;汇报进度是我的责任,而你作为一位PM,留意和跟进项目和人员的进度，从大局来规划任务及进度是你的事,而且不过是5个人的小team,在你PM的眼皮下,我没任务难道是我的错吗? 难道你能说我没有工作激情吗？难道能说我不能胜任工作吗？ &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#666666"&gt;还有你们口中所谓"团队性格",我需要为了完成一份工作而刻意逢迎我需要和你们装得很熟吗? 我需要刚来4天就夸夸其谈以表我没有交流障碍吗?我需要中午和一堆我甚至名字都叫不全的人在一起吃饭还要装得我和你们前世注定相见恨晚吗?我中午去哪吃饭还需要跟整个team汇报行踪最好就象隔壁市场部高声谈笑以示我具有团队性格吗?非常抱歉，I really feel sooorry! 我不是一个刚刚毕业的coder，还可以让你们象&lt;strong&gt;挰泥人一样把我挰得颇具你所倡导的团队性格&lt;/strong&gt;,我也不需要把自己整天装在套子里装腔做势，&lt;strong&gt;我只是一个和你们合作的对象,如此而已. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#666666"&gt;清华XX，一个不适合IT人呆的地方，一个不适合coder呆的地方，工资低，技术落后，&lt;strong&gt;制度死板，程序繁杂，PM浮噪&lt;/strong&gt;，5天对我来说已然足够(项目经理居然连版本控件都不使用...后面经我们提示，才知道世界上有一种工具叫做vss,并且可以做版本控制呢。)，一个人经历各种不同的人和事也属自然&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;是否很有意思呢？我们每个人在初期可能都有这种极端化的抱怨，如果一旦矛盾激化，结果就有可能是这样，这段话，是否能让现在的我，好好仔细认真的思考一番呢？让成员&lt;strong&gt;认同文化（而不是被迫认可团队性格）、认同他自身在团队的价值并受到激励（而不只是合作对象）&lt;/strong&gt;，标准化让他觉得&lt;strong&gt;值得点头称赞&lt;/strong&gt;的合理的流程、宽松的开发环境、尽量简化人事流程和束缚等等。总之，是一种&lt;strong&gt;先让所有团队成员认可与相互信任的过程。&lt;/strong&gt;继续看看下面这段潘正磊的，&lt;/p&gt; &lt;hr&gt;  &lt;blockquote style="margin-right: 0px" dir="ltr"&gt; &lt;p&gt;那你是不是&lt;font color="#008000"&gt;真的培养员工&lt;/font&gt;，真正是让员工在你&lt;font color="#008000"&gt;团队里的重要性充分的发挥了出来&lt;/font&gt;，只有在这个时候员工才认可你的管理的方式，才能认可他是这个团队的一员，才能想到怎么样在这个团队里面发挥最大的重要的作用，那这也是我觉得开发管理者应该多思考的问题，和多做的事情。 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;真是如醍醐灌顶般畅快啊！最后这一段，也是颇有意思。&lt;/p&gt; &lt;hr&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;我觉得有一些可能文化上面的东西，可能会限制这些员工的发展。我看到比较多的是，有的时候员工他们碰到一个问题，我觉得可能是考试考太多了，他们看到一个问题，他们不太会去跟旁边的人，&lt;font color="#008000"&gt;一起跟周围的团队里面的人，或者跟美国团队人一起交流，一起想最好的解决方案&lt;/font&gt;&lt;font color="#008000"&gt;，能够把大家不同的观点整合起来。&lt;/font&gt;很多的时候看到他们自己在非常辛苦地在干。那苦干之后真的是做出来成果就说，你有没有考虑到一二三四五六，那你有没有跟这个人这个人去谈过，好像这方面做得相对来说比较差一点。因为我觉得我们考试的模式就说你不能问别人，你都要自己解决。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;就在前几天，我无意间看到很多年前一个文本，里面记录了当时觉得有趣的一段在CSDN上的争论，于是我顺手又将它转到微博上，这句话是：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;&lt;font color="#666666"&gt;中国人说话很谨慎,只说正确的,不正确的基本上都缩回去了.外国人鼓厉你说出来,哪怕是错的.他们在表达观点上甚至很粗暴,像吵架一样.外国人说,就算十个人的观点都是错误的,可是,说出来,大家在十个观点的基础上思考,也可能得出一个正确的结论. 争论是正常的.但请勿互相攻击.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;这些都能看出中国与西方文化间的差异，这种差异是一件很有意思的事。我最初了解到美国那种圆桌上讨论是在看《爱在哈佛》，教授出一道课程，班上成员自行组织协作团队，4~7人的样子，大家在一起讨论debate、brainstorm最后交一份答卷，是共同努力的成果（不要做任何与中国现在的大学开发“培训班”有关的联想）。中国学子都是闷头干闷头做，互相排斥，巴不得把对方挤下来，人人都与人争，就如印度片《3 idiots》中的校长入学仪式上说的“噪鹃从来不自己筑巢，他只在别人的巢里下蛋，要孵蛋的时候他们会怎样？他们会把其他的诞从巢里挤出去，竞争结束了，他们的生命从谋杀开始，这就是大自然——要么竞争，要么死……”，这能看出，我们不互相协作，闷头干自己的事，是与这种教育制度以及被鼓吹的风气有关。&lt;br&gt;&lt;/p&gt; &lt;p&gt;我一直很向往西方团队模式，2年前关注UED时，就留意到腾讯、淘宝支付宝等UED团队都有这样的西方团队模式，非常敞开，非常棒！不知道我是不是也能有这样的机会，在这样的团队里和一帮可爱的团队成员共事呢？不知道是否能获得大家的共同认可呢？&lt;/p&gt; &lt;p&gt;&lt;br&gt;我一直以为有这个名字和这种职场经历的女人，必然是锋芒必露甚至略感强势，&lt;a href="http://video.sina.com.cn/v/b/31436899-1700099614.html" target="_blank"&gt;原来却是一位非常外柔内刚的女性&lt;/a&gt;，看来我对女性IT管理的观念需要refresh了。&lt;/p&gt; &lt;p&gt;延续阅读：&lt;/p&gt; &lt;p&gt;《&lt;a href="http://www.infoq.com/cn/interviews/agile-development-panzhenglei" target="_blank"&gt;潘正磊谈Visual Studio开发过程中的敏捷实践&lt;/a&gt;》&lt;/p&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1977770.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/09/1977770.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/08/1976766.html</id><title type="text">【原创】使用Opera技巧小记</title><summary type="text">在很多年前,自从用过多标签浏览器后，就不再使用IE了，最早年的QQ浏览器，也曾用过MyIE和遨游最早期的版本，再然后世界之窗出来时，我喜不自禁，那时皮肤漂亮再加上多标签，这就是我对浏览器的全部追求，因为浏览器A比B漂亮，我就能轻易的换掉B，哪有什么钟爱不钟爱。后来我发现国内的浏览器都太吃内存，然后装了k-Meleon，爱不释手捡到宝一般的四处推荐，当时感悟到原来浏览器的真谛是简单平凡、功能不逊、节...</summary><published>2011-03-07T18:40:00Z</published><updated>2011-03-07T18:40:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/08/1976766.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/08/1976766.html"/><content type="html">&lt;p&gt;在很多年前,自从用过多标签浏览器后，就不再使用IE了，最早年的QQ浏览器，也曾用过MyIE和遨游最早期的版本，再然后世界之窗出来时，我喜不自禁，那时皮肤漂亮再加上多标签，这就是我对浏览器的全部追求，因为浏览器A比B漂亮，我就能轻易的换掉B，哪有什么钟爱不钟爱。后来我发现国内的浏览器都太吃内存，然后装了&lt;a href="http://kmeleon.sourceforge.net/wiki/ResourceLinks" target="_blank"&gt;k-Meleon&lt;/a&gt;，爱不释手捡到宝一般的四处推荐，当时感悟到原来浏览器的真谛是简单平凡、功能不逊、节省资源，那些主题什么的都是身外物。后来Chrome面世，带我进入全新的浏览器“娱乐”，大把大把的插件，于是有好几年我不再需要第二个浏览器了。到了09年中，最终还是迷上Firefox，开始与Chrome交替使用，为收藏夹不同步而费心折腾。Firefox让我着迷的一直都是因为firebug，越到现在我所需要用到的插件就越简单，并偏见的认为，任何一个需要与javascript打交道的人，如果不喜欢用FF那简直就是无法想象。可自从Chrome的同步不再给力后也在慢慢习惯去弃用它。尽管如此它仍然是我必装的一款，现如今，&lt;strong&gt;我使用的是Opera占平时浏览网页的95%，FF只在开发时才会使用，IE占5%，至于Chrome，基本就不再点开了&lt;/strong&gt;。所以整个过程是一路跟随浏览器的发展而变革我的上网习惯。&lt;/p&gt; &lt;p&gt;最早年网景netscape还生龙活虎时，我就安装过Opera的，可一直到大半年前，它在我眼里也不过是一个比QQ浏览器好不了多少的普通货。一直到我后来彻底爱上Opera后，令我感悟最深的就是 - &lt;strong&gt;当你没有完全了解一件事物时，你真的是没有资格对那些狂爱者们摇动手指头甚至是批评他们的，做任何事都是如此&lt;/strong&gt;。在一年前，我们老大就开始偶尔向我们提到Opera，他在不需要使用Firebug调试或是测试的时候，就会使用Opera，我试着喜欢它可是一次一次的放弃，他是一个很会玩各种软件的人，textpad等，都被他玩成专家，这些软件在他手中如同厨师手上那几把顺手的刀，没有便是不行。我对Opera还没有完全了解，依然还有很多功能等待我慢慢发掘，前两周我“鼓动”老大给我们做一个Opera使用技巧的培训，他应承着说好，可是最近几周又是真的太忙一直搁下，我等不及了。现在就想写这篇博，勾一件心中想做的事。&lt;/p&gt; &lt;p&gt;一、基本应用&lt;/p&gt; &lt;p&gt;&lt;table style="border-collapse: collapse; color: #000000" border="1" cellspacing="0" cellpadding="2" width="759"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;这个快进键可以用来翻页，我们可以用来做论坛分页的翻页、图片浏览翻页、微博更多的翻页，反正一路按着空格就可以不需要点击“下一页”，我想在支持HTML5的网页中，这个功能就能更方便。 &lt;br&gt;&lt;strong&gt;你可以在 Opera 主目录下的 FastForward.ini 里编辑快进关键字。&lt;/strong&gt; &lt;br&gt;&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080236595835.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237015255.png" width="303" height="173"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt; &lt;p&gt;如果你不愿意现在打开的一大堆tab打扰你当前的工作，你可以这样&lt;strong&gt;存起来&lt;/strong&gt;，可以将某些你觉得必须每次都想打开的设为“每次启动Opera时都打开这些标签和窗口”就好了。&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237062219.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTMLc94ac9" border="0" alt="SNAGHTMLc94ac9" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237113741.png" width="550" height="209"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;按F4弹开侧边栏后，选择窗口，比较方便的一个小功能，在小面板中管理tab，可将几个windows的&lt;strong&gt;tab互相拖动&lt;/strong&gt;。如下图这样，如果同时开了多个窗口，可以很方便的这样将A窗口的页面拖放到B窗口，如果A窗口页面全部的拖完，A窗口会被整个关闭。这个在我双屏浏览时很方便。 &lt;br&gt;&lt;u&gt;使用诀窍&lt;/u&gt;：我一般会一个屏放一个，分别浏览，这样很容易做管理不用拖动整个标题栏。 &lt;br&gt;&lt;u&gt;建议&lt;/u&gt;：比较不方便的就是右键菜单中不可以将这些被选中的批量导出到剪贴板，好让我备份起来。而且TAB再开启时也不能做选择。 &lt;br&gt;&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237131002.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237166527.png" width="331" height="364"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;&lt;strong&gt;拖动标签下面&lt;/strong&gt;的分界线可以放大标签为预览，窗口小或打开的标签过多的话就不清楚，双击分界线可还原。不过这是opera独有的功能。 &lt;br&gt;&lt;strong&gt;右侧标签垃圾桶&lt;/strong&gt;里面收录的是最近你关闭的标签。&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237183505.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237212095.png" width="550" height="225"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;可以右键选择“加入笔记”方便平时浏览网页时随时将东西加入笔记，关键时， &lt;br&gt;&lt;strong&gt;双点这种笔记&lt;/strong&gt;后还能导向这个链接，是不是很方便呢？既能记录文字又能保存链接！这类型的笔记&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237248210.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237285796.png" width="550" height="244"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;使用opera mail作为feed工具，点击订阅RSS后，即使是XML, 也能得到stylish的页面，点选Opera Mail后，subscribe即可。下拉框中还有一些其它feed方式可选。比如Google Reader。&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237342312.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237379016.png" width="550" height="190"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;原来opera 11 speeddail 增加到5x5以上是如此简单，在C:\Users\[当前用户名]\AppData\Roaming\Opera\Opera\speeddial.ini 中将大小改成5x8或是其它数字即可。 &lt;br&gt;开启Opera link同步后，标签可同步。&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237431420.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTMLdda096" border="0" alt="SNAGHTMLdda096" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237514989.png" width="550" height="331"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;邮箱功能类似outlook，支持联系人定义，分类、邮件"组"、标签功能。最方便的功能就是&lt;strong&gt;followed contacts&lt;/strong&gt;，可以想象成微博中的关注~ 设置关注人后，就可以在这儿很方便的选中查看与之相关的邮件往来了。 &lt;br&gt;另外，就是可以支持RSS订阅和新闻组。 &lt;br&gt;不足：Contacts需要另找地方同步。&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080237591165.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238039863.png" width="318" height="364"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;侧边栏功能是相当的丰富，除开自带功能，也可以将链接拖放上去，比如google的task，比如饭否支持快捷提交的前提下我只需要输入再按alt+enter即可。支持“小窗口”功能，虽然不是每个页面构造都适合扔在这，不过是不是有点类似自定义widget呢? （FF也有类似功能）现如今，F4键已是我的大爱。 &lt;br&gt;我现在放到侧边栏的链接如下： &lt;br&gt;&lt;a href="https://mail.google.com/tasks/ig" target="_blank"&gt;Google任务&lt;/a&gt; 必添项之一吧 &lt;br&gt;&lt;a href="http://fanfou.com" target="_blank"&gt;饭否&lt;/a&gt; （我设成秘密，专门用来记录一些常用的情绪垃圾和每日所得，很方便快捷），这样就不需要加其它机器人了。 &lt;br&gt;&lt;a href="http://www.onelook.com/" target="_blank"&gt;OneLook Dictionary Search&lt;/a&gt; 英文字典索引 &lt;br&gt;&lt;a href="http://www.365rili.com/huangliQuery.html" target="_blank"&gt;365日历网(www.365rili.com)--黄历_吉日查询&lt;/a&gt; 以适用侧边栏的样式显示当天黄历方便查询。 &lt;br&gt;&lt;a href="http://toran.cn/" target="_blank"&gt;突然网&lt;/a&gt; 支持短址、文件音视频及代码上传和短址化，很方便。 &lt;br&gt;&lt;strong&gt;还有更多等您自己去发掘。&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238079717.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238119254.png" width="427" height="364"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;有使用过opera link功能的朋友一定会对它的notes功能赞不绝口，支持链接拖存（可想象成readitlater），最重要是支持实时同步，白天工作时的笔记，任务、要做的事、任何东东，都可以随手写下，回家又在家中电脑获取，支持树状结构，自行管理就好~ 误删的可以去垃圾箱中寻回。&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238132644.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238172248.png" width="284" height="427"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;这个功能类似windows的alt+tab :P &lt;br&gt;有多种方法可调出， &lt;br&gt;1. 按住鼠标右键不放，上面滚轮可遍历标签表。 &lt;br&gt;2. ctrl + tab &lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238235176.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238281092.png" width="550" height="300"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;鼠标手势~! 自从用过这个功能，就象玩过3D游戏就爱在2D游戏中不停的扒鼠标的感觉~ 最常用的就是前进后退，图中是所有手势。FF/Chrome有插件支持。&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238373134.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238421558.png" width="437" height="364"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;自定义搜索也很exciting，在任何可以供输入查询的地方(是任何)，比如腾讯围脖，右击“创建搜索”出现如下图，设置keyword为qqt，在地址栏敲入如“qqt 精彩语录”，即可执行搜索了，是不是好方便呢~ 是可以用于任何有查询功能的框框喔~ &lt;br&gt;我甚至将工作中常常需要做的查看ticket号也用这种方法表示，真是给我带来好多方便！ &lt;br&gt;&lt;br&gt;我还加了好多 ^^ &lt;strong&gt;比如豆瓣、天气、电子书搜索、itput图书搜索，短址还原啦，&lt;/strong&gt;哎呀太多了，我都快记不住快捷字了~ 就算记不住，在右上的搜索那点开下拉框就能看到全部了！&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238516174.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080238571643.png" width="550" height="239"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;输入"." (dot)即可打开页面搜索栏，搜索结果支持white-in-black~高亮（如图），点击页面任何处或按esc可隐藏搜索栏，灰常方便。 &lt;br&gt;输入",”(逗号)则只需要有超链接的方字。&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/20110308023859299.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/20110308023901101.png" width="460" height="173"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;借助Opera浏览器“我的样式表”功能编写简单的CSS代码便能够方便的针对指定站点调整页面的设计风格或屏蔽广告或者某些板块.&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080239043882.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080239099275.png" width="538" height="404"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;tab分组大爱哇，可以藏好多好多tabs在分组里面（止不住的偷笑中），WIN7式的点选方式也很方便呢！&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/20110308023926491.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080239352631.png" width="550" height="356"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="250"&gt;试一下按F2，弹出此框，输入内容，可以全局搜索书签和历史。如果输入网址后按 ctrl + shift + Enter，则在新标签页后台打开。&lt;/td&gt; &lt;td valign="top" width="507"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080239364484.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SNAGHTML10ed924" border="0" alt="SNAGHTML10ed924" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080239366021.png" width="469" height="147"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;二、一些小应用诀窍&lt;/p&gt; &lt;ul&gt; &lt;li&gt;双击标签关闭它，这不是opera的默认功能，不过相信不少使用其它浏览器的人都习惯这一操作，Opera也支持的，不过要配置：在地址栏输入opera:config,然后搜索Double，你会看见一个选项，选上就行了。  &lt;li&gt;&lt;a href="https://addons.opera.com/addons/extensions/" target="_blank"&gt;依然有extension&lt;/a&gt; (插件)，可惜插件数据不支持同步，可以在unite中配置同步。必推几个网上同步的  &lt;ul&gt; &lt;li&gt;&lt;a href="https://addons.opera.com/addons/extensions/details/reading-list/1.3/?display=en" target="_blank"&gt;Read list&lt;/a&gt; Read it later  &lt;li&gt;Image预览也是不错的东东。  &lt;li&gt;To-read sites 其实我蛮喜欢这个的，本地用很方便 &lt;br&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103080239377350.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/20110308023938316.png" width="336" height="281"&gt;&lt;/a&gt;  &lt;li&gt;&lt;a href="https://addons.opera.com/addons/extensions/details/opera-internal-pages/1.2-3/?display=en" target="_blank"&gt;Opera Internal Pages&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.operachina.com/explore/2011/03/01/opera-extension-7-millions-china-in-6-great/" target="_blank"&gt;更多热门插件&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;li&gt;选项 - 表单，填入一些常用登陆信息，可在表单的autocomplete下拉框中出现，很小很贴心又很方便。按下 F12 可以呼出快速参数菜单，而 Ctrl + F12 和 Shift + F12 分别是首选项和外观的快捷键。  &lt;li&gt;在按住 Ctrl 键的同时单击图片，便能快速保存图片。  &lt;li&gt;收藏夹支持分离查看，我最喜欢的是它的快速搜索功能。可以为某些常用网站设置快捷。  &lt;li&gt;Opera也是有"firebug”的，&lt;a href="http://www.opera.com/developer/tools/" target="_blank"&gt;看一看&lt;/a&gt;  &lt;li&gt;支持默认不带格式拷贝（可辛苦坏了我们这些在使用evernote的用户呀）  &lt;li&gt;&lt;a href="http://www.howtocreate.co.uk/operaStuff/userJavaScript.html" target="_blank"&gt;有User Script&lt;/a&gt;，还在研究中。  &lt;li&gt;支持语音，还&lt;a href="http://v.youku.com/v_show/id_XOTg2NzM1Njg=.html" target="_blank"&gt;支持面部表情控制打开关闭等&lt;/a&gt;一 一  &lt;li&gt;&lt;a href="http://www.opera.com/browser/tutorials/personalize/behavior/#bittorrent" target="_blank"&gt;如何使之天然支持BT下载&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.opera.com/browser/tutorials/" target="_blank"&gt;Opera tutorial&lt;/a&gt; / &lt;a href="http://www.opera.com/browser/tutorials/personalize/" target="_blank"&gt;Personalization&lt;/a&gt; /&lt;a href="http://www.operachina.com/browser/features/" target="_blank"&gt;MORE&lt;/a&gt;/&lt;a href="http://www.opera.com/browser/tips/" target="_blank"&gt;各种官方技巧&lt;/a&gt;  &lt;li&gt;&lt;a href="http://wiki.operachina.com/首页" target="_blank"&gt;一定得看的opera wiki官方&lt;/a&gt;，有一些小技巧快捷键等  &lt;li&gt;在"地址栏"输入网址后，你可以用 Enter + Ctrl 自动补全 " &lt;a href="http://www"&gt;http://www&lt;/a&gt; ", " com " ； 而如果在页面登录框里按下 Enter + Ctrl ，Opera 便会使用 Wand 功能自动登录。  &lt;li&gt;按下 F8 便能快速将焦点切换到"地址栏"上，Ctrl + E 则可快速将焦点切换到"搜索栏"上。  &lt;li&gt;Ctrl+1/2…能自动按speed dial顺序打开相应网址。  &lt;li&gt;你可以用 Ctrl + Z 或者 Ctrl + Shift + T 恢复被关闭的标签。 ctrl+w关闭当前窗口。  &lt;li&gt;&lt;strong&gt;查看禁止外链的图片，遇到这种图片时，按 F12，取消勾选“发送引用者信息”，即可正常查看。 &lt;/strong&gt; &lt;li&gt;在 Opera 的源代码查看标签内，你可以随意修改网页源代码，然后按下应用修改，Opera 便会载入你修改后的页面。  &lt;li&gt;Ctrl+0或是ctrl+鼠标中键，可以将网页zoom恢复为100%比例大小。  &lt;li&gt;多习惯用用F4键吧，不需要总将侧边栏露出来，有时侧边栏可以宽点再宽点，不过记得时常点击F4显示/隐藏。你会爱上它的~  &lt;li&gt;&lt;a href="http://bbs.operachina.com/viewtopic.php?t=2005" target="_blank"&gt;BBS&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;四、收藏夹管理&lt;/p&gt; &lt;p&gt;因为现在基本只在Opera中使用到收藏夹，所以这个问题不会太困扰我了，也早早将xMarks卸载了。不过这个 &lt;strong&gt;transmute&lt;/strong&gt; 工具还是非常给力的。有免费版足够用了。&lt;/p&gt; &lt;p&gt;更多经验请期待~！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1976766.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/08/1976766.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/06/1972499.html</id><title type="text">转一篇前端开发人员总结的《JavaScript 学习资源推荐》</title><summary type="text">小博注：来自JavaScript 学习资源推荐 ，是篇实在的博客，lifehacker讲述的都是自己看过的书和资源，于是推荐出来，很赞很务实。很赞同他在最后写的那段，也是自己现在正在困扰的，最近很多次的想到妈妈对我的这段劝告“事多不要紧，一件一件做，做这件事时不要管其它的事，不要因为后面有事所以赶着做手头的事，要细心”，看来是时候再去一次古德寺做一次静心陶养之旅了。原文如下： 最近 reddit ...</summary><published>2011-03-06T13:13:00Z</published><updated>2011-03-06T13:13:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972499.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972499.html"/><content type="html">&lt;p&gt;小博注：来自&lt;a href="http://lifesinger.wordpress.com/2011/02/27/references-for-javascript-study/" target="_blank"&gt;JavaScript 学习资源推荐&lt;/a&gt; ，是篇实在的博客，lifehacker讲述的都是自己看过的书和资源，于是推荐出来，很赞很务实。很赞同他在最后写的那段，也是自己现在正在困扰的，最近很多次的想到妈妈对我的这段劝告“&lt;font color="#008000"&gt;&lt;strong&gt;事多不要紧，一件一件做，做这件事时不要管其它的事，不要因为后面有事所以赶着做手头的事，要细心&lt;/strong&gt;&lt;/font&gt;”，看来是时候再去一次古德寺做一次静心陶养之旅了。原文如下：  &lt;hr&gt; 最近 reddit 有讨论：&lt;a href="http://www.reddit.com/r/javascript/comments/fqht8/references_for_javascript_mastery/"&gt;References for JavaScript Mastery&lt;/a&gt;. 去年 Rey Bango 博客上也有一篇文章：&lt;a href="http://blog.reybango.com/2010/12/15/what-to-read-to-get-up-to-speed-in-javascript/"&gt;What to Read to Get Up to Speed in JavaScript&lt;/a&gt;. 下面是我的整理，希望能对你有所帮助。  &lt;p&gt;&lt;strong&gt;登堂入门&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.amazon.com/DOM-Scripting-Design-JavaScript-Document/dp/1430233893/"&gt;DOM Scripting: Web Design with JavaScript and the Document Object Model&lt;/a&gt; – 2005 年，这本书的第一版是我最喜爱的前端书籍之一。知识点的讲解轻松有趣，例子由浅入深，引人入胜。去年发现这本书有第二版了，增加了 HTML5 章节，原有内容也与时俱进。我相信无论新人还是老手，都会发现这是一本好书。  &lt;li&gt;&lt;a href="http://eloquentjavascript.net/"&gt;Eloquent JavaScript&lt;/a&gt; – 这是一本在线书籍，里面的例子都可调试。作者缓缓道来，内容翔实丰富。从 2007 年始，这本书历经四年，直到今年一月份才正式出版。建议国内有志人士翻译成中文，在保证翻译质量的基础上，造福国内前端。  &lt;li&gt;&lt;a href="http://jqfundamentals.com/book/index.html"&gt;jQuery Fundamentals&lt;/a&gt; – Rebecca Murphey 在 github 上维护的这本书，个人觉得是最好的 jQuery 入门教程，没有之一。  &lt;li&gt;&lt;a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742"&gt;JavaScript: The Good Parts&lt;/a&gt; – Douglas Crockford 的这本书薄而精，在不同阶段阅读，会有不一样的收获。建议通读一遍，日常可随意翻翻。  &lt;li&gt;我阅读过的还有几本：&lt;a href="http://http://www.amazon.com/gp/product/047022780X"&gt;Professional JavaScript for Web Developers&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/0321423305"&gt;ppk on JavaScript, 1/e&lt;/a&gt;, &lt;a href="http://www.amazon.com/Object-Oriented-JavaScript-high-quality-applications-libraries/dp/1847194141"&gt;Object-Oriented JavaScript&lt;/a&gt;. 都挺不错的，如果时间精力充沛，不妨读读。特别是 Stoyan Stefanov 的 Object-Oriented JavaScript, 个人觉得是非常好的一本教程式书籍，特别适合已有 OO 编程经验、同时想学习 JavaScript 的开发人员。 &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;更上层楼&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.davidflanagan.com/2011/02/javascript-the.html"&gt;JavaScript: The Definitive Guide&lt;/a&gt; – 学 JavaScript 的如果没读过这本犀牛书，就好像基督教徒没读过圣经一样。此书前面的章节很耐读，后面的语言参考，则方便查阅。这是 JavaScript 语言学习和参考查阅的首选书籍。该书第六版已完成，期待电子版和纸质书早日面世。  &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/1590597273"&gt;Pro JavaScript Techniques&lt;/a&gt; – John Resig 的这本书，展现了 JavaScript 的专业开发技巧。如果想深入了解 jQuery 源码，这本书会非常有帮助。  &lt;li&gt;&lt;a href="http://jsninja.com/"&gt;Secrets of the JavaScript Ninja&lt;/a&gt; – 这本书汇集了前端开发所需掌握的 JavaScript 知识的方方面面，是今年最值得期待的专业书籍之一。目前前 14 章已有电子版，最后 3 章 John Resig 还在编写中。中文版我和沉鱼已经在翻译，敬请期待。  &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/059680279X"&gt;High Performance JavaScript&lt;/a&gt; – 如果你关注 JavaScript 的性能，那 Nicholas C.Zakas 的这本书是绝对值得一读的。  &lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0596806752"&gt;JavaScript Patterns&lt;/a&gt; – 偷懒是程序员的优良品质，模式则是先人们总结的偷懒招式。Stoyan Stefanov 的这本书，从 JavaScript 的实际使用场景出发，提炼了不少可以让前端们偷懒的实用招式。模式的探索、创新，将永远是程序员自我提升的一条修炼之道。  &lt;li&gt;&lt;a href="http://javascript.crockford.com/"&gt;Douglas Crockford’s JavaScript&lt;/a&gt; – Crockford 大牛在 JavaScript 方面的总结，有不少经典文章，值得研读。  &lt;li&gt;&lt;a href="http://bonsaiden.github.com/JavaScript-Garden/"&gt;JavaScript Garden&lt;/a&gt; – 这里汇集了 JavaScript 的一些经典话题，很值得花时间研读。  &lt;li&gt;我阅读过的还有：&lt;a href="http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309/"&gt;High Performance Web Sites&lt;/a&gt;, &lt;a href="http://www.amazon.com/Even-Faster-Web-Sites-Performance/dp/0596522304"&gt;Even Faster Web Sites&lt;/a&gt;, &lt;a href="http://www.amazon.com/HTML5-Up-Running-Mark-Pilgrim/dp/0596806027/"&gt;HTML5 Up and Running&lt;/a&gt;. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;参考查阅&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs"&gt;Mozilla Developer Network&lt;/a&gt; – 这是 Web 开发人员的宝藏，遇到问题建议优先到这里查查，闲时没事也可以到这里逛逛。我相信，作为 Web 开发人员，你会喜欢这里的。  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa155073.aspx"&gt;MSDN Web Development&lt;/a&gt; – 遇到 IE 的兼容性问题时，如果 Google 不能解决，请马上到这里搜索。对前端来说，最经常查阅的是 HTML and CSS 与 Scripting 两部分。不要恨 IE, 一旦你了解了她，你会爱上这个敌人。  &lt;li&gt;ECMA-262 系列：&lt;a href="http://bclary.com/2004/11/07/"&gt;ECMA-262 3rd Edition&lt;/a&gt; 和 &lt;a href="http://people.mozilla.org/~jorendorff/es5.html"&gt;ECMA-262 5th Edition&lt;/a&gt;, 这两个链接都是在线版本，查阅方便。此外非常推荐注释版：&lt;a href="http://es5.github.com/"&gt;Annotated ECMAScript 5.1&lt;/a&gt;, 有阅读笔记和关联链接，适合研读。  &lt;li&gt;还有 W3C 等站点，就不细说了。 &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;订阅关注&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;这个有很多，列举太耗时费力。可以 follow 我的推荐：&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://twitter.com/lifesinger"&gt;lifesinger@twitter&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.google.com/reader/public/atom/user%2F05422701936444684249%2Fstate%2Fcom.google%2Fbroadcast"&gt;lifesinger’s shared items in Google Reader&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Google Reader 里，我的 Shared Items 很谨慎，读过且觉得值得一读或有查阅价值的文章我才会 share. Twitter, 最近用得比较少，有时会推荐一些资源，大家可酌情订阅。在我的 following 里，有一些国内外著名的前端开发人员，推荐大家根据兴趣，选择性 follow.&lt;/p&gt; &lt;p&gt;再推荐一个站点：&lt;a href="http://jsmentors.com/"&gt;JSMentors.com&lt;/a&gt;, 这里收集了不少全世界范围内有影响力的前端导师们，建议选择性订阅。&lt;/p&gt; &lt;p&gt;写在最后&lt;/p&gt; &lt;p&gt;这里只推荐了 JavaScript 相关的学习资源。作为一名前端工程师，还得具备 HTML, CSS, 基本的后台开发知识，以及交互设计等用户体验相关知识。这些方面的学习资源，是另一个话题，以后有机会再和大家讨论分享。上面提到的书籍，是我读过的部分。提到的网站，是我经常光顾的。我相信还有非常多优秀的书籍和网站，期待大家的挖掘和分享了。书籍版本的选择，我的排序是：英文纸质版 &amp;gt; 英文电子版 &amp;gt; 中文高质量翻译版。这只是我个人的一个 taste, 建议根据实际情况，选择合适自己的即可。&lt;/p&gt; &lt;p&gt;国内的原创前端书籍，我仔细看过的只有《&lt;strong&gt;悟透 JavaScript&lt;/strong&gt;》和《&lt;strong&gt;JavaScript 语言精髓与编程实践&lt;/strong&gt;》。翻译类书籍里，只抱着研究翻译的心态，看过部分译稿。如果有英语阅读能力，个人不是很推荐购买译本。目前国内前端译作，个人感觉质量较烂，甚至离及格还有距离。高质量的翻译，需要我们所有前端共同努力了。&lt;/p&gt; &lt;p&gt;最后想提一点：&lt;strong&gt;要让自己有效消费信息，而不要让信息消费你&lt;/strong&gt;。比如书籍，一个阶段，读一两本就好，贪多嚼不烂。学习阶段容易产生焦虑，甚至自我否定，要调整好心态。要明白你花了一晚上可能都没弄明白的一篇博客，作者当初可能花了好几个月才研究整理出来。保持良好的心态，不断挖掘自己的真正兴趣点和擅长点，在自知的基础上自我弥补、自我提升，在自我提升的螺旋中进一步自我认识、自我坚持。这是一种修行，有苦有乐，冷暖自知。付出汗水，登上峰顶，才有可能见到满眼的精彩。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1972499.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972499.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/06/1972489.html</id><title type="text">Nice sites Index list #2</title><summary type="text">我喜欢的教育、学习、在线阅读网站[网易公开课] 在土豆网上可以搜索到海量的公开课视频，iTunes也是，里面可以找到很多公开课，比如我随意搜索的一些，在iTunes里面有一个University部分，里面有太多资源，不赘述。 [豆瓣开放式教育资源共享协会] 里面有网友分享开放大学及课程资源。 [Ted] 你一定懂的… [CoolEn] 看美剧学英语，其实这网站真的还做得蛮好的，双语字幕，还有讲解，不过我实在没有觉得这种方法可以怎样学英语… [ITPUB] 我有图书下载癖好…[新浪共享资料]谁用谁知道，很赞 \^o^/ [艾利和发烧友图书论坛] 韩国出品的电子书的论坛， [千罗网电子书籍]好多好</summary><published>2011-03-06T12:58:00Z</published><updated>2011-03-06T12:58:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972489.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972489.html"/><content type="html">&lt;p&gt;&lt;strong&gt;我喜欢的教育、学习、在线阅读网站&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;[&lt;a href="http://v.163.com/open/" target="_blank"&gt;&lt;strong&gt;网易公开课&lt;/strong&gt;&lt;/a&gt;] 在&lt;a href="http://www.tudou.com" target="_blank"&gt;土豆&lt;/a&gt;网上可以搜索到海量的公开课视频，iTunes也是，里面可以找到很多公开课，比如&lt;a href="http://www.douban.com/note/74216788/" target="_blank"&gt;&lt;strong&gt;我随意搜索的一些&lt;/strong&gt;&lt;/a&gt;，在iTunes里面有一个University部分，里面有太多资源，不赘述。 [&lt;a href="http://www.douban.com/group/opps/" target="_blank"&gt;&lt;strong&gt;豆瓣开放式教育资源共享协会&lt;/strong&gt;&lt;/a&gt;] 里面有网友分享开放大学及课程资源。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.ted.com/" target="_blank"&gt;&lt;strong&gt;Ted&lt;/strong&gt;&lt;/a&gt;] 你一定懂的&amp;hellip;  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.icoolen.com/film" target="_blank"&gt;&lt;strong&gt;CoolEn&lt;/strong&gt;&lt;/a&gt;] 看美剧学英语，其实这网站真的还做得蛮好的，双语字幕，还有讲解，不过我实在没有觉得这种方法可以怎样学英语&amp;hellip;  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.itpub.net/forum-61-1.html?ts=2" target="_blank"&gt;&lt;strong&gt;ITPUB&lt;/strong&gt;&lt;/a&gt;] 我有图书下载癖好&amp;hellip;[&lt;a href="http://iask.sina.com.cn/" target="_blank"&gt;&lt;strong&gt;新浪共享资料&lt;/strong&gt;&lt;/a&gt;]谁用谁知道，很赞 \^o^/ [&lt;a href="http://bbs.iriverfans.com/index.php" target="_blank"&gt;&lt;strong&gt;艾利和发烧友图书论坛&lt;/strong&gt;&lt;/a&gt;] 韩国出品的电子书的论坛， [&lt;a href="http://www.qianluo.com/thread.php?fid-32.html" target="_blank"&gt;&lt;strong&gt;千罗网电子书籍&lt;/strong&gt;&lt;/a&gt;]好多好书下载！  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.guyizhou.cn/default.asp" target="_blank"&gt;&lt;strong&gt;一舟书库&lt;/strong&gt;&lt;/a&gt;] 博主自己推荐佳书，比在[&lt;a href="http://book.douban.com/" target="_blank"&gt;&lt;strong&gt;豆瓣读书&lt;/strong&gt;&lt;/a&gt;]首页看还有意思呢！每次看到都恨不得可以有输入系统直接输进大脑 一v一  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://book.douban.com/writers/" target="_blank"&gt;&lt;strong&gt;豆瓣作家与译者&lt;/strong&gt;&lt;/a&gt;] 是有营养的地方，[&lt;a href="http://site.douban.com/widget/notes/91769/" target="_blank"&gt;&lt;strong&gt;豆瓣经典短篇阅读小站&lt;/strong&gt;&lt;/a&gt;] 太棒了，是下午茶时间喝着咖啡细细品阅享受的佐食！\^o^/ 我都将它放到opera侧边栏去了  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://en.wikipedia.org/wiki/Main_Page" target="_blank"&gt;&lt;strong&gt;Wikipedia&lt;/strong&gt;&lt;/a&gt;] 如果有时间，可以在这儿逛到天荒地老头发花白的吧，为什么不呢？不过《如何阅读一本书》中将百科类分为&lt;span style="text-decoration: underline;"&gt;娱乐类&lt;/span&gt;阅读，不建议花太多时间去读。另外一个我们最亲爱的谷歌出品的[&lt;strong&gt;&lt;a href="http://knol.google.com/k" target="_blank"&gt;Knol&lt;/a&gt;&lt;/strong&gt;]，宣称要吸引人们来贡献，也是一个知识库，值得关注。&lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.ifanshu.com/" target="_blank"&gt;&lt;strong&gt;矮番薯&lt;/strong&gt;&lt;/a&gt;] 我曾多次推荐的啦，不过因为有kindle的关系我现在也较少在网上看书了，它让我喜欢的原因是推荐的书都较值得一读。同类还有 [&lt;a href="http://www.qingfanqie.com/" target="_blank"&gt;&lt;strong&gt;青番茄&lt;/strong&gt;&lt;/a&gt;]和[&lt;a href="http://www.ilovebook.cn/" target="_blank"&gt;&lt;strong&gt;爱书网&lt;/strong&gt;&lt;/a&gt;]  &lt;/li&gt;&#xD;
&lt;li&gt;Slide类的有几个优秀的，[&lt;a href="http://www.slideshare.net/" target="_blank"&gt;&lt;strong&gt;SlideShare&lt;/strong&gt;&lt;/a&gt;] 可以发现很多优秀的presentation（就看热点就受益匪浅），另一个[&lt;strong&gt;&lt;a target="_blank" href="http://www.scribd.com/"&gt;scribd&lt;/a&gt;&lt;/strong&gt;] &amp;nbsp;&lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://ctext.org/analects/zh" target="_blank"&gt;&lt;strong&gt;中國哲學書電子化計劃&lt;/strong&gt;&lt;/a&gt;]，很不错的专针对于中国古典哲学的wiki。 &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;可以提升自己的网站&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.mifengtd.cn/" target="_blank"&gt;&lt;strong&gt;褪墨&lt;/strong&gt;&lt;/a&gt;] 关注时间管理、个人提升和演讲技巧，把事情做到更好。而[&lt;a href="http://www.read.org.cn/" target="_blank"&gt;&lt;strong&gt;战隼的学习探索&lt;/strong&gt;&lt;/a&gt;]则更专注于如何学习记忆等对学习方法的探索。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.ceconlinebbs.com/" target="_blank"&gt;&lt;strong&gt;世界经理人&lt;/strong&gt;&lt;/a&gt;]开拓视野和思想，不局限在自己那方代码世界，里面经常会有一些公开的debate&amp;rdquo;&lt;a href="http://www.ceconlinebbs.com/FORUM_LIST_900001_900130_0_0.HTM" target="_blank"&gt;每周一问&lt;/a&gt;&amp;rdquo;，如果静下心来看评论会觉得很有意思。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://swordi.com/2009/07/17/open_letter_2/" target="_blank"&gt;&lt;strong&gt;大学小容@善用网络&lt;/strong&gt;&lt;/a&gt;] 一个注重提升的个人博客  &lt;/li&gt;&#xD;
&lt;li&gt;有自己的方法去使用好软件的人会天天偷着乐的，[&lt;a href="http://xbeta.info/" target="_blank"&gt;&lt;strong&gt;善用佳软&lt;/strong&gt;&lt;/a&gt;] 如今这年月，像这样潜心研究那些不新潮、实用的、为数不多的软件并志于帮助大家的国内网站不多了。  &lt;/li&gt;&#xD;
&lt;li&gt;要智力超群吗？那还得去这儿了，[&lt;a href="http://www.iqsuperman.net/" target="_blank"&gt;&lt;strong&gt;IQ超人&lt;/strong&gt;&lt;/a&gt;] 我四年前就推荐了，最早是因为密室逃脱和反射镜系列，有了它还买什么3厘米厚的智力题库书呢？这儿就是最方便的，还能和同好们交流。  &lt;/li&gt;&#xD;
&lt;li&gt;爱youtube爱[&lt;a href="http://yesli.pv.land.to/" target="_blank"&gt;&lt;strong&gt;你管索引&lt;/strong&gt;&lt;/a&gt;]，它可真是打一枪换个地儿，还有什么比这群最可爱值得尊敬的互联网信息传播者更让人喜不自禁的呢？以后若是它又换地址了，搜索你管索引就好了，其实&lt;a href="http://www.youtube.com" target="_blank"&gt;youtube&lt;/a&gt;是一个很好的学习平台，祈祷它在中国能够继续生存下去。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.cheers.com.tw/index.jspx" target="_blank"&gt;&lt;strong&gt;Cheers快樂工作人雜誌&lt;/strong&gt;&lt;/a&gt;] 一个来自台湾的专门针对职场的在线杂志，文章都很精品，收藏了它至少2年，真的是很不错，台灣有不少雜誌都值得一讀，我喜歡他們保有中國傳統文化的那部分，台灣文學輕清怡人，尤其是輕文學。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.psytopic.com/mag/" target="_blank"&gt;&lt;strong&gt;Psytopic心理学从这里开始&lt;/strong&gt;&lt;/a&gt;] 关注心灵成长，至少要懂得处理自己的负面情绪，作到合理的心理减压，这儿可以找到你所需要的。[&lt;a href="http://www.lansin.com/" target="_blank"&gt;&lt;strong&gt;蓝心网&lt;/strong&gt;&lt;/a&gt;]也是前辈了。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://girlscountry.com/" target="_blank"&gt;&lt;strong&gt;女儿国时尚杂志&lt;/strong&gt;&lt;/a&gt;] 感谢互联网，让我们能面对电脑却坐拥全世界书城，\^_^/ 举手欢呼！[&lt;a href="http://online.zcom.com/" target="_blank"&gt;&lt;strong&gt;ZCOM&lt;/strong&gt;&lt;/a&gt;] 是电子杂志的前辈了，不过不少都是收费。其实又有什么能比 [&lt;a href="http://www.verycd.com/sto/datum/magazine/" target="_blank"&gt;&lt;strong&gt;verycd杂志期刊&lt;/strong&gt;&lt;/a&gt;] 更让人眼花缭乱呢? 不过请在资源下载前适时止步。  &lt;/li&gt;&#xD;
&lt;li&gt;怀念当年深图六楼有[&lt;a href="http://www.emba.com.tw/" target="_blank"&gt;&lt;strong&gt;台湾EMBA期刊&lt;/strong&gt;&lt;/a&gt;]可读。这儿有更详细的[&lt;a href="http://wiki.mbalib.com/wiki/首页" target="_blank"&gt;&lt;strong&gt;MBA智库百科&lt;/strong&gt;&lt;/a&gt;]，里面都是包罗万象。 &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;其它&lt;/strong&gt; &lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.time.com/time/specials/packages/completelist/0,29569,1999770,00.html" target="_blank"&gt;&lt;strong&gt;TIMES评选的2010年最佳英文博客&lt;/strong&gt;&lt;/a&gt;] 每一个都值得订阅呢，新闻的话，我们老大喜欢看[&lt;a href="http://www.yahoo.com" target="_blank"&gt;&lt;strong&gt;Yahoo&lt;/strong&gt;&lt;/a&gt;]说里面的评论都很精彩。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.stumbleupon.com/home/" target="_blank"&gt;&lt;strong&gt;StumbleUpon&lt;/strong&gt;&lt;/a&gt;] 我现在最喜欢的网络收藏夹，在里面找到不少好东西呢，&lt;a href="http://www.stumbleupon.com/stumbler/syveen/" target="_blank"&gt;&lt;strong&gt;我的&lt;/strong&gt;&lt;/a&gt;。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.dzone.com/links/index.html" target="_blank"&gt;&lt;strong&gt;DZone&lt;/strong&gt;&lt;/a&gt;] 程序员要看的feed，[&lt;a href="http://snippets.dzone.com/" target="_blank"&gt;&lt;strong&gt;Code Snippets @DZone&lt;/strong&gt;&lt;/a&gt;]  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://weread.com/read-online/" target="_blank"&gt;&lt;strong&gt;weread&lt;/strong&gt;&lt;/a&gt;] 读英文书的用户体验很不错的说，这种网站对我来说一个就足够了平时读英文古典文学的机会实在是太少了。 最受推崇的英文图书免费下载站[&lt;a href="http://www.gutenberg.org/browse/scores/top" target="_blank"&gt;&lt;strong&gt;gutenburg top 100&lt;/strong&gt;&lt;/a&gt;]，[&lt;a href="http://www.mininova.org/sub/51" target="_blank"&gt;&lt;strong&gt;AudioBooks&lt;/strong&gt;&lt;/a&gt;] 有声书前辈了，笑来在&lt;a href="Audiobook 收集推荐帖" target="_blank"&gt;这篇贴中&lt;/a&gt;介绍了他感兴趣的资源。  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.notepad.cc/" target="_blank"&gt;&lt;strong&gt;Notepad.cc&lt;/strong&gt;&lt;/a&gt;] 它用来协作写作不错，可惜就是不可以存链接，只能自己去管理，比如我就建了一个收藏夹专门用来存放我建立的notepad，现在基本都使用Opera note来替代它了&amp;hellip;  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://xianguo.com/hot" target="_blank"&gt;&lt;strong&gt;鲜果网热点&lt;/strong&gt;&lt;/a&gt;] 开拓视野 [&lt;a href="http://www.geekpark.net/" target="_blank"&gt;&lt;strong&gt;极客公园&lt;/strong&gt;&lt;/a&gt;] 都是与IT有关的新闻；  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.stackoverflow.com" target="_blank"&gt;&lt;strong&gt;StackOverflow&lt;/strong&gt;&lt;/a&gt;] 我爱死这个计算机坛子了！这坛子的大牛们我对你们致以无限崇拜和敬意，感谢你们！喜欢&lt;a href="http://programmers.stackexchange.com/" target="_blank"&gt;&lt;strong&gt;programmer分舵&lt;/strong&gt;&lt;/a&gt;。里面还有家务类的 \^O^/  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://longurl.org/" target="_blank"&gt;&lt;strong&gt;LongUrl&lt;/strong&gt;&lt;/a&gt;] 有用的工具一枚，有时twitter什么的的短址被墙了就没办法看了，可以用它来转成短址，我的opera侧边栏工具之一； &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://alternativeto.net/software/evernote/" target="_blank"&gt;&lt;strong&gt;Alternativeto&lt;/strong&gt;&lt;/a&gt;] 寻找替代软件/网站  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://toran.cn" target="_blank"&gt;&lt;strong&gt;突然网&lt;/strong&gt;&lt;/a&gt;] 可以分享文字/代码（支持高亮）/短址化/上传支持外链的图片/音乐/视频/文件等等，并生成短址，这网站存活好多年了，这是让我最意外的&amp;hellip;一般国产的这种网站都比较容易死链了，它还是可以相信的吧&lt;img style="border-style: none;"  alt="Smile with tongue out" src="http://images.cnblogs.com/cnblogs_com/syveen/201103/201103062234065983.png" /&gt; 要保存以前&amp;ldquo;突然&amp;rdquo;过的资源的话，得注册，不过不注册也能使用的，这已经被我扔到opera的侧边栏了。 &#xD;
&lt;ul&gt;&#xD;
&lt;!--EndFragment--&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;趣站&lt;/strong&gt; - 我是很爱玩的，尤其是爱玩图片站&amp;hellip;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;[&lt;a href="http://topit.me/" target="_blank"&gt;&lt;strong&gt;Topit.me&lt;/strong&gt;&lt;/a&gt;] 太好玩了的图片站了！喜欢喜欢，可以搜索  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.zefrank.com/scribbler/scribblertoo/" target="_blank"&gt;&lt;strong&gt;Scribblertoo&lt;/strong&gt;&lt;/a&gt;] 太好玩了~可以在上面画好玩的东西。这个[&lt;a href="http://soytuaire.labuat.com/" target="_blank"&gt;&lt;strong&gt;秒笔生花&lt;/strong&gt;&lt;/a&gt;]也类似的喔  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.wolframalpha.com/" target="_blank"&gt;&lt;strong&gt;WolframAlpha&lt;/strong&gt;&lt;/a&gt;]  &lt;/li&gt;&#xD;
&lt;li&gt;[&lt;a href="http://www.thingstobehappyabout.com/index.php" target="_blank"&gt;&lt;strong&gt;Things to be happy about&lt;/strong&gt;&lt;/a&gt;] 快乐的事，应该每天记录~ &lt;/li&gt;&#xD;
&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1972489.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972489.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/06/1972275.html</id><title type="text">如何实现单词拼写检查 (spellChecker) ？</title><summary type="text">前两天，有位同事提到她做过的一个功能，在线实现单词检查，若单词有误，给出建议清单，她使用的方法是下载单词库，转为xml，在VB.NET中使用查找与loop，并且要支持多语种。我当时听到，觉得应该有更快的方法，就查了查，果然让我查到已有人开发出使用jQuery调用Google Dictionary API的现成方法， Demo: http://spellchecker.jquery.badsyntax.co.uk/ 问题就是：Google服务是否是她客户认同的 demo中的web service禁止外站使用，那就得自己在自己的项目中植入web service 示例中的checkspeller.p</summary><published>2011-03-06T06:18:00Z</published><updated>2011-03-06T06:18:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972275.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972275.html"/><content type="html">&lt;p&gt;前两天，有位同事提到她做过的一个功能，在线实现单词检查，若单词有误，给出建议清单，她使用的方法是下载单词库，转为xml，在VB.NET中使用查找与loop，并且要支持多语种。我当时听到，觉得应该有更快的方法，就查了查，果然让我查到已有人开发出使用jQuery调用Google Dictionary API的现成方法， &lt;br /&gt;Demo: &lt;a href="http://spellchecker.jquery.badsyntax.co.uk/"&gt;http://spellchecker.jquery.badsyntax.co.uk/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;问题就是：&lt;/p&gt;&#xD;
&lt;li&gt;Google服务是否是她客户认同的 &lt;/li&gt;&#xD;
&lt;li&gt;demo中的web service禁止外站使用，那就得自己在自己的项目中植入web service &lt;/li&gt;&#xD;
&lt;li&gt;示例中的checkspeller.php是用PHP实现的，而我们需要使用C#/VB.NET写Web service，这样的话性能是否能保证&#xD;
&lt;p&gt;她后来确实找到一个将此PHP转换成C# Web Service，可速度明显变慢，为何？ &lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;br /&gt;关于jQuery SpellChecker的相关文章： &lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/jquery-spellchecker/"&gt;http://code.google.com/p/jquery-spellchecker/&lt;/a&gt; &lt;br /&gt;&lt;a href="http://github.com/brandonaaron/jquery-spellcheck"&gt;http://github.com/brandonaaron/jquery-spellcheck&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Further Reading: &lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;老外写的C# SpellChecker控件， &lt;br /&gt;&lt;a target="_blank" href="http://www.codeproject.com/KB/architecture/NHunspellComponent.aspx"&gt;NHunspell Component for Visual Studio&lt;/a&gt;， &lt;br /&gt;&lt;a target="_blank" href="http://www.codeproject.com/KB/aspnet/NHunSpell-with-jQuery.aspx"&gt;Using NHunSpell in ASP.Net with JSON web service and jQuery&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.allimilla.com//wp-content/gallery/inblog/d6cbb50c7fd0_7D44/wlEmoticonfingerscrossed.png" alt="Fingers crossed"  style="border-style: none;" /&gt;&amp;nbsp; &lt;br /&gt;&lt;a target="_blank" href="http://www.reynoldsftw.com/2009/03/8-jquery-plugins-that-utilize-google-apis/"&gt;&lt;strong&gt;其它Google API与jQuery的应用&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Spell_checker"&gt;&lt;strong&gt;http://en.wikipedia.org/wiki/Spell_checker&lt;/strong&gt;&lt;/a&gt;&lt;/blockquote&gt;&#xD;
&lt;/li&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1972275.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972275.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/06/1972272.html</id><title type="text">由Suggestion衍生出来的算法学习</title><summary type="text">今天在StackOverflow上看到有人问，Google的“Did you mean?”的算法是怎样的，相关的spellchecker的算法讨论也有，这个很有趣，大学时学过不少Sort Algorithm的东西，可是都忘记了，还记得以前面试考官要考算法似乎永远都离不开排序算法，于是决定好好补习一下数据和算法，想学的东西真的太多，可一桩一桩的来，又一桩一桩的忘，有幸的是有blog，好记性不如烂笔头，欠的知识还得补回来。Suggestion与算法How does the Google “Did you mean?” Algorithm work? How to Write a Spelling </summary><published>2011-03-06T06:16:00Z</published><updated>2011-03-06T06:16:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972272.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972272.html"/><content type="html">&lt;p&gt;今天在StackOverflow上看到有人问，Google的&amp;ldquo;Did you mean?&amp;rdquo;的算法是怎样的，相关的spellchecker的算法讨论也有，这个很有趣，大学时学过不少Sort Algorithm的东西，可是都忘记了，还记得以前面试考官要考算法似乎永远都离不开排序算法，于是决定好好补习一下数据和算法，想学的东西真的太多，可一桩一桩的来，又一桩一桩的忘，有幸的是有blog，好记性不如烂笔头，欠的知识还得补回来。&lt;/p&gt;&#xD;
&lt;p&gt;Suggestion与算法&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/307291/how-does-the-google-did-you-mean-algorithm-work"&gt;How does the Google &amp;ldquo;Did you mean?&amp;rdquo; Algorithm work?&lt;/a&gt; &lt;br /&gt;&lt;a target="_blank" href="http://www.norvig.com/spell-correct.html"&gt;How to Write a Spelling Corrector&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;提到算法，WikiPedia有详细文库： &lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Bubble_sort"&gt;Sort Algorithm&lt;/a&gt; &lt;br /&gt;这儿有个&lt;a target="_blank" href="http://laobubu.youtaba.tk/ng/watch.php?id=JPyuH4qXLZ0"&gt;MIT关于算法的系列讲座&lt;/a&gt; &lt;br /&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Tree_traversal"&gt;Free Traversal&lt;/a&gt; &lt;br /&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Insertion_sort"&gt;Insertion Sort&lt;/a&gt; &lt;br /&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Bubble_sort"&gt;Bubble Sort&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1972272.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972272.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/06/1972269.html</id><title type="text">使用简单的反射技术重构组合查询串功能</title><summary type="text">我现在需要做的一件事就是重构一下以前的Legacy code稍稍重构下，那代码非常不容易读，做的事就是高级查询，用户选什么就提取什么，然后使用”|“符号分隔并入库，这样的话，就有很多个不同的组合，维护起来不容易而且代码重复性很高，我只是想小小的重构一下，重做了这个类，用了点反射的技术。1. 我定义了一个枚举存放高级查询的组合类别，比如”高级查询“和”简易查询“； 2. 使用Generic List将对应的属性名称存进组合类别对应的函数中 3. 定义ToString()，使用反射得到组合中的属性字符串对应的真实值，并组合生成bar-separated string 4.在构造函数或对象初始器(O</summary><published>2011-03-06T06:15:00Z</published><updated>2011-03-06T06:15:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972269.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972269.html"/><content type="html">&lt;p&gt;我现在需要做的一件事就是重构一下以前的Legacy code稍稍重构下，那代码非常不容易读，做的事就是高级查询，用户选什么就提取什么，然后使用&amp;rdquo;|&amp;ldquo;符号分隔并入库，这样的话，就有很多个不同的组合，维护起来不容易而且代码重复性很高，我只是想小小的重构一下，重做了这个类，用了点反射的技术。&lt;/p&gt;&#xD;
&lt;p&gt;1.&amp;nbsp; 我定义了一个枚举存放高级查询的组合类别，比如&amp;rdquo;高级查询&amp;ldquo;和&amp;rdquo;简易查询&amp;ldquo;； &lt;br /&gt;2. 使用Generic List将对应的属性名称存进组合类别对应的函数中 &lt;br /&gt;3. 定义ToString()，使用反射得到组合中的属性字符串对应的真实值，并组合生成bar-separated string &lt;br /&gt;4.在构造函数或对象初始器(Object Initializer)中，设定相对应组合中的属性字符串对应的属性值 &lt;br /&gt;5.使用LINQ的ForEach遍历List值（再一次让我想到jQuery中的each，类似）&lt;span face="Georgia" style="font-family: Georgia;"&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;!--more--&gt;&#xD;
&lt;p&gt;&lt;div  style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Code Snippet&lt;/div&gt;&#xD;
&lt;div style="background: #fff; overflow: auto; max-height: 300px;"&gt;&lt;ol style="padding-right: 0px; padding-left: 5px; background: #f0fbfb; padding-bottom: 0px; margin: 0px; padding-top: 0px;"&gt;&#xD;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;UserSearch&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;{ &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;char&lt;/span&gt; _delimetor = &lt;span style="color: #a31515;"&gt;'|'&lt;/span&gt;; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;enum&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SearchMode&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SimpleSearch, &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AdvancedSearch &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; IsAdvancedSearch { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000;"&gt;// Items (leave all properties 'string' type)&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000;"&gt;// ETODO: make it generic in Type&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ProductFamily { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ProductGroup { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ProductSubGroup { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ProductName { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; DocNumber { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; DocTitle { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; DocType { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ReleaseDTOp { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ReleaseDTStartString { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ReleaseDTEndString { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ContentSearch { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; SearchTypeIdString { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; SearchText { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; UserSearch() &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Note: sequence and nameings are important&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt; ClassPropertiesForAdvancedSearch &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt;() &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ProductFamily"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ProductGroup"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ProductName"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"DocNumber"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"DocTitle"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"DocType"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ReleaseDTOp"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ReleaseDTStartString"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ReleaseDTEndString"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ProductSubGroup"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"ContentSearch"&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Note: sequence and nameings are important&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt; ClassPropertiesForSimpleSearch &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt;() &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"SearchTypeIdString"&lt;/span&gt;, &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #a31515;"&gt;"SearchText"&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt; GetListBySearchMode(SearchMode searchMode) &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt; properties; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt; ((&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)searchMode) &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)SearchMode.SimpleSearch: &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties = ClassPropertiesForSimpleSearch; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)SearchMode.AdvancedSearch: &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties = ClassPropertiesForAdvancedSearch; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;default&lt;/span&gt;: &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt;(); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; properties; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Get bar-separated UIString from UserSearch object &lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;bar-separated UIString&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;remarks&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; ETODO: refactor 'FrDocument.aspx.cs' -&amp;gt; BtnSearch_Click&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; GetUIString(SearchMode searchMode) &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; userSearchString = &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt; properties = GetListBySearchMode(searchMode); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties.ForEach(d =&amp;gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; property = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.GetType().GetProperty(d); &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userSearchString += &lt;span style="color: #a31515;"&gt;"|"&lt;/span&gt; + property.GetValue(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;).ToString(); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; userSearchString.Trim(_delimetor); &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Get UserSearch object from UIString (bar-separated string)&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;UserSearch&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; UserSearch GetFromUIString(SearchMode searchMode, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; UIString) &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UIString = UIString.Trim(_delimetor); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserSearch userSearch = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; UserSearch(); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] ar = UIString.Split(_delimetor); &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt; properties = GetListBySearchMode(searchMode); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = 0; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; properties.ForEach(d =&amp;gt; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; property = userSearch.GetType().GetProperty(d); &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; property.SetValue(userSearch, ar[i], &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i++; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; userSearch; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;设置完后，如下使用：&lt;/p&gt;&#xD;
&lt;div  style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;Code Snippet&lt;/div&gt;&#xD;
&lt;div style="background: #fff; overflow: auto; max-height: 500px;"&gt;&lt;ol style="padding-right: 0px; padding-left: 5px; background: #effafa; padding-bottom: 0px; margin: 0px; padding-top: 0px;"&gt;&#xD;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ActiveNodePrefix == WebLib.DownloadMenuItem.SimpleSearchPrefix) &lt;/li&gt;&#xD;
&lt;li &gt;{ &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; searchString = ActiveNode.Substring(ActiveNode.IndexOf(&lt;span style="color: #a31515;"&gt;'|'&lt;/span&gt;), ActiveNode.Length - ActiveNode.IndexOf(&lt;span style="color: #a31515;"&gt;'|'&lt;/span&gt;)); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserSearch userSearch = UserSearch.GetFromUIString( &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserSearch.SearchMode.SimpleSearch, &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; searchString); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; SearchSelectionString = userSearch.SearchTypeIdString; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; searchSelectionId = SearchSelectionString == &lt;span style="color: #a31515;"&gt;""&lt;/span&gt; ? 0 : &lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToInt32(SearchSelectionString); &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; SearchString = userSearch.SearchText; &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;xSearchType&amp;gt; selectTypes = UserSearch.GetSearchTypesList(&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;); &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; selectType &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; selectTypes) &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (searchSelectionId == selectType.SearchTypeId) &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LblTitle.Text = &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"Search {0}: {1}"&lt;/span&gt;, selectType.SearchTypeName, SearchString + &lt;span style="color: #a31515;"&gt;""&lt;/span&gt;); &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;; &lt;/li&gt;&#xD;
&lt;li &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/li&gt;&#xD;
&lt;/ol&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;span face="Georgia" style="font-family: Georgia;"&gt;&lt;br /&gt;&lt;br /&gt;这么怎么着都比以前看着清爽容易理解了，而且维护接口集中 &lt;img src="http://www.allimilla.com//wp-content/gallery/inblog/C3.0LINQ_10A49/wlEmoticonsmile.png" alt="Smile"  style="border-style: none;" /&gt;&lt;/span&gt; 其实还可以优化，将属性存为枚举，这样以后字符串有改动，比较容易track，有米有更好的解决方案呢？&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1972269.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972269.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/06/1972268.html</id><title type="text">3 Useful BookmarkLets for Debugging</title><summary type="text">2011年3月6日更新：使用Firebug的plugin，目前用过最有用的有：jquerify, cookie, auto-complete, inspector，有空我会写一个我使用firebug的经验分享。现在的开发资源越来越多，工具越来越强大了，下面三个收藏可以让开发更方便，直接将网址拖到收藏栏，需要用到时点开就行，不限浏览器，IE中也能使用fireBug了。1. CSS/Element Selector – SelectGadget CSS选择器，用过就知道 Drag SelectGadget to your Favorate Bar, and press it when you vi</summary><published>2011-03-06T06:14:00Z</published><updated>2011-03-06T06:14:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972268.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972268.html"/><content type="html">2011年3月6日更新：使用Firebug的plugin，目前用过最有用的有：jquerify, cookie, auto-complete, inspector，有空我会写一个我使用firebug的经验分享。&lt;br /&gt;&#xD;
&lt;p&gt;现在的开发资源越来越多，工具越来越强大了，下面三个收藏可以让开发更方便，直接将网址拖到收藏栏，需要用到时点开就行，不限浏览器，IE中也能使用fireBug了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1. CSS/Element Selector &amp;ndash; &lt;/strong&gt;&lt;a target="_blank" href="http://www.selectorgadget.com/"&gt;&lt;strong&gt;SelectGadget&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt; &lt;br /&gt;CSS选择器，用过就知道 &lt;br /&gt;&lt;br /&gt;&lt;img height="221" width="660" src="http://www.allimilla.com//wp-content/gallery/inblog/8baf95a503e2_1312A/image_4.png" alt="image" border="0" title="image"  style="margin: 0px; display: inline; border-width: 0px;" /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Drag &lt;a href="javascript:(function(){var s=document.createElement('div');s.innerHTML='Loading...';s.style.color='black';s.style.padding='20px';s.style.position='fixed';s.style.zIndex='9999';s.style.fontSize='3.0em';s.style.border='2px solid black';s.style.right='40px';s.style.top='40px';s.setAttribute('class','selector_gadget_loading');s.style.background='white';document.body.appendChild(s);s=document.createElement('script');s.setAttribute('type','text/javascript');s.setAttribute('src','http://www.selectorgadget.com/stable/lib/selectorgadget.js?raw=true');document.body.appendChild(s);})();"&gt;&lt;strong&gt;&lt;span style="background-color: #cccccc;"&gt;SelectGadget&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt; to your Favorate Bar, and press it when you visit the page you want to debug.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;2. Use &lt;/strong&gt;&lt;a target="_blank" href="http://getfirebug.com/firebuglite"&gt;&lt;strong&gt;Firebuglite&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; at IE7.0&amp;nbsp; &lt;/strong&gt;&lt;br /&gt;在IE中使用Firebug，只需要&lt;a target="_blank" href="javascript:var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);"&gt;收藏此网址&lt;/a&gt;即可。 &lt;br /&gt;&lt;br /&gt;&lt;img height="387" width="661" src="http://www.allimilla.com//wp-content/gallery/inblog/8baf95a503e2_1312A/image_5.png" alt="image" border="0" title="image"  style="margin: 0px; display: inline; border-width: 0px;" /&gt; &lt;br /&gt;&lt;br /&gt;Drag &lt;a href="javascript:var firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);"&gt;&lt;strong&gt;&lt;span style="background-color: #cccccc;"&gt;Firebug&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;span style="background-color: #cccccc;"&gt; &lt;/span&gt;to your Favorate Bar, and press it when you visit the page you want to debug&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. Add jQuery library by Bookmark &amp;ndash; &lt;/strong&gt;&lt;a target="_blank" href="http://www.learningjquery.com/2006/12/jquerify-bookmarklet"&gt;&lt;strong&gt;jQuerify bookmarklet&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;br /&gt;&lt;/strong&gt;给任何网上临时加上jQuery库 &lt;br /&gt;&lt;em&gt;&lt;span color="#0000ff" style="color: #0000ff;"&gt;Just look into the post, there tells you how to have Firebug be a powerful tool to learn and debug jQuery&lt;/span&gt;&lt;/em&gt; &lt;br /&gt;&lt;img src="http://www.learningjquery.com/wp-content/uploads/2006/12/google-jquerified.png" alt="google jquerified" /&gt; &lt;br /&gt;&lt;br /&gt;Drag &lt;a href="javascript:%20(function(){var%20el=document.createElement('div'),b=document.getElementsByTagName('body')[0];otherlib=false,msg='';el.style.position='fixed';el.style.height='32px';el.style.width='220px';el.style.marginLeft='-110px';el.style.top='0';el.style.left='50%';el.style.padding='5px%2010px%205px%2010px';el.style.zIndex=1001;el.style.fontSize='12px';el.style.color='#222';el.style.backgroundColor='#f99';if(typeof%20jQuery!='undefined'){msg='This%20page%20already%20using%20jQuery%20v'+jQuery.fn.jquery;return%20showMsg();}else%20if(typeof%20$=='function'){otherlib=true;}%20function%20getScript(url,success){var%20script=document.createElement('script');script.src=url;var%20head=document.getElementsByTagName('head')[0],done=false;script.onload=script.onreadystatechange=function(){if(!done&amp;amp;&amp;amp;(!this.readyState||this.readyState=='loaded'||this.readyState=='complete')){done=true;success();}};head.appendChild(script);}%20getScript('http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js',function(){if(typeof%20jQuery=='undefined'){msg='Sorry,%20but%20jQuery%20wasn\'t%20able%20to%20load';}else{msg='This%20page%20is%20now%20jQuerified%20with%20v'+jQuery.fn.jquery;if(otherlib){msg+='%20and%20noConflict().%20Use%20$jq(),%20not%20$().';}}%20return%20showMsg();});function%20showMsg(){el.innerHTML=msg;b.appendChild(el);window.setTimeout(function(){if(typeof%20jQuery=='undefined'){b.removeChild(el);}else{jQuery(el).fadeOut('slow',function(){jQuery(this).remove();});if(otherlib){$jq=jQuery.noConflict();}}},2500);}})();"&gt;&lt;strong&gt;&lt;span style="background-color: #cccccc;"&gt;jQuerify&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt; to your Favorate Bar and press it when you visit the page you want to debug.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;- 07/14/2010 Elaine Shi (&lt;a href="mailto:syveen@gmail.com"&gt;syveen@gmail.com&lt;/a&gt;) @syveen&lt;/p&gt;&#xD;
&lt;p&gt;参考： &lt;br /&gt;A&lt;a target="_blank" href="http://ajaxian.com/by/topic/debugging"&gt;jaxian &amp;gt; debugging&lt;/a&gt; &lt;br /&gt;&lt;a target="_blank" href="http://www.learningjquery.com/2006/12/jquerify-bookmarklet"&gt;Learn jQuery&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1972268.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972268.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/syveen/archive/2011/03/06/1972267.html</id><title type="text">初始Agile Software Development</title><summary type="text">几年前就经常听过结对编程、每日构建、XP极限编程、Agile和Scrum了，可从未好好去了解它，纸上谈兵对我来说实在是件很难的事。可是，在接触到现在的外包项目一年后，我才在上个月后知后觉的发现，这个项目就是典型得不能再典型的Agile敏捷迭代模式，并开始对敏捷开发兴趣浓浓，力争要全面了解它，包括各种methodologies。之前在网上下载了好几本关于Agile与Scrum，还有了解了日本丰田Toyota的kanban，并再延续着看了个人敏捷管理等，吸收了一些如何管理个人、任务和时间的知识和方法论。Agile和Scrum的书是多，可是一开始就觉得都太偏重应用了，于是今天就从下午3点起，开始在w</summary><published>2011-03-06T06:11:00Z</published><updated>2011-03-06T06:11:00Z</updated><author><name>嘉瑜</name><uri>http://www.cnblogs.com/syveen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972267.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972267.html"/><content type="html">&lt;p&gt;几年前就经常听过结对编程、每日构建、XP极限编程、Agile和Scrum了，可从未好好去了解它，纸上谈兵对我来说实在是件很难的事。可是，在接触到现在的外包项目一年后，我才在上个月后知后觉的发现，这个项目就是典型得不能再典型的Agile敏捷迭代模式，并开始对敏捷开发兴趣浓浓，&lt;strong&gt;力争要全面了解它，包括各种methodologies。&lt;/strong&gt;之前在网上下载了好几本关于Agile与Scrum，还有了解了日本丰田Toyota的&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Kanban"&gt;kanban&lt;/a&gt;，并再延续着看了个人敏捷管理等，吸收了一些如何管理个人、任务和时间的知识和方法论。Agile和Scrum的书是多，可是一开始就觉得都太偏重应用了，于是今天就从下午3点起，开始在wiki上从&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile software development&lt;/a&gt;开始一路了解，里面涉及到敏捷开发及XP等各种要求、各种方法论，不同方法的利弊等，为我展开了一处不算全新却很系统的画卷，让我能够为之后看此类书籍打下基础。在浏览的过程中，也手记了一些笔记，这儿粗略的整理一下。（实际上，自己去自行浏览，更好，帮助更大，这只是一篇wiki浏览笔记，我仅结合自身项目经验及能力，来记下其中我认为值得记录的）。&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/Agile_Software_Development_methodology.jpg/320px-Agile_Software_Development_methodology.jpg" align="right" style="margin: 20px 0px 0px 10px; display: inline; float: right;" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile Software Development&lt;/a&gt; 在2001年被提出，敏捷软件开发是基于迭代及增量开发的软件开发方法论的组合，在&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Self-organization#Self-organization_in_agile_software_development"&gt;自组织&lt;/a&gt;和&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Cross-functional_team"&gt;跨功能&lt;/a&gt;的团队的协作过程中，这些方法论的需求和解决方案不断进化。 &lt;br /&gt;每个敏捷迭代中的流程都是完整的，从planning, requirement analysis, quote, prioritize, design, test case, coding, unit testing, acceptance test, code review, release, working，全部在一个周期在 1~4周的迭代中完成，如右图。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Agile声明中提到的12条准则为 （Twelve principles underlie the Agile Manifesto）：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1. 客户满意于快速交付可用软件； &lt;br /&gt;2. 欢迎客户改变需求，即使是发生在开发后期； &lt;br /&gt;3. 可频繁发布软件（周期按周而非月）； &lt;br /&gt;4. 用实际运行的软件来衡量迭代流程的规则； &lt;br /&gt;5. 可持续的开发，能被规律性的维护； &lt;br /&gt;6. 业务人员及开发人员每日近距离协作； &lt;br /&gt;7. 面对面沟通是沟通的最佳形式（即一同工作）； &lt;br /&gt;8. 项目成员要主动积极且可被信任； &lt;br /&gt;9. 连续性关注技术和设计； &lt;br /&gt;10. 简化； &lt;br /&gt;11. 自组织（self-organizing）团队； &lt;br /&gt;12. 定期调整以改变结果。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Agile团队的局限性：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1. 敏捷团队通常都为5~9人，不宜过多比如多于20人，不过也有大型项目的敏捷成功案例，将大项目分割为多个小项目感觉也可以避免； &lt;br /&gt;2. 离岸也会对敏捷造成不利影响，不过我目前的项目就正是离岸外包项目，感觉进行得目前为止还算顺畅，保持沟通顺畅且人员较少可避免；WIKI上有一段"the offshore team. . . should have expertise, experience, good communication skills, inter-cultural understanding, trust and understanding between members and groups and with each other."，&lt;a target="_blank" href="http://martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;有一篇&lt;a target="_blank" href="http://martinfowler.com/articles/agileOffshore.html"&gt;关于如何对离岸offshore实施agile开发的文章&lt;/a&gt;。 &lt;br /&gt;3. 100%不能允许错误发生的项目，比如外科手术项目； &lt;br /&gt;4. 如果团队成员本身不够能力敏捷，则不宜强行实施敏捷&lt;span color="#008000" style="color: #008000;"&gt;，agile需要的团队为少而精且人人都能自行管理并且是能cross-functional，还可能涉及到对不同文化的认可和适应。（如果了解一下&lt;a target="_blank" href="http://www.javaeye.com/jobs/1135"&gt;ThoughtWorks对高级.net开发人员的JD&lt;/a&gt;, 就能大概了解agile对团队成员的要求了）。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;敏捷方法不涉及到很大的任务，主张将大任务分解为小任务，来进行短期迭代。项目成员需要能够自组织（self-organizint）和跨功能（cross-functional），而&lt;strong&gt;不需要去理会管理的组织结构及每个成员的项目职责，人人均能自行全面负责被分配的任务（在一文中，agile也被定义为anti-management），&lt;/strong&gt;并能参与面对面的每日会议（对offshore，则需要每日邮件,voice meeting等），向团队汇报前日工作并确定当天工作内容 - 参会人员中通常会有一名&lt;strong&gt;客户代表&lt;/strong&gt;(customer respective)来确认需求优先级、及观察和审核agile流程和内容，并能回答迭代过程中出现的问题。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span color="#008000" style="color: #008000;"&gt;&lt;strong&gt;在迭代过程中，可利用到一些提升编码质量和提高项目敏捷的技术、工具和方法，&lt;/strong&gt;&lt;/span&gt;如&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;&lt;strong&gt;continuous integration&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, automated or &lt;/strong&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/XUnit"&gt;&lt;strong&gt;xUnit test&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; (如NUnit), &lt;/strong&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Pair_programming"&gt;&lt;strong&gt;pair programming&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Test_driven_development"&gt;&lt;strong&gt;test driven development&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)"&gt;&lt;strong&gt;design patterns&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Domain-driven_design"&gt;&lt;strong&gt;domain-driven design&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, &lt;/strong&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Refactoring"&gt;&lt;strong&gt;code refactoring&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;开发方法总体而言分为两种，一种是&lt;strong&gt;adaptive&lt;/strong&gt;，即根据需求随时调整开发适应需求变化，都是短期任务；另一种是&lt;strong&gt;predictive&lt;/strong&gt;，关注详细的计划，可以非常具体明确的对整个开发过程做出计划，开发过程中很难调整方向，因为整体计划已经根据初期目标决定好，一旦出现需求变理，需要使用change control board去确定最值得做出的变更开发。 &lt;/p&gt;&#xD;
&lt;hr /&gt;&#xD;
&lt;strong&gt;一些知名的Agile Methods,&lt;/strong&gt; &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Agile_Modeling"&gt;Agile Modeling&lt;/a&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Agile_Unified_Process"&gt;Agile Unified Process&lt;/a&gt; (AUP) &lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method"&gt;Dynamic Systems Development Method&lt;/a&gt; (DSDM) &lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Essential_Unified_Process"&gt;Essential Unified Process&lt;/a&gt; (EssUP) &lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Extreme_Programming"&gt;&lt;strong&gt;&lt;em&gt;Extreme Programming&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt; (XP) &lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Feature_Driven_Development"&gt;Feature Driven Development&lt;/a&gt; (FDD) &lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Open_Unified_Process"&gt;Open Unified Process&lt;/a&gt; (OpenUP) &lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Scrum_(development)"&gt;&lt;strong&gt;&lt;em&gt;Scrum&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;&#xD;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Velocity_tracking"&gt;Velocity tracking&lt;/a&gt; &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;strong&gt;延伸阅读：&lt;/strong&gt; &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Self-organizing team, Self-directive team &lt;/li&gt;&#xD;
&lt;li&gt;Cross-functional team &lt;br /&gt;对开发人员的知识掌握及尝试scope&amp;amp;depth要求较高，甚至有可能存在因为不需要与项目关系太大的学习目的，即捡啥学啥，所以在&lt;a target="_blank" href="http://www.infoq.com/news/2010/07/cost-cross-functional-teams"&gt;Cost of Cross Functional Teams&lt;/a&gt; 中，Vikas提到了这种团队建设会存在开销甚至说明&amp;ldquo;This might lead to the scenario of doing major optimization on their own project which &lt;a target="_blank" href="http://www.noop.nl/2010/07/every-team-must-be-a-value-unit.htm"&gt;may or may not be in the best interest of the organization&lt;/a&gt;.&amp;rdquo; &lt;/li&gt;&#xD;
&lt;li&gt;Pair-programming &lt;/li&gt;&#xD;
&lt;li&gt;Code review, Code analysis tool &lt;/li&gt;&#xD;
&lt;li&gt;NUnit test, TDD (test-driven development) &lt;/li&gt;&#xD;
&lt;li&gt;Scrum &lt;/li&gt;&#xD;
&lt;li&gt;Extreme Programming &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;敏捷初始，大概如上述，以后我会继续学习敏捷开发及敏捷团队，和各种敏捷方法。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/syveen/aggbug/1972267.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/syveen/archive/2011/03/06/1972267.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
