为什么在平板领域 Android 仍然还是一个失败者

苹果最新的iPad刚刚上市几天时间,销售量就已突破300万,继续演绎着传奇故事。同时让平板市场的分野越来越明显。iPad已基本消灭Android,而微软的平板电脑还迟迟未上市。这场赛跑注定了苹果将继续大幅领先

2月底,Google的Andy Rubin曾宣称市场上的Android平板已达1200万, 而苹果在4天时间就已售出这个数字的1/4。苹果每三个月就能卖出这么多的iPad设备。在数量上最接近iPad竞争对手地位的Kindle,在去年整个 假日期间的销售量大概也只有300万台。那么,这样的情况将如何继续演绎呢?为何苹果3年前开启的iPad会如此领先其竞争对手?也许下面几点说明了些问 题。

  • 相比于其它平板来说,iPad确实很棒

iPad有最好的操作系统,有更多更好的供用户选择的APP,有大量有利可图的APP开发者继续打造这个良好的生态系统……。同样,这些优势对于iPhone来说也是一样。而Android一直处于追赶状态。

  • 时代已经完全不同

苹果可以向任何人出售iPad,而无需担心类似Verizon和AT&T这样的运营商对客户的限制。

  • 就性价比来说,iPad比其它任何竞争对手的产品都要便宜

在同样的价格下,没有任何其它产品可以提供iPad这么好的性能和体验,而体验很多时候无法用金钱来衡量。

  • 相比于完全公开的Android,封闭的iOS也许更好

记 住,曾经大多数人都认为苹果太过封闭、太过严格,但是在拥有近60万APP时,就没有多少人认为苹果是完全封闭的了。所谓开放、封闭都是相对的。在一个自 然生态系统中,那些发展良好的生态系统都是封闭的,一旦某个关节无法紧紧相扣,整个链条都会受到不同程度的破坏。与此同时,生态系统需要新鲜血液,需要打 破某些东西,需要创造某些东西。而APP开发这一环,我想它就是苹果封闭系统里的开放血液,在不破坏平衡的同时,不断给这个系统制造新鲜血液。而IDC最 近公布的数据似乎也证实了这点,在Android与iOS两个系统中,APP开发者更对后者感兴趣。也许在打造良性生态系统方面,苹果的做法确实值得参考。

因此我们似乎可以说,在目前这种情况下,在iPad面前Android就算不是一个失败者,但是要走的路还很长很长。

也谈编程改革

如果我告诉大家,这篇文章出自一个只有20岁的小伙,我想很多人都会感到吃惊。至少我是吃了一惊,因为这篇文章涉及到主题听起来是 很有深度的,我本人在20岁时几乎想都不会想这些事情,更别说研究了。但又过了这么多年,不知国内的青年们有没有追赶上西方的步伐,也能出现几个这样看起 来很有编程天分的人?

我最近看到了《编程改革 》这篇文章,里面的内容讨论到了我们的编程中存在的一个最根本的问题。我同意作者的观点,但我感觉很多的评论并没有理解他说的问题,所以,我打算用另外一种方式来说明一下。

我从事编程已经很久,主要是因为我痴迷于解决难题。我非常喜欢研究编程语言,一部分原因是作为一个程序员,我本身是被它们包围,同时也是因为语言是让我们成为人类的一个重要因素。

我享受编程这种职业,我喜欢这种能够从无到有创造出神奇东西的能力,但同时也对我们每天需要处理的这些事情感到失望。下面就是原因:

面向过程 vs 面向结果的编程

链式(Concatenative),函数式,面向对象的,逻辑式——不管你选择何种编程模式,他们全都有相同的问题:它们要求你去描述如何做,而不是做什么。在你能叫得出名字的任何一种语言里,程序是一个对能计算出你想要的东西的处理过程的描述,而不是一个对你想要的东西的描述。诚然,一些语言会比另外一些语言更具有陈述性,但这跟“陈述式 vs 命令式”的问题并不相关——能够陈述式的表达一个过程的语言仍然是面向过程的,而不是面向结果的。

这才是症结所在。作为程序员,我们用代码解决问题。我们应该能够用代码来表达我们想要的结果,而不是想要达到这种结果需要的过程。

作者提出的是一种“约束满足(constraint satisfaction)”式的编程方式。给出一系列的约束条件,你就能够从中推导出一种能够满足它们的算法。当然,我们必然的会担心编译器推导出的这种算法的正确性和各种性能指标;是否本来可以做到Θ(n log n)级别的,它编译器却给出了Θ(n!)?这是一个很合理的担心,但它只是跟你的描述是否严谨有关。

你也知道,对于一个特定的算法,我们可以通过很多种不同的但却等效的约束集合来定义。从中进行优选,我们有信心相信,编译器能够推导出我们想要的结果。我们的工作应该变成把需求用有效的约束正确的表达出来,让编译器去满足这些约束。

我知道这听起来很枯燥,我最初也是这种神奇的编程方式的怀疑者。但想一想:任何值得一提的程序其实都是这样实现的,只是它们是以一种效率低的容易出错的手工方式。一个程序员拿到一些需求,先整理它们,然后辛苦的把它们转换成一种合适的处理过程。我们可以省掉这其中的一个步骤。

一个现实的例子

假设你在编写一个游戏。在你的待完成任务清单上的第一个要实现的事情是:通过方向键,让一个游戏角色可以在屏幕上四处移动。在任何一种语言里,你不得不构造出一大堆不相干的基础构件来实现这个操作:

  • 把一个连续的物理动作转变成一系列相互分离的图像
  • 处理帧频,帧渲染,帧冲突等问题
  • 管理各种活物体和死物体的状态和资源使用问题

所有的这些折腾实际上跟我们想要的东西是没有关系的。

很多时候,这些工作已经由某个程序库提供完成了,但这表明一个事实:需要有人去做这些麻烦事。相比较,功能应对式编程很适合做这种事情。你可以准确的表达出你的意思:

  • 这个游戏角色的特征包括:
    • 某位置的加速度( ax , ay )
    • 某位置的速度( vx , vy )
    • 位置( x, y )
    • 物体的大小( w, h )
  • 当方向键按下时,加速度改变:
    • 左:( ‒1, 0 )
    • 右:( +1, 0 )
    • 上:( 0, ‒1 )
    • 下:( 0, +1 )
  • 随着时间的相互作用:
    • 加速后的速度
    • 运动后的位置
  • 在( px , py )处像素点的颜色是:
    • 如果( px , py )在物体的( x, y, x + w, y + h )范围内:
      • 显示物体( pxx, pyy )处的颜色
    • 否则:
      • 显示背景色

这是一个完备的,完全陈述式的,完全面向结果的对一个程序的描述。这些描述都是跟你目前要实现的目标任务是直接相关的,每个描述都是一种约束,在一个RRP(这是一个简单的约束求解程序,根据实时状态推导解决方案)系统里,你可以按意愿添加或去除这种约束。

何去何从?

Prolog语言就是一个以约束为基础的编程方式的样本,而Haskell语言里的FRP库表现的更好,但这些跟我们能够做到的比起来更像玩具。

没有任何理由去说我们不能实现一种更好、更面向结果的语言,或者把目前存在的面向过程的语言变得更像面向结果,为这种编程模式赋予更大的能力。参考一下Swym这篇文章,里面提到的关键字etc就能让你实现类似的事情:

List.byPairs: [[.1st, .2nd], [.3rd, .4th], etc];byPairs[1..10] == [[1,2],[3,4],[5,6],[7,8],[9,10]];

当你提供给它一些不同的参数,它能做出更智能的事情:

[1,2,3].byPairs == [[1,2]];[1,2].byPairs == [[1,2]];[1].byPairs == [];

这真是让人兴奋,但事情并非到此为止,我们可以把它做的更好。我们实现更多的类似etceach 这样的”魔法“操作符,可以让一种命令式的语言看起来更像面向结果的语言。

有一段时间,我使用一个叫做Prog的语言工作。你可以把它按照普通的命令式的语言进行编程。但它附带有一些特殊的语言特征。这些神奇的语言特征是 通过“radioactive types”实现的,它们是一种中间态的语言行为特征,只能在解释器分析期运行,过了此阶段,它们就蜕化成普通的语法。举个例子,对一个枚举数据结构进行 各种操作,可以这样写:

which (1..10) > 5 == (6, 7, 8, 9, 10);each (1..5) ** 2 == (1, 4, 9, 16, 25);each (1..3) * each (1..3) == ((1,2,3), (2,4,6), (3,6,9));

在读了那篇文章和 之后的评论后,我激起了再次使用Prog语言的想法——如果有时间的话。我希望能看到更多的关于这方面的文章出现。目前开发的一个具有相似理念的项目消耗 了我大量的精力,那是一个能让非程序员用户制作出专业质量的交互式媒体的工具。如果你不知道如何编程,你在创建游戏或其他媒体应用时会受到阻碍。所有的这 些帮助创造性的软件基本上可以归为两类:

  • 功能可怜的有限
  • 复杂的没法用

所以,利用研究人们能如何更好的解决问题,我开发了这样一个工具,能让那些心里有想法、但没能力把它变成现实的人解决他们的问题。目前为止,我们还有继续努力。如果你是一个程序员,受到这篇的启发,想参与做一些事情,请联系我[email protected],我会告诉你如何参与进来。

[本文英文原文链接:Yep, Programming Is Borked ]

Mozilla 将拥抱 H.264

Mozilla上周开始内部讨论是否支持H.264视频编解码器,现在Mozilla高层公开表达了对私有编解码器的支持

Mozilla对H.264的讨论一开始主要集中在Boot2Gecko移动平台和Android版Firefox,但随着讨论的深入,桌面版本也 纳入了考虑范围。问题的争议之处是私有专利技术与Mozilla的open Web使命相矛盾。Mozilla主席Mitchell Baker和CEO Brendan Eich承认, 移动的成功迫使他们放弃WebM成为HTML5流视频标准的追求,而VP8从未在桌面对H.264构成威胁。80%的HTML5视频内容是H.264编 码,H.264是移动竞争所必不可少的。Eich称,Google未能在Android上推动WebM排斥H.264,Mozilla无法等到 Google成功的那一天。

Windows 8 企业程序概念曝光

看来Windows 8将不只是面向普通消费者了,现在微软想向人们展示Windows 8如何在企业之中完美运行的了。本周,微软将在在休斯敦举行它的Convergence大会,届时将会展示其专门为企业级用户市场设计的Microsoft Dynamics ERP服务的一些新功能。

dynamicsprojectapprovalmarch19

ZDNet.com今天发布了一些关于Windows 8企业软件概念的截图,而这些软件也将会在Convergence大会进行展示。你可以看看上面的这张截图,其显示的是一个预审程序是如何在一台运行Metro用户界面的Windows 8触控屏平板设备上运行的。

dynamicsstartpagemarhc19

screenshot_gp12businessanalyzer_page

微软自己也曝光了大量展示其自身开发的Dynamics GP 2013软件工具的截图,并且似乎这款软件发布在即。从截图上看这款软件绝对是使用了为Windows 8用户准备的Metro风格的用户界面。遗憾的是到现在为止微软还是没有透露出Microsoft Dynamics工具的发布日期。

苹果要求摩托罗拉移动提供Android开发信息败诉

美国巡回法官理查德·波斯纳(Richard A. Posner)日前否决了苹果针对摩托罗拉移动和谷歌的一项指控。苹果在指控中,要求摩托罗拉移动披露谷歌研发Android手机操作系统的信息以及与谷歌并购交易相关的情况。波斯纳法官认为,苹果的指控模糊不清,而且过于宽泛,而且摩托罗拉移动的反对辩论非常有说服力。

上个月,谷歌获得了美国和欧盟的批准,即批准谷歌以125亿美元的价格收购摩托罗拉移动公司。目前,摩托罗拉移动已经开始制作搭载Android系统的手机。通过这一并购交易,谷歌将获得了约1.7万项专利。据近日的相关文件显示,谷歌收购摩托罗拉移动公司的交易可能将于今年上半年完成。

苹果与摩托罗拉移动最近一直在美欧等市场展开专利之战。今年3月5日,波斯纳法官曾责令摩托罗拉移动遵照苹果的诉求,即披露其与谷歌并购交易和Android研发数据相关的信息。3月16日,苹果向法院指控摩托罗拉移动未执行这一裁决。但摩托罗拉移动的律师阿曼达·威利亚姆逊(Amanda Williamson)称,如果苹果要想获得这些数据,其必须缩小指控诉求,将具体指控限定在具体文件上。