星期五, 九月 18, 2009

Jobs vs Gates

从第一次开始接触计算机的时候,我就被美国硅谷的创业的故事所深深地吸引,到后来学了编程,也一直在考虑过自己创业的事情。虽然到现在创业的事情一点影都没有,但让我经常的关注和思考与此相关的一些事情。

美丽的Apple和庞大的微软帝国总是让我产生许多的思考。它们的历史,它们的愿景,它们的区别,它们的关系,它们的创始人的故事,创始人的区别等等。

这两年我关注Apple越来越多,从iPod到MacBook, iMac,虽然到现在还没有拥有一款Apple的产品,但并不妨碍我对它的思考和分析。

晚上洗澡时候,想起朋友前些天被作为“苹果Fans”采访的事情,想起来许多话,就写下来。

思考的时候可以信马由缰,真动手写,却发现语言很难组织——我文字水平还是不足啊:-(

我的两个博客都不能用了(blogspot.com完全访问不了,MSN spaces进到登录就无法访问,难道是因为我写了什么被和谐了?),一时找不到合适的地方写自己的废话:-D

Jobs vs. Gates

Jobs和Gates有什么共同点?商业头脑。
在个人电脑还没有露出自己的光芒的时候,他们就已经预见到了这项民用科技的美好前景,并且按照自己的理想创办着自己的产业——这也是当年IBM最大的战略决策失误。
他们选对了产业,不对,是他们创造了个人电脑产业。

就这一点,我认为他们的成功在于:1.当他们涉及到PC产业的时候,还没有PC产业,因此是他们创造了PC产业,也会得到最大的回报(还有那些投资的资本家们)。2.他们坚定地相信这个还不存在的产业的美好未来和巨大市场价值,并有着自己独特的看法。


Apple vs. Microsoft,
朋友前些天以“苹果Fans”的身份被人采访了,当被问及为什么喜爱苹果时,他说是因为苹果的设计,让人更专注于电脑使用的目的,而不用关注电脑(系统)本身。诚然,苹果的硬件和软件设计都是那么地出色,甚至在国外它都被当作一种“图腾”来崇拜。但是,在国内,苹果的流行也只是仅仅这几年的时间而已。

以前苹果的设计不够吸引人吗?当然不是。


在个人电脑刚刚出现的时候,出现了两家阵营:Apple vs. IBM PC。Apple做的是组装硬件+自制系统,IBM组装硬件+搭配MS DOS;Apple是封闭的硬件体制,不允许别人随意生产Apple兼容的硬件,自己的OS只能运行于自己的计算机上,而IBM PC允许安装任意符合标准的硬件,MS DOS本身允许运行在所有符合IBM PC标准的计算机上。IBM的战略,对于它自己来说是灾难,但对于PC产业来说,这样的战略导致了大量的生产兼容的设备的公司的诞生,竞争,使得硬件成本降低,硬件性能提高,逐步让IBM PC走进了千家万户。市场的扩大,也就使得大量的软件开发人员从事IBM PC平台的开发。

而与此同时,Apple的PC,虽然从硬件到软件都设计得那么地精妙,但价格却高高在上,使得大部分家庭用户使用IBM PC了。

市场越大,就会吸引更多的开发人员做开发,硬件、软件的成本也越低;软件越丰富,价格越低,用户也就越多。多少年来,Apple的用户更多地是集中于图片和影响处理的“艺术”工作者。


不过Apple自然不会只满足于自己的当前份额,必然想要和MS占领的PC市场分一杯羹。Apple最大的问题不是在软硬件的品质,而在于应用的局限。Apple的关键的第一步就是,使得新的Mac系列都采用Intel CPU,并且在新的操作系统上增加了bootcamp功能,使得Mac可以正常安装运行Windows操作系统。这样,使得当许多传统PC用户因为慕名Apple的精美的工业设计而购买了Mac电脑后,如果不能适应Mac OS X,或者Mac OSX的应用不能满足需要的时候,仍然可以使用原来的Windows。当Mac电脑的价格接近传统的价格,而软件又可以兼容使用以前的系统的时候,购买Mac电脑的人自然越来越多,扩大了占有率。对于Apple来说,卖的是捆绑了Mac OSX的Mac,不损失什么;对于MS,买了Mac + MacOSX,还得买我的Windows,也不损失什么(当然,M$的战略肯定也会注意到Apple对自己的地位的威胁)。

但Mac电脑的用户数量的增加,导致更多的软件公司开始重视Mac OSX平台下的软件开发(虽然很多人其实是用Mac跑Windows的)。QQ, Taobao的密码插件, VMware等,都分别有了支持Mac OSX版本,逐渐地,在Mac上跑Windows的用户慢慢发现,以前越来越多的原本只能在Windows上使用的应用,现在也开始可以在MacOSX上使用了,这样,使用MacOSX的时候也开始多起来。

多好的商业策略啊!

平滑地抢占了传统PC的市场——利用了自己的竞争对手的产品,抢占了他们的市场!

所以,当我的朋友说及,他现在可以完全使用Mac OSX而摆脱Windows的时候,并不能完全说是因为Apple的产品的设计的精妙——Apple从来都是那样的“完美”,同时有一部分原因,是现在在Mac OSX上的应用已经在一定的量上可以代替了Windows,使得他的常用工作(QQ, Office, 上网)可以在Mac + MacOSX上使用了。


不过,当IBM PC被联想收购,Thinkpad的品质被联想做烂了的今天(我的x200买了不到一个月,会偶尔电池不能正常断电,就拿客服检修,换了主板……而且这个问题在x200上很常见),我已经想不出有什么比apple还好,哪怕是一样品质的PC产品了。

借用别人的一句话:Jobs:我卖的不是寂寞,是苹果!

星期四, 五月 14, 2009

时隔一年,编写DirectShow Filter时遇到的一些新旧问题的记录

掐指算来,上一次研究DirectShow Filter已经是一年前的事情了。技术这东西,一旦长时间不用,就会立刻生疏起来。因为一个小项目,最近又要重新拾起它来。本以为项目不是很困难,可是真正做起来,却发现遇到了好些个问题,这次记录下来,以备以后查看。

1、版本问题
上次开发主要使用了Visual C++ 6.0。时代变迁,电脑升级,这回改用Visual Studio 2005来生成工程。一开始打算使用Visual Studio 2005自带的DirectShow来做,不再安装其他的SDK。但发现VS2005并不带有编写DirectShow Filter所需要使用的BaseClasses例程,所以还是安装了Platform SDK for Windows Server 2003 R2, 以及一个DirectX SDK march 2009。

2、编译BaseClasses
分别在cmd下执行Microsoft Platform SDK for Windows Server 2003 R2\SetEnv.Cmd和Microsoft Visual Studio 8\VC\vcvarsall.bat设置运行环境变量,直接在BaseClasses下nmake

3、编译自己的Filter
上次刚开始研究编写Filter的时候,链接BaseClasses生成的库也总是出现unresolved external symbol链接错误,让我研究了好久才搞明白。这一次又出现了这样的问题,只知道是哪里的编译参数有错,但找不到具体位置。本来以为是因为wchar_t是否是默认类型的影响,来回设置了好几次也没有效果。最后受搜索结果的启发,想起来可能是因为UNICODE的原因导致的。将自己的Filter工程设置为非UNICODE之后,编译通过。

4、GraphEdit的Connect to Remote Graph功能
无法使用,运行程序之后,无法在GraphEdit中得到程序的Graph。
百思不得其解,搜索得到结果是,新的支持Vista的SDK下使用的组件与旧系统不同,注册propage.dll(在Microsoft SDKs\6.0A\)之后,问题解决。

5、向Graph中增加自己的Filter失败
纯属个人对COM不完全理解所至,应该是个很低级的错误:在编写的.def文件中应该至少包含如下几项:
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
一开始写的时候少了第二、三项,导致在CoCreateInstance的时候产生0x800401f9(Error in DLL)错误。

微软已经开始推广新的Media Foundation了,不知道DirectShow还能用几年:)
搞应用技术的,永远都要跟着标准厂商走,永远要学习……

还好我现在有一个走向低层开发的机会——当然一时还脱离不开Intel Architecture,不过Intel的变动性要比M$少得多了:D

星期日, 五月 10, 2009

关于Windows Vista/7上使用支付宝的数字证书的问题

昨天买了笔记本,有点好奇,安装了M$新出的Windows 7 RC版。除了有一堆软件不兼容无法安装,支付宝数字证书导入的兼容问题也让我着实头疼。

网上早已有了一堆解决方法,我这里只是想记录自己手动解决这个问题的方案——因为我担心从网上下载的相关文件会被hack过:)


先从技术的角度来解释,为什么不能导入数字证书(报错:80020009)。导入数字证书需要使用microsoft certificate enrollment插件(即xenroll.dll/cab),这一特性支持Windows2000(包括)之后,Vista(不包括)之前的操作系统,服务器使用Windows Server 2003。这个插件已经应用了很多年,Microsoft认为此插件已经不再足以提供必要的安全特性,因此新一代操作系统Vista/Windows Server 2008上使用了新的数字证书特性:CertEnroll。并且,原来的特性Xenroll在这两个操作系统上被禁用。Windows Server 2008则会根据客户端的类型自动选择其支持的certificate enrollment Web pages是使用Xenroll还是CertEnroll。


因此,为了在Vista/7系统上导入支付宝的数字证书,首先我们要允许Xenroll,且将Xenroll.dll注册为系统服务。网上有“一键解决”之类的解决方案,下面是我的手动解决方案(在我看来更安全一:)


一:修改注册表(网上复制来的,可以自己做.reg文件,也可以自己用regedit修改。(1.其实我不知道注册xenroll.dll是不是必须要经过这一步,你可以先看第二步,如果注册失败,再修改这里的注册表。2.当你注册完第二步的xenroll.dll之后,就可以恢复xenroll禁用状态了,至少我禁用之后仍然可以导入数字证书):
Microsoft Certificate Enrollment CAB禁用.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{127698e4-e730-4e5c-a2b1-21490a70c8a1}]
"Compatibility Flags"=dword:00000400
"IeaDo"=-
Microsoft Certificate Enrollment CAB开锁 .reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{127698e4-e730-4e5c-a2b1-21490a70c8a1}]
"Compatibility Flags"=dword:00000000
"IeaDo"=dword:00000001
二:注册xenroll.dll
1.首先找一个XP系统,搜索到xenroll.dll(或者直接在Windows\system32\找到),复制到Vista/7系统的Windows\system32下。
2.新建一个快捷方式,命令输入cmd,建完之后,右击,选“以管理员身份运行”。




3.执行regsvr32 C:\Windows\System32\xenroll.dll(请根据你的Windows安装目录修改路径)。如果提示注册成功,你就可以导入支付宝的数字证书了。

星期四, 四月 16, 2009

科技便利和信息安全

上周突然发现我用了多年的sohu邮箱无法登录了。起初以为是自己忘记了密码(因为我的密码通常都相当长,有的长达17位,而且还要穿插标点符号:),尝试多次后我就确认不是我忘记了。随后我查看了“注册用户”里的密码要求:密码长度为6-16位,仅限字母、数字以及-和_,字母区分大小写。

我以前的密码却包含着*@这样的标点符号,估计是搜狐更新了邮件系统,对密码验证部分做了限制。我的这个邮箱用了许多年,对我来说相当重要,我的msn, 大量网站的注册信息都是使用这个邮箱的……损失惨重。而我注册时间特别地早,那时候还没有填写详细的密码保护信息(填了也忘记了),现在后悔莫及。

数字时代,记忆密码真是一个巨大的脑力劳动。许多人使用的密码都相对简单,大多是数字(电话号码或者生日)+单词(用户名或者别的什么单词)。不过像我这个玩电脑有些年头,对网络安全存在严重担心的人,我自己设置的密码可能会让许多人感到恐怖。为了加强密码强度,我设置了三套密码。对,是三套!每一套密码的基本密码都是一个没有任何意义的一个字母一个数字一个字母一个数字(完全是在自己的大脑里“随机”生成的),按照需要的密码强度,三套密码的长度各不一样,除第一套只有单一一个密码外(通常用于论坛注册等),另两套,会根据不同的情况,将其中的一些数字用其他的标点置换。这样,每套密码的基本密码又会变换出两三种不同的密码。

可惜,我是什么都预测到了,却没有能预测到密码不被服务商接受。

想想我们要记忆多少密码吧:网络的密码(qq, msn, 邮箱*N, 论坛,招聘网站,博客,淘宝,支付宝,网络交易密码——其他的都可以是同一个密码,总不能网络交易密码也是简单密码吧?),手机服务密码,银行卡密码* N,银行卡查询密码*N,等等……

银行密码忘记了肯定会是个大麻烦,就是qq, msn,邮箱密码忘记了找不回了,对每个人的日常联系也会带来巨大的困扰——现在多少人办公是离不开qq,msn这类通讯工具的!


“何必要这么多的密码啊?简单一就好了!”

我之所以设置了这么些复杂的密码,只源于我对信息安全的恐惧——而我又无法离开网络获得大量信息。

科技的发展,其实给现代人带来了许多潜在的困扰;新技术的便利性,也让人忽略了它所引起的不稳定的因素。

信息的电子化方便了我们获得信息资源,也让我们自己的信息方便被别人获得。越是便利的科技,越是让我们失去去信息的安全感。电子信息时代,你的信息可能在任一时间,从你的眼皮下面被人窃取走——或许你在浏览这个博客的时候,你的什么密码或者什么文档,就被某个木马程序偷走了。

当然对大多数人来说没有什么重要的文档要保护,但是原来网络流传的“夫妻俩房事时,被黑客启动的自家的摄像头录制下来”的事情应该对大家的刺激更大些。

电子信息的使用也方便了国家对民众的控制。

我喜欢一部叫《国家公敌(Enemy of the State)》的电影。国家可以使用大量的先进科技对国家内所有的人的信息进行监控。如果国家的权力机关想要得到你的信息,那么你的上网、电话、银行账号一切的一切,都会立刻被监控起来——他们可以得到你的一切。原来传说,中美光缆的美国那一头,会经过一个超级计算机的处理,所有包含有敏感词汇的信息,会立刻被超级计算机存储,并被送交分析。

中国这方面并没有什么相关的报道,我们无从了解,我们使用的电话、手机打电话时,是否被录音?我们发的短信会被他们的数据库保存多久?

说到了手机,我又想起一个话题。手机在中国发展是相当地快,因为它真的很方便,使用的资费也在降低,而“中国制造”的产品价格又是那样的低廉(现在电影里都这么说:没有任何国家任何地区,可以像中国一样高效、廉价地复制导弹系统)。

不过这么好用的东西,对我们的各人隐私也是极其不安全的。不说电话窃听和短信泄漏这样常规性的安全问题,它给我们带来的最不安全的因素是:它可以告诉别人我们在哪里。

大家现在都知道GPS了。不过GPS功能只有高档的手机才带,或者带有蓝牙的手机可以外部连接。而现在有几家公司在做这样的产品:仅使用手机就可以获得你的位置(不过没有GPS精确)。

它是什么原理呢?(下面是技术部分,可略过 :D)

我们的手机,Cellular Phone——蜂窝电话。我们的手机获得信号是需要和基站通信的,而我们周边的基站像蜂窝一样布置,而我们则处在蜂窝的一个格子里,同时与几个基站通信。在硬件实现层上,手机与每一个基站通信的时间是被记录并可获得的,那么根据无线电波的速度和这个时间,我们可以获得当前手机的大体位置(因为有时间误差)

如果感兴趣,可以去搜索AT指令,或者AT Command Set For Nokia GSM And WCDMA Products v1.2

我们可以在文档里看到:+CREG?可以获得location area code,以及Cell ID。通过+CRLP?可以获得一个acknowlegement timer T1和re-sequencing period T4。还其他的指令可以获得相关的一些参数,以前研究过几个小时,现在都忘记了:D

(技术部分结束)

通过这些信息,我们就可以使用自己的手机定位。

反之,移动运营商也可以通过基站来给手机(用户)定位。我有个朋友就曾经给我讲,他们原来做过一个汽车用GPS跟踪产品,结果正好在要使用的时候出了故障,无法使用了,他们只好寻求运营商来协助,通过手机信号,很精确地定位了汽车的位置。


许多人都有窥探别人隐私的阴暗心理(所以有了人肉搜索?),而许多人都不愿意让自己的信息满世界到处宣扬(除了炒作明星和某些想出名的人),所以有了矛和盾——信息侵犯和信息保护。而电子时代,这种矛盾更加尖锐,一旦信息保护做得不好,信息的泄漏将十分地容易,而且传播得相当迅速。真是好事不出门,坏事传千里