【IT时代周刊讯】(记者/杜 舟)诺基亚似乎恋上了伦敦。继2月11日它与微软在此结盟后,10月27日,诺基亚世界大会也在此召开。
当天,伦敦的上空飘着细雨,阴森湿冷,一如诺基亚人近来晦暗的心情。在被压抑太久后,两款WP7手机——Lumia800和Lumia710,终于在千呼万唤中,与世人打了一个照面。
这是诺基亚CEO艾洛普上任一年多以来,第一次交出真正有分量的产品。但这一天来得太晚,以致不少诺基亚粉丝因望穿秋水而移情别恋。
此次世界大会,全球共有超过1000家媒体与合作伙伴前来参加。奢华宏大的会场布景背后,聚焦世人目光的新产品却遭到不少人泼冷水。诺基亚旗舰手机Lumia800,虽在外观上摆脱了Symbian手机的窠臼,但它采用单芯片架构,硬件上与iPhone4S以及旗舰Android手机相比并不占优势,软件上更是相差甚远。
若WP7手机不能助诺基亚扳回一局,纵使它跳下艾洛普所言的“燃烧的平台”,也只会落入冰冷的海水,生死茫然。
与诺基亚不容乐观的处境相似,RIM、摩托罗拉、索爱等传统手机巨头也受尽煎熬。虽然它们都在奋力自救,但都缺乏颠覆性的创新,至今还身陷黑暗的市场通道中,看不到复兴的曙光。
第一章 守旧者的墓志铭
2008年11月27日,感恩节当晚,美国纽约长岛的沃尔玛超市内人潮汹涌,人们都为廉价商品蜂拥而来,以致发生了严重的踩踏惨案。而在3个月前,为了成为iPhone3G尝鲜者,很多人提前一周在纽约第五大道苹果旗舰店门外安营扎寨。那正是金融危机趋烈之时,有媒体把这两个场景放在一起描述,对那些守旧的手机巨头发出警告,但那时它们都嗤之以鼻。
微创新定律失效
11月18日,境外媒体报道,诺基亚经过与工会的拉锯式谈判后,确定裁员方案——截至明年年底,诺基亚裁员规模在1400人的基础上,将再增加300人。
从1865年至2011年,在长达146年的历史长河中,创新曾深入诺基亚的机体中。它经历了从造纸、橡胶到电缆再到手机的业务变革,每次大跨越都被世人视为经典案例。
但最近几年,诺基亚拼尽了老命,却再也追赶不上时代的步伐。回想当年,翻盖手机风靡时,诺基亚无动于衷,给了竞争对手崛起的机会;超薄手机引领风潮时,诺基亚把倔强当个性,错失良机;当苹果推出触摸屏手机时,诺基亚却认为这是过时的技术,如梦方醒后才发现已身陷囹圄。
今天的诺基亚,在外观设计上远不如苹果、三星,在软件上不及苹果、谷歌,留给人们的记忆仅是“抗摔”两个字。
“诺基亚根本不懂创新。”美国投资银行SanfordC.Bernstein分析师皮埃尔·法拉古毫不留情地说。法拉古认为,诺基亚称霸手机行业只是偶然。上世纪90年代中后期,诺基亚把握住了手机从模拟向数字转换的机会,才得以一举将摩托罗拉挤下宝座。但在2007年之后,当诺基亚碰到颠覆性创新的谷歌和苹果,其创新乏力的致命缺陷就全面地暴露了。
乔布斯取消了手机实体键盘,只需用手指轻轻一滑,就可以进入到美轮美奂的操作界面,这一创新随后被HTC、三星等多数手机厂商借鉴。iPhone手机中丰富的应用,更是极大地调动了用户的参与热情,提高了用户黏性。而诺基亚引以为傲的E系列,却被指抄袭了黑莓的全键盘创意,被乔布斯当成反面教材。2007年初,乔布斯在介绍iPhone时,曾对诺基亚的全键盘狠狠奚落了一番。
业内人士认为,与苹果和谷歌的革命性创新相比,诺基亚的创新属于渐进式创新(即微创新),这种微创新有一个较长的演进过程。但是,今天的技术变化日新月异,创新的频率越来越快,并表现出不可预测性,因此,这种微创新就显得那么无力,以致诺基亚手足无措,根本无法适应新的变化。
日前公布的两款WP7手机离市场预期还有不少差距。这两款手机只能算是艾洛普赴任后一场真正意义上的热身赛,能做到攻防平衡就很不错了,远远称不上反击。事实上,在世界大会前,诺基亚的营销团队就精心设了一个局,将两款WP7手机的信息故意泄露出来,意在测试一下市场兴奋度,但舆论反应却很平淡。
有分析人士指出,WP7的生态依然相当脆弱,截至10月22日,上架一年后,其应用数仅为3.5万个。而诺基亚WP7旗舰手机零售价为420欧元(折合人民币3716元),价格不菲。对诺基亚而言,如果这次不能华丽转身,留给它的时间将十分有限。目前,诺基亚智能手机市场份额已跌至全球第三,手机出货量老大的宝座也已摇摇欲坠,极有可能被三星夺走。
忽略性的自满
在“9·11”事件中,全美的通信系统近乎瘫痪,但当时的副总统切尼手中的黑莓手机,仍可接收来自现场的灾难信息,这让黑莓名声大震。
黑莓被誉为手机中的贵族,其邮件推送技术凭借及时、低耗、安全的优势,在政企市场有着不可替代的地位,美国总统奥巴马当年手持黑莓手机走马上任,令黑莓在全球大出风头。
不过,这个没落的贵族现在已是墙倒众人推。今年,关于黑莓的负面消息铺天盖地,以致其股价滑落到7年来的最低点。缺乏创新、思想保守、应用程序不足,是外界给它最多的评价。
美国佛罗里达州的米尔沙普本是黑莓的忠实粉丝,使用黑莓手机已长达6年。现在,他却正在考虑更换其他品牌的智能手机。促成米尔沙普作出这一决定的,是一次黑莓宕机事件。当天,他的黑莓手机既无法上网,也不能收发电子邮件,导致他错过了一笔大订单。
而在今年4月,当BBC记者琼斯在一次新闻发布会上问及RIM所面临的安全问题时,现场气氛突然凝固了。良久,RIM联合创始人迈克·拉扎里迪斯略带怒气地回应:“你的问题不公正。”随后,这位业界奇才竟然失态地中断了谈话。
RIM拥有传奇般的品牌,也有不输于苹果的忠实粉丝。它还通过几次出色的收购,获取了足以和任何对手抗争的本钱,但却未能将其转换成有竞争力的产品。RIM老旧的操作平台,被业界讥笑为“古董”,其基于新操作平台BBX的手机,预计要明年才能推出。动作过于迟缓,让RIM眼睁睁地看着苹果与谷歌在智能手机市场蚕食自己的地盘。
在黑莓的巅峰时期2009年,业界就指出,邮件推送技术在移动互联时代已不再是优势,但RIM固执地认为自己有独立的用户群。美国《PC》杂志分析师萨沙·塞根认为,RIM最大的问题在于,它已好几年没有推出任何创新型的产品,而且在软件上无法与苹果、谷歌相抗衡。
“我感觉RIM已失去了远见,产品老旧,也没有一个3年以上的长远规划,完全看不清未来的趋势。”一位今年从RIM离职的高管无奈地表示,RIM很自恋,总是拿几年前的东西来说事,比如安全、续航能力、网络性能等,但它却忽视了最重要的一件事——用户需求正在发生巨大的改变。
RIM犯下的错,不仅在于它忽略了移动互联网的发展,更在于它忽略了消费市场的新动向。2005年,在一次公司简报会上,拉扎里迪斯一再强调:“黑莓手机永远不会有音乐播放器和摄像头,因为我们面对的客户主要是政府和企业。”今天,RIM虽然在被动地跟随别人添加功能,但无论是性价比还是用户体验,都已经无法与竞争对手相抗衡。
而诺基亚今天的处境,也是它自掘的一个坑。苹果的颠覆性创新,早就被业界看在眼里,但诺基亚反应迟钝。2007年,时任诺基亚CEO的康培凯十分不屑地说:“触摸屏不过是一种过时的技术,根本不会引领潮流。”他还断言,iPhone的销量占全球手机份额的比例达不到1%,难以对诺基亚构成威胁。
“而在触控技术上,诺基亚比苹果早了整整3年,享受这场盛宴的却是竞争对手。”诺基亚内部员工透露,“早在2004年,诺基亚就已开发出先进的触控技术,但高管们认为这一市场还很小,担心售价过高购买的人不多,于是放弃了触摸屏手机的开发。”
在应用商店上,诺基亚也抢先于苹果。2007年,诺基亚在全球率先推出移动互联网品牌Ovi,比苹果AppStore早了整整一年。当艾洛普今年5月16日宣布终结Ovi品牌时,里面仅有5万个应用程序,而同期苹果商店的应用程序已是诺基亚的10倍。
当外界指责是傲慢害了它时,诺基亚却委婉地说:“这是一种忽略性的自满。”
游戏对象继承自CCSprite是很多游戏示例的写法,很多,但不是全部,毕竟谁也不想自找麻烦,去引用CCSprite让它负责游戏对象的输出但游戏对象此时往往不派生自CCNode(有人要泪奔!)了,那末继承自NSObject的游戏对象是要闹哪样?我想来想去,初步的答案是思路清晰,解耦(接口分离原则)和多态的方便。准备跟老师讨论这个问题,答案待定,不允许评论,以下只是个人想法,纯属个人观点.
引用CCsprite并继承自NSObject的游戏对象往往需要自己实现CCStandardTouchDelegate或者CCTargetedTouchDelegate。此外必须从CCTouchDispather注册和移除delegate、还要使用CCScheduler(这是一个没有说明文档的类!!好吧,英雄不问出处)。
1但是一个有着自己游戏数据逻辑的游戏对象是一个模型,它怎么能是一个精灵对象呢,不符合MVC原则。
2关于解耦:请问继承的弱点是什么?为什么C++的多继承被谨慎地使用?因为继承会让一个类变得过于繁杂,庞大。面对一个又能唱歌又能写论文又能编程又会美工又会技术又会销售又会修理机械的对象,我想不是这个对象逆天了,而是修改和使用这个类的人要升天了。所以要解耦,解耦让概念清晰,类之间分工明确,即便要实现协议和引用,那都是算对象通信,合情合理。
3多态的使用,有人要发问了,继承CCSprite一样可以多态啊,没错,但是,同一个对象明明我的游戏数据大部分没有改,只是带上了装备不一样,它弄了一个分身跟自己同屏出现,然后为了让别的玩家区分自己和分身,自己换了一顶帽子。这时你的程序在内存居然要把对象复制一遍,然后去实现多态。但这个对象仅仅是换了一顶帽子,这科学么?
如果这个游戏对象有多重影分身(难道我火影中毒?),那你的程序可能要崩溃了,因为你的对象是继承自CCSprite类的,要做区分,只能是重新copy,但是如果是引用的情况,则不是,我用CCSpriteNode和纹理图册把自己各个分身都画一下,对象数据只有一份,只是给自己画几十个精灵图像而已!这个差别随着这个对象的属性数据的庞大而愈加明显!!!!!
在.Net中,RSA加密的一般用法如下:
byte[] RSAEncrypt(String key_xml, byte[] data) { RSACryptoServiceProvider rcp = new RSACryptoServiceProvider(); rcp.FromXmlString(key_xml); return rcp2.Encrypt(data, false); // false 表示PKCS#1 v1.5 Padding }
上述方法的参数中,key_xml是XML格式的RSA密钥,data是需要加密的数据。但是上述代码实际上只是实现了使用公钥加密。即使所提供的参数key_xml是一个私钥,由于RSA的私钥中是包含公钥的,因此在调用RSACryptoServiceProvider.Encrypt()时也只会使用公钥来进行加密。换言之,在.Net所提供的API中,不包含使用私钥进行加密的功能。
对于RSA来说,其公钥和私钥在一定程度来说其实是等价的,使用公钥加密可以使用私钥解密,使用私钥加密则可以使用公钥解密。虽然大部分的RSA应用模式是使用公钥加密私钥解密,但是在某些特殊的场景中,需要使用私钥加密公钥解密(笔者就遇到了这种需求)。在遇到这种需求时,.Net所提供的RSA实现就无法满足需求,需要自己实现RSA加密算法。
好在RSA的加密算法其实比较简单,就是大整数的幂运算和模运算,使用BigInteger类可以比较简单的实现。当然在某些版本的.Net Framework中不包含BigInteger类的实现,这就需要自己实现这个类,这就相对比较复杂了。不过幸好网上比较容易找到该类的开源实现。
下面的实例代码使用BigInteger类实现同时支持RSA公钥和私钥加密的算法,符合PKCS#1(RFC2313)的定义,并与Java的实现兼容。
byte[] RSAEncrypt(String key_xml, byte[] data) { RSACryptoServiceProvider rcp = new RSACryptoServiceProvider(); rcp.FromXmlString(key_xml); RSAParameters pm = mRcp.ExportParameters(!mRcp.PublicOnly); BigInteger mod = new BigInteger(pm.Modulus); BigInteger ep = new BigInteger(pm.D != null ? pm.D : pm.Exponent); int k_len = pm.Modulus.Length; int pad_len = k_len - data.Length - 3; byte[] em = new byte[k_len]; Stream stream = new MemoryStream(em); stream.WriteByte(0x00); stream.WriteByte(0x01); // 为了与Java兼容,BlockType设为1 for (int i = 0; i < pad_len; i++) stream.WriteByte(0xff); // 为了与Java兼容,填充字节设为0xff stream.WriteByte(0x00); stream.Write(data, 0, data.Length); BigInteger m = new BigInteger(em); BigInteger c = m.modPow(ep, mod); return c.getBytes(); }