浪潮之巅第十六章 印钞机——最佳的商业模式

当我们的社会进入文明时代后,商业总是伴随着生产力的进步而发展。挣钱原本不是人类活动目的而是生存的手段,但是社会发展到今天,它似乎越来越成为很多 人、团体(比如公司)甚至学校活动的目的。尽管哲学家们可以不同意并且高呼人们本末倒置了,但是却制止不了这个趋势。因此,我们社会的科技和生产力发展就 必须和商业联系起来。一个技术、一种产品只有当它被证明在商业上是成功的,才能真正地为我们这个社会接受。
在商业上,最重要的是商业模型,我们在前面的章节多次提到了它的重要性。所有成功的大公司都有好的商业模式,很多大公司的兴起,不是靠技术的革新而是商业模式的转变。我们前面提到的诸多成功的 IT 业巨头,在商业模式上都有创新。
以 AT&T 来讲,在十九世纪末它就懂得只收服务费而不收高得吓人的安装费,这本身就是一个了不起的商业模式的革命。正是因为为用户免去了大部分安装费,才使得美国的 电话在几十年里就普及到所有的家庭。中国电信不懂这个道理,一笔高额初装费的门槛拦住了大部分有心安装电话的人,直到十年前这个问题才得到基本解决。
英 特尔的崛起固然主要是半导体技术进步的因素,但是在商业模式上它也有创新。在 IBM 主导计算机产业的时代,计算机的每一个部件都是自己开发的。IBM 如此,DEC 和惠普也是如此。假如四十年前开发一个 CPU 芯片当时需要一千万美元,这三家就花掉了三千万美元。这时英特尔站出来说,我花一千万美元开发芯片,然后按每家五百万卖给你们,IBM、DEC 和惠普都觉得比自己开发要便宜,于是便接受了。而英特尔的处理器卖了三家后收入一千五百万,除去成本还盈利五百万,于是便发展起来了。
通 常,好的商业模式都非常简单,即使是外行也一眼能看清楚。AT&T 和英特尔在商业模式上的变革就是这么简简单单。相反,如果一种商业模式几个小时都说不清楚,那么它要么根本不对,要么是在骗人。巴菲特最近讲这样一件事, 前两年一家金融公司向他推销金融衍生产品,他花了整整一天时间,看了它们上百页的商业报告书(Prospectus),仍然搞不懂这个金融衍生产品是如何 运作和挣钱的,最后它得出结论这里面一定有鬼。事实证明他是对的。红杉风投对于那些几分钟讲不清楚商业模式的创业者,都会婉言地劝走。
微 软和甲骨文的商业模型也是简单的不能再简单了,只有三个字—“卖软件”。读者也许会问,难道以前软件不是是卖的。的确,以前的软件还真不是卖的。(当然, 也不是盗版的。)以前在 IBM 时代计算机公司软硬件都开发,软件的价值要通过硬件实现,没有单独的软件公司。IBM 是把软件的价钱搭到它每年收的服务费中。这种服务费很像保护费,需不需要服务都是要收的。甲骨文公司改变了这个收费方式,它向用户一次性收取软件费,然后 用户有事找它,没有事就不用再交服务费了,这样用户的成本就降低了,甲骨文的数据库就抢了IBM的市场。苹果公司也许是出现得太早,沿用了 IBM 那种软件价值通过硬件体现的商业模式,最终在微机领域输给了卖软件的微软。
反过来没有好的商业模型的公司一定长久不了,互联网泡沫时代的诸多网络公司都是如此,虽然也开发了一些技术和应用,但是不知道自己怎么挣钱,因此兴起得快,衰亡得更快。
在所有商业模式中,最理想的就是能像印钞机那样自动挣钱的模式。我们在这一章中介绍三个成功的模式,Google 的广告系统,Ebay 的电子商务系统和戴尔的微机直销系统。
转自:http://googlechinablog.com/2009/07/blog-post_07.html

[转]中国程序员有美国梦吗?

大浪淘沙,金子难寻

1848年,美国爆发了加州淘金热潮,大量人口涌到加州进行淘金,其直接后果就是让一个叫旧金山小 村庄的转眼间变成了一座大城市。在淘金热潮之初,你拿个筛子在河床里筛泥沙也能找到金子,这是何其容易的事情。但我们假想一下,如果当时一个淘金者拿着他 的筛子跑到中国来,他能够淘到金子吗?我觉得是不可以的。这不是说中国的黄金矿藏量就比不上美国的一个州,而是中国没有如此高浓度而且可以进行露天开采的 金矿。
1971年,旧金山湾区南端由于“淘沙子”出了名,因而被大家叫做硅谷。1998年,Google在硅谷诞生了,然后开始疯狂地吸收硅谷乃至全球的技术人才。2006至2007年,Google在中国进行大规模招聘,这时候他们遇到了跟淘金者中国之行一样的难题……
中国是第一个成功迫使Google进行笔试的国家。这句话说出来可能会让大家觉得十分搞笑,国内哪家公司招聘一线工程师不是先笔试再面试的。在人力 资源供求相当的国家里,确实不需要笔试这轮筛选。有资质并且自信有资格来应聘的人,一般都能够得到充分的沟通,然后再确定这份工作是否适合。但这在人力资 源明显供过于求的中国来说,就一点也不现实。
Google中国也有高层承认,以ACM/ICPC竞赛成绩来挑人确实有所缺陷,很多适合这份工作的人会被直接淘汰掉,连面对面或电话沟通的机会也 没有。但假如你去看一下Google中国的校园招聘场面,看一下在各省重点大学里连开多个大教室进行笔试的情景,你不得不承认,要跟所有这些学生进行沟通 的成本实在是连Google中国也支付不起。
总结一下,中国不是没有人才,也不是培养人才的方法有严重缺陷,至少这些都不是根本问题。根本问题是,在如此庞大的人口基数下,再好的企业都只能选 用一套折中的人才选拔方案。你不能怪企业,说假如能生在美国你就能被Google美国所挖掘,而现在则被Google中国拒之门外。

人人都会发光的时候你该怎么办?

有时候用“是金子早晚会发光”的说法来自我安慰一下,也不是什么坏事。但当你发现人人都会发光的时候,你就知道事情有多不好了。 我们来做个数学建模,假设美国计算机人才中的top 100, top 1,000, top 10,000分别叫做A类、B类、C类。那么美国的人力资源供需关系大概是这样的:

  • 需求:100人;供应:100人。
  • 需求:1,000人;供应:1,000人。
  • 需求:10,000人;供应:10,000人。

在保持A类、B类、C类界线不变的情况下,放到中国来很可能就是这样子的:

  • 需求:500人;供应:1,000人。
  • 需求:5,000人;供应:100,000人。
  • 需求:50,000人;供应:10,000,000人。

就算中国的人才需求是美国的5倍,但依然供过于求。就算顶级人才的供求矛盾不明显,人才结构上的不合理也会给底层造成巨大的压力。
在A类里面,只有500人做不了自己应做的工作,被迫降级去做B类的工作。对于人口如此众多的一个国家来说,让500人屈就一下不是什么大问题。在 B类里面,会有95,000人做不了自己应做的工作。而到了C类里面,会有9,950,000人做不了自己应做的工作,这时候问题就很严重了。
如果你搞不懂上面那堆数字说的是什么,那么我尝试换用浅白一些的语言来再说一次。如果你在美国,并且你达到了Microsoft美国招聘的要求,那么你成功加入Microsoft的概率就相当高了,因为你和Microsoft相互需要对方。
但如果你在中国,并且你达到了Microsoft中国招聘的要求,那么你成功加入Microsoft的概率并不怎么高,因为跟你一样符合这一条件的 人数要远多于Microsoft的需求。如果你想要确保一个较高的应聘成功率,那么你必须远高于Microsoft的招聘要求。

没有压力的都跳槽了

假如我们把胜任某个职位的人简单分为两类:刚刚好胜任的,以及过度胜任的。那么,我们可以得到一个有趣的推论。
刚刚好胜任的人,是一定很有压力的。如果上面的分析没错的话,你之所以能够获得这个职位,一定程度上依赖于运气。好几个拥有同等实力的人跟你抢这个 职位,尽管他们没能抢到,但依旧对此虎视眈眈,时刻准备着抢你饭碗。企业没理由对此坐视不理,一定会让你一直处于失业的边缘,以此作为筹码逼你好好干活, 这时候你没压力才怪。
过度胜任的人,忠诚度一定会打折扣。总有更好的职位在对你招手,尽管你知道那些职位你只能凭运气获得,尽管你知道得到了你也站到了失业的边缘上,但你就不心动吗?肯定还是会心动的。
知足常乐者?估计在顶端会多一些。我和Jeff这样的,属于在国内少数算是享有American Dream的人,也就是能够通过自己的奋斗来获得应有的财富与社会地位。Jeff倾向于认为这对广大程序员普遍适用,并且鼓励大家都去追求自己的梦想。然而我得到的结论却并非如此。对于这事情,你怎么看?
转自:http://www.cnblogs.com/cathsfz/archive/2009/06/15/1503337.html

[转]贺计算机成“就业最困难专业”

CCTV、中央人民广播电台报道:在高考刚刚结束之际,中国权威出版机构社会科学文献出版社610日发布首部《中国大学毕业生就业报告(2009)》,以大学毕业生就业报告为主线,向毕业生、政府部门和高校提供参考和依据。

主要内容如下:

=================================

中国2008届高校毕业生总数为559万,其中大学毕业生总数约为529万。毕业后在国内外读研究生的人数为21.43万,毕业半年后的就业人数达到约434万人。2008届大学毕业生半年后的就业率约为86%,比起2007届大学生毕业半年后就业率下降了2个百分点,但工学、管理学就业率分别为90%89%,成为2008年就业率最高的两个专业。最低的两个专业是法学和哲学,就业率为79%76%

2008届大学毕业生自主创业比例为1%.

蓝皮书指出,2008年毕业半年后仍未就业人数最多的10个本科专业失业人数为10.75万人,占了本科失业量的35.9%

其中有8个专业同时也是2007届毕业生失业人数最多的专业,包括法学、计算机科学与技术、英语、国际经济与贸易、工商管理、汉语言文学、电子信息工程、会计学。

=======================================

这里面引人注目的是:

1 2008届大学毕业生自主创业比例为1%。虽然还有十多万人啃老,但毕竟还是有1%的学生勇敢地迈出了这一步,这是一个很大的进步。很明显,这是“逼出来的”,没有工作,就没有收入,没有经济来源,如何在社会上立足?风起青萍之末,这些看似偶然的现象,却展现出中国正在走向成熟,迈出了真正现代化的重要一步。

还有一则新闻,北京大学证券研究所所长吕随启教8岁儿子吕桑源炒股,也成热门。许多网友批评这会引导小孩子“见钱眼开”,我看恰恰相反,这有助于小孩子从小就正确地认识金钱,正确地认识这个社会运转的机制。美国人就很注重从小培养小孩子的经济意识和理财能力,也没听说这些小孩长大后普遍 “见钱眼开”,反而有不少如比尔盖茨之类捐出大笔遗产作慈善的人,也有很多做义工不取分文的志愿者。相反,我们中国“见钱眼开”之人实在不少,而这些人的胆子之大,脸皮之厚也是站在“世界领先地位”的。

2)“计算机科学与技术”成最难就业专业。这实在是有点有让大跌眼镜。想想2000年前后计算机专业的火爆,与现在相比,真是“冰火”两重天。

事情的一方面是教育部的“教育产业化决策”和各高校大规模扩招所带来的教学质量严重滑坡。

99年开始的扩招,计算机专业是重灾区,全国各大高校,不管是工科的还是文科的,不管自身有没有足够的基础,只要买一批电脑,招几个老师就能开个计算机专业,没用几年,计算机专业成了规模最大的工科专业之一,可谓“计算机教育大跃进”,事实上,这些年来IT业在迅速扩张,对人才的需求一直是很旺盛的,在现在这个计算机无孔不入的信息时代,计算机专业本不应该成“最难就业专业”。

然而,这一现象居然在中国出现,说明了什么?

原因之一就是中国启动了“教育大跃进”。

中国人的“大跃进”思维根深蒂固。58年开始的“大跃进”,结果全国饿死几千万人,历史并不远,但中国人好象非常喜欢“大跃进”,一再地重复这个套路。

1999年开始的“高等教育大跃进”,虽然不会象过去的那样死人,但带来的恶果并不小,也正在逐步呈现中。

为何中国一再出现这种“大跃进”现象?我觉得这有着我们这个社会和我们这个民族深层的原因,可以挖得很深,是一个社会学的研究课题。

本身学校的教育质量就不合格,你能指望大多数学生都如华罗庚,可以自学成材?

事情的另一方面,大批的计算机专业的学生自身就是不合格的。

IT业是中国市场化最充分的行业之一,在这个行业中,绝大部分企业要在市场竞争中生存,因此,市场逼着将企业养“闲人”的可能性降至最低,在IT业,我听到的是大多数人都顶着不小的工作压力和学习压力,“工作轻松收入高”的现象很少出现在IT公司。

正因如此,“其实什么也不会”而又“工作态度不怎么样”的学生就没人想要了。

最 近正是各高校学生进行毕业论文答辩的时间,又一大批学术垃圾被制造出来。在网上我看到华中科技大学等高校引入“论文抄袭检测系统”来检测学生论文,弄得上 上下下学生怨声载道,许多学生去琢磨着如何“骗过”这一软件系统,从“增强自身实力,踏踏实实地学习做出成果来”角度想问题的学生是少数甚至是极少数。这 就是中国大学教育的悲哀了。

孔夫子如果活在今天,相信更要感叹“礼崩乐坏,今不如昔”了。

现 在本科生大四下学期基本是忙着以就业为目的的实习,或者是以毕业为目的的补考,就是没有以培养能力为目的认真做毕设的人。毕设成了过场,甚至是一场戏。我 想与其强迫学生造假论文以蒙混过关,还不如干脆将毕设从必修环节改为选修环节,你要选了就好好做,否则,你修完课程学分就可以毕业。不然,浪费那么多人力 物力造一大堆垃圾有何用?

研究生好不到哪里去,硕士改为两年以后,第一年上课,第二年半年左右找工作,刚开题就毕业,有多少人能静下心来学习?

博士生呢?忙着“泡制”论文,许多人没做真正的研究,光研究如何写论文了,因为“上头”要求要发表多少多少篇“核心期刊”论文才能毕业……博士生年纪也不小了,要养家糊口,得赶快毕业啊找份工作啊……。

所有学生都在忙着这些事情,所以出现就业难是正常现象,不出现反倒是奇怪了。

有解药吗?我看没有特效药。恐怕要等到情况继续恶化到极点之后,才会有转机,才会有新生。

中国的事情往往都是这样的。

当计算机成为“就业最困难专业”时,这意味着社会的自然淘汰机制正在加速运转,物极必反,现在遭遇的问题意味着中国的IT人才培养必须要转向,不转不行,而这些发展中的阵痛将带来中国IT教育的真正成熟。

所以,我庆贺!

转自:http://blog.csdn.net/bitfan/archive/2009/06/11/4259777.aspx

[转]一位程序员的忠告

诸位,咱当网络工程师也是几年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强!
[1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就 需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你 对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手!
[2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物! 适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!
[3]不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工 程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管 理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无 量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,**日本,一律如此!
[4]多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你 整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以 后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!  ?
[5]知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!
[6]抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后 还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!
[7]逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,脸皮太薄,心不够黑,教条式思维。。。这些工 程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可 能,甚至连项目经理都当不好--尽管你可能技术不错!
[8]工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可 以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产 品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,  否则,有了机会也抓不住!
[9]要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老 板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气, 高薪机会自不在话下,更重要的是有合作的机会...
[10]该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为 下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!
转自:http://topic.csdn.net/u/20090531/21/e6550c54-586b-4913-bf1a-8f36c395eb06.html

Switching Versions of the ASP.Net Framework – The Fast Way

By Scott Forsyth
November 28, 2003
When ASP.NET v1.1 was released, it became my project to find the best way to support this for our client base at ORCS Web, Inc. We needed to be able to switch versions of the Framework per site as smoothly as possible. Requiring everyone to move to version 1.1 wouldn't work and leaving everyone on version 1.0 wouldn't work either, so we had to have a way to pick and choose and to make the switch without interrupting other sites on the same server.
Is this for you?
Before I go any further, I should mention the reasons why this applies to the average developer as well as the system administrator. Currently there are two released versions of ASP.NET but there are already multiple alpha and beta versions and there will continue to be more. To be able to quickly switch between versions with just a couple clicks and keystrokes makes development and testing against multiple frameworks easy. Granted, aspnet_regiis.exe will accomplish this as I’ll mention below, but it can take over 30 seconds. Imagine being able to immediately switch between Version 1.0, 1.1 and 2.0 (v2.0 is in Alpha at the time of this writing) without setting up multiple sites in IIS. If this interests you, read on because this doesn't just apply to a system administrator.
Objectives
My 4 objectives were:
1) To be able to update a single site to the new framework
2) To be able to revert back if desired
3) To have an easy way for anyone on our team to be able to do it     consistently and quickly
4) To do this without affecting the other sites on the same server

Stating the Obvious
The most obvious way to do this was to use aspnet_regiis.exe supplied with ASP.NET. To use this method I would run "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -s W3SVC/50/ROOT". This would update the Version of the framework for the site with ID 50 and not update the other sites on this server. It has the flexibility required to set this for the whole server, per site or even per sub-folder. The problem I immediately ran into was that both Internet Information Server (IIS) service and Session State would reset, causing every site on the server to be down for up to 2 minutes. Ouch. The strange thing is that the whole server was affected, even when running this against a single site. This met the first 3 objectives. Unfortunately all sites on that server would be affected, blowing the 4th objective out of the water.
The other option I considered is manually changing all the script mappings in the IIS snap-in. To change this manually, select the "Home Directory" tab in IIS and click on the "Configuration" button. The "Mappings" tab has all the mappings. The path to the alternate aspnet_isapi.dll can be changed here. The problem is that this didn't meet the 3rd objective because of the large number of script mappings that had to be manually changed.
Is a better solution possible?
Needless to say, I had to go back to the drawing board to find something that would work better. My initial guess was that doing this from script would be difficult and would probably cause a similar interruption of service to IIS. Fortunately I was wrong on both points. Not only did it turn out to be a simple undertaking but there was zero, yes zero, impact on other sites. Even the site being changed was not affected, other than Session State being reset. That not only met all four of my objectives, it exceeded my expectations.
The Solution
Using WSH I use an Input box and ask for the server, Site ID (more on the later) and the version to change to. Then ADSI is used to retrieve the current script mappings and do a search-and-replace from the previous version to the new version.
There are a number of ways to obtain the siteID in IIS. My favorite is to go into the properties of the site from the IIS snap-in and click on the "Properties" button in the Logging section. At the bottom, you'll notice a "Log file name". It will start with W3SVC??. For example, it might be W3SVC1 or W3SVC99. It's the number after the W3SVC that counts. (i.e. W3SVC1 is SiteID 1, W3SVC99 is SiteID 99).
At the risk of boring the casual reader I feel I must mention one more thing that was tested. The script mappings are usually inherited from the default mappings for the server. IIS uses its own storage system called the Metabase which is similar in concept to Windows Registry. The first time a site or sub-folder within a site is assigned specific script mappings, it will write its own copy of the script mappings to its area of the metabase. Any new changes to the script mappings will be written against the new copy. ChangeFramework.vbs will work correctly whether or not the custom script mappings are in place.
To use this script, simply save to your computer and double-click. This is freely available to use by all, but I request that you keep the header in place to give credit to both myself and ORCS Web, Inc. There is no warranty whatsoever so if your computer blows up or falls over dead, don't come looking to me for help. But, the disclaimer aside, we've been running this for over 1/2 year on live production servers and it was worked 100% of the time without incident and I personally attest to its stability and trustworthiness.
Download
The script itself can be found at http://www.orcsweb.com/articles/ChangeFramework.zip
It should be pretty obvious by this doesn't install the framework. It simply switches between versions that are already installed on your computer.

Scott Forsyth is Director of IT at ORCS Web, Inc. - a company that provides managed hosting solutions for clients who develop and deploy their applications on Microsoft Windows platforms. Services include shared hosting, dedicated hosting, and webfarm hosting, with specialty in .Net, SQL Server, and architecting highly scalable solutions.

Quote: http://www.orcsweb.com/articles/change_framework.aspx

ASPNET_regiis.exe Tool, Setting the Default Version Without Forcing an Upgrade on All Sites

Starting in the first version of ASP.NET, Microsoft has provided a tool to control which version of the framework is registered in IIS. This tool, aspnet_regiis.exe, is quite flexible and with the right understanding of how IIS and ASP.NET work, can be used for most any situation.
The most common parameter is -i. This is the full blown registration of the framework in IIS, including all sites and all vdirs. For example, let's say you wanted your entire server to be registered using ASP.NET v2.0, then you would navigate to the v2.0 framework folder (%windir%\Microsoft.NET\Framework\v2.0.50727) and type aspnet_regiis -i. Likewise, you can navigate to (%windir%\Microsoft.NET\Framework\v1.1.4322) and run the same command to set v1.1 on all sites. This is a great way to repair a broken installation or force a particular framework version to apply to your whole server.
But this catch-all registration is too aggressive for many production servers. That's where the other parameters come in.
To see a detailed list of commands, type aspnet_regiis /? from the command prompt. I'm going to explain two of them: -lk and -sn. With these commands, we can apply the script mappings on just some of the sites on the server and update the default.
Careful on Production Servers
Note: First a disclaimer. Running any aspnet_regiis commands that make a change to IIS will cause all sites on the server to have a short interruption of service. Even if you run the path specific commands which I’ll explain below, all sites will have some downtime. To make changes on production servers without any downtime, you'll need to write a solution to update the script mapping directly. Here's an old article of mine that explains this in more depth:
http://www.orcsweb.com/articles/change_framework.aspx (Someday I'll rewrite that article with an updated script to handle more than 2 versions of the framework, and IIS6 application pool support.)
While I'm offering disclaimers, make sure not to run multiple versions of the framework in the same Application Pool in IIS6.0:
http://weblogs.asp.net/owscott/archive/2006/01/26/436607.aspx

IIS Inheritance
Let me digress again and explain how IIS inheritance works for the script mappings. IIS has a path structure similar to the file system on your computer. For example, the web part of the structure starts with /W3SVC/. Site #1 stores the script mappings in /W3SVC/1/ROOT/. Site #51 stores them in /W3SVC/51/ROOT/, and so on. If the script mappings are specifically set on a particular path then IIS will use those settings. But if they aren't set then it will use the settings from the site or server root.
ASP.NET Version Defaults
When ASP.NET v1.1 was released, if you ran the install, it would apply your settings to all sites on the server, thus changing your framework version from v1.0 to v1.1. This meant that you had to be careful if you wanted to keep version 1.0 as the default. The install had some command line options to give more flexibility.
Version 2.0 of the framework is different and not as aggressive during the installation. Now it doesn't make itself the default and you are required to specifically set it as the default if that is what you want. This is a good thing and is a better behavior than the v1.1 installation.
Don't forget to take a backup
Warning: At this point, make sure to get a backup of IIS before continuing. If you do something wrong, you can restore it and everything will be brought back to its original state.
Displaying The Current Settings
Displaying The Current Settings
The aspnet_regiis tool has a neat way to see what is currently applied in IIS right now. You can do this by typing aspnet_regiis -lk from any framework folder. This will give something like this: (you can do this read-only command without any downtime on your server)
W3SVC/ 1.1.4322.2300
W3SVC/1/ROOT/ 2.0.50727.0
W3SVC/3/root/ 1.1.4322.2300
W3SVC/6/root/ 1.1.4322.2300
W3SVC/7/root/ 2.0.50727.0
Notice on this test server that the root, site #3 and site #6 are using v1.1 of the framework and site #1 and #7 are using v2.0. (Here is an article to find out which site is using which SiteID: http://weblogs.asp.net/owscott/archive/2005/07/29/421058.aspx)
Notice the gaps in numbers as #2, #4 and #5 aren't set. This means that they will inherit their settings from /W3SVC/ which is currently using v1.1.
Now, the issue we have is that when setting up new sites, they will always use version 1.1 of the framework. Since v2.0 has all of the latest and greatest features, we want new sites to use v2.0 but make sure that existing sites aren't changed. In our example here, let's say that we want to upgrade the server to use v2.0 of the framework as the default version, but we don't want sites #2, #3 or #6 to be upgraded.
If we run aspnet_regiis -i then we'll force everything to version 2.0 which we don't want. And if we upgrade just the root, then too many of the sites will be upgraded, which is also what we don't want.
The Magic
The trick is to force all sites that you don't want to upgrade to use v1.1, and then we can upgrade the root to v2.0. Then all new sites created after this will use v2.0.
Sites #3 and #6 are easy, they are already done for us. But site #2 needs to be set to specifically use v1.1 of the framework. This can be done by running aspnet_regiis from the v2.0 framework folder using this command: aspnet_regiis -sn W3SVC/2/ROOT/. Now running aspnet_regiis -lk will return this:
W3SVC/ 1.1.4322.2300
W3SVC/1/ROOT/ 2.0.50727.0
W3SVC/2/Root/ 1.1.4322.2300
W3SVC/3/root/ 1.1.4322.2300
W3SVC/6/root/ 1.1.4322.2300
W3SVC/7/root/ 2.0.50727.0
For the purpose of this example, we're going to let site #4 and #5 continue to inherit from the root, so after the next step they will be upgraded (using inheritance) to use version 2.0 of the framework.
The final step is to update the W3SVC/ node without touching anything else. As I'm sure you've guessed by now, this is done using: aspnet_regiis -sn W3SVC/.  Now we're done, let's look at the final result:
W3SVC/ 2.0.50727.0
W3SVC/1/ROOT/ 2.0.50727.0
W3SVC/2/Root/ 1.1.4322.2300
W3SVC/3/root/ 1.1.4322.2300
W3SVC/6/root/ 1.1.4322.2300
W3SVC/7/root/ 2.0.50727.0
Success! Now sites #4 and #5 and all new sites will use the W3SVC/ setting, which is v2.0. Sites #1 and #7 will also use v2.0 because they were specifically set. Sites #2, #3 and #6 will continue running version 1.1 of the framework.
Summary
We've applied version 2.0 of the framework as the system default while allowing some sites to continue to run version 1.1 of the framework.

[转]IIS ASP.NET 1.1与2.0共存

各位在同一电脑上同时安装并运行.net 1.1 和 .net 2.0 两个版本的朋友要小心啊!
您的项目是不是时不时会出现 Server Application Unavailable 错误呢?或者一直连续都出这个错误!
今天帮一个老师升级一个web的心理测评系统.那个系统原来是ASP.NET 1.1的,新版本是ASP.NET 2.0的..(PS:那台服务器上面还装其他的ASP.NET程序,用的是ASP.NET1.1的.)
1、在服务器上创建一个目录,然后将发布后的所有Web程序的文件复制到这个新建的目录。
2、在服务器的IIS上新建一个虚拟目录,然后 将其配置成可以执行脚本的应用程序,(过程与创建.net Framework 1.1版本的程序相同。) 然后,将此虚拟目录的.net Framework 配置成2.0。
大功告成后,开始访问刚配置的程序,却得到如下错误:
Server Application Unavailable
The web application you are attempting to access on this web server is currently unavailable. Please hit the "Refresh" button in your web browser to retry your request.
Administrator Note: An error message detailing the cause of this specific request failure can be found in the application event log of the web server. Please review this log entry to discover what caused this error to occur.
经过仔细阅读了IIS帮助文档,才发现,原来这个错误是由 IIS6 应用程序隔离机制造成的。IIS默认的应用程序隔离机制被称为:“工作进程隔离模式”,在此模式中,应用程序被分为多个组,每个组就是一个“应用程序池” ,每个应用程序池之间是相互隔离的。 隔离的好处当然就是安全啦,稳定啦,等等。IIS中的每个应用程序池由一个“工作进程”分别进行管理,也就是"W3wp.exe" 。如果有多个应用程序池中的程序运行,我们就能看到多个w3wp.exe。 我们平时新建的虚拟目录都默认被指向IIS6的“DefaultAppPool" 中, 所以在默认情况下,不管你有多少个asp.net程序在运行,在“Windows任务管理器”中你只能看到一个w3wp.exe进程。
出现上述错误的原因是: .net Framework 2.0的程序与.net Framework1.1(或1.0)的程序被放入同一个应用程序池(默认情况下放入DefaultAppPool池),也就是由同一个工作进程: w3wp.exe 进行管理,而单个工作进程是无法同时管理不同的程序(或者不同版本的程序)的。如果先访问.net framework 1.1的页面,则工作进程先加载并管理了 1.1版本的程序集,此时访问.net framework 2.0的web程序页面,Server Application Unavailable 错误就出来了。 反之,如果在默认应用程序池的w3wp.exe尚未启动前先访问了 2.0的web程序(此时应用程序集已经加载了.net framework2.0的Web程序集),再访问1.1或1.0的Web程序页面时,同样会出现“服务器应用程序不可用” 这样的中文提示。(您可以结束掉以前的w3wp.exe进行测试。)
解决办法: 在IIS中新建一个应用程序池,叫"ASP.NET2.0"吧,然后选中那个系统的虚拟目录,点“属性”-》在“应用程序池” 中选择刚才新建的的应用程序池,点击“确定”。
转自:
http://hi.baidu.com/wuwenlin/blog/item/fd6fdff245083615b07ec529.html

sql server 2005 分页

今天上csdn,看到有人在炫耀自己所谓的分页算法,呃。。。我觉得算不上是什么算法,就是一种解决方案吧。不过回帖的人好多,在回帖里淘到了不错的东西,发上来记录一下。

在windows server 2003, sql server 2005 CTP,P4 2.66GHZ,1GB 内存下测试,执行时间0秒 ,表中数据量230万
接下来大批量的数据查询性能瓶颈就在count了,不知道sql server 2005在这方面有没有什么改进.
附另一种方法:

生活日志,始篇

打算在这里一天写一篇生活方面的日志,记录一下自己的成长历程。
我太懒了,懒得写日志,停下来的时候,总是玩玩游戏,时间就消磨过去了,才发现时间是那么的宝贵。
刚刚接到老师的电话,说19日,要交毕业论文的初稿了,可是我一个字都还没有动,看来明天要辛苦了。
毕业设计也还没有最后整合好,毕业论文更不用谈。今天来叔叔家了,没有办法做这些事情,决定明天把本本带到公司去。
据说有Fans要来看我的生活日志,就随手写一篇哈。