应用程序开发的最佳框架是什么?这五个框架是开发人员必需的构件

移动APP和小程序,是我们每天都要用到的应用程序,但你知道应用程序是怎么开发出来,需要哪些开发框架吗?

今天,在线认证培训课程专家|圣普伦和大家分享10个最受开发者喜爱的开发框架。

1、Reасt Nаtive

Fасebооk于 2018 年发布了Reасt Native,一个基于 JаvаSсriрt 的 арр 开发框架。这个框架在全世界的开发者中需求量很大,有42%的移动应用程序开发者使用它。通过Reасt Nаtive开发的APP,在安卓和iOS 上都能达到原生的视觉效果和用户体验。

这个框架的主要特点是使用单一的соde сrоss-рlаtfоrm арр 开发,这使得它非常适合рорulаr аmоngарр 开发者以及商业所有者,раrtiсulаrly 启动。因为它是最有效和节省时间的,所以它允许在市场上保持竞争。

Reасt Nаtive框架的主要特点是,它是一个单代码的跨平台APP开发框架,适用性强,高效且节省时间,因此备受全球开发者喜爱。

2、Flutter

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。

  • 快速开发

毫秒级的热重载,修改后,您的应用界面会立即更新。使用丰富的、完全可定制的widget在几分钟内构建原生界面。

  • 原生性能

Flutter包含了许多核心的widget,如滚动、导航、图标和字体等,这些都可以在iOS和Android上达到原生应用一样的性能。

3、Iоniс

Iоniс 是免费的开源应用开发框架,基于Аngulаr 和Арасhe Соrdоvа开发,该框架使开发人员能够为三个不同的平台(Аndrоid、iОS 和 Windоws)创建跨平台APP,它内置丰富的原生功能供开发人员使用。Iоniс还提供丰富的UI元素,比如例如列表视图、过滤器、表单、导航菜单等等。

4、Xamarin

Miсrоsоft 的 Xаmаrin 也是一个跨平台移动APP框架,该框架通过使用包含特定语言的软件框架(例如 Net аnd С# ),实现了同类最佳移动应用的开发。使用 Xаmаrin 创建的移动应用具有灵活的原生应用,为用户提供独一无二的用户体验。开发人员开源使用 Xаmаrin 框架来来构建包含АРI、组建等各种功能的生态,此外还集成了其他库、语言以及其他工具我,使得开发变得更为容易。

5、Swiftiс

Swiftiс是一个仅适用于iOS的开发框架,由于其拥有对用户友好的界面,易于使用,还简化了平台导航,因此非常受iOS开发者喜爱。Swiftiс还提供了30天资金退款保障,6个月成功保证。如果你没有收到预期的结果,你将会获得 6 个月的免费服务。

6、Соrоnа SDK

Соrоnа SDK是一个免费的开源应用开发框架,主要用于创建移动游戏APP。这个框架是建立在 Luа 脚本语言之上的,它是轻量级的,易于使用,并且适用于为iOS、安卓创建移动APP。

7、Аррсelerаtоr

Аррсelerаtоr是一个开源跨平台开发框架,它利用Ally和内置UI元素来简化APP开发,为开发人员节省开发时间。

Аррсelerаtоr集成自己的API和UP元件,以创建高性能APP。这款框架的最大亮点是,它基于云上,所以开发者随时随地都能进行访问。

8、Nаtive Sсriрt

Nаtive Sсriрt是一个移动APP开发框架,适用于安卓、iOS,它不使用 web 视图来呈现用户界面,Nаtive Sсriрt 集成原生API,使用Аngulаr、 JS、Vue.js、SML、 СSS等技术,提供可媲美原生的超高性能。

9、РhоneGар

РhоneGар的主要语言是HTML5和СSS3,因此该框架非常适合用来为相机、GPS、计量器等硬件开发适配的移动程序,РhоneGар 相对简单易学,所有开发人员都可以创建一个单一的 арр ,并在多个设备上使用。

10、Mоbile Аngulаr UI

Mоbile Аngulаr UI 是用 HTML5、Bооtstrар 和 АngulаrJs 构建的。熟悉 Twitter Bооtstrар 和 АngulаrJS 的人可以快速学习如何使用移动 Аngulаr UI 进行开发。它既可以用来开发Web端应用,也可以用来开发移动端APP。

谷歌:有必要尽快制定欧盟-美国数据传输框架

最近,奥地利数据保护局(DPA)认定,当地一家网站使用Google Analytics违反了GDPR,因为美国情报机构有可能获得用户数据。这也使得荷兰当局表示,它正在调查荷兰的两个类似索赔,它将很快发布关于是否禁止Google分析的决定。鉴于这些事件,Google现在发表了一篇博文强调需要一个强大的欧盟-美国数据传输框架。

Google指出,网络业务的全球规模和通过数据流共享信息的能力给经济带来了重大好处。它表示,高价值的媒体和信息服务的传播将促进在未来几年内仅欧盟就会有数十亿欧元的流入。因此,有必要尽快为欧盟-美国的数据流动制定强有力的框架。

在谈及奥地利DPA的决定时,Google表示不赞成。这家公司表示,自己在过去15年里一直向全球企业提供Analytics服务,并且从未收到美国情报机构分享Google分析数据的请求。考虑到该地区严格的法律,它也不期望这样的请求很快到来。

此外,Google还强调,它已经为客户提供了一些补充措施来保护他们的数据。虽然奥地利的裁决目前只影响到一个出版商,但它担心这会灾难性的急剧下滑,即理论上的风险会导致企业无法使用Google分析。这家科技公司强调这是对全球经济的一种风险。

为此,Google提出应尽快制定欧盟-美国数据流框架以保护所有相关方的各自利益。

无论各国政府是否听从其对这种框架的紧急呼吁,Google表示,它将继续确保其所有产品的数据保护做法达到最高水平。

为什么智能眼镜是无用的和限制性的

从手机开始,一切我们身上能穿戴的东西都在智能化。但现在问题来了,手机、手表都取得了成功,而智能眼镜,似乎一直就是失败的。问题在哪里呢?现在有没有值得买的呢?

功能不明晰

智能产品能被广泛接受,都有一个大的前提:它解决了之前没有解决、人们又比较需要的问题。手机解决了太多问题,手表手环解决了查看心率、步数甚至行动GPS轨迹这种问题。那么智能眼镜呢?

摄像头、耳机集成一体的“智能眼镜”

业界有过3种方向的尝试。第一种是和耳机结合起来,一物两用解决听这个问题。第二种则是想解决看的问题,在视网膜投影屏幕,但解决的不好。第三中是解决拍摄的问题,在镜框上集成摄像头。

现在问题来了,这几个功能似乎都不是刚需,除了耳机,要想开启功能,可能都要进行一番操作。而眼镜集成拍摄功能则在国外引起了很大的反感:它可能侵犯了被拍摄者的隐私。

技术有难度

智能眼镜的发展制约在另外一方面是技术难度。这其中的关键是用户怎么看一直也没有多好的方案。

谷歌眼镜解决了很少的问题

谷歌眼镜的方案是一小块液晶屏。这个液晶屏的成本很高,导致当时谷歌眼镜一直卖的很贵,价格高达1500美元,国内几经转手甚至卖到2万以上。并且谷歌也没有想清楚到底有什么用,因为当时语音指令也不成熟不完善,如果不能理解人的语音指令,那么输入靠手机,这就只相当于一块扩展屏,并且屏幕不大、分辨率不高。

微小设备往视网膜投影直接成像的技术目前还在开发中

开过新车的人,都了解现在汽车有个功能叫HUD,也就是抬头显示,这个技术可以在屏幕上投影出时速、导航信息等等。所以能不能普通眼镜也实现这样的投影?答案是不能,目前没有这样的技术,可以直接在视网膜上投影一层图像。

AR设备目前依旧较大,解决不了佩戴舒适度的问题

AR、VR能做到眼前多一个图像,但VR解决不了还要看世界这个问题,AR眼镜的成本高、笨重也是难题,AR目前看更多的是商用工业用,VR更偏向游戏,它们都不是解决日常佩戴,当然研发的时候也不是考虑日常佩戴。

续航是软肋

眼镜显然不是一个时常可以摘下来充电的产品,无论近视远视,摘眼镜都不是可选项。这就涉及续航问题。这个问题不在于能不能解决,而是取舍。

AirPods的单次充电续航也只有几个小时

现在普通的眼镜,金属框架树脂镜片,总质量只有几十克。但如果塞入电路、功能模块以及最重要的——电池,重量陡增,增加多少,这对人的耳朵是个考验,如果不合适会非常疼痛。但如果轻,续航就普遍不行,电池能量密度目前依旧是诺贝尔奖的难度。

扎克伯格为雷朋的Stories做宣传

雷朋的Stories听音乐时间是3小时,这就是目前电池重量和续航平衡的结果,而耳机眼镜并不需要太高的智能,但在用户耳朵能承受的范围内,还做不到多好的续航表现。

现在可以说是迷茫期。作为用户量巨大的眼镜,从重量上的制约导致了功能、续航受限,在技术上目前也没有特别振奋的突破,在有耳机、手机的前提下,用户对智能眼镜的需求程度非常低,加上用户痛点难题,这些组合起来的难度极高,现在看起来似乎只有听音乐还可以一用。

(7786779)

从框架的优缺点开始,这是一个介绍tensorflow的极简教程

随着 Tensorflow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架。而在昨天机器之心发起的框架投票中,2144 位参与者中有 1441 位都在使用 TensorFlow 框架,是所有框架中使用率最高的。但 TensorFLow 这种静态计算图有一定的学习成本,因此也阻挡了很多初学者入坑。本文介绍了学习 TensorFlow 的系列教程,旨在通过简单的理论与实践帮助初学者一步步掌握 TensorFlow 的编程技巧。这一系列教程分为 6 部分,从为什么选择 TensorFlow 到卷积神经网络的实现,介绍了初学者所需要的技能。机器之心在本文介绍了 PyTorch 和 Caffe 等深度学习框架的优缺点及 TensorFlow 基础,包括静态计算图、张量、TensorBoard 可视化和模型参数的保存等。

机器之心此前也介绍过很多 TensorFlow 的学习资源,读者可结合这些资源阅读该系列教程:

学习了!谷歌今日上线基于 TensorFlow 的机器学习速成课程(中文版)机器之心 GitHub 项目:从零开始用 TensorFlow 搭建卷积神经网络教程 | 从零开始:TensorFlow 机器学习模型快速部署指南分布式 TensorFlow 入坑指南:从实例到代码带你玩转多机器深度学习三天速成!香港科技大学 TensorFlow 课件分享TensorFlow 从基础到实战:一步步教你创建交通标志分类神经网络为什么选择 TensorFlow?在本文中,我们将对比当前最流行的深度学习框架(包括 Caffe、Theano、PyTorch、TensorFlow 和 Keras),帮助你为应用选择最合适的框架。

1. Caffe:第一个主流产品级深度学习库,于 2014 年由 UC Berkeley 启动。

优点:

快速支持 GPU漂亮的 Matlab 和 Python 接口缺点:

不灵活。在 Caffe 中,每个节点被当做一个层,因此如果你想要一种新的层类型,你需要定义完整的前向、后向和梯度更新过程。这些层是网络的构建模块,你需要在无穷无尽的列表中进行选择。(相反,在 TensorFlow 中,每个节点被当做一个张量运算例如矩阵相加、相乘或卷积。你可以轻易地定义一个层作为这些运算的组合。因此 TensorFlow 的构建模块更小巧,允许更灵活的模块化。)需要大量的非必要冗长代码。如果你希望同时支持 CPU 和 GPU,你需要为每一个实现额外的函数。你还需要使用普通的文本编辑器来定义你的模型。真令人头疼!几乎每个人都希望程序化地定义模型,因为这有利于不同组件之间的模块化。有趣的是,Caffe 的主要架构师现在在 TensorFlow 团队工作。专一性。仅定位在计算机视觉(但做得很不错)。不是以 Python 编写!如果你希望引入新的变动,你需要在 C++和 CUDA 上编程(对于更小的变动,你可以使用它的 Python 和 Matlab 接口)。糟糕的文档。安装比较困难!有大量的依赖包。只有少量种类的输入格式,仅有一种输出格式 HDF5(虽然你总是可以使用它的 Python/C++/Matlab 接口来运行,并从中得到输出数据)。不适用于构建循环网络。2. Theano:由蒙特利尔大学研究团队构建。Theano 的顶层构建了数值开源深度库,包括 Keras、Lasagne 和 Blocks。Yoshua Bengio 在 2017 年 9 月 28 日宣布,Theano 的开发将终止。因此实际上 Theano 已死!

优点:

计算图的抽象很漂亮(可媲美 TensorFlow)为 CPU 和 GPU 都做了优化很好地适应数值优化任务高级封装(Keras、Lasagne)缺点:

原始的 Theano 只有比较低级的 APIimport numpy for _ in range(T): h = torch.matmul(W, h) + b大型模型可能需要很长的编译时间不支持多 GPU错误信息可能没有帮助(有时候令人懊恼)3. Pytorch:2017 年 1 月,Facebook 将 Python 版本的 Torch 库(用 Lua 编写)开源。

优点:

提供动态计算图(意味着图是在运行时生成的),允许你处理可变长度的输入和输出,例如,在使用 RNN 时非常有用。另一个例子是,在 PyTorch 中,可以使用标准 Python 语法编写 for 循环语句。大量预训练模型大量易于组合的模块化组件易于编写自己的图层类型,易于在 GPU 上运行「Tensorboard」缺少一些关键功能时,「Losswise」可以作为 Pytorch 的替代品缺点:

正式文档以外的参考资料/资源有限无商业支持4. Tensorflow:由较低级别的符号计算库(如 Theano)与较高级别的网络规范库(如 Blocks 和 Lasagne)组合而成。

优点:

由谷歌开发、维护,因此可以保障支持、开发的持续性。巨大、活跃的社区网络训练的低级、高级接口「Tensorboard」是一款强大的可视化套件,旨在跟踪网络拓扑和性能,使调试更加简单。用 Python 编写(尽管某些对性能有重要影响的部分是用 C++实现的),这是一种颇具可读性的开发语言支持多 GPU。因此可以在不同的计算机上自由运行代码,而不必停止或重新启动程序比基于 Theano 的选项更快的模型编译编译时间比 Theano 短TensorFlow 不仅支持深度学习,还有支持强化学习和其他算法的工具。缺点:

计算图是纯 Python 的,因此速度较慢图构造是静态的,意味着图必须先被「编译」再运行5. Keras:Keras 是一个更高级、对用户最友好的 API,具有可配置的后端,由 Google Brain 团队成员 Francis Chollet 编写和维护。

优点:

提供高级 API 来构建深度学习模型,使其易于阅读和使用编写规范的文档大型、活跃的社区位于其他深度学习库(如 Theano 和 Tensorflow,可配置)之上使用面向对象的设计,因此所有内容都被视为对象(如网络层、参数、优化器等)。所有模型参数都可以作为对象属性进行访问。例如:

model.layers[3].output 将提供模型的第三层model.layers[3].weights 是符号权重张量的列表缺点:

由于用途非常普遍,所以在性能方面比较欠缺与 Tensorflow 后端配合使用时会出现性能问题(因为并未针对其进行优化),但与 Theano 后端配合使用时效果良好不像 Tensorflow 或 PyTorch 那样灵活TensorFlow 基础TensorFlow 是一种采用数据流图(data flow graphs),用于数值计算的开源软件库。其中 Tensor 代表传递的数据为张量(多维数组),Flow 代表使用计算图进行运算。数据流图用「结点」(nodes)和「边」(edges)组成的有向图来描述数学运算。「结点」一般用来表示施加的数学操作,但也可以表示数据输入的起点和输出的终点,或者是读取/写入持久变量(persistent variable)的终点。边表示结点之间的输入/输出关系。这些数据边可以传送维度可动态调整的多维数据数组,即张量(tensor)。

计算图与会话学习 Tensorflow 的第一步是了解它的主要特色——「计算图」方法。基本上所有的 Tensorflow 代码都包含两个重要部分:

1. 创建「计算图」,表示计算的数据流

2. 运行「会话」,执行图中的运算

事实上,TensorFlow 将计算的定义与其执行分开。这两个部分将在以下各节中详细说明。在此之前,请记住第一步是导入 Tensorflolibrary!

import tensorflow as tf这样,Python 就可以访问 TensorFlow 的所有类、方法和符号。使用此命令,TensorFlow 库将在别名「tf」下导入,以便以后我们可以使用它而不必每次键入其全称「TensorFlow」。

谷歌现在使用tensorflow每天拦截超过1亿条Gmail垃圾邮件

谷歌于2017年初推出了安全措施,旨在利用机器学习模式打击Gmail中的垃圾邮件和网络钓鱼攻击。当时公司声称这些工具能够以99.9%的准确率检测到不需要的和恶意的电子邮件。现在,谷歌通过其开源机器学习框架TensorFlow加强了Gmail的反垃圾邮件功能,该框架现在与其现有的Gmail安全过滤器相结合,正在使用这种集成来每天抵御1亿条垃圾邮件。

谷歌反滥用技术产品经理Neil Kumaran在博客文章中写道,TensorFlow帮助该公司将其垃圾邮件过滤器扩展到以前不容易捕获的其他类型的垃圾邮件。这些类别包括使用图像隐藏恶意内容的邮件和利用新域来隐藏合法流量内垃圾邮件的电子邮件。

但库马兰指出,谷歌正在采取预防措施,以便它不会将重要的电子邮件误认为是垃圾邮件。虽然应用机器学习来更准确地确定垃圾邮件可能需要额外的时间,但Kumaran说TensorFlow可以加速这个过程。

随着威胁形势继续快速扩张,谷歌计划将TensorFlow应用于打击网络钓鱼和其他形式的恶意软件。

双流会计培训-双流益才会计培训

现在CPA考试实行六加一的办法。六加一是专业阶段(会计、审计、财务管理、经济、税收法律以及企业战略和风险管理)的六个科目,也是一个综合阶段。只有专业阶段考试可以考综合阶段考试。

双流会计培训-双流益财会计培训

CPA专业阶段考试成绩有效期为5年。从通过第一门考试的那一年开始计算,这五年不是间歇性的五年,而是滚动的五年。也就是说,从通过第一科那一年起,如果在5年内没有通过其他科目,则第一年通过的科目必须重新参加考试。

CPA专业阶段考试共有6门科目,考生在连续5年内通过所有科目考试,即可取得CPA专业阶段考试合格证。

CPA考试采用闭卷考试、电脑化考试。也就是,在计算机终端拿试题作答,然后提交答案。应聘者可选择使用仅限于考试系统支持的输入法及其功能,考试系统支持5种输入法:微软拼音输入法、谷歌拼音输入法、搜狗拼音输入法、五笔输入法、万能五笔输入法。

CPA哪科难度最大?

根据官方统计,CPA考生认为最难的科目是:会计、审计、财务管理、税法、经济法律、企业战略、风险,而最难的是会计专业,应该是会计领域中最难的,应该是会计领域中最难的,应该是会计领域中比较深的知识层次。

推荐大家根据会计这科的重点内容,打印出来在早晨多看多看,会计记忆的内容没有别的几科,所以这个方法就可以了。

下一步是审计,审计这门科目要比会计要难一点,其实说不上容易一些,会计的基础打好了,会计的知识能理解弄懂,审计也不会很难,税法除了要记住公式,最重要的是理解,死记硬背是很难通过考试的。

审核部门在记忆和理解审核程序的同时,还有很多工作要做。每个人都可以自己绘制模型图和框架图,这样才能有效地提高审计知识点,提高记忆效率。

开源|场景:Android开源页面导航和合成框架

Scene 是字节跳动技术团队开源的一款 Android 页面导航和组合框架,用于实现 Single Activity Applications,有着灵活的栈管理,页面拆分,以及完整的各种动画支持。

Scene 最初用于解决西瓜视频的直播业务在演进过程中遇到的问题,后来又在抖音的拍摄工具中落地,经过了实践与验证,于是团队觉得将其开源到社区,希望能够帮助大家在更多的场景解决问题。

Github 项目地址与使用文档:GitHub – bytedance/scene: Android Single Activity Applications framework without Fragment.。

开发背景

西瓜视频面临的问题

西瓜视频在 1.0.8 版本有做过一次播放体验的优化,希望首页正在播放的短视频跳转到详情页面时,能够有一个平滑的动画过渡。

下面的视频是老版本的过度效果:

下面的视频是新版本的过度效果:

这种复杂的过渡动画,是不可能拿 Activity 实现的。然而 Fragment 在那个时候也会出现各种怪异的状态保存引发的崩溃(虽然知道崩溃的原理,但是不能接受这种设计),于是西瓜视频技术团队设计了名为 Page 的 UI 方案,来实现过渡动画这个需求。

但是 Page 本身跟业务耦合非常严重,没法单独抽出去给其他场景用。后来,随着西瓜直播业务的壮大,也有了需要类似框架的需求,为了解决 Activity 栈管理太弱、各种黑屏、动画能力太弱等问题,同时解决 Fragment 崩溃过多问题,我们开发了 Scene 这套通用的框架。

下面是西瓜长视频详情页和抖音拍摄页面使用Scene的场景截图:

西瓜的长视频页面和抖音的拍摄页面截图

Activity/Fragment 的不足

这里简单列下 Activity 和 Support 28 的 Fragment 的不足,部分问题已经在 Android X 的 Fragment 上修复了。

页面导航对比 Activity

  1. 栈管理弱,Intent+LaunchMode 的设计,使得开发者在使用的时候要么极容易出错,要么用 Hack 做对了但是动画过度黑屏;
  2. Activity 性能差,普通的空白页面切换也得 60、70ms 耗时(基于三星 S9 设备测试);
  3. 因为销毁恢复的强制要求: 导致的 Activity 动画能力非常弱,无法直接拿到前后两个页面的 View 也就无法简单的实现复杂的交互动画; SharedElement 动画能力弱,动画的瞬间不得不来回传递上下两个 Activity 各种控件的 Bitmap; Android 9 之前 Activity 每次启动新的 Activity,都需要上个页面执行完 onSaveInstance,这一步影响了页面打开的速度;
  4. Activity 依赖 Manifest 给 Android 动态化增加了难度,需要对系统的 Instrumentation ActivityThread 进行各种 Hack ;
  5. 依赖注入很难,因为创建 Activity 对象的流程在 Android 8 之前是没有 API 暴露给外部处理的;
  6. 因为 Window 的机制导致做悬浮窗播放也是问题,导致实现窗口播放必须依赖了一个危险的悬浮窗权限;
  7. 共享元素动画在某些版本的 Framework 层有 NPE,无法解决。

页面组合对比 Fragment

  1. 各种奇怪的崩溃,就算不用 Fragment,但是用了 AppCompatActivity 还是会在 onBackPressed 里面触发崩溃;

对于这种情况,西瓜直接在自己的 Activity 基类对 super.onBackPressed() 进行了try catch。

  1. add/remove/hide/show 操作不是立刻执行,就算 commitNow 执行了 Fragment 的状态,也不能保证他的 Child Fragment 状态刷新到最新。在执行了 getChildFragmentManager().executePendingTransactions() 后,开发者会误以为 Child Fragment 都已经切到最新的 Parent Fragment 状态,其实并没有;
  2. Fragment 有两套 Lifecycle,View Lifecycle 和 Fragment 实例 Lifecycle;
  3. Fragment show/hide 方法不会触发生命周期回调,调用了 hide 不会触发 onPause/onStop,只是修改了 View 的可见性;
  4. Fragment 动画能力有限,只能使用资源文件,而且页面导航无法保证 Z 轴正确;
  5. 就算 Fragment 已经被销毁,但是 View.OnClickListener onClick 回调依然继续触发,导致回调内部不得不补大量的判空逻辑;

  1. 导航功能非常弱,除了打开和关闭,没有更加高级的栈管理,导航的回调连顺序都保证不了,有可能一次导航触发多次回调;
  2. 原生 Fragment 和 Support Fragment 的生命周期并不完全相同;
  3. 同时支持 add/remove/hide/show+addToBackStack 使得 Fragment 的代码极度混乱。

Scene 框架

功能特点

Scene 提供页面导航页面组合两大功能,特点如下:

  1. 基于 View 实现,非常轻量;
  2. 只有一个 Lifecycle,View 销毁,那么 Scene 也会销毁,不会出现 Fragment 有两套 Lifecycle 的问题;
  3. 导航栈管理非常灵活,不会出现页面切换黑屏问题;
  4. 无论是导航操作还是组合操作,通常都是直接执行,不需要区分 commit 和 commitNow;
  5. 不强制要求状态保存,甚至可以把状态保存控制在页面级别,增强组件通讯的能力;
  6. 有完整的共享元素动画支持;
  7. 页面导航和页面组合功能可以独立使用。

基本概念

Scene 框架有3种基本组件:Scene、NavigationScene、GroupScene。

Scene

NavigationScene

GroupScene

Scene 使用

简单使用

这里介绍简单的上手,更多用法见 Github 仓库的示例。

接入

添加依赖:

创建首页:

创建 Activity:

添加到 Manifest.xml,注意把输入法模式也改了:

运行就可以了。

这是新应用想全部使用 Scene 写的方式。如果是老应用重构迁移,或者只想用页面组合替代 Fragment,导航依旧用 Activity 的做法,可以见 Github 的 Demo。

导航

打开新页面:

返回:

打开页面拿结果:

设置结果:

组合

组合的 API 类似 Fragment,继承 GroupScene,然后可以操作任意 Scene 添加到自己的 View 布局内:

示例:

通讯

Scene 支持 ViewModel,可以通过 by activityViewModels,by viewModels 拿到托管到 Activity 或者自己的 ViewModel:

示例:

动画

在 Push 的时候,通过 PushOptions 可以配置简单的过场动画:

复杂的共享元素动画,手势动画,参考 Demo。

右划返回

Scene 内置右划返回手势,你直接继承 AppCompatScene,然后打开手势:

核心设计思路

  1. Scene 本身是在 View 上面包一层生命周期,通过一个叫 LifeCycleFragment 的原生 Fragment 分发生命周期事件给框架内部,再由父组件同步给子组件。
  2. 父子组件同步生命周期,在原则上: 进入的时候,先执行父组件的生命周期回调,再执行子组件的生命周期回调; 退出的时候,先执行子组件的生命周期回调,再执行父组件的生命周期回调;
  3. NavigationScene 负责导航栈的处理,GroupScene 负责页面组合的处理,有点类似 iOS 的 UINavigationController/UIViewController,WinRT 的 Page。拆分的原因,是出于考虑性能,因为导航这个任务,由于动画的要求,本身的层级就会比普通的页面组合复杂,动画的 API 也更加强大。这两件事情,本身影响的生命周期也不一样,导航会影响之前的页面,而组合并不会。
  4. 生命周期和动画的处理原则是,先执行完生命周期,然后拿前后两个页面的 View 做动画,所以避免了Activity 动画需要在页面之间来回传递 Bitmap 来模拟控件这种繁琐的步骤,也避免了 Activity 动画黑屏的问题。
  5. 最后再由于 Transition 库过于无力,所以用系统核心的 GhostView,Scene 重头实现一遍共享元素动画。

未来与总结

Scene Router,开发中,以便可以支持流行的 Android 组件化开发。

Scene Dialog,开发中,用于解决 Android 框架的 Dialog 因为是基于 Window 会盖在普通的 View 之上的问题。

关于单 Activity 的想法,业界早在 Fragment 刚推出的时候就有探讨,社区诞生了 Conductor 之类的框架,甚至这2年,Google 官方也在做 Navigation Component,但是毕竟 Fragment 的坑太大,基于Fragment 做导航,总免不了受限于 Fragment 的兼容性,以至于后来,Google 为了解决这些兼容性问题,直接打算魔改 Fragment,废掉之前用了很多年的接口。

基于 View 重新实现的导航和组合方案,一方面是没有之前的技术债,一方面可以跳出 Google 的想法,比如说可以控制状态保存的范围,来实现更加强大的动画能力和组件通讯能力,这是官方的组件不会提供给开发者的。

仓库中的 Demo,已经把 Android 日常开发中大部分场景都补了示例,没有在本文中列出来的功能,可以参考 Demo 的写法。

参考资料

Single Activity: Why, When, and How (Android Dev Summit '18)(https://www.youtube.com/watch?v=2k8x8V77CrU)

Fragments: Past, Present, and Future (Android Dev Summit '19)(https://www.youtube.com/watch?v=RS1IACnZLy4)

Conductor (https://github.com/bluelinelabs/Conductor)

Uber RIBs (https://github.com/uber/RIBs)

欢迎关注「字节跳动技术团队」

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 上就已经提供了一个实验性质的版本。

Java程序员必须有15个框架。学习这些不是问题

Java 程序员方向太多,且不说移动开发、大数据、区块链、人工智能这些,大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢?

今天,给大家列举了一些通用的、必须掌握的框架,学会这些,20K+ 不是问题。

1.Spring

毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 AOP 两大利器,大大简化了软件开发复杂性。并且,Spring 现在能与所有主流开发框架集成,可谓是一个万能框架,Spring 让 JAVA 开发变得更多简单。

2.Spring MVC

Spring MVC 是一个 MVC 开源框架,用来代替 Struts。它是 Spring 项目里面的一个重要组成部分,能与 Spring IOC 容器紧密结合,以及拥有松耦合、方便配置、代码分离等特点,让 JAVA 程序员开发 WEB 项目变得更加容易。

3.Spring Boot

Spring Boot 是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度,简省繁重的配置。

Spring Boot提供了各种组件的启动器(starters),开发者只要能配置好对应组件参数,Spring Boot 就会自动配置,让开发者能快速搭建依赖于 Spring 组件的 Java 项目。

4.Spring Cloud

Spring Cloud 是一系列框架的有序集合,是目前最火热的微服务框架首选,它利用Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。

5.Mybatis/ iBatis

iBatis 曾是开源软件组 Apache 推出的一种轻量级的对象关系映射持久层(ORM)框架,随着开发团队转投Google Code 旗下,ibatis 3.x 正式更名为 Mybatis,即:iBatis 2.x, MyBatis 3.x。

6.Hibernate

Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据库表建立映射关系,是一个全自动的 orm 框架。Hibernate 可以自动生成 SQL 语句,自动执行,使得 Java 程序员可以随心所欲的使用对象编程思维来操作数据库。

7.Dubbo

Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求。

8.Netty

Netty 是由 JBOSS 提供的一个开源的、异步的、基于事件驱动的网络通信框架,用 Netty 可以快速开发高性能、高可靠性的网络服务器和客户端程序,Netty 简化了网络应用的编程开发过程,使开发网络编程变得异常简单。

9.Shiro

Apache Shiro是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。

10.Ehcache

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的CacheProvider。它使用的是 JVM 的堆内存,超过内存可以设置缓存到磁盘,企业版的可以使用 JVM 堆外的物理内存。

11.Quartz

Quartz 是一个基于 Java 的广泛使用的开源的任务调度框架,做过定时任务的没有没用过这个框架的吧?

12.Velocity

Velocity 是一个基于 Java 的模板引擎,简单而强大的模板语言为各种 Web 框架提供模板服务,来适配 MVC 模型。

13.jQuery

jQuery是一个快速、简洁的 JavaScript 框架,它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,极大地简化了 JavaScript 编程。

虽然哥好久没做 Web 开发了,但哥也不曾忘记,也还记得一些常用的写法,如:

$(“#wx”).html(“javastack”);

14.JUnit

JUnit 是一个 Java 语言的单元测试框架,绝大多数 Java 的开发环境都已经集成了 JUnit 作为其单元测试的工具。

15.Log4j

Log4j 是 Apache 的一个开源日志框架,通过 Log4j 我们可以将程序中的日志信息输出到控制台、文件等来记录日志。作为一个最老牌的日志框架,它现在的主流版本是 Log4j2。Log4j2是重新架构的一款日志框架,抛弃了之前 Log4j 的不足,以及吸取了优秀日志框架 Logback 的设计。

如果上面的大部分没用过,甚至都没听说过,那就怀疑你是不是个假程序员了,要加油了。

这些都是 Java 程序员必备的开发框架,有些不一定是首选的选择,但这些一定是 Java 程序员必备的。

投掷openai!谷歌的开源强化学习框架多巴胺

编辑 | AI 前线公众号

译者 | 无明

背景介绍

近日 OpenAI 在 Dota 2 上的表现,让强化学习又火了一把,但是 OpenAI 的强化学习训练环境 OpenAI Gym 却屡遭抱怨,比如不太稳定、更新不够及时等。今日,谷歌推出了一款全新的开源强化学习框架 Dopamine,该框架基于 Tensorflow,主打灵活性、稳定性、复现性,能够提供快速的基准测试。

配套开源的还包括一个专用于视频游戏训练结果的平台,以及四种不同的机器学习模型:DQN、C51、简化版的 Rainbow 智能体和 IQN(Implicit Quantile Network),相比 OpenAI 的强化学习基准,Dopamine 更多关注 off-policy 方法。 为了实现可重复性,Github 代码包括 Arcade Learning Environment 支持的全部 60 个游戏的完整测试和训练代码,并遵循标准化经验评估结果的最佳实践。 除此之外,谷歌还推出了一个网站,允许开发人员将训练中的多个智能体的运行情况快速可视化。

强化学习(RL)领域的研究在过去几年中取得了重大进展,这些进展让相关代理能够以超人类水平玩游戏——包括 DeepMind 的 DQN(AlphaGo 和 AlphaGo Zero)和 Open AI Five。具体地说,在 DQN 中引入重放记忆可以利用以前的代理经验,大规模分布式训练可以在多个工作进程之间分配学习任务,分布式方法让代理对完整的分布(而不只是期望值)进行建模,从而实现更完整的学习。这方面的进展非常重要,因为相关算法还可以应用到其他领域,例如机器人技术。

通常,这类进展要求在设计方面进行快速迭代——通常没有明确的方向——并颠覆已有的方法结构。然而,大多数现有的 RL 框架并不会提供灵活性和稳定性组合,让研究人员能够有效地迭代 RL 方法,发现新的但可能没有直接明显好处的研究方向。此外,在现有框架中重现结果通常太耗时,从而导致科学的可重现性问题。

今天,我们推出了一个全新的基于 Tensorflow 的框架——Dopamine,旨在为 RL 研究人员提供灵活性、稳定性和可重复性。这个框架受大脑奖励动机行为主要组件的启发,并反映了神经科学与强化学习研究之间强的历史联系,旨在实现可以推动激进发现的投机性研究。该框架还提供了一组解释如何使用框架的 Colab。

https://github.com/google/dopamine/blob/master/dopamine/colab/README.md

易用性

清晰和简洁是这个框架的两个关键设计考虑因素。我们提供的代码非常紧凑(大约 15 个 Python 文件),并且有详细的文档。这是基于 Arcade 学习环境(一个成熟的、易于理解的基准)和四个基于值的代理 DQN、C51、Rainbow 代理的简化版本以及隐式分位数网络代理(刚在上个月的国际机器学习大会上发布)实现的。我们希望这种简洁能够让研究人员轻松了解代理的内部运作并快速尝试新的想法。

可重现性

我们非常关注可重现性在强化学习研究中的作用。我们的代码通过了完整的测试覆盖,这些测试用例也可作为某种形式的文档使用。此外,我们的实验框架遵循了 Machado 等人给出的使用 Arcade 学习环境标准化进行经验评估的建议。

基准测试

对于研究人员来说,能够根据已有方法快速对想法进行基准测试是非常重要的。因此,我们以 Python pickle 文件(用于使用我们的框架训练的代理)和 JSON 数据文件(用于与其他框架训练的代理进行比较)的形式提供了受 Arcade 学习环境支持的 60 个游戏的完整训练数据。我们还提供了一个网站,可以在上面快速查看所有的训练运行情况。下图展示了我们的 4 个代理在 Seaquest 上的训练运行情况。

x 轴表示迭代,其中每次迭代是 100 万个游戏帧(4.5 小时的实时游戏);y 轴是每场比赛获得的平均分数;阴影区域显示来自 5 次独立运行的置信区间。

我们还提供这些代理训练的深度网络、原始统计日志以及 Tensorflow 事件文件。这些都可以从我们的网站上下载。

开源项目地址:

https://github.com/google/dopamine

可视化网站:

https://google.github.io/dopamine/baselines/plots.html

相关下载链接:

https://github.com/google/dopamine/tree/master/docs#downloads

英文原文

https://ai.googleblog.com/2018/08/introducing-new-framework-for-flexible.html