Google的fluent开发框架现在支持在windows平台上开发应用程序

为了给 iOS 和 Android 移动平台轻松开发应用程序,谷歌推出了名为 Flutter 的应用开发框架。不过随着时间的推移,它正在成为“一次编译,随处运行”的大规模跨平台项目的一个缩影。最新消息是,新版 Flutter 应用开发框架已支持轻松开发可在 Windows 平台上运行的应用程序。

在推出后的几年时间里,Flutter SDK 已提供了对 Web、嵌入式、macOS、以及 Linux 应用创建的支持,极大地拓展了这款应用开发框架的覆盖范围。

此前谷歌还调侃过,Flutter 只剩下 Windows这个主要平台没有提供支持了。

现在,Flutter 团队正在启动适用于 Windows Alpha 的 Flutter SDK,以帮助开发者构建标准的 .exe 可执行文件和支持库。

这些程序不仅可在 Windows 7 到 Windows 10 PC 上运行,还能够与其它平台(比如 Android / iOS)使用完全相同的 Dart 代码。

如需体验 Flutter for Windows,请移步至 Flutter 的开发通道(Dev Channel),启用 Windows 构建、并为项目设置必要的文件内容,所有这些操作都可在命令提示符下轻松完成。

为将 Windows 应用程序发送到其它计算机,谷歌还提供了打包压缩的支持。

当然,将 Flutter 应用程序放到 Windows 之类的桌面平台上运行、而不是仅仅是依赖于 Web Apps,最大好处就是能够利用系统内置的功能、以及调用现有的第三方桌面功能库。

Tim Sneath 表示,Flutter 团队一直在这方面努力,以使 Flutter Dart 代码能被轻松用于 Windows 应用程序中的一些最常见任务。

为展示 Flutter 在 Windows 上的潜力,谷歌还提供了一些开源的示例应用,比如主打通讯录管理功能的 Flokk、以及改进后的 Flutter Gallery 图库(为桌面使用场景而优化)。

目前使用 Flutter 构建的 Windows 应用程序都基于经典的 Win32 API,因而大家无需顾虑它们与大多数 Windows 计算机的兼容性。

展望未来,开发团队还计划为 Windows 10 / XboxOne 等 UWP 平台提供支持,甚至当前 Windows Store 上就已经提供了一个实验性质的版本。

实施各种NLP操作是否困难?Google开源序列建模框架lingvo

自然语言处理在过去一年取得了很大进步,但直接关注 NLP 或序列建模的框架还很少。本文介绍了谷歌开源的 Lingvo,它是一种建立在 Tensorflow 上的序列建模框架。该框架重点关注协作实现与共享代码库,能极大提升代码复用与研究迭代速度,NLP 的今年就靠你了~

Lingvo 是世界语(Esperanto)中的一个单词,它表示「语言」的意思。这一命名展示了 Lingvo 框架的根源:它是由 TensorFlow 开发的通用深度学习框架,它重点关注自然语言处理相关的序列建模方法,包括机器翻译、语音识别和语音合成等。

项目地址:https://github.com/tensorflow/lingvo

在谷歌内部,Lingvo 框架非常有吸引力,使用它的研究人员越来越多。目前,有数十篇获得 SOTA 结果的论文都通过 Lingvo 框架得到了最优的复现,当然开源后将会有越来越多的新实现。从传统的 RNN 序列模型到目前流行的 Transformer,再到包含变分自编码器模块的前沿模型,Lingvo 支持的序列建模架构非常多。

为了支持研究社区并鼓励复现研究论文,谷歌开源了这项框架。他们表示以后谷歌发布的一些序列建模新研究也会尝试采用 Lingvo 框架,它的便捷性将提升 NLP 研究的速度。

Lingvo 主要支持大量研究团体在一个共享代码库中从事语音和自然语言处理相关问题的研究。它的设计原则如下:

  • 单个代码块应该精细且模块化,它们会使用相同的接口,同时也容易扩展;
  • 实验应该是共享的、可比较的、可复现的、可理解的和正确的;
  • 性能应该可以高效地扩展到生产规模的数据集,或拥有数百个加速器的分布式训练系统;
  • 当模型从研究转向产品时应该尽可能共享代码。

图 1:Lingvo 框架整体结构,它展示了模型如何进行实例化、训练、评估和部署。

Lingvo 是在考虑协作研究的基础上构建的,它主要通过在不同任务之间共享公共层的实现,从而提升代码的复用程度。此外,所有层都实现了相同的公共接口,并以相同的方式布局代码结构。这不仅会产生更简洁和易读的代码,同时其它任务上的改良也可以便捷地应用到我们的任务上。实现这种一致性代码确实会有更多的成本,例如更加规范和模板化的代码。但是 Lingvo 也在尝试减少这种成本,以确保更快地迭代研究成果。

协作的另一个方面是共享可复现的结果。Lingvo 为检查模型超参数配置提供了集中的地址,这不仅可以记录重要的实验,同时通过训练相同的模型,其它研究者可以更轻松地复现我们的研究成果。

def Task(cls):
p = model.AsrModel.Params()
p.name = ‘librispeech’
# Initialize encoder params.
ep = p.encoder
# Data consists 240 dimensional frames (80 x 3 frames), which we
# re-interpret as individual 80 dimensional frames. See also,
# LibrispeechCommonAsrInputParams.
ep.input_shape = [None, None, 80, 1]
ep.lstm_cell_size = 1024
ep.num_lstm_layers = 4
ep.conv_filter_shapes = [(3, 3, 1, 32), (3, 3, 32, 32)]
ep.conv_filter_strides = [(2, 2), (2, 2)]
ep.cnn_tpl.params_init = py_utils.WeightInit.Gaussian(0.001)
# Disable conv LSTM layers.
ep.num_conv_lstm_layers = 0
# Initialize decoder params.
dp = p.decoder
dp.rnn_cell_dim = 1024
dp.rnn_layers = 2
dp.source_dim = 2048
# Use functional while based unrolling.
dp.use_while_loop_based_unrolling = False
tp = p.train
tp.learning_rate = 2.5e-4
tp.lr_schedule = lr_schedule.ContinuousLearningRateSchedule.Params().Set(
start_step=50000, half_life_steps=100000, min=0.01)
# Setting p.eval.samples_per_summary to a large value ensures that dev,
# devother, test, testother are evaluated completely (since num_samples for
# each of these sets is less than 5000), while train summaries will be
# computed on 5000 examples.
p.eval.samples_per_summary = 5000
p.eval.decoder_samples_per_summary = 0
# Use variational weight noise to prevent overfitting.
p.vn.global_vn = True
p.train.vn_std = 0.075
p.train.vn_start_step = 20000
return p

代码1:Lingvo 中的任务配置示例。每个实验的超参数都是在其所属的类中配置的,与构建网络和检查版本控制的代码不同。

虽然 Lingvo 一开始重点关注 NLP,但它本质上非常灵活。用于图像分割和点云分类任务的模型已经使用该框架成功实现。它还支持知识蒸馏、GAN 和多任务模型。同时,该框架没有因为便捷而牺牲速度,它具有优化的输入流程和快速的分布式训练。最后,Lingvo 还着眼于生产化,甚至有一条明确的路径来将模型移植到移动端。

论文:Lingvo: a Modular and Scalable Framework for Sequence-to-Sequence Modeling

论文地址:https://arxiv.org/abs/1902.08295

摘要:Lingvo 是一个能够为协作式深度学习研究提供完整解决方案的 Tensorflow 框架,尤其关注序列到序列模型。Lingvo 模型由模块化构件组成,这些构件灵活且易于扩展,实验配置集中且可定制。分布式训练和量化推理直接在框架内得到支持,框架内包含大量 utilities、辅助函数和最新研究思想的现有实现。过去两年里,Lingvo 已被数十个研究人员在 20 篇论文中协作使用。本文作为对框架各个部分的介绍,概述了 Lingvo 的基本设计,同时还提供了展示框架能力的高级功能示例。

谷歌行为克隆算法(Google Behavior cloning algorithm)横扫6个索塔,登上了curl的榜首,机器人的工作速度提高了10倍

编辑:小咸鱼 David

【新智元导读】谷歌团队在CoRL 2021上提出了一种隐式行为克隆 (Implicit BC) 算法,该方法在7项测试任务中的6项上优于此前最佳的离线强化学习方法(Conservative Q Learning)。Implicit BC在现实世界中表现也得特别好,比基线的显式行为克隆(explicit BC)模型好10倍

尽管过去几年中,机器人学习取得了相当大的进步,但在模仿精确或复杂的行为时,机器人代理的一些策略仍难以果断地选择动作。

要让机器人把桌子上的小滑块精确地滑进一个插槽里。解决这个任务有很多方法,每种方法都需要精确的移动和修正。机器人只能采取这些策略选项中的一个,还必须在每次滑块滑得比预期的更远时及时改变策略。

人类可能认为这样的任务很容易,但对于机器人来说,情况往往并非如此,它们经常会学习一些人类专家看来「优柔寡断」或「不精确」的行为。

机器人需要在桌子上滑动滑块,然后将其精确插入固定装置,显式行为克隆模型表现得很犹豫

为了让机器人更加果断,研究人员经常利用离散化的动作空间,迫使机器人进行明确的「二选一」,而不是在选项之间摇摆不定。

比如,离散化是近年来很多游戏agent著名模型的固有特征,比如AlphaGo、AlphaStar 和 OpenAI 打Dota的AI agent。

但离散化有其自身的局限性——对于在空间连续的现实世界中运行的机器人来说,离散化至少有两个缺点:

  1. 精度有限。
  2. 因计算维度导致成本过高,许多离散化不同的维度会显著增加内存和计算需求。在 3D 计算机视觉任务中,近期的许多重要模型都是由连续,而非离散表示来驱动的。

为了学习没有离散化特征缺陷的决定性策略,谷歌团队提出了一种隐式行为克隆 (Implicit BC) 的开源算法,这是一种新的、简单的模仿学习方法,已经在 CoRL 2021 上展示。

该方法在模拟基准任务和需要精确和果断行为的现实世界机器人任务上都取得了很好的结果。在7项测试任务中,隐式 BC 的性能在其中6项上优于此前最佳的离线强化学习方法(Conservative Q Learning)。

有趣的是,隐式 BC 在不需要任何奖励信息的情况下实现了这些结果,即可以使用相对简单的监督学习,而不是更复杂的强化学习。

隐式行为克隆(Implicit BC)

这种方法是一种行为克隆,可以说是机器人从演示中学习新技能的最简单的方法。在行为克隆中,agent会学习如何通过标准监督学习模仿专家的行为。传统的行为克隆一般是训练一个显式神经网络(如下图左所示),接受观察并输出专家动作。

而隐式行为克隆背后的关键思想是,训练一个神经网络来接受观察和动作,并输出一个数字,该数字对专家动作来说很低,对非专家动作来说很高,将行为克隆变成一个基于能量的建模问题。

显式(左)和隐式(右)策略之间差异的描述。在隐式策略中,「argmin」表示与特定观察配对时最小化能量函数值的动作。

训练后,隐式行为克隆策略会查找对给定观察具有最低能量函数值的动作输入,以此生成动作。

为了训练隐式 BC 模型,研究人员使用InfoNCE损失,让网络为数据集中的专家动作输出低能量,为所有其他动作输出高能量。有趣的是,这种使用同时接受观察和行动的模型的思想在强化学习中很常见,但在有监督的策略学习中则不然。

上图所示为隐式模型如何适应不连续性的动画——在这种情况下,训练隐式模型来适应一个步长(Heaviside)函数。左:拟合黑色训练点的2D图,颜色代表能量值(蓝色低,棕色高)。中间:训练期间能量模型的3D图。右图:训练损失曲线。

一旦经过训练,Google AI发现隐式模型(implicit model)特别擅长精确地建模先前显式模型(explicit model)难以解决的不连续性问题,从而产生新的策略,能够在不同行为之间果断切换。

为什么传统的显式模型(explicit model)在这个问题上表现不佳呢?

现代神经网络几乎总是使用连续激活函数——例如,Tensorflow、Jax和PyTorch都只提供连续激活函数。

在试图拟合不连续数据时,用这些激活函数构建的显式网络无法准确表示,因此必须在数据点之间绘制连续曲线。隐式模型(implicit model)的一个关键优势是,即使网络本身仅由连续层组成,也能够表示出尖锐的不连续性。

与显式模型(底部)相比,隐式模型(顶部)拟合不连续函数的示例。红色突出显示的插图显示,隐式模型表示不连续性(a)和(b),而显式模型必须在不连续性之间画出连续的线(c)和(d)

Google AI在这个方面建立了理论基础,提出了一个普遍近似的概念,证明了隐式神经网络可以表示的函数类别,这将有助于证明和指导未来的研究。

Google AI最初尝试这种方法时面临的一个挑战是「高动作维度」,这意味着机器人必须决定如何同时协调多个电机。为了扩展到高作用维度,Google AI使用自回归模型或朗之万动力学。

全新SOTA

在实验中,Google AI发现Implicit BC在现实世界中表现得特别好,在毫米精度的滑块滑动及插槽任务上比基线的显式行为克隆(explicit BC)模型好10倍。

在此任务中,隐式模型(implicit model)在将滑块滑动到位之前会进行几次连续的精确调整。

将滑块精确地插入插槽的示例任务。这些是隐式策略的自主行为,仅使用图像(来自所示的摄像机)作为输入

这项任务有多种决定性因素:由于块的对称性和推动动作的任意顺序,有许多不同的可能解决方案。

机器人需要决定滑块何时已经被推动足够远,然后需要切换到向不同方向滑动。这一过程是不连续的,所以,连续控制型机器人在这一任务上会表现得十分优柔寡断。

完成这项任务的不同策略。这些是来自隐式策略的自主行为,仅使用图像作为输入

在另一个具有挑战性的任务中,机器人需要按颜色对滑块进行筛选,由于挑选顺序是很随意的,这就产生了大量可能的解决方案。

颇具挑战性的连续筛选任务中显式BC模型的表现(4倍速度)

在这项任务中,显式模型(explicit model)还是表现得很拿不准,而隐式模型(implicit model)表现得更好。

颇具挑战性的连续筛选任务中隐式BC模型表现(4倍速度)

而且在Google AI的测试中,Implicit BC在面临干扰时,尽管模型从未见过人类的手,也依然可以表现出强大的适应能力。

机器人受到干扰时,隐式BC模型的稳健行为

总的来说,Google AI发现,与跨多个不同任务领域的最先进的离线强化学习方法相比,Implicit BC策略可以获得更好的结果。

Implicit BC可以完成很多具有挑战性的任务,比如演示次数少(少至19次),基于图像的观察具有高观察维度,还有高达30维的高动作维度,这就需要机器人充分利用自身具有的大量致动器。

隐式策略学习结果与跨多个域的基线进行了比较

尽管Implicit BC目前还有其局限性,但使用监督学习的行为克隆仍然是机器人从人类行为例子中学习的最简单方法之一。

该工作表明,在进行行为克隆时,用隐式策略替换显式策略可以让机器人克服「犹犹豫豫」,使它们能够模仿更加复杂和精确的行为。

虽然Implicit BC取得的实验结果来自机器人学习问题上,但是隐式函数对尖锐不连续性和多模态标签建模的能力可能在机器学习的其他领域也有更广泛的应用。

参考资料:

https://ai.googleblog.com/2021/11/decisiveness-in-imitation-learning-for.html

新版华为P30 Pro于5月31日发布。它支持谷歌GMS,并带来霜冻银色

去年,由于谷歌的限制,华为海思麒麟980以后的所有设备,均无法采用谷歌的GMS服务。因此,导致华为在海外市场的销量逐步下滑。据外媒报道,华为在海外市场推出全新的华为P30 Pro,加入了谷歌移动服务功能,似乎是要挽回此前在海外市场丢失的份额。

在外观方面,新版华为P30 Pro采用了一块6.47英寸的双曲面OLED水滴全面屏,支持屏下指纹解锁。新版华为P30 Pro最大的亮点之一,就是其带来的全新配色——冰霜银。这款配色相信大家看到之后并不陌生,没错,正是华为P40系列上的同款配色。银色总能给人一种非常精致的感觉,而这款全新的华为P30 Pro经过精细的打磨之后,看起来更加有质感。除此之外,新版华为P30 Pro还带来了黑色和极光色供用户选择,也是满足了不同用户的审美需求。

核心配置上,新版华为P30 Pro和上一代没有多大变化,采用了华为海思麒麟980处理器,4200mAh大电池及40W超级快充。而华为之所以推出新版华为P30 Pro,主要是因为它能够支持谷歌的GMS服务,这也是最能吸引海外消费者的。这款手机并没有受到谷歌的限制,可以正常使用谷歌的三件套:Google服务框架、Google Play商店和Google Play服务,让海外用户可以更好的体验常用APP。

此外,新版华为P30 Pro的起售价为749元(约合人民币5745元),预购这款手机的用户,可以免费获得Huawei FreeBuds 3耳机和Huawei Mini Speaker。同时还拥有两个捆绑套餐,手机+华为智能手表GT2 42mm(玫瑰金)售价848欧元;手机+华为智能手表GT2 46mm(黑色),售价848欧元。

综上来看,这款新版华为P30 Pro,只是华为为了挽救海外市场所做的升级,但是是否真能力挽狂澜,还要看海外市场用户们的接受程度了。据悉,新版华为P30 Pro将于5月31日在德国正式开售,它究竟能否得到用户的认可呢?

DFN开发者推出了另一款流行的手机游戏:沙盒生存、RPG集成、高度自由、交友和战斗

往上看,关注我。( ̄︶ ̄)↗

要问溜粉哪家强,韩国大厂Nexon。早在15年,Nexon就曾公布旗下生存沙盒手游《野生之地》将在短期内上市的消息,在那个手机端一直缺乏高品质沙盒生存手游的时点,这款游戏凭借优秀的基础品质,一经公布就获得了广泛关注。然而一年又一年过去,直到18年的1月底,这款游戏才终于揭开神秘面纱,正式登陆韩国手游市场。

不过,虽然是千呼万唤始出来,但毕竟实力突出,野生之地一推出就登顶韩国IOS和Google Play双榜的下载榜首位,在氪金榜上也冲入前五,表现不俗。

画面精良、操作易上手,游戏门槛低

野生之地采用了2.5D视角的写实画风,作为一款手游产品来说画面品质绝对上乘,精细度、光影等方面都表现出色。而类似侏罗纪公园“人类误入恐龙世界”的世界观设定,让游戏中有着各种各样的恐龙可供玩家狩猎、驯化、饲养。

游戏采用点触式操作,简单易上手。玩家在屏幕任意位置拖动手指即可控制角色的移动,点击物品可进行互动,如喝水、采摘果实、与人对话等。面对恐龙等攻击的时候,在画面右下角选择相应的动作进行防御或攻击即可。

高自由度的沙盒生存核心玩法,前期生存压力低对新人友好

沙盒生存游戏的基本玩法相信玩家姥爷们都很了解,野生之地也同样如此。游戏的自由度很高,并没有明确的任务线,而只是为玩家提供土、石、树木等基本素材,玩家需要从一无所有开始,通过采集建造、提升技能、躲避疾病威胁等,来自行组合探索游戏的更多内容。

不过虽说主打生存冒险,野生之地在前期的生存压力并不大。水、食物、衣服等物资都可以轻易获得,极端天气和疫病的威胁也很少见。在对新人友好的同时,也降低了游戏的紧张感和节奏,比较适合喜爱慢节奏和探索的玩家。

加入RPG式职业划分和PVP玩法,游戏社交性极强

在生存沙盒玩法外,游戏融入的RPG玩法成为一大亮点。游戏中有8个职业,如军人、学生、职员、厨师等,每个职业都有各自独特的天赋技能,决定了玩家未来的发展方向。因此到了后期,玩家无法自给自足,需要共同建立村落、划分各自职能来合作生存。

同时,游戏在玩法设置上也进一步强调社交。加入PVP玩法,在指定岛屿上,有多个联盟划分领地,、布置防御工事、抵御外敌入侵。不同联盟的玩家则变为红名,发起战斗争夺资源。

总体而言,从题材、画面、操作、玩法体验等各方面来看,野生之地都是一款上佳水准的沙盒生存游戏。在目前手游市场仍以激烈战斗为主,缺乏沙盒游戏的背景下,野生之地足以让大家眼前一亮。

游戏名称:野生之地:杜兰戈(야생의 : 듀랑고

推荐度:★★★★☆(品质上乘,玩法有特色,社交性强,一星扣给偏慢的节奏和尚无国服)

平台:IOS、安卓

语言:韩文

下载方式:关注“游深度”,回复“野生之地”获取下载链接

说明:IOS需韩国账号下载,安卓需配合谷歌三件套。两个平台均需带梯子才可正常游戏。

《游深度》——游戏行业老司机,不吹不黑不软文。欢迎点击左下方“了解更多”,订阅关注我们,更多游戏资讯和游戏圈的八卦内幕等你哦。

☟☟☟☟

Google Web开发技术的变革史和踩坑史

馨苑•2015/05/28 16:28

这是「 NEXT Collections | Google I/O」系列的开篇。NEXT Collections 是NEXT 用户基于产品集的干货分享专栏。Google I/O 期间,我们邀请和聚集了 NEXT 用户中的 Google 工程师、国内 Android 顶尖开发者,为大家分享和呈现关于 Google 的最干货信息与观点碰撞。

文章的作者 CJ 是 Google 八年的资深工程师,现回国创办了在线协作文档「一起写」,这篇文章也是他与 geek 范的同事们在「一起写」协作完成的。点击 NEXT 产品集「Google 开源项目」,完整查看文中提到的技术与开源项目。

过去十几年来, Web 开发技术从最初的纯 HTML 到 CGI、PHP / JSP / ASP、Ajax、Rails、Node.js,已经发展到了一个非常成熟的阶段。去年的 Google I/O,谷歌开发者中心推出了关于 Web 开发的最佳实践手册;而今年的 Google I/O ,「The Next Generation of Mobile Web」依然是其中的一个重要议程。

不过,前人栽树,后人乘凉。现在大家拷贝的代码可不是自己从土里自己长出来的,而是技术大牛一行行敲出来。即便是谷歌这样的互联网巨鳄,在 Web 开发上也经历过无数的努力和踩过一个又一个的坑。今晚 Google I/O 正式开启之前,我就给大家讲讲这些事儿,聊聊从 Desktop 时代到今天的 Mobile 时代,谷歌 Web 开发技术的变迁、踩过的坑。

| Gmail、Google Map : 世界疯了两次

大家知道,最早期的 web 开发指的就是 HTML,CSS,JavaScript,很多刚毕业的学生就会说,“切,会写 HTML,JS, CSS 不算写程序, 会写 C++ 的才算”, 这可大错特错了。你们想想,写一个 C++ 程序只需要会一种语言,写个 Web 应用得学三种语言,而且这三种语言还以一些神秘的、很多时候还没有文档的奇怪方式联系在了一起,再加上某些西北角的公司在里面再捣捣乱,导致 Web 应用非常的难以维护,直接的后果就是 99% 的应用都是简单的网页加上一点点可怜的逻辑,完全无法取代桌面上的应用。

这个时候,英雄出现了。Google 在 2004 年愚人节那天发布了一个叫做 Gmail 的东西,当时 email 的容量只有可怜的 10MB 或者 20MB,Google 突然说提供 1GB 的邮箱并且不断增长,于是,全世界疯了。可是在大容量的背后,大家发现原来 Gmail 不仅仅只是大,而且让你觉得你在使用一个桌面的应用,而不是一个以前传统的网页的应用。所以可以说,Gmail 是 Web 开发的一个里程碑,第一个大规模部署的 Ajax 的应用程序。

紧接下来的一年,也就是 2005 年的情人节前后,Google Map 神奇般地出现了,世界再一次疯了。所有人都觉得不可思议,原来网页的程序可以做得那么酷炫,而 2000 年左右科技泡沫鼎盛时期的那些网站是多么的可笑。当时 Map 的组里面有 2 个人很值得一提,一个叫 Lars Rasmussen 的澳大利亚人,一个叫 Bret Taylor 的美国人,后面我们会慢慢的提到。

| 重写 Gmail

在开发 Map 和 Gmail 的过程中,Google 的工程师逐渐意识到一个高度结构化的JavaScript 库的重要性。因为逻辑越来越复杂,代码量越来越多,功能也越堆越多,之前写得那些代码已经根本满足不了不断变化的需求了。于是伟大的工程师们做了一个 Googler 经常做的决定:我们重写吧。

一个伟大的重写 Gmail 的计划逐渐张开了,也就是今天大家看到的 Gmail 的前身。在整个重写的过程中,一个高度独立、结构化的 JavaScript 的库被抽象出,这就是可能很多前端工程师们知道的 Google Closure。用今天的话来说,Closure 不是一个简单的 JavaScript 的库,他是一种方法论,一种情怀,所以任何拿 jQuery 和 Closure 相对比的言论都是一种对 Closure 的侮辱。Closure告诉大家,大家应该像写 java 一样的去写 javaScript,分清楚什么是一个类,什么是类的成员变量,什么是成员方法,什么继承,什么是接口等等…所有你熟悉的面向对象的概念都可以在 Closure 里面找到。Closure 的出现极大地改变 Google 内部写 JavaScript 的效率,导致复杂的 Ajax 的应用如雨后春笋一样在 Google 内部迅速出现。

| 聪明人太多的产物:奇葩技术 GWT

如果让 Google 的工程师们自己找 Google 一个不好的地方,一定有一点,那就是聪明人太多,没法管理。就在 Gmail 如火如荼重写的时候,另外一个团队在悄无声息的做着另外一个类似的努力去改变 Web 开发,那就是 2006 年发布的 GWT(Google Web Toolkit)。这是一个无比奇葩的技术,程序员写的代码是 java,出来的是 JavaScript,就像你吃的是草,挤出来的是奶一样。这个技术的根本目的和 Closure 是一样的,就是为了让程序员用写 java 的方式去写 Web 应用,只是他的方式更直接,连 JavaScript 都省了。其实原理也很简单,就是通过编译器在编译阶段把 java 转成了 JavaScript 代码。可是,这个技术有一个致命的缺点:你想想,要有多麻烦才能在浏览器里面调试一堆由编译器生产的JavaScript 代码。于是无数的各种附加调试技术出现,告诉大家怎么去简化 GWT 的调试,但是都没有解决根本问题。GWT 的最大的好处就是如果你的网页是由标准的控件组成的,比如输入框、选择框、多选等,那么 GWT 会极大的简化你的代码量.就是因为这个好处,GWT 一直活到了今天,因为 Google 最赚钱的广告系统的前端是就是用 GWT 写的。可见,计算机语言的世界也是看爹的哈哈。

2007,2008 貌似很平静,Google 也没发布什么惊人的、大的前端产品和框架。事实上,他们并没闲着。Google 在那两年期间做了几个重要的收购,奠定了后面著名的 Google docs 的基础。

2009 年,在 Google 内部雪藏了很久的 Closure 库终于开源了,同时开源的还有一个对应的叫做 Closure Compiler 的东西,一般人理解 Closure Compiler 不就是另外 jQuery Minifier 嘛,其实可没那么简单,Closure 的 Compier 是可以真的理解你的 JavaScript 代码的类型的。通过一个叫 JsDoc 的注释形式的语法,你可以完全地把 JavaScript 当做是一种强类型的语言来写,并且有一个编译器来帮你查错。在强大的工具面前,jQuery 被无情地碾压。在接下来几年,Google又陆陆续续的发布了对应的 Closure 的模板语言,和对应的 Closure Stylesheet 编译器,于是 Web 的三件套,HTML + JS + CSS 在 Closure 的世界里都有了对应的工具,在 Google 内部,大部分的前端项目也都是基于这套工具来开发的。

与此同时,GWT 的小组也没闲着,一方面更好的支持 Google 最赚钱的广告系统前端;一方面默默的憋了一个超级大招 — 大名鼎鼎的 Google Wave。对,Google Wave 是用 GWT 写的,Wave 的 founder 就是我们前面提到的 Map 的创始人 Lars 。

| 又把最赚钱的广告系统重写了一遍

2011,2012 的 IO 上,关于 web 开发的主题很多都是基于 GWT 、Closure 展开的,一直风平浪静地到了 2013 年。但与此同时,Google 内部已出现了一股暗黑势力,悄悄地开发了一个完全颠覆式的前端框架 — AngularJS 。它,就是以HTML 标签起始符形状命名的 AngularJS,简称 Angular。颠覆在哪呢?Google 的 web 前端开发框架基本采用著名的 MVC (Model-View-Controller) 结构,有效地分离数据模型和最后显示的视图,使代码更清晰、更容易维护。早先的 MVC 大都是在服务器端实现的,包括先前提到的 GWT 神器。但是 AngularJS 不一样,是一个完全在客户端也就是浏览器里的 MVC 框架。这个框架在 HTML 中标注新的属性,运行时用 JavaScript 动态解析和绑定数据关联,简化了 web 应用尤其是单页应用 (single-page application) 的开发。不少数据双向同步逻辑甚至不用手工编写 JavaScript 就能实现了。更重要的是它制定了一整套前端组件的开发规范。虽然各种繁杂的条条框框让它无论在 Google 内部还是开源社区都备受微词,但它还是迅速获得很多企业的青睐,近几年来以异军突起之势成为众多公司招募前端程序员的一项标准需求。于是疯狂的程序员们又疯了,开始把很多陈旧的系统用 Angular 重写,包括前面提到了那个最赚钱的广告系统前端。甚至Angular 一出来的时候就有人预测,Angular 就是早期的 HTML6 。

| 异类语言的诞生

说到这里,不能不提一个异类语言了,叫做 Dart 。这个 Dart 可是出自名门,是由 V8 的首席程序员 Lars Bak 在他工作之余发明的, 他一边改善 V8 的性能,一边琢磨如何能突破 JavaScript 语言本身诸如弱类型等限制,让 web 程序执行速度更上一层楼。他最后决定,干脆摆脱 JavaScript 的束缚,重起炉灶设计一门全新的、为新时代 Web App 专门打造的语言 — Dart。

在了解 Dart 前,简单科普一下同父同母的兄弟 V8。 Google 的 Chrome 浏览器当年发布时以其远超 Internet Explorer 和 Firefox的网页渲染速度震撼了世界。其中一个核心优势就在于全新的 V8 JavaScript 引擎。当竞争对手还在吭哧吭哧解释执行 (interpret) 网页中的脚本时,强大的 V8 引擎采用即时编译 (JIT) 技术把 JavaScript 的运行速度提升到了一个全新的层次。在之后的几年里,各家浏览器厂商纷纷效仿,推进了整个 Web 平台的发展。目前深受追捧的 Node.js / io.js 其实也都是 V8 开源后的衍生产品,造就了一个前后端用同一种编程语言的新兴开发生态。

Dart 语言借鉴了广大程序员熟悉的 Java 语法,支持面向对象、单继承、interface、泛型、非强制的类型标记等语言特性。Dart 的虚拟机在 V8 大牛的打造下性能当然也是超强的。Dart 程序还能被编译成 JavaScript,运行在没有 Dart VM 的环境中。

然而,Dart 从发布日起一直倍受争议和质疑。它被认为是一项分裂 web 之举,而且长期以来没有得到任何其他浏览器厂商的支持。2015 年初,Google 宣布取消将 Dart VM 绑定在 Chrome 浏览器里的计划。不过这并不是 Dart 的死刑判决。Google 仍然支持并使用 Dart 开发大型 web 应用,因为比起 JavaScript,Dart 更能提高开发效率和保证代码质量。

综上,大家可以看到,web 在开发上两个趋势,第一个是从脚本语言层面去改善代码的质量,提高效率,第二是从 web 标准入手,提供更多抽象的模块化的组件,让编写 web 应用更加容易。

而说到第二点,不得不提提 Google 的一个项目叫做 Polymer ,如果你们去 Polymer 的网站,你会发现 Polymer 的口号是「leverage the future of web platform now」。 的确,Polymer 是一个库用来实现 Web component 的,而 web component 是 W3C 关于下一代 HTML 的一个标准,这可是根正苗红的一个项目。可以说 Polymer 项目的进展某种程度上就代表了下一代 HTML 标准制定的进展。让我们一起期待在本次 IO 上 Google 会对 Polymer 做出怎样的更新吧。

「 NEXT Collections | Google I/O」系列将持续更新,请保持关注。你也是一枚 Googler 或 Android 开发,并且有话要说?对文章观点有质疑?想加入 Google 工程师和 Android 开发大牛的线下讨论?欢迎邮件 xinyuan@36kr.com。文章作者的新项目「一起写」也在招聘 geek 范的同事,欢迎简历快递至 CEO 直聘邮箱:c@yiqixie.com。

原创文章,作者:馨苑

打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

作者

欢迎专心练剑的产品人和技术宅来聊:xinyuan@36kr.com :)

文章评论(3)

为了防止应用程序用户跟踪,duckduckgo推出了一个测试工具:适用于Android系统

今年4月,苹果推出了 App Tracking Transparency 工具,iPhone 和 iPad 用户可以阻止应用程序跟踪行为,避免隐私数据被用于个性化广告。新隐私政策施行以来, Facebook、Twitter 和 YouTube等互联网公司的收入已经蒸发了近 100 亿美元。

如今,类似的工具可被运用于 Android 操作系统。

一家名为DuckDuckGo的隐私科技公司,推出了一款被称为“Android 应用程序跟踪保护”的测试工具,可在Android 应用程序中添加阻止隐藏跟踪器的功能。

DuckDuckGo通过对流行的免费 Android 应用程序的分析显示,超过 96% 的应用程序包含跟踪器。绝大多数应用程序的代码中都隐藏了第三方跟踪器,这些跟踪器可监控在不同应用程序中的行为,并创建关于用户的个人资料,包括用户购买的商品、人口统计数据以及可用于供个性化广告的其他信息。

例如,在使用谷歌手机时,DuckDuckGo安装了36个流行的免费应用程序,其中包括LinkedIn、Facebook、亚马逊和 BBC Sounds。然后,在预览 DuckDuckGo 的 Android 跟踪器阻止功能后,将手机单独放置了四天,根本没有使用。但在 96 小时内,其中 23 个应用程序在后台进行了 630 多次跟踪尝试。

“即便不登录,相关的应用程序也会出发追踪器。而屏蔽这些跟踪器意味着 Facebook 和谷歌无法收到用户的隐私数据,并且无法推出个性化广告。”

DuckDuckGo 的产品总监 Peter Dolanjski 表示:“我们的想法是阻止从追踪者不拥有的应用程序中收集数据。”

与Apple 不同的是,DuckDuckGo 并不拥有基础设施(手机和底层操作系统)——来强制实施大规模更改,其隐私浏览器应用程序可以像 Google Play 商店中的任何其他应用程序一样,安装在手机上。

为了使应用跟踪保护发挥作用,DuckDuckGo 运行与虚拟专用网络 (VPN)相同的一组设备权限。Dolanjski 表示,虽然 Android 手机将 DuckDuckGo 应用程序显示为 VPN,但它不会以这种方式工作。

“没有数据从用户的手机传输,并且网络在本地运行。本质上,系统会阻止应用程序连接到用于跟踪的服务器。”

从用户的角度来看,使用 DuckDuckGo 的工具阻止跟踪器很简单:应用跟踪保护作为其 Android 应用设置菜单中的一个选项出现。用户只要打开菜单,该功能就会显示上周被阻止的跟踪器总数,并列出每个应用程序最近被阻止的内容。

例如,打开《每日邮报》的应用程序,DuckDuckGo 将立即阻止来自谷歌、亚马逊、华纳媒体、Adobe 和广告公司 Taboola 的跟踪器。

目前,跟踪器拦截器并未显示每个跟踪器试图发送的数据,但 Dolanjski 表示,未来版本将显示每个跟踪器通常试图访问的大类信息。他补充说,在测试中,该公司发现一些跟踪器会收集准确的 GPS 坐标和电子邮件地址。

“Android 版应用跟踪保护的测试版是有限的。它不会阻止所有应用程序中的跟踪器,也不包括浏览器,因为它们可能会将人们访问的网站视为跟踪器本身。”

此外,DuckDuckGo 表示,一些应用程序需要跟踪才能运行。虽然该工具可以跨其他应用程序阻止 Facebook 跟踪器,但它不支持 Facebook 应用程序本身中的跟踪器阻止。在 DuckDuckGo 的设置中,用户可以将任何其他在应用程序跟踪保护打开的情况下无法正常运行的应用程序列入白名单。

目前人们每天使用的应用程序中使用的跟踪器几乎没有透明度,大多数人会对他们被跟踪的数量感到震惊。

“阻止 Android 上的跟踪器是下一步让人们更好地控制公司如何处理他们的数据,这将大大减少这些第三方公司获得的关于用户的信息量。”Dolanjski 说道。

参考资料:

1、https://www.wired.co.uk/article/duckduckgo-android-app-tracking-block雷峰网雷峰网

谷歌面临着隐私危机。Gmail允许第三方开发者阅读电子邮件

DoNews 7月3日消息(记者 赵晋杰)继Facebook卷入剑桥分析数据泄露事件后,谷歌最近也被曝光了一项涉及用户隐私泄露的风险。

据《华尔街日报》周一报道,谷歌正在允许第三方软件开发商扫描数百万Gmail用户的收件箱内容,以服务其比价购物和旅程自动规划等新的服务或功能。更可怕的是,这些邮件不仅仅只是通过计算机软件进行电子扫描,还允许人类员工阅读。

谷歌对此回应称,它只会向已经审查过的外部开发商,以及那些用户已经明确同意访问邮件的开发商提供数据访问权。而且,谷歌自家员工也只能在“用户要求和同意时才能访问邮件,或者谷歌为了安全目的时。

尽管如此,依然有很多应用程序具有访问Gmail用户邮箱的权限。例如,邮件营销公司Return Path扫描了超过200万Gmail用户的收件箱,并让员工阅读8000封未经编辑的邮件。除了该公司,其他营销公司和应用开发商也可以访问Gmail邮件。

不过,就像《华尔街日报》所说,谷歌并非唯一一家这么做的公司,包括微软和Verizon的Oath Communications也都允许合作伙伴扫描用户邮件。

这样的情况,不禁让人想起引发8700万Facebook用户数据泄露的剑桥分析事件。大型社交平台多年来惯常的做法,就是允许第三方应用程序访问Facebook数据,结果引来了数据滥用的后果,最终遭到政府审查。

虽然没有证据表明Gmail的第三方开发人员已经滥用了数据,但能够查看和阅读私人邮件内容的做法,显然已经越过了个人隐私的边界。

而早在2017年6月,谷歌还曾宣布过一项决定,承诺不再为了个性化广告而扫描用户的Gmail邮件。目前来看,谷歌仍在允许第三方开发商这么做。(完)

如何在gofair推广,谷歌的三个火枪手教程:什么是谷歌的三个火枪手

如何在gofair推广,谷歌系三剑客教程:谷歌系三剑客是什么、有什么用?谷歌系三剑客有效吗?



谷歌系三剑客教程:谷歌系三剑客是什么、有什么用?谷歌系三剑客有效吗?

?谷歌系三剑客流程图

?谷歌系三剑客是什么?

谷歌系三剑客是谷歌系平台下最适合外贸推广的三个平台,被国内外贸界称为 谷歌系三剑客,包含:youtube, gofair, google plus。

? 谷歌系三剑客有什么用?谷歌系三剑客有效吗?

目前真实海外流量90%来自谷歌及其下属平台,而 谷歌系三剑客又是外贸推广工作的重中之重。

国内最好的外贸B2B,其实等于在剩下的10%海外流量中帮你找客户,而且外贸B2B的主要流量其实也是来自谷歌对其页面的收录;资深的外贸推广业内人士其实都明白这点的,只是他们因为要赚你的钱所以不能明说而已。

明白了这些,你何不直接上谷歌系平台推广呢?成本更低、收入排名更高!最关键的是,如果你通过 谷歌系三剑客推广,你是奔着90%的海外流量去的,避免了在10%的外贸B2B流量中恶性比价竞争。因此通过 谷歌系三剑客找到的外商,卖价也通常更高。

? 谷歌系三剑客教程?

因为篇幅有限我就大致说一下:

1)youtube:

设置好video channel,优化关键词,大量发布。

2)gofair:

优化关键词大量发布,最好自动采集到官网。

3)google plus:

加入行业社群,定期分享优质内容(如上传到youtube或gofair的视频)。

如何做google付费优化 外贸直通车的中间效果 阿里巴巴和谷歌推广的对比 谷歌太原总代理商体验中心 不会英语做外贸 谷歌付费推广有几种方式 谷歌竞价教程 谷歌体验中心是什么意思 网络整合营销公司 谷歌广告优化师怎么考

Google发布了最新的Google play支持列表,包括glory 20/Nova 5T

IT之家6月29日消息 谷歌近期更新了支持Google Play服务的设备名单,根据这份名单内容显示,最新发布的荣耀20、荣耀20 PRO手机将提供Google Play服务,另外还有名为nova 5T、nova 5T PRO的设备也位列其中。

在这份名单中的设备都将支持最新的Google Play服务,因此荣耀20系列手机不会受到谷歌服务和安卓系统更新禁令的影响。

除此之外,今天据路透社报道,特朗普表示,向华为出售零件的美国公司应被允许继续出售。美国商务部对于华为的禁售令可能会出现变数。