关于框架:OpenVI论文解读系列达摩院开源低成本大规模分类框架FFC-CVPR论文深入解读

一、背景解决该问题最直观的形式是通过集群的形式耗费更多的显卡资源,但即便如此,海量ID下的分类问题,仍然会有如下几个问题:1.)老本问题:分布式训练框架 + 海量数据状况下,内存开销、多机通信、数据存储与加载都会耗费更多的资源。2.)长尾问题:理论场景中,当数据集达到上亿ID时,往往其绝大部分ID内的图片样本数量会很少,数据长尾散布非常明显,间接训练难以获得较好成果。 二、办法在介绍办法之前,首先回顾下超大规模分类以后存在的次要挑战点: 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1212406?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

July 5, 2023 · 1 min · jiezi

关于框架:饿了么开源自研多端框架-MorJS

MorJS 是什么?开源地址:https://github.com/eleme/morjs简介Mor (发音为 /mr/,相似 more) 是饿了么开发的一款基于小程序 DSL 的,可扩大的多端研发框架。 应用 MorJS,咱们只需书写一套(微信或支付宝)小程序,就能够通过 MorJS 的转端编译能力,将源码别离编译出能够公布在不同端(微信/支付宝/百度/字节/钉钉/快手/QQ/淘宝/H5)的产物。MorJS 还反对小程序、小程序插件、小程序分包之间的状态转换,同时也装备了从源码到构建产物全阶段的插件体系,满足各类性能扩大,晋升开发体验和开发效率。 示例以下是饿了么-美食外卖频道在微信、支付宝、抖音小程序及 H5 中的体现: 为什么要做 MorJS?目前各大平台都相继推出了本人的小程序,饿了么 C 端业务须要在不同平台小程序进行投放,这些我的项目大多是以支付宝或微信原生 DSL 编写,面对业务渠道的一直减少,咱们尝试了多种办法来兼容多端适配,但因为不同平台间小程序代码写法、能力反对的差异性逐渐变大,过来的计划无奈满足新业务的需要,咱们须要一套跨端研发框架能解决以下诉求: 原生 DSL 反对,不便现有小程序 DSL 编写的存量业务应用;升高性能开销,尽可能轻运行时,缩小编译构建的时长;便捷的应用,一键转换为反对各小程序平台应用的产物;拓展的性能,提供针对大型简单小程序的解耦计划;灵便的配置,可能简略的减少批改多套不同端的我的项目配置;产物优化能力,压缩构建产物体积,缩小小程序包大小;在明确这几点后,咱们调研了业界所有支流技术框架,发现并没有能齐全满足咱们需要的计划,所以咱们决定自研 MorJS。 如何应用?MorJS 是基于小程序原生 DSL 进行扩大的,只有你把握微信或支付宝任意一种小程序,那你就简直把握了 MorJS。MorJS 提供了官网脚手架工具用于创立新我的项目,同时也反对已有小程序引入相干依赖接入 MorJS。 开始一个新我的项目MorJS 我的项目示例:https://github.com/eleme/morjs/tree/main/examples1.创立我的项目,选定我的项目目录,在目录终端执行以下任一命令: $ npm init mor # npm 创立我的项目$ yarn create mor # yarn 创立我的项目$ pnpm create mor # pnpm 创立我的项目2.抉择对应的工程类型,依照提醒实现初始化操作 ✔ 请抉择工程类型 › 小程序✔ 请抉择源码类型 › 微信小程序 DSL✔ 是否应用 Typescript … 否 / 是✔ 请抉择 CSS 预处理器 › less✔ 请输出 小程序 的名称 … myapp✔ 请输出 小程序 的形容 … my first app✔ 用户名 … yourUserName✔ 邮箱 … your@gmail.com✔ 请输出 Git 仓库地址 … https://github.com/yourUserName/myapp✔ 请抉择 npm 客户端 › npm / pnpm / yarn…3.执行编译命令启动我的项目: ...

May 22, 2023 · 2 min · jiezi

关于框架:基于ArkUI框架开发ImageKnife渲染层重构

基于ArkUI框架开发-ImageKnife渲染层重构ImageKnife是一款图像加载缓存库,次要性能个性如下: ●反对内存缓存,应用LRUCache算法,对图片数据进行内存缓存。●反对磁盘缓存,对于下载图片会保留一份至磁盘当中。●反对进行图片变换:反对图像像素源图片变换成果。●反对用户配置参数应用:(例如:配置是否开启一级内存缓存,配置磁盘缓存策略,配置仅应用缓存加载数据,配置图片变换成果,配置占位图,配置加载失败占位图等)。 更多细节请拜访源码仓库地址:https://gitee.com/openharmony-tpc/ImageKnife 背景阐明晚期ImageKnife三方库在实现渲染局部的时候,应用的是image组件来展现图片的。因为image组件其实是一个残缺的集加载解析和图片展现的组件,渲染的模式只能通过配置固定参数进行,面对简单的需要场景,可能会呈现扩展性不够的状况。 当初随着工夫的推移渲染组件又多了一位重量级选手Canvas组件。能够通过2个组件渲染层的能力比照进行判断渲染层最终交由哪个组件展现。 如果想理解更多ImageKnife的背景常识,能够点击链接查看之前的文章介绍: 旧版本ImageKnife加载流程介绍https://developer.huawei.com/consumer/cn/forum/topic/02038645... 组件选型,能力比照首先咱们来看看Image组件和Canvas组件对于渲染这一块的反对状况。 从上表咱们能够看出: Image组件尽管反对了PixelMap的绘制,然而根本没有绘制控制能力,而且扩展性能力也比拟弱,并且渲染过程不可见,也无奈对绘制内容进行更多操作。 而Canvas组件属于更加底层的渲染组件,能够完满地管制绘制内容,并且渲染过程可见,合乎了开发者对于扩展性要求较高的定制场景。 重构前后能力比照 重构实现的内容1.应用canvas组件代替Image组件进行渲染展现图片。 2.所有图像数据在渲染层都转换为PixelMap,不便对立治理和扩大。 3.所有回调节点,对立形象成接口,不便后续进行扩大,进步代码可维护性。 4.所有的回调节点绘制的实现,都采纳了责任链模式,进步了自定义绘制扩大能力。 5.将局部通用办法封装成工厂办法,缩小开发者代码量。 6.通用办法从配置参数剥离,可采纳链式调用形式应用这些办法。 7.为了反对列表ImageKnifeOption参数应用@LinkObject润饰,同时ImageKnifeOption类型被@Observed润饰继承,不可被继承。 重构中比拟重要的点点1:回调接口形象为IDrawLifeCycle接口 渲染绘制是主线程能力操作。因而咱们能够对渲染程序进行了梳理,大抵流程:展现占位图->展现网络加载进度->展现缩略图->展现主图->展现重试图层->展现失败占位图 这里每个蓝色的小方格都代表着一个数据返回的回调接口,咱们须要在这个回调接口,解决接下来内容渲染的展现操作。因为每个回调的流程是固定的,有点像生命周期的流程。所以我这边形象成接口IDrawLifeCycle绘制生命周期进行表白。这其实也是为了前面扩大做了筹备。 点2:绘制实现采纳责任链模式 咱们反对了用户配置自定义绘制和全局配置自定义绘制的能力。采纳了责任链模式实现,用户参数设置->全局参数设置->自定义组件外部设置。这样设计的益处就是保留了用户扩大的能力,用户能够参加自定义绘制。 点3:提供了ImageKnifeDrawFactory工厂类 在开发者须要进行自定义绘制时,必须实现IDrawLifeCycle的6个接口。为了简化开发者操作,这里提供了ImageKnifeDrawFactory工厂类。 ImageKnifeDrawFactory外面封装了圆角、椭圆、百分比下载等实现,简化用户操作。当然更多的需要,能够参考该工厂类自行扩大实现。 这里咱们提供简略的场景示例: 场景1:一句代码,加个圆角成果 代码如下: import {ImageKnifeComponent} from '@ohos/imageknife'import {ImageKnifeOption} from '@ohos/imageknife'import {ImageKnifeDrawFactory} from '@ohos/imageknife'@Entry@Componentstruct Index { @State imageKnifeOption1: ImageKnifeOption = { // 加载一张本地的png资源(必选) loadSrc: $r('app.media.pngSample'), // 主图的展现模式是 缩放至适宜组件大小,并且在组件底部绘制 mainScaleType: ScaleType.FIT_END, // 占位图应用本地资源icon_loading(可选) placeholderSrc: $r('app.media.icon_loading'), // 失败占位图应用本地资源icon_failed(可选) errorholderSrc: $r('app.media.icon_failed'), // 绘制圆角30,边框5,边框"#ff00ff".用户自定义绘制(可选) drawLifeCycle:ImageKnifeDrawFactory.createRoundLifeCycle(5,"#ff00ff",30) }; build() { Scroll() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption1 }) .width(300) // 自定义组件已反对设置通用属性和事件,这里宽高设置放在链式调用中实现 .height(300) } } .width('100%') .height('100%') }} ...

April 6, 2023 · 2 min · jiezi

关于框架:MASA-Framework-事件总线-进程内事件总线

概述事件总线是一种事件公布/订阅构造,通过公布订阅模式能够解耦不同架构层级,同样它也能够来解决业务之间的耦合,它有以下长处 松耦合横切关注点可测试性事件驱动公布订阅模式通过下图咱们能够疾速理解公布订阅模式的实质 订阅者将本人关怀的事件在调度核心进行注册事件的发布者通过调度核心把事件公布进来订阅者收到本人关怀的事件变更并执行绝对应业务 其中发布者无需晓得订阅者是谁,订阅者彼此之间也互不意识,彼此之间互不烦扰 事件总线类型在Masa Framework中,将事件划分为 过程内事件 (Event)本地事件,它的公布与订阅须要在同一个过程中,订阅方与公布方须要在同一个我的项目中 跨过程事件 (IntegrationEvent)集成事件,它的公布与订阅肯定不在同一个过程中,订阅方与公布方能够在同一个我的项目中,也能够在不同的我的项目中 上面咱们会用一个注册用户的例子来阐明如何应用本地事件 入门装置.NET 6.0新建ASP.NET Core 空我的项目Assignment.InProcessEventBus,并装置Masa.Contrib.Dispatcher.Eventsdotnet new web -o Assignment.InProcessEventBuscd Assignment.InProcessEventBusdotnet add package Masa.Contrib.Dispatcher.Events --version 0.7.0-preview.7注册EventBus (用于公布本地事件), 批改Program.csbuilder.Services.AddEventBus();新增RegisterUserEvent类并继承Event,用于公布注册用户事件public record RegisterEvent : Event{ public string Account { get; set; } public string Email { get; set; } public string Password { get; set; }}新增注册用户处理程序在指定事件处理程序办法上减少个性 EventHandler,并在办法中减少参数 RegisterUserEvent public class UserHandler{ private readonly ILogger<UserHandler>? _logger; public UserHandler(ILogger<UserHandler>? logger = null) { //todo: 依据须要可在构造函数中注入其它服务 (需反对从DI获取) _logger = logger; } [EventHandler] public void RegisterUser(RegisterUserEvent @event) { //todo: 1. 编写注册用户业务 _logger?.LogDebug("-----------{Message}-----------", "检测用户是否存在并注册用户"); //todo: 2. 编写发送注册告诉等 _logger?.LogDebug("-----------{Account} 注册胜利 {Message}-----------", @event.Account, "发送邮件提醒注册胜利"); }}注册用户的处理程序能够放到任意一个类中,但其结构函数参数必须反对从DI获取,且处理程序的办法仅反对 Task或 Void 两种, 不反对其它类型发送注册用户事件,批改Program.csapp.MapPost("/register", async (RegisterUserEvent @event, IEventBus eventBus) =>{ await eventBus.PublishAsync(@event);});进阶解决流程EventBus的 申请管道蕴含一系列申请委托,顺次调用。 它们与ASP.NET Core中间件有殊途同归之妙,区别点在于中间件的执行程序与注册程序相同,最先注册的最初执行 ...

November 24, 2022 · 3 min · jiezi

关于框架:提升-Hybrid-体验饿了么双十一-PHA-框架技术实践

作者:逍菲、崖松、子伦 饿了么端 618、国庆、双11、双12等大促会场基本上会标配底部导航,在之前一般H5容器中底部导航是前端实现,每次点击会场底部导航的tab,都会重新启动一个流动页面笼罩在下面,即便之前关上过的tab也都要从新创立和加载,体验不佳,且H5也不能很好的联合Native能力做进一步的体验和性能优化。 通过调研发现手淘PHA框架可解决上述痛点问题,PHA容器底部TabBar为Native渲染,tab点击时底部bar不会重建,tab对应的webview在整个PHA容器中也能够平滑过渡、无缝切换,无需另起容器。且加载过的tab流动页面Webview会常驻内存,当再次拜访时会间接切换至前台,更靠近native体验。 在去年 618、国庆、双11和双12大促中,联合饿了么业务个性又陆续落地了一些特色优化伎俩,带来了更好的性能体验和业务成绩。 双十一上线成果成果视频查看请点击:饿了么双十一 PHA 会场实际老容器和pha容器比照。其中左侧为老容器会场,右侧为pha容器会场。 PHA 简介什么是 PHA,PHA 全称 Progressive Hybrid App,是晋升 Hybrid 体验的一种新框架,提供了一些 Native 同层组件以及渐进式加强策略来创立 Hybrid APP 利用,让这些利用具备与 Native 雷同的用户体验。 PHA 应用了 Web Application Manifest的配置并且对配置进行了性能扩大每个 PHA 利用都会启动一个 App Worker,Worker 是独立于以后页面运行在客户端里的一段 JS 脚本。可在 Worker 中定制业务逻辑,如基于 LBS 申请底部Tab展现的数据列表利用下能够有多个页面,每个页面的默认渲染引擎是 WebView每个页面中 PHA 提供了像下拉刷新、页头等 UI 能力,都能够通过在 Manifest 中定制针对利用 PHA 还提供了 Tab 容器、Swiper容器、启动屏等 UI 能力和预申请、离线缓存等性能优化能力,可通过在 Manifest 中配置实现 pha架构图 饿了么接入计划本地生存跟淘宝等业务次要的区别为前者强依赖LBS属性,包含底部 Tab、商品、品牌等数据的召回。因而须要在用户关上PHA框架时,执行定位并加载对应的底部 Tab、顶部横滑数据后,动静组装出对应的manifest.json 数据来渲染PHA,整体架构图如下: 架构图 B端链路墨斗平台依赖天马源码页面服务来创立会场框架,沿用墨斗数据搭建来配置底部 Tab 和 顶部Swiper 的数据,实现定投,次要流程如下: ...

April 1, 2022 · 1 min · jiezi

关于框架:LeaRun敏捷框架甘特图摆脱项目管理的泥沼

项目管理是管理者在无限的资源束缚下,使用零碎的观点、办法和实践,对我的项目波及的全副工作进行无效地治理。即从我的项目的投资决策开始到我的项目完结的全过程进行打算、组织、指挥、协调、管制和评估,从而实现我的项目的指标。 一个我的项目往往蕴含很多简单的流程和具体的细节,无论是哪种我的项目,把握进度都是项目管理中的主线。在这个过程里,管理者须要将业务布局和落地执行分割起来,实现从上到下的打算分派、进度监控和从下至上的进度反馈。而甘特图能直观地表明工作打算在什么时候进行,及理论停顿与打算要求的比照,综合思考人力、资源、日期、反复因素和我的项目的要害局部,并将各个方面的甘特图集成到一张总图中,能够使企业日程进度高深莫测,实现企业资源的高度利用,因而在古代治理中,越来越多企业也装备了甘特图。 甘特图又称为横道图、条状图,以提出者亨利•L•甘特学生的名字命名。甘特图以图示的形式通过流动列表和工夫刻度形象地示意出任何特定我的项目的流动程序与持续时间。根本是一条线条图,横轴示意工夫,纵轴示意我的项目,线条示意在整个期间上打算和理论的流动实现状况。 借助甘特图,管理者能够直观地理解到每一个工作的开始工夫和完结工夫、拆散能够同时运行的工作,并确定工作的依赖关系、不同人的工作间的工夫关系和我的项目的里程碑。在古代企业中,甘特图曾经被利用于各个方面,但只管性能如此弱小,还是有许多管理者不懂如何应用业余软件绘制甘特图,还是只用Excel表格创立,这就有可能呈现信息更新和传递不及时的状况,由此导致我的项目交付品质降落等问题,并且操作太过繁琐。而低代码作为利用交付类零碎的开发平台,甘特图性能和服务更加贴近客户的痛点,可能从根本上解决企业治理的呈现的问题。 在LeaRun麻利开发平台上制作甘特图,只需简略的两步: 进入LeaRun麻利开发平台主页面,抉择[麻利开发]→[甘特图]→[甘特图利用]。 点击[新增],输出项目名称、我的项目起始工夫和完结工夫。并点击“+”号,输出划分的单个项目名称及起始完结工夫,最初点击[确定],就实现了甘特图的绘制。 同时LeaRun麻利开发平台反对甘特图四种显示模式,管理者能够依据本身须要抉择,而不必反复绘制。 个别显示 树形显示 动态显示 分页显示 甘特图创立实现后,管理者能够依据我的项目的进度实时更改甘特图数据,我的项目状态同步到团队,成员就能够依据我的项目状态来调整本身的工作和服务,晋升我的项目交付的品质,进步工作效率。 LeaRun麻利开发平台作为一款企业管理系统疾速开发平台,不仅能够治理企业各个环节,搭建ERP、MES、OA等零碎,还能够创立进度甘特图,治理我的项目、生产等进度,无需另买零碎,就能实现一平台多用的目标。更多功能请返回www.learun.cn/Home/VerificationForm进行体验。

December 21, 2021 · 1 min · jiezi

关于框架:从零打造微前端框架实战汽车资讯平台项目fsafsa

download:从零打造微前端框架:实战“汽车资讯平台”我的项目筹备工作既然要装逼,筹备工作是少不了的。所谓“站在凡人的肩膀上,做事事倍功半”,咱们这里的“凡人”就是 paddlepaddle 了,中文名称叫“飞桨”,那么这个 paddlepaddle 是什么呢? 它是“源于产业实践的开源深度学习平台,致力于让深度学习技术的翻新与利用更简略”,直白点就是我帮你实现了深度学习底层框架,你只需有创意就可能在我平台上使用大量简略代码轻松实现。它的官网是 https://www.paddlepaddle.org.cn/ 。 它的安装也比较简略,官网首页就有安装指引,咱们这里根据官网的安装指引,使用 pip 形式来安装 CPU 版本。 咱们首先执行语句: python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi... 安装胜利后,咱们在 python 环境中测试一下是否安装胜利(这个也是按照官网指引来做),咱们切换到 python 环境,运行如下代码: Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24) [Clang 6.0 (clang-600.0.57)] on darwinType "help", "copyright", "credits" or "license" for more information. import paddle.fluidpaddle.fluid.install_check.run_check()Running Verify Paddle Program ... Your Paddle works well on SINGLE GPU or CPU.I0506 21:47:48.657404 2923565952 parallel_executor.cc:440] The Program will be executed on CPU using ParallelExecutor, 2 cards are used, so 2 programs are executed in parallel.W0506 21:47:48.658407 2923565952 fuse_all_reduce_op_pass.cc:74] Find all_reduce operators: 2. To make the speed faster, some all_reduce ops are fused during training, after fusion, the number of all_reduce ops is 1.I0506 21:47:48.658516 2923565952 build_strategy.cc:365] SeqOnlyAllReduceOps:0, num_trainers:1I0506 21:47:48.659137 2923565952 parallel_executor.cc:307] Inplace strategy is enabled, when build_strategy.enable_inplace = TrueI0506 21:47:48.659595 2923565952 parallel_executor.cc:375] Garbage collection strategy is enabled, when FLAGS_eager_delete_tensor_gb = 0Your Paddle works well on MUTIPLE GPU or CPU.Your Paddle is installed successfully! Let's start deep Learning with Paddle now ...

December 17, 2021 · 2 min · jiezi

关于框架:Baetyl推动边云融合-点亮智能物联网

随着 5G、IoT 等业务和场景倒退放慢、智能终端减少,近年来对边缘计算业务的下沉诉求越来越多。据揣测,在2025年,75%的数据将在边缘端产生并失去剖析和解决。在这一背景下,交换边缘计算相干技术的最新进展与落地实际、探讨边缘计算的现状与将来的重要性毋庸置疑。 8月1日,寰球开源技术峰会 GOTC 2021 深圳站“边缘计算专题论坛”顺利举办。本场论坛邀请了来自 Linux 基金会、百度、IBM、华为、VMWare、英特尔等组织机构的技术专家,分享 EdgeX  Foundry、Kuiper、Open Horizon 等出名我的项目的边缘计算实际。会上,百度智能云物联网主任架构师李乐丁带来了“从 Baetyl 走向智能化的数字世界”主题分享,具体介绍了 Baetyl 的建设背景、外围架构及其利用场景。 ▲ 图1:李乐丁在 GOTC 寰球开源技术峰会上发言  开源态度与 Baetyl 计划  在这个对隐衷极其敏感的时代,为了更好地保证数据安全性,数据须要从核心计算下沉到边缘计算,随之而来的数据接入、数据处理、数据贮存和数据同步便成为边缘计算目前正面临的四个重要问题。 基于不同的网络环境,终端设备须要在保障网络安全和隐衷的前提下,疾速连贯到本地数据中心。在公有网络接入数据后,通过就近的地位提供数据处理形式,响应产生的事件,进行边缘侧的数据处理。除了解决之外,还须要将就近的数据进行存储,保障更高的隐衷和合规性。当然,边缘和云并不是割裂的,边缘侧既要疾速解决数据,也要提供离线的网络存储、断点传输的能力,以及通过端到端数据加密等形式,帮忙来自边缘的数据和云上的外围算力实现互联。 ▲ 图2:百度智能边缘计算架构 在边缘计算的问题上,百度始终以来采取高度凋谢的态度,如图2所示,目前百度将技术合成为两局部,第一局部是向开发者提供 Open source 的计划,例如 Baetyl 就是由百度反对的一个开源的我的项目;另一部分则是面向企业,基于开源的我的项目、借助合作伙伴的力量,独特组建一个蕴含硬件、软件和两头平台的残缺端到端的商业化服务计划。  Baetyl 我的项目与外围架构  智能边缘开源框架 Baetyl 作为百度开源策略打算中的重要一步,该我的项目是在2019年由百度智能云向 Linux 基金会旗下 LF 基金会捐助,是LF基金会成立以来最早退出的我的项目。Baetyl 的指标是为边缘侧提供规范的云原生编排能力,从而让边缘和云端连贯,这其中 Baetyl 充当的就是边缘计算和云计算的粘合剂。Baetyl 利用云上弱小的计算能力帮忙边缘侧一直地迭代数据模型和 AI 模型,让边缘设施具备更好的常识和认知能力,将云计算的利用无缝扩大到边缘,助力云和边缘的数据实现自在替换。 在边缘上服务,为宽泛适配边缘侧各种各样碎片化的场景和设施,Baetyl 现已反对 X86、ARM、MIPS、CPU 等网络芯片,以及各种常见的 GPU 和神经网络芯片,罕用的操作系统 window 和 Linux、OS 均已适配,Baetyl 心愿能够助力更多合作伙伴独特推动边缘计算物联网的倒退,让硬件装置 Baetyl 后就能够疾速变为智能的边缘计算设施。 ▲ 图3:Baetyl 的外围架构图 图3展现了 Baety l外围架构,其深度地与云原生技术进行交融,Baetyl 采纳云端治理、边缘运行的计划,分为云端治理套件(Baetyl cloud)和边缘计算框架两局部。Baetyl cloud 运行在云端,指标是收集所有在 Kubernetes 上的配置,反对在云端配置边缘计算集群,治理所有资源,如:节点、利用、配置等。值得一提的是往年公布的 Baetyl 2.2 版本正式反对了 EdgeX Foundry 的运行,以上提及的所有动作都可在云端进行近程编排和定义,随后一键下发到边缘,下发过程即如图3左侧所示。在规范状况下,Baetyl cloud 会收集并打包来自 Kubernetes 管制面的信息,再由平安网络提供到本地的设施上,而 Baetyl 和云端治理套件之间会应用端到端的强制性的双向认证,进一步保障了平安问题。 ...

August 25, 2021 · 1 min · jiezi

关于框架:如何用7Ps框架开好会议-IDCF

会议是职场中常见的团队合作流动,也是进行决策、传递信息、达成共识的重要工具。置信屏幕旁的你也常常组织和参加各种大大小小的会议。可是,你真的会散会吗? “这还不简略,将人拽到一起,说一下主题,订1个小时,再弄个线上会议室,不就结了?” “要不要提前准备一下,会上遇到问题怎么办?” “不必,能有啥问题,到时再说呗。” 这么说也没有错。可是听起来不太对,问题在哪里呢?让我带你进一步剖析一下。前文讲到,任何能解决问题的办法,它必然有能够工作的暗藏假如和论据在撑持。 那么,上述看似不合理的对话中,你认为有哪些暗藏的假如前提呢? 答案是: TA(假如会议的组织者) 对会议的主题、波及的问题域非常分明对参会的人很理解当会上遇到问题时也能有效应对因而,当要散会的时候,组织者只有约好干系人的工夫订好会议室,那么会议就能够毋庸筹备,胜利的达成目标。 换句话说,当你对所要开的会的方方面面处于明确认知的时候,按上述做法能够达成散会的目标。 可是,事实中的会议有多少是这样的呢?事实中的组织者是否对会议都具备这样的认知程度?事实上,咱们所见到的版本大多如下: “下周大家找个工夫一起开个会讨论一下。” “散会了,散会了。” “…….” “对于这个话题,咱们再组织另一个会议讨论一下吧。” “这个会议到底是干什么的?” “叫我来散会,我须要干什么?” “探讨了半天咱们解决什么问题?” “Xxx总不在,这件事咱们不分明做不了决策。” “原来客户想要的是这个,会前基本不晓得。” “下次把内容提前收回来,会上间接探讨就行,不必耽搁大家的工夫。” 你看,这就是现实和事实的比照写照,也是你和“他人家的孩子”的差距,也是为什么一提“会议” 就会被吐槽低效、过程凌乱、浪费时间、不解决问题。 什么起因呢?据不齐全统计,99%以上的低效会议都是组织者的锅。 职场中咱们常有一些盘根错节的问题须要通过会议进行风暴和剖析,还会面对不同层级的各种干系人须要去促成共识和达成决策。对会议的组织要求就会更高。 那么,如何开好会呢? 分享一个麻利会议7Ps框架给你,帮你建设对会议的系统性认知,搞定高效会议。 一、什么是7Ps 框架?它是一个布局和筹备会议的工具,包含会议的7个要害因素。会议的组织者能够在会议筹备阶段作为自检清单应用。7Ps框架由James Macanufo设计[1]。 二、7Ps指什么?Purpose-目标: 为什么要散会?作为组织者,你须要可能分明且简洁地陈说会议的目标,给参与者明确的上下文以及为什么他们须要加入这次会议。如果讲不分明,那么你须要从新思考这次会议的必要性是什么,是否有必要持续开。很多会议其实是弥补会议,齐全不须要开。Product-产出物: 在会议期间产生哪些具体的工件?它会做什么,它将如何反对会议目标?如果会议并没有具体的产出物,那么兴许你应该思考的是一次团建而非会议。People-人员,角色: 谁须要加入会议。会议中他们的角色是什么?他们在所探讨主题中的角色是什么?比方哪些问题由A同学答复,哪些信息由B同学补充,哪些决定须要C同学提供资源反对。清晰梳理分明这一部分会议就胜利了一大半Process-流程: 会议的Agenda是什么?在会议的无限工夫内分为几步。Pitfall - 陷阱: 此次会议有哪些危险?咱们如何应答?例如,如果话题超出范围,如果某个重要的决策者长期参加不了?如果超时?如何材料不齐备等?如果主持人的电脑或网络忽然生效了?怎么办?Preparation-筹备: 会议前是否要有参与者理解上下文提前浏览的资料?有没有须要提前完成的考察问卷或作业?Practical concerns - 物料场地等后勤工作: 包含物料、场地、设施、工夫、地点、午饭等等。在这7个要害因素中,对会议的胜利和建设认知影响最大的两个因素是Purpose和People。Purpose是会议的起因,当问题定义分明,计划是更容易的事。People指与我何干,当把利益关系定义分明,参会者的定位就会清晰,就会天然遵循你设计的零碎的规定行事。 三、如何应用7Ps框架7Ps框架是一次好会议的设计框架,也能够作为散会前的自查清单。在设计时,能够采纳由Romain画的7Ps Canvas作为会议设计的模板,帮你结构化的梳理和出现会议的筹备工作。 在这里给大家应用7Ps的一些tips: 打算总会发生变化。7个元素之间相互影响,当其中一个元素产生过变动时,其它几个维度也须要进行调整。比方参加人发生变化,须要顺次调整工夫、流程等内容。用金字塔构造去构建7Ps,Purpose为中心思想。因而,要尽量用一句话去收敛Purpose,并顺次找到你的论据,设计你的逻辑链路。流程天然也就有了。会议中要让7Ps可见,线上会议则能够用白板的形式写下会议的事项,防止跑题。上面的脑图是应用7Ps筹备会议的一个示例图,你也能够设计这样的脑图模板,每次会议启动前来填充这些信息就能够了。 四、7Ps框架有多好?“在筹备战斗时,我总是发现打算没有用,然而打算又是必不可少的。” ——德怀特·艾森豪威尔 每次会议都应制订打算。好的打算的确不肯定能保障获得好的后果,但打算的过程能够帮忙你建设对事的系统性认知,7Ps框架就是这样一个帮你对会议建设系统性认知的框架。你的认知越清晰,会议成功率就会越高。 从模型分类的角度,7Ps框架是结构化模型,7Ps是会议胜利的7个要害因素(7Ps也被称为因素类模型)。它包含人、事、物的构造,又蕴含会前、会中、会后的工夫程序设计。因而,7Ps不仅可用于会议,还能够用于打算流动,比拟灵便又容易记忆。 你可能会问,每次都这样设计有些麻烦,可能须要消耗太多的工夫在设计上,还不如间接开呢? 大脑会想尽一切办法回绝思考,而为了解决问题所要耗费的思考和认知构建工夫在肯定水平上是等效的。如果你不在会前设计,那就会在会中和会后弥补。只不过越往后,你的弥补倍数越高,弥补的就不仅仅是你一个人的工夫,是几个人甚至几十个人的工夫节约。 所以,在你的下一个会议降临之前,无妨实际一下7Ps。即便只有一点点工夫,感受一下它对你的认知的影响以及对你的会议的影响。欢送留言和微信分享应用心得。 小模型大用处,试一下吧。 [1] 参考书籍-《Game Storming》 起源:Thoughtworks商业洞见 作者:禚娴静 申明:文章取得作者受权在IDCF社区公众号(devopshub)转发。优质内容共享给思否平台的技术伙伴,如原作者有其余思考请分割小编删除,致谢。 7月每周四晚8点,【冬哥有话说】研发效力工具专场,公众号留言“效力”可获取地址 7月8日,LEANSOFT-周文洋《微软DevOps工具链的 "爱恨情仇"(Azure DevOps)》7月15日,阿里云智能高级产品专家-陈逊《复杂型研发合作模式下的效力晋升实际》7月22日,极狐(GitLab)解决⽅案架构师-张扬分享《基础设施即代码的⾃动化测试摸索》7月29日,字节跳动产品经理-胡贤彬分享《自动化测试,如何做到「攻防兼备」?》8月5日,声网 AgoraCICD System负责人-王志分享《从0到1打造软件交付质量保证的闭环》

July 27, 2021 · 1 min · jiezi

关于框架:软件库与框架的区别

【注】本文译自:https://www.theserverside.com/tip/Library-vs-framework-How-these-software-artifacts-differ 库与框架:这两个软件构件的区别库(Libraries)是提供特定性能(如建设网络连接)的低级组件。框架(Framework)是已知的编程环境,比方 Spring Boot。 当软件主管开始构建新的企业应用程序时,他们必须决定要应用哪一组库和框架。 这引出了一个显著的问题:软件库和框架之间有什么区别? 库和软件框架都有助于应用程序的开发。然而,两者之间的次要区别在于它们的工作范畴,以及它们加重开发人员编写代码累赘的形式。 库提供了开发人员能够调用来执行特定性能的组件、类和办法。相比之下,框架提供的代码曾经执行了通常须要的性能,并在须要定制性能时调用开发人员提供的代码。 库与框架 库是一组相干的低级组件,开发人员调用这些组件来实现特定后果。罕用库函数包含日期格式化和建设网络连接。 框架解决更高级别的问题。框架提供了一个既定的编程环境,它自身建设在低级库之上。 例如,框架可能会解决如何最好地将应用程序中的所有对象映射到相干数据库中的表中。它还能够解决如何向最终用户提供丰盛的、基于 Web 的体验。 软件库示例 一个库的例子是 Java 日期和工夫 API。它是一组定义属性和办法的类和接口,开发人员能够应用这些属性和办法来格式化日期、执行时区转换并提供全局日历反对。Java 开发人员在须要时实例化 Date 和 Time 类,并以他们认为适合的任何形式调用库的办法。 另一个 Java 库示例是风行的 java.net 网络 I/O 包。该库由数十个类和接口组成,开发人员应用这些类和接口来关上网络端口、解决传入连贯并将数据发送到互连的客户端。 只须要应用 java.net 包,软件开发人员就能够实现解决基于 REST 的 Web 服务或通过 HTTP 协定的基于 HTML 的申请-响应循环所需的所有必要逻辑。java.net 库提供了一组低级 API,任何开发人员都能够应用这些 API 来开发通过网络进行通信的应用程序。 风行的 Java 库 其余风行的 Java 库,包含曾经利用了 Java 框架的 Spring Boot、JHipster 或 Vaadin 等 的库,包含: Apache Commons MathBouncyCastle for cryptographyJava Advanced ImagingJava SpeechJava 3DJavaMailJoda-TimeApache CollectionsJackson for JSON and XMLJava Networking软件框架的作用 企业我的项目通常须要开发人员提供一组 RESTful API,以便内部客户端与在线应用程序集成。然而,许多开发人员不仅解决了如何应用低级 java.net 库来解决 RESTful API 调用的问题,而且还将他们的工作作为开源我的项目来分享。这是软件框架的实质。它是一个现有我的项目,解决了一个常见且具备挑战性的问题,开发人员能够在本人的我的项目中应用它。 ...

July 19, 2021 · 1 min · jiezi

关于框架:分享-echoframework-项目基础框架

_ __ _ ___ ___| |__ ___ / _|_ __ __ _ _ __ ___ _____ _____ _ __| | __ / _ \/ __| '_ \ / _ \ _____| |_| '__/ _` | '_ ` _ \ / _ \ \ /\ / / _ \| '__| |/ /| __/ (__| | | | (_) |_____| _| | | (_| | | | | | | __/\ V V / (_) | | | < \___|\___|_| |_|\___/ |_| |_| \__,_|_| |_| |_|\___| \_/\_/ \___/|_| |_|\_\ echo-framework 是基于 echo 搭建用于疾速开发的我的项目框架 ...

June 20, 2021 · 1 min · jiezi

关于框架:技术实践-如何基于-Flink-实现通用的聚合指标计算框架

1 引言网易云信作为一个 PaaS 服务,须要对线上业务进行实时监控,实时感知服务的“心跳”、“脉搏”、“血压”等健康状况。通过采集服务拿到 SDK、服务器等端的心跳埋点日志,是一个十分宏大且杂乱无序的数据集,而如何能力无效利用这些数据?服务监控平台要做的事件就是对海量数据进行实时剖析,聚合出表征服务的“心跳”、“脉搏”、“血压”的外围指标,并将其直观的展现给相干同学。这其中外围的能力便是 :实时剖析和实时聚合。 在之前的《网易云信服务监控平台实际》一文中,咱们围绕数据采集、数据处理、监控告警、数据利用 4 个环节,介绍了网易云信服务监控平台的整体框架。本文是对网易云信在聚合指标计算逻辑上的进一步详述。 基于明细数据集进行实时聚合,生产一个聚合指标,业界罕用的实现形式是 Spark Streaming、Flink SQL / Stream API。不论是何种形式,咱们都须要通过写代码来指定数据起源、数据荡涤逻辑、聚合维度、聚合窗口大小、聚合算子等。如此繁冗的逻辑和代码,无论是开发、测试,还是后续工作的保护,都须要投入大量的人力/物力老本。而咱们程序员要做的便是化繁为简、实现大巧不工。 本文将论述网易云信是如何基于 Flink 的 Stream API,实现一套通用的聚合指标计算框架。 2 整体架构 如上图所示,是咱们基于 Flink 自研的聚合指标残缺加工链路,其中波及到的模块包含: source:定期加载聚合规定,并依据聚合规定按需创立 Kafka 的 Consumer,并继续生产数据。process:包含分组逻辑、窗口逻辑、聚合逻辑、环比计算逻辑等。从图中能够看到,咱们在聚合阶段分成了两个,这样做的目标是什么?其中的益处是什么呢?做过分布式和并发计算的,都会遇到一个独特的敌人:数据歪斜。在咱们 PaaS 服务中头部客户会更加显著,所以歪斜十分重大,分成两个阶段进行聚合的奥秘下文中会具体阐明。sink:是数据输入层,目前默认输入到 Kafka 和 InfluxDB,前者用于驱动后续计算(如告警告诉等),后者用于数据展现以及查问服务等。reporter:全链路统计各个环节的运行状况,如输出/输入 QPS、计算耗时、生产沉积、早退数据量等。下文将具体介绍这几个模块的设计和实现思路。 3 source规定配置为了便于聚合指标的生产和保护,咱们将指标计算过程中波及到的要害参数进行了形象提炼,提供了可视化配置页面,如下图所示。下文会联合具体场景介绍各个参数的用处。 规定加载在聚合工作运行过程中,咱们会定期加载配置。如果检测到有新增的 Topic,咱们会创立 kafka-consumer 线程,接管上游实时数据流。同理,对于曾经生效的配置,咱们会敞开生产线程,并清理相干的 reporter。 数据生产对于数据源雷同的聚合指标,咱们共用一个 kafka-consumer,拉取到记录并解析后,对每个聚合指标别离调用 collect() 进行数据散发。如果指标的数据筛选规定(配置项⑤)非空,在数据散发前须要进行数据过滤,不满足条件的数据间接抛弃。 4 process整体计算流程基于 Flink 的 Stream API 实现聚合计算的外围代码如下所示: SingleOutputStreamOperator<MetricContext> aggResult = src .assignTimestampsAndWatermarks(new MetricWatermark()) .keyBy(new MetricKeyBy()) .window(new MetricTimeWindow()) .aggregate(new MetricAggFuction());MetricWatermark():依据指定的工夫字段(配置项⑧)获取输出数据的 timestamp,并驱动计算流的 watermark 往前推动。MetricKeyBy():指定聚合维度,相似于 MySQL 中 groupby,依据分组字段(配置项⑥),从数据中获取聚合维度的取值,拼接成分组 key。MetricTimeWindow():配置项⑧中指定了聚合计算的窗口大小。如果配置了定时输入,咱们就创立滑动窗口,否则就创立滚动窗口。MetricAggFuction():实现配置项②指定的各种算子的计算,下文将具体介绍各个算子的实现原理。二次聚合对于大数据量的聚合计算,数据歪斜是不得不思考的问题,数据歪斜意味着规定中配置的分组字段(配置项⑥)指定的聚合 key 存在热点。咱们的计算框架在设计之初就思考了如何解决数据歪斜问题,就是将聚合过程拆分成2阶段: ...

June 17, 2021 · 2 min · jiezi

关于框架:联邦学习FATE框架安装搭建-CentOS8

联邦学习     FATE (Federated AI Technology Enabler) 是微众银行AI部门发动的开源我的项目,为联邦学习生态系统提供了牢靠的平安计算框架。FATE我的项目应用多方平安计算 (MPC) 以及同态加密 (HE) 技术构建底层平安计算协定,以此反对不同品种的机器学习的平安计算,包含逻辑回归、基于树的算法、深度学习和迁徙学习等。 FATE官方网站:https://fate.fedai.org/ FATE文档:https://fate.readthedocs.io/ 装置与配置-Python3.6装置 [root@localhost ~]# yum -y install epel-releaseLast metadata expiration check: 0:09:06 ago on Tue 01 Jun 2021 10:40:09 AM CST.Dependencies resolved.============================================================================================================================================================================================= Package Architecture Version Repository Size=============================================================================================================================================================================================Installing: epel-release noarch 8-8.el8 extras 23 kTransaction Summary=============================================================================================================================================================================================Install 1 PackageTotal download size: 23 kInstalled size: 32 kDownloading Packages:epel-release-8-8.el8.noarch.rpm 33 kB/s | 23 kB 00:00 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Total 17 kB/s | 23 kB 00:01 Running transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transaction Preparing : 1/1 Installing : epel-release-8-8.el8.noarch 1/1 Running scriptlet: epel-release-8-8.el8.noarch 1/1 Verifying : epel-release-8-8.el8.noarch 1/1 Installed: epel-release-8-8.el8.noarch Complete![root@localhost ~]# yum -y install python36Extra Packages for Enterprise Linux Modular 8 - x86_64 673 kB/s | 610 kB 00:00 Extra Packages for Enterprise Linux 8 - x86_64 6.9 MB/s | 9.4 MB 00:01 Dependencies resolved.============================================================================================================================================================================================= Package Architecture Version Repository Size=============================================================================================================================================================================================Installing: python36 x86_64 3.6.8-37.module_el8.5.0+771+e5d9a225 appstream 19 kInstalling dependencies: python3-pip noarch 9.0.3-19.el8 appstream 20 k python3-setuptools noarch 39.2.0-6.el8 baseos 163 kEnabling module streams: python36 3.6 Transaction Summary=============================================================================================================================================================================================Install 3 PackagesTotal download size: 201 kInstalled size: 466 kDownloading Packages:(1/3): python3-setuptools-39.2.0-6.el8.noarch.rpm 687 kB/s | 163 kB 00:00 (2/3): python3-pip-9.0.3-19.el8.noarch.rpm 47 kB/s | 20 kB 00:00 (3/3): python36-3.6.8-37.module_el8.5.0+771+e5d9a225.x86_64.rpm 46 kB/s | 19 kB 00:00 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Total 151 kB/s | 201 kB 00:01 Running transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transaction Preparing : 1/1 Installing : python3-setuptools-39.2.0-6.el8.noarch 1/3 Installing : python36-3.6.8-37.module_el8.5.0+771+e5d9a225.x86_64 2/3 Running scriptlet: python36-3.6.8-37.module_el8.5.0+771+e5d9a225.x86_64 2/3 Installing : python3-pip-9.0.3-19.el8.noarch 3/3 Running scriptlet: python3-pip-9.0.3-19.el8.noarch 3/3 Verifying : python3-pip-9.0.3-19.el8.noarch 1/3 Verifying : python36-3.6.8-37.module_el8.5.0+771+e5d9a225.x86_64 2/3 Verifying : python3-setuptools-39.2.0-6.el8.noarch 3/3 Installed: python3-pip-9.0.3-19.el8.noarch python3-setuptools-39.2.0-6.el8.noarch python36-3.6.8-37.module_el8.5.0+771+e5d9a225.x86_64 Complete![root@localhost ~]#装置virtualenv 和 virtualenvwrapper ...

June 1, 2021 · 23 min · jiezi

关于框架:将模型转为NNIE框架支持的wk模型第一步tensorflowcaffe

摘要:本系列文章旨在分享tensorflow->onnx->Caffe->wk模型转换流程,次要针对的是HI3516CV500, Hi3519AV100 反对NNIE推理框架的海思芯片的算法工程落地。本文分享自华为云社区《将模型转为NNIE框架反对的wk模型——以tensorflow框架为例(一)》,原文作者:wwwyx_^▽^ 。 应用过NNIE框架的同学都晓得,NNIE框架只反对wk模型的推理。 理论应用过程中用海思提供的转换软件工具 RuyiStudio 将 caffe 1.0 模型转为wk。个别状况下如果购买了芯片,海思将会间接将相干的SDK包发送给客户,如果没有的话,大家能够从这个链接获取:RuyiStudio 从下面可知,最终须要将别的框架模型转为caffe才能够应用RuyiStudio,目前支流框架蕴含pytorch、tensorflow、mxnet等,对于pytorch转caffe之前曾经有大佬写过了pytorch->caffe,有须要的同学能够去看下。本文次要讲述tensorflow框架转为caffe可能会遇到的问题以及解决办法。mxnet有间接的接口能够转onnx,也能够参考这篇文章做caffe转换。 上面进入正题。 tensorflow->caffe这个真的是个大坑(哭泣),这里我应用了两头模型onnx,即最终胜利转换的门路是 pb->onnx->caffe->wk,上面就说一下具体的操作吧~ 第一步:tensorflow->onnx这一步是最简略的一步= =,目前转了一些模型还没有在这里遇到坑。应用github上的开源我的项目:tensorflow->onnx,间接应用pip install 装置后应用。 关注一下都有哪些参数,每个参数的作用,次要是输出、输入、推理应用nchw还是nhwc(caffe框架为nchw,所以这里都应用nchw)、opset(默认应用 9 ),很多的参数我没有应用到,大家有疑难能够间接去issues下面看下哈。 上面给出一个转换命令供大家参考下: python -m tf2onnx.convert --input ./model.pb --inputs input_image:0[1,112,112,3] --inputs-as-nchw input_image:0 --outputs output_0:0,output_1:0,output_2:0,output_3:0,output_4:0 --output ./convert.onnx失去onnx模型之后,能够应用onnx simplifer将一些零散算子合并,或者将一些冗余算子去除,这个工具视状况应用。 python -m onnxsim input_onnx_model output_onnx_model转换为onnx之后,须要验证输入的后果是否与pb统一,统一后再走前面的流程!! 第二步:onnx->caffe这里曾经失去了onnx模型,然而间隔胜利还有99%的路要走!! 这一大节Baseline:onnx2caffe 环境: caffe 1.0 + onnx 1.8.0次要性能代码: onnx2caffe+-- onnx2caffe| +-- _operators.py| +-- _weightloader.py+-- convertCaffe.py+-- MyCaffe.py运行命令: python convertCaffe.py ./model/MobileNetV2.onnx ./model/MobileNetV2.prototxt ./model/MobileNetV2.caffemodel在转换过程中如果遇到了问题,能够从上面几个方面来适配, (1)遇到caffe与NNIE不反对的算子,能够批改onnx模型中的node以适配caffe(这里要动员本人的小脑筋,一些算子替换能够参考一下pytorch->caffe这篇博客)。(2)如果遇到了NNIE与onnx反对的算子,然而caffe 1.0 官网不反对的话,能够在caffe中增加新的层,从新编译之后,再做转换。caffe中增加新的层能够参考:caffe 增加新node(3)caffe与NNIE都反对的算子,然而转换工具没有反对该算子的转换,在转换代码中增加相应的算子实现。(4)转换过程中算子转换胜利,然而呈现了shape问题,手动增加一些不须要参数的操作在曾经生成的prototxt中。 针对下面的每个办法给出对应的解决形式。 批改onnx模型中的node以适配caffe改写onnx模型,首先须要理解一下onnx都反对哪些算子。 onnx反对的op:onnx op ...

May 26, 2021 · 5 min · jiezi

关于小程序:如何深入分析小程序运行原理

背景小程序凭借其高曝光率、开发成本低、运行更晦涩等劣势和特点,一经推出就被宽泛应用,面对小程序的火爆,自然而然地,就有很多开发者转战小程序畛域,本文次要带大家理解下小程序运行环境背地的故事, 但对于想要学习理解这些外部架构来说,目前市面上的教程更多是通知你如何应用现有规定开发一款小程序性能,少有说明确一套小程序外部机制是如何运行起来的。本文我会具体分享小程序的运行原理。 为了更不便敌对地了解本文的一些内容,咱们先对小程序的运行环境进行一个大略的剖析,而后从上面三个层面来加深对小程序运行原理的了解 开发者工具剖析破解外围文件解读和架构流程图解小程序运行环境依据微信小程序开发文档能够得悉小程序在三端的运行环境场景: iOS :小程序逻辑层的 JavaScript 代码运行在 JavaScriptCore() 中,视图层是由 WKWebView 来渲染的Android:小程序逻辑层的JavaScript 代码运行在 V8 中,视图层是由自研 XWeb 引擎基于 Mobile( )Chrome() 内核来渲染的开发工具:小程序逻辑层的JavaScript 代码是运行在 NW.js 中,视图层是由 Chromium() Webview 来渲染的从小程序在三端中的运行环境能够看进去,它们存在逻辑层和渲染层之间的交互,具体是如何交互的呢?咱们能够从渲染层和逻辑层之间的通信模型来找答案: 从这张图中,咱们能够看出小程序采纳了一种较为适合的技术计划,实现渲染层和逻辑层别离由2个线程治理: 渲染层的界面应用了WebView进行渲染逻辑层采纳JsCore线程运行JS脚本当一个小程序存在多个界面时,渲染层就会存在多个WebView线程,这两个线程之间的通信会经由微信客户端来做直达,逻辑层发送的网络申请也经由Native转发, 为什么要采纳这种技术计划呢? 次要起因是小程序的管控限度,比方不能间接操作DOM树、页面跳转等管控措施,更好地造成本人的生态闭环。 当初咱们曾经对小程序运行环境的根本组成有了一些理解,上面我就从开发者工具剖析破解、文件解读和架构流程图解这三个层面来讲述小程序运行环境的具体知识点。 开发者工具剖析破解咱们先从微信开发者工具剖析破解说起,首先,咱们从微信开发者工具中关上官网提供的小程序demo我的项目: 从编辑栏和文档中,咱们能够晓得一个页面的组成构造存在四种文件格式 .js后缀文件示意以后页面逻辑.wxml 后缀文件是框架设计的一套标签语言,联合根底组件、事件零碎,能够构建出页面的构造.wxss 后缀文件用于示意一套款式语言,用于形容 WXML 的组件款式.json 后缀文件示意是页面的配置准则这些是咱们大部分开发者看到或晓得的一些外表内容。你可能会问,什么是深层次的内容呢?上面咱们就来一一剖析。 方才咱们也讲到了小程序中存在逻辑层和渲染层,那怎么在开发者工具中发现它呢? 鼠标操作 微信开发者工具–》调试–》调试微信开发者工具 之后就会弹出这样一个页面: 能够看到我做了两处标记,第一处标记的webview是渲染层,每个页面src对应一个地址,第二处标记的webview就是逻辑层。 仅仅是这样一个页面,咱们是没方法间接查看webview中的具体内容的,还须要一些操作。你能够在方才关上的控制台Console中输出找到对应标签,查看对应的webview: 再通过这个命令查看具体的webview内容: 如果你间接关上对应的dom树,第一个webview展现的就是渲染层相干信息: 比方从这张图中咱们就能够看到这个页面渲染层所依赖的一些文件和一些办法,通过后果论来推断这些文件从何而来有何作用。 而对于service逻辑层的webview,能够间接在开发者工具右下方控制台Console输出document,这样就能查看了: 通过下面的介绍,你就能晓得,通过dom树和source资源能够看出加载的一些本地文件资源。那么接下来,我再通知你如何找到这些文件的出处,蕴含文件自身的援用和代码执行返回的后果。 咱们从方才那张图中看到script引入了一些WA结尾的文件,这些文件其实就是小程序运行时外围的根底库文件了,咱们在控制台输出openVendor()命令,会自动弹出对应的文件框: 这些.wxvpkg后缀文件就是微信根底库的版本文件,通过相干工具解压后能够看到文件内容格局: 须要特地留神的是,还存在两个wcc和wcsc可执行文件,这两个文件有什么作用呢? wcc 将微信小程序设计的一套wxml标签语言,用于构建出页面构造,转为WebView能够了解的标签,毕竟渲染层还是运行在webview中,咱们能够通过一张图来看下它的编译流程。 它的编译流程大抵过程是 先加载小程序所有页面中wxml格局的文件代码将它们转换成一个$gwx(pagePath)的js函数,注入到webview中在小程序运行时,能够晓得以后的页面门路,执行这个函数会生成该页面的结构函数,之后承受页面数据,输入一段形容页面构造的virtual() dom json对象最初通过小程序外部组件生成页面对应的HTML标签,页面标签通过wcc编译转化成咱们相熟的节点。那么wxss文件的作用是什么呢?它次要负责把wxss内容转换为视图可应用的css内容,它同时会剖析文件之间的援用关系,增加尺寸单位rpx转换,还能依据屏幕宽度自适应以及款式导入,最初会生成一个eval()()函数用于解决rpx,输入一个款式信息数组。 小程序外围根底库文件解读方才咱们看到了小程序运行时外围的根底库文件,其中WAservice.js、WAwebView.js、appservice.js等文件是承载小程序运行环境的最外围文件,所以,有必要对这几个文件进行重点解读, 先来看下WAservice.js文件,间接关上它是一个打包混同后的文件,有大概6万多行: ...

April 7, 2021 · 1 min · jiezi

关于百度:飞桨框架20正式版重磅发布一次端到端的基础设施革新

在人工智能时代,深度学习框架下接芯片,上承各种利用,是“智能时代的操作系统”。近期,我国首个自主研发、性能齐备、开源凋谢的产业级深度学习框架飞桨公布了2.0正式版,实现了一次跨时代的降级。 这次2.0版本的公布对于飞桨来说,能够说是一次“基础设施”的全面更新换代!生存中,咱们看到过很多基础设施建设工程,例如西电东送、南水北调、高铁建设等等,这些在保障生产生存设施失常运行、推动整个社会的经济倒退和人们生存程度改善的过程中,以一种 “润物细无声”的模式扮演着要害基础性角色!此次飞桨降级就是以这样形式悄悄为整个产业及生态的倒退凋敝奠定根底、积蓄能量、削减后劲!上面将为宽广开发者具体介绍飞桨都做了哪些“基础设施”级别的要害工程。 应用飞桨框架2.0更高效地开发AI模型成熟齐备的动态图模式此次降级,飞桨将默认的开发模式降级为命令式编程模式,即大家常说的动态图。飞桨框架2.0反对用户应用动态图实现深度学习相干畛域全类别的模型算法开发。动态图模式下能够让开发者随时查看变量的输出、输入,方便快捷的调试程序, 带来最佳的开发体验。为了解决动态图的部署问题,飞桨提供了全面齐备的动转静反对,在Python语法反对覆盖度上达到领先水平。开发者在动态图编程调试的过程中,仅需增加一个装璜器,即可无缝平滑地主动实现动态图训练或模型保留。同时飞桨框架2.0还做到了模型存储和加载的接口对立,保障动转静之后保留的模型文件可能被纯动态图加载和应用。 在飞桨框架2.0版本上,官网反对的动态图算法数量达到了200+,涵盖计算机视觉、自然语言解决、语音、举荐等多个畛域,并且在动态图的训练效率和部署效率方面都有所晋升。2.0版本的动态图反对了主动混合精度和量化训练性能,实现了比动态图更简洁灵便的混合精度训练接口,达到媲美动态图的混合精度和量化训练成果。无论从性能还是性能角度,飞桨的动态图在国产深度学习框架中都处于领先地位! 同时,为了推动各个支流场景的产业级利用,飞桨的系列开发套件也随飞桨框架2.0实现了降级,全面反对动态图开发模式。从开发、训练到预测部署提供优质体验。如视觉畛域的图像宰割套件PaddleSeg,随飞桨框架2.0降级后,涵盖了高精度和轻量级等不同特点的大量高质量宰割模型,采纳模块化的设计,提供了配置驱动和API调用两种利用形式,帮忙开发者更便捷地实现全流程图像宰割利用;又如自然语言解决畛域的PaddleNLP,与飞桨框架2.0深度适配,领有笼罩多场景的网络模型、简洁易用的全流程API,以及动静对立的高性能分布式训练能力,十分便于二次开发,大大晋升建模效率。具体能够参见上面链接中的我的项目示例。 飞桨框架2.0动态图模型: https://github.com/PaddlePaddle/models/tree/develop/dygraph 全新PaddleSeg我的项目利用实例: https://aistudio.baidu.com/aistudio/projectdetail/1339458 全新PaddleNLP我的项目利用示例: https://aistudio.baidu.com/aistudio/projectdetail/1329361 API体系全新降级API是用户应用深度学习框架的间接入口,对开发者应用体验起着至关重要的作用,飞桨始终以来对API设计以及整体API体系的欠缺给予高度重视。飞桨框架2.0对 API体系进行了全新降级,让开发者们在应用飞桨研发的过程中能够体验到得心应手、畅通无阻的愉悦感觉。 体系化: 基于长期的产业实际积攒与用户应用习惯的洞察,飞桨从新梳理和优化了API的体系结构,使其更加清晰、迷信,让宽广开发者能够更容易地依据开发应用场景找到想要的API。此外能够通过class和functional两种模式的API来模块化的组织代码和搭建网络,进步开发效率。同时,API的丰盛度有了极大的晋升,共计新增API 217个,优化批改API 195个。简洁化:提供更适宜低代码编程的高层API。像数据加强、建设数据流水线、循环批量训练等能够标准化的工作流程,以及一些经典的网络模型构造,在飞桨框架2.0中,都被封装成了高层API。基于飞桨高层API,开发者只需10行左右代码就能够编写实现训练局部的程序。最为重要的是,高层API与根底API采纳一体化设计,即在编程过程中能够同时应用高层API与根底API,让用户在简捷开发与精细化调优之间自在定制。新API体系齐全兼容历史版本,同时飞桨提供了降级工具,帮忙开发者升高降级迁徙老本。 飞桨开源框架2.0 API参考文档: https://www.paddlepaddle.org.cn/documentation/docs/zh/api/index_cn.html 应用飞桨框架2.0更高效地训练AI模型训练更大规模的模型家喻户晓,飞桨框架的英文名Paddle便是并行分布式训练学习的缩写,分布式能够说是飞桨与生俱来的个性。飞桨反对包含数据并行、模型并行、流水线并行在内的宽泛并行模式和多种减速策略。在飞桨框架2.0版本中,新增反对了混合并行模式,即数据并行、模型并行、流水线并行这三种并行模式能够互相组合应用,更高效地将模型的各网络层甚至某一层的参数切分到多张GPU卡上进行训练,从而实现反对训练千亿参数规模的模型。 业内首个通用异构参数服务器架构飞桨框架2.0推出了业内首个通用异构参数服务器技术,解除了传统参数服务器模式必须严格应用同一种硬件型号Trainer节点的桎梏,使训练任务对硬件型号不敏感,即能够同时应用不同的硬件进行混合异构训练,如CPU、GPU(也包含例如V100、P40、K40的混合)、AI专用减速硬件如昆仑芯片等,同时解决了搜寻举荐畛域大规模稠密特色模型训练场景下,IO占比过高导致的计算资源利用率过低的问题。通过异构参数服务器架构,用户能够在硬件异构集群中部署分布式训练任务,实现对不同算力的芯片高效利用,为用户提供更高吞吐,更低资源耗费的训练能力。 图 异构参数服务器架构示意图 通用异构参数服务器架构之所以被称之为通用,次要在于其兼容反对三种训练模式: 可兼容全副由CPU机器组成的传统参数服务器架构所反对的训练任务。可兼容全副由GPU或其余AI减速芯片对应机器组成的参数服务器,充分利用机器外部的异构设施。反对通过CPU机器和GPU或其余AI减速芯片对应机器的混布,组成机器间异构参数服务器架构。异构参数服务器领有十分高的性价比,如下图所示,仅用两个CPU机器加两个GPU机器就能够达到与4个GPU机器相仿的训练速度,而老本至多能够节约35%。 分布式训练教程: https://fleet-x.readthedocs.io/en/latest/paddle_fleet_rst/distributed_introduction.html 应用飞桨框架2.0更宽泛地部署AI模型到各种硬件全面深度适配各种人工智能硬件AI产业的广泛应用离不开各种各样的人工智能硬件的凋敝,飞桨能够说深谙其道,继续致力打造凋敝的硬件生态。以后包含英特尔、英伟达、ARM等诸多芯片厂商纷纷发展对飞桨的反对。飞桨还跟飞腾、海光、鲲鹏、龙芯、申威等CPU进行深刻适配,并联合麒麟、统信、普华操作系统,以及百度昆仑、海光DCU、寒武纪、比特大陆、瑞芯微、高通、英伟达等AI芯片深度交融,与浪潮、中科曙光等服务器厂商单干造成软硬一体的全栈AI基础设施。以后飞桨曾经适配和正在适配的芯片或IP型号达到29种,处于业界领先地位。 图 飞桨硬件生态路线图 立刻体验飞桨开源框架2.0版本飞桨框架2.0装置: https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/2.0/install/pip/linux-pip.html 10分钟疾速上手飞桨框架2.0: https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/01_quick_start_cn.html 飞桨框架2.0应用教程: https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/index_cn.html 飞桨框架2.0利用实际: https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/index_cn.html 如果您想具体理解更多飞桨的相干内容,请参阅以下文档。 ·飞桨官网地址· https://www.paddlepaddle.org.cn/ ·飞桨开源框架我的项目地址· GitHub: https://github.com/PaddlePaddle/Paddle Gitee: https://gitee.com/paddlepaddle/Paddle 想理解更多无关飞桨框架2.0的信息,记得关注百度深度学习趣味案例实战营,3月15日-19日晚19:00,每天一小时,手把手带你应用CV、NLP畛域最罕用模型及利用,即学即用,做我的项目还能获取积分兑换京东卡。

March 16, 2021 · 1 min · jiezi

关于框架:网易云信服务监控平台实践

文 | 戴强 网易云信数据平台资深开发工程师 导语:数据在很多业务中都至关重要,对于网易云信,咱们通过数据来晋升服务并促成业务持续增长。借助于服务监控平台的能力,咱们能够很直观的感触到线上服务的运行状况,本文将详细分析网易云信的服务监控平台具体是如何实现的。 引言通常人类的恐怖都来源于对事实世界的未知。 现实生活中存在很多的不确定性,恐怖是因为咱们以后的认知无奈对其作出正当解释。例如这次的疫情的忽然暴发,人们对死亡的恐怖一直蔓延。世界存在很多的不确定性,什么是不确定性?假如须要对今天的股票指数是涨是跌作出判断,在没有任何数据作撑持的状况下,咱们只能像抛硬币一样都是百分之50的概率。在这种场景下,咱们做出的所有判断都是不可信的,并且会对本人的决定感到不安。 如果人们理解了所有波及某种行将产生的事件的因素,那么他们就能够准确地预测到这一事件;或者相同,如果产生了某个事件,那么就能够认为,它的产生是不可避免的,这便是拉普拉斯的信条(又名决定论)。 正如以上的实践所表白的意思,数据能够帮忙咱们指引方向,并且验证咱们的方向是否正确。同样,数据对于网易云信的倒退来说也至关重要,咱们须要通过数据来晋升咱们的服务,并促成业务持续增长。 网易云信是集网易20年 IM 以及音视频技术打造的 PaaS 服务产品,咱们始终致力于提供稳固牢靠的通信服务,而如何保障稳固牢靠呢? 服务监控平台就是其中重要的一环,其就相当于布加迪威龙上的仪表盘,汽车的时速是多少,油量是否足够,以后的转速是多少,这些在仪表盘上高深莫测,能够帮忙咱们做出判断:是不是还能够踩一点油门,必要的时候是不是该刹一下车。服务监控平台的指标和价值就在这里,它也就相当于网易云信这辆布加迪威龙的仪表盘,能够通知咱们以后的服务质量怎么样,是不是须要多加点“油”,是不是须要踩一下“油门”或者“刹车”,给咱们和客户提供更多的信息,帮忙咱们提供最优质的、最牢靠、最稳固的服务。 本文就来详细分析网易云信的服务监控平台具体是如何实现的,将从整体架构登程,简略介绍网易云信服务监控平台的框架,再仔细分析包含数据采集、数据预处理、监控告警、数据利用四个模块的实现。 零碎架构当初网易云信的音视频数据根本都来源于客户端和服务端日志,所以整个数据的采集链路是其中十分重要的一环,决定了数据的有效性和时效性。 首先,咱们来看一下网易云信采集监控平台的整体架构,如下图: 采集监控平台整体架构次要分为数据采集、数据处理、数据利用、监控告警四局部,整个解决流程如下: 数据采集: 咱们次要的数据起源为业务 SDK 和应用服务器,这些数据能够通过 HTTP Api、Kafka 两种形式接入采集服务。采集服务对数据进行简略校验和拆分,而后通过 Kafka 传输到数据荡涤服务。数据处理:数据处理服务次要负责对接管到的数据进行解决而后发给上游服务应用。其中咱们提供了 JOSN 等简略的数据格式化能力,另外也提供了脚本解决模块,以反对更灵便更弱小的数据处理能力,该能力也使得咱们监控平台的数据处理能力更富多样性。监控告警:监控告警模块对于咱们一开始提到的服务监控能力来说,是最重要的一环。咱们对于采集到的数据进行分维度聚合统计和剖析,应用丰盛的聚合算法、灵便多变的规定引擎来最终达到服务预警和问题定位的目标。数据利用:荡涤后的数据能够间接写入时序数据库供问题排查平台应用,也能够通过 Kafka 接入 es、HDFS、流解决平台,最终供应用层应用。例如:品质服务平台、通用查问服务、问题排查平台等。接下来咱们会对上述四个模块进行具体的剖析。 数据采集数据采集是服务监控平台的入口,也是整个流程的第一步,下图是数据采集模块的架构图。 上文也有提到,为了便于用户接入,咱们提供了 HTTP API 和 Kafka 两个通道给业务方。 HTTP API 多用于端侧或服务器中偏实时的数据上报场景,用以反对秒级的数据接入。Kafka 多用于高吞吐量、数据实时性要求不太高的场景。数据过滤预处理模块,提前将一些非法数据进行过滤,并事后数据拆分等解决。最初通过 Kafka 传输到数据处理服务,接下来就是数据处理阶段的介绍了。 数据处理实现数据采集阶段后,即进入数据处理阶段,具体流程如下: 任务调度,次要负责数据处理线程的生命周期治理,从启动到敞开。消费者,在获取数据后应用外部的队列进行解耦,从而达到横向扩大的能力以进步数据处理线程的并行度。处理单元,能够依据须要设置并行度: 数据处理能力分成两种,通用规定和自定义脚本。通用规定就是简略的 JSON 转换、字段提取等,这些根本能够满足80%的需要,然而为了撑持相似多字段关联计算、正则表达式、多流关联解决等简单业务,咱们也提供了自定义脚本进行数据处理的能力。维度表的应用次要是针对多数据流关联解决的场景,为了解决数据量和并发高的问题应用了本地+第三方缓存的计划。时序数据库输入:时序数据库咱们应用的是NTSDB,NTSDB 是网易云基于influxdb做的集群化计划,有高可用、高压缩比、高并发等特点。数据处理完之后,接下来一个比拟重要的阶段就是监控告警。 监控告警上面这张图简略展现了监控告警的流程: 监控告警阶段分为指标聚合模块以及告警模块。 指标聚合模块反对指定字段分组统计、灵便的聚合窗口工夫、数据过滤、细粒度的算子级别的数据过滤、数据提早最大工夫。最重要的是咱们反对了十分丰盛的聚合算子:累加、最小/最大值、firstValue/lastValue、平均数、记录数、去重计数、TP系列(TP90/TP95/TP99)、环比、标准差等,同时还反对在第一次指标聚合后进行复合计算的能力(复合指标)。这些丰盛的算子为咱们实现更多灵便的监控规定提供了保障。 另外咱们将原有的一阶段聚合改成了两阶段聚合,为什么呢?因为在数据处理的过程中咱们常常会遇到的一个问题:数据热点问题导致的歪斜。所以这里咱们减少了预处理阶段,在这一阶段利用随机数进行打散,保证数据的平衡,而后预聚合的数据在第二阶段进行总的聚合解决。 告警模块和指标聚合模块从原有的一个模块拆分为两个,指标模块更多的关注如何做数据聚合,而不是和告警模块耦合在一起作为告警模块的一部分。而告警作为一个附加的性能,只须要依据接管到的数据,做一些告警的规定校验、频控校验、告警信息封装、对接音讯平台发送告警音讯,同时反对了外部 IM 平台、短信、电话等音讯通道,多样的音讯通道是为了能够第一工夫感知到问题的呈现。 数据利用数据利用现有的平台:数据可视化、品质服务平台、ELK日志平台、在线离线剖析等。上面,咱们针对每个平台简略介绍一下。 数据可视化数据可视化这部分,咱们和大部分公司一样应用 Grafana 来实现。须要做可视化的数据能够先同步到NTSDB中,而后再应用 NTSDB 作为数据制作图表和大盘。另外对于不反对的图表,咱们针对Grafana 做了二次开发以反对更多的可视化需要。 ...

February 5, 2021 · 1 min · jiezi

关于SegmentFault:实战丨借助云开发Framework快速部署Kodexplorer

背景CloudBase Framework 是云开发官网出品的云原生一体化部署工具,能够帮忙开发者将动态网站、后端服务和小程序等利用,一键部署到云开发 Serverless 架构的云平台上,主动伸缩且无需关怀运维,聚焦利用自身,无需关怀底层配置和资源 云开发 CloudBase Framework 框架「Container」插件: 通过云开发 CloudBase Framework 框架将我的项目利用一键部署到云开发的云托管环境,提供生产环境可用的主动弹性伸缩的高性能的容器计算服务。能够搭配其余插件如 Website 插件、Node 插件实现云端一体开发。 本篇文章次要以一个残缺的我的项目作为例子,应用FrameWork将Kodexplorer我的项目轻松部署到云开发上。 部署过程步骤一:筹备工作具体步骤请参照 筹备云开发环境和 CloudBase CLI 命令工具 步骤二:进入我的项目目录进行初始化进入我的项目目录后,创立云开发的配置文件 cloudbaserc.json touch cloudbaserc.json当然也能够在我的项目目录下主动创立相干配置文件 tcb 步骤三:编辑配置文件cloudbaserc.json通过参照文档的参数阐明,填写好了相干的参数 { "version": "2.0", "envId": "{{env.ENV_ID}}", "framework":{ "name":"kodexplorer", "plugins":{ "client": { "use": "@cloudbase/framework-plugin-container", "inputs": { "cpu": 0.5, "mem": 1, "serviceName": "kodexplorer", "servicePath": "/", "localPath": "./", "uploadType": "package", "containerPort": 80, "volumeMounts": { "/var/www/html": "kodexplorer-cfs" } } } }, "requirement": { "addons": [ { "type": "CFS", "name": "kodexplorer-cfs" }, { "type": "CynosDB", "name": "kodexplorer" } ] } }}更多的参数阐明可参考配置参数阐明 ...

January 20, 2021 · 1 min · jiezi

关于框架:框架VS架构看两者异同

框架是和架构比拟类似的概念,而且两者有着较强的关联关系,所以在理论工作中,很多时候这两个概念并不是分得那么清晰,参考维基百科,框架的定义如下: 软件框架(Software Framework)通常指的是为了实现某个业界规范或者实现特定根本工作的软件组件标准,也指为了实现某某个软件组件标准时,提供标准做要求之根底性能的软件产品。 框架是组件标准,比方:MVC就是一种常见的开发标准,相似的有MVP、MVVM、J2EE等框架。 框架提供根底性能的产品。比方:Spring MVC是MVC的开发框架,除了满足MVC的标准,Spring提供了很多根底性能来帮忙咱们实现性能,包含注解@Controller,Spring Security,Spring JPA等很多性能。 参考维基百科,这里简略的翻译为软件架构师指软件系统的“根底构造”,发明这些根底构造的准则,以及对这些构造的形容。 单从定义的角度来看,框架和架构的区别还是比拟显著的,框架关注的是标准,架构关注的是构造。框架的英文是Framework ,架构的英文是Architecture。Spring MVC的英文文档题目是Web Framework,包目录也有framework。 尽管如此,在理论工作中咱们却常常碰到一些似而非似的说法,比方: 咱们的零碎吃MVC架构 咱们须要将Android App重构 MVP架构 咱们的零碎基于SHH框架开发 咱们的零碎是SHH的架构以上几种说法到底是对还是错呢?其实以上说法都是对的,造成这种景象的根本原因暗藏于架构的定义中,关键字“根底构造”,这个概念并没有很明确的说分明从什么角度来讲的,从不同的角度或者维度,能够将零碎划分为不同的构造,其实咱们再“模块与组件”中的样例曾经暗含了这点,持续以学生信息管理系统为例。 从业务逻辑的角度合成,”学生信息管理系统“的架构如下: 从物理部署的角度合成,“学生信息管理系统”的架构如下: 从开发标准的角度合成,“学生信息管理系统”能够采纳规范的MVC来开发,因而架构又变成了MVC架构了,如下图: 以上这些架构 ,都是学生信息管理系统正确的架构,只是从不同的角度来合成而已。

December 27, 2020 · 1 min · jiezi

关于框架:JNPF快速开发平台30版的设计理念与功能架构解析

如果您是企业,是否感到找一款真正适宜您的现成软件真的很不容易,想要本人开发但又苦于没有专业人才,而定制开发又太贵;如果您是软件公司,是否感到开发人员工资太高、留住人才太难,人才走了,产品也就完了,而且就算一个开发好的产品,要做些个性化批改也是很艰难且还容易导致BUG;如果您是集体,是否有将本人多年的治理教训或忽然间的想法创意变成一个成型软件并带来收益的激动。 因而,有感于这些场景的触动启发,引迈软件公司便重磅的推出了JNPF疾速开发平台,来专一于解决这些软件开发难题和市场需求,而这些痛点与需要也为了JNPF疾速开发平台的设计理念。当初咱们就来简略的看下JNPF疾速开发平台的性能架构。 JNPF疾速开发平台PC端首页: JNPF疾速开发平台是一款配置型软件疾速开发框架,可一次开发多端应用,且PC端与挪动端(APP、微信小程序、钉钉等)的数据皆可互通互联、协调办公。从下面两图能够看到,JNPF平台的PC端即是JNPF云开发平台,它次要由六大功能模块组成,也正是这六大功能模块形成了弱小的JNPF云开发平台,而六大功能模块下还有很多子功能模块。 第一、在线开发有五大子功能模块:WEB设计、APP设计、报表设计、大屏设计以及门户设计。开发者通过这几个子功能模块便可自在布局页面、可拖拽相应的控件到页面来实现主动生成相应的可视化利用。 第二、代码生成有三大子功能模块:WEB表单、APP表单以及流程表单。开发者可针对数据库抉择单表或多表模式,再抉择数据关联,下一步进入表单页面,并可拖拽表单控件,而后再进入输入设置,代码便可主动输入,可下载或查看。 系统管理模块可依据公司需要进行菜单创立以及治理,它蕴含系统配置、菜单治理、翻译治理、单据规定、系统调度、零碎布告、系统日志、零碎图标、数据利用、微信配置等一系列简单灵便应用的子功能模块。而这些性能开发又简直全副是零代码,可让开发者迅速上手、疾速便捷的搭建一个性能成熟的业务管理平台。 零碎权限性能针对权限划分则别离有组织治理、部门治理、岗位治理、用户治理、角色治理、权限治理、在线用户等几大子功能模块,通过不同的角色管理系统权限,可使每个人分工明确,让企业实现更好的治理。 工作流程性能可建设企业日常工作的高效电子化、标准化、规范化的流程管理体系,晋升办公效率,将工作流动分解成定义良好的工作、过程、角色和规定来进行执行和监控,达到晋升企业管理水平和工作效率为目标。它蕴含我发动的、待办事宜、已办事宜、抄送事宜、流程委托、流程监控、流程设计等几大子功能模块。 第六、扩大利用功能模块是针对日常可见操作进行演绎,使人心涣散溶剂在一起,让开发者应用起来更加方便快捷。扩大利用的性能有:百万数据、导入导出、打印示例、电子签章、日程安排、邮件收发、常识治理、订单治理、文件预览、条码示例、项目管理、表格示例、表单示例、图表示例等一系列可拓展降级的性能利用,大大提高了软件开发的丰富性和可塑性。

September 26, 2020 · 1 min · jiezi

关于框架:LeaRun快速开发平台快速开发netjava项目

Learun软件疾速开发平台是一款轻量化多语言可视化开发工具。 平台目前分为Java和.net(core)版本,内置有多套UI格调模板,外围性能基本相同,包含:向导式开发组件、BI可视化、拖拽式表单、代码生成器、单据套打、通用app/小程序、权限治理、流程引擎页等功能模块,能够疾速无效的开发出市场上目前常见的各种管理系统,如:OA、ERP、CRM、HRM、MIS等。 Learun软件开发平台以“让开发变得简略”为主旨,深耕软件平台,领有近10年的行业开发教训,经典.net软件产品曾经服务超5000家客户,并失去市场统一好评。 框架采纳目前支流的引擎式开发,与传统的软件开发模式相比,其最大特点是通过数据汇合、表单引擎、流程引擎、报表引擎等,用可视化的模式进行设置组合,联合我的项目本身的类库,从而实现对各种简单零碎的疾速高效开发。 .net产品 .net是目前客户次要应用产品,目前已正式更新至V7.0.6;基于.net产品开发而来的.netcore产品也曾经公布,两者整体性能统一,UI格调一脉相承。 APP模块采纳支流的vue框架,同时反对微信、钉钉、支付宝等平台。 1.麻利开发 麻利开发向导:表单、流程、数据等罕用性能配置向导 代码生成器:八套开发模板,生成类、页面、映射、表单、小程序等 通用图标:PC和挪动端图标 数据看板:BI大数据看板 表格组件:各类罕用表格 甘特图:理解我的项目进度 信息可视化:货架、生产线等 门户配置:企业门户 插件配置:框架内置及第三方插件 二维码生成:企业二维码生成 D3配置:动态数据展现 2.系统管理 行政区域:全国行政区划 数据字典:各我的项目个性查问 单据编码:合同、表单等文件编码 零碎性能:零碎性能分类展现 系统日志:日志类 LOGO设置:框架logo设置 数据权限:权限类 桌面配置:首页桌面性能配置 音讯治理:音讯类 多语言治理:内置中、英、繁,可拓展 微信企业号:企业号开发 任务调度:工作的执行 Excel配置:表格导入导出 数据管理:数据表、数据源、数据库连贯及常用字段 文件治理:文件类 3.单位组织 公司治理:总/分公司治理 部门治理:部门 岗位治理:岗位 角色治理:角色 用户治理:用户 4.表单利用 表单设计:设计罕用表单 表单治理:表单根底、条件、列表设置 表单实例:示例 5.流程利用 流程设计:人事、我的项目、购销等各类流程设计 流程工作:待办/已办流程 流程委托:委托别人解决流程 流程监控:已实现/未实现流程整体监控 签章治理:签章类(反对手写) 流程实例:示例(销假流程) 6.挪动治理 挪动开发向导:挪动表单、流程、数据等罕用性能配置向导 挪动性能:挪动端罕用性能 首页图片:挪动首页图 Logo设置:挪动logo 桌面设置:挪动端桌面配置 7.报表利用 报表公布:绑定已设计报表后公布 报表设计:图标、列表设计 业余报表:葡萄城业余报表 报表实例:罕用报表示例 简洁报表:洽购、收支、仓存、收支类报表 8.利用实例 OA办公:新闻、布告、日程、签章、导出模板、邮件核心 ...

August 12, 2020 · 1 min · jiezi

关于框架:net-core快速开发平台learun自主工作流引擎设计规范

一个残缺的工作流管理系统通常由工作流引擎、工作流设计器、流程操作、工作流客户界面、流程监控、表单设计器、与表单的集成以及与应用程序的集成等几个局部组成。 1.工作流引擎 工作流引擎是工作流管理系统的外围局部,次要提供了对工作流定义的解析以及流程流转的反对。工作流定义文件形容了业务的交互逻辑,工作流引擎通过解析此工作流定义文件依照业务的交互逻辑进行业务的流转,工作流引擎通常通过参考某种模型来进行设计,通过调度算法来进行流程的流转(流程的启动、终止、挂起、复原等),通过各种环节调度算法(SPLIT、AND、OR等)来实现对于环节的流转(环节的合并、分叉、抉择、条件性的抉择等)。 2.工作流设计器 工作流设计器为可视化的流程设计工具,用户通过拖放等形式来绘制流程,并通过对于环节的配置来实现环节操作、环节表单、环节参与者的配置。工作流设计器为用户以及开发商提供了疾速绘制、批改流程的形式,工作流设计器的好坏决定到工作流管理系统的易用性。 3.流程操作 流程操作指所反对的对于流程环节的操作,如启动流程、终止流程、挂起流程、直流、分流(单人办理)、并流(多人同时办理)、联审等,象这些流程操作都是可间接基于引擎所提供的环节调度算法来间接反对的,而在理论的需要中,通常须要自在的对于流程进行干预,如取回、回退、跳转、追加、传阅、传阅办理等,而这些流程操作对于工作流引擎来说是不合理的,因而必须独自的去实现。 流程操作反对的好坏间接决定到一个工作流管理系统的实用性。 4.工作流客户界面 工作流客界面程序为工作流零碎的表现形式,通常应用Web形式进行展示,通过提供待办列表、已办列表、执行流程操作、查看流程历史信息等来展示工作流零碎的性能。 5.流程监控 流程监控通过提供图形化的形式来对流程执行过程进行监控,包含流程运行情况,每个环节所消耗的工夫等等,而通过这些可相应的进行流程的优化,以进步工作效率。 6.表单设计器 表单设计器为可视化的表单设计工具,用户通过拖放的形式来绘制业务所需的表单,并可相应的进行表单数据的绑定。 表单设计器为客户以及开发商提供了疾速批改表单的办法,表单设计器的易用与否以及性能的欠缺与否影响到工作流管理系统的易用性。 7.与表单的集成 通常业务流转须要表单来表白理论的业务,因而须要与表单进行集成来实现业务意义,与表单的集成通常包含表单数据的主动获取、存储、批改,表单域的权限管制、流程相干数据的保护以及流程环节表单的绑定。 与表单的集成的好坏影响到工作流管理系统是否能进步开发效率。 8.与应用程序的集成 通过与应用程序的集成来欠缺工作流管理系统的业务意义,次要波及到的是与权限零碎以及组织机构的集成。流程环节须要相应的绑定不同的执行角色,而流程操作通常须要与权限零碎、组织机构进行关联。 演示:http://www.learun.cn/Home/VerificationForm[](http://www.learun.cn/Home/Ver...

August 6, 2020 · 1 min · jiezi

关于框架:推荐一个非常轻量级的Mysql操作框架

举荐一个十分轻量级的Mysql操作框架:传送门 默认反对性能办法阐明boolean has(Serializable id)依据主键查看记录是否存在E findById(Serializable id)依据主键查找对象List<E> findByIds(Collection<? extends Serializable> ids)依据主键批量查找对象List<E> find()查问所有的记录List<E> findByColumn(String column, Serializable value)依据指定字段查问记录List<E> findByColumn(String column, Collection<? extends Serializable> values)依据指定字段查问记录List<E> find(Conditions conditions)依据条件查问,条件的具体用法请看上面的案例Paginator<E> findByPage(Conditions conditions, Integer pageSize, Integer pageNumber)分页查问Integer delete(Serializable id)依据主键删除Integer delete(List<? extends Serializable> ids)依据主键删除Integer delete(String column, Collection<? extends Serializable> values)依据字段删除Integer insert(E entity)保留对象Integer insert(List<E> entitys)批量保留对象Integer update(E entity)批改对象(依据主键批改)Integer update(String id, String key, Object value)批改Integer update(List<? extends Serializable> ids, Map<String, Object> data)批量批改Integer update(String id, Map<String, Object> data)批改Integer update(List<? extends Serializable> ids, String key, Object value)批改第一步:注入jdbcTemplate@Beanpublic JdbcTemplate jdbcTemplate() { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource()); return jdbcTemplate;}也能够通过xml配置文件的形式注入 ...

July 21, 2020 · 1 min · jiezi