2008年6月25日星期三
小论文,中了!(Paper has been accepted)
刚刚在网上确认,投系学术论坛的一篇小论文被录用了。感觉,无悲无喜。可能因为本来就是一个让大家顺利拿学位的东西吧,高手早就投期刊了。也算是了却了一桩心事了,接下来的主要目标就是顺利毕业和找到一份好工作了,加油!
2008年6月12日星期四
谷歌开发者日(Google Developer Day 2008)
照例是北京会议中心。早上正赶上上班高峰,提前体验了一把人肉罐头的感觉。到地点出示邀请函,来到主题会场。这次会议的特点是以本土工程师为主,基本上黄皮肤黑头发的占到演讲者的百分之七八十。来以前就做好受刺激的准备了。选择的移动平台主题,介绍开源手机平台Android的相关成果。事先也没做什么功课,就带着耳朵听了。感觉当我们在上网看片,为时光虚度而烦恼的时候,在地球的某个角落,有那么一群人,在勤勤恳恳地做着事情,并且虔诚地相信自己做的东西会有光明的未来。上午是大会主题演讲和分会场的中文宣讲,下午就是直接请的三位各个领域的高级工程师介绍自己做的模块的功能。最后请上了几位产业链上的相关代表,讨论相关议题。下午的宣讲全部都是英文的,与一年前相比,感觉英语水平有所提高,但还不够,不能自如的表达自己的意思,所以没敢提问。
晚上据说还有Party,不过没参加就回来了。
晚上据说还有Party,不过没参加就回来了。
2008年6月3日星期二
五月小结(May)
程序最终调出来了,不单能够画出光滑的曲线,而且还可以想在哪里画就在哪里画,想画多密就画多密!心里很美,仿佛深陷重围,血瓶用光,奄奄一息之际突然金光一闪——升级了,立刻红蓝全满,又是一条好汉了!
现在回想上个月的生活,感觉就是被小论文这件事整得一团糟(mass)。想到秀才与生孩子的笑话:肚里没货的时候写文章就是一种痛苦!没出结果前,干什么都不定心,感觉就是在浪费时间。发现msn的速度快了不少,登上一看,一大堆留言提醒-_-!!,写点东西给大家一个交代吧。
论文这事当初战略上就有错误,程序和文章两块,本以为重点在前面,这没错,可是以为写论文可以按照白居易写诗的方式那就是对同行智商的侮辱。科技文献的定位是给那些具备专业素养的同行们看的,看的目的只能是解决某些问题,即使是体例格式,结构安排也能反映很多东西。孜孜于如何把话说圆了那就是在舍本逐末!这方面的经验教训以后可能会专门总结一下,走了太多弯路了。
发现feeds是个好东东,不知道会看到什么,也就时常会有惊喜。原来在社会的表象下还有这样的一个个世界,如同扒开草坪发现下面隐藏着众多的生态圈。不同的人因为共同的兴趣而聚在一起,形成一个个小圈子,彼此虽素昧蒙面,却从不感到陌生。看到GTD,发现自己原来以前做的就有点GTD的思想,自得之余又有点自卑于走的弯路。博客还能学英语,这是以前没想到的。看着别人写的文章,自己仿佛就多了很多人生体验。
今天又发现了一个燕园同龄人的blog,当初注意到他因为具有共同的爱好:篮球。深入读下去发现文章很多,看的很爽。(发现虽然女性开博的比例很高,但论文章数量和质量写的好多为男性。)虽然有的观点觉得偏颇,不过现在这个社会愿意把自己放在众人面前剖析的实诚人不多了。看其两年前的文章,感慨一下小孩的敢想敢做,人生规划,意气风发。生活那么复杂竟然也能出国,自己的觉悟真是太晚了。(写到这里我又想到了喜哥和ehalf:你们在那里过的好么?)
回顾一下,其实今天的工作概括说来也就是实现了一个文件的输入输出,发现了原始数据的错误,然后改正了这个错误。整个工作也就是实现了一个算法,算法的过程半个多月前就出来了,但是花费了大量的时间在细节实现上。如果是一位牛人来干,可能一周就能出结果。Sigh,越想越郁闷。
编程之所以那么让那么多人着迷,因为它能够具现化人们心中的理想。这在过去是很难或代价高昂的:建筑师们用数年的时间实现心中的设想;画家用十数年的时间学习技艺,才能描绘心中的世界;作家用一生的时间写出自己的大作。相比他们,程序员实现的成本最低,内容最丰富。
关于其他的事情,恩,我说过我已经学会自由泳了么?学校又在修路了,为什么说又?其实我本来想说的是又又又又又又又又又!已经记不清是多少次了,八路军的帽子带着很光荣么?神作越来越少了,致敬越来越多了。未来……我还有选择么?身边就有很多现成的榜样。
找到一个目标,找到一种寄托。
现在回想上个月的生活,感觉就是被小论文这件事整得一团糟(mass)。想到秀才与生孩子的笑话:肚里没货的时候写文章就是一种痛苦!没出结果前,干什么都不定心,感觉就是在浪费时间。发现msn的速度快了不少,登上一看,一大堆留言提醒-_-!!,写点东西给大家一个交代吧。
论文这事当初战略上就有错误,程序和文章两块,本以为重点在前面,这没错,可是以为写论文可以按照白居易写诗的方式那就是对同行智商的侮辱。科技文献的定位是给那些具备专业素养的同行们看的,看的目的只能是解决某些问题,即使是体例格式,结构安排也能反映很多东西。孜孜于如何把话说圆了那就是在舍本逐末!这方面的经验教训以后可能会专门总结一下,走了太多弯路了。
发现feeds是个好东东,不知道会看到什么,也就时常会有惊喜。原来在社会的表象下还有这样的一个个世界,如同扒开草坪发现下面隐藏着众多的生态圈。不同的人因为共同的兴趣而聚在一起,形成一个个小圈子,彼此虽素昧蒙面,却从不感到陌生。看到GTD,发现自己原来以前做的就有点GTD的思想,自得之余又有点自卑于走的弯路。博客还能学英语,这是以前没想到的。看着别人写的文章,自己仿佛就多了很多人生体验。
今天又发现了一个燕园同龄人的blog,当初注意到他因为具有共同的爱好:篮球。深入读下去发现文章很多,看的很爽。(发现虽然女性开博的比例很高,但论文章数量和质量写的好多为男性。)虽然有的观点觉得偏颇,不过现在这个社会愿意把自己放在众人面前剖析的实诚人不多了。看其两年前的文章,感慨一下小孩的敢想敢做,人生规划,意气风发。生活那么复杂竟然也能出国,自己的觉悟真是太晚了。(写到这里我又想到了喜哥和ehalf:你们在那里过的好么?)
回顾一下,其实今天的工作概括说来也就是实现了一个文件的输入输出,发现了原始数据的错误,然后改正了这个错误。整个工作也就是实现了一个算法,算法的过程半个多月前就出来了,但是花费了大量的时间在细节实现上。如果是一位牛人来干,可能一周就能出结果。Sigh,越想越郁闷。
编程之所以那么让那么多人着迷,因为它能够具现化人们心中的理想。这在过去是很难或代价高昂的:建筑师们用数年的时间实现心中的设想;画家用十数年的时间学习技艺,才能描绘心中的世界;作家用一生的时间写出自己的大作。相比他们,程序员实现的成本最低,内容最丰富。
关于其他的事情,恩,我说过我已经学会自由泳了么?学校又在修路了,为什么说又?其实我本来想说的是又又又又又又又又又!已经记不清是多少次了,八路军的帽子带着很光荣么?神作越来越少了,致敬越来越多了。未来……我还有选择么?身边就有很多现成的榜样。
找到一个目标,找到一种寄托。
2008年5月19日星期一
全国哀悼日(National Day of Mourning)
今天是全国哀悼日,下午2:28分,在实验室与老师和同学一道,悼念在汶川大地震中死难的同胞。
死者长已矣,生者何以堪。这是国家的灾难,促使我们每个人思考生命的价值。
死者长已矣,生者何以堪。这是国家的灾难,促使我们每个人思考生命的价值。
2008年5月12日星期一
重读设计模式(Design Patterns)
摘要:该看懂的时候没看懂。
从扉页上的记录看,已经买了两年了。想起刚买的时候,兴冲冲向达哥显摆的情景。当时又从他那弄到两本书,一本是《编程珠玑》,一本是《敏捷软件开发》,前者看完了,后来又看了一遍。后者只看了开头和结尾,中间挑着看了点。对这本Design Patterns小字,首先腹诽一下机械工业出版社:那么小的字,那么薄的纸!那一阵出的书都是这副德行。感觉性价比高的还是电工和清华。
这本书算来集中精力攻坚了三次。第一次,刚进实验室,有个师兄的论文就是这个。所以看的很有动力,不过也只看完了结构型模式,并且还是一知半解。英文的确限制了理解,书本身写的也晦涩,开始觉得没什么,后来发现读本通俗的书可以省下大量的时间。下了很多资料,其中有个是武大同龄人写的,很佩服,人家现在也在香港写siggraph了。
第二次,是下学期上软件结构,有这方面内容,看《Headfirst Design Patterns》,那本书写的很好,但是时间紧,就抓着看了有三天,很多东西看的很有趣,不用就忘光了。
第三次,这学期,同学那看到了《大话设计模式》,中文的,写的很有趣,就借来一本看看。长期的积累,对于其中的代码,竟然能够一口气读下来也没觉得困难,觉得似乎本来就应该是这样啊。参照着原来的那本原版dp。一下子全啃下来了。
以前老师说书是先越读越厚,然后越读越薄。自己这第一个阶段算是读下来了,第二个阶段什么时候结束?我也不知道。
总结,坚持不放弃,最终读出来了是不错,可是中间绵延了两年,为什么呢?就算是书难懂,当初坚持肯,多花时间也应该是能够读出来的,如果早就读出来了,那么在这两年的就可以少走很多弯路,体会其中的妙处。
现在这个问题依然存在着,数学的,算法的,多长时间没有完完整整的读完一本技术书籍了?能指望未来某一天因为某种契机而对这些知识突然顿悟么?应该抽出精力解决了,人生没有那么多的两年。
附:HDP里面记录的原则OO Basics
Abstraction
Encapsulation
Polymorphism
Inheritance
OO Principles
Encapsulate what varies.
Favor composition over inheritance.
Program to interfaces, not implementations.
Strive for loosely coupled designs between objects that interact.
Classes should be open for extension but closed for modification.
Depend on abstraction. Do not depend on concrete classes.
Only talk to your friends.
Don't call us, we'll call you.
A class should have only one reason to change.
从扉页上的记录看,已经买了两年了。想起刚买的时候,兴冲冲向达哥显摆的情景。当时又从他那弄到两本书,一本是《编程珠玑》,一本是《敏捷软件开发》,前者看完了,后来又看了一遍。后者只看了开头和结尾,中间挑着看了点。对这本Design Patterns小字,首先腹诽一下机械工业出版社:那么小的字,那么薄的纸!那一阵出的书都是这副德行。感觉性价比高的还是电工和清华。
这本书算来集中精力攻坚了三次。第一次,刚进实验室,有个师兄的论文就是这个。所以看的很有动力,不过也只看完了结构型模式,并且还是一知半解。英文的确限制了理解,书本身写的也晦涩,开始觉得没什么,后来发现读本通俗的书可以省下大量的时间。下了很多资料,其中有个是武大同龄人写的,很佩服,人家现在也在香港写siggraph了。
第二次,是下学期上软件结构,有这方面内容,看《Headfirst Design Patterns》,那本书写的很好,但是时间紧,就抓着看了有三天,很多东西看的很有趣,不用就忘光了。
第三次,这学期,同学那看到了《大话设计模式》,中文的,写的很有趣,就借来一本看看。长期的积累,对于其中的代码,竟然能够一口气读下来也没觉得困难,觉得似乎本来就应该是这样啊。参照着原来的那本原版dp。一下子全啃下来了。
以前老师说书是先越读越厚,然后越读越薄。自己这第一个阶段算是读下来了,第二个阶段什么时候结束?我也不知道。
总结,坚持不放弃,最终读出来了是不错,可是中间绵延了两年,为什么呢?就算是书难懂,当初坚持肯,多花时间也应该是能够读出来的,如果早就读出来了,那么在这两年的就可以少走很多弯路,体会其中的妙处。
现在这个问题依然存在着,数学的,算法的,多长时间没有完完整整的读完一本技术书籍了?能指望未来某一天因为某种契机而对这些知识突然顿悟么?应该抽出精力解决了,人生没有那么多的两年。
附:HDP里面记录的原则OO Basics
Abstraction
Encapsulation
Polymorphism
Inheritance
OO Principles
Encapsulate what varies.
Favor composition over inheritance.
Program to interfaces, not implementations.
Strive for loosely coupled designs between objects that interact.
Classes should be open for extension but closed for modification.
Depend on abstraction. Do not depend on concrete classes.
Only talk to your friends.
Don't call us, we'll call you.
A class should have only one reason to change.
2008年5月11日星期日
Google Reader高级技巧快速入门
英文原文:Quick Tips for Google Reader Power Users
中文译文:Google Reader高级技巧快速入门
使用Google Reader是很有效率的,通常情况下,从其他阅读器(如Bloglines)切换到Google Reader后,可以使用三分之一的时间阅读订阅,这样就提高了三倍的效率,这里我就介绍一些更有效使用Google Reader的技巧。
更好的阅读订阅内容,主要的方法是利用键盘的快捷键,当然不用也可以,但对于Google Reader的新用户来说这是很有用的。
1. 增加竖向的阅读区域 - 按F11可以使得浏览器以全屏方式工作,并移除了一些没用的按钮和菜单,浏览器的顶部和底部会增加很多空间,这就增加了垂直方向的阅读区域。
2. 增加横向的阅读区域 - 将Google Reader自己的侧栏删除可以增加更多的阅读空间,按u键就可实现这个功能。现在,就可以做到少使用滚动条就可以一气呵成地将整篇文章阅读完毕。当然,你还可以换一个大显示器,并设置显示分辨率卫高解析度屏幕,较大显示器就更适合阅读长篇文章了。
3. 切换到阅读所有栏目 - 这是一个传统的新闻阅读法,按ga,这样就不用点击每个Feed来查看文章了。否则,我要一个一个点下去看。将默认设置为“Sort by newest”,这样就可以迅速按照时间阅读文章。另外在设置中,将起始页面设置为“All Items”,这样一打开就可以立刻阅读。
4. 切换到Expanded View - 这样可以快速将文章扫描一遍。按1来切换。如果你想更快地阅读,可以按2只看文章标题。
5. 开始快速阅读 - 做好上面的设置,现在,你就可以快速进行阅读,以最快的速度一篇一篇的跳过文章,直到你看到一篇感兴趣的文章。有三种方法可以实现,在“expanded view”里,你可以按j向前,按k后退。另外你也可以按空格进行文章阅读,按Shift+空格后退,在列表模式下,使用n向前,使用p后退。
在设置中选择在expanded view模式自动标记已读,在侧边选择“only list updated”,将隐藏那么不更新的内容,这是一个很有特色的功能,不过每浏览20篇文章会有一些停顿,希望Google能解决这个问题。
6. 标记、分享、分类、阅读 - 当你读到一篇好文章后,你有5件事情可以做。将其标记(Star)以便日后使用,按s键(这和Gmail一样,以后你会看到所有标星的文章列表)。或者将文章分享给其他人(Share),按Shift-s键实现。或者你可以将其打标签分类,按t键,将其增加tags以便日后组织管理。或者你可以打开文章的原始链接地址查看完整信息,按v键,主要用于添加评论。或者将其标记为未读状态,按m键(有时可能有用)。
7. 刷新 - 当你按j了很多次,你会发现已经没有更多未读的文章了,这时按r键刷新列表,Google Reader可能会立刻带来一些新文章呢。
8. 查看标星的栏目 - 按gs键查看你标星的列表。你要将全部精力放在阅读标星的精选文章中,你或许会仔细阅读整篇文章的细节,或者为其写一篇博文。当你读完之后,还可以按s键取消星标。
中文译文:Google Reader高级技巧快速入门
使用Google Reader是很有效率的,通常情况下,从其他阅读器(如Bloglines)切换到Google Reader后,可以使用三分之一的时间阅读订阅,这样就提高了三倍的效率,这里我就介绍一些更有效使用Google Reader的技巧。
更好的阅读订阅内容,主要的方法是利用键盘的快捷键,当然不用也可以,但对于Google Reader的新用户来说这是很有用的。
1. 增加竖向的阅读区域 - 按F11可以使得浏览器以全屏方式工作,并移除了一些没用的按钮和菜单,浏览器的顶部和底部会增加很多空间,这就增加了垂直方向的阅读区域。
2. 增加横向的阅读区域 - 将Google Reader自己的侧栏删除可以增加更多的阅读空间,按u键就可实现这个功能。现在,就可以做到少使用滚动条就可以一气呵成地将整篇文章阅读完毕。当然,你还可以换一个大显示器,并设置显示分辨率卫高解析度屏幕,较大显示器就更适合阅读长篇文章了。
3. 切换到阅读所有栏目 - 这是一个传统的新闻阅读法,按ga,这样就不用点击每个Feed来查看文章了。否则,我要一个一个点下去看。将默认设置为“Sort by newest”,这样就可以迅速按照时间阅读文章。另外在设置中,将起始页面设置为“All Items”,这样一打开就可以立刻阅读。
4. 切换到Expanded View - 这样可以快速将文章扫描一遍。按1来切换。如果你想更快地阅读,可以按2只看文章标题。
5. 开始快速阅读 - 做好上面的设置,现在,你就可以快速进行阅读,以最快的速度一篇一篇的跳过文章,直到你看到一篇感兴趣的文章。有三种方法可以实现,在“expanded view”里,你可以按j向前,按k后退。另外你也可以按空格进行文章阅读,按Shift+空格后退,在列表模式下,使用n向前,使用p后退。
在设置中选择在expanded view模式自动标记已读,在侧边选择“only list updated”,将隐藏那么不更新的内容,这是一个很有特色的功能,不过每浏览20篇文章会有一些停顿,希望Google能解决这个问题。
6. 标记、分享、分类、阅读 - 当你读到一篇好文章后,你有5件事情可以做。将其标记(Star)以便日后使用,按s键(这和Gmail一样,以后你会看到所有标星的文章列表)。或者将文章分享给其他人(Share),按Shift-s键实现。或者你可以将其打标签分类,按t键,将其增加tags以便日后组织管理。或者你可以打开文章的原始链接地址查看完整信息,按v键,主要用于添加评论。或者将其标记为未读状态,按m键(有时可能有用)。
7. 刷新 - 当你按j了很多次,你会发现已经没有更多未读的文章了,这时按r键刷新列表,Google Reader可能会立刻带来一些新文章呢。
8. 查看标星的栏目 - 按gs键查看你标星的列表。你要将全部精力放在阅读标星的精选文章中,你或许会仔细阅读整篇文章的细节,或者为其写一篇博文。当你读完之后,还可以按s键取消星标。
2008年4月28日星期一
在Blogger中添加Piscasa相册(Add Photo Albums in Blogger)
Blogger是个好东西,什么功能都有,但必须得你自己添加。早就想加个相册了,通过一番查找,终于实现了这个功能,效果见右。对很多人来说这可能只是小儿科的东西,但因为在Blogger Help上并没有相关帮助,所以还是把实现过程写一下吧,方便后来人。
Embed Slideshow的确是一个好东东,特别是对于博客用户。但是中文版的picasa尚不支持这个功能,我们只能曲线救国了:首先在http://picasaweb.google.com登陆你的picasa相册,然后点击设置,在语言偏好里选择English (United States)(注意,一定要选择English (United States),选择English (UK)都不行),点击保存设置。接下来点击水平导航栏上的My Photos,进入想公开的相册,点击左侧的Embed Slideshow,在Select slideshow size下拉框里选择好宽度,接着将Embed slideshow下面文本框里的代码复制。
如果你已经有公开相册了,那么可以直接点击右边相册右下角的图片,选择相册说明下方的"Get your own",一样可以进入公开相册,然后设置好参数之后复制下面文本框中的代码。
进入布局->页面元素->添加页面元素->HTML/JavaScript,选添加到博客,给相册起好名字之后把复制的代码粘贴到下面的代码栏中,就跟添加翻译工具栏一样。Ok
最终效果如右图,参数是经过调整的,去掉了上下的富余,整体效果不错。
补充:后来发现添加页面元素中新增了一个“幻灯片”,可直接同piscasa相连,功能类似,不过没有上面做完的那样好看。
Embed Slideshow的确是一个好东东,特别是对于博客用户。但是中文版的picasa尚不支持这个功能,我们只能曲线救国了:首先在http://picasaweb.google.com登陆你的picasa相册,然后点击设置,在语言偏好里选择English (United States)(注意,一定要选择English (United States),选择English (UK)都不行),点击保存设置。接下来点击水平导航栏上的My Photos,进入想公开的相册,点击左侧的Embed Slideshow,在Select slideshow size下拉框里选择好宽度,接着将Embed slideshow下面文本框里的代码复制。
如果你已经有公开相册了,那么可以直接点击右边相册右下角的图片,选择相册说明下方的"Get your own",一样可以进入公开相册,然后设置好参数之后复制下面文本框中的代码。
进入布局->页面元素->添加页面元素->HTML/JavaScript,选添加到博客,给相册起好名字之后把复制的代码粘贴到下面的代码栏中,就跟添加翻译工具栏一样。Ok
最终效果如右图,参数是经过调整的,去掉了上下的富余,整体效果不错。
补充:后来发现添加页面元素中新增了一个“幻灯片”,可直接同piscasa相连,功能类似,不过没有上面做完的那样好看。
自由泳学习体会(Freestyle Tips)
五一又到了,去年五一的时候,正式开始学习游泳,到现在已经一年了。上学期统共去了二十来次,蛙泳学的还不错,上月重新开始锻炼,到现在已经游了十来次了,对于自由泳并没有专门的去学,一般也就是蛙泳游完了穿插着游一下。结合看视频,最近已经能够比较顺当的游完一个泳道了,对于学习过程中出现突破的几个的环节,在这里给自己总结一下:
1. 前进过程中身体绕轴线的旋转摆动。因为先学会蛙泳,所以老是觉得前进过程中应该保持身体对称,像只船一样,两边的浆提供动力,但船体基本上保持静止。这在学习自由泳的时候造成了很大的障碍,具体说来就是打腿的时候,老是上下打腿(很多教学视频开始的时候也是先教这个),这在加上手部动作之后觉得特别别扭!体力消耗的非常快。后来在观察会家泳姿的时候才发现整个身体在前进过程中应该随着手部动作绕身体轴线旋转,两腿也是,不能老是处于左右的状态,实际上两腿一上一下的状态更为普遍。现在游的时候基本上只考虑手部动作,腿只是无意识的配合。
2. 手部动作。开始游的时候是直臂出直臂入,看上去的感觉就是“扑腾”,效率很低。后来得到会家指点:以大臂带动小臂出水前伸,伸直之后保持这个姿势前漂一会,感觉一下子就会了。
3. 呼吸的节奏。这是最难的,后面几次几乎都在解决这个问题。主要问题在呼气的时候头抬的太高,破坏动作形态,抬低了又容易喝水。开始的时候就是憋着一口气游,中间换两口气游到底,但是体力消耗很大。后来看视频知道应该在头出水前就把气吐掉,出水之后立刻吸气。实践中发现还是难免会吸入残水,又回头仔细看视频,才发现原来吐气不是一下完成的,应该最后留一点在出水的时候一下吐出,也就是所说的“吹水”。这样试着游了几个来回,没有出现太大问题。
以上问题基本上在教学视频中都提到了,但初学时忽略,经过反复折腾之后才能体会字里行间的意思——每句话放那都不是白说的。学会一种新泳姿后在水面滑行的感觉可真不错。
自由泳也攻克了,下面的目标是什么呢?蝶泳?蛙泳?深水证是一定要考的,可是浩沙的池子太浅,练不了踩水。算了,还是再仔细练练吧,深水证一考,以后再游就没动力了不是。提供一个学游泳的地方:悠游网。
1. 前进过程中身体绕轴线的旋转摆动。因为先学会蛙泳,所以老是觉得前进过程中应该保持身体对称,像只船一样,两边的浆提供动力,但船体基本上保持静止。这在学习自由泳的时候造成了很大的障碍,具体说来就是打腿的时候,老是上下打腿(很多教学视频开始的时候也是先教这个),这在加上手部动作之后觉得特别别扭!体力消耗的非常快。后来在观察会家泳姿的时候才发现整个身体在前进过程中应该随着手部动作绕身体轴线旋转,两腿也是,不能老是处于左右的状态,实际上两腿一上一下的状态更为普遍。现在游的时候基本上只考虑手部动作,腿只是无意识的配合。
2. 手部动作。开始游的时候是直臂出直臂入,看上去的感觉就是“扑腾”,效率很低。后来得到会家指点:以大臂带动小臂出水前伸,伸直之后保持这个姿势前漂一会,感觉一下子就会了。
3. 呼吸的节奏。这是最难的,后面几次几乎都在解决这个问题。主要问题在呼气的时候头抬的太高,破坏动作形态,抬低了又容易喝水。开始的时候就是憋着一口气游,中间换两口气游到底,但是体力消耗很大。后来看视频知道应该在头出水前就把气吐掉,出水之后立刻吸气。实践中发现还是难免会吸入残水,又回头仔细看视频,才发现原来吐气不是一下完成的,应该最后留一点在出水的时候一下吐出,也就是所说的“吹水”。这样试着游了几个来回,没有出现太大问题。
以上问题基本上在教学视频中都提到了,但初学时忽略,经过反复折腾之后才能体会字里行间的意思——每句话放那都不是白说的。学会一种新泳姿后在水面滑行的感觉可真不错。
自由泳也攻克了,下面的目标是什么呢?蝶泳?蛙泳?深水证是一定要考的,可是浩沙的池子太浅,练不了踩水。算了,还是再仔细练练吧,深水证一考,以后再游就没动力了不是。提供一个学游泳的地方:悠游网。
2008年4月22日星期二
第八章 没落的贵族—摩托罗拉(zz)
目录
1. 二战的品牌
2. 黄金时代
3. 基因决定定理
4. 铱星计划
5. 全线溃败
6. 回天乏力
美国过去未曾有过贵族,今后也不会有。无论是巨富盖茨或者是年轻美貌、聪明而富有的女继承人伊万卡.特朗普都不是任何意义上的贵族。实际上贵族这个词在整个西方本身就是一个没落的词汇,虽然在东方一些人或许沉迷在贵族梦中。但是,贵族在历史上曾经实实在在地出现过。如果我们认为公司之中也有所谓的贵族,摩托罗拉无疑可以算是一个。
曾几何时,摩托罗拉就是无线通信的代名词,同时它还是技术和品质的结晶。甚至就在二十年前,摩托罗拉还在嘲笑日本品质的代表索尼,认为后者的质量只配做体育用品。今天,虽然摩托罗拉的产品从品质上讲仍然傲视同类产品,但是就像一个戴着假发拿着手杖的贵族,怎么也无法融入时尚的潮流。
1. 二战的品牌
下面这张图是从美国军方网站上找到的,大部分读者应该第一次见到这张照片。但是,大家对它一定是似曾相识,因为这是美军在各种媒体,尤其是在电影中,通信兵最经典的形象。这位战士身上背的是摩托罗拉的 SCR300 背负式跳频步话机。它是一个可调谐的高频调频通信设备,重十六公斤,有效通讯距离十六公里左右。六十年前,摩托罗拉的牌子随着美军传播到全世界。

摩托罗拉公司原名加尔文制造公司(Galvin Manufacturing Corp),创立于 1928 年,由创始人之一的保罗.加尔文的名字命名。它最早是生产汽车里的收音机的,摩托罗拉则是这种收音机的品牌。摩托罗拉一词 Motorola 的前五个字母 Motor 表示汽车,ola 是美国很多商品名称喜欢用的后缀,比如可口可乐 Coca Cola 。二战前,美国军方已经认识到无线电通信的重要性,开始研制便携式无线通信工具,并且自己研制出一款报话机(Walkie Talkie)SCR-194 。但是非常笨重,不很适用。摩托罗拉的一些工程师参与了这项研究。1940年,摩托罗拉研制出真正用于战场的报话机,就是上面照片中的 SCR300 。1942 年,摩托罗拉公司再接再厉,研制出“手提式”的对讲机(Handy Talkie)SCR-536 。见下图:

这个超级“大哥大”重四公斤,在开阔地带通信范围一公里半,在树林中只有三百米。即使如此,那时美军的通信装备也高出其它国家一大截。从这一系列军用设备可以看出,摩托罗拉在无线电通信方面的实力很强,它的调频技术和天线技术都是领先于世界的。同时,作为美国军方和政府部门的供应商,摩托罗拉产品的稳定性和鲁棒性(Robustness)都很好。这从某种程度上讲是摩托罗拉产品的基因。至今,很多摩托罗拉的产品仍然如此。我经常看到这类报道,在一个荒郊野外出了车祸,大家都拿出手机呼救,最后只有摩托罗拉的手机能打出去。但是,很多事情是双刃剑,过分注重技术和品质使得摩托罗拉在商业上的灵活性远不如诺基亚和三星等竞争对手。
二战后,摩托罗拉作为品牌名气越拉越大 ,人们一说起无线通信就首先会想到摩托罗拉。直到二十年前,摩托罗拉一直垄断这个市场,从对讲机、早期的手机,即大哥大,到九十年代初风靡中国,城市里人手一个,万元户腰里一排的 BP 机。人们甚至忘了它公司的名称加尔文制造公司,于是,1947 年公司干脆改名摩托罗拉,由此可见当年摩托罗拉名头之响。这种事情在大公司里并不少见,几天前,松下公司也把它的名字从创始人松下幸之助的名字 Matsushita 改为了品牌的名字 Panasonic 。当然这是题外话了。
2. 黄金时代
从二战后到九十年代初,可以讲是摩托罗拉红火的年代。摩托罗拉在模拟无线通信方面有任何公司都无法比拟的技术优势,并且创造出多项世界第一。美国通信界对通信有一种通用的分类方法,即分为:有线单向(如闭路电视)、有线双向(如电话)、无线单向(如收音机)和无线双向(如手机电话和 WIFI)四种。长期以来,直到十几年前,AT&T 一直是有线通信之王,RCA 是无线单向通信的老大,而摩托罗拉是不折不扣的无线双向通信的霸主。我们从前一节可以看到,摩托罗拉的核心业务都和双向的无线通信有关。
1946 年,摩托罗拉发明了汽车电话。看过鲍嘉和赫本演的“ Sabrina (龙凤配)”的读者可能对这种产品有印象,影片中作为大公司董事长 Linus 从纽约长岛家中出发,一上汽车便通过汽车电话向远在曼哈顿的公司同事下达指示。很遗憾的是,汽车电话一直都是富人的奢侈品,它还没得到普及,就被手机电话代替了。十二年后,摩托罗拉发明了基于汽车的对讲机,它在美国被警察、出租车公司和各种运输公司广泛使用,直到九十年代末被手机电话取代(除了警察还在用)。在 2000 以前各国的警匪片中,我们经常看到此产品。
1963 年对摩托罗拉来讲是一个值得纪念的年份。这一年,摩托罗拉发明了世界上第一个长方形的彩电显像管,而且它迅速成为了行业标准。(在此之前,RCA 生产的彩电荧幕是圆形的。请看这个图片)

1967 年,摩托罗拉生产出美国第一台全晶体管彩色电视机—以前的彩电或多或少还有些电子管。这件事对摩托罗拉影响很大,以前摩托罗拉虽然在技术上领先于世界,但是产品除了汽车里的收音机都不是民用的。彩色显像管的发明,标志着摩托罗拉有能力进入了民用市场并且将业务的重点转向民用。但遗憾的是,摩托罗拉在家电市场初期的尝试不很成功,到 1974 年,它不得不将彩电业务卖给了日本的松下公司。今天,很少有人知道摩托罗拉对彩电工业的贡献。
在六七十年代,摩托罗拉完全能经历的起在彩电上的失败,因为它领先于世界的技术太多了。到八十年代,摩托罗拉进入蓬勃发展的十年,它的业务也由无线通信扩展到计算机的半导体芯片。1979 年,摩托罗拉成功地推出 68000 通用微处理器,它因设计的集成度为 68000 个晶体管而得名(虽然实际集成度为 70000 个)。它的地址总线(Address Bus)宽度为奇特的 24 位,可以管理 16 MB 的内存,因此它成为所有小型机和工作站的首选芯片。而同期英特尔的处理器其实比它落后半代,后者 16 位的地址宽度只能管理 64K 的内存。
八十年代,随着数字信号处理的发展,出现了对专用的数字信号处理芯片(DSP)的需求,该产品也因运而生。德州仪器(TI)、AT&T 和摩托罗拉在八十年代初先后推出了 TSM ,DSP 和 M56K 三大系列产品,这个市场发展的如此之快,给摩托罗拉带来了一个新的金矿。今天,以 DSP 为核心加上外围通信的手机核心芯片仍然是全世界销量最大,最赚钱的半导体芯片(因为每个手机中必须有一个这样的芯)。
当然,摩托罗拉对世界最大的贡献是它在八十年代初发明的民用蜂窝式移动电话,也就是早期说的大哥大,现在说的手机。大家公认摩托罗拉是当今手机通信的发明公司,虽然 AT&T 声称它的无绳电话比摩托罗拉的手机早,但是大家知道无绳电话和手机电话是两回事。由于 AT&T 扎根于有线通信,不自觉地会抵触无线通信。移动电话刚起步时,AT&T 预计到 2000 年全球不超过一百万用户,这个估计比后来 2000 年时的实际数目小了一百倍。所以,AT&T 自然不会把重点放在移动通信上。而摩托罗拉正相反,它在有线通信上不可能有作为,就自然而地押宝在移动通信上,领导和推动了移动通信的潮流。
到九十年代初,摩托罗拉在移动通信、数字信号处理和计算机处理器三个领域都是世界上技术最强的 player。更难能可贵的是,它的产品声誉极好。我最早接触摩托罗拉的产品是在八十年代末,一些海关的朋友向我介绍他们的摩托罗拉对讲机。那些对讲机可以在钢铁包围的大货轮货舱里和岸上的同事通话,这是任何其他同类产品做不到的。1990 年,摩托罗拉的营业额超过一百亿美元,在 IT 公司中仅次于 IBM 和 AT&T 。如果摩托罗拉能通吃三大市场,它无疑将是今天世界上最大的IT公司。即使它能垄断其中一个,也是一个巨无霸的公司。很遗憾,它一个也没做好,这个通信革命的领导者被自己掀起的技术浪潮淘汰了。原因何在呢?
3. 基因决定定理
作为移动通信的领导者,摩托罗拉自然地垄断了第一代移动通信市场。第一代移动通信是基于模拟信号的,天线技术和模拟信号处理技术的水平决定了产品的好坏。而产品的外观式样根本不用考虑。在技术方面,没有公司能挑战摩托罗拉。因此,摩托罗拉的手机虽然卖的贵(那时在中国一个好的手机要两万元),仍然占领了世界百分之七十的市场。其它公司要想和摩托罗拉竞争,只能寄希望于下一代了。
在第二代移动通信刚开始时,欧洲联合起来了。以往欧盟各国只能算是松散的联盟,在技术上很难单独和美国抗衡。即使搞出一个不同于美国的行业标准,也很难在世界上占主导,比如彩电的 PAL 制式。近二十年来,欧洲独立于美国单独行事的意识越来越强,同时吸取了各自为战的失败教训。明显加强了内部的合作。终于在第二代移动通信上超越了美国。
1982 年欧洲邮电管理委员会 European Conference of Postal and Telecommunications Administrations (CEPT)提出了数字移动通信的标准 Groupe Spécial Mobile,简称 GSM 。后来这个标准流行于世,欧洲又把它改称为 Global System for Mobile communications , 因此很多人以讹传讹误以为 GSM 是后者的缩写。1989 年,该标准被提交到欧洲电信标准局,第二年便成为欧洲后来乃至成为世界的第二代移动通信标准。GSM 的技术核心是时分多址技术(TDMA),即将每个无线频率均匀地分给八个(或者十六个)手机用户,每个用户交互地占用八分之一的信道时间。(注:人们通话时,语音直接的间歇时间其实很长,只有语音编码做的合理,就可以几个用户共用一个信道。)GSM 实现简单,在成为欧洲标准的第二年,即 1991 年,就由爱立信和一家芬兰公司架设了第一个 GSM 的移动通信网。两年后,包括中国在内的四十几个国家采用 GSM 标准,今天,GSM 占世界手机用户的 80%,据称达 20 亿用户。
在欧洲人行动的同时,美国人并没有闲着,他们似乎比欧洲人更努力。整个欧洲只搞出一个标准,而只有欧洲人口三分之一的美国居然搞出了三个数字通信的标准,其中两个和 GSM 一样是基于 TDMA 的标准,而第三个是很先进的码分多址 CDMA 标准。(以后有功夫再介绍 CDMA ,这里就不赘述了。)结果就不用说了,美国注定在第二代移动通信标准上注定失败。
美国在标准之争上的失败间接影响的摩托罗拉手机今后的竞争力。当然,在标准上失败并不意味着摩托罗拉在手机市场上会失败,就像不拥有任何标准的三星公司照样在手机上抢到了世界市场的一席之地。摩托罗拉失去手机市场统治地位的原因还必须从自身找。这里面既有无法抗拒的命运的捉弄,也有人为的因素。
两年前,我和李开复博士等人多次谈论科技公司的兴衰,我们一致认为一个公司的基因常常决定它今后的命运,比如 IBM 很难成为一个微机公司一样。摩托罗拉也是一样,它的基因决定了它在数字移动通信中很难维持它原来在模拟手机上的市场占有率。摩托罗拉并不是没有看出数字手机将来必将代替模拟手机,而是很不情愿看到这件事发生。作为第一代移动通信的最大收益者,摩托罗拉要尽可能地延长模拟手机的生命期,推迟数字手机的普及,因为它总不希望自己掘自己的墓。如果过早地放弃模拟手机,就等于放弃已经开采出来的金矿,而自降身价和诺基亚的公司一同从零开始。尤其在刚开始时,数字手机的语音质量还远不如摩托罗拉砖头大小的大哥大,更使摩托罗拉高估了模拟手机的生命期。和所有大公司一样,在摩托罗拉也是最挣钱的部门嗓门最大,开发数字手机的部门当然不容易盖过正在挣钱的模拟手机部门,因此,摩托罗拉虽然在数字手机研发上并不落后,但是,进展缓慢。一旦各个竞争对手推出各种各样小巧的数字手机时,摩托罗拉才发现自己慢了半拍。
当然,以摩托罗拉技术和市场的优势赶上这半步照说应该不难,但是,摩托罗拉另一根基因使得它很难适应新的市场竞争。在模拟通信设备市场上,技术占有至关重要的位置,其它方面,比如方便性,外观都不重要。而且模拟电子技术很大程度上靠积累,后进入市场的公司很难一年两年赶上。玩过发烧音响的读者知道,音响的数字设备,比如播放机,各个牌子差异不是很大,而模拟部分比如喇叭不同厂家的差异有天壤之别。日本的 SONY 和先锋至今做不出美国 Harman Kardon 和 Infinity 那种高质量的喇叭。在摩托罗拉内部,很长时间里,也许直到今天,技术决定论一直占主导。在数字电子技术占统治地位的今天,各个厂家之间在技术上的差异其实很小,这一点点差别远远不足以让用户选择或不选择某个品牌的产品。相反,功能、可操作性、外观等非技术因素反而比技术更重要。在这些方面,摩托罗拉远远比不过诺基亚和亚洲的对手。我一些在摩托罗拉的朋友常常很看不上诺基亚和三星等公司的做法“他们换一个机壳或者颜色就算是一款新手机”,但是,用户还真的很买后者这种做法的帐。
公平地讲,摩托罗拉的手机仍然是同类手机中信号最好,最可靠的,作为只用手机打电话的我,在使用过各个厂家的手机后,还是最推崇摩托罗拉的。但是,在亚洲,手机不仅仅是一个电话,它是个人通信的平台,是生活的一部分,甚至有人在上面镶上钻石作为身份的象征。(这有点像两百年前欧洲人的手杖,其实不是为了支撑身体。)在满足后者需求上,诺基亚和以三星为首的亚洲做到更好。
如果说基因决定性多少有些宿命论,那么人为的因素也加速了摩托罗拉的衰落。我们在介绍英特尔一章中介绍过,在科技工业发展最快的八九十年代,摩托罗拉的第三代家族领导人卡尔文三世没有能力在这个大时代中纵横捭阖,开拓疆土。摩托罗拉本来在手机、计算机处理器和数字处理器(DSP)三个领域均处于领先地位,前景不可限量。但是卡尔文实在没有能力将三个庞大的部门十几万人管理好,虽然他没有犯什么大的错误,但是他平平庸庸。也许,在五十年前,一个只需要守成的年代他可以坐稳他的位置,但是在上个世纪末那个一个英雄辈出、拒绝平庸的年代,盖茨、乔布斯、郭士纳、格罗夫、钱伯斯和通用电气的杰克•韦尔奇等人都在同场角逐,任何公司都在逆水行舟,不进则退。除了卡尔文,摩托罗拉的整个管理层也有责任,他们低估了摩尔定理的作用。虽然数字手机在一开始还比不上模拟手机,但这并不能说它要很长时间才能威胁模拟手机的地位。事实上,由于半导体技术按指数的速度发展,手机数字化比摩托罗拉高管们想象的时间表来得早得多,使得摩托罗拉几十年来积累的模拟技术变得无关紧要,市场的优势顿失。
本来,摩托罗拉是最有资格领导移动通信大潮的,很遗憾,它只踏上了一个浪尖就被木工厂出身的诺基亚超过了。
4. 铱星计划
世界科技史上最了不起的、最可惜的、也许也是最失败的项目之一就是以摩托罗拉牵头的铱星计划。
为了夺得对世界移动通信市场的主动权,并实现在世界任何地方使用无线手机通信,以摩托罗拉为首的美国一些公司在政府的帮助下,于 1987 年提出的新一代卫星移动通信星座系统。我们知道,当今的移动通信最终要通过通信卫星来传输信息,为了保证在任何时候卫星能够收发信号,卫星必须保持和地球的相对位置不变。所有的同步通信卫星都必须挂在离地球三万多公里高的赤道上空。同时在地面建立很多卫星基站来联络手机和卫星。如果一个地方没有基站,比如沙哈拉沙漠里,那么手机就没有信号,无法使用。铱星计划和传统的同步通信卫星系统不同,新的设计是由 77 颗低卫星组成一个覆盖全球的卫星系统。每个卫星比同步通信卫星小得多,重量在 600-700 公斤左右,每颗卫星有三千多个信道,可以和手机直接通信(当然还要互相通信)。因此,它可以保证在地球任何地点实现移动通信。由于金属元素铱有 77 个电子,这项计划就被称为了铱星计划,虽然后来卫星的总数降到了 66 个。
这是一个非常宏伟而超前的计划,它最大的技术特点是通过卫星与卫星之间的传输来实现全球通信,相当于把地面蜂窝移动系统搬到了天上。从技术讲,铱星系统是相当了不起的,它采用星际链路。在极地,66 颗卫星要汇成一个点,又要避免碰撞,难度很高。从管理上讲,它又是一个完整的独立网, 呼叫、计费等管理是独立于各个国家通信网的。(这种独立计费再后来给它的运营带来很大麻烦。)低轨道卫星与目前使用的同步轨道卫星通信系统比较有两大优势:首先,因为轨道低,只有几百公里,信息损耗小,这样才可能实现手机到卫星的直接通信。我们现在的任何手机都不可能和三万公里以外的同步卫星直接通信;第二,由于不需要专门的地面基站,可以在地球上任何地点进行通信。1991 年摩托罗拉公司联合了好几家投资公司,正式启动了“铱星计划”。1996 年 ,第一颗铱星上天;1998 年整个系统顺利投入商业运营。美国历史上最懂科技的副总统戈尔第一个使用铱卫系统进行了通话。此前,铱星公司已经上市了,铱星公司的股票在短短的一年内大涨了四倍。铱星系统被美国《大众科学》杂志评为年度全球最佳产品之一。铱星计划开始了个人卫星通信的新时代。
从技术角度看,铱星移动通信系统是非常成功的。这是真正的科技精品。我常常想,我们这些被称为高科技公司的互联网公司做到的东西和铱星系统相比,简直就像是玩具。铱星系统在研发中,有许多重大的技术发明。应该说整个铱星计划从确立、运筹和实施都是非常成功的。但是,在商业上,从投资的角度讲,它却是个彻头彻尾的失败。这个项目投资高达五六十亿美元,每年的维护费又是几亿美元。除了摩托罗拉等公司提供的投资和发行股票筹集的资金外,铱星公司还举借债三十亿美元的债务,每月光是利息就达几千万。为了支付高额的费用,铱星公司只能将手机的价钱订在五千美元一付,每分钟的通话费定在每分钟三美元。这样,铱星公司的用户群就大大减小。直到去年,它才有二十万用户,还不及苹果iPhone一个月发展的用户多。
铱星系统投入商业运行不到一年,1999 年 8 月 13 日铱星公司就向纽约联邦法院提出了破产保护。半年后的 2000 年 3 月 18 日,铱星公司正式破产。铱星成了美丽的流星。66 颗卫星在天上自己飞了几年,终于于 2001 年被一家私募基金公司(Private Equity)以两千五百万美元的低价买下。不到铱星整个投资是六十亿美元的 1% 。作为一个与摩托罗拉无关的私营公司,铱星居然起死回生,去年实现近三亿美元的营业额和五千万的利润。(注:这里的利润是按美国会计结算方式计算出来的,盈利并不代表现金流是正数。)
铱星计划是通信史上一个流星,一个美丽的故事(A Beautiful Story)。摩托罗拉公司很聪明地利用其技术优势吸引了全世界的眼球。该计划一出炉就引起世人的广泛注目,也赢得了风险投资家的青睐。摩托罗拉为此自己拿出了十亿美元,同时钓鱼似的从投资公司有拿到近五十亿美元,从而大大降低了自己的风险。但是,在商业运作上,摩托罗拉做得很不成功。首先,市场分析现在看来就有问题,成本过高导致用户数量不可能达到预计的盈利所必需的规模。而成本过高的原因又是技术选择的失误造成的。摩托罗拉长期以来都是一个了不起的技术公司,它长于技术,但是过分相信技术的作用。铱星计划在技术上是无与伦比的,但是,过于超前市场的技术不仅导致成本过高,而且维护费用也是巨大的。另外,引入风投本身的弊端在项目的后期凸显出来,那就是投资者为了收回投资,过早将铱星系统投入商用,当时这个系统通话的可靠性和清晰度很差,数据传输速率也仅有 2.4Kps ,因此除了打电话没法做任何事,这使得潜在的用户大失所望。概况来讲,就是铱星计划太超前了,它开业的前两个季度,在全球只有一万个用户,而当初市场的分析去乐观地预计,仅在中国就能有这个数的十倍。在后期商业运作上。铱星公司问题很多,最终导致银行停止贷款、部分股东撤回投资,并导致公司在股市上停盘的致命打击。
5. 全线溃败
铱星计划对摩托罗拉的打击远不止十亿美元。在摩托罗拉启动铱星计划时,GSM 还没有在世界上占统治地位,美国和包括中国在内的很多国家还吃不准技术上更好的 CDMA 是否会很快替代掉 GSM 。但是,摩托罗拉由于把精力分散到了铱星上,不仅失去了和诺基亚竞争的最佳时机,而且还把一些市场丢给了三星、LG 等更新的电子公司。
当然,仅仅这一次失败、甚至在整个手机领域的失败还不至于把世界第一的无线通信公司搞垮。但是,摩托罗拉几乎同时在所有的战线上全面崩溃,便一下跌入了谷底。
在计算机处理器业务上,摩托罗拉经过多年的努力,还是最终败给了英特尔。摩托罗拉和英特尔之争在前面已经提到,我们就不再赘述了。值得强调的是,从一开始直到几年前摩托罗拉把它的半导体业务卖掉,摩托罗拉在处理器技术和产品性能上从来没有输给过英特尔,但是在商业竞争中,光有技术显然是不行的。
在数字信号处理器上,摩托罗拉最终没有竞争过老对手德州仪器。如果说中央处理器(CPU)是计算机的大脑,数字信号处理器则是我们今天手机、数字电视等产品的大脑。它在国民经济和人们生活中的重要性可想而知。
谈到数字信号处理器,业界的人都会首先想到德州仪器公司(TI)。德州仪器公司历史和摩托罗拉差不多长,经历也类似,从给军方提供无线电产品起家。八十年代初,即 AT&T 之后,TI 和摩托罗拉几乎同时推出了自己的 DSP ,TSM320 系列和 M56000 系列。德州仪器的第一代 TSM320C2X 是十六位定点处理器,在精度上略显不足,由于是定点处理器,所有的浮点计算要由编程人员改为定点实现,使用也不是很方便。摩托罗拉的 M56000 系列一开始就是 24 位,精度对于当时的应用绰绰有余,应该讲性能在 TI 产品之上。但是,学过计算机编程的人可能都知道,这种不伦不类的 24 位处理方式使用起来会很别扭。很快德州仪器推出了三十二位的 TSM320C3X 系列,虽然价钱较摩托罗拉的 DSP 贵,但是由于在 32 位处理器上开发产品容易,因此大家还是喜欢用 TI 的 DSP 。由于摩尔定理的作用,摩托罗拉 M56000 在价格上的优势越来越不明显,而它在开发成本上的劣势渐渐显示出来,在 DSP 上,它与 TI 的差距一天天拉大。我至今搞不懂为什么摩托罗拉要做上不着天、下不着地的 24 位 DSP 。也许是它考虑到客户购买的成本,但却忽视了客户使用的方便性。说得重一点,摩托罗拉低估了摩尔定理的作用,过分看重制造成本而忽视了开发成本:前者随着时间的推移而降低,后者则增加,因此它的产品从发展的角度看略逊于 TI 。另外提一句,摩托罗拉的中央处理器 68K 系列中早期的产品也是这种不伦不类的 24 位总线。
随着半导体的集成度的提高,TI 等公司将手机外围电路的芯片和 DSP 集成在一起,现在的手机主要芯片只剩下一个。TI 很像计算机领域的英特尔公司,它自己不做手机,而是像许许多多手机厂商提供核心芯片,它通过其领先的 DSP 技术,牢牢站住了世界中高端手机市场的半壁江山。摩托罗拉的战线则拉得很长,从手机芯片到手机整机一条龙。如果内部合作的好,这种做法成本固然低。但是,加尔文不是通用电气的韦尔奇,没有能力整合这么大的公司,其芯片部门和整机部门像两个单独的公司,没有足够的沟通,反而使得产品开发周期变长。摩托罗拉和德州仪器在手机芯片上的差距是渐渐拉开的,就如同它和英特尔在处理器上的竞争是慢慢失败的一样。但是,当这种差距达到一定程度后,就不可能逆转了。到 2004 年,加尔文下台时,其半导体部门被迫分离出去单独上市,就是现在的 Freescale 。后来 Freescale 的业绩依然不佳,只好被私募基金(Private Equity)买了去,这当然是后话了。
摩托罗拉长期以来形成了高工资,高福利的大锅饭,员工干好干坏差别不大。摩托罗拉的本意是想避免员工之间不必要的攀比,每个人都有一个宽松自在的环境安心工作。这是四五十年前大公司吸引人才的方式,欧洲公司至今还采用这种办法。但是这不太适合喜欢冒险的美国人。八九十年代以来,美国的科技公司为了调动知识型员工的积极性,很多采用的股票期权制(我们以后再仔细介绍)。而摩托罗拉公司很晚都没有采用这种福利,直到今天,摩托罗拉公司给员工的期权依然数量很少。这不能不说是受摩托罗拉的传统管理方式所限。因此,很多人把摩托罗拉看成一个去养老的公司而不是一个创业的公司。
摩托罗拉另一个问题是管理混乱,内斗多。虽然这是上市大公司的通病,但摩托罗拉在同行业公司中问题更严重些。大公司在竞争中,不需要做到十全十美,只要比对手好一点点就行了,而摩托罗拉却恰恰比英特尔和TI差了一点。时间一长,就露出了败相。
6. 回天乏力
2001 年美国网络泡沫破裂,科技股 Nasdaq 崩盘,这对本来已经开始走下坡路的摩托罗拉更是雪上加霜,它的股票从 2000 年的 50 多美元跌到 2003 年的不足 8 美元。(注释:2000 年摩托罗拉有一次 1:2 的分股,分股前的股价超过 100 美元。)2003 年 9 月,摩托罗拉创始人保罗·加尔文的孙子克里斯托弗·加尔文不得不离开摩托罗拉董事长的职位,摩托罗拉从此结束了家族企业的的历史。
像惠普那样换一个 CEO 就能翻盘的事不是总能发生的。加尔文的继任者 Zander 可没有惠普新 CEO 赫德的本事和运气,虽然他上任时提出夺回手机占有率的口号。和跨国公司大多数受命危难的继任者一样,Zander 上台后进行了公司重组,大规模裁员,公司的利润保住了,股价也上来了。同时,他把半导体部门分出去上市,专心于手机业务。但是,在管理公司方面,他并没有显示出过人的本领。办事效率依然不高、内斗明显,产品开发速度上居然赶不上后来居上的三星公司。三星每几个月就能推出一款手机,而摩托罗拉半年都不能定义清楚一款新的手机。不仅如此,摩托罗拉每成功上市一款手机,就有更多款的手机半途而废。因此,摩托罗拉手机的设计成本极高。
摩托罗拉至今都看不起三星和诺基亚不重视核心技术、只在外型和功能上搞花架子的做法。摩托罗拉一直认为技术和质量是产品的关键,因此我说它是 IT 业的一个贵族。这当然没有错,但是远不够。今天,至少在手机行业,各个公司产品在硬件技术上差不到哪去,设计一款手机的硬件和当年在中关村攒一台 PC 一样容易。现在的手机里面没有几个芯片,而且核心的只有一个,只要到 TI 去买就可以了。(这也是为什么中国有无数手机品牌的原因。)因此手机的质量都不是唯一决定市场的因素。另一方面,今天所有手机的质量比二十年前都有很大的提高,今天质量差的手机也比二十年前质量好的手机质量更好,也就是说质量差的手机也凑合能用。要想在今天的手机市场上(尤其是在亚洲)站稳脚,功能、外观的设计和质量及技术含量同样重要,商业和市场的开拓更是不可偏废,在这些方面,摩托罗拉和后进入手机市场的公司几乎处在同一个起跑线上。
摩托罗拉早在七、八年前就看到统一手机操作系统平台的重要性。十年前,摩托罗拉和所有手机厂家的每一款手机都有自己独特的硬件和软件,开发工作重复性很高,手机应用程序之间也互不兼容。摩托罗拉试图打造一个通用的操作系统作为它今后手机开发的统一的平台。这个想法本来不错,但是摩托罗拉选错了平台,选中了 Java 。它从太阳公司请来了一位主管 Java 开发的副总裁主管手机通用操作系统的开发,同时摩托罗拉公司雇佣很多 Java 工程师来开发这个平台。但是,Java 有一个无法克服的先天不足,就是速度太慢。2004 年,该平台原型开发出来时,公司发现其速度只有实时速度的几分之一,即使硬件速度按照摩尔定理预测的速度增长,这个操作系统在几年内也无法实现实时。因此摩托罗拉不得不放弃该平台。此后,摩托罗拉又试图开发基于 Linux 的通用平台,但是由于内耗,进展也不顺利。而此时,Andy Robin 的小团队已经在 Linux 手机平台上取得了巨大的突破,这个团队不久便被 Google 收购,成为今天全世界开源的手机平台 Android 的原型。摩托罗拉由于执行力不足,终于失去了统一手机操作系统平台的最佳机会。
摩托罗拉做手机二十年,至今没有一款手机能称得上“Cool“ -酷的。Zander 在这方面也没有苹果公司乔布斯的天赋。苹果公司虽然是最晚进入手机市场的,却做出了今天最好的手机。在开拓市场方面,Zander 能想出的提高市场占有率唯一有效的手段就是打价格战。一时间,这个饮鸩止渴的办法确实提高了摩托罗拉的市场占有率。但是,由于摩托罗拉手机的利润本身就比诺基亚薄,降价空间有限,两年后,当摩托罗拉再无利润可降时,内部的低效率、管理混乱的问题还没来得及解决,摩托罗拉的市场占有率已经开始慢慢地下滑。当了四年 CEO 的 Zander 就不得不离职了。
摩托罗拉没有惠普的运气,它至今还没有找到一位合适的领导人。新的 CEO 至今没有找到拯救摩托罗拉的灵丹妙药。据华尔街日报报道,摩托罗拉居然想出出售最重要的手机部门的馊主意。但是,居然没有公司愿意接手,可见摩托罗拉手机部门内部问题之严重。
摩托罗拉的救星也许在中国。摩托罗拉二十年前在中国的投资就非常成功,其中国公司是摩托罗拉海外最大、营业额最高的分公司,而且是促成摩托罗拉和中国政府以及工业界全面合作的桥梁。据华尔街日报报道,就在摩托罗拉试图出售手机部门最艰难的时候,摩托罗拉和几家中国公司签下了扩大合作的协议,这在生产和市场或许会有转机。但是,这些合作只是远水,是否能解摩托罗拉的近渴还不可知。
结束语
摩托罗拉作为世界无线(移动)通信的先驱和领导者,可以说开创了整个产业。遗憾的是,它只领导了移动通信的第一波浪潮,就被对手赶上并超过。此后,由于技术路线错误,执行力不足,失去了利用技术优势夺回市场的可能性。摩托罗拉曾经跨通信和计算机两大领域之间,甚至很有同时成为计算机和通信业霸主的可能。退一步讲,只要它在计算机中央处理器 CPU ,通信的数字处理器 DSP 或者手机任何一个领域站稳脚,就能顺着计算机革命或者通信革命的大潮前进,立于不败之地。但是,其领导人无力领导这样一个庞大的公司,反而使公司没有专攻的方向,在各条战线上同时失利。
摩托罗拉和 AT&T 衰落的原因正好相反。 AT&T 由于没有一个能控股的股东,没有人觉得公司是自己的,并为它的长远利益考虑,于是董事会的短视和贪婪断送了它。而摩托罗拉相反,一直由卡尔文家族控制,卡尔文三世很想把它办成百年老店,当然不会出现 AT&T 拆了卖的败家子行为,但是他心有余而力不足,无能力迎接信息革命的挑战。因此,摩托罗拉这个贵族式的公司不可避免地没落了。如果当初摩托罗拉的领袖是盖茨或者通用电气的韦尔奇,它也许就不会是今天这个结局了。我在前面多次强调公司领导人对公司发展的重要性,摩托罗拉的兴衰就是一个很好的例子。
君子之泽,五世而斩,对一个贵族家族式的公司也是如此。虽然摩托罗拉衰落了,但是它几十年来造福于我们这个世界。没有它,我们也许要晚用几年手机,没有它和英特尔的竞争,我们的计算机也许没有今天这么快。
发表者:Google(谷歌)研究员 吴军
Google 黑板报 -- Google 中国的博客网志: 浪潮之巅第八章 没落的贵族—摩托罗拉(一)
1. 二战的品牌
2. 黄金时代
3. 基因决定定理
4. 铱星计划
5. 全线溃败
6. 回天乏力
美国过去未曾有过贵族,今后也不会有。无论是巨富盖茨或者是年轻美貌、聪明而富有的女继承人伊万卡.特朗普都不是任何意义上的贵族。实际上贵族这个词在整个西方本身就是一个没落的词汇,虽然在东方一些人或许沉迷在贵族梦中。但是,贵族在历史上曾经实实在在地出现过。如果我们认为公司之中也有所谓的贵族,摩托罗拉无疑可以算是一个。
曾几何时,摩托罗拉就是无线通信的代名词,同时它还是技术和品质的结晶。甚至就在二十年前,摩托罗拉还在嘲笑日本品质的代表索尼,认为后者的质量只配做体育用品。今天,虽然摩托罗拉的产品从品质上讲仍然傲视同类产品,但是就像一个戴着假发拿着手杖的贵族,怎么也无法融入时尚的潮流。
1. 二战的品牌
下面这张图是从美国军方网站上找到的,大部分读者应该第一次见到这张照片。但是,大家对它一定是似曾相识,因为这是美军在各种媒体,尤其是在电影中,通信兵最经典的形象。这位战士身上背的是摩托罗拉的 SCR300 背负式跳频步话机。它是一个可调谐的高频调频通信设备,重十六公斤,有效通讯距离十六公里左右。六十年前,摩托罗拉的牌子随着美军传播到全世界。
摩托罗拉公司原名加尔文制造公司(Galvin Manufacturing Corp),创立于 1928 年,由创始人之一的保罗.加尔文的名字命名。它最早是生产汽车里的收音机的,摩托罗拉则是这种收音机的品牌。摩托罗拉一词 Motorola 的前五个字母 Motor 表示汽车,ola 是美国很多商品名称喜欢用的后缀,比如可口可乐 Coca Cola 。二战前,美国军方已经认识到无线电通信的重要性,开始研制便携式无线通信工具,并且自己研制出一款报话机(Walkie Talkie)SCR-194 。但是非常笨重,不很适用。摩托罗拉的一些工程师参与了这项研究。1940年,摩托罗拉研制出真正用于战场的报话机,就是上面照片中的 SCR300 。1942 年,摩托罗拉公司再接再厉,研制出“手提式”的对讲机(Handy Talkie)SCR-536 。见下图:
这个超级“大哥大”重四公斤,在开阔地带通信范围一公里半,在树林中只有三百米。即使如此,那时美军的通信装备也高出其它国家一大截。从这一系列军用设备可以看出,摩托罗拉在无线电通信方面的实力很强,它的调频技术和天线技术都是领先于世界的。同时,作为美国军方和政府部门的供应商,摩托罗拉产品的稳定性和鲁棒性(Robustness)都很好。这从某种程度上讲是摩托罗拉产品的基因。至今,很多摩托罗拉的产品仍然如此。我经常看到这类报道,在一个荒郊野外出了车祸,大家都拿出手机呼救,最后只有摩托罗拉的手机能打出去。但是,很多事情是双刃剑,过分注重技术和品质使得摩托罗拉在商业上的灵活性远不如诺基亚和三星等竞争对手。
二战后,摩托罗拉作为品牌名气越拉越大 ,人们一说起无线通信就首先会想到摩托罗拉。直到二十年前,摩托罗拉一直垄断这个市场,从对讲机、早期的手机,即大哥大,到九十年代初风靡中国,城市里人手一个,万元户腰里一排的 BP 机。人们甚至忘了它公司的名称加尔文制造公司,于是,1947 年公司干脆改名摩托罗拉,由此可见当年摩托罗拉名头之响。这种事情在大公司里并不少见,几天前,松下公司也把它的名字从创始人松下幸之助的名字 Matsushita 改为了品牌的名字 Panasonic 。当然这是题外话了。
2. 黄金时代
从二战后到九十年代初,可以讲是摩托罗拉红火的年代。摩托罗拉在模拟无线通信方面有任何公司都无法比拟的技术优势,并且创造出多项世界第一。美国通信界对通信有一种通用的分类方法,即分为:有线单向(如闭路电视)、有线双向(如电话)、无线单向(如收音机)和无线双向(如手机电话和 WIFI)四种。长期以来,直到十几年前,AT&T 一直是有线通信之王,RCA 是无线单向通信的老大,而摩托罗拉是不折不扣的无线双向通信的霸主。我们从前一节可以看到,摩托罗拉的核心业务都和双向的无线通信有关。
1946 年,摩托罗拉发明了汽车电话。看过鲍嘉和赫本演的“ Sabrina (龙凤配)”的读者可能对这种产品有印象,影片中作为大公司董事长 Linus 从纽约长岛家中出发,一上汽车便通过汽车电话向远在曼哈顿的公司同事下达指示。很遗憾的是,汽车电话一直都是富人的奢侈品,它还没得到普及,就被手机电话代替了。十二年后,摩托罗拉发明了基于汽车的对讲机,它在美国被警察、出租车公司和各种运输公司广泛使用,直到九十年代末被手机电话取代(除了警察还在用)。在 2000 以前各国的警匪片中,我们经常看到此产品。
1963 年对摩托罗拉来讲是一个值得纪念的年份。这一年,摩托罗拉发明了世界上第一个长方形的彩电显像管,而且它迅速成为了行业标准。(在此之前,RCA 生产的彩电荧幕是圆形的。请看这个图片)
1967 年,摩托罗拉生产出美国第一台全晶体管彩色电视机—以前的彩电或多或少还有些电子管。这件事对摩托罗拉影响很大,以前摩托罗拉虽然在技术上领先于世界,但是产品除了汽车里的收音机都不是民用的。彩色显像管的发明,标志着摩托罗拉有能力进入了民用市场并且将业务的重点转向民用。但遗憾的是,摩托罗拉在家电市场初期的尝试不很成功,到 1974 年,它不得不将彩电业务卖给了日本的松下公司。今天,很少有人知道摩托罗拉对彩电工业的贡献。
在六七十年代,摩托罗拉完全能经历的起在彩电上的失败,因为它领先于世界的技术太多了。到八十年代,摩托罗拉进入蓬勃发展的十年,它的业务也由无线通信扩展到计算机的半导体芯片。1979 年,摩托罗拉成功地推出 68000 通用微处理器,它因设计的集成度为 68000 个晶体管而得名(虽然实际集成度为 70000 个)。它的地址总线(Address Bus)宽度为奇特的 24 位,可以管理 16 MB 的内存,因此它成为所有小型机和工作站的首选芯片。而同期英特尔的处理器其实比它落后半代,后者 16 位的地址宽度只能管理 64K 的内存。
八十年代,随着数字信号处理的发展,出现了对专用的数字信号处理芯片(DSP)的需求,该产品也因运而生。德州仪器(TI)、AT&T 和摩托罗拉在八十年代初先后推出了 TSM ,DSP 和 M56K 三大系列产品,这个市场发展的如此之快,给摩托罗拉带来了一个新的金矿。今天,以 DSP 为核心加上外围通信的手机核心芯片仍然是全世界销量最大,最赚钱的半导体芯片(因为每个手机中必须有一个这样的芯)。
当然,摩托罗拉对世界最大的贡献是它在八十年代初发明的民用蜂窝式移动电话,也就是早期说的大哥大,现在说的手机。大家公认摩托罗拉是当今手机通信的发明公司,虽然 AT&T 声称它的无绳电话比摩托罗拉的手机早,但是大家知道无绳电话和手机电话是两回事。由于 AT&T 扎根于有线通信,不自觉地会抵触无线通信。移动电话刚起步时,AT&T 预计到 2000 年全球不超过一百万用户,这个估计比后来 2000 年时的实际数目小了一百倍。所以,AT&T 自然不会把重点放在移动通信上。而摩托罗拉正相反,它在有线通信上不可能有作为,就自然而地押宝在移动通信上,领导和推动了移动通信的潮流。
到九十年代初,摩托罗拉在移动通信、数字信号处理和计算机处理器三个领域都是世界上技术最强的 player。更难能可贵的是,它的产品声誉极好。我最早接触摩托罗拉的产品是在八十年代末,一些海关的朋友向我介绍他们的摩托罗拉对讲机。那些对讲机可以在钢铁包围的大货轮货舱里和岸上的同事通话,这是任何其他同类产品做不到的。1990 年,摩托罗拉的营业额超过一百亿美元,在 IT 公司中仅次于 IBM 和 AT&T 。如果摩托罗拉能通吃三大市场,它无疑将是今天世界上最大的IT公司。即使它能垄断其中一个,也是一个巨无霸的公司。很遗憾,它一个也没做好,这个通信革命的领导者被自己掀起的技术浪潮淘汰了。原因何在呢?
3. 基因决定定理
作为移动通信的领导者,摩托罗拉自然地垄断了第一代移动通信市场。第一代移动通信是基于模拟信号的,天线技术和模拟信号处理技术的水平决定了产品的好坏。而产品的外观式样根本不用考虑。在技术方面,没有公司能挑战摩托罗拉。因此,摩托罗拉的手机虽然卖的贵(那时在中国一个好的手机要两万元),仍然占领了世界百分之七十的市场。其它公司要想和摩托罗拉竞争,只能寄希望于下一代了。
在第二代移动通信刚开始时,欧洲联合起来了。以往欧盟各国只能算是松散的联盟,在技术上很难单独和美国抗衡。即使搞出一个不同于美国的行业标准,也很难在世界上占主导,比如彩电的 PAL 制式。近二十年来,欧洲独立于美国单独行事的意识越来越强,同时吸取了各自为战的失败教训。明显加强了内部的合作。终于在第二代移动通信上超越了美国。
1982 年欧洲邮电管理委员会 European Conference of Postal and Telecommunications Administrations (CEPT)提出了数字移动通信的标准 Groupe Spécial Mobile,简称 GSM 。后来这个标准流行于世,欧洲又把它改称为 Global System for Mobile communications , 因此很多人以讹传讹误以为 GSM 是后者的缩写。1989 年,该标准被提交到欧洲电信标准局,第二年便成为欧洲后来乃至成为世界的第二代移动通信标准。GSM 的技术核心是时分多址技术(TDMA),即将每个无线频率均匀地分给八个(或者十六个)手机用户,每个用户交互地占用八分之一的信道时间。(注:人们通话时,语音直接的间歇时间其实很长,只有语音编码做的合理,就可以几个用户共用一个信道。)GSM 实现简单,在成为欧洲标准的第二年,即 1991 年,就由爱立信和一家芬兰公司架设了第一个 GSM 的移动通信网。两年后,包括中国在内的四十几个国家采用 GSM 标准,今天,GSM 占世界手机用户的 80%,据称达 20 亿用户。
在欧洲人行动的同时,美国人并没有闲着,他们似乎比欧洲人更努力。整个欧洲只搞出一个标准,而只有欧洲人口三分之一的美国居然搞出了三个数字通信的标准,其中两个和 GSM 一样是基于 TDMA 的标准,而第三个是很先进的码分多址 CDMA 标准。(以后有功夫再介绍 CDMA ,这里就不赘述了。)结果就不用说了,美国注定在第二代移动通信标准上注定失败。
美国在标准之争上的失败间接影响的摩托罗拉手机今后的竞争力。当然,在标准上失败并不意味着摩托罗拉在手机市场上会失败,就像不拥有任何标准的三星公司照样在手机上抢到了世界市场的一席之地。摩托罗拉失去手机市场统治地位的原因还必须从自身找。这里面既有无法抗拒的命运的捉弄,也有人为的因素。
两年前,我和李开复博士等人多次谈论科技公司的兴衰,我们一致认为一个公司的基因常常决定它今后的命运,比如 IBM 很难成为一个微机公司一样。摩托罗拉也是一样,它的基因决定了它在数字移动通信中很难维持它原来在模拟手机上的市场占有率。摩托罗拉并不是没有看出数字手机将来必将代替模拟手机,而是很不情愿看到这件事发生。作为第一代移动通信的最大收益者,摩托罗拉要尽可能地延长模拟手机的生命期,推迟数字手机的普及,因为它总不希望自己掘自己的墓。如果过早地放弃模拟手机,就等于放弃已经开采出来的金矿,而自降身价和诺基亚的公司一同从零开始。尤其在刚开始时,数字手机的语音质量还远不如摩托罗拉砖头大小的大哥大,更使摩托罗拉高估了模拟手机的生命期。和所有大公司一样,在摩托罗拉也是最挣钱的部门嗓门最大,开发数字手机的部门当然不容易盖过正在挣钱的模拟手机部门,因此,摩托罗拉虽然在数字手机研发上并不落后,但是,进展缓慢。一旦各个竞争对手推出各种各样小巧的数字手机时,摩托罗拉才发现自己慢了半拍。
当然,以摩托罗拉技术和市场的优势赶上这半步照说应该不难,但是,摩托罗拉另一根基因使得它很难适应新的市场竞争。在模拟通信设备市场上,技术占有至关重要的位置,其它方面,比如方便性,外观都不重要。而且模拟电子技术很大程度上靠积累,后进入市场的公司很难一年两年赶上。玩过发烧音响的读者知道,音响的数字设备,比如播放机,各个牌子差异不是很大,而模拟部分比如喇叭不同厂家的差异有天壤之别。日本的 SONY 和先锋至今做不出美国 Harman Kardon 和 Infinity 那种高质量的喇叭。在摩托罗拉内部,很长时间里,也许直到今天,技术决定论一直占主导。在数字电子技术占统治地位的今天,各个厂家之间在技术上的差异其实很小,这一点点差别远远不足以让用户选择或不选择某个品牌的产品。相反,功能、可操作性、外观等非技术因素反而比技术更重要。在这些方面,摩托罗拉远远比不过诺基亚和亚洲的对手。我一些在摩托罗拉的朋友常常很看不上诺基亚和三星等公司的做法“他们换一个机壳或者颜色就算是一款新手机”,但是,用户还真的很买后者这种做法的帐。
公平地讲,摩托罗拉的手机仍然是同类手机中信号最好,最可靠的,作为只用手机打电话的我,在使用过各个厂家的手机后,还是最推崇摩托罗拉的。但是,在亚洲,手机不仅仅是一个电话,它是个人通信的平台,是生活的一部分,甚至有人在上面镶上钻石作为身份的象征。(这有点像两百年前欧洲人的手杖,其实不是为了支撑身体。)在满足后者需求上,诺基亚和以三星为首的亚洲做到更好。
如果说基因决定性多少有些宿命论,那么人为的因素也加速了摩托罗拉的衰落。我们在介绍英特尔一章中介绍过,在科技工业发展最快的八九十年代,摩托罗拉的第三代家族领导人卡尔文三世没有能力在这个大时代中纵横捭阖,开拓疆土。摩托罗拉本来在手机、计算机处理器和数字处理器(DSP)三个领域均处于领先地位,前景不可限量。但是卡尔文实在没有能力将三个庞大的部门十几万人管理好,虽然他没有犯什么大的错误,但是他平平庸庸。也许,在五十年前,一个只需要守成的年代他可以坐稳他的位置,但是在上个世纪末那个一个英雄辈出、拒绝平庸的年代,盖茨、乔布斯、郭士纳、格罗夫、钱伯斯和通用电气的杰克•韦尔奇等人都在同场角逐,任何公司都在逆水行舟,不进则退。除了卡尔文,摩托罗拉的整个管理层也有责任,他们低估了摩尔定理的作用。虽然数字手机在一开始还比不上模拟手机,但这并不能说它要很长时间才能威胁模拟手机的地位。事实上,由于半导体技术按指数的速度发展,手机数字化比摩托罗拉高管们想象的时间表来得早得多,使得摩托罗拉几十年来积累的模拟技术变得无关紧要,市场的优势顿失。
本来,摩托罗拉是最有资格领导移动通信大潮的,很遗憾,它只踏上了一个浪尖就被木工厂出身的诺基亚超过了。
4. 铱星计划
世界科技史上最了不起的、最可惜的、也许也是最失败的项目之一就是以摩托罗拉牵头的铱星计划。
为了夺得对世界移动通信市场的主动权,并实现在世界任何地方使用无线手机通信,以摩托罗拉为首的美国一些公司在政府的帮助下,于 1987 年提出的新一代卫星移动通信星座系统。我们知道,当今的移动通信最终要通过通信卫星来传输信息,为了保证在任何时候卫星能够收发信号,卫星必须保持和地球的相对位置不变。所有的同步通信卫星都必须挂在离地球三万多公里高的赤道上空。同时在地面建立很多卫星基站来联络手机和卫星。如果一个地方没有基站,比如沙哈拉沙漠里,那么手机就没有信号,无法使用。铱星计划和传统的同步通信卫星系统不同,新的设计是由 77 颗低卫星组成一个覆盖全球的卫星系统。每个卫星比同步通信卫星小得多,重量在 600-700 公斤左右,每颗卫星有三千多个信道,可以和手机直接通信(当然还要互相通信)。因此,它可以保证在地球任何地点实现移动通信。由于金属元素铱有 77 个电子,这项计划就被称为了铱星计划,虽然后来卫星的总数降到了 66 个。
这是一个非常宏伟而超前的计划,它最大的技术特点是通过卫星与卫星之间的传输来实现全球通信,相当于把地面蜂窝移动系统搬到了天上。从技术讲,铱星系统是相当了不起的,它采用星际链路。在极地,66 颗卫星要汇成一个点,又要避免碰撞,难度很高。从管理上讲,它又是一个完整的独立网, 呼叫、计费等管理是独立于各个国家通信网的。(这种独立计费再后来给它的运营带来很大麻烦。)低轨道卫星与目前使用的同步轨道卫星通信系统比较有两大优势:首先,因为轨道低,只有几百公里,信息损耗小,这样才可能实现手机到卫星的直接通信。我们现在的任何手机都不可能和三万公里以外的同步卫星直接通信;第二,由于不需要专门的地面基站,可以在地球上任何地点进行通信。1991 年摩托罗拉公司联合了好几家投资公司,正式启动了“铱星计划”。1996 年 ,第一颗铱星上天;1998 年整个系统顺利投入商业运营。美国历史上最懂科技的副总统戈尔第一个使用铱卫系统进行了通话。此前,铱星公司已经上市了,铱星公司的股票在短短的一年内大涨了四倍。铱星系统被美国《大众科学》杂志评为年度全球最佳产品之一。铱星计划开始了个人卫星通信的新时代。
从技术角度看,铱星移动通信系统是非常成功的。这是真正的科技精品。我常常想,我们这些被称为高科技公司的互联网公司做到的东西和铱星系统相比,简直就像是玩具。铱星系统在研发中,有许多重大的技术发明。应该说整个铱星计划从确立、运筹和实施都是非常成功的。但是,在商业上,从投资的角度讲,它却是个彻头彻尾的失败。这个项目投资高达五六十亿美元,每年的维护费又是几亿美元。除了摩托罗拉等公司提供的投资和发行股票筹集的资金外,铱星公司还举借债三十亿美元的债务,每月光是利息就达几千万。为了支付高额的费用,铱星公司只能将手机的价钱订在五千美元一付,每分钟的通话费定在每分钟三美元。这样,铱星公司的用户群就大大减小。直到去年,它才有二十万用户,还不及苹果iPhone一个月发展的用户多。
铱星系统投入商业运行不到一年,1999 年 8 月 13 日铱星公司就向纽约联邦法院提出了破产保护。半年后的 2000 年 3 月 18 日,铱星公司正式破产。铱星成了美丽的流星。66 颗卫星在天上自己飞了几年,终于于 2001 年被一家私募基金公司(Private Equity)以两千五百万美元的低价买下。不到铱星整个投资是六十亿美元的 1% 。作为一个与摩托罗拉无关的私营公司,铱星居然起死回生,去年实现近三亿美元的营业额和五千万的利润。(注:这里的利润是按美国会计结算方式计算出来的,盈利并不代表现金流是正数。)
铱星计划是通信史上一个流星,一个美丽的故事(A Beautiful Story)。摩托罗拉公司很聪明地利用其技术优势吸引了全世界的眼球。该计划一出炉就引起世人的广泛注目,也赢得了风险投资家的青睐。摩托罗拉为此自己拿出了十亿美元,同时钓鱼似的从投资公司有拿到近五十亿美元,从而大大降低了自己的风险。但是,在商业运作上,摩托罗拉做得很不成功。首先,市场分析现在看来就有问题,成本过高导致用户数量不可能达到预计的盈利所必需的规模。而成本过高的原因又是技术选择的失误造成的。摩托罗拉长期以来都是一个了不起的技术公司,它长于技术,但是过分相信技术的作用。铱星计划在技术上是无与伦比的,但是,过于超前市场的技术不仅导致成本过高,而且维护费用也是巨大的。另外,引入风投本身的弊端在项目的后期凸显出来,那就是投资者为了收回投资,过早将铱星系统投入商用,当时这个系统通话的可靠性和清晰度很差,数据传输速率也仅有 2.4Kps ,因此除了打电话没法做任何事,这使得潜在的用户大失所望。概况来讲,就是铱星计划太超前了,它开业的前两个季度,在全球只有一万个用户,而当初市场的分析去乐观地预计,仅在中国就能有这个数的十倍。在后期商业运作上。铱星公司问题很多,最终导致银行停止贷款、部分股东撤回投资,并导致公司在股市上停盘的致命打击。
5. 全线溃败
铱星计划对摩托罗拉的打击远不止十亿美元。在摩托罗拉启动铱星计划时,GSM 还没有在世界上占统治地位,美国和包括中国在内的很多国家还吃不准技术上更好的 CDMA 是否会很快替代掉 GSM 。但是,摩托罗拉由于把精力分散到了铱星上,不仅失去了和诺基亚竞争的最佳时机,而且还把一些市场丢给了三星、LG 等更新的电子公司。
当然,仅仅这一次失败、甚至在整个手机领域的失败还不至于把世界第一的无线通信公司搞垮。但是,摩托罗拉几乎同时在所有的战线上全面崩溃,便一下跌入了谷底。
在计算机处理器业务上,摩托罗拉经过多年的努力,还是最终败给了英特尔。摩托罗拉和英特尔之争在前面已经提到,我们就不再赘述了。值得强调的是,从一开始直到几年前摩托罗拉把它的半导体业务卖掉,摩托罗拉在处理器技术和产品性能上从来没有输给过英特尔,但是在商业竞争中,光有技术显然是不行的。
在数字信号处理器上,摩托罗拉最终没有竞争过老对手德州仪器。如果说中央处理器(CPU)是计算机的大脑,数字信号处理器则是我们今天手机、数字电视等产品的大脑。它在国民经济和人们生活中的重要性可想而知。
谈到数字信号处理器,业界的人都会首先想到德州仪器公司(TI)。德州仪器公司历史和摩托罗拉差不多长,经历也类似,从给军方提供无线电产品起家。八十年代初,即 AT&T 之后,TI 和摩托罗拉几乎同时推出了自己的 DSP ,TSM320 系列和 M56000 系列。德州仪器的第一代 TSM320C2X 是十六位定点处理器,在精度上略显不足,由于是定点处理器,所有的浮点计算要由编程人员改为定点实现,使用也不是很方便。摩托罗拉的 M56000 系列一开始就是 24 位,精度对于当时的应用绰绰有余,应该讲性能在 TI 产品之上。但是,学过计算机编程的人可能都知道,这种不伦不类的 24 位处理方式使用起来会很别扭。很快德州仪器推出了三十二位的 TSM320C3X 系列,虽然价钱较摩托罗拉的 DSP 贵,但是由于在 32 位处理器上开发产品容易,因此大家还是喜欢用 TI 的 DSP 。由于摩尔定理的作用,摩托罗拉 M56000 在价格上的优势越来越不明显,而它在开发成本上的劣势渐渐显示出来,在 DSP 上,它与 TI 的差距一天天拉大。我至今搞不懂为什么摩托罗拉要做上不着天、下不着地的 24 位 DSP 。也许是它考虑到客户购买的成本,但却忽视了客户使用的方便性。说得重一点,摩托罗拉低估了摩尔定理的作用,过分看重制造成本而忽视了开发成本:前者随着时间的推移而降低,后者则增加,因此它的产品从发展的角度看略逊于 TI 。另外提一句,摩托罗拉的中央处理器 68K 系列中早期的产品也是这种不伦不类的 24 位总线。
随着半导体的集成度的提高,TI 等公司将手机外围电路的芯片和 DSP 集成在一起,现在的手机主要芯片只剩下一个。TI 很像计算机领域的英特尔公司,它自己不做手机,而是像许许多多手机厂商提供核心芯片,它通过其领先的 DSP 技术,牢牢站住了世界中高端手机市场的半壁江山。摩托罗拉的战线则拉得很长,从手机芯片到手机整机一条龙。如果内部合作的好,这种做法成本固然低。但是,加尔文不是通用电气的韦尔奇,没有能力整合这么大的公司,其芯片部门和整机部门像两个单独的公司,没有足够的沟通,反而使得产品开发周期变长。摩托罗拉和德州仪器在手机芯片上的差距是渐渐拉开的,就如同它和英特尔在处理器上的竞争是慢慢失败的一样。但是,当这种差距达到一定程度后,就不可能逆转了。到 2004 年,加尔文下台时,其半导体部门被迫分离出去单独上市,就是现在的 Freescale 。后来 Freescale 的业绩依然不佳,只好被私募基金(Private Equity)买了去,这当然是后话了。
摩托罗拉长期以来形成了高工资,高福利的大锅饭,员工干好干坏差别不大。摩托罗拉的本意是想避免员工之间不必要的攀比,每个人都有一个宽松自在的环境安心工作。这是四五十年前大公司吸引人才的方式,欧洲公司至今还采用这种办法。但是这不太适合喜欢冒险的美国人。八九十年代以来,美国的科技公司为了调动知识型员工的积极性,很多采用的股票期权制(我们以后再仔细介绍)。而摩托罗拉公司很晚都没有采用这种福利,直到今天,摩托罗拉公司给员工的期权依然数量很少。这不能不说是受摩托罗拉的传统管理方式所限。因此,很多人把摩托罗拉看成一个去养老的公司而不是一个创业的公司。
摩托罗拉另一个问题是管理混乱,内斗多。虽然这是上市大公司的通病,但摩托罗拉在同行业公司中问题更严重些。大公司在竞争中,不需要做到十全十美,只要比对手好一点点就行了,而摩托罗拉却恰恰比英特尔和TI差了一点。时间一长,就露出了败相。
6. 回天乏力
2001 年美国网络泡沫破裂,科技股 Nasdaq 崩盘,这对本来已经开始走下坡路的摩托罗拉更是雪上加霜,它的股票从 2000 年的 50 多美元跌到 2003 年的不足 8 美元。(注释:2000 年摩托罗拉有一次 1:2 的分股,分股前的股价超过 100 美元。)2003 年 9 月,摩托罗拉创始人保罗·加尔文的孙子克里斯托弗·加尔文不得不离开摩托罗拉董事长的职位,摩托罗拉从此结束了家族企业的的历史。
像惠普那样换一个 CEO 就能翻盘的事不是总能发生的。加尔文的继任者 Zander 可没有惠普新 CEO 赫德的本事和运气,虽然他上任时提出夺回手机占有率的口号。和跨国公司大多数受命危难的继任者一样,Zander 上台后进行了公司重组,大规模裁员,公司的利润保住了,股价也上来了。同时,他把半导体部门分出去上市,专心于手机业务。但是,在管理公司方面,他并没有显示出过人的本领。办事效率依然不高、内斗明显,产品开发速度上居然赶不上后来居上的三星公司。三星每几个月就能推出一款手机,而摩托罗拉半年都不能定义清楚一款新的手机。不仅如此,摩托罗拉每成功上市一款手机,就有更多款的手机半途而废。因此,摩托罗拉手机的设计成本极高。
摩托罗拉至今都看不起三星和诺基亚不重视核心技术、只在外型和功能上搞花架子的做法。摩托罗拉一直认为技术和质量是产品的关键,因此我说它是 IT 业的一个贵族。这当然没有错,但是远不够。今天,至少在手机行业,各个公司产品在硬件技术上差不到哪去,设计一款手机的硬件和当年在中关村攒一台 PC 一样容易。现在的手机里面没有几个芯片,而且核心的只有一个,只要到 TI 去买就可以了。(这也是为什么中国有无数手机品牌的原因。)因此手机的质量都不是唯一决定市场的因素。另一方面,今天所有手机的质量比二十年前都有很大的提高,今天质量差的手机也比二十年前质量好的手机质量更好,也就是说质量差的手机也凑合能用。要想在今天的手机市场上(尤其是在亚洲)站稳脚,功能、外观的设计和质量及技术含量同样重要,商业和市场的开拓更是不可偏废,在这些方面,摩托罗拉和后进入手机市场的公司几乎处在同一个起跑线上。
摩托罗拉早在七、八年前就看到统一手机操作系统平台的重要性。十年前,摩托罗拉和所有手机厂家的每一款手机都有自己独特的硬件和软件,开发工作重复性很高,手机应用程序之间也互不兼容。摩托罗拉试图打造一个通用的操作系统作为它今后手机开发的统一的平台。这个想法本来不错,但是摩托罗拉选错了平台,选中了 Java 。它从太阳公司请来了一位主管 Java 开发的副总裁主管手机通用操作系统的开发,同时摩托罗拉公司雇佣很多 Java 工程师来开发这个平台。但是,Java 有一个无法克服的先天不足,就是速度太慢。2004 年,该平台原型开发出来时,公司发现其速度只有实时速度的几分之一,即使硬件速度按照摩尔定理预测的速度增长,这个操作系统在几年内也无法实现实时。因此摩托罗拉不得不放弃该平台。此后,摩托罗拉又试图开发基于 Linux 的通用平台,但是由于内耗,进展也不顺利。而此时,Andy Robin 的小团队已经在 Linux 手机平台上取得了巨大的突破,这个团队不久便被 Google 收购,成为今天全世界开源的手机平台 Android 的原型。摩托罗拉由于执行力不足,终于失去了统一手机操作系统平台的最佳机会。
摩托罗拉做手机二十年,至今没有一款手机能称得上“Cool“ -酷的。Zander 在这方面也没有苹果公司乔布斯的天赋。苹果公司虽然是最晚进入手机市场的,却做出了今天最好的手机。在开拓市场方面,Zander 能想出的提高市场占有率唯一有效的手段就是打价格战。一时间,这个饮鸩止渴的办法确实提高了摩托罗拉的市场占有率。但是,由于摩托罗拉手机的利润本身就比诺基亚薄,降价空间有限,两年后,当摩托罗拉再无利润可降时,内部的低效率、管理混乱的问题还没来得及解决,摩托罗拉的市场占有率已经开始慢慢地下滑。当了四年 CEO 的 Zander 就不得不离职了。
摩托罗拉没有惠普的运气,它至今还没有找到一位合适的领导人。新的 CEO 至今没有找到拯救摩托罗拉的灵丹妙药。据华尔街日报报道,摩托罗拉居然想出出售最重要的手机部门的馊主意。但是,居然没有公司愿意接手,可见摩托罗拉手机部门内部问题之严重。
摩托罗拉的救星也许在中国。摩托罗拉二十年前在中国的投资就非常成功,其中国公司是摩托罗拉海外最大、营业额最高的分公司,而且是促成摩托罗拉和中国政府以及工业界全面合作的桥梁。据华尔街日报报道,就在摩托罗拉试图出售手机部门最艰难的时候,摩托罗拉和几家中国公司签下了扩大合作的协议,这在生产和市场或许会有转机。但是,这些合作只是远水,是否能解摩托罗拉的近渴还不可知。
结束语
摩托罗拉作为世界无线(移动)通信的先驱和领导者,可以说开创了整个产业。遗憾的是,它只领导了移动通信的第一波浪潮,就被对手赶上并超过。此后,由于技术路线错误,执行力不足,失去了利用技术优势夺回市场的可能性。摩托罗拉曾经跨通信和计算机两大领域之间,甚至很有同时成为计算机和通信业霸主的可能。退一步讲,只要它在计算机中央处理器 CPU ,通信的数字处理器 DSP 或者手机任何一个领域站稳脚,就能顺着计算机革命或者通信革命的大潮前进,立于不败之地。但是,其领导人无力领导这样一个庞大的公司,反而使公司没有专攻的方向,在各条战线上同时失利。
摩托罗拉和 AT&T 衰落的原因正好相反。 AT&T 由于没有一个能控股的股东,没有人觉得公司是自己的,并为它的长远利益考虑,于是董事会的短视和贪婪断送了它。而摩托罗拉相反,一直由卡尔文家族控制,卡尔文三世很想把它办成百年老店,当然不会出现 AT&T 拆了卖的败家子行为,但是他心有余而力不足,无能力迎接信息革命的挑战。因此,摩托罗拉这个贵族式的公司不可避免地没落了。如果当初摩托罗拉的领袖是盖茨或者通用电气的韦尔奇,它也许就不会是今天这个结局了。我在前面多次强调公司领导人对公司发展的重要性,摩托罗拉的兴衰就是一个很好的例子。
君子之泽,五世而斩,对一个贵族家族式的公司也是如此。虽然摩托罗拉衰落了,但是它几十年来造福于我们这个世界。没有它,我们也许要晚用几年手机,没有它和英特尔的竞争,我们的计算机也许没有今天这么快。
发表者:Google(谷歌)研究员 吴军
Google 黑板报 -- Google 中国的博客网志: 浪潮之巅第八章 没落的贵族—摩托罗拉(一)
2008年4月21日星期一
获取信息的有关Windows API
1.窗口信息
MS为我们提供了打开特定桌面和枚举桌面窗口的函数。
hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);
//打开我们默认的Default桌面;
EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc,0);
//枚举打开桌面上的所有窗口,由回调函数实现。
BOOL __stdcall EnumWindowProc(HWND, LPARAM);
//在回调函数中,我们可以获得窗口的标题和相关进程,线程信息;
GetWindowText(hWnd,szWindowText,dwMaxCount);
GetWindowThreadProcessId(hWnd,&dwPID);
2.设备驱动器信息(服务和设备驱动器差不多,在此不做重复)
设备驱动信息由服务控制管理器(SCM)来管理,需要打开服务控制管理器,并枚举所有的设备驱动器。
OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
//以所有权限打开服务控制管理器;
EnumServicesStatus(schManager,dwDeviceType,dwDeviceState,
EnumStatus,dwBufSize,&dwBytesNeeded,
&dwDevicesReturned,&dwResumeHandle))
//枚举所有设备的当前状态;
CloseServiceHandle(schManager);
//记住,在结束访问后要关闭服务句柄;
OpenService(schManager,szDeviceName,SERVICE_ALL_ACCESS);
//打开特定的设备驱动器;
QueryServiceConfig(schDevice,lpDeviceConfig,
1024*8,&dwBytesNeeded);
//查询驱动器的服务配置信息;
QueryServiceStatus(schDevice,&DeviceStatus);
//查询设备驱动器的当前状态;
QueryServiceConfig2(schDevice,SERVICE_CONFIG_DESCRIPTION,
(LPBYTE)lpDeviceDescription,8*1024,&dwBytesNeeded)
//查询设备的描述信息;
StartService(schDevice,0,NULL);
//启动设备;
ControlService(schDevice,SERVICE_CONTROL_STOP,&DeviceStatus);
//停止设备;
DeleteService(schDevice);
//删除设备;
3.磁盘信息
我们希望获得系统所有磁盘的信息,包括软盘,硬盘,光盘等等;
GetLogicalDriveStrings(dwBufferLength,lpBuffer);
//获得逻辑设备的信息;
GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,
dwVolumeNameSize,&dwVolumeSerialNumber,
&dwMaximumComponentLength,&dwFileSystemFlags,
lpFileSystemNameBuffer,dwFileSystemNameSize);
//获得磁盘卷信息,包括卷名称和格式类型;
GetDiskFreeSpaceEx(lpRootPathName,&FreeBytesAvailable,
&TotalNumberOfBytes,&TotalNumberOfFreeBytes);
//探测磁盘的空间使用情况;
4.环境变量
我们可以从注册表中获得环境块的信息:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,当然要使用注册表的函数。
RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegKey,0,KEY_QUERY_VALUE,&hKey);
//打开注册表的键;
RegEnumValue(hKey,dwIndex,EnvironVariable,
&dwVariableLength,NULL,NULL,NULL,NULL);
//查询我们需要的信息值;
GetEnvironmentVariable(EnvironVariable,EnvironString,1024);
//获得环境变量的字符串信息;
5.事件记录信息
OpenEventLog(NULL,szLog);
//打开时间日志记录;
GetOldestEventLogRecord(hEvent,&dwThisRecord);
//获得最新的日志信息,以便继续查找;
ReadEventLog(hEvent,EVENTLOG_FORWARDS_READ │ EVENTLOG_SEQUENTIAL_READ,
0,pEventLogRecord,1024*32,&dwRead,&dwNeeded)
//读去日志信息;
LookupAccountSid(NULL,pSid,szName,&dwName,szDomain,&dwDomain,&SNU);
//获取账户的SID,以便获得账户的用户名称;
GetNumberOfEventLogRecords(hEvent,&dwTotal);
//获得事件日志的总数;
CloseEventLog(hEvent);
//不要忘记关闭事件句柄;
6.网络共享
我们使用第二等级的网络共享搜索;
NetShareEnum(NULL,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&entriesread,&totalentries,&resume);
//列举所有的共享目录及相关信息;
NetApiBufferFree(pBuf);
//释放缓冲区;
NetShareDel(NULL,(char *)lpShareNameW,0);
//删除网络共享目录;
7.网络适配器信息
我们要探测NIC的信息和网络流量;
GetAdaptersInfo(&AdapterInfo,&OutBufLen);
//获取适配器信息;
8.系统性能
获取系统的存储器使用情况;
GetPerformanceInfo(&PerfInfo,sizeof(PERFORMACE_INFORMATION))
//获取系统性能信息;
9.进程/线程/模块信息
在此我们使用工具帮助函数(ToolHelp32)和系统
OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES,&hToken);
//打开进程的令牌,提升权限;
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
//将进程的权限提升到支持调试(Debug);
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//创建进程的快照;
Process32First(hProcessSnap,&ProcessEntry32);
Process32First(hProcessSnap,&ProcessEntry32);
//枚举所有进程;
OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessEntry32.th32ProcessID);
//打开特定进程,以查询进程相关信息;
GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime);
//获取进程的时间信息;
GetProcessMemoryInfo(hProcess,&PMCounter,sizeof(PMCounter));
//获取进程的存储区信息;
GetPriorityClass(hProcess);
//获取进程的优先权;
GetProcessIoCounters(hProcess,&IoCounters);
//获取进程的IO使用情况;
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
//创建模块快照;
Module32First(hModuleSnap, &ModuleEntry32);
Module32Next(hModuleSnap, &ModuleEntry32);
//枚举进程模块信息;
CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
//创建线程快照;
Thread32First(hThreadSnap, &ThreadEntry32);
Thread32Next(hThreadSnap, &ThreadEntry32);
//枚举线程信息;
OpenThread(THREAD_ALL_ACCESS,FALSE,ThreadEntry32.th32ThreadID);
//打开线程,须自己获得此函数地址;
TerminateProcess(hProcess,0);
//终止进程;
SuspendThread(hThread);
//悬挂线程;
ResumeThread(hThread);
//激活线程;
10.关机
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
//调整进程令牌,使其支持关机;
ExitWindowsEx(EWX_LOGOFF,0);
//注销系统;
LockWorkStation();
//锁定系统;
InitiateSystemShutdown(NULL,szMessage,dwTimeout,FALSE,bSig);
//支持到记时和消息显示的关机/重启;
SetSystemPowerState(bSig,FALSE);
//系统休眠/冬眠;
11.用户信息
NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf,
dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
//枚举系统用户信息;
NetUserDel(NULL,lpUserNameW);
//删除指定用户;
12.系统版本信息
GetVersionEx((LPOSVERSIONINFO)&osviex);
//获取操作系统的版本信息;
我们也可以通过注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion)获取相关信息:
GetTickCount();
//获取开机时间;
GetComputerName(szInfo,&dwInfo);
//获取计算机名称;
GetUserName(szInfo,&dwInfo);
//获取计算机用户名;
GetWindowsDirectory(szInfo,MAX_PATH+1);
//获取Windows目录;
GetSystemDirectory(szInfo,MAX_PATH+1);
//获取系统目录;
MS为我们提供了打开特定桌面和枚举桌面窗口的函数。
hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);
//打开我们默认的Default桌面;
EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc,0);
//枚举打开桌面上的所有窗口,由回调函数实现。
BOOL __stdcall EnumWindowProc(HWND, LPARAM);
//在回调函数中,我们可以获得窗口的标题和相关进程,线程信息;
GetWindowText(hWnd,szWindowText,dwMaxCount);
GetWindowThreadProcessId(hWnd,&dwPID);
2.设备驱动器信息(服务和设备驱动器差不多,在此不做重复)
设备驱动信息由服务控制管理器(SCM)来管理,需要打开服务控制管理器,并枚举所有的设备驱动器。
OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
//以所有权限打开服务控制管理器;
EnumServicesStatus(schManager,dwDeviceType,dwDeviceState,
EnumStatus,dwBufSize,&dwBytesNeeded,
&dwDevicesReturned,&dwResumeHandle))
//枚举所有设备的当前状态;
CloseServiceHandle(schManager);
//记住,在结束访问后要关闭服务句柄;
OpenService(schManager,szDeviceName,SERVICE_ALL_ACCESS);
//打开特定的设备驱动器;
QueryServiceConfig(schDevice,lpDeviceConfig,
1024*8,&dwBytesNeeded);
//查询驱动器的服务配置信息;
QueryServiceStatus(schDevice,&DeviceStatus);
//查询设备驱动器的当前状态;
QueryServiceConfig2(schDevice,SERVICE_CONFIG_DESCRIPTION,
(LPBYTE)lpDeviceDescription,8*1024,&dwBytesNeeded)
//查询设备的描述信息;
StartService(schDevice,0,NULL);
//启动设备;
ControlService(schDevice,SERVICE_CONTROL_STOP,&DeviceStatus);
//停止设备;
DeleteService(schDevice);
//删除设备;
3.磁盘信息
我们希望获得系统所有磁盘的信息,包括软盘,硬盘,光盘等等;
GetLogicalDriveStrings(dwBufferLength,lpBuffer);
//获得逻辑设备的信息;
GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,
dwVolumeNameSize,&dwVolumeSerialNumber,
&dwMaximumComponentLength,&dwFileSystemFlags,
lpFileSystemNameBuffer,dwFileSystemNameSize);
//获得磁盘卷信息,包括卷名称和格式类型;
GetDiskFreeSpaceEx(lpRootPathName,&FreeBytesAvailable,
&TotalNumberOfBytes,&TotalNumberOfFreeBytes);
//探测磁盘的空间使用情况;
4.环境变量
我们可以从注册表中获得环境块的信息:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,当然要使用注册表的函数。
RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegKey,0,KEY_QUERY_VALUE,&hKey);
//打开注册表的键;
RegEnumValue(hKey,dwIndex,EnvironVariable,
&dwVariableLength,NULL,NULL,NULL,NULL);
//查询我们需要的信息值;
GetEnvironmentVariable(EnvironVariable,EnvironString,1024);
//获得环境变量的字符串信息;
5.事件记录信息
OpenEventLog(NULL,szLog);
//打开时间日志记录;
GetOldestEventLogRecord(hEvent,&dwThisRecord);
//获得最新的日志信息,以便继续查找;
ReadEventLog(hEvent,EVENTLOG_FORWARDS_READ │ EVENTLOG_SEQUENTIAL_READ,
0,pEventLogRecord,1024*32,&dwRead,&dwNeeded)
//读去日志信息;
LookupAccountSid(NULL,pSid,szName,&dwName,szDomain,&dwDomain,&SNU);
//获取账户的SID,以便获得账户的用户名称;
GetNumberOfEventLogRecords(hEvent,&dwTotal);
//获得事件日志的总数;
CloseEventLog(hEvent);
//不要忘记关闭事件句柄;
6.网络共享
我们使用第二等级的网络共享搜索;
NetShareEnum(NULL,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&entriesread,&totalentries,&resume);
//列举所有的共享目录及相关信息;
NetApiBufferFree(pBuf);
//释放缓冲区;
NetShareDel(NULL,(char *)lpShareNameW,0);
//删除网络共享目录;
7.网络适配器信息
我们要探测NIC的信息和网络流量;
GetAdaptersInfo(&AdapterInfo,&OutBufLen);
//获取适配器信息;
8.系统性能
获取系统的存储器使用情况;
GetPerformanceInfo(&PerfInfo,sizeof(PERFORMACE_INFORMATION))
//获取系统性能信息;
9.进程/线程/模块信息
在此我们使用工具帮助函数(ToolHelp32)和系统
OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES,&hToken);
//打开进程的令牌,提升权限;
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
//将进程的权限提升到支持调试(Debug);
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//创建进程的快照;
Process32First(hProcessSnap,&ProcessEntry32);
Process32First(hProcessSnap,&ProcessEntry32);
//枚举所有进程;
OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessEntry32.th32ProcessID);
//打开特定进程,以查询进程相关信息;
GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime);
//获取进程的时间信息;
GetProcessMemoryInfo(hProcess,&PMCounter,sizeof(PMCounter));
//获取进程的存储区信息;
GetPriorityClass(hProcess);
//获取进程的优先权;
GetProcessIoCounters(hProcess,&IoCounters);
//获取进程的IO使用情况;
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
//创建模块快照;
Module32First(hModuleSnap, &ModuleEntry32);
Module32Next(hModuleSnap, &ModuleEntry32);
//枚举进程模块信息;
CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
//创建线程快照;
Thread32First(hThreadSnap, &ThreadEntry32);
Thread32Next(hThreadSnap, &ThreadEntry32);
//枚举线程信息;
OpenThread(THREAD_ALL_ACCESS,FALSE,ThreadEntry32.th32ThreadID);
//打开线程,须自己获得此函数地址;
TerminateProcess(hProcess,0);
//终止进程;
SuspendThread(hThread);
//悬挂线程;
ResumeThread(hThread);
//激活线程;
10.关机
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
//调整进程令牌,使其支持关机;
ExitWindowsEx(EWX_LOGOFF,0);
//注销系统;
LockWorkStation();
//锁定系统;
InitiateSystemShutdown(NULL,szMessage,dwTimeout,FALSE,bSig);
//支持到记时和消息显示的关机/重启;
SetSystemPowerState(bSig,FALSE);
//系统休眠/冬眠;
11.用户信息
NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf,
dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
//枚举系统用户信息;
NetUserDel(NULL,lpUserNameW);
//删除指定用户;
12.系统版本信息
GetVersionEx((LPOSVERSIONINFO)&osviex);
//获取操作系统的版本信息;
我们也可以通过注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion)获取相关信息:
GetTickCount();
//获取开机时间;
GetComputerName(szInfo,&dwInfo);
//获取计算机名称;
GetUserName(szInfo,&dwInfo);
//获取计算机用户名;
GetWindowsDirectory(szInfo,MAX_PATH+1);
//获取Windows目录;
GetSystemDirectory(szInfo,MAX_PATH+1);
//获取系统目录;
订阅:
博文 (Atom)