作者 | 江昱(阿里云 Serverless 产品经理)​ ​

前言

Serverless Devs 一直在以开源代码、开放生态的模式进行建设,所以在社区用户参与 Serverless Devs 的建设过程中,就会有两条途径: ​

1、参与贡献代码:参与代码的贡献相对于来说是有着清晰明确的流程,并且也是参与开源项目常见的途径,Serverless Devs 的贡献者文档,可以参考代码贡献文档; ​

2、参与贡献 Package:可以开发应用或者组件,发布到 Serverless Registry,以供更多人学习、参考或者使用;这一部分内容可以参考本文;​

Serverless Devs Package 介绍

在说什么是 Serverless Devs Packages 之前,需要先说一下** Serverless Registry,**相信很多研发同学都是知道,不同语言/生态都有自己的包管理平台,例如 Python 语言的 Pypi,Node.js 的 NPM。

而所谓的包管理平台,粗暴来说就是管理 “包” 的,这里的 “包”,往往指的是别人已经封装了的某些功能或者能力,我们可以直接使用,而无需我们重复造轮子。

说两个比较形象的例子,如果是搞人工智能,我们不太现实要手动的来写各种算法,往往会通过 Sklearn,Tensorflow 等对应的包来快速的加载某些模型,然后在这个基础上再进步的开发和完善。

而在 Serverless 领域,我们也希望有一个类似的包管理平台,那就是 Serverless Registry: ​

|

| Serverless Reigstry | Python Pypi | Nodejs NPM | | --- | --- | --- | --- | | 存储内容 | Serverless packages(包括 Components 和 Application) | Python packages | Nodejs packages | | 是否开放标准 | | 是 | 是 | | 官方源 | registry.devsapp.cn/simple | pypi.python.org | registry.npmjs.org | | 其它源举例 | Github registryGitee registry | 清华源 、豆瓣源 | tnpm、cnpm | | 是否支持私有化 | 支持 | 支持 | 支持 | | 配套工具 | Serverless Devs 开发者工具 | Python包管理工具(pip) | Node.js打包管理工具(npm) | | 配套命令 | s | pip | npm | | 如何使用 | 在s.yaml中直接引用 | 安装之后,在代码中引用 | 安装之后,在代码中引用 |

与 Python 的 Pypi,Node.js 的 NPM 不同的是,在 Serverless Regsitry 中,Package 是分成两类的,一类是 Component,一类是 Application。 ​

针对 Component 和 Application 的通俗来作区分: ​

  • Component:指的是组件,类似于一个脚本,通过这个脚本可以做一些事情。例如部署一个函数到某个云平台,调试某个函数,查看某个函数的日志等;

  • Application:指的是应用,类似于一个案例。例如通过某个 Application,可以让用户快速的创建一个 Hello World 的应用,创建一个音视频处理的应用等; 在 Serverless Devs 的规范中,有关于二者的一个区别图:

而关于 Component 和 Application 的关系是:Application 是一个应用案例的定义,需要通过 Component 进行部署上线。

或许上面的表示有些许的抽象,其实可以用一个形象的案例进行解释。例如: ​

  • 你通过 Python 的 Tensorflow 框架,做了一个人脸识别的应用,那么此时 Tensorflow 就可以认为是一个 Component,而人脸识别的应用就可以认为是一个 Application;
  • 你通过 Node.js 的 Express、Fs、Path 等依赖,做了一个个人博客,那么此时 Express、Fs、Path 等依赖,就可以认为是不同的 Component,而做出来的这个博客,就可以认为是一个 Application;
  • Serverless Registry Model
  • Serverless Package Model

开发 Package

开发者开发 Serverless Package 的流程相对来说是比较简单的。因为在 Serverless Devs 开发者工具中,已经提供了相对完整的脚手架能力。 ​

开发者只需要执行s init,并且选择Dev Template for Serverless Devs即可: ​

选择完成,不难发现,此时会让我们继续选择是开发 Component 还是开发 Application:

开发 Component

当选择Component Scaffolding之后,需要给即将开发的 Component 起一个名字(例如deployfunction): ​

此时,可以根据体统提示,进入到 Component 的项目目录:

此时,可以通过 IDE 打开当前项目,并通过npm进行依赖安装_(因为 Serverless Devs 是基于 Typescript 的项目,所以组件的开发仅支持 Typescript 和 Node.js 语言)_: ​

此时,可以打开项目中src/index.ts文件,不难发现已经存在一个案例: ​

import logger from './common/logger'; import { InputProps } from './common/entity';

export default class ComponentDemo {   /**    * demo 实例    * @param inputs    * @returns    */   public async test(inputs: InputProps) {     logger.debug(input: ${JSON.stringify(inputs.props)});     logger.info('command test');     return { hello: 'world' };   } }

在该文件中,我们不难发现存在一个test(inputs)方法,该方法是一个打印inputs参数,并返回hello world的案例,但是通过这个简单的案例,我们可以了解到几个事情: ​

公共方法就是用户可以使用的命令

在项目中,我们可以写多个方法对外暴露,目前只有一个test,但是我们可以增加任何public方法,而这些方法将会成为该组件的命令。例如: ​

 public async test(inputs: InputProps) {     logger.debug(input: ${JSON.stringify(inputs.props)});     logger.info('command test for test');     return { hello: 'world' };   }

 public async deploy(inputs: InputProps) {     logger.debug(input: ${JSON.stringify(inputs.props)});     logger.info('command test for deploy');     return { hello: 'world' };   }​

此时,我们在使用该组件时,组件就具备了两个命令:test 命令和 deploy 命令,为了验证我们的想法,我们可以对项目进行基础的开发态的编译:npm run watch: ​

此时,我们可以找到 example 目录,进行 deploy 方法的测试,例如: ​

通过 example 下面的 s.yaml 文件,我们不难看出,这个 yaml 有两个 service_(分别是 component-test 和 component-test2)。_

并且这两个 service,都用了我们同一个组件。所以,在执行s deploy之后获得到预期的结果:即执行了 deploy 方法。 ​

同样的,我们也可以执行 test 命令看一下效果: ​

要实现的逻辑可以在方法内自由实现

换句话来说,Serverless Devs 工具在加载组件的时候,实际上就是将对应的参数,传递到指定的方法,并且执行该方法。所以,你要实现什么功能都可以写在对应的方法里。 ​

以 Serverless Registry Component 项目为例,我在该项目中,存在一个 Login 的功能,所以我在 Login 中实现了以下内容: ​

 /**      * demo 登陆      * @param inputs      * @returns      */     public async login(inputs: InputProps) {

        const apts = {             boolean: ['help'],             alias: {help: 'h'},         };         const comParse = commandParse({args: inputs.args}, apts);         if (comParse.data && comParse.data.help) {             help([{                 header: 'Login',                 content: Log in to Serverless Registry             }, {                 header: 'Usage',                 content: $ s cli registry login <options>             }, {                 header: 'Options',                 optionList: [                     {                         name: 'token',                         description: '[Optional] If you already have a token, you can configure it directly',                         type: String,                     }                 ],             }, {                 header: 'Examples without Yaml',                 content: [                     '$ s cli registry login',                     '$ s cli registry login --token my-serverless-registry-token',                 ],             },]);             return;         }         const tempToken = comParse.data ? comParse.data.token : null         let st = 0         let user         if (tempToken) {             const fd = await fse.openSync(${getRootHome()}/serverless-devs-platform.dat, 'w+')             await fse.writeSync(fd, tempToken)             await fse.closeSync(fd)             st = 1         } else {

            const token = random({length: 20})             const loginUrl = https://github.com/login/oauth/authorize?client_id=beae900546180c7bbdd6&redirect_uri=http://registry.devsapp.cn/user/login/github?token=${token}

            // 输出提醒             logger.warn("Serverless registry no longer provides independent registration function, but will uniformly adopt GitHub authorized login scheme.")             logger.info("The system will attempt to automatically open the browser for authorization......")             try {                 await sleep(2000)                 opn(loginUrl)             } catch (e) {                 logger.info("Failed to open the default address. Please try to open the following URL manually for authorization: ")                 logger.info(loginUrl)             }             await logger.task('Getting', [                 {                     title: 'Getting login token ...',                     id: 'get token',                     task: async () => {                         for (let i = 0; i < 100; i++) {                             await sleep(2000)                             const tempResult = await request('http://registry.devsapp.cn/user/information/github', {                                 params: {                                     token: token,                                 },                             })                             if (!tempResult.Error && tempResult.safety_code) {                                 // 或得到结果, 存储状态                                 const fd = await fse.openSync(${getRootHome()}/serverless-devs-platform.dat, 'w+')                                 await fse.writeSync(fd, tempResult.safety_code)                                 await fse.closeSync(fd)                                 st = 1                                 user = tempResult.login                                 break                             }                         }                     },                 }             ])         }         if (st == 1) {             logger.log(${user ? user + ': ' : ''}Welcome to Serverless Devs Registry., "green");         } else {             logger.error("Login failed. Please log in to GitHub account on the pop-up page and authorize it, or try again later.")         }         return null;     }

在该方法中主要存在几个事情: ​

  1. 对inputs参数解析,获取用户输入的参数内容;

  2. 如果用户输入的参数带有-h或者--help参数,则输出对应的帮助信息;

  3. 如果用户输入的参数存在--token,则将--token对应的值存入到某个文件中;

  4. 如果用户没有带有--token输入,则直接打开浏览器,访问 Serverless Registry 的登陆地址,并进行相关登陆token的获取;

那么同样的方法,如果是一个部署函数的方法或者命令,我们是不是可以在这个里面实现打包压缩代码,然后调用相关创建函数,更新函数的接口进行函数的创建呢?再比如,想要做一个删除函数的方法,是不是可以在里面调用删除函数的接口呢? ​

所以可以认为,无论想要实现什么功能,都可以在对应的方法中实现。

关于开发过程中的一些规范

在上面我们说到,Serverless Devs 会带着某些参数调用该方法,那么参数是什么样子的?格式如何,我们该如何解析呢? ​

再比如,项目最后的 return 有什么用处?如何在项目中获取用户的密钥信息?用户在 Yaml 中写的各种参数如何获取?用户在执行命令时候传递的参数如何获取? ​

其实这些都可以参考:Serverless Devs Package 的开发规范文档的组件模型代码规范,在这里我们不难发现: ​

入参 inputs 的结构为: ​

 {     "command": "",      "project": {         "projectName": "",          "component": "",         "provider": "",         "access": ""     },     "credentials": {},     "prop": {},     "args": "",     "argsObj": [] }

其中,这些参数的含义: ​

目录含义
command用户所执行的命令
project用户的项目基本信息
credentials用户的密钥信息
prop用户配置的属性/参数
args用户传递的参数(字符串形式)
argsObj用户传递的参数(解析后的,以数组形式传递)

一个更为具体的例子是,在上面的案例代码中,有一个 test 方法,该方法就是功能实现的方法。此时当用户使用 test 命令时,系统就会携带参数调用该方法。以一个真实案例作为举例说明: ​

该组件名为hexo,组件核心代码如上所示,具备一个 test 方法,此时用户侧的 Yaml 为: ​

edition: 1.0.0        #  命令行YAML规范版本,遵循语义化版本(Semantic Versioning)规范 name: FullStack       #  项目名称 access: xxx-account1  #  秘钥别名

services:   HexoComponent:     component: hexo     props:       region: 'cn-hangzhou'       codeUri: './src'​

当用户执行s test mytest -a -b abc,此时,组件代码中的test方法,收到的inputs参数实际上是: ​

{     "command": "test",      "project": {         "projectName": "HexoComponent",          "component": "hexo",         "provider": "alibaba",         "access": "release"     },     "credentials": {         "AccountID": "****",         "AccessKeyID": "****",         "AccessKeySecret": "****"     },     "prop": {         "Region": "cn-hangzhou",         "CodeUri": "./src"     },     "args": "mytest -a -b abc",     "argsObj": [       "mytest", "-a", "-b", "abc"     ] }

此时 test 方法会打印日志信息等,并返回最终的结果给命令行工具:{ "hello": "world" } ​

而关于如何返回帮助文件,如何获取密钥信息,如何解析用户的输入内容,则可以参考 Serverless Devs 提供的 core 包: ​

在该工具包中,我们可以看到诸多的方法助力我们快速的使用: ​

例如,获取用户使用密钥,就可以直接引入 core 包,使用对应的getCredential方法即可: ​

  • 使用方法 1 :不传任何参数的时候,会获取 default 密钥信息

    const { getCredential } = require('@serverless-devs/core');     async function get() {       const c = await getCredential();       console.log('c', c);     }

  • 使用方法 2 :传参数,获取指定的密钥信息

    const { getCredential } = require('@serverless-devs/core');     async function get() {       // 组件接收的inputs       const inputs = {};       const c = await getCredential(inputs, 'custom', 'AccountIdByCustom', 'SecretIDByCustom');       console.log('c', c);     }

组件的描述

在完成我们的组件功能编写之后,就可以进行组件的描述,所谓的组件的描述,就是要告诉 Serverless Registry,这是一个什么组件,有哪些功能。描述内容在publish.yaml中: ​

关于该文件的内容以及部分参数的取值,可以参考组件模型元数据。 ​

当然,除了 publish.yaml 之外,在 Serverless Package 的规范中,目录哪还有其他的文件: ​

|- src # 目录名字可以变更 |   └── 代码目录   |- package.json: 需要定义好main    |- publish.yaml: 项目的资源描述    |- readme.md: 项目简介   |- version.md: 版本更新内容

其中: ​

目录必须含义
src推荐存在统一放置功能实现,当然也可以换成其他的名称,或者平铺到项目下,但是推荐通过src来做统一的存放
package.json必须存在Node.js的package.json,需要描述清楚组件的入口文件位置
publish.yaml必须存在Serverless Devs Package的开发识别文档
readme.md必须存在对该组件的描述,或帮助文档信息
version.md推荐存在版本的描述,例如当前版本的更新内容等

最新版本的规范 (0.0.2 版本),将会在近期上线,和 0.0.1 版本不同的是,新版本的 Properties 参数将遵循 JSON Scheme 规范,目前可参考 pr#386) ​

开发 Application

当选择Application Scaffolding之后,需要给即将开发的 Application 起一个名字(例如helloworld): ​

Serverless Package 中的 Application 开发相对更为简单,无论是任何编程语言,无论是任何项目,只要可以通过 Serverless Devs 开发者工具进行部署,就可以把它包装成为一个应用。 ​

或者更为准确的来表述,只要你现在有一个可以通过 Serverless Devs 直接部署的项目,那么你就可以: ​

  1. s init 创建一个应用模板
  2. 把你的那个项目,脱敏后,直接放在src目录下
  3. 对应用进行描述,例如编辑publish.yaml,编辑version.md,编辑readme.md等

这一部分具体情况,可以参考应用模型文档: ​

特殊格式:在应用模型中,需要存在src/s.yaml文件,作为Serverless Devs识别和使用的资源、行为描述文件,在该文件中,可能涉及到部分内容是需要用户进行填写的,例如用户的密钥名字,用户部署业务的地域等。此时可以参考:

  • "{{ access }}" :直接提醒用户需要输入access这样的一个参数,作为Yaml中所必须的参数;
  • '{{ bucket | alibaba oss bucket }}' ::直接提醒用户需要输入bucket这样的一个参数,作为Yaml中所必须的参数,并以|之后的内容"alibaba oss bucket"作为解释这个参数的含义; 例如,在某应用的s.yaml中表现为:

edition: 1.0.0 access: "{{ access }}"

services:   website-starter:    component: devsapp/website     actions:       pre-deploy:         - run: npm install           path: ./         - run: npm run build           path: ./     props:       bucket: '{{ bucket | alibaba oss bucket }}'       src:         codeUri: ./         publishDir: ./build         index: index.html       region: cn-hangzhou       hosts:         - host: auto

发布 Package

在完成 Serverless Package 的开发之后,为了给更多人使用,还可以将发布到 Registry 中。

发布到 Github/Gitee

关于发布到 Github 或者 Gitee 中,方法很简单:

  1. 创建一个 Repo(代码仓库)

  2. 将整个应用或者组件推到该仓库

  3. 发布一个 Release:此时,在客户端,用户就可以通过s set registry进行registry的切换,来使用相对应的功能了。例如,我在 Github 的账户为 anycodes,我就可以创建一个仓库,名字为 demo,此时,我将我的组件/应用上传到这个仓库中,然后发布一个 Release。此时,我在客户端,将 registry 切换到 Github,然后就可以:

  • 在使用组件的时候,指定组件名为仓库,例如 anycodes/demo
  • 在初始化应用的时候,也可以直接指定应用,例如 anycodes/application

    发布到 Serverless Registry

若想把 Package 发布到 Serverless Registry,可以考虑使用 Serverless Registry Component。 ​

(Serverless Registry 的客户端工具,也是一个组件,所以可以认为 Serverless Registry Component 的这个项目,本身也是当前文章的一个最佳实践。)

在完成组件或者应用的开发流程之后,需要: ​

  1. 注册并登录 Serverless Registry,实际上就是执行s cli registry login
  2. 进行组件的发布,实际上就是s cli registry publish

当然,Serverless Registry Component 这个项目,除了登陆和发布之外,还有诸多其他的功能,例如: ​

  • 查看当前登陆账号发布过的 Package
  • 查看某个 Package 的版本信息
  • 查看某个 Package 指定版本信息
  • 删除某个指定版本的 Package
  • 对登陆 token 进行更新

总结

众所周知,一个完整的技术架构的发展,离不开生态社区对他的赋能,无论是 Docker 的 Dockerhub 还是 Python 的 Pypi,再或者是 Node.js 的 NPM,生态的活跃度和我们开发者的幸福感是正相关的。 ​

我们也非常希望 Serverless Devs 可以通过 Serverless Regsitry 这样一个开放的生态,和更多的人一同玩转 Serverless 架构,也期待更多优秀的 Package,被更为广泛的应用。 ​

( END)

更多内容关注 Serverless 微信公众号(ID:serverlessdevs),汇集 Serverless 技术最全内容,定期举办 Serverless 活动、直播,用户最佳实践。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Three.js(十三)—— 语音模块

    文章目录13、语音模块13.1 音频与场景关联&#xff08;音源、监听者&#xff09;非位置音频THREE.Audio位置音频THREE.PositionalAudio13.2 音乐可视化查看平均频率频率数据可视化案例13、语音模块 13.1 音频与场景关联&#xff08;音源、监听者&#xff09; Threejs提供了一…...

    2024/4/14 0:27:56
  2. 【6】3. 无重复字符的最长子串 python

    题目&#xff1a;给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 题解&#xff1a;双指针&#xff0c;哈希表 class Solution:def lengthOfLongestSubstring(self, s: str) -> int:hash {} #定义一个哈希表散列表字典&#xff0c;{key:…...

    2024/4/14 0:28:01
  3. SpringCloud:使用spring cloud LoadBalancer作为负载均衡器并使用随机策略

    1.在配置文件里进行配置&#xff1a; spring.cloud.loadbalancer.ribbon.enabledfalse完整的application.properties如下&#xff1a; server.port8088 spring.application.namespringboot spring.datasource.urljdbc:mysql://139.198.xx.xx/xxx spring.datasource.usernamer…...

    2024/4/14 0:28:11
  4. docker 学习安装

    https://yeasy.gitbook.io/docker_practice/image/pull...

    2024/4/5 3:47:13
  5. 数组排序(数字)【JS】

    对数字排序 const arr [3, 5, 4, 2, 1] arr.sort((a,b) > a-b) console.log(arr)执行结果 程序原理 首先定义一个常量的数字的数组 调用数组中的原型方法 Array.prototype.sort() - JavaScript | MDN (mozilla.org) 也就是说 如果a-b<0&#xff0c;a在前面&#xff0…...

    2024/5/3 2:47:02
  6. 8.2 文件包含和条件编译

    8.2 文件包含和条件编译预备知识&#xff1a;一.文件包含一般格式&#xff1a;说明&#xff1a;区别&#xff1a;二.条件编译形式1&#xff1a;当标识符被定义过&#xff0c;则程序段1进行编译&#xff1b;形式2&#xff1a;当标识符没有被定义过&#xff0c;则程序段1进行编译…...

    2024/4/19 19:21:59
  7. 虚拟机类加载机制-类加载器

    Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现&#xff0c;以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”&#xff08;Class Loader&#xff09;。 类与…...

    2024/4/14 0:28:01
  8. 磁盘的组成

    1&#xff09;磁盘主要由磁盘盘&#xff0c;机械手臂&#xff0c;磁盘读取头&#xff0c;主轴马达组成‘ 2&#xff09;株距的写入主要在磁盘盘上&#xff0c;磁盘盘上面又可以细分为扇区&#xff0c;磁道两种单位。其中扇区又有两种大小&#xff1a;512bytes&#xff0c;4kbyt…...

    2024/4/28 6:23:25
  9. 好用到爆的Java技巧

    本文不是一个吹嘘的文章&#xff0c;不会讲很多高深的架构&#xff0c;相反&#xff0c;会讲解很多基础的问题和写法问题&#xff0c;如果读者自认为基础问题和写法问题都是不是问题&#xff0c;那请忽略这篇文章&#xff0c;节省出时间去做一些有意义的事情。 开发工具 不知…...

    2024/4/14 0:28:01
  10. Android-史上最优雅的实现文件上传、下载及进度的监听,网易严选Android开发三面面经

    .add(“key”, “value”) .add(“file1”, new File(“xxx/1.png”)) //添加file对象 .add(“file2”, new File(“xxx/2.png”)) .from() //from操作符&#xff0c;是异步操作 .as(RxLife.asOnMain(this)) //感知生命周期&#xff0c;并在主线程回调 .subscribe(s -> { //…...

    2024/4/14 0:28:16
  11. 臭氧果蔬消毒器市场现状研究分析与发展前景预测报告

    2022-2028中国臭氧果蔬消毒器市场现状研究分析与发展前景预测报告 2021年中国臭氧果蔬消毒器市场销售收入达到了 万元&#xff0c;预计2028年可以达到 万元&#xff0c;2022-2028期间年复合增长率(CAGR)为 %。中国市场核心厂商包括Sonic Soak、O3 Pure、Prestige、KENT和Cirsum…...

    2024/4/15 18:42:42
  12. 医药客户再签约 易趋助力巨翊科技实现项目管理标准化、规范化

    近日&#xff0c;易趋凭借系统的成熟性、稳定性、灵活性、易用性&#xff0c;以及丰富的实施经验&#xff0c;与巨翊科技&#xff08;上海&#xff09;有限公司签约&#xff0c;共同搭建数字化项目管理平台&#xff0c;实现项目管理体系落地。 一、签约背景 巨翊科技&#xff0…...

    2024/5/2 23:46:08
  13. 2008款宝马730Li车发动机偶尔无法起动?

    一、故障现象 一辆2008款宝马730Li车&#xff0c;搭载N52B30BF型发动机&#xff0c;累计行驶里程约为20万km。车主反映&#xff0c;该车发动机偶尔无法起动。 二、故障诊断 接车后反复试车&#xff0c;无法再现故障。用故障检测仪检测&#xff0c;无相关故障代码存储。用pic…...

    2024/5/3 3:40:07
  14. Spring Boot 应对 Log4j2 注入漏洞指南

    导读Log4J2漏洞涉及的影响太广了&#xff0c;昨天发文后很多粉丝留言问Spring Boot项目是否受到Log4J2漏洞影响。Spring官方已经全面进行了排查&#xff0c;现在大家可以知道这些信息和应对方法。 默认配置不受影响 Spring Boot默认日志组件是logback&#xff0c;开发者通过日…...

    2024/4/19 12:39:05
  15. MySQL模糊查询再也用不着 like+% 了

    MySQL模糊查询再也用不着 like% 了&#xff01;倒排索引全文检索创建全文索引使用全文索引Natural LanguageBooleanQuery Expansion删除全文索引我们都知道 InnoDB 在模糊查询数据时使用 “%xx” 会导致索引失效&#xff0c;但有时需求就是如此&#xff0c;类似这样的需求还有很…...

    2024/4/14 0:28:21
  16. vue3 - axios

    1. 安装 npm install axios 2. main.js中需要进行全局配置 import Vue from vue import App from ./App.vue import router from ./router import store from ./store import ./plugins/elementui import ./assets/global.css import ./assets/fonts/iconfont.css// 配置请求…...

    2024/4/15 23:16:25
  17. 其他:一、使用docker部署区块链(ubuntu18.04)-JAVA

    build_chain.sh脚本提供-d参数&#xff0c;支持使用docker方式部署区块链。本章将演示如何以docker方式搭建区块链 1、安装依赖&#xff08;如果系统已经有openssl可以不用执行该条命令&#xff09; apt install -y curl openssl 2、下载安装脚本(如果第一个下载不成功&#…...

    2024/4/18 17:04:11
  18. 字母异位分组

    这道题考了中庸的思想&#xff0c;每组答案里面一个单词的各个字母的顺序不近相同&#xff0c;我们要将一个单词完全变为另一个十分的困难&#xff0c;但是我们都可以把他们变为一个中间值&#xff0c;是不是就简单许多了呢。 这里我们可以将单词的每个字母按字典序排序&#…...

    2024/4/24 10:53:09
  19. aws-cli major version 判断

    使用了两个版本的 cli 需要特别处理 AWS_CLI_MAJOR_VERSION$(aws --version 2>&1 | cut -d " " -f1 | cut -d "/" -f2 | cut -d "." -f1) if [ "$AWS_CLI_MAJOR_VERSION" "1" ]; thenecho "aws-cli verion is …...

    2024/5/2 23:43:48
  20. 中国分光计市场现状研究分析与发展前景预测报告(2022)

    【报告篇幅】&#xff1a;96 【报告图表数】&#xff1a;139 【报告出版时间】&#xff1a;2021年12月 报告摘要 2021年中国分光计市场销售收入达到了 万元&#xff0c;预计2028年可以达到 万元&#xff0c;2022-2028期间年复合增长率(CAGR)为 %。中国市场核心厂商包括Ther…...

    2024/4/18 8:40:37

最新文章

  1. 【note4】性能优化与调试:

    文章目录 1.内核函数调用堆栈&#xff1a; 1.内核函数调用堆栈&#xff1a;...

    2024/5/3 3:59:20
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 磁盘管理与文件管理

    文章目录 一、磁盘结构二、MBR与磁盘分区分区的优势与缺点分区的方式文件系统分区工具挂载与解挂载 一、磁盘结构 1.硬盘结构 硬盘分类&#xff1a; 1.机械硬盘&#xff1a;靠磁头转动找数据 慢 便宜 2.固态硬盘&#xff1a;靠芯片去找数据 快 贵 硬盘的数据结构&#xff1a;…...

    2024/5/1 13:00:58
  4. 第十一届蓝桥杯物联网试题(省赛)

    对于通信方面&#xff0c;还是终端A、B都保持接收状态&#xff0c;当要发送的数组不为空再发送数据&#xff0c;发送完后立即清除&#xff0c;接收数据的数组不为空则处理&#xff0c;处理完后立即清除&#xff0c;分工明确 继电器不亮一般可能是电压不够 将数据加空格再加\r…...

    2024/5/1 13:34:09
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57