<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/xsl/rss.xsl" type="text/xsl" media="screen"?>
<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:ppp="http://blog.sohu.com/rss/module/ppp/"
	>

	<channel>
		<title>水草萍</title>
		<link>http://duckweeds.blog.sohu.com/</link>
		<description><![CDATA[水草萍]]></description>
		<pubDate>Fri, 15 Aug 2008 20:58:09 +0800</pubDate>
		<generator>搜狐博客</generator>
		<ppp:ebi>930fe7c792</ppp:ebi>
		<image>
			<title>http://blog.sohu.com</title>
			<url>http://js.pp.sohu.com/ppp/blog/images/common/logo_150_60.gif</url>
			<link>http://blog.sohu.com/</link>
			<width>100</width>
			<height>43</height>
			<description>搜狐博客</description>
		</image>
		<item>
			<title>富士康副总裁程天纵演讲：How to be a great boss?</title>
			<link>http://duckweeds.blog.sohu.com/97339471.html</link>
			<comments>http://duckweeds.blog.sohu.com/97339471.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Fri, 15 Aug 2008 20:58:09 +0800</pubDate>
			<category>道听途说</category>
			<guid>http://duckweeds.blog.sohu.com/97339471.html</guid>
			<description><![CDATA[引子&mdash;&mdash;谈富士康的速度
<br />
<br />因环境原因，我们的报告在短短的15分钟之内从楼上转到楼下，这就代表着富士康集团的速度。记得两个月前，我在龙华连续三个晚上和总裁开会，讨论
新《劳动合同法》，每天晚上开会到凌晨一点钟，第四天是星期五，开会到凌晨两点，终于把第一版劳动合同定稿。总裁是每一个字都要讨论，定稿完毕后，总裁如
释重负、松了一口气，他说：&ldquo;既然我们花了那么多时间，把新《劳动合同法》研究完毕了，那我们就趁热打铁准备一个万人签约大会！&rdquo;当场分配各事业群的人资
调派人力，凑齐了两万人。会后，我回去洗澡睡觉，睡了几个小时，九点前赶往龙华的大操场，看到两万人已经全部坐好了，所有的劳动合同根据每个人的名字都写
好了，这让我非常非常地敬佩，这就是富士康集团的速度。
<br />
<br />我与富士康
<br />
<br />富士康集团的执行力是非常有名的，去年7月1号，我加入富士康集团，总裁看得起我，给我一个集团副总裁的头衔，希望我协助卢松青副总裁
在2014年把机插件和线缆做到全世界第一大。根据我估算，到2014年要做到全世界第一大，仅NWInG的营业收入就要接近110亿美元，也就是从现在
开始每年要成长35%；第二个任务是希望我协助鸿胜，大家都知道鸿胜是做PCB板的，目前鸿胜在大陆有五个工厂，第一个工厂是在松岗，另外在淮安、烟台、
营口、秦皇岛都有厂区。所以总裁希望我花点时间协助鸿胜，把鸿胜做大做强，同时希望在明年夏天九十月份能够上市。鸿胜上市有很重要的意义，因为鸿胜上市，
我们所取得的股票将作为我们大陆干部、关键人才作业留才奖励的标准，所以鸿胜必须上市，而且必须要成功，这是总裁给我的第二个任务；第三个任务，总裁告诉
我，有很多跨事业群的生意机会，很多跨事业群的合作必须要作，由于我是外面新来的，才来不到一年，所以由我来协调跨事业群的合作。
<br />
<br />去年十月底，总裁指派我来协调各事业群的产品一起打入大陆白牌手机市场。我成功地把大陆白牌手机的策略都搞清楚后，在今年三月底总裁又叫我把这项
工作交出去，现在总裁陆陆续续的还把很多新的任务丢给我。来到富士康集团，我觉得如果能够将过去在跨国公司工作30年的经验，与富士康独特的文化跟管理方
法相结合，我相信富士康一定能成为全世界最强的企业。所以上任以后，我陆续在台北、龙华、松岗以及昆山、北京都做过许多的演讲，尤其是CMMSG简宜彬，
他特别重视干部培养，所以请我给他们做了一系列的经营管理演讲，共有4次专题演讲，涉及不同领域的专题，包括我在NWInG也做过许多报告。今天我第一次
来到烟台，我对烟台的印象非常好，我觉得烟台人灵地杰，风景非常的美好。在这边碰到的许多同事，服务态度好，速度也非常的快，所以给各位做演讲是一个荣
幸，各位能够有机会坐在这边听我演讲也是一个机会。<br /><br />我从70年代，就开始做顾问，我认识总裁是在1985年，1985年鸿海在台湾年营业额只有3亿台币，也就是一千万美金左右，当时做的主要产品就是接插件
和一些线缆。当时我除了在惠普做顾问服务以外，我跟台湾最大的民营企业台湾塑胶公司也非常熟悉，我帮台塑在桃园干了第一个PCB板厂，也因此把台塑从石化
业带到了电子业，所以盖完那座厂后，我留下建厂小组的一部分人，成立了一个顾问公司。顾问的合资公司是惠普和台塑，我就担任第一届总经理。当时提供的服务
就是我自己设计创造规划的一个流程，当时鸿海集团董事长郭台铭先生就找上了我，请我来做鸿海的顾问。所以鸿海的第一个五年计划、鸿海的经营宗旨和鸿海第一个五年竞争策略是我和郭董事长及几十个高层主管在桃园机场附近的旅馆，关起门来三天研究讨论出来的。所以对于富士康和鸿海我并不陌生，这也是我们董事长在过去二三十年里一直希望我能加入富士康的原因。
<br />
<br />惠普的经历
<br />
<br />我在10年前决定离开惠普，因为我担任了惠普中国总裁共6年，从1992年1月，一直干到1997年年底。惠普每年都会做一个年度满意度调
查，1992年1月，我在担任中国惠普总裁的时候，1991年惠普做的员工满意度调查中，中国惠普在惠普全世界的机构里面排名最后、得分最低，也就是说中
国惠普的员工对惠普的认同和满意度是全世界最低的。在中国惠普工作了三个月以后，我就召集了中国惠普所有的员工，当时只有三四百人，我对员工讲了三个愿
望，第一个愿望是希望中国惠普所有的员工每天早晨醒来，想到今天要上班就觉得非常高兴，当时台下所有的员工都在笑，他们觉得我在说梦话，因为他们每天早上
起来想到上班就会很痛苦；我的第二个愿望是说让离开中国惠普的人感到后悔，下面笑得更大声，因为他们听说离开的人都觉得非常快乐；我的第三个愿望是讲让每
一个中国惠普的人五子登科，当时很多人都在问五子登科指的是什么意思，我对大家讲五子登科的意思是每一个人都有妻子或先生，都有孩子，都有车子、房子和票
子，票子也就是指银行存款。我讲完后下面笑得更大声，因为我当时只有39岁，他们觉得我们这些从美国回来的既年轻又不懂事，不了解中国的情况。
<br />
<br />
在1997年7月，我决定离开惠普，加入德州仪器，在1997年上半年，惠普全世界所做的满意度调查，我收到的当时惠普执行长官发给我的E-mail，上
面说：&ldquo;Terry，恭喜你，中国员工满意度的调查是全世界第一高！&rdquo;我讲的是真实的故事，从1991年，所有中国惠普的员工对于公司的满意度是全世界最
低的，我经过六年努力，在1997年中国惠普员工的满意度变成全世界第一。今天，我就想与各位分享一下我怎么做的。其中最重要的道理，就在于怎样做一个好
的老板。
<br /><br />老板的重要性
<br />
<br />早期加入惠普的时候，我经常到学校校园去招聘，就类似于招聘我们的新干班&mdash;&mdash;刚毕业的大学新鲜人。每次我都会坐下来跟他们谈，我说你们在找工作的
时候考虑那些因素，他们洋洋洒洒在纸上可以写十几张，但整体归类起来，不外乎两大类：一大类就是希望做大事，学校毕业的新鲜人满怀抱负，希望将来能够做大
事，事情做得越大越好；另外一大类不外乎要赚大钱。所以当时我的结论就是学校毕业的新鲜人就是想做大事、赚大钱。
<br />
<br />我加入德州仪器以后，德州仪器找了一家第三方顾问公司，也做了一个调查，但是他们调查的对象，不是学校刚毕业的新鲜人，而是有多年工作经验的正在
找职业、换工作的人。此调查总共访问了近一千个人，也是询问他们在换工作、找职业时考虑的因素有哪些。顾问公司总结分类，分成三大类：第一个，他们要找
&ldquo;Great Work&rdquo;，&ldquo;Great&rdquo;就是很好、很伟大，&ldquo;Work&rdquo;就是工作，&ldquo;Great
Work&rdquo;包含工作内容本身，包含工作环境，包含工作条件，包含工作中有没有学习的机会，这都包含在这一大项&ldquo;Great
Work&rdquo;当中；第二项叫做&ldquo;Great Buck&rdquo;，&ldquo; Buck&rdquo;是美国的俚语，也就是钞票。第二大类&ldquo;Great
Buck&rdquo;也就是很好的待遇、很好的薪酬和很好的福利；第三大类叫做&ldquo;Great
Boss&rdquo;，因为这些人都是有经验的，并在社会上工作过，所以当他要换公司、要找新的工作，他希望找到一个好老板，这一点非常令我吃惊。
<br />
<br />其实也并不是非常惊讶，因为我在惠普、在德州仪器，我的职位越升越高，面试新人的机会越来越少，反而是有好的人才要离开公司时我才去面试。在我去
面试那么多好的人才必须要离开公司的时候，我总结出一个道理，这些要走的人才在刚开始谈时，他会说外面有机会，外面工作给他的薪水加倍，外面的工作给他升
迁，外面的工作比他现在更好，这些都是表面的理由。等到我深入去问、去了解、去交心，开玩笑的说&ldquo;人之将死，其言也善&rdquo;，既然都要走了，还有什么不好
讲？90%要走的人就是因为与老板处不好，或是看不起老板，或老板的能力不能让他信服，或是老板根本就不关心他，老板只是把他当作工具，为了自己达到目
的，不把人当人看，所以这些人决定要走。这样一个调查促成了我为什么写了这个题目。
<br />
<br />我这个题目叫作&ldquo;How to Be a Great Boss&rdquo;，此报告在里面提到有工作经验的人在找工作时要找三样东西&ldquo;Great
Work、Great Buck、Great
Boss&rdquo;，而且在这个报告里面，有用一种方法和技巧，是指让被调查的人强迫排优先次序，比如有的人认为薪水重要，老板也重要，调查的人就会说薪水如果再
加1000美元，你要不要换一个差一点的老板，就这样交叉比对、不断的加码，报告最后的总结是只要你能找到业界最优秀的老板，你的工资无论加多少也不换。
也就是说有工作经验的人在找工作时最重要的就是要找一个最优秀的老板，这是用任何东西都不换的。
<br /><br />我举个例子，今天我们郭总裁要找一个老板直接报告给他，只要一报出去，很多人薪水再低也会干，因为跟着一个好的老板，你可以学到很多，你学到的
个人价值是用金钱换不到的。个人的价值对未来一生有很大的影响，金钱当然也很重要，不过我看过一本书上面讲的一个人真正的财富是你花掉的，只有你花掉的钱
才是你的财富。我们总裁讲还要把钱花光，所以他捐赠、搞医疗、搞环保，搞造福社会下一代人群的工作，他宁可把这些钱都捐出去花掉。
<br />
<br />各位没有那么多的时间，所以我想把今天的报告浓缩，把中间的精华部分报告给大家。我希望各位听完这个题为&ldquo;How to Be a Great
Boss&rdquo;的报告后有所启发，希望各位都能变成优秀的老板、优秀的主管，并赢得属下的信任和尊敬，那么你的部门也一定是蒸蒸日上、不断的成长，也能交出非
常好的成绩单。
<br />
<br />中层管理者的危机
<br />
<br />
首先大家看到的是我找的一篇英文报道，这篇报道是说在1992年，美国经历的一次经济的大不景气，这一年我也记得特别清楚，相信刘扬伟特助也会记得这一
年。因为这一年我们都在惠普服务，惠普在美国之所以广受关注，就是因为从来不裁员。但是碰到经济不景气的时候，美国公司的手段是什么呢？就是裁员！而惠普
认为与其裁掉10%的人，还不如让大家减薪10%，共渡难关。在硅谷惠普很有名，那就是因为从不裁员。但这是过去的事了，现在的惠普裁员比谁都凶，在我那
个时代，我在惠普经历过两次减薪不裁员。1992年，美国经济不景气，很多公司开始裁员。当时的美国管理协会做了一个调查，报告中他们访问了836家裁员
的公司，其中约有5%的员工被裁掉了，在这被裁掉的5%的人当中约有22%的是中层管理者。这是一篇真实的报告，所以这一篇报告的题目叫作&ldquo;The
Crisis of Middle Manager&rdquo;，也就是中层主管人员的危机。
<br />
<br />管人与处理资料
<br />
<br />为什么不景气的时候会裁掉如此多的中层人员呢？我在担任中国惠普总裁的时候，发觉很多的中层经理者只做两样工作。第一个就是管人，MBA在谈到组
织行为、组织管理或组织架构、组织设计时，里面都会谈到最理想的管理范围是6到8个。但产业跟行业不一样，越独立、越专业的组织要管的人就会更多，比如说
律师事务所，就没有总经理，也没有副经理，他们只有伙伴，会计事务所也是一样。他们的组织是扁平的，因为他们每一个人都是独立的专业人士，所以越独立的专
业人士不需要人管，组织也就越扁平化。但是大的跨国组织最理想的组织就是要控制6到8个人，所以中层主管第一个事情就是管人，管6到8个人，依次往下管
理。<br /><br />第二件事情就是搜集资料、处理资料和传送资料。1997年11月，我刚加入德州仪器的时候就很惊讶的发觉，每个礼拜都会有人以我的名字发送周报，发给我的
老板、我的同事及其他部门的主管。周报不是我写的，谁以我的名字发了这个周报？我到处去问，原来是我的助理，他不做其他事情，就是把我属下的周报剪裁以后
变成我的周报然后帮我传出去。在德州仪器，这是一个不成文的规定，所以我就问，每一个德州仪器的员工是不是都要写周报？同事讲没有错，每一个员工都要写，
写上一星期干了什么事情，下个星期准备干什么事情。我又问，公司的规章制度有没有在任何地方白纸黑字的提到每个人必须要写周报？他们说没有。但为什么每个
人都写？甚至自己不写，下属帮忙剪贴传出去，这就是典型的中层经理在做的事&mdash;&mdash;搜集资料、汇总资料，然后送出去。
<br />
<br />中层主管价值无用
<br />
<br />过去老式的经理除了管人就是处理资料，其价值也就越来越低，这是因为：
<br />
<br />第一，员工的教育程度越来越高，自我管理的团队不断出现。在八九十年代流行的一种&ldquo;High Preformance
Team&rdquo;,也就是高工作效率的管理团队，这是一种水平的团队。一般公司的组织架构，都是为了自己组织的方便而设计，而不是为了客户的方便而设计。比如
说，我们所有制造的人在一个单位，因为他们专业是一样的，讲的语言是一样的，比较好管理。所有产品设计的在一个部门，因为这些人技术是一样的、知识是一样
的，方便管理。但客户看我们的组织是从市场部门、从研发、从制造、从行销销售角度去看，这样一个流程对他们很不方便。所以，在八九十年代各公司提倡
&ldquo;High Preformance
Team&rdquo;观念，即针对主要客户，我们成立这样一个团队，它跨部门专为主要客户来服务，这种团队越来越多，也就使得中层管理者失去作用。因为他们自己会
管，不需要中层管理者去管。
<br />
<br />第二，电脑的价格越来越低，电脑的使用越来越普遍，电脑对资料的处理也使得中层管理者失去作用，他们没有必要去处理、剪接资料。在我以前干经理的时候，那时电脑不普及，也没有E-mail，只能用电报，而现在工具太多、太方便，中层主管的作用也就越来越低。
<br />
<br />第三，产业的竞争逼迫成本不断降低，成本降低最好的方法就是裁员。1993年，我在硅谷，有一个叫做玉山科技协会的华人企业家协会请我去演讲。因
为他们知道我在92
年就担任中国惠普的总裁，所以很希望了解中国的商业环境跟企业经营特点。当时我就问玉山科技协会的主委，询问当时会员有多少。他说有几百个人。我又问在什
么时候增加最快，他说在经济不景气的时候会员增加最快。因为在美国工作的华人，一旦碰到了美国经济不景气的时候，只有两条路可以走：一是找不到工作就回学
校再念一个学位。我在德州碰到一个朋友，念了四个硕士学位和一个
博士学位，到现在还是找不到工作。因为在裁员的时候，先裁学位高的，因为他们的薪水比较高，其次裁黑皮肤、黄皮肤的，你说美国没有种族歧视那是骗人的。第
二条路是逼着自己去创业。所以该协会的会员人数就增加了，因为找不到工作自己就去开店了。我另外有一个演讲的题目是《创业或就业》，这里面就讲到创业的人
有两种，一种是很爱赚钱、很喜欢赚钱，又很自私，这种人可以成为企业家，因为他们不喜欢给别人打工；第二种创业的人是被逼上梁山，没有办法逼着自己去开
店。所以竞争逼着你去降低成本、去裁员，裁员后就会出来很多小公司，小公司越来越多，竞争也就越来越激烈，因此中层经理就被裁掉，变成了小老板。所以为什
么1992年美国经济不景气的时候，有这么多的中间经理被裁掉，因为这些中间经理没有附加价值。
<br /><br />我来到富士康已经一年了，总裁叫我负责白牌手机。我到白牌手机市场去了解了一下，在这个市场里面最大的供应商是一家叫做&ldquo;良泽&rdquo;的公司，它是一家大陆民营
企业，它的白牌手机市场占有率占到50%，所以我就想方设法把良泽的市场部经理挖过来。NWInG在手机的领域一年大概有110个客诉，我就问良泽有多少
客诉，良泽的市场部经理说每年都有至少400个客诉。但是我们发现它的市场占有率却是50%，而我们的市场占有率只是4%。我又问良泽的优势在哪里，他说
有两点：一是价格，二是速度快。我就想到这不是我们总裁讲的嘛？我们富士康不就是卖速度、品质、工程服务、弹性和成本吗？结果这五点我们同良泽相比，我们
全输它。它们的速度快，他们的销售部门接到客户的抱怨电话就会马上飞奔过去，速度绝对比我们快；他们弹性比我们高，要一个报价一天就可报给他，而我们从工
管系统一步步走，两个礼拜也没报出去；成本也比我们低很多，工程服务比我们好，这是什么原因？后来我把两者的直接人员和间接人员一比较，我发现不得了了，
他们的间接人员也就是中层主管还不到我们的十分之一，物料差不多，员工工资及福利还没我们好，而费用我们是他们的许多倍。
<br />
<br />这就出现一个问题，按道理如果我们的间接人力都能创造价值，并且价值能被客户认可，那么这应该是富士康的优势，可是今天我们输良泽就输在我们的间
接人力比他们多。因为我们没有创造价值，当我们没有创造价值，当我们的价值不能被客户认可，当我们的价值不能反映价格的时候，我们的优势反而成了劣势。所
以我们的成本比人家高，我们的速度比人家慢，我们的弹性比人家差、工程服务也不好，而我们的质量也不见得比人家好到哪里去。这就是今天我要讲的内容，作为
一名中层人员要做什么，当你不做事的时候，你就会变成公司的负担，变成公司的劣势。
<br />
<br />新旧主管的对比分析
<br />
<br />老式管理
<br />
<br />我在此跟大家做一个比较，第一，过去的经理认为我就是老板，我就是管理人员，你就得听我的。第二，做任何事情都要听上级老板的，所有的人都是一条
线上去，低一级领导听高一级领导的。我在德州仪器做亚洲总裁的时候特别的累，因为我下属有问题根本就无法解决，他们总是向自己的老板报告，只有到上面老板
有交集的时候才得以解决。所以我下面有9000多人，出了问题，彼此不能解决，而是一级一级问领导，一条线上来，等到我这儿有交集了，让我去解决。第三点
就是工作中容易被组织架构所束缚，比如制造就只能管制造，客户打电话来，就会把工作推出去。组织分工清楚，是为了提升效益，但事实反而让客户很不满意，因
为大家都是铁路警察各管一段，每一个人都在自己的框子里面工作，别人的事都不管。第四点是中层主管关起门来自己作决定，不找其他部门主管商量，更不找自己
部门的员工作讨论。
<br /><br />第五点就是喜欢把讯息藏起来。我在IT行业打滚了30多年，讯息是一个很奇怪的东西，任何有形的东西越用越少，比如库存、银行里的钞票，但讯息却是越用越
多，可以相互分享。并且讯息知道的人越多，它的力量也就越大。像菲律宾革命，菲律宾的人民对政府不满，菲律宾人是靠短信来传递讯息，很快的时间就能组织游
行暴动。知道的人越多，讯息的力量也就越大，同样，在一个企业里面，讯息越透明，知道的人越多，力量也就越大。我在富士康的演讲已经讲了几十场，我讲的越
多，听到的人越多，力量也就越大，所以我愿意讲。很多人把我的报告拿去再讲，这样讯息越普及力量也就越大。但老式的经理总是把讯息藏在口袋里，以此觉得自
己很伟大。
<br />
<br />还有一点就是过去的经理死守专业，此现象在大陆尤其严重。我在担任中国惠普总裁时，为了增加惠普的投资，我成立了六个合资公司，三个工厂、两个研
究开发单位。我需要一个懂财务的人帮我做业务发展经理，我当时看上了我们会计部门经理，她是一名女士，叫韩颖，厦门大学财经系毕业生。她在惠普辛辛苦苦工
作十几年，好不容易干到会计部经理，我要把她拔出来到我的总裁办做我的业务发展经理。让她帮我成立新的合资公司，帮我设立新的工厂，帮我成立新的研究开发
中心。我跟她谈了三天，她打死都不干，我给她升官她都不干，这是为什么？她对我说：&ldquo;Terry，你是外派来的，你们干到三五年就走了，你走了之后我怎么
办？我的会计经理位子被人坐了，你走了，我再到哪里去找工作？&rdquo;这就是死守专业，后来我没办法，我就硬把她拔出来，马上宣布继任人，她也没办法，就乖乖的
做我的业务经理。结果跟我干了两年，两年后我离开到德州仪器，又过了半年，她被猎头公司挖走，挖到一家叫&ldquo;亚信&rdquo;的在美国上市的公司，而且&ldquo;亚信&rdquo;到美国
上市，就是韩颖一手来操作。她被&ldquo;亚信&rdquo;挖去做CFO，结果有一天她给我寄了一本杂志和一封感谢信，信上说她是唯一一个大陆出生的财经人才并登上了一本英
文杂志《ASIACFO》的封面，她的照片登在封面上，非常的荣耀。她很感谢我当时把她拔出来，要不她还在会计部当经理呢！所以，作为一个专业的经理人，
千万不要死守专业，死守专业是大陆员工普遍存在的一个现象。我再举个例子，我在大陆认识很多国家领导人，有时候看到他们拿出名片我就觉得很奇怪。比如当时
的信息产业部部长王旭东，还有第一常务副部长，上面写的是高级工程师，我心想都做部长了，上面写个高级工程师，商务部副部长马秀红，上面写的是高级会计
师，所以老式的管理人死守专业，这是大陆一个普遍存在的现象。
<br /><br />最后一点，老式的经营管理人不管你工作做得好不好，关注的是每天有没有加班，每晚有没有干到十点，如果有就是好员工，如果没有就是坏员工。即使部门亏损，这都没有关系，只要你每晚工作很晚，只要你为部门、为组织努力工作就行，这是老式管理者的思维方式。
<br />
<br />新式风采
<br />
<br />那么新的中层主管应该做什么呢?这些和上面都是一一对应的。新的经理会把自己当作顾问、当成一个支持者。我很喜欢惠普讲的一句话：经理的责任就是
要创造环境，让他的属下可以成功，这是经理最重要的责任。做经理就是要创造环境、提供资源、让你的属下能够成功、变成英雄，那你就尽到了经理的责任。所以
作为一个经理，你不是老板，你不是掌管生死，而是要做一个支持者，做一个团队领导者，做一个内部的顾问，帮助属下成功并比自己做得更好。
<br />
<br />在讲第二点前，我先举个例子，我在大陆时间已经很久，1988年就在大陆，已经20年了，我妻子是上海人，所以你们也不用把我当台湾人，大陆的现
象我非常清楚。我在北京的时候，有一次我问我的司机老李，老李跟我同龄是老北京人，我问他：&ldquo;老李，如果邓小平突然走了，没有一个明确的领导，你怎么
办？&rdquo;老李想了半天：&ldquo;这事情可严重了，我们必须要有一个领导，要不就乱了！&rdquo;在西方国家和西方企业有一种管理叫&ldquo;矩阵式管理&rdquo;，即在西方企业里面，一个
人有两三个老板是很正常的，但是这在大陆是行不通的。大陆人只跟一个领导，突然有几个领导就不知道应该听谁的啦，所以任何事情都要找领导，找领导来拍板。
在富士康做一个新的主管你不要找领导，你跟哪个部门有问题你就直接去找那个部门解决才行。这就是第二点讲的直接去解决问题而不是去找你的领导。
<br />
<br />第三点，过去老的领导他是制造部门的，就一辈子制造，他搞研发、就一辈子研发，他是保安、就一辈子干保安。他就不会去想，外面的世界已经变了，而
现在的组织结构是不是也要跟着改变。中国惠普销售电脑、PC仪器、打印机等产品，自然有维修部门，维修部门里面要有库存、备料，所以坏的仪器设备回来以后
马上到库房拿备料把它换上修好，再送还给客户。我在惠普期间，库房的备料顶多能够储备70%，因为惠普的产品太多了，所以库房里的备料是维修使用的维修
料，顶多配到70%，如果没有备料怎么办？这时候就有了热线订货，结果在1994年我接到客户抱怨，说热线订货已经订了两个月了还没到货，这叫什么热线订
货啊？我就找维修部门问，他们说：&ldquo;我们维修部门热线订货是把每一个月的所有热线集中起来，然后下一个订单，不然成本会太高。&rdquo;我就问：&ldquo;你们做多久
了？&rdquo;他们回答说做了十年了。我就说十年前中国惠普的营业额只有200万美元，现在的营业额是8000万美元了。从200万美元到8000万美元，这负责
仓库订货的就不会去想想看，他就不会去改变。一个好的经理会随着市场的改变、随着业务的改变、随着客户需要去改变调整组织，而不是永远保持不变。
<br /><br />第四点，俗话说：&ldquo;三个臭皮匠，胜过诸葛亮&rdquo;。新的经理人做决定，要想办法把手下人一起找进来，大家商量、大家讨论。并且当你和手下参与部门决策与未来方
向的时候，要让他们觉得这是我的事情，我要参与，我要执行，而不是上有政策下有对策，老板的指示也别问我的意见，我也未必会执行。所以一个好的主管要懂得
让手下参与，要懂得让其他部门及相关部门一同参与。这样做出来的决策、决定才能得到大家的接受，才能受到大家的鼓励，才能去执行。
<br />
<br />第五点就是好的主管要让讯息和大家分享，越多人知道，信息量就越大。我曾说过惠普员工满意度调查在1991年是全世界最低的，员工满意度调查共分
10大项，从惠普文化、管理、工作发展、培训、公司结构等方面展开调查，结果全世界都一样，员工的工资满意度最低。一直到1997年中国惠普员工满意度变
成全世界最高以后，薪资的满意度还是所有项目里面最低的。所以经过我几年的努力，把中国惠普员工的福利全部换成现金发给员工，从我去中国惠普，平均工资为
600元人民币，经过两年把平均工资升到2500元。1994年，中国惠普不到400人，全中国个人所得税惠普就占到全国的千分之三。以前拿到几百块而其
他事情全部都由公司安排妥当，而现在全部转化成现金由他们自己去处理，所以我认为最重要的还是让员工能够培养独立自主的能力，自己想办法处理好个人财物问
题，因此讯息要分享。
<br />
<br />还有一点，新的人、新的主管要想办法不断的轮调，而且要多学习其他的专业能力，大家都知道一个英文词&ldquo;Professional&rdquo;,也就是职业
化。我举个篮球的例子，大家都知道姚明是美国NBA火箭队的，美国NBA篮球队是职业队。如果我当教练组成一个篮球队，中锋找像姚明一样高个的，会盖帽、
会灌篮的，大小前锋要会带球切入的，钻来钻去能破坏对方的防守队形，后卫要求控球要好，要懂得分球，还可在三分线外一个冷箭得三分。我把这些最好条件的集
合在一起，这是不是一个职业队吗？不是，这是业余队。职业队和业余队的区别是业余队每一个位置都挑最好的人，但他们只会打那一个位置，而职业队不同。前年
的NBA灌篮大赛中冠军是罗宾逊，身高5尺9寸（179公分）就拿到了灌篮冠军，而得三分球冠军的是小牛队的&ldquo;德国坦克&rdquo;诺维茨基。所以真正的职业队是每
一个位置都要会打，但是上了场打战术还是要听教练的。如果你只有一个位置很会打，其他位置不会打，那叫业余队。我的意思是说要做富士康的成功主管，不能死
守专业，所以我们要鼓励轮调。但是现实中，别的部门有申请的时候，不让他轮调，这是不对的。如果你这么做，你不配做一个称职的主管。所以我在这里鼓励各位
主管、各位好的管理人员，你要让部下在不同的位置上轮调。如果死守专业的话，未来生涯的路会越走越窄。要成为一个&ldquo;Professional&rdquo;，需要各个
部门都要懂，你们在座的各位将来有些人会变成总经理，你有没有看到一个总经理，财务也不懂、人资也不懂、制造也不懂，只懂某项专业，这种人能当总经理吗？
<br /><br /><br />最后一点，不要要求你的属下加班、加点，应该看结果。只要你三个小时能做完一天的工作，做的非常好，绩效考核还是应该给你很高。你要要求结果，而不是要求工作时间的长短。
<br />
<br />离职与&ldquo;三累&rdquo;
<br />
<br />由于时间的关系，接下来我和各位谈谈离职率的问题。华南的离职率非常高，我就找很多人问，为什么很多富士康的员工要离职，我总结出来&ldquo;三大累&rdquo;，
今天拿这个作为今天演讲的总结，这&ldquo;三大累&rdquo;不是种类的&ldquo;类&rdquo;，而是身体疲劳的&ldquo;累&rdquo;，我发觉离开富士康的人都是因为这&ldquo;三大累&rdquo;。
<br />
<br />第一个，心理上的累。心理上为什么累呢？因为日复一日，每天重复做同样的事，工作做得越好，老板给他的工作越多，然后别的部门有机会，老板又不让
他走。他的工作没有创新、没有变革，只做同样的事，所以造成心理上的累，没有学到新的东西。这是谁的错？老板的错。总裁讲：作为基层的员工要有责任心，中
层的主管要有上进心，高层主管要有企图心。作为一个中层的主管要有上进心，上进心是什么意思？就是不断地改变你这个部门做事的方法，并要知道谁做的最好。
明朝袁了凡，他一辈子作学问，学问非常高，生活也非常清苦，死的时候也没留什么家产给他的儿子。只写了四篇文章，叫《了凡四训》留给儿子。第一篇叫《立
命》、第二篇叫《改过》、第三篇叫《积善》、第四篇叫《谦德》。我给你们讲第二篇《改过》。人都有进步的地方，并要经常改过。改过要有三个&ldquo;心&rdquo;：第一个
是&ldquo;耻心&rdquo;，意思是人家做的好，是怎么做的呢？我们不如人家，和人家的差距有多少呢？第二个是&ldquo;畏心&rdquo;，我们和人家差那么多，我们怕赶不上人家，我们怕被
处罚，怕被公司开掉。第三个是&ldquo;勇心&rdquo;，因为改过是需要勇敢，需要承诺、需要有毅力。所以《了凡四训》第二篇《改过》的三个&ldquo;心&rdquo;非常好。作为部门的主
管，你的部门过去几年有没有进步过，做事的方法有没有改变过呢？假如你是自动化部，那你知不知道集团里做自动化做得最好的是哪一个部门？不知道你就是没有
耻心。我们要去了解谁做的最好，我们和他们的差距有多少，这就叫&ldquo;耻心&rdquo;。第二个&ldquo;畏心&rdquo;就是说我没人家做的好，搞不好就会被炒掉，我拖累了整个事业群、
整个单位，这就叫&ldquo;畏心&rdquo;。知道不好，会害怕，那就改进，就勇敢定下目标，不断地改进，这就是&ldquo;勇心&rdquo;。所以每年我一定要坐下来自我反省，我在过去一年当
中，我做的哪些东西是别人没做过的？我改变了哪些做事方法，我独创了哪些做事方法？每一个人都要认真的写出些东西来，写不出来的时候，你没有尽到主管的责
任。你没有尽到主管责任的时候，你下面的人心理上就觉得累，这就是第一累。<br /><br />第二累是生理上的累。就是事情做不完，要加班，这是谁的错？还是老板的错。你是部门的主管，你这个部门存在的原因是什么？部门存在的目的是什么？你要能写
出一个经营宗旨来。1985年，我和我们的总裁及干部已经将鸿海的经营宗旨跟五年策略规划定出来了。经营宗旨是一段话，这段话是来解释企业为什么存在的原
因，也可以缩小成每部门为什么存在的原因。你可以把这个工作为什么存在的原因写出来的话，那么这就变成了工作岗位说明书。每个部门一定要有主要的产出，比
如说，采购部门，采购部门最主要的产出是下订单，下订单这件事情我叫他&ldquo;Must&rdquo;，即必定要做的。下订单以后，不交货、质量出问题了，所以你要退货，要
找到质量问题，要他索赔。这些是要圆满达成下订单、取得材料的目的。我把这些事情用英文叫做&ldquo;Want&rdquo;，中文翻译成需要。为了达到必要的目的，我需要做
这些事情来让他更圆满。但是你的供应商来了，他请你吃饭，你去了，这叫培养供应商感情，英文叫做&ldquo;Nice to
Have&rdquo;,即想要。任何一个部门，你要圆满的完成你部门的工作，这三种事情多多少少都要做。但是要做到合理的时间分配，必要事情要占到65%，25%花
在做需要的事情上，剩下10%，若有余力的话去做想要的。有些员工要加班，要加人。结果他把60%的时间花在想要上面，不管多累，供应商请吃饭就去了，去
唱歌，唱到半夜1点多，等第二天早上8点钟上班，累得要死。然后需要做的工作，花上20%的时间，剩下必要工作20%的时间，那这是谁的错啊？这是主管的
错。你要管员工，要告诉员工什么是必要的、什么是需要的、什么是想要的，当你们做考绩的时候，要看花了多少时间做必要的，又花了多少时间做需要的。
<br />
<br />讲一个故事给各位听，英国的某炮兵司令，举办一次炮兵操练，邀请好多人来参观，非常热闹。10个炮兵跑上来，每个人都很熟练，只有一个人在炮后方
5公尺的地方从头站到尾，而其他全部忙得要死。有一个企业家老板问司令，你们炮兵演习训练有素，可是为什么有一个兵站在炮后头不动啊？司令说：&ldquo;从我进炮
兵学校开始就有第十号兵站在那里不动啊？&rdquo;结果回去翻资料，原来以前是靠马拉炮，打炮的时候要有一个兵拉着马，不然炮一打，马全跑光了，时代进步了一百多
年，全是机械化了，拉马的兵结果还站在那里。我在惠普远东区当市场部经理的时候，老板是个美国人，个子很高，有一天他在办公室里写了20张小纸条，说一个
月内找到这张小纸条的到他办公室换200元港币。他把纸条塞进档案夹和报表里，结果两个月都过去了，仍没有人找他。我讲的意思是说，电脑报表很贵，文件夹
是花多少心血弄的，结果这些都成了不拉马的兵。
<br /><br />我在香港当市场部经理的时候，下面有个经理负责宣传，他找了一个顾问公司，每个月帮我们做市场见报率的调查，每个月送一本彩色漂亮的统计图表分发给30几
个高层经理，我也是其中一个。我就拿来看，结果发现20几个很明显的错误，我就问经理，一个月做这个统计花多少钱，他说：&ldquo;一个月2万美元，一年24万美
元。&rdquo;带着这么多错误就这样发给30几个高层经理，我又问：&ldquo;没有任何人跟你说这个报告里有很多错吗？&rdquo;他说：&ldquo;没有，从来没有！&rdquo;这就是不拉马的兵。它
是说你不要他的时候对你的部门的结果不发生什么影响，而且只有正面的影响，因为能帮你省钱。所以当部门人员喊工作重、要求加人的时候，你去看你的部门，把
那些不拉马的兵的揪出来，叫他去做别的事，这是第一招。第二招，所有的工作都可以分为必要的、需要的和想要的，当你工作量重的时候把想要的全部砍掉，省掉
应酬的时间可以做很多必要和需要的事情。作为一个部门的主管想办法减轻员工生理上的累，方法就是我教的这两种。
<br />
<br />第三种叫做情绪上的累。情绪上的累都是大家互相给的。我发觉上班可以很快乐，但是大家却相互给对方不快乐，最大的情绪上的累是来自主管的。其实大
家彼此之间应该尊重、互相帮忙，讲几句好话，这样大家工作起来情绪就会很好。所以从现在开始，我们在NWInG抓离职率，主管的年终考核要看他们下属的离
职率。离职率高的部门主管一定受到惩罚，因为离职率高会造成员工心理、生理、情绪上的累，员工受不了就会一走了之。
<br />
<br />老板影响人生
<br />
<br />在这里，我趁这个机会对各位主管讲，其实影响一个人一生的有许多人，包含你的父母，妻子和先生，还有一个人，那就是第一个老板，他也可以影响你一
辈子。像我就跟我的第一个老板学了很多，到现在我签名的方法和日期都和他一样。我常讲，加入一个企业，当你是最基层员工的时候，免不了都有向上看的习惯，
即看老板的脸色。当你成为主管的时候，你也要养成一个习惯&mdash;&mdash;向下看。什么叫向下看呢？你部门有这么多的人，有那么多家庭，家庭的喜怒哀乐会受到你很大的
影响，这些家庭未来的发展，你有不可磨灭的影响。如果你是个好的主管，你就可以帮助这些家庭发展。只为自己想，你就会对不起你的属下。往上看是自私的，要
学会往下看，想到你的这些同事都靠你了，你自己做不好，你的部门就做不好，他们的未来也就没有前途了。
<br />
<br />我这次来烟台，对烟台留下很好的印象，和烟台管委的官员一起用餐时，他们对烟台富士康的期望也非常高，我们谈到未来的发展，我认为未来的发展不是
靠产品，而是靠人，靠在座所有的这些人。所以我希望我讲的话对各位有所启发，希望各位能学习一下新的做法。第二就是想办法解除三累。解除三累是一个消极的
做法，积极的做法是我想让每一个员工每天上班都感觉到快乐！我认为人生当中最快乐的事情就是兴趣和工作能够结合起来。所以怎样叫你的属下和自己能够把工作
当作乐趣，我们应该去努力。如果你做不到这种积极的做法，你要把三累消除掉。如果能做到消除三累，我相信你的属下定会认为你是个好的主管，因为有工作经验
的求职者，就是想找一个好的老板。我在这里衷心希望各位都可以变成优秀的主管，你的属下无论如何都会跟你，因为跟你能学到很多东西。
<br /><br /><br />有问必答
<br />
<br />问：程副总裁你好，鸿海之所以发展到这么大，肯定有很多成功的经验，但是我认为过去成功的经验可能会越来越多的成为鸿海进一步发展的包袱（比如过
去的军事化管理），同时过去很多的元老还在，他们战功很大，他们现在都身居高位，新人不一定有机会升到上面去，面对如此大的集团，您作为一个新来的空降
兵，您有没有能力和勇气把这些做一个全新的变革？谢谢！
<br />
<br />答：你问的问题非常好，在NWInG有很多人和我讲，说那里已在慢慢变革，第一个变化就是我们的卢副总裁，我不知道你们有没有注意。我和每个事业
群的总经理都花了不少时间，慢慢跟他们谈，也在慢慢改变他们的观念。要改变一个人的习惯和观念是不容易的，但是总要有去做。你要改变一个文化需要时间，我
花了6年时间才把中国惠普真正改变。如果你们有机会碰到1992-1997在中国惠普干过的人，你去问问他：&ldquo;你对程天纵的印象怎么样？&rdquo;我相信不会太
差。当时惠普有几百人，今天富士康有60万大军，我只能从你们做起。因为员工眼中所看到的富士康文化并不是总裁讲的&ldquo;爱心、信心、决心&rdquo;，因为那是写在墙
上的字。员工眼中所看到的鸿海、富士康的文化是你们的所作所为。我在惠普十年没有太讲课，来到富士康我又把以前的想法、观念谈出来，然后再加一些新的东西
来跟各位讲，这是为什么？因为我要改变你们，你们又要去改变你的属下。文化这种东西并不是职位高的影响职位低的，也不是权力大的影响权力小的，而是人数多
的影响人数少的。所以我现在到处讲课，我希望说服你们和我一起来改。 <br />
<br />1992年1月我从美国回来，在惠普公司训练了10几年，惠普给我一个想法：商业道德最重要。在德州仪器也是一样的，我对于商业道德要
求非常高。所以我到中国惠普以后，前两年我花了很多时间教育他们，公私要分开，不可以贪污腐败，不可以用假发票报账。那两年我开除了50多个员工，其中有
清华的博士、北大的硕士，很多人和我说：&ldquo;Terry，你不懂，中国的环境就是这样，你不拿钱，不会有人把钱塞到你的手里。&rdquo;我说：&ldquo;中国的整个大环境怎
么样我不管，只要是我管的我要保证它干净。&rdquo;我把所有中国惠普的供应商老
总全部叫过来给他们上课，上完课后强迫他们每一个人签一个承诺书，承诺书上说不主动贿赂惠普员工，假如被我发现一个，我就把他的所作所为发到美国商会去，
叫美国商会发给每一个在华的企业不跟他做生意。我能做到的就是这样，所以当有人和我讲整个大陆风气就是这样，我就放弃了？我不放弃！所以刚才问我问题的那
位同仁，不要被那些少数人的观念所影响，最重要的是你自己心里头怎么想。每个人尽自己的力量去影响其他人，就能形成一股力量。
<br /><br />我知道我们过去有很多成功的经验已经完成阶段性的任务，将来我们富士康要变成一个永远基业常青的集团就必须变化。总裁在几个月前成立了一个专案&mdash;&mdash;&ldquo;永营
专案&rdquo;，而且找了很多学界的专家，帮我们企业作诊断，商讨富士康集团要怎么改才能够永续经营。所以总裁已经在做了，但是这些我觉得都不重要，重要是你们每
一个人，我认为在外面找再多的专家都没有用，最重要的是你们在座每一位。烟台的成功靠你们在座每一位，你们要烟台成功，所以我愿意和大家一起努力，你们就
是烟台，烟台未来的发展就是靠你们，不是靠别人。
<br />
<br />谢谢！
<br /><br />摘自：http://www.20ju.com/content/V41570_13.htm<br /><br />]]></description>
		</item>
		    
		
		<item>
			<title>一些分布式的文件系统</title>
			<link>http://duckweeds.blog.sohu.com/97319562.html</link>
			<comments>http://duckweeds.blog.sohu.com/97319562.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Fri, 15 Aug 2008 16:16:07 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/97319562.html</guid>
			<description><![CDATA[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GlusterFS=&gt;<a href="http://www.gluster.org/" target="_blank">http://www.gluster.org/</a><br /> &nbsp; &nbsp; &nbsp; &nbsp; MogileFS=&gt;<a href="http://www.danga.com/mogilefs/" target="_blank">http://www.danga.com/mogilefs/</a><br /> &nbsp; &nbsp; &nbsp; &nbsp; FastDFS=&gt;<a href="http://code.google.com/p/fastdfs/" target="_blank">http://code.google.com/p/fastdfs/</a><br /> &nbsp; &nbsp; &nbsp; &nbsp; HDFS=&gt;<a href="http://hadoop.apache.org/core/docs/current/hdfs_design.html" target="_blank">http://hadoop.apache.org/core/docs/current/hdfs_design.html</a><br /><br />]]></description>
		</item>
		    
		
		<item>
			<title>修改Linux内核参数，减少TCP连接中的TIME-WAIT sockets&#60;转&#62;</title>
			<link>http://duckweeds.blog.sohu.com/97160330.html</link>
			<comments>http://duckweeds.blog.sohu.com/97160330.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Wed, 13 Aug 2008 18:02:57 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/97160330.html</guid>
			<description><![CDATA[新增的一组Apache服务器上线以来，我用netstat
-an命令发现服务器中有大量状态为TIME-WAIT的TCP连接，于是用/sbin/sysctl
-a查看了一下Linux的各项内核参数，并翻阅有关资料，决定修改其中的两项参数，以达到减少TCP连接中TIME-WAIT sockets的目的。<br /><br />　　<span style="color: rgb(0, 128, 0);">vi /etc/sysctl.conf</span><br />　　编辑/etc/sysctl.conf文件，增加三行：<br /><div><div>引用</div><div>net.ipv4.tcp_syncookies = 1<br />net.ipv4.tcp_tw_reuse = 1<br />net.ipv4.tcp_tw_recycle = 1</div></div><br />　　说明：<br />　　net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时，启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭；<br />　　net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接，默认为0，表示关闭；<br />　　net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收，默认为0，表示关闭。<br /> <br />　　再执行以下命令，让修改结果立即生效：<br />　　<span style="color: rgb(0, 128, 0);">/sbin/sysctl -p</span><br /> <br />　　用以下语句看了一下服务器的TCP状态：<br />　　<span style="color: rgb(0, 128, 0);">netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</span><br />　　返回结果如下：<br />　　ESTABLISHED 1423<br />　　FIN_WAIT1 1<br />　　FIN_WAIT2 262<br />　　SYN_SENT 1<br />　　TIME_WAIT 962<br /> <br />　　效果：处于TIME_WAIT状态的sockets从原来的10000多减少到1000左右。处于SYN_RECV等待处理状态的sockets为0，原来的为50～300。<br />]]></description>
		</item>
		    
		
		<item>
			<title>查看Apache并发请求数及其TCP连接状态&#60;转&#62;</title>
			<link>http://duckweeds.blog.sohu.com/97159783.html</link>
			<comments>http://duckweeds.blog.sohu.com/97159783.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Wed, 13 Aug 2008 17:58:09 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/97159783.html</guid>
			<description><![CDATA[这两天搭建了一组Apache服务器，每台服务器4G内存，采用的是prefork模式，一开始设置的连接数太少了，需要较长的时间去响应用户的请求，后来修改了一下Apache 2.0.59的配置文件httpd.conf：<br /><div><div>引用</div><div># prefork MPM<br /># StartServers: number of server processes to start<br /># MinSpareServers: minimum number of server processes which are kept spare<br /># MaxSpareServers: maximum number of server processes which are kept spare<br /># MaxClients: maximum number of server processes allowed to start<br /># MaxRequestsPerChild: maximum number of requests a server process serves<br /><br />StartServers &nbsp; &nbsp; &nbsp; &nbsp; 10<br />MinSpareServers &nbsp; &nbsp; &nbsp;10<br />MaxSpareServers &nbsp; &nbsp; &nbsp;15<br />ServerLimit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2000<br />MaxClients &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2000<br />MaxRequestsPerChild &nbsp;10000<br /></div></div><br /><hr /><br />　　查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）：<br />　　Linux命令：<br /><div><div>引用</div><div>ps -ef | grep httpd | wc -l</div></div><br />　　返回结果示例：<br />　　1388<br />　　表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整，我这组服务器中每台的峰值曾达到过2002。<br /><hr /><br />　　查看Apache的并发请求数及其TCP连接状态：<br />　　Linux命令：<br /><div><div>引用</div><div>netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</div></div><br />　　（这条语句是从新浪互动社区事业部技术总监王老大那儿获得的，非常不错）<br />　　返回结果示例：<br />　　LAST_ACK 5<br />　　SYN_RECV 30<br />　　ESTABLISHED 1597<br />　　FIN_WAIT1 51<br />　　FIN_WAIT2 504<br />　　TIME_WAIT 1057<br />　　其中的SYN_RECV表示正在等待处理的请求数；ESTABLISHED表示正常数据传输状态；TIME_WAIT表示处理完毕，等待超时结束的请求数。<br /><hr /><br />　　关于TCP状态的变迁，可以从下图形象地看出：<br />　　<span style="text-decoration: underline;"><br /></span><img src="http://1861.img.pp.sohu.com.cn/images/blog/2008/8/13/17/27/11c61c62211g215.jpg" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" border="0" />　　<br />　　状态：描述<br />　　CLOSED：无连接是活动的或正在进行<br />　　LISTEN：服务器在等待进入呼叫<br />　　SYN_RECV：一个连接请求已经到达，等待确认<br />　　SYN_SENT：应用已经开始，打开一个连接<br />　　ESTABLISHED：正常数据传输状态<br />　　FIN_WAIT1：应用说它已经完成<br />　　FIN_WAIT2：另一边已同意释放<br />　　ITMED_WAIT：等待所有分组死掉<br />　　CLOSING：两边同时尝试关闭<br />　　TIME_WAIT：另一边已初始化一个释放<br />　　LAST_ACK：等待所有分组死掉<br /><br />转自;http://blog.s135.com/read.php/269.htm<br />]]></description>
		</item>
		    
		
		<item>
			<title>cygwin中文输入和中文显示</title>
			<link>http://duckweeds.blog.sohu.com/96179205.html</link>
			<comments>http://duckweeds.blog.sohu.com/96179205.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Sat, 2 Aug 2008 11:56:19 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/96179205.html</guid>
			<description><![CDATA[<p>
				<strong>中文输入</strong>
				<br />在~\.inputrc,设置： <br />set meta-flag on <br />set convert-meta off <br />set output-meta on <br />set input-meta on<br />set completion-ignore-case on</p>
		<p>
				<strong>中文显示</strong>
				<br />在~\.bashrc中,设置： <br />alias ls='ls --show-control-chars --color=auto'</p><br /><p><br /></p>原文摘自：http://www.blogjava.net/waterye/archive/2007/03/24/106047.html 
		]]></description>
		</item>
		    
		
		<item>
			<title>在Cygwin上安装编辑器vim </title>
			<link>http://duckweeds.blog.sohu.com/96178802.html</link>
			<comments>http://duckweeds.blog.sohu.com/96178802.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Sat, 2 Aug 2008 11:50:14 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/96178802.html</guid>
			<description><![CDATA[<br />由于Cygwin默认安装(就是推荐的安装)后，没有安装文本编辑器，<br />所以需要重新安装一下vim包。<br />由于已经装上了Cygwin，将你的安装程序拿出来重新安装一次，其中，只当下来vim的包就可以了。<br /><br />关键的几步如下：<br />按照原来安装的时候默认一路&quot;下一步&quot;走来，到这里停：<br /><br /><a href="http://pp.sohu.com/photoview-215329578-22836848.html" target="_blank"><img src="http://1861.img.pp.sohu.com.cn/images/blog/2008/8/2/11/14/11c2788518dg214.jpg" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" border="0" /></a><br /><br />点击上面的&ldquo;VIEW&rdquo;按钮，可以查看到Cygwin所有的软件包的安装信息，KEEP就是就是已安装，SKIP就是跳过安装<br />找到我们要安装的vim一项：<br /><a href="http://pp.sohu.com/photoview-215330435-22836848.html" target="_blank"><img src="http://1851.img.pp.sohu.com.cn/images/blog/2008/8/2/11/18/11c278c7f4dg215.jpg" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" border="0" /></a><br /><br />我们在SKIP上面点击，使它变成这样（当然其他版本也可以）：<br /><img src="http://1813.img.pp.sohu.com.cn/images/blog/2008/8/2/11/19/11c278c573cg214.jpg" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" border="0" />下一步，它会在服务器上将要安装的软件包下载下来，自动安装，安装完成，一切OK。<br /><img src="http://1841.img.pp.sohu.com.cn/images/blog/2008/8/2/11/19/11c279263fbg213.jpg" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" border="0" />看看结果：<br /><img src="http://1841.img.pp.sohu.com.cn/images/blog/2008/8/2/11/19/11c2792b870g213.jpg" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" border="0" /><br /><br /><br />原文摘自： http://www.cppblog.com/fwxjj/archive/2008/05/15/31883.html<br />]]></description>
		</item>
		    
		
		<item>
			<title>cygwin运行所缺少cygintl-8.dll文件</title>
			<link>http://duckweeds.blog.sohu.com/96177902.html</link>
			<comments>http://duckweeds.blog.sohu.com/96177902.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Sat, 2 Aug 2008 11:36:01 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/96177902.html</guid>
			<description><![CDATA[<h3><font face="宋体" size="2">cygintl-8.dll
文件的在 Cygwin-20070129\</font><font size="3">http%3a%2f%2fwww.cygwin.cn%2fpub%2f</font><font face="宋体" size="2">\release\gettext\libintl8\libintl8-0.15-1.tar.bz2</font></h3><br /><font size="2">这个文件里，</font><br /><font size="2"><font face="宋体">copy到cygwin的安装目录的bin目录下，即可！</font></font>]]></description>
		</item>
		    
		
		<item>
			<title>ICE:Slice语言（六）--接口、操作和异常（一）</title>
			<link>http://duckweeds.blog.sohu.com/95754239.html</link>
			<comments>http://duckweeds.blog.sohu.com/95754239.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Mon, 28 Jul 2008 16:26:12 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/95754239.html</guid>
			<description><![CDATA[Interfaces Operations And Exceptions<span>接口、操作和异常</span>  
<p>&nbsp;&nbsp;&nbsp;&nbsp;Slice的主要焦点就是定义接口，例如：</p><br /><br /><pre>        struct TimeOfDay<br />        {<br />                short hour;<br />                short minute;<br />                short second;<br />        };<br />        interface Clock<br />        {<br />                TimeOfDay getTime();<br />                void setTime(TimeOfDay time);<br />        }<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;上面的代码定义了一个名为Clock的接口。该接口支持两个操作：getTime和setTime。客户端通过调用代理上的操作访问支持这
个接口的对象：要读取当前的时间，客户端调用getTime；要设置当前时间，客户端通过调用setTime操作，并传递一个TimeOfDay类型的参
数。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;要调用一个代理上的操作就会让Ice运行时发送一个消息给目标对象。目标对象是在另一个地址空间或者是与调用者配置在一起，总之，目标对象
的位置对于客户端来说是透明的。如果目标对象在另一个地址空间（有可能是一个远程的机器），Ice运行时就会通过过一个远程调用过程调用客户端要调用的操
作；如果目标对象与客户端配置在一起，那么Ice运行时使用一个常规的方法来代理远程调用从而避免列集开销。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;你可以认为接口就是等同于C plus
plus的类定义的公共部分，也可以认为是Java的接口，以及操作定义是一个虚成员函数。不过，只有接口内部才能有操作定义。
而且你不能在接口定义中定义类型和异常，以及数据成员。但是，这并非意味着你的对象实现时不能包含状态。包含状态是可以的，但是状态的实现方式对于客户端
来说是隐藏的，因此在对象的接口定于众不需要出现。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;一个Ice对象只能由一个Slice接口。当然，你可以创建多个使用同一个接口的Ice对象。用C plus
plus来做对比，一个Slice接口对应于C plus plus的类定义，一个Ice对象对应于C plus
plus的类实例（不过，Ice的对象可以在多个不同的地址空间中实现）。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;Ice也通过名为facets的特征提供了多重接口。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;一个Slice接口定义了Ice中的最小分布粒度：每一个Ice对象有一个唯一区分于其它对象的标示。当开始通讯时，你必须在对象的代理上
调用操作。在Ice中没有可寻址的实体的概念。你不能创建一个结构，然后让客户端远程来调用它。为了能够调用这个结构，你必须创建一个接口允许客户端通过
这个接口访问这个结构。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;因此，将应用划分为不同的接口在总体架构上有着深远的影响。分布边界必须遵从接口或类边界；你可以将接口的实现分布到多个地址空间中（你也可以在一个地址空间中实现多个接口），但是，你不能在不同的地址空间中实现接口的不同的部分。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>参数和返回值</strong></p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;一个操作的定义必须包含一个返回类型和零个或多个参数的定义。例如，前面的代码汇总的getTime操作有一个TimeOfDay的返回类型以及setTime操作有一个void的返回类型。你必须使用void来指出操作不返回任何值。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;一个操作可以有一个或多个输入参数，例如，setTime方法接受一个TimeOfDay类型的输入参数。当然，你可以使用多个输入参数，例如：</p><br /><br /><pre>        interface CircadianRhythm<br />        {<br />                void setSleepPeriod(TimeOfDay startTime, TimeOfDay stopTime);<br />                //...<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;注意，参数名是必须的。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;默认的，参事从客户端发送到服务器端，也就是说，他们是输入参数。如果要从服务器端传输到客户端，你可以使用输出参数，输出参数使用out关键字标示。例如，另一个获取当前的时间的方法可以如下：</p><br /><br /><pre>        void getTime(out TimeOfDay time);<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;与输入参数一样，你可以使用多个输出参数：</p><br /><br /><pre>        interface CircadianThythm<br />        {<br />                void setSleepPeriod(TimeOfDay startTime, TimeOfDay stopTime);<br />                void getSleepPeriod(out TimeOfDay startTime, out TimeOfDay stopTime);<br />                //...<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果你既有输入参数又有输出参数，那么输出参数必须跟在输入参数的后面：</p><br /><br /><pre>        void changeSleepPeriod(TimeOfDay startTime, TimeOfDay stopTime, out TimeOfDay prevStartTime, out TimeOfDay preStopTime);<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;Slice不支持既做输出又作输入的参数。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;<em>操作定义的风格</em>'</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;你可能会期望，语言映射可以遵循你在Slice定义中的风格：Slice的返回类型映射到编程语言的返回类型，以及Slice的参数映射到编程语言的参数。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;对于只有一个返回值的操作，它一般都是由操作返回值而不是使用输出参数。这个风格自然地映射到所有编程语言。注意，如果你使用输出参数而不是返回类型，那么你就是把一个不同的API风格强加给客户:大部分的编程语言允许函数的返回值被忽略而不允许输出参数被忽略。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果操作返回多个值，它一般使用多个输出参数并返回一个void类型。实际上，这条规则并非都适用，因为有些有多个返回值的操作中，可能有一个值比其他返回值更重要。一个典型的例子就是从一个Collection中逐步的获取其中的项：</p><br /><br /><pre>        bool next(out RecordType r);<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;next操作有两个返回值：一个RecordType的值，一个bool值指出是否到了集合的最后一项。这样的定义风格是非常有用的，因为这很自然的让程序员编写控制结构。例如：</p><br /><br /><pre>        while(next(record))<br />                //处理record...<br />        if(next(record))<br />                //获取一个有效的record...<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<em>重载</em></p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;Slice不支持任何形式的操作重载。在同一个接口中的操作必须有不同的名字，与这些操作的类型和参数的数量无关。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;Nonmutating 操作</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;有一些操作，例如上面代码中的getTime操作，这个操作不会修改所操作的对象的值。它们在概念上等效于C plus plus的const 成员函数。你可以如下的指出这样的操作：</p><br /><br /><pre>        interface Clock<br />        {<br />                nonmutating TimeOfDay getTime();<br />                void setTime(TimeOfDay time);<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;nonmutating关键字指出了getTime操作不会修改它所操作的对象的状态。这样使用有两个原因：</p><br /><br />
<ul><li>语言映射可以关于操作行为的附加知识的好处。例如：对于C plus plus来说，nonmutating操作映射到const成员函数。 
</li><li>当得知一个操作不会修改对象的状态，则允许Ice运行时更积极的进行错误恢复。特别的，Ice会保证操作调用的<em>最多一次</em>语义。 </li></ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;对于普通的操作，Ice运行时对于如何处理错误是保守的。例如，如果一个客户端发送一个操作调用到服务器，然后丢失了连接，对于客户端的
Ice运行时来说，没有办法知道调用是否成功。这就意味着，运行时不能通过尝试重新连接和再次发送请求来恢复错误，因为这可能第二次引发操作以及违背了<em>最多一次</em>语
义。运行时没有选择，只能把错误报告给应用。对于nonmutating操作，换句话说，客户端的运行时可以尝试再次连接和安全的二次送出失败的请求。如
果第二次发送能够到达服务器，那么万事OK。只有第二次再次失败，错误才会报告给应用（错误重试的次数可以在Ice的配置文件中配置）。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;<em>Idempotent操作</em></p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;我们可以更进一步去修改上面的Clock接口的定义，从而可以让setTime操作是idempotent的：</p><br /><br /><pre>        interface Clock<br />        {<br />                nonmutating TimeOfDay getTime();<br />                idempotent void setTime(TimeOfDay time);<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;对某一个操作进行两次成功的操作，其结果都一样，就像只调用了一次一样，那么这个操作就是idempotent操作。例如，x = 1;
是一个idempotent操作因为不管执行了一次还是两次，x的值都是1。换句话说，x +=
1；就不是一个idempotent操作，因为它执行了两次后，结果不同了。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;idempotent关键字指出了一个操作能够安全的执行多次。同nonmutating操作一样，Ice运行时使用idempotent来达到更积极地错误恢复。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;一个操作只能是nonmutating或idempotent，不能两个都是。（nonmutating隐含了idempotent）</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>用户异常</strong></p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;查看前面的setTime操作的代码，我们发现一个潜在的问题：TimeOfDay结构中的每一个成员都是short类型，如果一个客户端
调用setTime操作并且传入一个毫无意义的值，例如-199作为分钟，或者42作为小时，那么会发生什么事呢？很显然，应该提供一些提示给调用者，这
个值是无意义的。Slice允许你定义用户异常来给客户端指出错误的情况。例如：</p><br /><br /><pre>        exception Error {}; //空的错误是有效的<br />        exception RangeError<br />        {<br />                TimeOfDay errorTime;<br />                TimeOfDay minTime;<br />                TimeOfDay maxTime;<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;一个用户异常很象一个结构一样包含了一些数据成员。实际上，与结构不同的是，一场能够有零数据成员，也就是说，一个空的异常。当客户端的操作的实现出现错误的条件时，异常允许你返回任意数量的错误信息。操作使用一个异常规范来说明可能会传递给客户端的异常：</p><br /><br /><pre>        interface Clock<br />        {<br />                nonmutating TimeOfDay getTime();<br />                idempotent void setTime(TimeOfDay time) throws RangeError,Error;<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;上面的定义说明了setTime操作可能会抛出一个RangeError或者一个Error用户异常。如果客户端接收到了一个
RangeError异常，这个异常包含有传递给setTime的TimeOfDay值以及被引起的错误。如果setTime因为非RangeError
定义的错误而调用失败，操作将爆出Error异常。很显然，因为错误没有数据成员，所以客户端将无法知道发生了什么错误，客户端只知道操作没有成功。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;一个操作只可以抛出那些列在异常规范中的用户异常。如果在运行时操作的实现抛出的异常没有列在异常规范中，那么客户端将收到一个运行时异常来表示操作失败。为了说明一个操作没有抛出任何用户异常，只要简单的忽略异常规范就可以了。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;异常不是第一类数据类型，第一类数据类型也不是异常：</p><br /><br />
<ul><li>你不能将异常作为参数值传递 
</li><li>你不能使用异常作为数据成员类型 
</li><li>你不能使用异常作为序列的元素类型 
</li><li>你不能使用异常作为字典的键值或值值 
</li><li>你不能抛出一个非异常类型的值 </li></ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>异常继承</strong></p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;异常支持继承：</p><br /><br /><pre>        exception ErrorBase<br />        {<br />                string reason;<br />        };<br />        enum RTError<br />        {<br />                DivideByZerp, NegativeRoot, IllegalNull /*...*/<br />        };<br />        exception RuntimeError extends ErrorBase<br />        {<br />                RTError err;<br />        };<br />        enum LError { ValueOutRange, ValuesInconsistent, /*...*/ };<br />        exception LogicError extends ErrorBase<br />        {<br />                LError err;<br />        }<br />        exception RangeError extend LogicError<br />        {<br />                TimeOfDay errorTime;<br />                TimeOfDay minTime;<br />                TimeOfDay maxTime;<br />        }<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;上面的定义建造了一个层次的异常定义：</p><br /><br />
<ul><li>ErrorBase是继承树的根并且包含了一个字符串，用来存放引发错误的原因。 
</li><li>RuntimeError和LogicError继承于ErrorBase，每一种异常包含一个分类错误的枚举值。 
</li><li>最后，RangeError继承于LogicError，并且报告了指定的错误的细节。 </li></ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;建立这样一个异常层次结构不仅仅是有助于创建一个更易读的规范，还能够在语言层次上带来好处。例如C plus plus映射会保持异常的层次结构，这样你就可以用基类俘获异常，或者建立异常句柄来处理指定的异常。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;查看上面的异常层次，这还不是很清楚，在运行时，应用将会抛出继承的异常，例如RangeError，还是基类异常，例如LogicError，RuntimeError和ErrorBase。如果你指明一个积累异常，接口或类是抽象的，你可以添加注释达到效果。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;注意，如果一个操作的异常规范指明了一个异常规范类型，在运行时，操作的实现可能抛出多重继承异常。例如：</p><br /><br /><pre>        exception Base<br />        {<br />                //...<br />        };<br />        exception Derived extends Base<br />        {<br />                //...<br />        };<br />        interface Exsample<br />        {<br />                void op() throw Base; //可能抛出基类也可能是继承类.<br />        }<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;随着系统的演变,系统中可能会加入新的，继承的异常。假设我们开始的系统中是如下定义的：</p><br /><br /><pre>        exception Error<br />        {<br />                //..<br />        };<br /><br /><br />        interface Application<br />        {<br />                void doSomthing() throw Error;<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;再假设已经部署了大量的客户端，也就说，当你升级系统时，你不能轻松的升级所有的客户端。随着这个系统的演变，一个新的异常被加入到系统中，并且服务器端要重新使用新的定义部署：</p><br /><br /><pre>        exception Error<br />        {<br />                //...<br />        };<br />        exception FatalApplicationError extend Error<br />        {<br />                //...<br />        };<br />        interface Application<br />        {<br />                void doSomething() throws Error;<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;如果服务器端抛出了一个FatalApplicationError，那么会发生什么事情？这就需要看客户端是否是使用新的或还是使用旧的定义了：</p><br /><br />
<ul><li>如果客户端使用和服务器端相同的定义，那么客户端就会收到FaltalApplicationError。 
</li><li>如果客户端使用的是旧的定义，那么客户端不知道FatalApplicationError错误的存在，这样，Ice运行时会自动将错误切成继承层次中最深的、能被客户端理解的异常类型（在这个例子中是Error），并且抛弃与派生的异常相关的信息。 </li></ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;异常只支持单继承。</p><br /><p><br /></p><br /><p><br /></p><p>摘自：http://www.cnblogs.com/iaxes/articles/99943.html<br /></p>]]></description>
		</item>
		    
		
		<item>
			<title>ice 的   Nonmutating 和 Idempotent</title>
			<link>http://duckweeds.blog.sohu.com/95754129.html</link>
			<comments>http://duckweeds.blog.sohu.com/95754129.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Mon, 28 Jul 2008 16:24:56 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/95754129.html</guid>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;Nonmutating 操作</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;有一些操作，例如上面代码中的getTime操作，这个操作不会修改所操作的对象的值。它们在概念上等效于C plus plus的const 成员函数。你可以如下的指出这样的操作：</p><br /><br /><pre>        interface Clock<br />        {<br />                nonmutating TimeOfDay getTime();<br />                void setTime(TimeOfDay time);<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;nonmutating关键字指出了getTime操作不会修改它所操作的对象的状态。这样使用有两个原因：</p><br /><br />
<ul><li>语言映射可以关于操作行为的附加知识的好处。例如：对于C plus plus来说，nonmutating操作映射到const成员函数。 
</li><li>当得知一个操作不会修改对象的状态，则允许Ice运行时更积极的进行错误恢复。特别的，Ice会保证操作调用的<em>最多一次</em>语义。 </li></ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp;对于普通的操作，Ice运行时对于如何处理错误是保守的。例如，如果一个客户端发送一个操作调用到服务器，然后丢失了连接，对于客户端的
Ice运行时来说，没有办法知道调用是否成功。这就意味着，运行时不能通过尝试重新连接和再次发送请求来恢复错误，因为这可能第二次引发操作以及违背了<em>最多一次</em>语
义。运行时没有选择，只能把错误报告给应用。对于nonmutating操作，换句话说，客户端的运行时可以尝试再次连接和安全的二次送出失败的请求。如
果第二次发送能够到达服务器，那么万事OK。只有第二次再次失败，错误才会报告给应用（错误重试的次数可以在Ice的配置文件中配置）。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;<em>Idempotent操作</em></p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;我们可以更进一步去修改上面的Clock接口的定义，从而可以让setTime操作是idempotent的：</p><br /><br /><pre>        interface Clock<br />        {<br />                nonmutating TimeOfDay getTime();<br />                idempotent void setTime(TimeOfDay time);<br />        };<br /></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;对某一个操作进行两次成功的操作，其结果都一样，就像只调用了一次一样，那么这个操作就是idempotent操作。例如，x = 1;
是一个idempotent操作因为不管执行了一次还是两次，x的值都是1。换句话说，x +=
1；就不是一个idempotent操作，因为它执行了两次后，结果不同了。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;idempotent关键字指出了一个操作能够安全的执行多次。同nonmutating操作一样，Ice运行时使用idempotent来达到更积极地错误恢复。</p><br /><br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;一个操作只能是nonmutating或idempotent，不能两个都是。（nonmutating隐含了idempotent）</p><br />]]></description>
		</item>
		    
		
		<item>
			<title>Ubuntu 安装 Ice 纪实</title>
			<link>http://duckweeds.blog.sohu.com/95443260.html</link>
			<comments>http://duckweeds.blog.sohu.com/95443260.html#comment</comments>
			<dc:creator>水草萍</dc:creator>
			<pubDate>Thu, 24 Jul 2008 19:57:30 +0800</pubDate>
			<category>Linux</category>
			<guid>http://duckweeds.blog.sohu.com/95443260.html</guid>
			<description><![CDATA[&nbsp;&nbsp;&nbsp; ICE(Internet Communications Engine)是一个为现实中程序员而写的中间件平台。作为一个高性能的互联网通信平台，ICE包含了很多分层的服务和插件(Plug-ins)，并且简单、高效和强大。 
<p>&nbsp;&nbsp;&nbsp; ICE当前支持C++、Java、C#、Visual Basic、Python和PHP编程语言，并支持在多种操作系统上运行。更多的操作系统和编程语言将会在以后的发布中支持。</p>
<p>&nbsp;&nbsp;&nbsp; 官方网站： <a href="http://www.zeroc.com/">http://www.zeroc.com</a></p><br />&nbsp;&nbsp;&nbsp; 安装纪实： 版本： Ice-3.2.1<br /><br />&nbsp;&nbsp;&nbsp; 依赖包：bzip2<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;  OpenSSL<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Berkeley DB 4.6.X<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; 错误提示： <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; 提示 bzlib.h 文件未找到，是因为没有安装 bzip2<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  提示 db_cxx.h 文件未找到，是因为没有安装 BerkeleyDB<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 提示 DB_LOG_AUTOREMOVE undeclare ,是因为没有安装 BerkeyleyDB 4.6.X<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  --我先安装的4.7.X，结果就报了这个错，查了半天，原来是版本问题，呜~~~<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  如果不安装 Openssl ，会提示你，要安装Openssl<br /><br />&nbsp;&nbsp;&nbsp; 安装方法：<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  Ice-3.2.1的安装路径为/opt/,Ubuntu下没有/opt/这个目录，于是我就在根目录下，建了一个opt目录。<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  $sudo mkdir&nbsp; /opt<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  不过，可以修改安装的路径，修改方法是：<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; $vi Ice-3.2.1/config/Make.rules<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; 将文件中的 /opt/ 替换为你想要安装的目录，即可。 不过，刚开始对Ice不熟悉，如果不按默认的路径来，容易出N多的麻烦，何必呢，对不对？<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; <br /><br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  安装 bzip2 1.0.5:<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; 1、下载bzip2 1.0.5&nbsp;  &nbsp;&nbsp;  http://www.bzip.org/downloads.html<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  2、 $tar zxvf bzip2-1.0.5.tar.gz<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; $cd bzip2-1.0.5<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; $make install 注：Makefile 已经做好了，只需make install即可<br /><br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  安装 OpenSSL<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp; 1、用apt-get<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $apt-cache search openssl | grep dev <br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  发现有libssl-dev 包，安装这个包即可<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp; $sudo apt-get install libssl-dev<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  2、下载安装的方法<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp; 下载 openssl 0.9.8d http://www.openssl.org/source/<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; $tar zxvf openssl-0.9.8d.tar.gz<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; $cd openssl-0.9.8d<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; $./config --prefix=/usr --openssldir=/usr/openssl<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 注：prefix为/usr/local/ssl,openssldir默认为/usr/ssl/openssl，需要改为上面的，因为ice的代码中include的是&lt;openssl/ssl.h&gt;，默认安装路径会找不到。<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; $make<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; $sudo make install<br /><br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; 安装 BerkerlyDB<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 下载 BerkerlyDb db-4.6.21<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; http://www.oracle.com/technology/software/products/berkeley-db/db/index.html<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $cd db-4.6.21<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $cd build_unix<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $../dist/configure --prefix=/usr --enable-cxx<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 注：db的默认安装prefix路径是/usr/local/BerkeleyDB.4.6，需要改为/usr，否则make Ice时会找不到路径<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $make<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $sudo make install<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  注：我在ubuntu自带的源里也发现了 BerkerlyDB <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; apt-cache search Berkeley | grep db4<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp; 发现有4.5版本的，但不知有没有 --enable-cxx<br /><br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  我在安装 BerkerlyDB 的时候，出了点问题<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  因为最新版本为&nbsp; 4.7.25 ，于是我下载了最新版，在安装的时候，提示DB_LOG_AUTOREMOVE，google了半天，发现是因为版本不对，找到一篇文章，介绍ubuntu 下安装 ICE，发现他用的是4.6.21，于是我也拿这个版本来用，最后安装成功了。很兴奋。<br /><br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp; 在安装过程中，还有很多曲折，在这里不一一描述了，总之，装了这些东西，差不多就搞定了。<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; 网上找到的那篇文章地址为：http://blog.csdn.net/marising/archive/2008/01/20/2054573.aspx &nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  <br /><br /><br /><br /><br /><br /><br />]]></description>
		</item>
		    
		
	</channel>
</rss>
