微信号:infoqchina

介绍:有内容的技术社区媒体

Q新闻丨微软推出TypeScript1.7;Facebook如何应用大数据?……

2015-12-17 08:12 Q新闻

1微软推出TypeScript1.7


微软最近发布了TypeScript —— 这个JavaScript超集的语言的1.7版本,新版本兑现了微软的部分承诺,使某些场景中的编程工作更为简便了。


新版本中最受期待的特性就是对async/await语法的支持,目前对于以ES6为目标的项目已经可以使用该语法了。async/await语法允许开发者将某个函数标记为async,通过在异步函数中使用await关键字,开发者就能够以调用同步代码的形式调用异步函数了。目前为止,该语法仅能够用于ES6,因为语法的实现背后使用了代码生成器。


出于该特性的复杂性,直到2.0版本发布之前,以ES5为目标的代码都无法使用这一语法。在另一篇博客中,微软表示对该语法的支持是一个巨大的变动:


为了支持各种浏览器,我们必须使用状态机的方式,将ES6的代码生成器函数重写为能够在ES5中运行的JavaScript。这一任务是一项艰巨的挑战,它需要对编译器代码进行大量的改动,但我们目前正致力于实现它。


如果开发者希望现在就能够在所有浏览器中应用这一特性,可以选择使用Babel。


微软在新版本中还引入了多态的this类型,使用它能够更方便地编写fluent风格的代码,如下所示:

var result = myObject.
doSomething().
doSomethingElse();

按照微软的描述,“this类型可用于类与接口中,用于表现包含类型的某个子类型(而不是包含类型本身)。”如果想详细了解这一特性的应用方式,请查阅TypeScript的Wiki。在Hacker News上的讨论中,用户tlarkworthy对于此特性表现出了极大的热情:


在进行泛型编程时,你可能会遇到“无法在类型列表中两次引用同一个类型”的问题,此时多态的this类型就能够派上大用。自从接触过它之后,我已经在许多场合中应用过它了。它能够解决许多问题,例如实现一个clone方法。这个新特性太棒了!


2Facebook是如何应用大数据的?


在Facebook上,每天会产生100亿条消息、45亿次“喜欢”按钮点击和3.5亿张新图片。对于许多人而言,这些信息没有任何意义,但借助大数据技术,Facebook可以了解用户的位置、朋友、喜好等信息。近日,Medium分享了一篇关于Facebook如何应用大数据的文章。


Facebook不只是会收集、存储和分析用户数据,他们还会通过下列方式确定或影响用户的行为:


  • 跟踪Cookies:Facebook通过使用跟踪Cookies来跟踪用户浏览Web的行为。如果用户在登录Facebook的同时浏览Web,那么Facebook就可以跟踪用户访问的站点。

  • 面部识别:Facebook可以借助用户分享的图像数据在Web和其他Facebook用户资料中跟踪用户。

  • 标注建议:借助图像处理和面部识别,Facebook可以为用户提供照片标注建议。

  • 分析用户喜好:最近的一项研究表明,仅仅通过分析用户在Facebook上点击“喜欢”按钮的行为,就可以准确地预测用户的个性与品质这种高度敏感的信息。


不久前,Facebook还向他的一些合作伙伴推出了“主题数据(Topic Data)”。主题数据可以向市场营销人员展示受众对于品牌、事件、活动和主题的反应。市场营销人员可以据此有选择地调整他们在该平台及其他渠道中的营销方式。此前,这些数据由第三方提供,但由于样本规模太小,那并不怎么有用。


数据是一个巨大的金矿,但对于数据的挖掘利用而言,隐私是一个绕不开的问题。虽然Facebook一直宣称,用户信息只有在获得用户许可的情况下才会被分享,而在出售给市场营销人员时会隐去姓名资料,但是问题总会出现。例如,许多用户都抱怨隐私设置过于复杂,很容易在无意间分享一些东西。另外,Facebook的图搜索为陌生人访问用户的隐私数据提供了更多的机会。


另外,按照Facebook首席分析师Ken Rudin的说法,依赖大数据的公司会将挫折归因于两个问题:一是过多依赖于某一种技术,如Hadoop。Facebook安装了大量的Hadoop软件,甚至为此设计了自己特有的硬件。二是公司使用大数据回答无意义的问题。据Rudin介绍,在Facebook,有意义的问题是指其答案可以为改变行为提供依据的问题。


3Node.js因为OpenSSL安全问题推迟更新


之前Node.js基金会曾承诺将修复两个危险漏洞,并更新所有长期维护和稳定的Node.js分支。上周补丁已经发布并预计在本周发布更新,但为了包含最新的OpenSSL版本,基金会决定推迟更新,这是因为OpenSSL中的漏洞也影响了Node.js。


上述提到的漏洞分别为拒绝服务漏洞(CVE-2015-8027)和内存越界访问漏洞(CVE-2015-6764)。


拒绝服务漏洞影响了从 v0.12.x 至 v5.x 的所有Node.js版本。将其标记为危险漏洞是因为外部恶意攻击者可以通过此漏洞关闭运行在指定系统的Node.js服务。在一定的条件下,HTTP SOCKET可能无法获取到与之相关的解析器,但一个流水线请求可能会在没有解析器的情况下触发暂停或者恢复操作,这将会抛出uncaughtException。


对外提供HTTP服务的被影响用户应该尽快升级到已修复版本,具体为:Node.js 0.12.x 应升级至 Node.js 0.12.9 (LTS);Node.js 4.x 包括 LTS Argon 应升级至 Node.js 4.2.3 Argon (LTS);Node.js 5.x 应升级至 Node.js 5.1.1 (Stable)。


访问越界漏洞被发现于V8引擎的JSON.stringify()实现中,json-stringifier.h的函数BasicJsonStringifier::SerializeJSArray未正确加载数组元素,远程攻击者通过构造的JS代码,利用此漏洞可造成拒绝服务(越界内存访问)。。这个问题被Google Chrome归类为非常严重的漏洞并在本周Chrome稳定版的升级中被修复。


该漏洞对于Node.js用户来说风险较低,因为只有第三方的特定JavaScript代码在应用中被执行才会触发。只有对外提供服务且可能执行不信任的JavaScript代码的用户会有风险,但所有用户都应进行升级,具体为:Node.js 4.x 包括 LTS Argon 应升级至 Node.js 4.2.3 Argon (LTS);Node.js 5.x 应升级至 Node.js 5.1.1 (Stable)。


OpenSSL中的漏洞也会影响Node.js。尽管Node.js 0.10.x 没有被上述问题影响,但由于它依赖于OpenSSL v1.0.1,而OpenSSL v1.0.1 和 1.0.2(CVE-2015-3194)可能在证书检查过程中被提供了使用RSA PSS算法生成的存在缺陷的 ASN.1 签名而导致崩溃,攻击者可以利用该缺陷使用客户端授权进行拒绝服务攻击Node.js服务器,所以还是需要升级。Node.js 4.x LTS 5.x 同样受到了OpenSSL 1.0.2中Montgomery平方过程中的错误的影响,针对RSA和DSA进行攻击是有可能的,尽管非常困难。


Node.js基金会拥有最流行的JavaScript服务器平台的管辖权。而OpenSSL则完全是一个独立的项目,由自己的团队维护。Heatbleed事件已经表明,OpenSSL被广泛用于各种应用,所以更新OpenSSL通常会引起各种连锁反映,这就是为什么OpenSSL步伐缓慢,Node.js基金会不得不等待,推迟更新。如果基金会不等待按照计划发布了更新,几天后再同修复的OpenSSL发布新的版本,这将造成更多混乱,例如一些开发者可能错过第二次更新的提示,或者将意识不到过期的OpenSSL的影响。


许多开发人员甚至都不知道他们应用中的所有组件,他们不知道调用了哪些libraries,更别说这些被调用的libraries可能依赖了其他libraries,这导致了当项目中出现了有漏洞的代码的时候很难通知他们。开源代码是普遍紧密联系着的,任何依赖关系树中的代码出现问题都可能有着深远而广泛的影响。


  • 更多干货内容,敬请关注InfoQ微信公众号


荐文


 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 写作的本源 自动化模式中的MySQL xgboost:速度快效果好的Boosting模型 What?网络运维中,成熟的公司必须杜绝CTO?! PHP100大讲堂:PHP5面向对象编程入门(6月18号晚7点 第二讲)