科技向前冲


  • 首页

  • 随笔

  • 创业

  • 产品

  • 海外

  • 创新

  • 技术

  • 归档

  • 标签

移动应用跨平台框架江湖将现终结者?速来参拜来自Facebook的React Native

发表于 2015-02-08 | 分类于 Hacker News




# React Native使用初探
February 06 2015


Facebook让所有React Conf的参与人员都可以初尝React Native的源码—一个编写原生移动应用的方法。该方法运用了React.js的所有强大的功能来将其应用到原生应用。你可以通过使用其内嵌的基本元素来编写基于Javascript的组件,这些组件都是拥有着iOS和Android控件的支撑的。

首先,我知道Facebook现在还没有完全将其开源是个很挫的事情啦,但他们现在正在将该项目往开源的方向推进了。他们现在正在把跟Facebook环境相关的代码给移除掉并且正在准备建立一套接受开发人员对该开源项目进行贡献和参与的流程。我认为他们在努力往开源这个方向推进是个很好的事情,说明他们真的很在意React社区了。相信这个项目很快就能完全开源了。

其实本人并不认为开源的步骤慢点是个根本性的错误了。如果你认为是的话我将很乐意跟你进行探讨,但请允许我把该讨论放在另外一个议题里面吧。

因为如果你被该讨论打断思路的话,在这里你可能会错过我们今天对如何通过React Native编写原生移动应用的潮流已经发生改变的讨论。这种改变最大的地方就是它使用起来更像是在编写一个网路应用。

本人已经算是开发iOS应用多年的老手了,故此我有着很多原生应用开发的经验。在跟React Native勾搭上后,我只能用以下的表情来表达我的心情:



相信我们都听过各种由Javascript驱动的跨平台原生应用开发框架,比如Titanium, PhoneGap, 以及其他各种各样的允许不同层面与原生环境进行转化的项目。所有这些框架看起来都是比较挫的:无论你现在是想把一个网络应用包装在一个WebView里面,或者是想要硬套HTML&CSS这套很难用来构建移动应用的技术。对于后者,你几乎无时无刻不在直面原生对象,这在性能方面来说注定就是一个失败的尝试。React Native就不一样,它的布局方面其实是运行在一个独立的线程里面的,所以UI主线程就能如往常一样的尽可能的空闲出来进行界面动画等的呈现处理(它同时也提供了flexbox 来简化布局,这可并不是所有框架都能提供出来的)。

这里你仅仅需要浅尝就能领略到React Native所隐藏的无限潜力。它工作起来会让你感觉你是在做网络开发一样的舒畅。而事实上你确是在开发着一个真实的原生应用,事实上是根本分不出来这里面的区别的。在UI层面上,这事实上是根本没有区别的,使用到的都是像正常一样眩眼滑动的原生的UIViews。

这其实都是软件工程的功劳。同时这就完全进一步的证明了一个事实就是React.js是构建一个跨平台应用的正确方式。我可以使用该方式来像编写一个网络应用一样来编写一个原生应用。我们完全可以从今开始把DOM作为一个实现的细节,就好像UIViews一样。

我不否认我是很喜欢网络编程的,但如果我们一步步的埋头慢慢的认真检查每一个错误,我们就很容易把一些重大的问题跟忽略掉。网络编程的方式来编写应用从根本上说就是个很古怪的事情:HTML加上CSS所造成的混乱会对各种框架制造路障而不是让它们变得更好。也许React Native会最终是一个指引你回到正确的道路上面来的正确方式。我期盼着看到它是如何让网络编程方式变成一个更好的移动应用编程方式。我们不要把它想象成一个和网络编程背道而驰的东西,而要把它想象成是一个从网络编程进入到另外一个方向的原型。

到了这里你是否已经感觉眼花缭乱无所适从了?没事,我将会通过示例告诉你React Native是如何工作的!当然你可以在这里和这里通过视频学到更多的这方面的知识了。

React Native使用的是iOS上的JavaScriptCore来运行Javascript(Android和其他平台将会在将来进行支持)。重要的一点是它将Javascript放在一个独立的线程上运行(其他框架如Titanium也是这样做的)。你使用Javascript来编写一个控件跟使用React.js其实没有太大的区别,除了你应该使用的是如View和Text而非div和a之外。你将会获得使用React生成UI组件的所有的优点(保守的说,这是非常牛X的!!!)。请谨记,JavaScript不仅仅是一门语言,它还是一个平台。存在着大量的优秀的”JS转换”工具供你使用。

React Native将你在另外一个线程通过Javascript编写的UI以最小数量的数据发送给UI主线程来把它桥接转换成原生的组件。比如把一个View转换成UIView。最赞的地方是你不需要担心你的UI主线程的更新来现实最新的改动;你只要声明你将需要UI基于某种状态进行桥接转换就行了,React使用的是一个独特的算法把最小量的必须的改动发送到该桥接来反映UI的变化(天地会珠海分舵注:如果你清楚增量存储的概念的话将会很容易理解这句话)。

编写原生UI从未如此的简单,况且这将不会有如播放动画卡顿等诸如此类的问题的出现,因为JS是在一个独立于UI主线程的线程中运行的。动画播放将会比吃了泻药还要顺畅!

基于React Native的一个OpenGL应用

我的第一个React Native应用其实并不是一个传统的应用:我编写的是一个波前对象模型演示应用。我个人一直对游戏开发比较感兴趣,但是我对编写原生UI却很反感。React Native刚好给了我一个使用编写网页UI的方式来编写原生UI的方案。

我保证你将会看到大量的使用原生导航和动画之类的传统应用演示。我认为通过非常简便的把React Native置身于OpenGL控件上面来完成相应的工作是一项很酷的事情。

去把React Native集成在你的项目里面其实是个很简单的事情,你只需要在你的控制器种创建一个RCTRootView,然后告诉它你的JS是摆在哪里,并把它添加到窗口上面就完成了。在我的尝试中,我是首先创建了一个OpenGL的控件,然后把RCTRootView作为一个子控件添加到该控件上面。该集成的过程是完全一个无痛人流的过程,哦,不好意思,是一个完全毫无痛苦的过程。(天地会珠海分舵注:近来被电视和路边广告轰炸的晕了,到处都是无痛人流之类的广告,看到无痛两个字就立刻神经反射的联系到无痛人流来了)

你可以按下Cmd+R来立刻刷新你的UI来现实你修改的任何更新。这里仅仅RCTRootView会进行更新,所以我可以很容易的对ui进行修改然后刷新ui来获得最近的修改,而并不需要重新加载OpenGL层。

以下是一个控件示例,一个用来列出可用文件列表并在其中一项被点击后加载一个网格的ObjList控件。这里将会用到一个和其他任何原生应用一样的原生的用来仅仅在控件内部进行滚动显示的ListView控件,但在这里进行使用确实一个极其简单的事情。

var ObjList = React.createClass({
  // a few methods clipped....

  selectModel: function(file) {
    controller.loadMesh(file);
  },

  renderRow: function(file) {
    return View(
      null,
      TouchableHighlight(
        { onPress: () => this.selectModel(file),
          underlayColor: 'rgba(0, 0, 0, .6)' },
        Text({ style: { height: 30, color: 'white' }}, file)
      )
    );
  },

  render: function() {
    var source = this.getDataSource(this.props.files);

    return ListView({
      style: { flex: 1 },
      renderRow: this.renderRow,
      dataSource: source
    });
  }
});

在我的App控件里面我有一个handlSearch方法来相应文本输入的改变。这里我对控件的状态做一些改变,一边让应用和ObjList控件接受到最新的状态改变来将最新的文件列表给显示出来。

handleSearch: function(e) {
  var text = e.nativeEvent.text;
  var files = allFiles.filter(x => x.indexOf(text.toLowerCase()) !== -1);
  this.setState({ files: files });
}

请注意ObjList控件里面的controller.loadMesh()这个调用。这其实是一个Objective-C的一个方法,这里我已经把它做了一个导出标识了,这样桥接就会找到它并使它在JS中变成可用。跟桥接进行协同工作其实是一个非常简单的事情,且将会变得越来越简单。以下就是loadMesh的实现代码:

- (void)loadMesh:(NSString *)path {
    RCT_EXPORT();

    dispatch_async(dispatch_get_main_queue(), ^{
        teapotNode_.material.diffuse = [self randomColor];
        teapotNode_.wavefrontMeshA = [REMeshCache meshNamed:path];
        [self reset];
    });
}

RCT_EXPORT()将该方法标识成使一个导出方法(事实上在其他地方实现的对该类进行实例化的工作会有点多)。这些方法将会在一个独立的线程中被调用,但是我这里需要的使在主线程对该mesh进行加载(因为这将会把数据加载到OpenGL当中),所以这里我网队列中排队了一块运行在主线程中的代码。

以下的视频将会给大家一个更完整的演示:https://www.youtube.com/embed/OPFf53fdUmQ

在声明的过程中来构建我们的UI控件并对简单的改变状态所产生的事件进行相应的能力是非常的强大的,React.js一定证明了这一点。到此为止,我们突然间就到了需要对原生应用进行同样处理的时候了。”一次学习,多平台编写“,犹如React开发人员所倡导的。同时请查看:Facebook来教我我们如何编写网站。

--------------完------------------

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

了却布斯身后事,Youtube终弃Flash。新年爆竹辞魔鬼,奈何新任把命催。

发表于 2015-02-07 | 分类于 Hacker News

谷歌上周终于宣布它旗下的世界最大的视频分享网站Youtube最终默认会使用的HTML5作为播放技术,也就是说把Adbobe的Flash给抛弃了(天地会珠海分舵注:2010年,乔布斯曾撰文声讨Flash,认为Flash存在封闭、独断、存在技术缺陷还不兼容触摸设备等众多缺点,“移动时代是低功耗设备、触摸屏界面和开放网络标准的时代,Flash已经落伍。”他认为HTML5这样的标准“才会在移动设备和个人电脑上同样取得成功”。YouTube团队从2010年就开始尝试进行HTML5的变革,早期主要难点是缺少ABR(自适应码率流媒体如MPEG-DASH,HLS,ADS和Smooth Streaming等)技术的支持。)。这个绝对是一个值得庆贺的决定:毕竟Adobe的flash是一个被该公司专有的一项技术,正因为它的专有而导致了成千上万的人来对它以及它所保护的内容进行攻击。且flash的对象只能在闭源的软件中访问才能保障安全,如果在每个人都能窥探的开源代码中进行访问就会变得非常脆弱而容易受到攻击。

在一年前,如果youtube这个世界最大的视频网站抛弃了flash将会被认为是互联网自由的一个迎头重击。而在今天,它却仅仅会成为茶余饭后有关商业浏览器三巨头—苹果,微软和谷歌—Netflix,BBC和W3C联盟如何把互联网自由抛到下水道中一冲了事的枯涩的回忆。

2013年春,W3C背弃了它长期扮演的开放网络守护者的角色,在最高层面把该支持抛之于EME(加密媒体扩展)之脑后,其尝试将在浏览器中和Flash乃一丘之貉的新的枷锁进行标准化。上面提到的三巨头披露说它们曾经参加了和Netflix的一个密室秘密会议来在它们的浏览器上创建一个后门来在用户播放视频流的时候把用户锁在用户自己的计算机之外,在此之后,W3C立刻采取了上面的措施。W3C承认在建立一套浏览器的标准来把用户当作对立面的不值得信任的敌人来进行对待,并采取措施来召回本应下放给用户的权利(比如下载视频。天地会珠海分舵住:大家应该知道Flash播放视频时不能右键保存视频的吧?)

五月中旬,Mozilla基金会宣布加入设计对用户不信任的浏览器的项目当中,承认它对如果不和Netflix一起玩的话将害怕会被其拒之门外的担忧,也就是它深信如果没有了Netflix它们将会流失商业浏览器世界里的用户。

W3C和Mozilla两个组织都举行过类似的“实用主义“的会议来讨论采取该有争议和分歧的措施 — 一个既让它们自己的员工也让它们的支持者失望的措施。根本上说,它们的最终争论的是:”我们是好人,但是如果我们不做伤天害理的事情的话我们就可以脱身事外,而这种事无论我们是否跟那班家伙一块玩的话都很难避免发生的。用户将会发现互联网将因为我们的战斗而让其变成一个美好的圣地,即使我们现在把用户给出卖了。“换个说法就是:“将欲存之,必先毁之。“

让我们返回到对Youtube的讨论当中,那么现在你可以不需要使用任何Adobe专属软件(flash)来访问youtube的任何视频了,只要你的浏览器是支持W3C版本的”专有软件”。如果你使用的是FireFox,你也可以不是用flash就能访问Youtube的的视频,除了有些情况下,你还是不得不使用W3C标准的加密媒体扩展(EME) —这还是需要你使用专属软件,还是来自Adobe的!

这个正是:

了却布斯身后事,Youtube终弃Flash。

新年爆竹辞魔鬼,奈何新任把命催。

横批:一丘之貉!

———–<完>—————

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

海外优秀资讯抢先看12:世界上最薄的硅材料将为您带来引爆眼球的更快,更小,更高效的计算机芯片

发表于 2015-02-06 | 分类于 Hacker News


### One-atom-thin ‘silicene’ silicon transistors invented

### 原子大小数量级的硅烯晶体管宣告诞生
World’s thinnest silicon material promises dramatically faster, smaller, more efficient computer chips
世界上最薄的硅材料将有望带来引人注目的更快,更小,更高效的计算机芯片
February 5, 2015
2015年2月5号




The first transistors made of silicene, the world’s thinnest silicon material, have been developed by researchers at The University of Texas at Austin’s Cockrell School of Engineering. The new material may allow for building dramatically faster, smaller, energy-efficient computer chips.

德克萨斯大学奥斯汀分校科克雷尔工程学院开发出了世界上第一款运用世界上最薄的硅材料–硅烯制造的晶体管。这种新型材料有望给人类带来引人注目的更快,更小,更高效的计算机芯片

Made of a one-atom-thick layer of silicon atoms, silicene has outstanding electrical properties but has until now proved difficult to produce and work with.

通过一个硅原子厚度生成的硅烯拥有过着无与伦比的电气特性,但却时至如今一直被证明是最难制造和驯服的。

Deji Akinwande, an assistant professor in the Cockrell School’s Department of Electrical and Computer Engineering, and his team, including lead researcher Li Tao, solved one of the major challenges surrounding silicene by demonstrating that it can be made into transistors.
科克雷尔工程学院助理教授Deji Akinwande以及他的团队,包括其首席研究员Li Tao,通过解决了围绕硅烯的一个主要问题来说明它是可以被用来生产晶体管的。


Thinnest semiconductor material

最薄的半导体材料

These first-of-their-kind devices rely on the thinnest of any semiconductor material, a long-standing dream of the chip industry. Their work was published this week in the journal Nature Nanotechnology.
这些依赖最薄的半导体材料的同类首创设备(天地会珠海分舵注:指的应该就是上面说的硅烯制造的晶体管)一直都是芯片届长期存在的梦想。Deji Akinwande以及他的团队的作品本周已经在《纳米技术》杂志中进行过报道。


Until a few years ago, human-made silicene was a purely theoretical material. Looking at carbon-based graphene, another atom-thick material with promise for chip development, researchers speculated that silicon atoms could be structured in a broadly similar way.

直到几年前,非自然生成的硅烯还仅仅是一个纯理论存在的物质材料。通过比较另外一个给芯片研发带来希望的原子级别厚度的碳基材料 – 石墨,研究人员猜测硅原子应该可以用一个相似的但更广阔的方式来进行组织起来而形成新的物质。

“Silicene, with its close chemical affinity to silicon, suggests an opportunity in the roadmap of the semiconductor industry,” Akinwande said. “The major breakthrough here is the efficient low-temperature manufacturing and fabrication of silicene devices for the first time.”

“硅烯,通过其与硅接近的化学特性,暗示着一个半导体产业蓝图的新机会,“Akinwande说道。”这里主要的突破就是首创性的高效的低发热量硅烯设备的生产工艺和装配工艺。“

Despite its promise for commercial adaptation, silicene has proved extremely difficult to create and work with because of its complexity and instability when exposed to air.

尽管其有望用于商业用途,但是硅烯已证明是非常难于生成和驯服的,皆因它是相当的复杂的,且一旦曝露于空气中将会变得极其的不稳定。

How to fabricate silicene

如何制造硅烯

To work around these issues, Akinwande teamed with Alessandro Molle at the Institute for Microelectronics and Microsystems in Agrate Brianza, Italy, to develop a new method for fabricating the silicene that reduces its exposure to air.
要去解决这些难题,Akinwande和在 Agrate Brianza的微电子和微系统研究所的Alessandro Molle团队联手开发了一个新的方法来在减少在空气曝光的情况下对硅烯进行制造。

To start, the researchers let a hot vapor of silicon atoms condense onto a crystalline block of silver in a vacuum chamber. They then formed a silicene sheet on a thin layer of silver and added a nanometer-thick layer of alumina on top. Because of these protective layers, the team could safely peel it of its base and transfer it silver-side-up to an oxidized-silicon substrate. They were then able to gently scrape some of the silver to leave behind two islands of metal as electrodes, with a strip of silicene between them.

开始时,研究人员在真空室中运用高温气体的硅原子凝聚成一个银状晶体块。然后就会形成一个硅烯稀薄单层并覆盖上一个纳米层厚度的氧化铝在上面。因为有了这些保护层,团队就可以安全的刨去其表层并将该上层的银状晶体表面层转换成氧化硅。最后他们就可以小心的挂掉一部分银状晶体来留出两个独立的位置并在它们之间去掉硅烯的接触来作为电极使用了。

In the near-term, Akinwande will continue to investigate new structures and methods for creating silicene, which may lead to low-energy, high-speed digital computer chips.

近期内,Akinwande 会继续研究新的结构和方法来生产硅烯,以便给我们带来低功耗高速度的计算机芯片。

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

海外优秀资讯抢先看11:Android的Inbox如何做到70%代码能跨Android/iOS/Web 平台的秘密武器

发表于 2015-02-05 | 分类于 Hacker News

众所周知当今写一个应用你需要有大的访问量的话必然要跨多个平台,移动端你起码需要覆盖android和ios平台,而你又不能忽略PC端的用户。如果你不考虑原生应用带来的性能和UI适配度,你当然可以基于浏览器核心来使用流行的Javascript+HTML5+Phonegap等封装成一个跨平台应用。但是Google的Gmail团队是个有追求的团队,它当然不会牺牲各个平台的性能和原生应用的UI适配度来做出compromise了。

那么如果给每个平台开发原生应用的话,对于google自身的安卓来说,当然需要用到的开发语言技术是Java了,而对于iOS来说,如果Swift没有被口水淹死而得以应用之前当然是Objective C了,对于Web,那毫无疑问使用技术将会是JavaScript/CSS/HTML5。

如果Inbox是微软做的话,我相信他们的开发团队毫无疑问会选择他们家的Xamarin基于C#,.net和Mono的跨平台开发框架来完成这方面的工作以达到一劳永逸的效果了。而对于Google来说,它当然不屑于用微软的框架,他们拥有自己的一套工具来实现跨平台。

Google的做法是使用使用一些工具实现了70%的代码跨平台复用。Inbox在各个平台使用的是相同的后台代码逻辑,但前端的UI因平台相关性会有所不同。Google 有自己的一套工具让他们只需要在安卓上使用Java开发一套后台代码逻辑,然后就可以将它们转换成对应的Objective-c和Javascript来适应iOS和Web浏览器:

  • JavaScript的转换由Google Web Toolkit SDK来完成
  • Objective-C的转换由J2ObjC来胜任
    J2ObjC其实早在2013年就已经出来的了,但是Google真正很大程度在自己的项目中派上用场却是在Inbox这个项目上面。期解决了Google跨平台移动开发的这个严重问题,同时也适配了高傲的google就算在开发跨平台应用依然是安卓先行的理念。
    至于Inbox项目具体是如何在跨平台中达到70%的代码共享的详细细节,请大家查看以下链接,本文只是希望能做到一个抛砖引玉的作用,或者让你作为一杯早茶或者下午茶来在空闲时小抿一口而已。http://arstechnica.com/information-technology/2014/11/how-google-inbox-shares-70-of-its-code-across-android-ios-and-the-web/

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

海外优秀资讯抢先看10:世界著名软件缺陷导致的灾难性案例详解之阿丽安娜火箭之殇

发表于 2015-02-04 | 分类于 Hacker News

Explosion of the Ariane 5

阿丽安娜5运载火箭爆炸之谜

On June 4, 1996 an unmanned Ariane 5 rocket launched by the European Space Agency exploded just forty seconds after lift-off (918K QuickTime movie). The rocket was on its first voyage, after a decade of development costing $7 billion. The destroyed rocket and its cargo were valued at $500 million. A board of inquiry investigated the causes of the explosion and in two weeks issued a report. It turned out that the cause of the failure was a software error in the inertial reference system. Specifically a 64 bit floating point number relating to the horizontal velocity of the rocket with respect to the platform was converted to a 16 bit signed integer. The number was larger than 32,768, the largest integer storeable in a 16 bit signed integer, and thus the conversion failed.

1996年6月4号,一枚尚未命名的阿丽安娜5火箭在欧洲航空总署发射后仅仅40秒的实践内发生了爆炸(请看918KQuickTime视频)。在花费了7亿美刀历经10年光景的开发之后,该次航行其实尚是其处女航(天地会珠海分舵注:根据火箭的形状,我其实更倾向于把它翻译成“处子航”,只是不知道大家是否可以接受而已了。^_^)。一个调查委员会立刻成立以对事故原因进行调研,并在两周后给出了一个报告。结果表明故障原因竟然是因为火箭内部的惯性参考系统里面的一个软件错误所导致的。明确地说就是平台相关的一个64位的代表火箭水平速度的浮点数被转换成一个16位的有符号整数。该数字比16位有符号数最大的存储能力32,768还要大,因此该转换是个失败的转换。

The report of the Inquiry Board is available. The following paragraphs are extracted from that report.

大家可以从这里获得该事故的报告。以下章节就是摘录自该报告的。

On 4 June 1996, the maiden flight of the Ariane 5 launcher ended in a failure. Only about 40 seconds after initiation of the flight sequence, at an altitude of about 3700 m, the launcher veered off its flight path, broke up and exploded.

1996年6月4日,阿丽安娜5的处子行宣布以失败告终。仅仅在启动飞行程序的40秒之后,该火箭发射器就在3700米的高度突然转向偏离航道,最终引发爆炸而分崩离析。

The failure of the Ariane 501 was caused by the complete loss of guidance and attitude information 37 seconds after start of the main engine ignition sequence (30 seconds after lift-off). This loss of information was due to specification and design errors in the software of the inertial reference system.

阿丽安娜501的故障是因为在主引擎启动37秒后(点燃后30秒)完全丧失导航和高度信息而导致的(天地会珠海分舵注:这里原文的attitude应该是报告人员手误,理应为altitude。跟我写博客不少错别字一样的不严谨,难怪该火箭会爆炸了。^_^)。这些信息的丧失是因为惯性参考系统软件的需求文档和设计错误而引发的。

The internal SRI* software exception was caused during execution of a data conversion from 64-bit floating point to 16-bit signed integer value. The floating point number which was converted had a value greater than what could be represented by a 16-bit signed integer.

火箭内部的SRI*软件异常是在系统尝试执行一个64位浮点数到16位有符号整数的转换过程中发生的。该浮点数在进行转换后得到的结果将会超出16位有符号整数所能表达的范围。

*SRI stands for Système de Référence Inertielle or Inertial Reference System.

*SRI代表的是Système de Référence Inertielle,也就是惯性参考系统。
This description is adapted from The Explosion of the Ariane 5 by Douglas N. Arnold.

以上描述是由阿丽安娜5大爆炸的作者Douglas N. Arnold所整理而成。

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

海外优秀资讯抢先看9:世界著名软件缺陷灾难性案例详解之爱国者导弹自摆乌龙事件

发表于 2015-02-04 | 分类于 Hacker News

Patriot Missile Failure

爱国者导弹的挫败

On February 25, 1991, during the Gulf War, an American Patriot Missile battery in Dharan, Saudi Arabia, failed to intercept an incoming Iraqi Scud missile. The Scud struck an American Army barracks and killed 28 soldiers. A report of the General Accounting office, GAO/IMTEC-92-26, entitled Patriot Missile Defense: Software Problem Led to System Failure at Dhahran, Saudi Arabia reported on the cause of the failure. It turns out that the cause was an inaccurate calculation of the time since boot due to computer arithmetic errors. Specifically, the time in tenths of second as measured by the system’s internal clock was multiplied by 1/10 to produce the time in seconds. This calculation was performed using a 24 bit fixed point register. In particular, the value 1/10, which has a non-terminating binary expansion, was chopped at 24 bits after the radix point. The small chopping error, when multiplied by the large number giving the time in tenths of a second, lead to a significant error. Indeed, the Patriot battery had been up around 100 hours, and an easy calculation shows that the resulting time error due to the magnified chopping error was about 0.34 seconds. (The number 1/10 equals 1/24+1/25+1/28+1/29+1/212+1/213+…. In other words, the binary expansion of 1/10 is 0.0001100110011001100110011001100…. Now the 24 bit register in the Patriot stored instead 0.00011001100110011001100 introducing an error of 0.0000000000000000000000011001100… binary, or about 0.000000095 decimal. Multiplying by the number of tenths of a second in 100 hours gives 0.000000095×100×60×60×10=0.34.) A Scud travels at about 1,676 meters per second, and so travels more than half a kilometer in this time. This was far enough that the incoming Scud was outside the “range gate” that the Patriot tracked. Ironically, the fact that the bad time calculation had been improved in some parts of the code, but not all, contributed to the problem, since it meant that the inaccuracies did not cancel.

在1991年2月25号海湾战争期间,一枚美国的爱国者导弹因为基于内部时钟的时间计算缺陷,不能够在沙特阿拉伯的达兰成功拦截伊拉克发射过来的一枚飞毛腿导弹。该飞毛腿导弹击中了该地的一个美军军营并导致28个士兵阵亡。美国审计总署提供的GAO/IMTEC-92-26号报告文件描述了该拦截失败的原因,其标题为:“爱国者导弹防御:软件缺陷导致防御系统在沙特阿拉伯达兰的拦截失败”。原来原因是因为从系统启动时开始计算的不够精确的时间运算导致的错误。明确的说,就是爱国者导弹防御系统时间的衡量计算是基于系统时钟时间乘以1/10所得到的秒数来进行表示的(天地会珠海分舵注:本人认为可以理解为,一旦你调用一个获取系统时间的API如getTimeInSeconds(),系统自动就会把系统时钟的时间乘以1/10来进行返回,所以爱国者导弹系统的编码人员在获得该系统提供的时间后还需要乘以10才能获得真正的秒数)。且这个自动乘以1/10的运算是使用一个24位的定点寄存器来进行的。因为大家都知道计算机上面的数字都是以二进制来表示的,所以十进制的1/10用二进制来表示的话,学过进制转换的朋友应该会清楚二进制表示的1/10会产生无尽循环(天地会珠海分舵注:因为十进制小数需要用二进制表示的话是通过一到多个2的n次方分之一相加组合而成的,而0.1是没有办法用有限个2的n次方分之1相加而获得的),而24位的寄存器只能存放24位的有效位,其余小数精度部分会被砍掉。但是这个看似微不足道的缺少掉被砍掉的24位之后的精度的数值在乘以一个很大的数值(在这里就是系统启动之后的总秒数乘以1/10的所返回的系统时间)所获得的数字所产生的结果将会有一个巨大的偏差。事实上,当时该爱国者导弹系统的电池已经启动了100个小时,这样下面一个很简单的计算公式就能计算出该砍掉的精度所导致的时间偏差会达到0.34秒之多。(十进制的1/10转换成二进制将会是1/24+1/25+1/28+1/29+1/212+1/213+….的一个无尽循环,换句话说,表示成二进制小数的无尽循环将会是:0.0001100110011001100110011001100….,而现在24位寄存器存放的数字将会是0.00011001100110011001100,这相比真实的大小将会引进来24位之后的用二进制小数表示 0.0000000000000000000000011001100… 的误差,也就相当于10进制的0.000000095的误差。那么把这个数值乘以系统返回来的系统时间再乘以10就是计算得到的当前系统以秒数表示的时间所产生的误差值:0.000000095×100×60×60×10=0.34)一个飞毛腿导弹飞行的速度大概是1,676米每秒,所以在0.34秒的误差时间内针对飞毛腿导弹就会产生超过半公里的误差。这个距离已经足够让正在飞来的飞毛腿导弹跨出爱国者导弹系统进行导弹跟踪的有效”距离门”(天地会珠海分舵注:本人认为如果把它解析成“目标位置”或许会更好的帮助你进行理解)的范围之外了。具有讽刺意味的是,该时间误差导致的问题在代码的某些部分是有进行修复的,也就是代表有人已经意识到这个错误的,但问题是当时并没有把相关的所有问题的代码进行修复,也就是说该时间精度的问题是依然存在该系统之中对该灾难性时间做着“贡献”的。


The following paragraph is excerpted from the GAO report.

以下是对该GOF报告的部分引用:

The range gate’s prediction of where the Scud will next appear is a function of the Scud’s known velocity and the time of the last radar detection. Velocity is a real number that can be expressed as a whole number and a decimal (e.g., 3750.2563…miles per hour). Time is kept continuously by the system’s internal clock in tenths of seconds but is expressed as an integer or whole number (e.g., 32, 33, 34…). The longer the system has been running, the larger the number representing time. To predict where the Scud will next appear, both time and velocity must be expressed as real numbers. Because of the way the Patriot computer performs its calculations and the fact that its registers are only 24 bits long, the conversion of time from an integer to a real number cannot be any more precise than 24 bits. This conversion results in a loss of precision causing a less accurate time calculation. The effect of this inaccuracy on the range gate’s calculation is directly proportional to the target’s velocity and the length of the the system has been running. Consequently, performing the conversion after the Patriot has been running continuously for extended periods causes the range gate to shift away from the center of the target, making it less likely that the target, in this case a Scud, will be successfully intercepted.

“距离门”(天地会珠海分舵注:本人认为如果把它解析成“目标位置”或许会更好的帮助你进行理解)预测一个飞毛腿导弹下一次将会在哪里出现是通过一个函数来实现的,该函数接受的是两个参数:飞毛腿导弹的速度和雷达在上一次侦测到该导弹的时间。其中速度可以表示为一个整数和一个小数(比如,3750.2563…英里每小时)。而其中的时间是在爱国者反导弹系统中由内部时钟以总秒数的1/10的方式不停的刷新保存起来的,且该保存形式将会是以整形或者整数的方式呈现出来的(比如,33, 34…)。系统运行时间越长,表示时间的数字就会越大。为了预测一个飞毛腿导弹下一次将会在哪里出现,两个参数速度和时间都必须以实数的方式进行表示。因为爱国者导弹计算机系统本身的计算方法以及时间运算过程中用来存储时间的寄存器的大小只有24位,所以一个时间数字转换成对应的实数后获得的精度将不会再高于24位能表示的范围了。这个转换的结果将会导致精度的丢失。丢失的精度引发的后果在“距离门”对预测飞毛腿导弹下一次出现位置的预测的计算中就可以直接通过被检测的目标(飞毛腿导弹)的飞行速度和系统当前已经运行的时间长度体现出来了。后果就是,在该爱国者导弹系统已经不停的运行很长一段时间之后对时间进行转换将会导致“距离门”相对飞毛腿导弹这个目标的真实的中心位置产生偏移,这就让系统对该目标(在这种情况下指的就是飞毛腿导弹)进行拦截成为不大可能实现的事情了。

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

海外优秀资讯抢先看8 - Windows 10 for Raspberry Pi 2

发表于 2015-02-03 | 分类于 Hacker News


Windows 10 for Raspberry Pi 2

树莓派2代上的Windows 10





We’re excited to announce that we are expanding our Windows Developer Program for IoT by delivering a version of Windows 10 that supports Raspberry Pi 2. This release of Windows 10 will be free for the Maker community through the Windows Developer Program for IoT.

我们很激动的宣布我们把物联网Windows开发者计划进行了相应的拓展,发布了windows10的一个版本来支持树莓派2代。windows物联网开发者计划社区的开发人员可以免费获得该发布的windows10版本。

Windows 10 is the first step to an era of more personal computing. This vision framed our work on Windows 10, where we are moving Windows to a world that is more mobile, natural and grounded in trust. With the Windows for IoT developer program we’re bringing our leading development tools, services and ecosystem to the Raspberry Pi community!

Windows 10 是打开更多的个人计算新纪元的第一步。该愿景框定了我们在Windows 10上面的工作就是去把Windows推向一个移动性更强,更自然,更值得信任的世界。通过Windows物联网开发者计划,我们给树莓派2代嵌入式平台提供了我们领先的开发工具,服务和生态系统。

We see the Maker community as an amazing source of innovation for smart, connected devices that represent the very foundation for the next wave of computing, and we’re excited to be a part of this community.

我们认为整个开发者社区就是一个代表下一波计算浪潮的根基的智能和互联设备方面的神奇的创新源泉,我们很高兴我们成为本社区的一部分。

We are excited about our partnership with the Raspberry Pi Foundation and delivering a version of Windows 10 that supports Raspberry Pi 2, and we will be sharing more details about our Windows 10 plans for IoT in the coming months.

我们为拥有和树莓派的合作关系而感到高兴,且为发布了一个支持树莓派2的版本的Windows 10而感到激动,我们将会将来的几个月跟大家一起分享更多关于我们的Windows 10物联网相关的计划。






### Join the Windows for IoT Development program today

### 今天就加入Windows物联网开发者计划吧

By joining our program you will be amongst the first to receive new information about the Windows

Developer Program for IoT including product information, beta programs and releases.

通过加入我们的计划,你将会成为最快获得关于Windows物联网开发者计划相关信息的一员,

这些信息将包含产品信息,公测应用和正式发布应用。

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

海外优秀资讯抢先看7:私有应用云平台Sandstorm服务对象之企业

发表于 2015-02-03 | 分类于 Hacker News




Use Sandstorm to run your enterprise server cluster:

使用Sandstorm来运行你的企业服务器集群

#### Easy App Deployment

#### 简易部署
A Sandstorm app only takes a couple clicks to deploy. It’s so easy and secure that non-technical employees can actually deploy the apps they need themselves, without wasting valuable IT time. Get SaaS-like ease-of-use while keeping your data on-prem and under your control.

部署Sandstorm上的应用仅仅需要简单的点击几下就能完成。因为是如此的简单和安全,以致就算没有非技术雇员都可以进行应用的部署而不需要劳烦IT人员的大驾光临。通过Sandstorm你可以获得SaaS般软件即服务的方便使用的功能的同时又可以把你的数据保存在近线服务器上以便让你完全自主操控。(天地会珠海分舵注:on-prem是on-premises的缩写,通常联合成on-prem software一起使用。网上翻译众说纷纭,本人认为应该翻译成”近线”应用,因为它是相对与SaaS这个云端应用来说的,云端代表应用是运行在远端的服务器上面的,所以相对的on-prem就是运行在你企业内部的服务器上面的。有中型企业工作经验的朋友应该碰到过这种情况:visio等很多付费软件是装在一台服务器上面的,每个人都可以用自己的域账号登录,甚至同时通过终端登录该服务器来打开visio这些上面的软件进行编辑,互不干扰,其实这个就是on-prem的一个应用场景)






#### Ridiculously Secure

#### 安全到你不敢相信
Sandstorm automatically compartmentalizes apps and users,preventing application bugs from leading to catastrophic security failures. Meanwhile, Sandstorm’s innovative security model ensures that these protections never get in the way of people doing their jobs.
Sandstorm自动把应用和用户分离开来,以杜绝避免应用的缺陷导致灾难性安全失败的情况。



#### Cluster Management

#### 集群管理
Sandstorm’s enterprise tools will allow a cluster of machines to be treated like one big server. Just load the Sandstorm image on each machine and turn them on, and they’ll self-organize. Install apps just as easily as with the personal version, as seen in our demo.
Sandstorm的企业级工具集允许将一群机器设备整合集群在一起并让外部看来就像一个大型服务器一样(天地会珠海分舵:这里本人首先想到的变形金刚合体^v^)。你要做的仅仅是在你的各个机器上把Sandstorm镜像文件给加载起来并启动相应的集群选项,然后它们就可以自我管理了。在上面安装应用的话跟你在单机版上安装没有两样,一样的简单。在我们的演示中你会看到这一点。

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

海外优秀资讯抢先看6:私有应用云平台Sandstorm服务对象之开发人员

发表于 2015-02-03 | 分类于 Hacker News

What’s in it for developers? As it turns out, lots of things:

这对开发人员又有什么好处呢?事实上,大把的好处:

Focus on your Product

专注在你的产品上面

Just build your app and put it in the app store. No need to maintain or pay for servers. No need to carry a pager. No need to design for scalability. Use any tech stack that runs on Linux — Node, Rails, PHP, Java, Python, whatever. It’s easy to port existing code to run on Sandstorm.

你所需要做的仅仅是把你的应用进行构建然后放到应用商店上面就完事了,根本不需要去担心维护和付费的事情。永远不需要随身携带个BB机以防有人因为商店上应用的问题而找你。也不需要去担心扩展性的问题。你可以使用任何可以跑在Linux上面的一套技术工具–比如Node,Rails, PHP, Java, Python之类。去把你已有的代码移植到Sandstorm是件非常容易的事情。

Security is Built-in

内建安全

You don’t have to implement login. You don’t even have to implement sharing — Sandstorm does that for you. You can even export APIs and integrate with other apps without thinking about OAuth. Sandstorm protects you and your users from most common security problems, so you can rest easy.

你没有必要去为你的每个应用实现登录功能。你甚至不需要去实现任何共享 – Sandstorm已经帮你完成这些工作了。你甚至可以直接把你的APIs暴露出来以便和其他应用进行集成,在此过程中你根本不需要去考虑OAuth这些第三方安全认证的服务。Sandstorm让你和你的用户远离大部分常见的安全隐患,你就一边翘着二郎腿抽根烟喝杯茶吃个包悠哉悠哉得了。

Behind-the-firewall

运行在防火墙之后

Do your corporate customers often ask to run your app on-prem, behind their firewall? Does that sound like a huge pain to support? Sandstorm makes it easy, handling packaging, deployment, and updates.

你的客户是否经常会要求你把你的应用运行在近线服务器上面(天地会珠海分舵注:on-prem是on-premises的缩写,通常联合成on-prem software一起使用。网上翻译众说纷纭,本人认为应该翻译成”近线”应用,因为它是相对与SaaS这个云端应用来说的,云端代表应用是运行在远端的服务器上面的,所以相对的on-prem就是运行在你企业内部的服务器上面的。有中型企业工作经验的朋友应该碰到过这种情况:visio等很多付费软件是装在一台服务器上面的,每个人都可以用自己的域账号登录,甚至同时通过终端登录该服务器来打开visio这些上面的软件进行编辑,互不干扰,其实这个就是on-prem的一个应用场景),运行在它们的企业内部防火墙的背后?这是不是听起来有火烧屁股的剧痛?有了Sandstorm你就不用怕火烧屁股了,它会让打包处理,部署和更新这些事情有如小菜一碟般简单。

我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路

海外优秀资讯抢先看5:私有应用云平台Sandstorm服务对象之个人用户

发表于 2015-02-03 | 分类于 Hacker News




Why have a personal server? Lots of reasons:

为神马你需要自己的独立服务器?理由多的很:



#### Lots of Apps

#### 应用多的你不敢直视

#### Use a wide variety of web apps on Sandstorm, including things that you can’t find elsewhere. We have the usual e-mail, photo sharing, and collaborative document editing, but also niche apps that the big guys will never offer because they can’t be monetized. Moreover, Sandstorm is the only easy way to run many great open source apps.

#### 你可以在Sandstorm中使用各种各样的网络应用,包括那些你在其他地方根本找不到的玩意儿。这里我们拥有常用的邮件应用,照片共享应用,文档协同编辑应用,同时还会有很多利基应用-那些巨头们永远不会提供的应用,因为他们不能从中快速套现。甚者,Sandstorm是可以简易运行大量开源应用的唯一方式。(天地会珠海分舵注:Niche Apps可参照百度百科关于Niche Market的翻译 – Niche Market即利基市场,国内翻译五花八门:缝隙市场、壁龛市场、针尖市场,目前较为流行音译加意译:利基市场,哈佛大学商学院案例分析的中文版中也是采用这种译法,或者翻译为小众市场),指向那些被市场中的统治者/有绝对优势的企业忽略的某些细分市场或者小众市场,指企业选定一个很小的产品或服务领域,集中力量进入并成为领先者,从当地市场到全国再到全球,同时建立各种壁垒,逐渐形成持久的竞争优势。)

Protect your privacy

让你远离艳照门

Sandstorm apps can only talk to the outside world with your explicit permission. That means they can’t secretly spy on you, develop anadvertising profile from your data, orperform psych experiments on you without your consent. Plus, apps running on your server do notdisappear when the developer stops supporting them.

Sandstorm只能在你显式允许的情况下才能访问外面的世界。这就意味着这些应用不能对你的信息偷偷进行窥探,根据你的信息数据开发出相应的广告档案,或者在没有你首肯的情况下对你的行为进行用户行为分析。另外,在你的服务器上运行的应用不会因为开发人员停止相应的开发支持而因之消失掉。


Don’t get locked in

逃出楚门的世界

When developers run the servers, they can lock you in to their walled garden, refusing to play nice with competitors they don’t like. Sandstorm puts all your apps and data under your roof, where you can mix and match apps as you please. You can even freely move between hosts and take all your apps and data with you.

当开发人员运行他们的服务器的时候,他们可以把你投进他们建立的楚门的世界里面,拒绝和其他那些他不喜欢的跟其有竞争性的应用进行良好的合作互动。Sandstorm让所有的应用和数据都在你的同一屋檐下进行共存,这样你就可以按照你自己的喜好对里面的应用进行调配。你甚至可以自由的带着你的数据和应用搬家到不同的Sandstorm主机上去。


我的更多作品
[三日清单] - 把握今天,放眼未来
[好学街] - 记录学习点滴、分享才艺人生
[techgogogo] - 本站公众号、关注了不迷路
1…131415
朱佰添

朱佰添

147 日志
25 分类
66 标签
RSS
© 2021 朱佰添 粤ICP备17146211号
由 Hexo 强力驱动
主题 - NexT.Muse