2010-02-23

Google buzz的意义

  感觉google推buzz有些太激进了.

  诚然.social network是比互联网更高级的网络.
  对于google来说,抢先寻找人与人之间的page rank比维护现有的网页与网页的page rank更有意义.
  
  如果google能发掘并且量化衡量social network的page rank,至少对于google的广告和搜索来说,帮助更大.
  
  就广告来说,这其实是twitter也正在做的事情.
  通过让广告在social network里流动,比让其在单纯的互联网里流动,所能传播的范围更广.
  原因在于长尾性和social network本身的复杂性.

  social network是一个糅合了互联网的一个复杂系统.
  一个人,他集齐了许多互联网关系网络.
  他的一举一动都可以通过各种各样的关系网络扩散出去.

  也就是说,在单纯的互联网模式里,无论如何地长尾,一个广告都只能传播一次.
  而在social network里,广告的传播可反反复复,一直衰减,直到几乎整个网络的人都接受过了之后,才开始失效.
  也就是说,某种意义上,基于social network的广告营销,理论上,一个广告,可以让互联网上的所有人都接收到.
  甚至,如果存在一个连接跨互联网的social network存在的话,它可以把影响扩散到世界上的每一个角落.

  而对于搜索,social network的pagerank有助于google把搜索变得更准确和个性化.

  一旦google成功分析social network,并建立与之相对应的pagerank,那么当你搜索的时候,其实已经不单是你一个人在搜索了.
  它可能是google分析过你的社会关系,分析过你的背景,分析过你的职业兴趣等等之后,猜测出你对信息的敏感点,从而有侧重地从这些敏感点建立搜索页.

  比如说,google通过social network发现你是一个java程序员,那么也许在你搜索诸如"电脑崩溃"等关键字的时候它就会更偏向于推荐那些偏技术方面的结果.
  而如果是非it人员,则可能会偏向于一些操作性更强一些的结果.

  甚至,即时你没有明确地让googel知道你是IT人员,但是你的social network里IT人员的比率很高,那么google有可能会对技术方面的结果赋予更高的权重.
  有或者,在搜索的时候,会综合你social network里各种关系对同类关键字的搜索结果的选取,做一个更优化的搜索页面,这也不是不可能的.
  
  也就是说,当googel了解你的social network之后,了解你的信息是如何在social network流动的时候,它就有更多的一句去分析很预测你的下一个信息流向.
  无论是对于广告还是搜索,更准确的预测就意味着这更高的投放精度.

  回头看看buzz.
  
  twitter的网络是google一直以来想要得到的一个social network的分析样本.
  对于google来说,所有美好的未来都基于那个全新page rank.
  但这套新系统需要有一个对信息流向习惯的研究场所.

  而twitter的去中心化和关系的从零开始的自发发展,对于google来说都是绝佳的标本.

  可惜的是google一直得不到.

  虽然推出了实时搜索,能够窥探到这种social information的流动方式.
  但google需要的不单是过程和结果,它需要的更多的是信息传播的方式,以及人与人之间的关系.
  单纯的实时搜索很难提供足够方便和详尽的数据,供google建立social network的page rank.

  建立一个类twitter的buzz,就是googel自己建立了一个social network的实验样本.
  这个网络的运行状态,一举一动,google随时都可以拿过来分析研究.
  而不像实时搜索,只能被动地抓取数据.

  而且,buzz的一个好处在于,google可以得到它想要的任何形式的数据.
  虽然,即使没有buzz,google依然可以借助抓取twitter来分析.
  
  所以,从这个侧面说,twitter还不能成为google推buzz的原因.

  google之所以要独立一个buzz,关键在于,它要分析的不是单一形式的social network,不是twitter风格的信息流,而是更广意义上的,潜藏在互联网里的人与人之间的,人与信息之间的交流.
  
  buzz连接了reader,连接了blogger,连接了twitter.

  从信息的产生,接收,传播,扩散,各个阶段各种风格,buzz都能够介入.
 
  如果说,实时搜索是google对social network的第一阶段的研究.
  那么buzz应该是第二阶段.
 
  第一阶段是特定风格的social network.
  第二阶段是更普遍意义的social network.

  所以,buzz不必成为一款非常成功的产品.
  它只需要足够流行就,信息足够繁杂,流动足够真实就可以了.
  对google,它需要的只是一个新的研究样本.  

  只是有些担心google.
  是否野心太大了点,动作太急了点.
  毕竟,在android和chrome的互联网战略还未成型的时候,又在搞这么超前的东西.

  也或许,这才是google成功的原因吧.
  永远走在世界的前面.

  也许有一天醒来,会发现,其实google就是martix.
  生活的世界其实只是zion.  

2010-02-08

专制与社会主义

  社会主义市场经济.这是一个很微妙的词.

  社会主义经济制度基于这么一种假设:
  生产力高度发达,从而使得分配制度演化为按劳分配.
  而更高一阶的共产主义,则是按需分配的.

  也就是说,在这么一种社会经济形态中,不会再存在竞争.
  因为生产力高度发达,物质资料充足,从而使得竞争变得毫无意义.

  竞争的存在,是依靠稀缺资源,或者资源间的不平衡.
  一旦资源足够充裕,或者资源的分配已经不受资源本身的影响了.
  那么竞争将不复存在.

  也就是说,进入社会主义或者共产主义的一个明显的结果就是竞争这条机制的不复存在.
  物质资料的分配将通过另外一种模式展开.
  即按劳,或者按需分配.

  所以,从某些理论上看,社会主义和共产主义确实是一个理想的或者说终极的社会形态.

  但问题的关键在于,它存在么?
  或者说能自然发展起来吗?

  世界经济的发展始于竞争.

  无论是在资源极度稀缺的原始社会,还是物质资料极大丰富的资本主义时代,竞争都无处不在.

  为生存而竞争优势资源.
  为资本的扩张而互相竞争.

  用生物方面的一个词来形容就是,弱肉强食.
  
  因为在这几个社会阶段,生产力还不是"高度发展"的.
  也就是说,这时候的生产力还不足以支付更高级的分配方式.
  于是,只能是通过系统内部的自我竞争来抢占资源.

  那么这种竞争将一直持续下去么?

  自然竞争的一个结果是各个个体在相互竞争中取得一种微妙的平衡.
  如同自然界存在的生物链一般,没有特别优势的资本能够打破这种竞态平衡.

  但始终没有一个足够强势的资本,能够统御整个系统的时候,自然竞争的结果应当是发展成为直接或间接的合作.
  
  由于每个资本都有自己的稀缺资源需求,同时也有着自己的优势资源(不然这个资本就会被其他资本兼并).
  因此,在长期的竞争期间里,就有可能跟其他非直接竞争的资源结成联盟,互为合作.

  如果在这个结盟时期依然没有一个突出的资本出现,统一各国的话,那么最后的结果是社会处于一个动态平衡状态.
  由于没有哪一个资本能够拥有所有资源,因此,也就无法产生所谓的按劳分配制度.
  因为每个资本自身都存在着不受自己控制的资源分配方式.
  
  也就是说,当资本的发展最终是走向一个动态平衡状态的时候,讨论社会主义是没有意义的.
  就如同讨论永动机一样.
  缺乏实际的理论基础.

  那么,如果在资本的互相竞争过程中,有一个优势资本能够打败其他资本,从而统一生产力呢?

  这在理论上也是有可能的.
  
  资本主义发展出的垄断,在某种上就有可能变为这种优势资本.
  因为它已经掌握了社会经济系统中,某个生产切面的所有资料.

  当这些垄断资本不断的通过互相兼并和吞食达成资本的大融合的时候,一种优越的强势资本便诞生了.
  这个新诞生的优势资本将能够"自给自足"而不依赖于其他资本的存在.

  也就是说,当这种资本存在并发展下来之后,将慢慢地实现生产力发展的自我满足.
  当它极端发展,达到一个物质丰富的极端水平的时候,便有可能在这个资本环境内实现生产资料的按劳分配.
  
  因为对于一个高度发达的自给自足经济系统来说,竞争是没有意义的.
  尤其是在产出远远大于消耗的时候.

  当生产力达到能够支撑按劳分配存在的时候,社会主义就有了立足之地.
  也才能够发展起来.

  因此.从某种程度上说,社会主义如果能够自然发展起来的话,那么应该是通过垄断这一经济形式逐步演化而来的.
  也就是说,社会主义应当是在资本高度垄断集中的时候,才有可能萌芽和发展起来的.

  从现有的经济发展阶段看,能够使资本高度垄断集中.
  一是计划经济体制.
  二是垄断资本主义.

  两者的共同点在于,资本都有一个高度统一的意志形态.
  不然,将无法操纵如此庞大的资本力量.

  于是,当社会主义经济制度建立之后,这种统一意识,至少在一段时间之内,不会别抹去.
  也就是说,对于社会主义制度,必将存在一定时期的专制期.
  这是由于资本的内在的发展统一性的需求.

2010-02-06

Nexus one OTA之路.

  某天为了刷Nexus one 的OTA,折腾了许久.
  
  本来如果没去刷root的话,这会是件很简单容易的事情.
  但无奈有签名机制在.
  root过的boot.img签名对不上,于是总是卡在签名验证失败那个环节.
 
  尝试把脚本里的签名验证去掉,却发现脚本本身的签名不正确了.
  无奈.

  google了一下,似乎有人放出来用来签名的东西,于是download之.
  打个包,签名一下,reboot,recovery.
  依然失败.

  翻了翻开发文档,惆怅地发现这套机制是基于RSA的.
  查了查网上零碎的资料之后,也终于明白为什么这个OTA包会带sign这个字眼来.

  因为RSA的私钥似乎是硬编码进去的.
  也就是说,你想自己打包,然后妄图通过验证.
  那应该是不可能的.

  为什么说应该,因为其实我也没认真看它如何验证签名的.
  
  因为即使不能绕过签名,也能够通过手工的方法把OTAupdate过去.
  毕竟已经对bootloader解锁了,可以用fastboot写rom.

  问题在于,出签名错误的东西叫boot.img.
  
  可以把所有东西都flash进去,但是结果可能是boot不起来了.
  因为boot.img没刷.
  谁知道不同的boot.img会造成什么影响.
  
  如果到时连fastboot都不work了,那Nexus one就成纸片了.
  
  称呼砖头或许不确切.

  于是,先考虑下有没把握搞定boot.img.
  
  OTA下面有个boot.img.p.
  
  从名字上看应该就是boot.img了.
  即使不是,也应该相差不远.

  但是它真的是boot.img么?
  
  不知道.

  于是看源代码去.

  刷机的过程是从recovery进去了,于是就找了recovery来看.
  也于是,终于有打开了千年未启动过的visual studio.

  简单Ctrl+c,Ctrl+v完事.
  毕竟只是读,不用考虑编译什么的问题.
  error和warning都不用管,只管找到main就好了.

  浏览一遍,明显看到install_package和maybe_install_firmware_update这两个函数.
  
  在install_package里,主要做了RSA的签名验证,以及读取update.zip.

  签名的东西就不去管它了.
  一个安全机制方面的东西,无伤大雅.

  看看handle_update_package.
  里面短短几行.
  
  说几行其实还说说多了.
  出去容错处理之类的,有内容的也就try_update_binary这个函数的调用.

  在这个函数里,首先会把zip文件里的 META-INF/com/google/android/update-binary复制到/tmp/update-binary下面.
  这些东西都是硬编码进去的.
  也就是说,其实如果你要自己打包更新的话,也必须有这个update-binary,并且放在同样的目录结构里.

  然后会pipe和fork一下.
  
  重点关注下子线程里的execv.
  因为此时原线程所做的只不过是接子线程的一些手尾罢了.

  execv执行的就是update-binary.
  到这里,线索似乎又断了.

  因为你不做到updater-binary做了什么.
  尤其是,你不做到update-binary到底是android的标准呢,还是依赖于厂商各自的实现.

  幸好,下面有个目录叫updater.
  又是直接main.

  终于看到updater-script的影子了.
  
  一番读文件和parse,regist之后,简化为一个邪恶的Evaluate.
  
  有时候设计模式很好,因为减少了很多重复代码.
  有时候设计模式也不是很好,因为看代码变成了找代码.

  于是只能向当年本科论文读mysql时一样,大部分靠直觉和函数名确定了.
   
  有时候,良好的命名规范还是有点用处的.

  看脚本里,除了check签名,剩下的基本就是apply_check了.
  于是,直接锁定ApplyPatchFn.

  十几二十行下来,有意义的也就大概是applypatch.
  一个extern生命又让人无奈了.

  所幸这还是可以找到的.

  一眼扫过,又见到RSA字眼,惆怅.
  跳过继续.

  结果一番对文件的处理封装之后,终于到了确定patch类型的时候.
  
  由于开始关注的是boot.img,所以很自然地直接跳到处理MTD那段.
  
  此处会检验一下patch文件,也就是哪个image.img.p文件的文件头.
  打开看了下,那个otp的文件头是IMGDIFF.
  所以patch的方式是ApplyImagePatch.

  jump into看一下.
  依然会做一个类似文件类型检测的东西,读一下头部,确定后面内容的意义.
  又打开文件看了下,十六进制里,明显是CHUNK_NORMAL.
  
  这就省事了,因为处理它的只有短短几行.
  实际上是ApplyBSDiffPatch和ApplyBSDiffPatchMem.
  到这里,原理上说,已经能够把boot.img.p变成boot.img了.
  
  但转念一想,发觉,只是不可能的.

  因为自从刷了root之后,boot.img就已经不一样了.
  也因此才导致SHA RSA等的签名错误,不能OTP升级.
  所以,即便在最后找到了patch的实现,但是到底还是依赖于原来的boot.img.

  无奈,只好放弃.
  
  本还在考虑时候要看下如何编译个boot.img的.
  于是找nexus one的源码.
 
  而恰好在XDA上有人放出了自称是N1原版镜像.
   
  当然,这个所谓"原版"还得打个问号.
  事实上,HTC似乎并没有放出来.

  鉴于XDA的权威性,也就当是原版了.
  下回来fastboot flash boot boot.img.
  刷回原来的boot.img.
 
  再按照在场的otp升级流程.
  看到verfiy过了之后的那一段,终于释然了.
  
  看来确实是原版的img.
  刷完之后看下信息,依然是android 2.1 update1.

  试了下,浏览器,map,gallary等都支持多点触摸了.
  还有就是设置里多了个关于底座的设置.
  不过这都是没多大意义的.
  毕竟没有底座.

  至于google声称的修复3G通话的问题,因为还是2G网络,也无从验证.

  不过至少,通过这个OTA,多少了解了下Android的一点东西. 

聊聊卡布里尼

最近看了部片叫卡布里尼,算是可能这段时间来比较有意思的一部电影. 故事也不算复杂,就是一个意大利修女去美国传教,建立慈善性质医院的故事. 某种程度上来说,也很一般的西方普世价值主旋律. 但是如果换一套叙事手法,比如共产国际的社会主义革命建立无产阶级广厦千万间的角度来看的话,也不是...