<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>王超 - 博客 BLOG</title>
	<atom:link href="http://www.wangchao123.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wangchao123.com</link>
	<description>code player 海盗精神</description>
	<lastBuildDate>Mon, 01 Mar 2010 10:09:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>慢IT：十原则为你的IT减负(转)</title>
		<link>http://www.wangchao123.com/2010/03/01/488</link>
		<comments>http://www.wangchao123.com/2010/03/01/488#comments</comments>
		<pubDate>Mon, 01 Mar 2010 04:59:25 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[产品 运营]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=488</guid>
		<description><![CDATA[多年来，IT专家们总是被告知他们必须少花钱、多做事。编制在缩减，工作在外包，与此同时对提升服务的要求和采用新技术的要求却在增加。过去一直是这样，但并不意味着将一直这样持续下去。
在全球金融危机的大背景下，应该提出全新观点。IT不再需要“更多”，而是花钱少，做的也少——停止做那些价值低而消耗多的工作。让你的企业选出重点，而不是把所有的事都推给你;明智地让用户凭自己的技能处理他们自己能处理的那部分事情，让你能腾出手来做真正重要的工作。这样，在为自己减负的同时也帮助企业降低了成本。当遇到不可能完成的需求、不现实的交货期限要求时，要学会大声说“不”。从长远来看，这对所有人都有实实在在的好处。
这个世界充满“垃圾食品”和为此苦恼的家庭，我们看到快餐国度的数量在不断增加，它们正在为快餐带来的便利付出高昂<p />……<br /><a href="http://www.wangchao123.com/2010/03/01/488">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p>多年来，IT专家们总是被告知他们必须少花钱、多做事。编制在缩减，工作在外包，与此同时对提升服务的要求和采用新技术的要求却在增加。过去一直是这样，但并不意味着将一直这样持续下去。</p>
<p>在全球金融危机的大背景下，应该提出全新观点。IT不再需要“更多”，而是花钱少，做的也少——停止做那些价值低而消耗多的工作。让你的企业选出重点，而不是把所有的事都推给你;明智地让用户凭自己的技能处理他们自己能处理的那部分事情，让你能腾出手来做真正重要的工作。这样，在为自己减负的同时也帮助企业降低了成本。当遇到不可能完成的需求、不现实的交货期限要求时，要学会大声说“不”。从长远来看，这对所有人都有实实在在的好处。</p>
<p>这个世界充满“垃圾食品”和为此苦恼的家庭，我们看到快餐国度的数量在不断增加，它们正在为快餐带来的便利付出高昂的代价。由此诞生了致力于倡导健康的“慢食“运动。与之相呼应的“慢IT”正在寻求它在技术管理方面的运用。</p>
<p>国际金融危机为我们实现“慢IT”提供了绝佳机会!全球的企业高管们正在拿经济下滑为借口进行裁员、减产、关门、延期、谈判……你也可以这么干!毕竟你是为了公司的利益着想。如果有人说受到伤害，那只是暂时的。毕竟这是非常时期!</p>
<p>在逆境中寻求机遇，“慢IT”的十个原则：</p>
<p><strong>1 别再试图成为超级英雄</strong></p>
<p>不现实的最后期限要求、过大的工作量只会带来资源耗尽和质量低下。你被要求处理一堆不可能完成的任务?把它们丢回原来的地方吧。你要明确每个项目在时间和费用方面的要求，让企业去决定这些任务的优先级。新项目上马意味着其他老项目的优先级被降低。做这个决定不是你的工作职责——实际上，让企业自己承担这个职责反而能减少这种无用要求。但前提是你要与企业进行实时交流，这样企业才会相信你并不是想偷懒。</p>
<p><strong>2 尽可能让用户自己管理自己</strong></p>
<p>很多用户能自己安装软件并实施软件升级，那就让他们自己做这些，让注册企业通过自助服务做这些事情。别再给用户做保姆了，除非有具体规定不允许这样做。让客户自己去安装iTunes、Gmail以及诸如此类的东西，让他们明白如果把自己的电脑搞砸了，你只会推倒重来，恢复到缺省状态，而不会为他们自己造成的损坏负责。你可以制定出这样的政策：如果他们用私人邮件、iPhone或者其他私人软件产品，他们要自己为自己的错误负责。确保每个用户都了解所有这些风险，以及你这么做的原因。毕竟，享受自由就要承担责任，你还有更重要的工作要做。</p>
<p><strong>3 不做无用功</strong></p>
<p>评估一下你的日常工作，看看他们都带来什么价值。很可能你正在发生概率很低的风险上浪费时间和精力。这听起来像是异端邪说，但相对于花费相当大的精力在防范措施上，可能让有些事偶尔出错然后修复会更有效。有了这个评估，你就能压缩繁琐的无用功，给企业带来他们真正想要的技术好处。</p>
<p><strong>4 尽可能地让所有事情自动化</strong></p>
<p>让公司知道自动化能给公司节省人力成本。确保你的监控程序了解所有情况，从你的路由器CPU的运用情况到入站传真线路的随机测试。确保大家明白只有一切尽在掌握，才能顺利实施自动化。</p>
<p><strong>5 外包繁琐工作</strong></p>
<p>SaaS和<a style="font-size: 14px; color: #0000ff; text-decoration: none;" href="http://www.cioage.com/col/1338/" target="_blank">云计算</a>不仅仅是最近的技术流行词，也是替你管理和维护服务器、存储和程序的方法。谷歌运用软件、Live工作空间以及诸如此类的东西能够很好地替代部门或者分支机构文件管理人员的工作。并且，它们的服务面向所有人。托管整个程序需要迈出很大一步，但原则同样适用。如果你正在为数量众多的工作组处理复杂的市场、销售、支持、预算、记账或者项目程序，那就该将环境合理化了。开始拔掉这些服务器的电源，让<a style="font-size: 14px; color: #0000ff; text-decoration: none;" href="http://www.cioage.com/col/1338/" target="_blank">云计算</a>整理这些应用吧。记得，最先考虑外包那些麻烦最多的程序和用户。</p>
<p><strong>6 破除成规</strong></p>
<p>实施IT分类可以适度缓解公司管理层的头疼。但别止于此，寻找任何机会去掉“最好要有”的功能以腾出手做真正重要的事。是时候重新评估以前的价值体系并清除成年规章了。这个老掉牙的法律流程真的是企业必需的吗?还是已经成为企业难以承受的奢侈品?用户真的需要在建筑物的每个角落都装上Wi-Fi吗?除非管理层视而不见，新项目和采购计划早就被重新检查过了。现在，你该用“显微镜”仔细检查一遍现有资产的成本和收益状况，尤其是管理员们欣赏的那些。</p>
<p><strong>7 休息时间就是休息时间</strong></p>
<p>回家后不要打开笔记本电脑，也关掉手机。周末就让垃圾邮件堆在那里好了。最快失去理智的方法是从未学习如何放松。从现在开始培养一些爱好吧，比如品品茶、打打球。平时工作时间的各种麻烦已经够多了，让它们在晚上和周末时间离开你的世界——除非你真的是别无选择。</p>
<p><strong>8 没有什么事是你必须做的</strong></p>
<p> </p>
<p>硬件、软件、住宅、办公室、电脑、路由器，不管是什么，你修过它们一次并不意味着你就有责任要修它们一辈子。事实上，你可能从来就不该修它们。下次如果有人拿他自己的电脑过来让你“帮着看看”，你就反过来要他做一些他在工作中不可接受的事情。比如，“你是财务是吧，你能帮我把过去三年的报税做一下吗?我毫无头绪。”是啊，己所不欲，勿施于人。</p>
<p><strong>9 永恒保持工作乐趣</strong></p>
<p>是的，每件事都说很急，但你不能让技术的乐趣和创新被这些“急”事挤没了。事实上，保持工作乐趣是你工作的动力。如果你像行尸走肉，怎么能服务好公司呢?了解最新的科技能让你更好地解决工作中发生的问题。每天至少花费一小时在IT类的网站上，而不要日复一日像被关在笼子里面发电的老鼠一样。</p>
<p><strong>10 让你的公司听到你的声音</strong></p>
<p>跟你的公司交朋友。你已经听腻了这个“技术要服务于公司”的陈词滥调。现在，公司也需要了解你。跟业务部门开个会，去了解对他们来说什么是真正重要的，也让他们了解对你来说什么是真正重要的。一旦你意识到他们不都是冷血的机器，同事也发现你并不是脾气暴燥，那么，你会在早茶时间重新建立起重要的人际信任关系。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2010/03/01/488/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>手机 web 网站开发思考</title>
		<link>http://www.wangchao123.com/2010/02/24/482</link>
		<comments>http://www.wangchao123.com/2010/02/24/482#comments</comments>
		<pubDate>Wed, 24 Feb 2010 07:29:05 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[手机]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=482</guid>
		<description><![CDATA[根据 《中国互联网信息中心 CNNIC 25次统计报告统计》（2010年1月），我国手机用户已经达到 2.33亿。
<img class="alignleft size-full wp-image-484" title="up2" src="http://www.wangchao123.com/wp-content/uploads/2010/02/up2.jpg" alt="up2" width="277" height="256" />
 
 
 
 
 
 
 
可见我国的手机上网人数每年都在 100% 以上，说明手机互联网的发展趋势已经非常明显。这个09年1月3g牌照发放也有一定关系。经过分析者2.33亿上网的人其实上网频率并不高，可能有的时候也存在 &#8220;被上网&#8221;<p />……<br /><a href="http://www.wangchao123.com/2010/02/24/482">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p>根据 《中国互联网信息中心 CNNIC 25次统计报告统计》（2010年1月），我国手机用户已经达到 2.33亿。</p>
<p><a href="http://www.wangchao123.com/wp-content/uploads/2010/02/up2.jpg"><img class="alignleft size-full wp-image-484" title="up2" src="http://www.wangchao123.com/wp-content/uploads/2010/02/up2.jpg" alt="up2" width="277" height="256" /></a></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>可见我国的手机上网人数每年都在 100% 以上，说明手机互联网的发展趋势已经非常明显。这个09年1月3g牌照发放也有一定关系。经过分析者2.33亿上网的人其实上网频率并不高，可能有的时候也存在 &#8220;被上网&#8221; 的问题，例如手机报，接受 GPRS 广告。发飞信等等。这所以2.33亿人贡献的价值远远低于传统互联网贡献的价值。</p>
<p><strong>“3G网络普及” 与 “手机web 应用开发” “手机开发平台” 相互推动</strong></p>
<p align="left">   智能手机越来越普及，iphone 基 、于 android 平台的手机也开发了自己的 SDK 方便开发爱好者参与，APP stroe ，中国移动软件店，也在不断推动用户使用 3G 网络<br />
   <br />
   开发平台                         语言               <br />
   MacOS(iphone)            Objective C<br />
    Windows mobile         .net<br />
    S60(Nokia)                    j2me<br />
     Android                        Simple</p>
<p>各大网站：taobao,  校内，kaixin001 也都建立了 web 网站。</p>
<p align="left">好用的功能多了，用3G的人就会多，用3G的多了，更会促进各个服务商开发热情。手机网络已经开始步入良性循环</p>
<p align="left"><strong>国外网站</strong></p>
<p align="left">国外3G 网络发展会比国内快些，像 facebook, twitter,早已有了手机应用，最近很有代表性的网站 foursquare 已经深入思考手机用户的价值，基于位置，好友的服务</p>
<p><strong>手机网络 和 传统互联网 的区别<br />
</strong><br />
手机屏幕相对较小，信息量小，移动性强。判断手机对服务上的价值移近不能靠传统互联网的 pv 判断。更多的是哪手机这个人本身行为，位置，和实体世界的联系来判断。比如基于位置的应用，就可以和商家联系在一起。对商家的价值可体现在，谁搜索了自己，那些人来过我的店，那些人的好友来过我的店。</p>
<p align="left">随着商业模式逐渐形成，手机用户逐渐增多，运营商价格逐渐降低，手机网络的发展一定会非常迅速。</p>
<p><a href="http://www.wangchao123.com/wp-content/uploads/2010/02/up.jpg"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2010/02/24/482/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mac OS iphone 开发起步 初级教程 hello world (转)</title>
		<link>http://www.wangchao123.com/2009/12/07/458</link>
		<comments>http://www.wangchao123.com/2009/12/07/458#comments</comments>
		<pubDate>Sun, 06 Dec 2009 16:42:02 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[iphone Mac 开发]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=458</guid>
		<description><![CDATA[一、 确定Mac OS的版本号
版本号：Mac OS X version 10.5.5
CPU: Processor 1 GHz PowerPC G4
iPhone SDK:iPhone_sdk_for_iPhone_os_2.2.19m2621afinal.dmg
说明：每个IPhone SDK可能兼容的Mac OS都不同，该SDK支持10.5.3以后的版本。还有，Intel 和 PowerPC 不同的CPU设置文件也不同，同一种CPU不同型号，设置也不同（注意PowerPC G3/G4/G5不同型号），详细请看下文。
重点的是：官方的iPhone SDK只支持Intel Mac with OSX 10.5.
二、 安装IPhone SDK
1. iPhone sdk 的后缀名为.dmg,<p />……<br /><a href="http://www.wangchao123.com/2009/12/07/458">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p style="TEXT-INDENT: 2em">一、 确定Mac OS的版本号</p>
<p style="TEXT-INDENT: 2em">版本号：Mac OS X version 10.5.5</p>
<p style="TEXT-INDENT: 2em">CPU: Processor 1 GHz PowerPC G4</p>
<p style="TEXT-INDENT: 2em">iPhone SDK:iPhone_sdk_for_iPhone_os_2.2.19m2621afinal.dmg</p>
<p style="TEXT-INDENT: 2em">说明：每个IPhone SDK可能兼容的Mac OS都不同，该SDK支持10.5.3以后的版本。还有，Intel 和 PowerPC 不同的CPU设置文件也不同，同一种CPU不同型号，设置也不同（注意PowerPC G3/G4/G5不同型号），详细请看下文。</p>
<p style="TEXT-INDENT: 2em">重点的是：官方的iPhone SDK只支持Intel Mac with OSX 10.5.</p>
<p style="TEXT-INDENT: 2em">二、 安装IPhone SDK</p>
<p style="TEXT-INDENT: 2em">1. iPhone sdk 的后缀名为.dmg,只要双击该文件，弹出一个对话框，点“skip”,这就看到里面有3个文件，分别是About iPhone SDK.pdf 、iphone sdk.mpkg 、 Packages.如下图：</p>
<p style="TEXT-INDENT: 2em"><a href="http://www.wangchao123.com/wp-content/uploads/2009/12/b1.jpg" target="_blank"><img title="IPhone开发环境搭建全过程 - jsc0754 - 单车音乐~~" src="http://www.wangchao123.com/wp-content/uploads/2009/12/b1.jpg" alt="IPhone开发环境搭建全过程 - jsc0754 - 单车音乐~~" /></a></p>
<p style="TEXT-INDENT: 2em">2. 双击iPhone sdk.mpkg,按引导到Custom Install on”Macintosh HD”那步，如图：</p>
<p style="TEXT-INDENT: 2em"><a href="httphttp://www.wangchao123.com/wp-content/uploads/2009/12/b2.jpg" target="_blank"><img title="IPhone开发环境搭建全过程 - jsc0754 - 单车音乐~~" src="http://www.wangchao123.com/wp-content/uploads/2009/12/b2.jpg" alt="IPhone开发环境搭建全过程 - jsc0754 - 单车音乐~~" /></a></p>
<p style="TEXT-INDENT: 2em">这是会看到iPhone SDK不可选，不知道是什么问题，不用害怕，下面有解决方案，我们是把可选的都选了，让所有的包都安装到默认的路径下。</p>
<p style="TEXT-INDENT: 2em">注意： Developer Tools Essentials那个包的安装路径（默认为/Developer），等下安装iPhone SDK 时需要安装到同一路径下。</p>
<p style="TEXT-INDENT: 2em">其实这一步已经安装好了Xcode3.1 了。</p>
<p style="TEXT-INDENT: 2em">3. 安装iPhone SDK.</p>
<p style="TEXT-INDENT: 2em">进入到刚才的前面.mdg包里面的Packages文件夹，即第一张图中的Packages文件夹,选择如下5个包逐个安装。各个包名均以iphone*开头。</p>
<p style="TEXT-INDENT: 2em"><a href="http://www.wangchao123.com/wp-content/uploads/2009/12/b3.jpg" target="_blank"><img title="IPhone开发环境搭建全过程 - jsc0754 - 单车音乐~~" src="http://www.wangchao123.com/wp-content/uploads/2009/12/b3.jpg" alt="IPhone开发环境搭建全过程 - jsc0754 - 单车音乐~~" /></a></p>
<p style="TEXT-INDENT: 2em">注意：</p>
<p style="TEXT-INDENT: 2em">要安装到和Developer Tools Essentials同一目录，即/Developer</p>
<p style="TEXT-INDENT: 2em"><a href="http://www.wangchao123.com/wp-content/uploads/2009/12/b4.jpg" target="_blank"><img title="IPhone开发环境搭建全过程 - jsc0754 - 单车音乐~~" src="http://www.wangchao123.com/wp-content/uploads/2009/12/b4.jpg" alt="IPhone开发环境搭建全过程 - jsc0754 - 单车音乐~~" /></a></p>
<p style="TEXT-INDENT: 2em">如果已经安装到其他目录，可以不用重装。进入到安装目录，默认是/Platforms，然后复制 iPhone.platform 和iPhoneSimulator.platform 到 /Developer/Platform，注意不要把整个/Platforms复制。</p>
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">现在还不能建立iphone 项目，就算建好也编译不过。出现如下错误：</p>
<p style="TEXT-INDENT: 2em">No architectures to compile for (ONLY_ACTIVE_ARCH = YES, active arch = ppc, i386 VALID_ARCHS =)</p>
<p style="TEXT-INDENT: 2em">所以需要进一步配置文件</p>
<p style="TEXT-INDENT: 2em">4. 配置Architectures.xcspec文件</p>
<p style="TEXT-INDENT: 2em">因为官方的iPhone SDK只支持Intel Mac with OSX 10.5.。所以要更改所有intel的配置。</p>
<p style="TEXT-INDENT: 2em">进入到  /Developer/Platforms/iPhoneSimulator.platform/Developer/</p>
<p style="TEXT-INDENT: 2em">Library/Xcode/Specifications/，你会看到3个文件，修改其中的Architectures.xcspec文件</p>
<p style="TEXT-INDENT: 2em">注意：不要用copy内页代码来改，要用手动输入，因为网页编码不一致问题。</p>
<p style="TEXT-INDENT: 2em">具体修改如下：</p>
<p style="TEXT-INDENT: 2em">(</p>
<p style="TEXT-INDENT: 2em">// 32-Bit</p>
<p style="TEXT-INDENT: 2em">{ Type = Architecture;</p>
<p style="TEXT-INDENT: 2em">Identifier = Standard;</p>
<p style="TEXT-INDENT: 2em">Name = &#8221;Standard (iPhone Simulator: i386, ppc)&#8221;;</p>
<p style="TEXT-INDENT: 2em">Description = &#8221;32-bit iPhone Simulator architectures&#8221;;</p>
<p style="TEXT-INDENT: 2em">ListInEnum = YES;</p>
<p style="TEXT-INDENT: 2em">SortNumber = 1;</p>
<p style="TEXT-INDENT: 2em">RealArchitectures = ( i386, ppc );</p>
<p style="TEXT-INDENT: 2em">ArchitectureSetting = &#8221;ARCHS_STANDARD_32_BIT&#8221;;</p>
<p style="TEXT-INDENT: 2em">},</p>
<p style="TEXT-INDENT: 2em">// Old-style Debug</p>
<p style="TEXT-INDENT: 2em">{ Type = Architecture;</p>
<p style="TEXT-INDENT: 2em">Identifier = Native;</p>
<p style="TEXT-INDENT: 2em">Name = &#8221;Native Architecture of Build Machine&#8221;;</p>
<p style="TEXT-INDENT: 2em">Description = &#8221;32-bit for build machine&#8221;;</p>
<p style="TEXT-INDENT: 2em">ListInEnum = YES;</p>
<p style="TEXT-INDENT: 2em">SortNumber = 101;</p>
<p style="TEXT-INDENT: 2em">ArchitectureSetting = &#8221;NATIVE_ARCH&#8221;;</p>
<p style="TEXT-INDENT: 2em">},</p>
<p style="TEXT-INDENT: 2em">// G3</p>
<p style="TEXT-INDENT: 2em">{ Type = Architecture;</p>
<p style="TEXT-INDENT: 2em">Identifier = ppc;</p>
<p style="TEXT-INDENT: 2em">Name = &#8221;Minimal (32-bit PowerPC only)&#8221;;</p>
<p style="TEXT-INDENT: 2em">Description = &#8221;32-bit PowerPC &#8221;;</p>
<p style="TEXT-INDENT: 2em">PerArchBuildSettingName = &#8221;PowerPC&#8221;;</p>
<p style="TEXT-INDENT: 2em">ByteOrder = big;</p>
<p style="TEXT-INDENT: 2em">ListInEnum = No;</p>
<p style="TEXT-INDENT: 2em">SortNumber = 201;</p>
<p style="TEXT-INDENT: 2em">},</p>
<p style="TEXT-INDENT: 2em">// G4  这个是我台机的型号</p>
<p style="TEXT-INDENT: 2em">{ Type = Architecture;</p>
<p style="TEXT-INDENT: 2em">Identifier = ppc7400;</p>
<p style="TEXT-INDENT: 2em">Name = &#8221;PowerPC G4&#8243;;</p>
<p style="TEXT-INDENT: 2em">Description = &#8221;32-bit PowerPC for G4 processor&#8221;;</p>
<p style="TEXT-INDENT: 2em">ByteOrder = big;</p>
<p style="TEXT-INDENT: 2em">ListInEnum = NO;</p>
<p style="TEXT-INDENT: 2em">SortNumber = 202;</p>
<p style="TEXT-INDENT: 2em">},</p>
<p style="TEXT-INDENT: 2em">// G5 32-bit</p>
<p style="TEXT-INDENT: 2em">{ Type = Architecture;</p>
<p style="TEXT-INDENT: 2em">Identifier = ppc970;</p>
<p style="TEXT-INDENT: 2em">Name = &#8221;PowerPC G5 32-bit&#8221;;</p>
<p style="TEXT-INDENT: 2em">Description = &#8221;32-bit PowerPC for G5 processor&#8221;;</p>
<p style="TEXT-INDENT: 2em">ByteOrder = big;</p>
<p style="TEXT-INDENT: 2em">ListInEnum = NO;</p>
<p style="TEXT-INDENT: 2em">SortNumber = 203;</p>
<p style="TEXT-INDENT: 2em">},</p>
<p style="TEXT-INDENT: 2em">// Intel</p>
<p style="TEXT-INDENT: 2em">{ Type = Architecture;</p>
<p style="TEXT-INDENT: 2em">Identifier = i386;</p>
<p style="TEXT-INDENT: 2em">Name = &#8221;Intel&#8221;;</p>
<p style="TEXT-INDENT: 2em">Description = &#8221;32-bit Intel&#8221;;</p>
<p style="TEXT-INDENT: 2em">PerArchBuildSettingName = &#8221;Intel&#8221;;</p>
<p style="TEXT-INDENT: 2em">ByteOrder = little;</p>
<p style="TEXT-INDENT: 2em">ListInEnum = NO;</p>
<p style="TEXT-INDENT: 2em">SortNumber = 105;</p>
<p style="TEXT-INDENT: 2em">},</p>
<p style="TEXT-INDENT: 2em">)</p>
<p style="TEXT-INDENT: 2em">注意：不要copy，只能手输入以上代码，否则出错！！</p>
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">这样就完成设置了。</p>
<p style="TEXT-INDENT: 2em">=====================================================================</p>
<p style="TEXT-INDENT: 2em">打开/Developer/Applications/选择Xcode,程序并不会马上<span onclick="tagshow(event)">运行</span>,而是要你到快捷方式里再次点击打开.</p>
<p>打开File-&gt;new project选择View-Based Application</p>
<p><img id="img_0.6076933892962835" src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/12/090603k93.jpg" alt="" width="478" height="387" /></p>
<p>输入<span onclick="tagshow(event)">项目</span>名称.</p>
<p><img id="img_0.16496537864541938" src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/12/090605spA.jpg" alt="" width="479" height="389" /></p>
<p>接下来看到的就是常见的<span onclick="tagshow(event)">文档</span>视图,在Groups&amp;Files下Resources里双击MainWindws.xib,紧接着将看到有新窗口的打开;</p>
<p><img id="img_0.42260672565168405" style="CURSOR: pointer" src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/12/090607HAz.jpg" alt="" width="600" height="375" /></p>
<p>这时你可以拖动LIbery里的<span onclick="tagshow(event)">控件</span>,像VS.net里一样使用就可以啦,运行行先保存,File-&gt;Save,运行Build and run.</p>
<p><img id="img_0.2472348211003348" src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/12/090608iHj.jpg" alt="" width="393" height="705" /></p>
<p>这么一来,一个简单的HelloWorld就完成啦,兴喜.</p>
<p>另外还发现,IPhone的<span onclick="tagshow(event)">模拟</span>器启动很快,基本不用时间哦,这点比其它强吧!展开Groups&amp;Files 下的 Resources目录，选择双击MainWindow.xib,就会弹出xib主窗口和libery窗口，如果没有，可以通过Tools来调出窗口。Libery里有不同的控件，可以拖放到View窗口里，单击选中控件，选择Tools-&gt;inspetor打开属性窗口修改控件属性。</p>
<p style="TEXT-INDENT: 2em">然后File-&gt;Save，Build-&gt;build and run.</p>
<p style="TEXT-INDENT: 2em">大功告成！！</p>
<p style="TEXT-INDENT: 2em">参考网站：</p>
<p style="TEXT-INDENT: 2em"><a href="http://www.devdiv.net/thread-11230-1-1.html">http://www.devdiv.net/thread-11230-1-1.html</a></p>
<p style="TEXT-INDENT: 2em"><a href="http://jsc0754.blog.163.com/blog/static/1038922452009281156410/">http://jsc0754.blog.163.com/blog/static/1038922452009281156410/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/12/07/458/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>bye 艾佛森 &#8211; 致曾为 AI 疯狂的同志们</title>
		<link>http://www.wangchao123.com/2009/11/29/455</link>
		<comments>http://www.wangchao123.com/2009/11/29/455#comments</comments>
		<pubDate>Sun, 29 Nov 2009 15:52:28 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[乱七八糟]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=455</guid>
		<description><![CDATA[昨天得知 艾佛森 退役的消息，NBA 又将送走以为传奇运动员，昔日偶像。
AI  有太多的精彩瞬间值得纪念，无乱是自杀式的上篮，抛投，令人无能为力的加速，急停，他的身世，他的传闻，和他的坎坷道路。
新秀赛季和乔丹对决的瞬间

近两天，传闻湖人向刚刚退役的艾弗森抛出了橄榄枝，希望他能成为科比的队友。
现在的 AI 已经不是当年独挑大梁的球队老大，少了几分传奇色彩
无论如何，在我印象里的“答案”还是骁勇善战的强大战士，the tiger of eye~

<img class="alignnone" title="ai 走好" src="http://file247.upload.sogou.com/g/247925247/15076160/0.4190130437755174.1.jpg" a<p />……<br /><a href="http://www.wangchao123.com/2009/11/29/455">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p>昨天得知 艾佛森 退役的消息，NBA 又将送走以为传奇运动员，昔日偶像。</p>
<p>AI  有太多的精彩瞬间值得纪念，无乱是自杀式的上篮，抛投，令人无能为力的加速，急停，他的身世，他的传闻，和他的坎坷道路。</p>
<p>新秀赛季和乔丹对决的瞬间</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="src" value="http://player.ku6.com/refer/-14uvvvfbdOm_I9k/v.swf" /><param name="allowfullscreen" value="true" /><param name="quality" value="high" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.ku6.com/refer/-14uvvvfbdOm_I9k/v.swf" quality="high" align="middle" allowfullscreen="true"></embed></object></p>
<p>近两天，传闻湖人向刚刚退役的艾弗森抛出了橄榄枝，希望他能成为科比的队友。</p>
<p>现在的 AI 已经不是当年独挑大梁的球队老大，少了几分传奇色彩</p>
<p>无论如何，在我印象里的“答案”还是骁勇善战的强大战士，the tiger of eye~</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="align" value="middle" /><param name="src" value="http://player.ku6.com/refer/9OLx6FBRxV1_vXYC/v.swf" /><param name="allowfullscreen" value="true" /><param name="quality" value="high" /><embed type="application/x-shockwave-flash" width="480" height="400" src="http://player.ku6.com/refer/9OLx6FBRxV1_vXYC/v.swf" quality="high" align="middle" allowfullscreen="true"></embed></object></p>
<p><img class="alignnone" title="ai 走好" src="http://file247.upload.sogou.com/g/247925247/15076160/0.4190130437755174.1.jpg" alt="" width="409" height="500" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/11/29/455/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>macOS 10.5.6 详细安装过程(IBM T61)</title>
		<link>http://www.wangchao123.com/2009/11/27/427</link>
		<comments>http://www.wangchao123.com/2009/11/27/427#comments</comments>
		<pubDate>Fri, 27 Nov 2009 06:46:59 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[iphone Mac 开发]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=427</guid>
		<description><![CDATA[准备工作：
了解自己电脑的配置，和硬件的型号可以用 everest 等软件很快的获取到：
IBM T61 配置：
操作系统      Microsoft Windows XP Professional 5.1.2600 (WinXP Retail)
处理器名称 Mobile DualCore Intel Core 2 Duo T7500, 2183 MHz (11 x 198)
主板名称      Lenovo ThinkPad T61
主板芯片组 Intel Crestline-PM PM965
系统内存     3072 MB  (DDR2 SDRAM)
显示卡         NVIDIA Quadro NVS 140M  (512 MB)
显示器         Lenovo LTN<p />……<br /><a href="http://www.wangchao123.com/2009/11/27/427">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p>准备工作：</p>
<p>了解自己电脑的配置，和硬件的型号可以用 everest 等软件很快的获取到：</p>
<p><span style="color: #0000ff;">IBM T61 配置：</span></p>
<p style="padding-left: 30px;"><span style="color: #0000ff;">操作系统      Microsoft Windows XP Professional 5.1.2600 (WinXP Retail)<br />
处理器名称 Mobile DualCore Intel Core 2 Duo T7500, 2183 MHz (11 x 198)<br />
主板名称      Lenovo ThinkPad T61<br />
主板芯片组 Intel Crestline-PM PM965<br />
系统内存     3072 MB  (DDR2 SDRAM)<br />
显示卡         NVIDIA Quadro NVS 140M  (512 MB)<br />
显示器         Lenovo LTN141W1-L05  [14.1" LCD]<br />
声卡             Analog Devices AD1984 @ Intel 82801HBM ICH8M &#8211; High Definition Audio Controller</span></p>
<p style="padding-left: 30px;"><span style="color: #0000ff;">网卡:           Intel(R) 82566MM Gigabit Network Connection<br />
无线网卡: Intel(R) Wireless WiFi Link 4965AGN</span></p>
<p><strong>开始安装</strong></p>
<p>1、将安装光盘放到到光驱中，以光驱起动机器到安装界面。</p>
<p>2、选择简体中文作为主要语言，然后点一下&#8230;&gt;按钮。起动到准备安装界面，稍等一会儿后，到正式的安装欢迎界面。此时点屏上方的实用工具，调出“磁盘工具”，对你的硬盘进行初始化的操作。一般我们将把MAC OS安装在C分区，所以对原C分区进行“抹掉”操作（原C盘数据将全部丢失！）。</p>
<p>3、点抹掉并确认后，关闭窗口，回到欢迎界面。点“继续”钮。点“同意”Pass过许可协议页。到达选择目的宗卷页。选择你将要安装到的盘，点继续。</p>
<p>4、到达安装摘要页，在这里进入最最关键的部分，此时，不要直接点安装（直接点安装99%以上要失败，你的机器真的是APPLE机器的话也许会成功）。点“自定”按钮，进入驱动及附加包的选择安装页面。</p>
<p>5、选择如下：<br />
本地化语言：<br />
你爱怎么选怎么选，不过一般我们选两个中文够了。你要是不选中文，那就是不想用中文的MAC OS了，我也没得说。反正不会失败。</p>
<p>附加字体：<br />
选上的好。</p>
<p>X11：请选上吧，以后用得着的，不选应该也没关系，是一个功能包。</p>
<p>iDeneb Essential System：选上吧，不选的话估计等于没装。</p>
<p>Patches 10.5.6 Ready：这个玩意是关键里的关键，是驱动，里面的东西选错了那就是失败！<br />
Alternative Essential Patch 展开它<br />
ACPI K10.5.6  电源管理驱动.(本人选上了).<br />
PS2Fix for ACPI kext 10.5.6 (展开有两项) 如果你使用的是PS的键盘鼠标,请考虑选上,否则就不要选了.<br />
AMD Patch 如果你使用的是AMD的CPU,请考虑选上.<br />
Audio 展开它,并根据你的机器的声卡硬件进行选择.<br />
<span style="color: #0000ff;"><span style="color: #000000;">Analog Devices </span></span><span style="color: #000000;">展开它，因为我的机器是 AD1984</span><br />
Chipset 展开它,并根据你的机器的主板芯片进行选择.里面有好多,就不一一列出.<br />
ICHx Fixed 本人机器使用的是ICH8,这项需要选择.其它不选.<br />
Kernel 系统核心选择.展开它.<br />
Kernel 9.5.0 Voodoo,本人选它,看编号最新.其它不选.<br />
Network 网络,展开它.<br />
Ethernet 以太网,展开它.根据你的网卡型号选择.<br />
Intel 82566 本人选择它.E520的网卡为Intel 82562这个网卡仅兼容，驱动得不完美，<span style="color: red;">一般情况下正常，一但睡眠醒来，网卡将无法正常工作！</span>.当前本人没找到解决办法！<br />
Wireless 无线网.请根据你自已的无线网卡型号选择.本人台机,华丽地飘过.<br />
Fix 修正包集合,展开它,仅列出少量.<br />
Cpus=1-Fix 单核CPU请考虑选它.本人不选<br />
AppleSMBIOS 内存相关展开<br />
AppleSMBIOS 667 本人667主频的内存,选择它.(经本人测试,可以不选,是否影响系统速度本人不知).<br />
FireWire Remove <span style="color: red;">这个不能选，选的话，你的IEEE 1394卡就没用了</span>.仅在不打算使用摄像机及其它IEEE 1394总线的朋友在无法安装时用。<br />
Seatbel Fix 传说中的MAC四国补丁,不选它你就能看见四国了.没看见过四国的我很希望有一天有空看看.本项对我来说必选.<br />
PowerOff_Fix 我选了这个。（E520机器不选这个的话，每回关机、重起，你就记得拔市电吧，否则就是黑苹果）。<br />
PowerOff_OpenHaltRestart (这个在E520上不要装，装了睡眠后就没法恢复).<span style="color: red;">这两项修正zwbshadow的说法</span><br />
System Utilties   展开后里面就一个CPU控制,估计是CPU省电控制的,本人没选.<br />
Video 显卡驱动. 估计一定要选一个,反正我如果没选,重起动就是黑屏,键盘能正常响应,就是什么也看不到了.<br />
NVdarwin 512MB 本人外接了一个<span style="color: #0000ff;"> <span style="color: #000000;">NVIDIA Quadro NVS 140M  (512 MB)</span></span>的显卡,为<span style="color: #0000ff;"><span style="color: #000000;">(512</span></span>M显存的,所以选它了.请根据你的实际选，<span style="color: green;">一般GF的显卡你只要设对了显存就OK了</span>.<br />
Intel GMA X3100 如果是Dell E520集成显卡的,应该要选它.<br />
Applications 软件包,随你的高兴去选择.我是不懂的,所以,我全选了.宁全勿失的原则.<br />
Netbook 笔记本专用 台式机再次飘过.</p>
<p>6、选完了就点“完成”吧。点完成后回到安装摘要界面，点“安装”。</p>
<p>7、漫长的安装过程开始了，最开始是检测光盘的完整，点跳过，到下面的界面：</p>
<p><span style="color: #ff6600;">参考网站，感谢他们的指导：</span></p>
<p><a href="http://bbs.pcbeta.com/thread-618714-1-1.html">http://bbs.pcbeta.com/thread-618714-1-1.html</a><br />
<a href="http://bbs.weiphone.com/read-htm-tid-358709.html">http://bbs.weiphone.com/read-htm-tid-358709.html</a><br />
<a href="http://bbs.pcbeta.com/viewthread.php?tid=523231&amp;highlight=%2B%B0%A5%D1%BD%A1%AD%A1%AD">http://bbs.pcbeta.com/viewthread.php?tid=523231&amp;highlight=%2B%B0%A5%D1%BD%A1%AD%A1%AD</a><br />
<a href="http://bbs.pcbeta.com/thread-444466-1-1.html">IBM X61安装iDENEB10.5.6成功经验</a><br />
<a href="http://bbs.pcbeta.com/thread-444466-1-1.html">IBM X61安装iDENEB10.5.6成功经验</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/11/27/427/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMware7.0 安装 MacOS 10.5.6 并升级为 10.5.8 成功 &#8211; （host 电脑为 IBM T61 windows XP SP2）</title>
		<link>http://www.wangchao123.com/2009/11/23/405</link>
		<comments>http://www.wangchao123.com/2009/11/23/405#comments</comments>
		<pubDate>Sun, 22 Nov 2009 19:13:16 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[iphone Mac 开发]]></category>
		<category><![CDATA[MacOS]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=405</guid>
		<description><![CDATA[<img src="http://www.wangchao123.com/wp-content/uploads/2009/11/app.jpg" alt="" width="368" height="230" />
为了做mac 开发 安装虚拟机系统，参考了网上的做法。安装了5次，终于成功~
步骤：
1. 安装 vmware 7.0
2. 新建虚拟机
（1）点击新建
<img class="alignnone" title="新建虚拟机" src="http://www.wangchao123.com/wp-content/uploads/2009/11/step1.jpg" alt="" width="300" height="310" />
（2）选择 wokstation 6.5-7.<p />……<br /><a href="http://www.wangchao123.com/2009/11/23/405">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.wangchao123.com/wp-content/uploads/2009/11/app.jpg" alt="" width="368" height="230" /></p>
<p>为了做mac 开发 安装虚拟机系统，参考了网上的做法。安装了5次，终于成功~</p>
<p>步骤：</p>
<p>1. 安装 vmware 7.0</p>
<p>2. 新建虚拟机</p>
<p>（1）点击新建</p>
<p><img class="alignnone" title="新建虚拟机" src="http://www.wangchao123.com/wp-content/uploads/2009/11/step1.jpg" alt="" width="300" height="310" /></p>
<p>（2）选择 wokstation 6.5-7.0</p>
<p><img class="alignnone" src="http://www.wangchao123.com/wp-content/uploads/2009/11/st2.jpg" alt="" width="300" height="303" /></p>
<p>(3) 选择 mac os 10.5.6 的镜像 iso 文件</p>
<p><img class="alignnone" src="http://www.wangchao123.com/wp-content/uploads/2009/11/st3.jpg" alt="" width="300" height="303" /></p>
<p>(4) 选择 FreeBsd 64-bit 系统</p>
<p><img class="alignnone" src="http://www.wangchao123.com/wp-content/uploads/2009/11/st4.jpg" alt="" width="300" height="303" /></p>
<p>(5) 选择 1 个 cpu 2个核 （我的电脑是双核的）</p>
<p><img class="alignnone" src="http://www.wangchao123.com/wp-content/uploads/2009/11/st5.jpg" alt="" width="300" height="303" /></p>
<p>(6) 最好 1 G 内存</p>
<p><img class="alignnone" src="http://www.wangchao123.com/wp-content/uploads/2009/11/st7.jpg" alt="" width="300" height="303" /></p>
<p>(7) 网络为 use bridged networking</p>
<p><img class="alignnone" src="http://www.wangchao123.com/wp-content/uploads/2009/11/st8.jpg" alt="" width="300" height="303" /></p>
<p>(8)创建i/o 设备 选择 LSI logic （默认）</p>
<p><img class="alignnone" src="http://www.wangchao123.com/wp-content/uploads/2009/11/st9.jpg" alt="" width="300" height="303" /></p>
<p>（9）创建硬盘 create a new virtual disk</p>
<p>（10）选择SCSI  （默认）</p>
<p>（11）容量 30G （开发用，本身系统大概13G左右）</p>
<p>（12）然后 “下一步”创建完成</p>
<p>（13）<span style="color: #ff0000;">(重要)</span> 新建完虚拟机后，关闭VMWare程序，打开虚拟机所在目录，使用记事本打开扩展名为“.vmx”的文件，查找含有：“guestOS = ”的一行（一定只有一处），找到后将该行改为：guestOS = &#8220;darwin10&#8243;，然后重新起动VMWare程序，查看刚新建的虚拟机的配置，看它的Options中的General项中是否设定为Mac OS Server 10.6。</p>
<p>（14）启动 mac 这台虚拟机，会自动引导到安装盘的 iso 开始安装 mac 系统</p>
<p>详细过程见《<a href="http://www.wangchao123.com/2009/11/27/427" target="_blank">macOS 10.5.6 详细安装过程(IBM T61)</a>》</p>
<p>（15）重启后一切正常<br />
(16) 升级 10.5.8 到官网下载</p>
<p><a href="http://www.apple.com/downloads/macosx/apple/macosx_updates/macosx1058comboupdate.html">http://www.apple.com/downloads/macosx/apple/macosx_updates/macosx1058comboupdate.html</a></p>
<p>（17）安装驱动，终于找到了 在 VM 里面用的声卡和显卡驱动:<br />
下载地址：<br />
<a class="downloadlink" href="http://www.wangchao123.com/wp-content/plugins/download-monitor/download.php?id=5" title=" downloaded 84 times" >vmware Macos 声卡,显卡驱动 (84)</a></p>
<p>可执行文件都执行一遍，需要注意的是: 有一个文件双击后无反应，直接点击右键-》 打开方式-》Pacifist<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><span style="color: #ff6600;">参考网站，感谢他们的指导：</span></p>
<p><a href="http://bbs.pcbeta.com/thread-618714-1-1.html">http://bbs.pcbeta.com/thread-618714-1-1.html</a><br />
<a href="http://bbs.weiphone.com/read-htm-tid-358709.html">http://bbs.weiphone.com/read-htm-tid-358709.html</a><br />
<a href="http://bbs.pcbeta.com/viewthread.php?tid=523231&amp;highlight=%2B%B0%A5%D1%BD%A1%AD%A1%AD">http://bbs.pcbeta.com/viewthread.php?tid=523231&amp;highlight=%2B%B0%A5%D1%BD%A1%AD%A1%AD</a></p>
<div id="_mcePaste" style="left: -10000px; overflow: hidden; width: 1px; position: absolute; top: 0px; height: 1px;">http://www.wangchao123.com/wp-content/uploads/2009/11/app.jpg</div>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/11/23/405/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10个iPhone开发教学网站、论坛、博客 (转)</title>
		<link>http://www.wangchao123.com/2009/11/17/402</link>
		<comments>http://www.wangchao123.com/2009/11/17/402#comments</comments>
		<pubDate>Tue, 17 Nov 2009 13:10:35 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[iphone Mac 开发]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=402</guid>
		<description><![CDATA[
整理了一下手中的iPhone开发网站、论坛和博客，精选了这10个常去的网站。其中有2篇教学文章，由于非常经典，于是单列出来，与其网站并列。本文的短网址为 http://bit.ly/3llz7建议新入行的朋友在看教学文章的同时多上论坛，与大家交流，偶尔看看别人的自曝，自己也会信心倍增。另外，实践最重要，首先行动起来。http://cocoachina.com/ 大量iPhone开发资料，教学，经验，还有自曝。http://www.javaeye.com/forums/board/mobile iPhone开发论坛，人气鼎盛，大量自曝，还有Android的讨论
http://developer.apple.com/iphone/ 苹果iPhone开发官方主页，提供大量实例、文档和教学视频
h<p />……<br /><a href="http://www.wangchao123.com/2009/11/17/402">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<ul>
<li>整理了一下手中的iPhone开发网站、论坛和博客，精选了这10个常去的网站。其中有2篇教学文章，由于非常经典，于是单列出来，与其网站并列。本文的短网址为 <a rel="nofollow" href="http://bit.ly/3llz7" target="_blank">http://bit.ly/3llz7</a>建议新入行的朋友在看教学文章的同时多上论坛，与大家交流，偶尔看看别人的自曝，自己也会信心倍增。另外，实践最重要，首先行动起来。<a rel="nofollow" href="http://cocoachina.com/" target="_blank">http://cocoachina.com/</a> 大量iPhone开发资料，教学，经验，还有自曝。<a rel="nofollow" href="http://www.javaeye.com/forums/board/mobile" target="_blank">http://www.javaeye.com/forums/board/mobile</a> iPhone开发论坛，人气鼎盛，大量自曝，还有Android的讨论
<p><a rel="nofollow" href="http://developer.apple.com/iphone/" target="_blank">http://developer.apple.com/iphone/</a> 苹果iPhone开发官方主页，提供大量实例、文档和教学视频</p>
<p><a rel="nofollow" href="http://www.stanford.edu/class/cs193p/" target="_blank">http://www.stanford.edu/class/cs193p/</a> 斯坦福大学的iPhone课程，2009年4～6月，有pdf和视频下载</p>
<p><a rel="nofollow" href="http://bit.ly/RuaKq" target="_blank">http://bit.ly/RuaKq</a> 飞机游戏iFighter的作者dr_watson写的iPhone游戏开发经典教学系列，有源码</p>
<p><a rel="nofollow" href="http://www.iphoneside.com/" target="_blank">http://www.iphoneside.com/</a> iPhone达人的博客，很多有价值的资源下载，新闻和教程</p>
<p><a rel="nofollow" href="http://lichen1985.com/blog/" target="_blank">http://lichen1985.com/blog/</a> iPhone应用的作者，雨雪霏霏的iPhone博客，很多开发手记和心得</p>
<p><a rel="nofollow" href="http://blog.liuhongwei.cn/category/iphone/" target="_blank">http://blog.liuhongwei.cn/category/iphone/</a> iPhone开发博客，提供教学文章，经验分享，还有GAE</li>
<li><a href="http://www.otierney.net/objective-c.html.zh-tw.big5#piecing">http://www.otierney.net/objective-c.html.zh-tw.big5#piecing</a>   文档 web 版本</li>
<li><a rel="nofollow" href="http://www.javaeye.com/topic/422948" target="_blank">http://www.javaeye.com/topic/422948</a> iPhone日本市场高手的自曝贴，第1个月就赚了2千刀，大量详细的数字和图片<a rel="nofollow" href="http://dev.iphonetw.net/" target="_blank">http://dev.iphonetw.net/</a> 台湾iPhone开发者论坛，有些教学文章和讨论</li>
<li><a href="http://devforums.apple.com/">http://devforums.apple.com/</a><br />
<a href="http://www.iphonedevsdk.com/">http://www.iphonedevsdk.com/</a><br />
<a href="http://stackoverflow.com/questions/tagged/iphone">http://stackoverflow.com/questions/tagged/iphone</a><br />
<a href="http://forums.macrumors.com/forumdisplay.php?f=135">http://forums.macrumors.com/forumdisplay.php?f=135</a><br />
<a href="http://www.aboutobjects.com/tutorials.html">http://www.aboutobjects.com/tutorials.html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/11/17/402/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux 快捷键</title>
		<link>http://www.wangchao123.com/2009/11/17/398</link>
		<comments>http://www.wangchao123.com/2009/11/17/398#comments</comments>
		<pubDate>Tue, 17 Nov 2009 06:55:29 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=398</guid>
		<description><![CDATA[ 


 
A. Linux切換鍵









&#60;Ctrl&#62;&#60;Alt&#62;&#60;F1&#62;


切換至第一文字終端。在Linux之下你可以同時打開好幾個終端機。




&#60;Ctrl&#62;&#60;Alt&#62;&#60;Fn&#62;


(n=1..6) 切換至第n文字終端。




&#60;Ctrl&#62;&#60;Alt&#62;&#60;F7&#62;


切換至第一圖形 (GUI)終端。




&#60;Ctrl&#62;&#60;Alt&#62;&#60;Fn&#62;


(n=7..11) 切換至第n圖形 (GUI)終端。




&#60;Tab&#62;


自動完成指令。




&#60;ArrowUp&#62;


(↑鍵) 捲動而編輯指令歷史。按來執行。

<p />……<br /><a href="http://www.wangchao123.com/2009/11/17/398">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p id="blogtitle_fks_082068080084084074084085085095083095088075082087081070" style="MARGIN: 20px auto 10px"><span style="FONT-FAMILY: '微软雅黑','黑体',Arial,Helvetica,Sans-Serif"> </span></p>
<div style="MARGIN-BOTTOM: 15px">
<div>
<div><span id="smallfont_off" style="DISPLAY: inline"> </span></div>
<p>A. <a></a>Linux切換鍵</div>
</div>
<div>
<div id="blogtext_fks_082068080084084074084085085095083095088075082087081070">
<div>
<div style="MARGIN: 15px">
<table border="1" cellspacing="0" cellpadding="0" width="90%">
<tbody>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;&lt;Alt&gt;&lt;F1&gt;</div>
</td>
<td valign="top">
<div>切換至第一文字終端。在Linux之下你可以同時打開好幾個終端機。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;&lt;Alt&gt;&lt;Fn&gt;</div>
</td>
<td valign="top">
<div>(n=1..6) 切換至第n文字終端。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;&lt;Alt&gt;&lt;F7&gt;</div>
</td>
<td valign="top">
<div>切換至第一圖形 (GUI)終端。</div>
</td>
</tr>
<tr>
<td>
<div>&lt;Ctrl&gt;&lt;Alt&gt;&lt;Fn&gt;</div>
</td>
<td>
<div>(n=7..11) 切換至第n圖形 (GUI)終端。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Tab&gt;</div>
</td>
<td valign="top">
<div>自動完成指令。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;ArrowUp&gt;</div>
</td>
<td valign="top">
<div>(↑鍵) 捲動而編輯指令歷史。按來執行。</div>
</td>
</tr>
<tr>
<td>
<div>&lt;Shift&gt;&lt;PgUp&gt;</div>
</td>
<td>
<div>捲上終端之輸出。可以用在login指示下，這樣可以看啟動電腦所有之資訊。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Shiift&gt;&lt;PgDown&gt;</div>
</td>
<td valign="top">
<div>捲下終端之輸出。</div>
</td>
</tr>
<tr>
<td>
<div>&lt;Ctrl&gt;&lt;Alt&gt;&lt;+&gt;</div>
</td>
<td>
<div>(X-windows) 切換X-server至下一螢幕解析度。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;&lt;Alt&gt;&lt;-&gt;</div>
</td>
<td valign="top">
<div>(X-windows) 切換X-server至前一螢幕解析度。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;&lt;Alt&gt;&lt;BkSpc&gt;</div>
</td>
<td valign="top">
<div>(X-windows) 殺掉目前的X-windows server。如果X-windows server當機時就用這方法離開。</div>
</td>
</tr>
<tr>
<td valign="top"> </td>
<td valign="top">
<div>關掉系統，然後重新啟動。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;c</div>
</td>
<td valign="top">
<div>殺掉目前正在執行的程序。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;d</div>
</td>
<td valign="top">
<div>從目前之終端離開(logout)。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;d</div>
</td>
<td valign="top">
<div>傳送「End-of-File」至目前正在執行的程序。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;s</div>
</td>
<td valign="top">
<div>暫停終端之輸出。.</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;q</div>
</td>
<td valign="top">
<div>回復終端之輸出。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;Ctrl&gt;z</div>
</td>
<td valign="top">
<div>將目前之程序放到背景。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>reset</div>
</td>
<td valign="top">
<div>如你用cat顯示二進制檔之內容到螢幕，有時螢幕上所顯示之字元都是亂碼。用之指令來回復正常之輸出。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>&lt;MiddleMouseButton&gt;</div>
</td>
<td valign="top">
<div>&lt;滑鼠中鍵&gt;：貼上在別的地方已標記過的文字。這是Linux正常的「複製/貼上」咦鳌?</div>
</td>
</tr>
<tr>
<td>
<div>~</div>
</td>
<td>
<div>自己的home directory。</div>
</td>
</tr>
<tr>
<td>
<div>.</div>
</td>
<td>
<div>(句點) 目前的目錄。</div>
</td>
</tr>
<tr>
<td>
<div>..</div>
</td>
<td>
<div>(兩點) 父(上一層的)目錄。</div>
</td>
</tr>
</tbody>
</table>
<div>B. <a></a>系統資訊指令</div>
<table border="1" cellspacing="0" cellpadding="0" width="90%">
<tbody>
<tr>
<td valign="top">
<div>指令</div>
</td>
<td valign="top">
<div>說明</div>
</td>
</tr>
<tr>
<td valign="top">
<div>pwd</div>
</td>
<td valign="top">
<div>顯示目前使用之目錄。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>hostname</div>
</td>
<td valign="top">
<div>顯示或改變這主機(local host)之名稱。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>whoami</div>
</td>
<td valign="top">
<div>顯示我的login name.</div>
</td>
</tr>
<tr>
<td valign="top">
<div>date</div>
</td>
<td valign="top">
<div>顯示或改變電腦之日期和時間。格式為[mmddhhmm[yyyy]]。[月/日/時(24)/分[/年]]。例：改變目前之日期和時間為2000-12-31 23:57，就下：date 123123572000。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>time</div>
</td>
<td valign="top">
<div>確定一個程序需要多少時間來完成和其它資訊。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>who</div>
</td>
<td valign="top">
<div>顯示在這電腦已連線之使用者。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>rwho -a</div>
</td>
<td valign="top">
<div>顯示在這網路上所有的使用者。rwho程序應該已啟動。如沒有啟動的話，執行setup來啟動(你必須是root)。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>finger user_name</div>
</td>
<td valign="top">
<div>顯示使用者之系統資訊，如 finger root。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>uptime</div>
</td>
<td valign="top">
<div>顯示這電腦已開機多久的時間了。</div>
</td>
</tr>
<tr>
<td>
<div>ps</div>
</td>
<td>
<div>顯示所有正在執行的程序(process)。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>ps axu | more</div>
</td>
<td valign="top">
<div>顯示所有正在執行的程序，包含程序之擁有者。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>top</div>
</td>
<td valign="top">
<div>繼續顯示正在執行的程序，用cpu使用率來排列。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>uname -a</div>
</td>
<td valign="top">
<div>顯示伺服器之資訊。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>free</div>
</td>
<td valign="top">
<div>顯示記憶体資訊(kbytes為單位)。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>df -h</div>
</td>
<td valign="top">
<div>(=disk free) 顯示所有檔案系統的磁碟空間之資訊。</div>
</td>
</tr>
<tr>
<td>
<div>du / -bh | more</div>
</td>
<td>
<div>(=disk usage) 顯示從根目錄有關每子目錄佔用的磁碟空間。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>cat /proc/cpuinfo</div>
</td>
<td valign="top">
<div>顯示cpu有關資料。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>cat /proc/interrupts</div>
</td>
<td valign="top">
<div>顯示所有已用到的中斷。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>cat /proc/version</div>
</td>
<td valign="top">
<div>顯示Linux的版本和其它資訊。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>cat /proc/filesystems</div>
</td>
<td valign="top">
<div>顯示目前所使用的檔案系統。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>cat /etc/printcap</div>
</td>
<td valign="top">
<div>顯示列表機的設定。</div>
</td>
</tr>
<tr>
<td>
<div>lsmod</div>
</td>
<td>
<div>(當root) 顯示已載入的核心模組。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>set | more</div>
</td>
<td valign="top">
<div>顯示使用者之環境變數。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>echo $PATH</div>
</td>
<td valign="top">
<div>顯示環境變數「PATH」之內容。</div>
</td>
</tr>
</tbody>
</table>
<div>C. <a></a>網路工具</div>
<table border="1" cellspacing="0" cellpadding="0" width="90%">
<tbody>
<tr>
<td valign="top">
<div>netconf</div>
</td>
<td valign="top">
<div>(當root)設定網路(有功能表)。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>ping machine_name</div>
</td>
<td valign="top">
<div>檢查是否可以連接另一個電腦(給那電腦的名稱或IP)。要結束就按。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>route -n</div>
</td>
<td valign="top">
<div>顯示路由表。</div>
</td>
</tr>
<tr>
<td>
<div>ipfwadm -F -p m</div>
</td>
<td>
<div>設定防火牆，IP轉送規則和虛擬IP (masquerading)。</div>
</td>
</tr>
<tr>
<td>
<div>ifconfig</div>
</td>
<td>
<div>(當root) 顯示使用的網路介面(ethernet，ppp，等)。要改變介面之設定請參考ifconfig &#8211;help。</div>
</td>
</tr>
<tr>
<td>
<div>ifup interface_name</div>
</td>
<td>
<div>(使用者下/sbin/ifup) 啟動網路介面。例：ifup eth0，ifup ppp0。讓使用者啟動ppp之介面必須在ppp之設定時(執行netconf)已給使用者這個權限。</div>
</td>
</tr>
<tr>
<td>
<div>ifdown interface_name</div>
</td>
<td>
<div>(使用者下/sbin/ifdown) 關閉網路介面。</div>
</td>
</tr>
</tbody>
</table>
<div>D. <a></a>基本操作</div>
<table border="1" cellspacing="0" cellpadding="0" width="90%">
<tbody>
<tr>
<td valign="top">
<div>ls</div>
</td>
<td valign="top">
<div>列出目前目錄之內容。dir是ls的別名。</div>
</td>
</tr>
<tr>
<td>
<div>cd directory</div>
</td>
<td>
<div>改變目錄。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>cp source destination</div>
</td>
<td valign="top">
<div>複製檔案。</div>
</td>
</tr>
<tr>
<td>
<div>mcopy source destination</div>
</td>
<td>
<div>複製檔案從/至dos檔案系統(不需要mount)。例： mcopy a:autoexec.bat ~/junk。請參考man mtools有關在Linux直接用dos的一些指令，如：mdir， mcd，mren，mmove，mdel，mmd，mrd，mformat…</div>
</td>
</tr>
<tr>
<td valign="top">
<div>mv source destination</div>
</td>
<td valign="top">
<div>搬移檔案或更改檔名。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>ln -s source destination</div>
</td>
<td valign="top">
<div>建立符號連接。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>rm files</div>
</td>
<td valign="top">
<div>刪除檔案。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>mkdir directory</div>
</td>
<td valign="top">
<div>建立新的子目錄。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>rmdir directory</div>
</td>
<td valign="top">
<div>刪除空的子目錄。</div>
</td>
</tr>
<tr>
<td>
<div>rm -r files</div>
</td>
<td>
<div>(遞迴之刪除) 刪除檔案，目錄以及下面的子目錄。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>cat filename | more</div>
</td>
<td valign="top">
<div>一頁一頁的顯示檔案之內容。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>less filename</div>
</td>
<td valign="top">
<div>捲上/下文字檔之內容。要結束就按q。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>pico filename</div>
</td>
<td valign="top">
<div>編輯文字檔。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>lynx html_file</div>
</td>
<td valign="top">
<div>文字模式之瀏覽器。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>tar -zxvf filename</div>
</td>
<td valign="top">
<div>解壓.tar.gz或.tgz檔案。</div>
</td>
</tr>
<tr>
<td>
<div>find / -name &#8220;filename&#8221;</div>
</td>
<td>
<div>從根目錄尋找filename檔。filename可以包含萬用字*和?。</div>
</td>
</tr>
<tr>
<td>
<div>locate filename</div>
</td>
<td>
<div>比較快的尋找檔案。</div>
</td>
</tr>
<tr>
<td>
<div>pine</div>
</td>
<td>
<div>文字模式的email程式。另一個email程式是elm。</div>
</td>
</tr>
<tr>
<td>
<div>mc</div>
</td>
<td>
<div>執行Midnight Commander檔案管理程式。像dos下的Norton Commander。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>telnet server</div>
</td>
<td valign="top">
<div>用telnet通訊協定連接到另一個電腦。你可以用對方的電腦名稱或IP。對方電腦會要求你輸入login name和password。</div>
</td>
</tr>
<tr>
<td>
<div>rlogin server</div>
</td>
<td>
<div>(=remote login) 遠方之login。連接時會自動使用你在這電腦的login name和password。如失敗，就會要求你輸入login name和password。</div>
</td>
</tr>
<tr>
<td>
<div>rsh server</div>
</td>
<td>
<div>(=remote shell) 遠方使用者介面(shell)。另一個方法與遠方電腦連接。連接時會自動使用你在這電腦的login name和password。如失敗，就會要求你輸入login name和password。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>ftp server</div>
</td>
<td valign="top">
<div>用ftp通訊協定連接到另一個電腦。ftp是使用在與遠方電腦複製檔案。</div>
</td>
</tr>
<tr>
<td>
<div>minicom</div>
</td>
<td>
<div>Minicom串列埠通訊程式。像dos下之Telix。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>./program_name</div>
</td>
<td valign="top">
<div>執行在目前目錄下的程式。</div>
</td>
</tr>
<tr>
<td>
<div>xinit</div>
</td>
<td>
<div>執行沒有視窗管理員的X-windows server。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>startx</div>
</td>
<td valign="top">
<div>執行有視窗管理員的X-windows server。</div>
</td>
</tr>
<tr>
<td>
<div>startx &#8212; :1</div>
</td>
<td>
<div>執行下一X-windows在顯示器1(顯示器0為初始直)。你可以同時使用幾個圖形終端。用 ，，等來切換。</div>
</td>
</tr>
<tr>
<td>
<div>xterm</div>
</td>
<td>
<div>(X terminal) 執行一個X-windows終端。離開時就下exit。</div>
</td>
</tr>
<tr>
<td>
<div>xboing</div>
</td>
<td>
<div>(X terminal)。很好玩的遊戲。</div>
</td>
</tr>
<tr>
<td>
<div>gimp</div>
</td>
<td>
<div>(X terminal) 影像編輯器，像PhotoShop或Corel Draw。</div>
</td>
</tr>
<tr>
<td>
<div>netscape</div>
</td>
<td>
<div>(X terminal) 執行netscape。</div>
</td>
</tr>
<tr>
<td>
<div>netscape -display host:0.0</div>
</td>
<td>
<div>(X terminal) 執行netscape在這電腦但將輸出傳到遠方電腦名稱為host的顯示器0螢幕0。你可以使用xhost在這電腦給與權限將輸出傳到遠方電腦host。</div>
</td>
</tr>
<tr>
<td>
<div>shutdown -h now</div>
</td>
<td>
<div>(當root) 關機。平常用在遠方關機。一般的關機方法是按</div>
</td>
</tr>
<tr>
<td>
<div>halt<br />
reboot</div>
</td>
<td>
<div>(當root) 關機/重新啟動。</div>
</td>
</tr>
</tbody>
</table>
<div>E. <a></a>基本管理指令</div>
<table border="1" cellspacing="0" cellpadding="0" width="90%">
<tbody>
<tr>
<td valign="top">
<div>printtool</div>
</td>
<td valign="top">
<div>(當root在X-terminal)設地定列表機。這些設定會寫在/etc/printcap。</div>
</td>
</tr>
<tr>
<td>
<div>setup</div>
</td>
<td>
<div>(當root) 設定滑鼠，音效卡，鍵盤，X-windows，系統之服務。</div>
</td>
</tr>
<tr>
<td>
<div>alias ls=&#8221;ls-Fskb &#8211;color&#8221;</div>
</td>
<td>
<div>建立ls之別名美化ls之輸出。如你要所有使用者可以使用這功能就放在/etc/bashrc。</div>
</td>
</tr>
<tr>
<td>
<div>adduser user_name</div>
</td>
<td>
<div>(當root) 建立新使用者帳號。例：adduser barbara。不要忘下一步是要設定新使用者之password。新使用者的磁碟空間是放在/home/user_name。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>useradd user_name</div>
</td>
<td valign="top">
<div>和adduser相同之指令。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>userdel user_name</div>
</td>
<td valign="top">
<div>9當root) 刪除使用者帳號。使用者之磁碟空間和email是另外處理。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>groupadd group_name</div>
</td>
<td valign="top">
<div>建立新的group(群組)。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>passwd</div>
</td>
<td valign="top">
<div>改變自己的password。如你是root，你可以改變任何使用者之password：password user_name。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>chmod perm files</div>
</td>
<td valign="top">
<div>(=change mode) 改變自己檔案之權限(root可以改變任何檔案)。檔案權限有三種：read能讀 (r)，write能寫 (w)，execute能執行 (x)給與三種使用者：owner擁有者 (u)，members屬擁有者同樣的群組 (g)，others其他使用者 (o)。用ls -l來查看檔案的權限。rwxrwxrwx表示所有使用者對這檔案有所有權限。左邊三個字元代表擁有者之權限，中間三個代表與擁有者同群之權限，右邊三個代表其他使用者之權限。沒有權限是用「-」。例：chmod a+r junk會給所有使用者(a=all：user+group+others)對junk檔案讀取之權限。chmod o-x junk會取消其他使用者對junk檔案執行之權限。請參考chmod &#8211;help和man chmod。要設定你建立檔案的初始權限你可以用umask(請參考man umask)。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>chown new_owner files<br />
chgrp new_group files</div>
</td>
<td valign="top">
<div>改變檔案之擁有者和群組。如你複製一個檔案給另一個人你就用這兩個指來令改擁有者和群組。</div>
</td>
</tr>
<tr>
<td>
<div>su</div>
</td>
<td>
<div>(=super user) 擔任root之身份。系統會要求你輸入root之password。要離開時，就下exit。如在你擔任root的身份的同時也建立root的環境變數就用su -l。</div>
</td>
</tr>
<tr>
<td>
<div>rpm -ivh files</div>
</td>
<td>
<div>(=Red Hat Package Manager[包裝管理員])。安裝(-i)或更新/安裝(-U) rpm包裝。</div>
</td>
</tr>
<tr>
<td>
<div>glint</div>
</td>
<td>
<div>(X terminal) 圖形模式之rpm包裝管理員。</div>
</td>
</tr>
<tr>
<td>
<div>kernelcfg</div>
</td>
<td>
<div>(當root在 X terminal) 圖形模式啟動或取消核心模組。</div>
</td>
</tr>
<tr>
<td>
<div>setserial /dev/cua0 port 0&#215;03f8 irq 4</div>
</td>
<td>
<div>(當root)設定非標準參數的串列埠。左邊的例子顯示出第一串列埠(dos的com1)標準的參數。如你要每次啟動電腦就用這設定，就將這指令加在 /etc/rc.d/rc.local檔裡。請參考man setserial。</div>
</td>
</tr>
</tbody>
</table>
<div>以下是掛接(mount)的一些例子：</div>
<table border="1" cellpadding="0" width="90%">
<tbody>
<tr>
<td width="50%">
<div>mount -t auto /dev/fd0 /mnt/floppy</div>
</td>
<td>
<div>(當root) 掛上(mount)軟碟機。/mnt/floppy目錄必須存在而是空的。</div>
</td>
</tr>
<tr>
<td width="30%">
<div>mount -t auto /dev/cdrom /mnt/cdrom</div>
</td>
<td>
<div>(當root) 掛上(mount) CDROM。</div>
</td>
</tr>
<tr>
<td>
<div>mount /mnt/floppy</div>
</td>
<td>
<div>(當使用者) 掛上(mount)軟碟機。必須設定/etc/fstab使用者才可以下這指令。</div>
</td>
</tr>
<tr>
<td>
<div>mount /mnt/cdrom</div>
</td>
<td>
<div>(當使用者) 掛上(mount)CDROM。必須設定/etc/fstab使用者才可以下這指令。</div>
</td>
</tr>
<tr>
<td>
<div>umount /mnt/floppy</div>
</td>
<td>
<div>裁下(Unmount)軟碟機。</div>
</td>
</tr>
</tbody>
</table>
<div>F. <a></a>程序(process)控制</div>
<table border="1" cellspacing="0" cellpadding="0" width="90%">
<tbody>
<tr>
<td valign="top">
<div>ps</div>
</td>
<td valign="top">
<div>(=print status) 顯示目前正在執行的程序和程序之ID (PID)號碼。如你想顯示所有正在執行的程序和誰執行這些程序，就下ps axu。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>fg PID</div>
</td>
<td valign="top">
<div>將在背景的程序放在前景。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>bg PID</div>
</td>
<td valign="top">
<div>將在前景的程序放在背景。熱鍵為z。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>kill PID</div>
</td>
<td valign="top">
<div>殺掉正在執行的程序。用ps來確定程序的PID。</div>
</td>
</tr>
<tr>
<td>
<div>killall program_name</div>
</td>
<td>
<div>殺掉正在執行的程序。用ps來確定程序的名稱。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>xkill</div>
</td>
<td valign="top">
<div>(Xwindow terminal) 用滑鼠點選你要殺掉的程序。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>lpc</div>
</td>
<td valign="top">
<div>(當root) 檢查和控制列表機。</div>
</td>
</tr>
<tr>
<td>
<div>lpq</div>
</td>
<td>
<div>顯示列表機佇列之內容。</div>
</td>
</tr>
<tr>
<td>
<div>lprm job#</div>
</td>
<td>
<div>刪除在列表機佇列裡的工作。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>nice program_name</div>
</td>
<td valign="top">
<div>執行程序同時設定程序之優先權。</div>
</td>
</tr>
<tr>
<td valign="top">
<div>renice PID</div>
</td>
<td valign="top">
<div>改變正在執行的程序之優先權。</div>
</td>
</tr>
</tbody>
</table>
<div>請注意在<a href="http://blog.itpub.net/admin.php?op=newPost#shortcuts"><span style="text-decoration: underline;"><span style="color: #0000ff;">前面</span></span></a>以已講過的切換鍵：c，z，s，q。</div>
<div>G. <a></a>Linux內建之發展工具和程式語言</div>
<table border="1" cellspacing="0" cellpadding="0" width="90%">
<tbody>
<tr>
<td>
<div>emacs</div>
</td>
<td>
<div>(X-terminal) emacs編輯器。</div>
</td>
</tr>
<tr>
<td>
<div>gcc c_source_filename</div>
</td>
<td>
<div>GNU C 編譯器。</div>
</td>
</tr>
<tr>
<td>
<div>g++ cpp_source_filename</div>
</td>
<td>
<div>GNU C++ 編譯器。</div>
</td>
</tr>
<tr>
<td>
<div>perl</div>
</td>
<td>
<div>指令稿(script)語言。指令稿是相似dos之批次檔。</div>
</td>
</tr>
<tr>
<td>
<div>python</div>
</td>
<td>
<div>物件導向直譯器。免費手冊可以在 <a href="http://www.python.org/doc/"><span style="text-decoration: underline;"><span style="color: #0000ff;">http://www.python.org/doc/</span></span></a> 瀏覽或在 <a href="ftp://ftp.python.org/"><span style="text-decoration: underline;"><span style="color: #0000ff;">ftp://ftp.python.org</span></span></a> 下載。</div>
</td>
</tr>
<tr>
<td>
<div>tcl</div>
</td>
<td>
<div>指令稿語言。</div>
</td>
</tr>
<tr>
<td>
<div>wish</div>
</td>
<td>
<div>(xterm) Tk之前端(front end)和在X-windows tcl之延伸。平常用在寫前端程式。</div>
</td>
</tr>
<tr>
<td>
<div>g77</div>
</td>
<td>
<div>GNU FORTRAN編譯器。</div>
</td>
</tr>
<tr>
<td>
<div>f2c</div>
</td>
<td>
<div>FORTRAN至c之轉換器。</div>
</td>
</tr>
<tr>
<td>
<div>fort77</div>
</td>
<td>
<div>FORTRAN編譯器。呼叫 f2c和gcc或 g++。</div>
</td>
</tr>
<tr>
<td>
<div>basic</div>
</td>
<td>
<div>Chipmunk Basic。</div>
</td>
</tr>
<tr>
<td>
<div>cvs</div>
</td>
<td>
<div>平行版本系統。</div>
</td>
</tr>
<tr>
<td>
<div>diff file1 file2 [&gt;patchfile]</div>
</td>
<td>
<div>比較兩個檔案的內容而列出不同之處。「&gt;patchfile」將diff的結果寫在patchfile裡。</div>
</td>
</tr>
<tr>
<td>
<div>sdiff [-w 80] file1 file2</div>
</td>
<td>
<div>比較兩個檔案的內容。用並排方式顯示。「-w 80」告訴sdiff用80行來顯示兩個檔案的內容。</div>
</td>
</tr>
<tr>
<td>
<div>patch file2patch &lt; patchfile</div>
</td>
<td>
<div>將diff所產生的patchfile使用在file2patch。要一次完成這功能就把diff和patch兩個指令混合在一起：diff file1 file2 | patch file2patch。file2patch可能是file1或file2。</div>
</td>
</tr>
<tr>
<td>
<div>grep string filename</div>
</td>
<td>
<div>在檔案內尋找字串。</div>
</td>
</tr>
<tr>
<td>
<div>tr</div>
</td>
<td>
<div>翻譯工具。列：文字檔案內的字串用另一字串來代替。</div>
</td>
</tr>
<tr>
<td>
<div>gawk</div>
</td>
<td>
<div>GNU awk。常用來處理有定界符號(delimited)的文字檔。</div>
</td>
</tr>
<tr>
<td>
<div>sed</div>
</td>
<td>
<div>處理文字檔之工具。</div>
</td>
</tr>
</tbody>
</table>
<div>o shell script(指令稿)是比dos之批次檔強的很多。在sh下執行的shell指令稿在第一列用#!/bin/sh來開始。<br />
o 我知道有兩個很好而免費Pascal之編譯器(Free Pascal and GNU Pascal)，但是你自己在網際網路下載然後安裝。</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/11/17/398/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下搜索文件内容 &#8211; find和xargs以及grep的合作</title>
		<link>http://www.wangchao123.com/2009/11/17/395</link>
		<comments>http://www.wangchao123.com/2009/11/17/395#comments</comments>
		<pubDate>Tue, 17 Nov 2009 06:51:52 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[服务器 网络]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=395</guid>
		<description><![CDATA[find query.log &#124; xargs grep &#8220;感冒&#8221;             ( 在query.log文件中查找“感冒”)
find /fse/ &#124; xargs grep  &#8220;感冒&#8221;                       (在 fse 文件夹中搜索 “感冒”)
xargs &#8211; build and execute command lines from standard input
This manual page documents the GNU version of xargs.  xargs reads items from
       the standard input, delimited by bla<p />……<br /><a href="http://www.wangchao123.com/2009/11/17/395">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">find query.log | xargs grep &#8220;感冒&#8221;</span>             ( 在query.log文件中查找“感冒”)</p>
<p><span style="color: #ff0000;">find /fse/ | xargs grep  &#8220;感冒&#8221;</span>                       (在 fse 文件夹中搜索 “感冒”)</p>
<p>xargs &#8211; build and execute command lines from standard input<br />
This manual page documents the GNU version of xargs.  xargs reads items from<br />
       the standard input, delimited by blanks (which can be protected with  double<br />
       or  single  quotes  or  a  backslash)  or newlines, and executes the command<br />
       (default is /bin/echo) one or more times with any initial-arguments followed<br />
       by  items  read  from standard input.  Blank lines on the standard input are<br />
       ignored.     默认情况下：xargs是忽略了空格和线这些文件名。让查找跟准确。 Because Unix  filenames  can  contain  blanks  and  newlines,  this  default<br />
       behaviour  is often problematic; filenames containing blanks and/or newlines<br />
       are incorrectly processed by xargs.  In these situations it is better to use<br />
       the  `-0&#8242; option, which prevents such problems.   When using this option you<br />
       will need to ensure that the program which produces the input for xargs also<br />
       uses a null character as a separator.  If that program is GNU find for exam-<br />
       ple, the `-print0&#8242; option does this for you.        If any invocation of the command exits with a status of 255, xargs will stop<br />
       immediately  without  reading any further input.  An error message is issued<br />
       on stderr when this happens.  </p>
<p>也就是说查找的文件中如果含有空格和线，者xargs会出现报错。当加上-o后，他就可以识别。</p>
<p> </p>
<p>find /tmp -name core -type f -print | xargs /bin/rm -f</p>
<p>       Find files named core in or below the directory /tmp and delete them.  Note that this will work incorrectly if there  are<br />
       any filenames containing newlines or spaces.</p>
<p>       find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f</p>
<p>       Find  files  named  core  in or below the directory /tmp and delete them, processing filenames in such a way that file or<br />
       directory names containing spaces or newlines are correctly handled.</p>
<p>注意，向find /tmp -name core -type f -print | xargs /bin/rm –f如果改成：</p>
<p> </p>
<p>xargs 的作用是输入重定向。</p>
<p>Find /tmp –name core –type f –print |rm –f 则不会起作用。</p>
<p>cut -d: -f1 &lt; /etc/passwd | sort | xargs echo<br />
 Debian-exim backup bin cjl daemon games gnats  irc  list lp mail man news nobody proxy root snmp sshd sync sys uucp www-data xiaowang</p>
<p>从这个命令更可以看出他的输入重定向功能。 </p>
<p> </p>
<p>sudo find /home/liangyin/mrtgbackup/ -type f  -print|xargs grep -rl &#8220;10.163.28.3.*&#8221;</p>
<p> </p>
<p> </p>
<p>/home/liangyin/mrtgbackup/b/mrtg/10.163.28.3_146800777.html</p>
<p>/home/liangyin/mrtgbackup/b/mrtg/10.163.28.3_146800785.html</p>
<p>/home/liangyin/mrtgbackup/b/mrtg/10.163.28.3_146800793.html</p>
<p>/home/liangyin/mrtgbackup/b/mrtg/10.163.28.3_146800801.html</p>
<p>/home/liangyin/mrtgbackup/b/mrtg/10.163.28.3_146800809.html</p>
<p>/home/liangyin/mrtgbackup/b/mrtg/10.163.28.3_146800817.html</p>
<p> </p>
<p> </p>
<p>-R, -r, &#8211;recursive</p>
<p>              Read all files under each directory, recursively; this is equivalent  to  the  -d  recurse</p>
<p>              option.</p>
<p> </p>
<p>-l, &#8211;files-with-matches</p>
<p>              Suppress normal output; instead print the name of each input file from which output  would</p>
<p>              normally have been printed.  The scanning will stop on the first match.</p>
<p> </p>
<p>-l 的意思找到内容后输出的是文件的形式，不是文件的内容。</p>
<p> </p>
<p>而grep 默认情况下：输出的是文件的内容。</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>find -type f -name &#8216;*.png&#8217; | xargs -n1  | while read ABC; do echo $ABC &amp;&amp; mv $ABC ${ABC%.png}.gif ; done</p>
<p> </p>
<p>这里-n 意思是一个传N个选项给命令。这样查找更准确。</p>
<p> </p>
<p>find -type f -name &#8216;*.png&#8217; |while read ABC; do mv  $ABC ${ABC%.png}.gif;done</p>
<p>可以用这个命令来实现。注意：%</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/11/17/395/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>豆瓣 Google Analytics 代码加载模式 (转)</title>
		<link>http://www.wangchao123.com/2009/09/16/388</link>
		<comments>http://www.wangchao123.com/2009/09/16/388#comments</comments>
		<pubDate>Wed, 16 Sep 2009 07:13:59 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[seo]]></category>
		<category><![CDATA[开源软件]]></category>
		<category><![CDATA[性能优化]]></category>
		<category><![CDATA[Google Analytics]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/2009/09/16/388</guid>
		<description><![CDATA[ 
豆瓣从今年开始也加入 Google Analytics 的统计阵营。让我们通过它加载的 Google Analytics 源码，简单分析一下它都是怎么应用的。
我们先从豆瓣的源码来看看它的Google Analytics统计代码
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/09/071226jiu.jpg" alt="豆瓣 Google Analytics 代码" />
豆瓣 Google Analytics 代码
我们知道一般默认的 Google Analytics代码如下：
<img src="http://www.wangchao123.com/wp-content/upl<p />……<br /><a href="http://www.wangchao123.com/2009/09/16/388">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<h2> </h2>
<p>豆瓣从今年开始也加入 Google Analytics 的统计阵营。让我们通过它加载的 Google Analytics 源码，简单分析一下它都是怎么应用的。</p>
<p>我们先从豆瓣的源码来看看它的Google Analytics统计代码</p>
<p style="text-align: center;"><img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/09/071226jiu.jpg" alt="豆瓣 Google Analytics 代码" /><br />
豆瓣 Google Analytics 代码</p>
<p>我们知道一般默认的 Google Analytics代码如下：</p>
<p style="text-align: center;"><img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/09/071246xJy.jpg" alt="默认  Google Analytics 统计代码" /><br />
默认 Google Analytics 统计代码</p>
<p>两相对比，我们就会发现豆瓣加载 <code>ga.js </code>的方式与默认的方式有些不太一样，由于豆瓣并没有采用 https 加密访问，所以撇弃了默认的ga.js加载方式。</p>
<p>默认的统计函数，<code>pageTracker </code>也被豆瓣改成了 <code>_ga</code> ，这个只是名称定义上的区别，并没有什么实质的改变。豆瓣的主要应用是下面两个函数：</p>
<h3>使用 _ga._addOrganic 识别非主流搜索引擎</h3>
<p>再来看豆瓣比默认 Google Analytics 代码增加的部分，那就是多了数个 <code>_ga._addOrganic </code>，这是 Google Analytics 添加自定义搜索引擎的代码。尽管 Google Analytics 对于主流的搜索引擎都能自动识别，但毕竟能识别的是国外的主流搜索引擎，在国内，像搜狐的 Sogou，QQ 的 soso，网易的有道等搜索引擎，<strong>都不能被 Google Analytics 正确识别，而被当作推荐来源</strong>。这时候我们就可以利用<code>_addOrganic</code> 参数来识别这些非主流搜索引擎，如豆瓣的做法。</p>
<h3>使用 _addIgnoredOrganic 忽略关键字</h3>
<p>除了添加自定义搜索引擎，豆瓣在最后还添加了如下这些代码:</p>
<pre>_ga._addIgnoredOrganic("豆瓣");
_ga._addIgnoredOrganic("douban");
_ga._addIgnoredOrganic("豆瓣网");
_ga._addIgnoredOrganic("www.douban.com");</pre>
<p>这些代码用来把引号中的关键词从搜索引擎的关键词报告中排除，而当成直接点击量来源。</p>
<p>为什么要这么做？因为一个知名的大网站，来自这些品牌词的搜索流量都非常大，常常是排在前几位的搜索关键词来源，而这通常是因为搜索引擎养成现在的人都懒得记网址，直接搜索品牌名来记住域名。这些品牌词对于网站的关键词来源分析并没有很直接的帮助，所以在来自品牌词的流量很大的情况下，可以直接把这些关键词识别成直接点击量来源。</p>
<p>关于<strong>自定义 Google Analytics 搜索引擎</strong>和<strong>排除特定关键词为直接点击量来源</strong>的语法，可以参考<a title="_addOrganic() 与 _addIgnoredOrganic() 用法介绍" href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiSearchEngines.html" target="_blank"> Google Code 上关于这方面的详细介绍。</a></p>
<h2>通过 _setVar 识别用户</h2>
<p>当我们登录豆瓣后，再来分析豆瓣的源码，会发现多了一个<code>ga._setVar(”xxxx”)</code>的 Google Analytics 参数。</p>
<p style="text-align: center;"><img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/09/0713078lh.jpg" alt="豆瓣使用 Google Analytics 的._setVar参数来跟踪登录用户行为" /><br />
豆瓣使用 Google Analytics 的._setVar参数来跟踪登录用户行为</p>
<p><code>_setVar()</code> 函数是 Google Analytics 的用户定义函数，主要用于对特定来源的用户行为进行分类，例如可以对登录浏览的用户设置一个数值，然后在 Google Analytics 后台的<strong>访问者/用户定义</strong> 中查看其浏览属性。</p>
<p style="text-align: center;"><img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/09/071319F2W.jpg" alt="Google Analytics 访问者/用户定义报告" width="600" /><br />
Google Analytics 访问者/用户定义报告</p>
<p>分析豆瓣的源码可以知道，豆瓣对每一个登录后的用户，都赋以一个专门的 id 值，这样可以在用户定义报告里，看到整体的登录用户访问行为，乃至每个登录用户的浏览行为。通过这样设定后，豆瓣便可以轻易获取高忠诚度访问用户的访问行为。<a title="_setVar 设置说明" href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApiBasicConfiguration.html#_gat.GA_Tracker_._setVar" target="_blank">关于_setVar()的更多说明，请参阅 Google Analytics的技术文档</a></p>
<p>如何根据访问者在我的网站上访问的页面或在表单上做出的响应对其进行分类？<a title=" 如何根据访问者在我的网站上访问的页面或在表单上做出的响应对其进行分类？" href="http://www.google.com/support/googleanalytics/bin/answer.py?hlrm=en&amp;answer=57045" target="_blank">在 Google Analytics 官方的帮助文件，也给出了另外一个应用案例</a></p>
<p>值得注意的是，原来在设置 <code>_setVar()</code> 函数的时候，整个网站的跳出率会出现重大的偏差，不过在<a title="Google Analytics修正_setVar函数对网站跳出率的影响" href="http://analytics.blogspot.com/2009/01/using-setvar-heres-update-on-bounce.html" target="_blank">最近的google analytics官方博客，指出该bug已经修正</a>，客户在进行这方面设置的时候，还是要注意对比前后数据是否有重大偏差。</p>
<h2>通过 _trackPageview 区分不同类型的评论</h2>
<p>豆瓣上的书评，影评和乐评可以说是豆瓣网站的核心价值所在。一般评论的URL格式如下：</p>
<p style="text-align: center;"><img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/09/07132240n.jpg" alt="豆瓣上单条评论的URL" /><br />
豆瓣上单条评论的URL</p>
<p>当我们查看该页面的网页源代码时，会发现有趣的现象:</p>
<p style="text-align: center;"><img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/09/071359cC1.jpg" alt="豆瓣单条评论页的 Google Analytics 代码" /><br />
豆瓣单条评论页的 Google Analytics 代码</p>
<p>我们知道，一般 Google Analytics 的<code>_trackPageview()</code> 括弧中的参数是留空的， Google Analytics 会自动捕获网址的 URL 参数，如果在 <code>_trackPageview()</code>括弧中输入特定的数值，那么在 Google Analytics 的报表中，URL 将是我们指定的参数，而不再是我们在地址栏看到的 URL。</p>
<p>如上面的例子，我们在 Google Analytics 中看到的URL将是<span style="color: #ff0000;">/book/review/1946018/</span>，而不再是我们在浏览器地址栏看到的<span style="color: #ff0000;">/review/1946018/</span></p>
<p>当所在频道是电影或者音乐时，<code>_trackPageview()</code> 中的参数将根据所在频道的属性，变为/movie/xxxxx 或者 /music/xxxxx的数值。</p>
<p>豆瓣通过对的参数进行重新指定，主要有以下的好处：</p>
<p>保证了用户和搜索引擎看到的 URL 比较简短，达到 URL 对用户友好和对搜索引擎友好的目的；而在 Google Analytics 报告中，通过 <span style="color: #ff0000;">内容/内容细目/ </span>报告，又能了解到各个频道总的浏览情况。</p>
<p>在GA的<span style="color: #ff0000;">内容细目</span>报告中，将会多出 <span style="color: #ff0000;">/book/ /music/ /movie/</span> 这样的文件夹来，总而获得各个频道的合计浏览数据。</p>
<p>而如果只是使用默认 <code>_trackPageview()</code>，你将只能得到所有评论页面的浏览数据，而无法得到细分的各个频道的浏览数据。</p>
<p>关于<code>_trackPageview()</code>的具体的使用方法<a title="_trackPageview中参数的使用" href="http://code.google.com/apis/analytics/docs/gaJS/gaJSApi.html#_gat.GA_Tracker_._trackPageview" target="_blank">可参照 Google Code 的说明</a></p>
<p>注意事项:使用 <code>_trackPageview()</code> 参数重新指定 URL 之后，网站覆盖图的数据将受到影响。<a href="http://www.google.com/support/analytics/bin/answer.py?hl=cn&amp;answer=66982" target="_blank">可参阅 Google Analytics 的官方帮助文件</a></p>
<p>除了豆瓣使用 <code>_trackPageview()</code> 来对URL进行重写，<a href="http://www.dianping.com/" target="_blank">大众点评网</a>也采用了类似的做法（应该是比豆瓣更早采用。。。因为是我在点评网任职时候实验的做法;那时候豆瓣还没有使用 Google Analytis 统计代码，呵呵），有兴趣的同学可以自己去研究点评的 Google Analytis 代码。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/09/16/388/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>使用JMeter进行性能测试,</title>
		<link>http://www.wangchao123.com/2009/08/24/368</link>
		<comments>http://www.wangchao123.com/2009/08/24/368#comments</comments>
		<pubDate>Mon, 24 Aug 2009 06:35:21 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[性能优化]]></category>
		<category><![CDATA[压力测试]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=368</guid>
		<description><![CDATA[
 
 
 <img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063522PzW.gif" alt="" width="10" height="1" />
 
 
转自：
http://jakarta.apache.org/jmeter/
http://www.ibm.com/developerworks/cn/opensource/os-pressiontest/
http://www.ibm.com/developerworks/cn/java/l-jmeter/index.html
级别： 初级
肖菁 (jing.xiao@chinacreator.com), 软件工程师
20<p />……<br /><a href="http://www.wangchao123.com/2009/08/24/368">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<tbody></tbody>
<td width="10"> </td>
<p> </p>
<p> <img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063522PzW.gif" alt="" width="10" height="1" /></p>
<td> </td>
<p> </p>
<p>转自：</p>
<p><a href="http://jakarta.apache.org/jmeter/">http://jakarta.apache.org/jmeter/</a></p>
<p><a href="http://www.ibm.com/developerworks/cn/opensource/os-pressiontest/">http://www.ibm.com/developerworks/cn/opensource/os-pressiontest/</a></p>
<p><a href="http://www.ibm.com/developerworks/cn/java/l-jmeter/index.html">http://www.ibm.com/developerworks/cn/java/l-jmeter/index.html</a></p>
<p>级别： 初级</p>
<p><a href="http://www.wangchao123.com/wp-admin/#author">肖菁</a> (<a href="mailto:jing.xiao@chinacreator.com?subject=使用JMeter进行性能测试&amp;cc=jing.xiao@chinacreator.com">jing.xiao@chinacreator.com</a>), 软件工程师</p>
<p>2004 年 2 月 13 日</p>
<blockquote><p>JMeter 是 Apache 组织的开放源代码项目，它是功能和性能测试的工具，100%的用java实现，最新的版本是1.9.1。本文中作者将向大家介绍如何使用 JMeter 进行测试。</p></blockquote>
<p><!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->JMeter是Apache组织的开放源代码项目，它是功能和性能测试的工具，100%的用java实现，最新的版本是1.9.1，大家可以到 <a href="http://jakarta.apache.org/jmeter/index.html">http://jakarta.apache.org/jmeter/index.html</a>下载源代码和查看相关文档。</p>
<p><a name="1"><span>JMeter作用领域</span></a></p>
<p> </p>
<p>JMeter可以用于测试静态或者动态资源的性能（文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源）。JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力，或者分析他们提供的服务在不同负载条件下的总性能情况。你可以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。</p>
<p> </p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063522pWL.gif" alt="" width="100%" height="1" /><br />
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063522PzW.gif" border="0" alt="" width="8" height="6" /></td>
</tr>
</tbody>
</table>
<tbody></tbody>
<td> </td>
<p> </p>
<p> <img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063522PzW.gif" alt="" width="100%" height="4" /></p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle"><img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063523Sld.gif" border="0" alt="" width="16" height="16" /></td>
<td align="right" valign="top"><a href="http://www.wangchao123.com/wp-admin/#main"><strong>回页首</strong></a></td>
</tr>
</tbody>
</table>
<p><a name="2"><span>使用JMeter测试Web应用</span></a></p>
<p> </p>
<p>接下来的章节里，作者将详细的演示如何使用JMeter来测试Web应用的完整过程。</p>
<p><a name="N1005C"><span>2.1 测试环境</span></a></p>
<p> </p>
<p>作者使用了Tomcat作为Web服务器进行测试，被测试的内容是一个jsp文件和一个servlet，jsp文件调用JavaBean、打印相关信息，servlet接受用户参数、调用javabean、输出相关信息。详细的内容请参考作者提供的JMeter.war的内容。</p>
<p><a name="N10067"><span>2.2 安装启动JMeter</span></a></p>
<p> </p>
<p>大家可以到通过http://apache.linuxforum.net/dist/jakarta/jmeter/binaries/jakarta-jmeter-1.9.1.zip下载JMeter的release版本，然后将下载的.zip文件解压缩到C:/JMeter（后面的文章中将使用%JMeter%来引用这个目录）目录下。</p>
<p>现在，请使用%JMeter%/bin下面的jmeter.bat批处理文件来启动JMeter的可视化界面，下面的工作都将在这个可视化界面界面上进行操作。下面的图片是JMeter的可视化界面的屏幕截图。<br />
<a name="N10077"><strong>图一： JMeter打开时的屏幕截图</strong></a><br />
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/0635248ma.png" alt="图一： JMeter打开时的屏幕截图" /></p>
<p><a name="N10084"><span>2.3 建立测试计划（Test Plan）</span></a></p>
<p> </p>
<p>测试计划描述了执行测试过程中JMeter的执行过程和步骤，一个完整的测试计划包括一个或者多个线程组(Thread Groups)、逻辑控制（Logic Controller）、实例产生控制器（Sample Generating Controllers）、侦听器(Listener)、定时器（Timer）、比较（Assertions）、配置元素（Config Elements）。打开JMeter时，它已经建立一个默认的测试计划,一个JMeter应用的实例只能建立或者打开一个测试计划。</p>
<p>现在我们开始填充一个测试计划的内容，这个测试计划向一个jsp文件和一个servlet发出请求，我们需要JMeter模拟五个请求者（也就是五个线程），每个请求者连续请求两次，下面的章节介绍了详细的操作步骤。</p>
<p><a name="N10092"><span>2.4 增加负载信息设置</span></a></p>
<p> </p>
<p>这一步，我们将向测试计划中增加相关负载设置,是Jmeter知道我们需要模拟五个请求者，每个请求者在测试过程中连续请求两次。详细步骤如下：</p>
<p>1. 选中可视化界面中左边树的Test Plan节点，单击右键，选择Add&#8217;Thread Group，界面右边将会出现他的设置信息框。</p>
<p>2. Thread Group有三个和负载信息相关的参数：<br />
Number of Threads： 设置发送请求的用户数目<br />
Ramp-up period： 每个请求发生的总时间间隔，单位是秒。比如你的请求数目是5，而这个参数是10，那么每个请求之间的间隔就是10／5，也就是2秒<br />
Loop Count： 请求发生的重复次数，如果选择后面的forever（默认），那么 请求将一直继续，如果不选择forever，而在输入框中输入数字，那么请求将重复 指定的次数，如果输入0，那么请求将执行一次。</p>
<p>根据我们演示例子的设计，我们应该将Number of Threads设置为5，Ramp-up period设置为0（也就是同时并发请求），不选中forever，在Loop Count后面的输入框中输入2，设置后的屏幕截图如下：<br />
<a name="N100AE"><strong>图二：设置好参数的Thread Group。</strong></a><br />
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063525weH.png" alt="图二：设置好参数的Thread Group。" /></p>
<p><a name="N100BB"><span>2.5 增加默认Http属性（可选）</span></a></p>
<p> </p>
<p>实际的测试工作往往是针对同一个服务器上Web应用展开的,所以Jmeter提供了这样一种设置, 在默认Http属性设置需要被测试服务器的相关属性，以后的http请求设置中就可以忽略这些相同参数的设置,减少设置参数录入的时间。</p>
<p>我们这里将采用这种属性。你可以通过下面的步骤来设置默认http属性：</p>
<p>1. 选中可视化界面中左边树的Test Plan节点，单击右键，选择Add&#8217;config element&#8217;http request defaults，界面右边将会出现他的设置信息框。</p>
<p>2. 默认http属性的主要参数说明如下：<br />
protocal：发送测试请求时使用的协议<br />
server name or ip：被测试服务器的ip地址或者名字<br />
path： 默认的起始位置。比如将path设置为／jmeter，那么所有的http请求的url中都将增加／jmeter路径。<br />
port number： 服务器提供服务的端口号</p>
<p>我们的测试计划将针对本机的Web服务器上的Web应用进行测试，所以protocal应该是http，ip使用localhost，因为这个web应用发布的context路径是／jmeter，所以这里的path设置为／jmeter，因为使用Tomcat服务器，所以port number是8080。设置后的屏幕截图如下：<br />
<a name="N100DC"><strong>图三： 测试计划中使用的默认Http参数</strong></a><br />
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063525DMy.png" alt="图三： 测试计划中使用的默认Http参数" /></p>
<p><a name="N100E9"><span>2.6 增加Http请求</span></a></p>
<p> </p>
<p>现在我们需要增加http请求了，他也是我们测试的内容主体部分。你可以通过下面的步骤来增加性的http请求：</p>
<p>1. 选中可视化界面中左边树的Thread Group节点，单击右键，选择Add&#8217;sampler&#8217;http request，界面右边将会出现他的设置信息框。</p>
<p>2. 他的参数和2.5中介绍的http属性差不多，增加的属性中有发送http时方法的选择，你可以选择为get或者post。</p>
<p>我们现在增加两个http 请求，因为我们设置了默认的http属性，所以和默认http属性中相同的属性不再重复设置。设置后的屏幕截图如下：<br />
<a name="N100FF"><strong>图四：设置好的jsp测试请求</strong></a><br />
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063526bVW.png" alt="图四：设置好的jsp测试请求" /></p>
<p><a name="N1010E"><strong>图五：设置好的Servlet测试请求（带参数）</strong></a><br />
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063527RYE.png" alt="图五：设置好的Servlet测试请求（带参数）" /></p>
<p><a name="N1011B"><span>2.7 增加Listener</span></a></p>
<p> </p>
<p>增加listener是为了记录测试信息并且可以使用Jmeter提供的可视化界面查看测试结果，里面有好几种结果分析方式可供选择，你可以根据自己习惯的分析方式选择不同的结果显示方式，我们这里使用表格的形式来查看和分析测试结果。你可以通过下面的步骤来增加listener：</p>
<p>1. 选中可视化界面中左边树的Test Plan节点，单击右键，选择Add&#8217;listener&#8217;view result in table，界面右边将会出现他的设置信息和结果显示框。</p>
<p>2. 你可以设置界面上面的filename属性设置将测试结果保存到某个文件中界面下面将使用表格显示测试结果，表格的第一列sampleno显示请求执行的顺序和编号，url显示请求发送的目标，sample－ms列显示这个请求完成耗费的时间，最后的success列显示改请求是否成功执行。</p>
<p>界面的最下面你还可以看到一些统计信息，最关心的应该是Average吧，也就是相应的平均时间。</p>
<p><a name="N1012F"><span>2.8 开始执行测试计划</span></a></p>
<p> </p>
<p>现在你可以通过单击菜单栏run -&gt; Start开始执行测试计划了。下面这两个图是作者第一次、第二次执行该测试计划的结果图:<br />
<a name="N1013C"><strong>图六：第一次执行后的结果显示</strong></a><br />
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063529tds.png" alt="图六：第一次执行后的结果显示" /></p>
<p><a name="N1014B"><strong>图七：第二次执行的结果显示</strong></a><br />
<img src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/08/063530jaU.png" alt="图七：第二次执行的结果显示" /></p>
<p>大家可以看到第一次执行时的几个大时间值均来自于jsp request，这可以通过下面的理由进行解释：jsp执行前都需要被编译成.class文件。所以第二次的结果才是正常的结果。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/08/24/368/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过“合成图” 和 “跨域名静态文件服务器” 优化访问速度</title>
		<link>http://www.wangchao123.com/2009/07/25/361</link>
		<comments>http://www.wangchao123.com/2009/07/25/361#comments</comments>
		<pubDate>Sat, 25 Jul 2009 08:41:11 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[性能优化]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=361</guid>
		<description><![CDATA[<img class="alignnone" title="google 合成图标" src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/07/082343zsl.png" alt="" width="168" height="119" />
google  和 face booke 的图标合成图
合成图方法
浏览一些大型专业网站，发现很多的 UI 稳定后都会用少数几张合成图来存放 UI 图片，在前台显示时用 css 和 js 位移来表现。这样做有几个好处：
1. 减少发送请求的次数，减少 post 到服务器的数据量。
2. 遇到鼠标经过需要变换图片的时候，不会有延迟造成体验上的缺陷。
 跨域名方法
<p />……<br /><a href="http://www.wangchao123.com/2009/07/25/361">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="google 合成图标" src="http://www.wangchao123.com/wp-content/uploads/auto_save_image/2009/07/082343zsl.png" alt="" width="168" height="119" /></p>
<div id="attachment_363" class="wp-caption aligncenter" style="width: 499px"><a href="http://www.wangchao123.com/wp-content/uploads/2009/07/MegaSprite_5005_ltr.jpg"><img class="size-full wp-image-363" title="MegaSprite_5005_ltr" src="http://www.wangchao123.com/wp-content/uploads/2009/07/MegaSprite_5005_ltr.jpg" alt="facebooke 合成图" width="489" height="76" /></a><p class="wp-caption-text">facebooke 合成图</p></div>
<p>google  和 face booke 的图标合成图</p>
<h1>合成图方法</h1>
<p>浏览一些大型专业网站，发现很多的 UI 稳定后都会用少数几张合成图来存放 UI 图片，在前台显示时用 css 和 js 位移来表现。这样做有几个好处：</p>
<p>1. 减少发送请求的次数，减少 post 到服务器的数据量。</p>
<p>2. 遇到鼠标经过需要变换图片的时候，不会有延迟造成体验上的缺陷。</p>
<h1> 跨域名方法</h1>
<p>另一个能够大量减访问时发送求情的数据量的方法就是跨域名访问图片。</p>
<p>很多网站的主站，和图片站主域名和静态文件服务器是不一样的：</p>
<p>校内       xiaonei.com        xnimg.cn<br />
新浪       sina.com               sinaimg.cn<br />
雅虎       yahoo.com           yimg.com<br />
&#8230;</p>
<p>如果是同域名访问静态文件通过httpwatch 跟踪请求是这样的：</p>
<p><a href="http://www.wangchao123.com/wp-content/uploads/2009/07/z.jpg"><img class="aligncenter size-full wp-image-366" title="z" src="http://www.wangchao123.com/wp-content/uploads/2009/07/z.jpg" alt="z" width="757" height="194" /></a></p>
<p>其中几乎一半甚至更多的字节数都被 cookie 这项占用了，但是向服务器发送 http 请求时，如果是静态文件则不用发送这条请求，因此，如果页面上有30张图片，其中就有一半的请求字节数是废的。而且请求是上传操作，比下载操作要稍慢一些</p>
<p>但如果跨域名访问图片，则不会带 cookie 这条去请求，因为cookie 是根据域名匹配的。在带宽昂贵，访问次数较高的大型网站，节省这部分带宽是非常有必要的。给用户的体验也会快很多。</p>
<p>因此如果有条件，还是为静态文件单申请一个域名吧~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/07/25/361/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>注重实效的程序员（The Pragmatic Programmer）</title>
		<link>http://www.wangchao123.com/2009/07/14/356</link>
		<comments>http://www.wangchao123.com/2009/07/14/356#comments</comments>
		<pubDate>Tue, 14 Jul 2009 02:31:29 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[keep walking]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/2009/07/14/356</guid>
		<description><![CDATA[推荐一本好书 《The Pragmatic Programmer &#8211; From journeyman to master》
1、关心你的技艺
Care About Your Craft
除非你在乎能否漂亮地开发出软件，否则其它事情都是没有意义的。
2、思考！你的工作
Think!About Your Work
在你做某件事情的时候思考你在做什么。不间断地思考，实时地批判你的工作。这将占据你的一些宝贵时间，酬劳则是更为活跃地参与你喜爱的工作、感觉到自己在掌握范围日增的各种主题以及因感受到持续的进步而欢愉。从长远来说，你在时间上的投入将会随着你和你的团队变得更为高效、编写出更易于维护的代码以及开会时间的减少而得到回报。
3、提供各种选择，不要找蹩脚的借口
Provide Option<p />……<br /><a href="http://www.wangchao123.com/2009/07/14/356">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p align="left">推荐一本好书 <a title="网上订购《The Pragmatic Programmer》" href="http://www.china-pub.com/computers/common/info.asp?id=12909" target="new">《The Pragmatic Programmer &#8211; From journeyman to master》</a></p>
<p align="left"><strong>1</strong><strong>、关心你的技艺</strong><br />
Care About Your Craft<br />
除非你在乎能否漂亮地开发出软件，否则其它事情都是没有意义的。</p>
<p align="left"><strong>2</strong><strong>、思考！你的工作</strong><br />
Think!About Your Work<br />
在你做某件事情的时候思考你在做什么。不间断地思考，实时地批判你的工作。这将占据你的一些宝贵时间，酬劳则是更为活跃地参与你喜爱的工作、感觉到自己在掌握范围日增的各种主题以及因感受到持续的进步而欢愉。从长远来说，你在时间上的投入将会随着你和你的团队变得更为高效、编写出更易于维护的代码以及开会时间的减少而得到回报。</p>
<p align="left"><strong>3</strong><strong>、提供各种选择，不要找蹩脚的借口</strong><br />
Provide Options,Don&#8217;t Make Lame Excuses<br />
不要说事情做不到；要说明<em>能够</em>做什么来挽回局面。不要害怕提出要求，也不要害怕承认你需要帮助。</p>
<p align="left"><strong>4</strong><strong>、不要容忍破窗户</strong><br />
Don&#8217;t Live With Broken Windows<br />
不要留着“破窗户”（低劣的设计、错误的决策、或者糟糕的代码）不修。发现一个就修一个。如果没有足够的时间进行适当的修理，采取<em>某种</em>行动防止进一步的破坏，并说明情势处在你的控制之下。<br />
如果你发现你所在团队和项目的代码十分漂亮——编写整洁、设计良好，并且很优雅，<em>你</em>不会想成为第一个弄脏东西的人。</p>
<p align="left"><strong>5</strong><strong>、做变化的催化剂</strong><br />
Be a Catalyst for Change<br />
你不能强迫人们改变。相反，要向他们展示未来可能会怎样，并帮助他们参与对未来的创造。<br />
设计出你<em>可以</em>合理要求的东西，好好开发它。一旦完成，就拿给大家看，让他们大吃一惊。然后说：“要是我们增加&#8230;<em>可能</em>就会更好。”假装那并不重要。坐回椅子上，等着他们开始要你增加你本来就想要的功能。人们发现，参与正在发生的成功要更容易。让他们瞥见未来，你就能让他们聚集在你周围。</p>
<p align="left"><strong>6</strong><strong>、记住大图景</strong><br />
Remember the Big Picture<br />
如果你抓一只青蛙放进沸水里，它会一下子跳出来。但是，如果你把青蛙放进冷水里，然后慢慢加热，青蛙不会注意到温度的缓慢变化，会呆在锅里，直到被煮熟。<br />
不要像青蛙一样。留心大图景。要持续不断地观察周围发生的事情，而不只是你自己在做的事情。</p>
<p align="left"><strong>7</strong><strong>、使质量成为需求问题</strong><br />
Make Quality a Requirements Issue<br />
你所制作的系统的范围和质量应该作为系统需求的一部分规定下来。让你的用户参与权衡，知道何时止步，提供<em>足够好的软件</em>。</p>
<p align="left"><strong>8</strong><strong>、定期为你的知识资产投资</strong><br />
Invest Regularly in Your Knowledge Portfolio</p>
<ul>
<li>让学习成为习惯。</li>
<li>持续投入十分重要。一旦你熟悉了某种新语言或新技术，继续前进，学习另一种。</li>
<li>是否在某个项目中使用这些技术，或者是否把它们放入你的简历，这并不重要。学习的过程将扩展你的思维，使你向着新的可能性和新的做事方式拓展。思维的“异花授粉”十分重要；设法把你学到的东西应用到你当前的项目中。即使你的项目没有使用该技术，你或许也能借鉴一些想法。例如，熟悉了面向对象，你就会用不同的方式编写纯C程序。</li>
<li>如果你自己找不到答案，就去找出能找到答案的人。不要把问题搁在那里。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>9</strong><strong>、批判地分析你读到的和听到的</strong><br />
Critically Analyze What You Read and Hear<br />
不要被供应商、媒体炒作、或教条左右。要依照你自己的看法和你的项目的情况去对信息进行分析。</p>
<p align="left"><strong>10</strong><strong>、你说什么和你怎么说同样重要</strong><br />
It&#8217;s Both What You Say and the Way You Say It</p>
<ul>
<li>作为开发者，我们必须在许多层面上进行交流。我们的时间有很大部分都花在交流上，所以我们需要把它做好。</li>
<li>如果你不能有效地向他人传达你的了不起的想法，这些想法就毫无用处。</li>
<li>知道你想要说什么；了解你的听众；选择时机；选择风格；让文档美观；让听众参与；做倾听者；回复他人。</li>
<li>交流越有效，你就越有影响力。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>11</strong><strong>、</strong><strong>DRY</strong><strong>原则</strong><strong>——</strong><strong>不要重复你自己</strong><br />
DRY &#8211; Don&#8217;t Repeat Yourself<br />
系统中的每一项知识都必须具有单一、无歧义、权威的表示。与此不同的做法是在两个或更多地方表达同一事物。如果你改变其中一处，你必须记得改变其它各处。这不是你能否记住的问题，而是你何时忘记的问题。</p>
<p align="left"><strong>12</strong><strong>、让复用变得容易</strong><br />
Make it Easy to Reuse<br />
你要做的是营造一种环境，在其中要找到并复用已有的东西，比自己编写更容易。如果复用很容易，人们就会去复用。而如果不复用，你们就会有重复知识的风险。</p>
<p align="left"><strong>13</strong><strong>、消除无关事物之间的影响</strong><br />
Eliminate Effects Between Unrelated Things<br />
我们想要设计自足（self-contained）的组件：独立，具有单一、良好定义的目的。如果组件是相互隔离的，你就知道你能够改变其中一个，而不用担心其余组件。只要你不改变组件的外部接口，你就可以放心：你不会造成波及整个系统的问题。<br />
你得到两个主要好处：提高生产率与降低风险。</p>
<p align="left"><strong>14</strong><strong>、不存在最终决策</strong><br />
There Are No Final Decisions<br />
没有什么永远不变——而如果你严重依赖某一事实，你几乎可以确定它将会变化。与我们开发软件的速度相比，需求、用以及硬件变得更快。通过<a href="http://www.cnblogs.com/guoadou/archive/2005/03/14/the_pragmatic_programmer.html#11">DRY原则</a>、<a href="http://www.cnblogs.com/guoadou/archive/2005/03/14/the_pragmatic_programmer.html#36">解耦</a>以及<a href="http://www.cnblogs.com/guoadou/archive/2005/03/14/the_pragmatic_programmer.html#37">元数据的使用</a>，我们不必做出许多关键的、不可逆转的决策。有许多人会设法保持代码的灵活性，而你还需要考虑维持架、部署及供应商集成等领域的灵活性。</p>
<p align="left"><strong>15</strong><strong>、用曳光弹找到目标</strong><br />
Use Tracer Bullets to Find the Target<br />
曳光弹能通过试验各种事物并检查它们离目标有多远来让你追踪目标。<br />
曳光弹代码含有任何一段产品代码都拥有的完整的错误检查、结构、文档、以及自查。它只不过功能不全而已。但是，一旦你在系统的各组件之间实现了端到端（end-to-end）的连接，你就可以检查你离目标还有多远，并在必要的情况下进行调整。一旦你完全瞄准，增加功能将是一件容易的事情。</p>
<p align="left"><strong>16</strong><strong>、为了学习而制作原型</strong><br />
Prototype to Learn<br />
任何带有风险的事物。以前没有试过的事物，或是对于最终系统极其关键的事物。任何未被证明的、试验性的、或有疑问的事物。任何让你觉得不舒服的东西。都可以通过制作原型来研究。比如：架构；已有系统中的新功能；外部数据的结构或内容；第三方工具或组件；性能问题；用户界面设计等等。<br />
原型制作是一种学习经验，其价值并不在于所产生的代码，而在于所学到的经验教训。</p>
<p align="left"><strong>17</strong><strong>、靠近问题领域编程</strong><br />
Program Close to The Problem domain<br />
计算机语言会影响你思考问题的方式，以及你看待交流的方式。用你的用户的语言进行设计和编码。</p>
<p align="left"><strong>18</strong><strong>、估算，以避免发生意外</strong><br />
Estimate to Avoid Surprises<br />
在着手之前先进行估算。你将提前发现潜在的问题。<br />
1）要选择能反映你想要传达的精确度的单位；<br />
2）基本的估算诀窍：去问已经做过这件事情的人；<br />
3）理解提问内容；<br />
4）根据对问题的理解，建立粗略、就绪的思维模型骨架；<br />
5）把模型分解为组件，找出描述这些组件怎样交互的数学规则，确定每个组件的参数；<br />
6）给每个参数指定值，找出哪些参数对结果的影响最大，并致力于让它们大致正确；<br />
7）进行多次计算，改变关键参数的值，然后根据那些参数表达你的答案；<br />
8）在被要求进行估算时说的话：“我等会回答你”。</p>
<p align="left"><strong>19</strong><strong>、通过代码对进度表进行迭代</strong><br />
Iterate the Schedule with the Code<br />
实行增量开发。追踪你的估算能力，提炼对迭代次数、以及在每次迭代中可以包含的内容的猜想。提炼会变得一次比一次好，对进度表的信心也将随之增长。你将给予管理部门你所能给予的最精确的进度估算。</p>
<p align="left"><strong>20</strong><strong>、用纯文本保存知识</strong><br />
Keep Knowledge in Plain Text</p>
<ul>
<li>保证不过时；</li>
<li>杠杆作用：每一样工具，都能够在纯文本上进行操作；</li>
<li>更易于测试；</li>
<li>你需要确保所有各方能够使用公共标准进行通信。纯文本就是那个标准。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>21</strong><strong>、利用命令</strong><strong>shell</strong><strong>的力量</strong><br />
Use the Power of Command Shells<br />
GUI环境通常受限于它们的设计者想要提供的能力。当你想要快速地组合一些命令，以完成一次查询或某种其他的任务时，命令行要更为适宜。多使用你的命令shell，你会惊讶它能使你的生产率得到怎样的提高。</p>
<p align="left"><strong>22</strong><strong>、用好一种编辑器</strong><br />
Use a Single Editor Well<br />
选一种编辑器，彻底了解它，并将其用于所有的编辑任务。如果你用一种编辑器进行所有的文本编辑活动，你就不必停下来思考怎样完成文本操纵：必需的键击将成为本能反应。编辑器将成为你双手的延伸；键会在滑过文本和思想时歌唱起来。这就是我们的目标。</p>
<p align="left"><strong>23</strong><strong>、总是使用源码控制</strong><br />
Always Use Source Code Control</p>
<ul>
<li>总是。即使你的团队只有你一个人，你的项目只有一周时间；确保<em>每样东西</em>都处在源码控制之下。</li>
<li>源码控制是你的工作的时间机器——你<em>能够</em>回到过去。</li>
<li>把整个项目置于源码控制系统的保护之下具有一项很大的、隐蔽的好处：你可以进行自动的和可重复的产品构建。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>24</strong><strong>、要修正问题，而不是发出指责</strong><br />
Fix the Problem,Not the Blame<br />
要接受事实：调试就是解决问题，要据此发起进攻。Bug是你的过错还是别人的过错，并不是真的很有关系。它仍然是你的问题。</p>
<p align="left"><strong>25</strong><strong>、不要恐慌</strong><br />
Don&#8217;t Panic<br />
做一次深呼吸，<strong>思考</strong>什么可能是bug的原因。</p>
<ul>
<li>要总是设法找出问题的根源，而不只是问题的特定表现；</li>
<li>搜集所有的相关数据；</li>
<li>开始修正bug的最佳途径是让其可再现；</li>
<li>使你的数据可视化；</li>
<li>跟踪：观察程序或数据结构随时间变化的状态；</li>
<li>找到问题的原因的一种非常简单、却又特别有用的技术是向别人解释它。你只是一步步解释代码要做什么，常常就能让问题从屏幕上跳出来，宣布自己的存在。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>26</strong><strong>、</strong><strong>“Select”</strong><strong>没有问题</strong><br />
&#8220;Select&#8221; Isn&#8217;t Broken<br />
Bug有可能存在于OS、编译器、或是第三方产品中——但这不应该是你的第一想法。有大得多的可能性的是，bug存在于正在开发的应用代码中。与假定库本身出了问题相比，假定应用代码对库的调用不正确通常更有好处。即使问题确实应归于第三方，在提交bug报告之前，你也必须先消除你的代码中的bug。</p>
<p align="left"><strong>27</strong><strong>、不要假定，要证明</strong><br />
Don&#8217;t Assume it &#8211; Prove It<br />
不要因为你“知道”它能工作而轻易放过与bug有牵连的例程或代码。证明它。在实际环境中——使用真正的数据和边界条件——证明你的假定。</p>
<p align="left"><strong>28</strong><strong>、学习一种文本操作语言</strong><br />
Learn a Text Manipulation Language<br />
你用每天的很大一部分时间处理文本，为什么不让计算机替你完成部分工作呢？<br />
应用示例：</p>
<ul>
<li>数据库schema维护;</li>
<li>Java、C#属性(Property)访问;</li>
<li>测试数据生成。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>29</strong><strong>、编写能编写代码的代码</strong><br />
Write Code That Writes Code<br />
代码生成器能提高你的生产率，并有助于避免重复。</p>
<p align="left"><strong>30</strong><strong>、你不可能写出完美的软件</strong><br />
You Can&#8217;t Write Perfect Software<br />
这刺痛了你？不应该。把它视为生活的公理，接受它，拥抱它，庆祝它。因为完美的软件不存在。在计算机简短的历史中，没有一个人曾经写出过一个完美的软件。你也不大可能成为第一个。除非你把这作为事实接受下来，否则你最终会把时间和精力浪费在追逐不可能实现的梦想上。</p>
<p align="left"><strong>31</strong><strong>、通过合约进行设计</strong><br />
Design with Contracts<br />
什么是正确的程序？不多不少，做它声明要做的事情的程序。用文档记载这样的声明，并进行校验，是按合约设计（简称DBC）的核心所在。<br />
这里，强调的重点是在“懒惰”的代码上：对在开始之前接受的东西要严格，而允诺返回的东西要尽可能少。<br />
使用DBC的最大好处也许是它迫使需求与保证的问题走到前台来。在设计时简单地列举输入域的范围是什么、边界条件是什么、例程允诺交付什么——或者，更重要的，它不允诺交付什么——是向着编写更好的软件的一次飞跃。不对这些事项作出陈述，你就回到了靠巧合编程，那是许多项目开始、结束、失败的地方。</p>
<p align="left"><strong>32</strong><strong>、早崩溃</strong><br />
Crash Early<br />
死程序不说谎。<br />
当你的代码发现，某件被认为不可能发生的事情已经发生时，你的程序就不再有存活能力。从此时开始，它所做的任何事情都会变得可疑，所以要尽快终止它。死程序带来的危害通常比有问题的程序要小得多。</p>
<p align="left"><strong>33</strong><strong>、如果它不可能发生，用断言确保它不会发生</strong><br />
If It Can&#8217;t Happen,Use Assertions to Ensure That It Won&#8217;t<br />
断言验证你的各种假定。在一个不确定的世界里，用断言保护你的代码。<br />
不要用断言代替真正的错误处理。断言检查的是决不应该发生的事情。</p>
<p align="left"><strong>34</strong><strong>、将异常用于异常的问题</strong><br />
Use Exceptions for Exceptional Problems<br />
异常表示即使的、非局部的控制转移——这是一种级联的（cascading）goto。异常应保留给意外事件。那些把异常用作其正常处理的一部分的程序，将遭受所有可读性和可维护性问题的折磨。这些程序破坏了封装：通过异常处理，例程和它们的调用者被更紧密地耦合在一起。</p>
<p align="left"><strong>35</strong><strong>、要有始有终</strong><br />
Finish What You Start<br />
只要可能，分配某资源的例程或对象也应该负责解除其分配。</p>
<p align="left"><strong>36</strong><strong>、使模块之间的耦合减至最少</strong><br />
Minimize Coupling Between Modules</p>
<ul>
<li>编写“羞怯”的代码；</li>
<li>函数的得墨忒耳(Demeter)法则规定，某个对象的任何方法都应该只调用属于以下情形的方法：<br />
1）它自身；<br />
2）传入该方法的任何参数；<br />
3）它创建的任何对象；<br />
4）任何直接持有的组件对象。</li>
<li>物理解耦。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>37</strong><strong>、要配置，不要集成</strong><br />
Configure,Don&#8217;t Integrate<br />
细节会弄乱我们整洁的代码——特别是如果它们经常变化。把它们赶出代码。当我们在与它作斗争时，我们可以让我们的代码变得高度可配置和“软和”——也就是，容易适应变化。<br />
要用元数据（metadata）描述应用的配置选项：调谐参数、用户偏好（user preference）、安装目录，等等。</p>
<p align="left"><strong>38</strong><strong>、将抽象放进代码，细节放进元数据</strong><br />
Put Abstractions in Code,Details in Metadata<br />
但我们不只是想把元数据用于简单的偏好。我们想要尽可能多地通过元数据配置和驱动应用。我们的目标是以声明方式思考（规定要做什么，而不是怎么做），并创建高度灵活和可适应的应用。我们通过采用一条一般准则来做到这一点：为一般情况编写程序，把具体情况放在别处——在编译的代码库之外。<br />
也许你在编写一个具有可怕的工作流需求的系统。动作会根据复杂的（和变化的）商业规则启动和停止。考虑在某种基于规则的系统（即专家系统）中对它们进行编码，并嵌入到你的应用中。这样，你将通过编写规则、而不是修改代码来配置它。</p>
<p align="left"><strong>39</strong><strong>、分析工作流，以改善并发性</strong><br />
Analyze Workflow to Improve Concurrency<br />
时间是软件架构的一个常常被忽视的方面。时间有两个方面对我们很重要：并发（事情在同一时间发生）和次序（事情在时间中的相对位置）。<br />
我们在编写程序时，通常并没有把这两个方面放在心上。当人们最初坐下来开始设计架构，或是编写代码时，事情往往是线性的。那是大多数人的思考方式——总是先做这个，然后再做那个。但这样思考会带来时间耦合：方法A必须总是在方法B之前调用；同时只能运行一个报告；在接收到按钮点击之前，你必须等待屏幕重画。“嘀”必须在“嗒”之前发生。<br />
这样的方法不那么灵活，也不那么符合实际。<br />
我们需要容许并发，并考虑解除任何时间或者次序上的依赖。</p>
<p align="left"><strong>40</strong><strong>、用服务进行设计</strong><br />
Design Using Services<br />
实际上我们创建的并不是组件，而是<em>服务</em>——位于定义良好的、一致的接口之后的独立、并发的对象。<br />
通过把你的系统架构成多个独立的服务，你可以让配置成为动态的。</p>
<p align="left"><strong>41</strong><strong>、总是为并发进行设计</strong><br />
Always Design for Concurrency<br />
首先，必须对任何全局或静态变量加以保护，使其免于并发访问，现在也许是问问你自己、你最初为何需要全局变量的好时候。此外，不管调用的次序是什么，你都需要确保你给出的是一致的状态信息。<br />
在被调用时，对象必须总是处在有效的状态中，而且它们可能会在最尴尬的时候被调用。你必须确保，在任何可能被调用的时刻，对象都处在有效的状态中。这一问题常常出现在构造器与初始化例程分开定义的类中（构造器没有使对象进入已初始化状态）。<br />
一旦你设计了具有并发要素的架构，你可以灵活地处理应用的部署方式：单机、客户-服务器、或是n层。</p>
<p align="left"><strong>42</strong><strong>、使视图与模型分离</strong><br />
Separate Views from Models<br />
也就是常说的MVC模式（Model-View-Controller）。</p>
<ul>
<li>模型。表示目标对象的抽象数据模型。模型对任何视图或控制器都没有直接的了解。</li>
<li>视图。解释模型的方式。它订阅模型中的变化和来自控制器的逻辑事件。</li>
<li>控制器。控制视图、并向模型提供新数据的途径。<br />
通过松解模型与视图/控制器之间的耦合，你用低廉的代价为自己换来了许多灵活性。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>43</strong><strong>、用黑板协调工作流</strong><br />
Use Blackboards to Coordinate Workflow<br />
用黑板协调完全不同的事实和因素，同时又使各参与方保持独立和隔离。<br />
现代的分布式类黑板（blackboard-like）系统，比如JavaSpaces和T Spaces。</p>
<p align="left"><strong>44</strong><strong>、不要靠巧合编程</strong><br />
Don&#8217;t Program by Coincidence</p>
<ul>
<li>总是意识到你在做什么。</li>
<li>不要盲目地编程。试图构建你不完全理解的应用，或是使用你不熟悉的技术，就是希望自己被巧合误导。</li>
<li>按照计划行事。</li>
<li>依靠可靠的事物。如果你无法说出各种特定情形的区别，就假定是最坏的。</li>
<li>为你的假定建立文档。“按合约编程”有助于澄清你头脑中的假定，并且有助于把它们传达给别人。</li>
<li>不要只是测试你的代码，还要测试你的假定。</li>
<li>为你的工作划分优先级。</li>
<li>不要做历史的奴隶。不要让已有的代码支配将来的代码。<br />
所以下次有什么东西看起来能工作，而你却不知道为什么，要确定它不是巧合。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>45</strong><strong>、估算你的算法的阶</strong><br />
Estimate the Order of Your Algorithms<br />
在你编写代码<em>之前</em>，先大致估算事情需要多长时间。</p>
<p align="left"><strong>46</strong><strong>、测试你的估算</strong><br />
Test Your Estimates<br />
对算法的数学分析并不会告诉你每一件事情。在你的代码的目标环境中测定它的速度。</p>
<p align="left"><strong>47</strong><strong>、早重构，常重构</strong><br />
Refactor Early,Refactor Often<br />
在需要时对代码进行重写、重做和重新架构。要铲除问题的根源。<a href="http://www.cnblogs.com/guoadou/archive/2005/03/14/the_pragmatic_programmer.html#4">不要容忍破窗户</a>。<br />
关于重构，详见Martin Fowler的<a href="http://www.china-pub.com/computers/common/info.asp?id=12901" target="new">《重构》</a>一书。</p>
<p align="left"><strong>48</strong><strong>、为测试而设计</strong><br />
Design to Test<br />
在你还没有编写代码时就开始思考测试问题。测试驱动开发？</p>
<p align="left"><strong>49</strong><strong>、测试你的软件，否则你的用户就得测试</strong><br />
Test Your Software,or Your Users Will<br />
测试是技术，但更是文化。一点预先的准备可以大大降低维护费用、减少客户服务电话。</p>
<p align="left"><strong>50</strong><strong>、不要使用你不理解的向导代码</strong><br />
Don&#8217;t Use Wizard Code You Don&#8217;t Understand<br />
向导很了不起。只需要点击一个按钮，回答一些简单的问题，向导就会自动为你生成骨架代码（skeleton code）。但如果你使用向导，却不理解它制作出的<em>所有</em>代码，你就无法控制你自己的应用。你没有能力维护它，而且在调试时会遇到很大的困难。</p>
<p align="left"><strong>51</strong><strong>、不要搜集需求</strong><strong>——</strong><strong>挖掘它们</strong><br />
Don&#8217;t Gather Requirements &#8211; Dig for Them<br />
需求很少存在于表面上。它们深深地埋藏在层层假定、误解和政治手段的下面。</p>
<p align="left"><strong>52</strong><strong>、与用户一同工作，以像用户一样思考</strong><br />
Work with a User to Think Like a User<br />
要了解系统<em>实际上</em>将如何被使用，这是最好的方法。开采需求的过程也是开始与用户群建立和谐的关系、了解他们对你正在构建的系统的期许和希望的时候。</p>
<p align="left"><strong>53</strong><strong>、抽象比细节活得更长久</strong><br />
Abstractions Live Longer than Details<br />
“投资”于抽象，而不是实现。抽象能在来自不同的实现和新技术的变化的“攻击”之下存活下去。</p>
<p align="left"><strong>54</strong><strong>、使用项目词汇表</strong><br />
Use a Project Glossary<br />
如果用户和开发者用不同的名称指称同一事物，或是更糟，用同一名称指称不同事物，这样的项目很难取得成功。</p>
<p align="left"><strong>55</strong><strong>、不要在盒子外面思考</strong><strong>——</strong><strong>要找到盒子</strong><br />
Don&#8217;t Think Outside the Box &#8211; Find the Box<br />
在遇到不可能解决的问题时，问问自己以下问题：</p>
<ul>
<li>有更容易的方法吗？</li>
<li>你是在设法解决真正的问题，还是被外围的技术问题转移了注意力？</li>
<li>这件事情为什么是一个问题？</li>
<li>是什么使它如此难以解决？</li>
<li>它必须以这种方式完成吗？</li>
<li>它真的必须完成吗？<br />
很多时候，当你设法回答这些问题时，你会有让自己吃惊的发现。很多时候，对需求的重新诠释能让整个问题全部消失。<br />
你所需要的只是<em>真正的</em>约束、令人误解的约束、还有区分它们的智慧。</li>
</ul>
<p align="left"> </p>
<p align="left"><strong>56</strong><strong>、倾听反复出现的疑虑</strong><strong>——</strong><strong>等你准备好再开始</strong><br />
Listen to Nagging Doubts &#8211; Start When You&#8217;re Ready<br />
你的一生都在积累经验与智慧。当你面对一件任务时，如果你反复感觉到疑虑，或是体验到某种勉强，要注意它。你可能无法准确地指出问题所在，但给它时间，你的疑虑很可能就会结晶成某种更坚实的东西，某种你可以处理的东西。软件开发仍然不是科学。让你的直觉为你的表演做出贡献。</p>
<p align="left"><strong>57</strong><strong>、对有些事情</strong><strong>“</strong><strong>做</strong><strong>”</strong><strong>胜于</strong><strong>“</strong><strong>描述</strong><strong>”</strong><br />
Some Things Are Better Done Than Described<br />
你应该倾向于把需求搜集、设计、以及实现视为同一个过程——交付高质量的系统——的不同方面。不要掉进规范的螺旋，在某个时刻，你需要开始编码。</p>
<p align="left"><strong>58</strong><strong>、不要做形式方法的奴隶</strong><br />
Don&#8217;t Be a Slave to Formal Methods<br />
如果你没有把某项技术放进你的开发实践和能力的语境中，不要盲目地采用它。</p>
<p align="left"><strong>59</strong><strong>、昂贵的工具不一定能制作出更好的设计</strong><br />
Expensive Tools Do Not Produce Better Designs<br />
小心供应商的炒作、行业教条、以及价格标签的诱惑。在考察工具的产出时，试着不要考虑它值多少钱。</p>
<p align="left"><strong>60</strong><strong>、围绕功能、而不是工作职务进行组织</strong><br />
Organize Around Functionality,Not Job Functions<br />
把你的人划分成小团队，分别负责最终系统的特定方面的功能。让团队按照个人的能力，在内部自行进行组织。<br />
但是，只有在项目拥有负责的开发者、以及强有力的项目管理时，这种途径才有效。创立一组自行其是的团队并放任自流，是一种灾难性的处方。<br />
要记住，团队是由个体组成的。让每个成员都能以他们自己的方式闪亮。</p>
<p align="left"><strong>61</strong><strong>、不要使用手工流程</strong><br />
Don&#8217;t Use Manual Procedures<br />
shell脚本或批处理文件会一次次地以同一顺序执行同样的指令。我们可以自动安排备份、夜间构建、网站维护、以及其他任何可以无人照管地完成的事情。让计算机去做重复、庸常的事情——它会做得比我们更好。我们有更重要、更困难的事情要做。</p>
<p align="left"><strong>62</strong><strong>、早测试，常测试，自动测试。</strong><br />
Test Early.Test Often.Test Automatically.<br />
与呆在书架上的测试计划相比，每次构建时运行的测试要有效得多。</p>
<p align="left"><strong>63</strong><strong>、要等到通过全部测试，编码才算完成</strong><br />
Coding Ain&#8217;t Done &#8216;Til All the Tests Run<br />
就是这样。</p>
<p align="left"><strong>64</strong><strong>、通过</strong><strong>“</strong><strong>蓄意破坏</strong><strong>”</strong><strong>测试你的测试</strong><br />
Use Saboteurs to Test Your Testing<br />
在单独的软件副本上故意引人bug，以检验测试能够抓住它们。</p>
<p align="left"><strong>65</strong><strong>、测试状态覆盖，而不是代码覆盖</strong><br />
Test State Coverage,Not Code Coverage<br />
确定并测试重要的程序状态。只是测试代码行是不够的。即时具有良好的代码覆盖，你用于测试的数据仍然会有巨大的影响，而且，更为重要的是，你遍历代码的次序的影响可能是最大的。</p>
<p align="left"><strong>66</strong><strong>、一个</strong><strong>bug</strong><strong>只抓一次</strong><br />
Find Bugs Once<br />
一旦测试员找到一个bug，这应该是测试员<em>最后</em>一次找到它。此后自动测试应该对其进行检查。</p>
<p align="left"><strong>67</strong><strong>、把英语当作又一种编程语言</strong><br />
Treat English as Just Another Programming Language<br />
像你编写代码一样编写文档：遵守<a href="http://www.cnblogs.com/guoadou/archive/2005/03/14/the_pragmatic_programmer.html#11">DRY原则</a>、<a href="http://www.cnblogs.com/guoadou/archive/2005/03/14/the_pragmatic_programmer.html#37">使用元数据</a>、<a href="http://www.cnblogs.com/guoadou/archive/2005/03/14/the_pragmatic_programmer.html#42">MVC</a>、<a href="http://www.cnblogs.com/guoadou/archive/2005/03/14/the_pragmatic_programmer.html#28">自动生成</a>，等等。</p>
<p align="left"><strong>68</strong><strong>、把文档建在里面，不要拴在外面</strong><br />
Build Documentation In,Don&#8217;t Bolt It On<br />
与代码分离的文档不太可能被修正和更新。使用像JavaDoc和NDoc这样的工具，我们可以根据源码生成API级的文档。<br />
文档和代码是同一底层模型的不同视图，但视图是<em>唯一</em>应该不同的东西。</p>
<p align="left"><strong>69</strong><strong>、温和地超出用户的期望</strong><br />
Gently Exceed Your Users&#8217; Expectations<br />
要设法让你的用户惊讶。请注意，不是惊吓他们，而是要让他们高兴。要理解用户的期望，然后给他们的东西要多那么一点。给系统增加某种面向用户的特性所需的一点额外努力将一次又一次在商誉上带来回报。</p>
<p align="left"><strong>70</strong><strong>、在你的作品上签名</strong><br />
Sign Your Work<br />
我们想要看到对所有权的自豪。“这是我编写的，我对自己的工作负责。”你的签名应该被视为质量的保证。当人们在一段代码上看到你的名字时，应该期望它是可靠的、用心编写的、测试过的和有文档的，一个真正的专业作品，由真正的专业人员编写。<br />
一个<strong>注重实效的程序员</strong>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/07/14/356/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Google CEO:起初反对推行Chrome OS新系统</title>
		<link>http://www.wangchao123.com/2009/07/12/350</link>
		<comments>http://www.wangchao123.com/2009/07/12/350#comments</comments>
		<pubDate>Sun, 12 Jul 2009 15:42:21 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[新闻]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=350</guid>
		<description><![CDATA[Google已宣布推出Chrome OS的新系统,早前更举行记者会。在记者会中,CEO Eric Schmidt表示,最初并不赞成推出Chrome OS,可是创办人Larry Page和Sergey Brin却十分热心,最后Eric便无条件支持。Eric说Google是game-changers(游戏改变者),认为Chrome OS可以扩阔netbook的市场。
Google亦很小心,不会把Chrome OS定位为Windows对手。Eric在记者会中还笑说,欢迎微软把Internet Explorer 植入Chrome OS,那是否有机会发生,相信应该不会了。
<img class="aligncenter size-full wp-image-353" title="1751390822<p />……<br /><a href="http://www.wangchao123.com/2009/07/12/350">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p>Google已宣布推出Chrome OS的新系统,早前更举行记者会。在记者会中,<strong>CEO Eric Schmidt表示,最初并不赞成推出Chrome OS</strong>,可是创办人Larry Page和Sergey Brin却十分热心,最后Eric便无条件支持。Eric说Google是game-changers(游戏改变者),认为Chrome OS可以扩阔netbook的市场。</p>
<p>Google亦很小心,不会把Chrome OS定位为Windows对手。Eric在记者会中还笑说,欢迎微软把Internet Explorer 植入Chrome OS,那是否有机会发生,相信应该不会了。</p>
<p><a href="http://www.wangchao123.com/wp-content/uploads/2009/07/1751390822928976.jpg"><img class="aligncenter size-full wp-image-353" title="1751390822928976" src="http://www.wangchao123.com/wp-content/uploads/2009/07/1751390822928976.jpg" alt="1751390822928976" width="480" height="357" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/07/12/350/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>openx &#8211; 强大的 php 开源广告系统 市场营销 数据统计</title>
		<link>http://www.wangchao123.com/2009/07/09/343</link>
		<comments>http://www.wangchao123.com/2009/07/09/343#comments</comments>
		<pubDate>Thu, 09 Jul 2009 04:26:07 +0000</pubDate>
		<dc:creator>wangchao</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[产品 运营]]></category>
		<category><![CDATA[开源软件]]></category>

		<guid isPermaLink="false">http://www.wangchao123.com/?p=343</guid>
		<description><![CDATA[<img class="aligncenter size-full wp-image-344" title="openx4" src="http://www.wangchao123.com/wp-content/uploads/2009/07/openx4.jpg" alt="openx4" width="203" height="76" />
openx
官方网站 http://www.openx.org/
据说安装量达到 100万 个网站，包含客户系统，广告系统，支持图片，flash,html,js嵌入式的广告
可计算 曝光率，点击量，根据 CPM （千人成本）计算收益
OpenX Ad Server is a powerful open source platform that man<p />……<br /><a href="http://www.wangchao123.com/2009/07/09/343">[阅读全文]</a>]]></description>
			<content:encoded><![CDATA[<p><strong><a href="http://www.wangchao123.com/wp-content/uploads/2009/07/openx4.jpg"><img class="aligncenter size-full wp-image-344" title="openx4" src="http://www.wangchao123.com/wp-content/uploads/2009/07/openx4.jpg" alt="openx4" width="203" height="76" /></a></strong></p>
<p><strong>openx</strong></p>
<p>官方网站 <a href="http://www.openx.org/help/2.8/inventory">http://www.openx.org/</a></p>
<p>据说安装量达到 100万 个网站，包含客户系统，广告系统，支持图片，flash,html,js嵌入式的广告<br />
可计算 曝光率，点击量，根据 CPM （千人成本）计算收益</p>
<p>OpenX Ad Server is a powerful open source platform that manages advertising for more than 150,000 websites in over 100 countries. More than 300 billion ads run through OpenX Ad Servers each month. And since it&#8217;s available as a software download or as a hosted service, you can decide to run it yourself or let us take care of managing the infrastructure for you.</p>
<p><a href="http://www.wangchao123.com/wp-content/uploads/2009/07/openx.jpg"><img class="aligncenter size-full wp-image-345" title="openx" src="http://www.wangchao123.com/wp-content/uploads/2009/07/openx.jpg" alt="openx" width="800" height="405" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wangchao123.com/2009/07/09/343/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
