当前位置: 首页 > news >正文

EulerMaker Yocto Open Build Service

EulerMaker & Yocto & Open Build Service

  • 1 介绍
    • 1.1 概述
  • 2 工具
    • 2.1 Yocto 【嵌入式领域】
      • 介绍
      • 目标
      • 好处
      • 三大关键组件
      • 创建流程
      • 发行版本
    • 2.2 Open Build Service 【OBS】【服务器领域】
      • 介绍
      • 应用
    • 2.3 EulerMaker 【全场景】
      • 介绍
      • 特性
      • 需求背景
        • (1)能支持全场景
        • (2)新的构建系统要集成测试流程
        • (3)强大的定制能力
        • (4)统一的包格式
      • 附 吴峰光博士 介绍
  • 3 openEuler
    • 3.1 openEuler 使用 OBS 【服务器场景】
    • 3.2 openEuler Embedded 使用的工具 Yocto 【嵌入式场景】
    • 3.3 嵌入式特色
  • 其他
    • Buildroot
  • 参考

1 介绍

1.1 概述

linux 开发中涉及系统构建、软件构建等,本文做一些工具用途知识普及。

服务器领域的 OBS、嵌入式领域的 Bitbake【Yocto】,是各自领域的代表性构建系统,历史悠久。而 Euler系统领域 后来者 EulerMaker 想实现全场景统一构建系统。
在这里插入图片描述

2 工具

2.1 Yocto 【嵌入式领域】

Shape the future of customizable embedded Linux.

介绍

Yocto 项目(YP)是一个开源协作项目,可帮助开发人员创建基于 Linux 的自定义系统,而不受硬件架构的影响。该项目由 Linux 基金会于 2010 年宣布,并于 2011 年 3 月与OpenEmbedded等 22 个组织合作启动。

该项目提供了一套灵活的工具和空间,全球的嵌入式开发人员可以共享技术、软件堆栈、配置和最佳实践,可用于为嵌入式和 IOT 设备或任何需要定制 Linux 操作系统的地方创建定制的 Linux 映像。

Yocto 项目的重点是改进嵌入式 Linux 发行版的软件开发流程。Yocto 项目提供可互操作的工具、元数据和流程,可实现基于 Linux 的嵌入式系统的快速、可重复开发,其中开发流程的每个方面都可以自定义。支持ARM、MIPS、PowerPC和x86 / x86-64架构的定制Linux系统开发。

除了构建 Linux 系统之外,还可以生成用于交叉编译的工具链和针对其自身发行版定制的软件开发工具包(SDK)。该项目试图与软件和供应商无关。因此,例如,可以选择要使用的包管理器格式(deb、rpm或ipk)。

目标

  • 为开源项目提供协作场所,进一步开发可定制的 Linux 平台和基于嵌入式系统的系统。
  • 鼓励对 Linux 平台开发的现有组件进行标准化和重用。
  • 专注于创建一个构建系统基础设施和技术,以满足所有用户的需求,并在已识别和实用的地方添加缺失的功能,并且源自 OpenEmbedded 架构。
  • 确定涵盖定制 Linux 产品开发(从实验和概念验证到应用程序开发和生产)的工具中缺少功能的关键领域。
  • 记录可用的方法和工具,并使用户能够轻松使用它们。
  • 尽可能确保这些开发的工具在架构上是独立的。
  • 进一步教育社区了解这种标准化和协作在 Linux 社区和行业中的好处。

好处

在这里插入图片描述

三大关键组件

  • BitBake ——实质上就是 Yocto 的构建系统引擎。它负责创建配方——构建特定系统所需的任务列表——以及解析元数据和执行配方。

  • OpenEmbedded-Core ——元数据。它保存了创建系统所需的基本配方、相关文件和类。构建时设定为通用,以便适用于各种基于 OpenEmbedded 的系统。

  • Poky ——包含一个基于 Linux 的全平台构建工具和各种其他技术,帮助各大团队以可靠的方式快速地开发新系统。Poky 基于各种架构生成文件系统镜像。其中的典型示例就是 QEMU 全系统仿真,一种极其出色的嵌入式软件测试平台。

创建流程

在这里插入图片描述

发行版本

发行代码名称日期支持
5.1(未来版本)斯蒂赫德10/202405/2025
5.0 (LTS) (当前稳定版本)斯卡斯盖普04/202404/2028
4.3 (旧版本,不再维护)南比尔德11/202305/2024
4.2 (旧版本,不再维护)米克尔多尔05/2023停产
4.1 (旧版本,不再维护)兰代尔10/2022停产
4.0 (LTS) (旧版本,但仍在维护)柯克斯通05/202204/2026
3.4 (旧版本,不再维护)霍尼斯特2021 年 11 月停产
3.3 (旧版本,不再维护)哈德诺特2021 年 4 月停产
3.2 (旧版本,不再维护)盖茨加斯2020 年 11 月停产
3.1 (LTS) (旧版本,但仍在维护)邓费尔2020 年 4 月04/2024
3.0 (旧版本,不再维护)宙斯2019 年 10 月停产
2.7 (旧版本,不再维护)战士2019 年 4 月停产
2.6 (旧版本,不再维护)2018 年 11 月停产
2.5 (旧版本,不再维护)相扑2018 年 4 月停产
2.4 (旧版本,不再维护)洛可2017 年 10 月停产
2.3 (旧版本,不再维护)火焰兵2017 年 4 月停产
2.2 (旧版本,不再维护)莫蒂2016 年 10 月停产
2.1 (旧版本,不再维护)克罗格斯2016 年 4 月停产
2.0 (旧版本,不再维护)叶忒罗2015 年 10 月停产
1.8 (旧版本,不再维护)菲多2015 年 4 月停产
1.7 (旧版本,不再维护)晕眩的2014 年 10 月停产
1.6 (旧版本,不再维护)雏菊2014 年 4 月停产
1.5 (旧版本,不再维护)多拉2013 年 10 月停产
1.4 (旧版本,不再维护)迪伦2013 年 4 月停产
1.3 (旧版本,不再维护)丹尼2012 年 10 月停产
1.2 (旧版本,不再维护)丹齐尔2012 年 4 月停产
1.1 (旧版本,不再维护)爱迪生2011年10月停产
1.0 (旧版本,不再维护)伯纳德2011停产
0.9 (旧版本,不再维护)拉维恩2010停产
  • 未来版本:带有将来发布计划的版本。
  • 当前稳定版本:当前推荐使用的稳定版本。
  • 旧版本,不再维护:已经停止更新和维护的版本。
  • 旧版本,但仍在维护:虽然不是最新,但仍在继续维护的版本。
  • 停产:产品已经停止生产,不再提供支持。

2.2 Open Build Service 【OBS】【服务器领域】

介绍

Open Build Service (OBS,开放构建服务,以前称为openSUSE Build Service) 是一个通用系统,用于以自动、一致和可重复的方式从源代码构建和分发二进制包。 您可以为各种操作系统和硬件体系结构发布软件包以及更新、附加组件、设备和整个发行版。应用在 SUSE Linux Enterprise Server 、openSUSE、Red Hat Enterprise Linux、Mandriva、Ubuntu、Fedora、Debian和Arch Linux。此外,OBS也能构建特定产品与应用程序。

Open Build Service 软件本身在 GPL 协议下发布。 Linux 基金会已经把该项目添加到 Linux 开发者网络 (LDN),认可了OBS对更广泛的Linux社区的作用。 此外,各种公司以及 MeeGo 项目、Tizen 和 EulerOS 正在使用OBS来开发他们的发行版。

build.opensuse.org支持 6 种架构上的 21 种操作系统,并且 OBS 提供对打包过程的完全控制,使其成为终极打包平台。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

应用

  • redhat
  • debian
  • ubuntu

2.3 EulerMaker 【全场景】

介绍

EulerMaker 是一个支持软件包、文件级剪切的统一构建工具,目标替代 OBS 和 Yocto,如今 OBS 已经替代,替代 Yocto,还在努力中。

统一构建平台是一款软件包构建平台,实现从源码到二进制软件包与软件仓库的平台服务。该平台通过统一的软件包配置管理,软件包依赖关系分析,实现基于依赖关系的软件包高效构建。帮助开发者与合作伙伴建设自己的用户个人仓,OS核心仓,构建门禁能力。

openEuler 社区一开始是用 OBS 来构建的,2022 年 3 月,openEuler 团队开始设计新的构建系统 EulerMaker,致力于替代 OBS 和 Yocto。

特性

EulerMaker 构建系统是一款软件包构建系统,完成源码到二进制软件包的构建,并支持开发者通过搭积木方式,组装 和 定制出适合自己需求的场景化 OS。主要提供增量/全量构建,分层定制与镜像定制的能力。

增量/全量构建,基于软件包变化,结合软件包依赖关系,分析影响范围,得到待构建软件包列表,按照依赖顺序下发并行构建任务。

构建依赖关系,提供工程软件包构建依赖表,支持筛选及统计软件包依赖及被依赖的软件包内容。

分层定制,支持在构建工程中,通过选择与配置层模型,实现对软件包的patch构建依赖、安装依赖、编译选项等内容的定制,完成针对软件包的场景化定制。

镜像定制,支持开发者通过配置repo源,生成iso、qcow2、容器等OS镜像,并支持对镜像进行软件包列表定制。

分层定制,支持在构建工程中,基于 spec 或 yaml,叠加配置层模型,实现针对软件包的版本、patch、构建依赖、安装依赖、编译选项及构建流程等内容的定制。

镜像定制,支持开发者通过配置 repo 源,生成 iso、qcow2、容器等 OS 镜像,并支持对镜像进行软件包列表定制。

支持本地任务复现,通过命令行在本地复现构建任务,方便定位构建问题。

一键工程创建,基于yaml配置实现一键工程创建,支持批量加包,大大简化用户操作。

需求背景

(1)能支持全场景

就服务器 OS 来说,OBS 构建可能够用;但是当一个操作系统要支持全场景【含嵌入式】,复杂度就大大增加,对构建系统提出了更严苛的要求。

如下摘自–吴峰光博士

“服务器领域的 OBS 主打能力是什么?几大主流的 Linux 发行版它都支持,比如可以给 Redhat 打包,也可以给 Debian 打包。兼容并包是它的核心设计目标,适应了 Linux 多样化的现状。但我们认为,多样化在早期对 Linux 发展有利,但长期而言,Linux 生态的碎片化是一个需要被解决的问题。”

“嵌入式领域的 Bitbake 采用了面向任务和过程的 DSL 描述语言,这使得它非常灵活强大,但自由度和复杂性过高,以学习曲线陡峭知名。现在流行的理念是如 YAML、JSON 等通用、声明式的配置语言,和函数式编程,以实现低门槛、易理解、可控可重复的构建过程。”

(2)新的构建系统要集成测试流程

如下摘自–吴峰光博士

“在 Linux 发展的最初阶段,需求是简单的:只要功能实现了,跑一下 gcc / make 能构建出来,用户能用,构建系统的工作就完成了。那时侯 Linux 社区对测试不重视,也还没有 CI / CD 的概念,测试基本全靠用户踩坑。现在情况就不一样了,时代的要求在提高:开发者期望有质量把控,要做测试,要有一整套的构建测试 CI / CD,要覆盖一整个开发流程,一站式全部搞定,出来的 RPM 包已经是经过测试的、用户能放心用的。这已经被开发者认为是标配,是开发者的正常预期。”

“市面上的 CI / CD 通用测试服务,适合测试上层的应用;而操作系统需要测试的,既有上层软件,又有基础软件;既面向应用开发者,又面向内核开发者,还有软件厂商、硬件厂商、OS 厂商,他们都有独特的测试需求;既要做功能测试,还要做性能测试。这些不是市面上通用 CI / CD 能做的。所以,我们需要一套全栈系统,既能构建,又满足上述所有测试需求。”

早在 2020 年,吴峰光就综合分析上述需求,设计了 Compass-CI。Compass-CI 被设计为一个通用的任务执行系统,可以执行构建、功能测试、性能测试等各类任务。Compass-CI 也被设计为一个异构调度系统,可以调度物理机、虚拟机、容器等各种资源。

(3)强大的定制能力

如下摘自–吴峰光博士

“一个通用的 OS,所带的软件往往要求大而全,把常见的功能都编进去。但很多场合有着不同的需求,比如启用一个不常用的功能,或者在嵌入式设备上,因为资源受限,需要把不必要的功能裁减掉。”
类似的,当我们说一个 OS 支持全场景,是只需维护一套 OS 源代码,通过源码级 + 镜像级定制,即可构建生成各类场景化的二进制 OS 发布。强大的定制能力,是赋能一套 OS 源码支持全场景的‘究极魔法’。”

“我们引入了开发者们都很熟悉的 YAML 配置语言,用它来声明式的描述一个软件包。”

“比如您在一家大公司的基础设施团队,需要在 openEuler 基础上定制 Linux 内核,改一下 kconfig,加一个补丁。在过去,您可能需要拷贝一份 kernel.spec,然后直接在上面修改。这意味着维护上百行的 SPEC 文件,且时不时要从上游回合新的改进,这一过程枯燥而繁琐。现在从 Fork 模式转为搭积木模式,只需维护好一个小小的 kernel.yaml 文件。然后每次拉新的 BaseOS 重新构建,都会自动拿到上游欧拉内核的最新错误修复。这样就很好的降低了开发维护成本,提高了安全性。是一种更加可持续的上下游协同演进方式。”

(4)统一的包格式

openEuler 现在采用的是业界主流的软件包格式之一:RPM 。这种软件包格式不仅仅被 Redhat Linux 使用,也被 openSUSE、OpenMandriva、Oracle Linux、Tizen 等使用。

为了一统软件包的定义,openEuler 采用了新的 YAML 配置语言进行包描述,并接管 RPM 的 SPEC 文件,成为新的开发者界面。吴峰光说,SPEC 文件中采用了大量复杂的宏定义,而 EulerMaker 将这些复杂性隐藏到YAML后面。换言之,openEuler 新的统一构建系统采用的 YAML 配置语言制定了一种更通用、更灵活的包定义。

附 吴峰光博士 介绍

2022 年末,openEuler Summit 2022 上,中国 Linux 内核圈最有影响力的开发者之一——吴峰光博士做了名为《面向全场景操作系统的构建服务发布》的主题演讲,正式向开发者披露了 openEuler 统一构建服务 EulerMaker。

吴峰光博士是著名的 Linux 内核贡献者、华为计算操作系统首席专家、openEuler 社区技术委员会委员。他在 Linux 内核领域上拥有卓越贡献,在 I/O 和内存管理、内核测试服务方面做出了重要的贡献。

3 openEuler

3.1 openEuler 使用 OBS 【服务器场景】

openEuler 社区一开始是用 OBS 来构建的,22年后使用 EulerMaker 替代 OBS。

3.2 openEuler Embedded 使用的工具 Yocto 【嵌入式场景】

由于openEuler Embedded是面向嵌入式场景的,其对构建系统的核心诉求是: 交叉编译、灵活的定制化与裁剪, 而openEuler现有的 OBS 构建系统更加适合服务器场景的大型OS构建,无法有效满足嵌入式场景的需求,所以 openEuler Embeddedd 的核心构建系统是基于Yocto,但又根据自身的需求做了很多定制化的开发。

3.3 嵌入式特色

  • 南向生态:openEuler Embedded Linux 当前主要支持 ARM64、x86-64 两种芯片架构,22.03 LTS SP3 版本新增支持 RK3588 芯片,未来还将支持龙芯、飞腾等芯片。

  • 嵌入式弹性虚拟化底座:openEuler Embedded 的弹性虚拟化底座是为了在多核片上系统(SoC,System On Chip)上实现多个操作系统共同运行的一系列技术的集合,包含了裸金属、嵌入式虚拟化、轻量级容器、LibOS、可信执行环境(TEE)、异构部署等多种实现形态。

  • 混合关键性部署框架:构建在融合弹性底座之上,通过一套统一的框架屏蔽下层弹性虚拟化底座形态的不同,从而实现 Linux 和其他 OS 运行时便捷地混合部署。

  • 北向生态:350+ 嵌入式领域常用软件包的构建;支持 ROS2 humble 版本,集成 ros-core、ros-base、SLAM 等核心包,并提供 ROS SDK,简化嵌入式 ROS 开发;提供软实时能力,软实时中断响应时延微秒级;集成 OpenHarmony 的分布式软总线和 hichain 点对点认证模块,实现欧拉嵌入式设备之间互联互通、欧拉嵌入式设备和 OpenHarmony 设备之间互联互通;支持 iSula 容器,可以实现在嵌入式上部署 openEuler 或其他操作系统容器,简化应用移植和部署。

  • 硬实时系统(UniProton):是一款实时操作系统,具备极致的低时延和灵活的混合关键性部署特性,可以适用于工业控制场景,既支持微控制器 MCU,也支持算力强的多核 CPU。

其他

Buildroot

类似 yocto,yocto用户多,资源丰富,buildroot 用户少,资源少。

参考

1、官网–Yocto
2、wiki–Yocto
3、官网–Open Build Service
4、wiki–Open Build Service
5、openEuler Embedded–构建系统
6、[Develop and Maintain a Distro with Open Build Service](https://www.slideshare.net/slideshow/
develop-and-maintain-a-distro-with-open-build-service/14015521)
7、Yocto Project – Build your custom linux
8、Yocto 还是 Buildroot,构建自定义嵌入式系统时,您会选择哪一种?
9、《Embedded Linux Systems with the Yocto Project》
10、openEuler–EulerMaker用户指南
11、openEuler操作系统(创新项目总览)
12、EulerMaker:构建 openEuler 全场景生态
13、欢迎使用EulerMaker
14、“多重人格”的操作系统——openEuler
15、EulerMaker特色
16、openEluer Embedded BSP雪球计划
17、rockchip/documents/openEuler镜像的构建

相关文章:

EulerMaker Yocto Open Build Service

EulerMaker & Yocto & Open Build Service 1 介绍1.1 概述 2 工具2.1 Yocto 【嵌入式领域】介绍目标好处三大关键组件创建流程发行版本 2.2 Open Build Service 【OBS】【服务器领域】介绍应用 2.3 EulerMaker 【全场景】介绍特性需求背景(1)能支…...

SQL面试问题集

目录 Q.左连接和右连接的区别 Q.union 和 union all的区别 1、取结果的交集 2、获取结果后的操作 Q.熟悉开窗函数吗?讲一下row_number和dense_rank的区别。 Q.hive行转列怎么操作的 Q.要求手写的题主要考了聚合函数和窗口函数,row_number()&#…...

基于单片机的八路抢答器设计论文

绪 论1.1 课题研究的相关背景 抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辩认出选手号码。现在大多数抢答器均使用单片机(如MCS-5…...

一个最简单基于spring的websocket服务端+客户端实现案例

1、服务端 代码分为两部分: 一个是服务器终端类:用java注解来监听连接ServerEndpoint、连接成功OnOpen、连接失败OnClose、收到消息等状态OnMessage import org.springframework.stereotype.Component;import javax.websocket.*; import javax.websoc…...

三.二、关于 Vue.js 中`transition`组件使用:页面切换动画和标签移动动画都是要用到的

一、引言 在 Vue.js 中,transition组件提供了一种简单而强大的方式来实现页面过渡效果。它可以让元素在状态改变时,如进入或离开视图时,以平滑的动画方式进行过渡。通过transition,我们可以为应用增添更加生动和吸引人的用户体验…...

指纹考勤系统

目录 1.课题研究目的和内容 1.1 课题研究目的 1.2 课题研究内容 2.系统总体方案设计及功能模块介绍 2.1总体方案设计 2.2 ATK-301模块介绍 2.3 TFTLCD显示功能模块介绍 2.4 蜂鸣器报警功能模块介绍 2.5 时钟模块介绍 3.系统硬件设计与实现 3.1 系统硬件电…...

怎么找抖音视频素材?下载抖音的素材视频网站分享给你

在这个视觉印象至关重要的时代,选用高质量的视频素材对于制作抖音视频来说是关键。如果你正在寻找适合的视频素材来丰富你的抖音创作,以下这份详细的视频素材网站指南将帮助你迈出第一步。 蛙学府网 蛙学府网提供了丰富多样的视频素材,包括动…...

【pytorch】大模型训练张量并行

Large Scale Transformer model training with Tensor Parallel (TP) 张量并行如何工作 原始 Tensor Parallel (TP) 模型并行技术于Megatron-LM论文中被提出,是一种用于培育大规模Transformer模型的高效模型并行技术。我们在本练习指南中介绍的序列并行 (SP) 实际…...

Flutter 中的 CupertinoSliverNavigationBar 小部件:全面指南

Flutter 中的 CupertinoSliverNavigationBar 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中,CupertinoSliverNavigation…...

【数据库系统概论】程序题

“学生管理数据库”包含以下三个表,即学生表Student、课程表Course和选课表SC,结构如下: Student(Sno,Sname,Ssex,Sage,Sdept)Course (Cno,Cname&…...

群体优化算法---蝙蝠优化算法分类Iris数据集

介绍 蝙蝠算法(Bat Algorithm, BA)是一种基于蝙蝠回声定位行为的优化算法。要将蝙蝠算法应用于分类问题,可以通过将蝙蝠算法用于优化分类器的参数,图像分割等 本文示例 我们使用一个经典的分类数据集,如Iris数据集&…...

【C++】类和对象1.0

本鼠浅浅介绍一些C类和对象的知识,希望能得到读者老爷们的垂阅! 目录 1.面向过程和面向对象 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1.类的访问限定符 4.2.封装 5.C中struct和class的区别 6.类域 7.类的实例化 8.类对象模型 8.1.类…...

Linux下gcc编译32位程序报错

gcc使用-m32选项,编译32位程序时,报错:/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory gcc编译32位程序时,报错:/usr/include/stdio.h:27:10: fatal error: bits/li…...

godot.bk

1.搜索godot国内镜像,直接安装,mono是csharp版本 2.直接解压,50m,无需安装,直接运行 3.godot里分为场景,节点 主场景用control场景,下面挂textureact放背景图片,右键实例化子场景把…...

【C++修行之道】类和对象(三)拷贝构造函数

目录 一、 概念 二、特征 正确的拷贝构造函数写法: 拷贝函数的另一种写法 三、若未显式定义,编译器会生成默认的拷贝构造函数。 四、编译器生成的默认拷贝构造函数已经可以完成字节序的值拷贝了,还需要自己显式实现吗? 深拷…...

校园外卖系统的技术架构与实现方案

随着校园生活的日益现代化,外卖需求在高校学生群体中迅速增长。为了满足这一需求,校园外卖系统应运而生。本文将详细探讨校园外卖系统的技术架构及其实现方案,帮助读者了解这一系统的核心技术与实现路径。 一、系统概述 校园外卖系统主要包…...

AI的制作思维导图

AI(人工智能)的实现通常涉及以下几个步骤: 1.问题定义:首先确定你想要解决的问题是什么,这将决定你需要设计什么样的系统。 2.数据收集:根据你的需求,收集相关的数据集来训练你的AI模型。数据的…...

Amazon云计算AWS(四)

目录 八、其他Amazon云计算服务(一)快速应用部署Elastic Beanstalk和服务模板CloudFormation(二)DNS服务Router 53(三)虚拟私有云VPC(四)简单通知服务和简单邮件服务(五&…...

数据库(21)——数值函数

数值函数 函数功能CEIL(x)向上取整FLOOR(x)向下取整MOD(x,y)返回x/y的余数RAND()返回0~1内的随机数ROUND(x,y) 求参数x的四舍五入的值,保留y位小数 演示 select ceil(66.4); select floor(8.9); select mod(3,10); select rand(); select round…...

【PB案例学习笔记】-15怎样限制应用程序运行次数?

写在前面 这是PB案例学习笔记系列文章的第15篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…...

Spring为什么不支持static字段注入

Spring不支持直接依赖注入到静态变量中。在Spring框架中,依赖注入是一个核心概念,它允许开发者将对象间的依赖关系定义转移到容器中,由容器负责管理这些依赖关系。然而,当涉及到静态变量时,情况就变得复杂了。 首先从…...

AI数据分析:用Kimi根据Excel表格数据绘制多条折线图

工作任务:将Excel文件中的学生姓名和他们的语文、数学、英语成绩绘制成三条折线图,以便于比较不同科目的成绩分布情况。 在kimi中输入提示词: 你是一个Python编程专家,要完成一个Python脚本编写的任务,具体步骤如下&a…...

高级 Go 程序设计:使用 net/http/httputil 包构建高效网络服务

高级 Go 程序设计:使用 net/http/httputil 包构建高效网络服务 介绍ReverseProxy 的使用基本概念实现步骤高级配置实际案例 DumpRequest 的使用功能说明代码示例应用场景NewSingleHostReverseProxy 的特性功能概述 详细教程 注意事项使用 NewChunkedWriter 实现高效…...

Android11 AudioTrack 创建过程

Android 系统播放声音,需要创建AudioTrack来和AudioFlinger通信,其创建过程如下 根据传入的声音属性得到output通过得到的output,找到播放线程AudioFlinger在播放线程内,创建Track,和AudioTrack对应。后续通过它们进…...

数学建模 —— 层次分析法(2)

目录 一、层次分析法(AHP) 二、构造比较判断矩阵 2.1 两两比较法 三、单准则下的排序及一致检验 3.1 单准则下的排序 3.2 一致性检验 四、层次总排序 4.1 层次总排序的步骤 4.2 总排序一致性检验 一、层次分析法(AHP) 方…...

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:人工智能消防应用

青鸟消防股份有限公司成立于2001年6月,于2019年8月在深圳证券交易所挂牌上市,成为中国消防报警行业首家登陆A股的企业。公司始终聚焦于消防安全与物联网领域,主营业务为“一站式”消防安全系统产品的研发、生产和销售。公司产品已覆盖了火灾报…...

Flutter 中的 KeepAlive 小部件:全面指南

Flutter 中的 KeepAlive 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它允许开发者使用 Dart 语言构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中,KeepAlive 是一个用于维护组件活跃状态的组件&…...

C语言 恼人的结合性和优先级和副作用

结合性和优先级和副作用 1.优先级2.结合性3.副作用4.简单区分i,i,i1;ii1;ii 1.优先级 优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏。各种运算符的优先级是 不⼀样的。 在C语言中&a…...

Vue——初识组件

文章目录 前言页面的构成何为组件编写组件组件嵌套注册 效果展示 前言 在官方文档中,对组件的知识点做了一个很全面的说明。本篇博客主要写一个自己的案例讲解。 vue 官方文档 组件基础 页面的构成 说到组件之前,先大致说明下vue中页面的构成要素。 在…...

MQ消息丢失/重复/顺序/挤压

rabbitmq消息丢失解决 rocketMq解决消息丢失 RocketMQ事务消息概要 RocketMQ事务消息是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。 采用了2PC(两阶段提交) 补偿机制(事务状态回…...