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

PyQt实战——随机涂格子的特色进度条(十一)

系类往期文章:
PyQt5实战——多脚本集合包,前言与环境配置(一)
PyQt5实战——多脚本集合包,UI以及工程布局(二)
PyQt5实战——多脚本集合包,程序入口QMainWindow(三)
PyQt5实战——操作台打印重定向,主界面以及stacklayout使用(四)
PyQt5实战——UTF-8编码器UI页面设计以及按钮连接(五)
PyQt5实战——UTF-8编码器功能的实现(六)
PyQt5实战——翻译器的UI页面设计以及代码实现(七)
PyQt5实战——翻译的实现,第一次爬取微软翻译经验总结(八)
PyQt5实战——翻译的实现,成功爬取微软翻译(可长期使用)经验总结(九)
PyQt实战——使用python提取JSON数据(十)

前言

这是实现音频编解码器功能模块的第二篇文章,在本文中,我们将实现自定义的特色进度条以及简单介绍编码器的UI布局,本文主要实现特色进度条,在本文中,我们会涉及到的知识点有:特色进度条的实现原理,一个python生成器的用法,PyQt的控件绘制机制。本文仅介绍编解码器UI的布局,因为实现UI时会用到开线程的部分,因此本文先不展示。

本次笔者设计的特色进度条,是涂格子形式的进度条,当进度增加时,进度条内的方格会被随机涂上颜色,供大家参考。

UI框架

如下图所示:

请添加图片描述

  • 编码器的UI布局同样为垂直分布

  • 在第一层级,由经典的选择文件构成,这个选择文件的布局样式已经在本系列中多次出现

  • 一个下拉选择框,目前只有ADPCM一个算法可供选择

  • 两个按钮水平布局,编码按钮启动编码器,解码按钮启动解码器

  • 编解码器读取选中的文件,从文件中读取数据。注意,文件最好是txt文件格式,数据是十六进制数1字节为单位,以空格分隔开,可选择一帧数据一行,如下图所示:

    请添加图片描述

  • 解码器会在workspaces目录下生成pcm.txt数据文件,其中包含了解码后的PCM数据,以文本形式保存,后续将其放入pcm构建器中可生成二进制文件,在PCM播放器中播放即可。

  • 编码器会在workspaces目录下生成adpcm.txt数据文件,其中包含了编码后的ADPCM数据,以文本形式保存,后续如何处理数据,可自行决定。

  • 最下方是进度条,由20*5共100个方格组成,在未启动状态下为灰色,当开始解码或编码时,编码进度每增加1%,那么就会随机涂蓝一个格子,在进度为100%时,即编码完成,则所有格子全部为蓝色。

  • 当重新开始编码或解码时,格子会重新初始化,全部被重新涂成灰色。

进度条展示

下面是正在解码过程中的进度条展示,在右边的日志展示区中可以看到,正在进行ADPCM解码,在功能区中,下方进度条在随机选择格子涂蓝,将这些以显示当前进度

请添加图片描述

下面是解码结束后的进度条样式,可以看到,在右边的日志区中,显示ADPCM decode end,adpcm解码完成,下方的进度条已被完全涂成蓝色。

请添加图片描述

代码详解

下面给出进度条的代码:

import sys
import random
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QColor, QPainter, QPainterPath
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
import queue
class ProgressBar(QWidget):def __init__(self):super().__init__()self.setFixedSize(640, 160)  # 设置进度条的大小self.grid_size = 32  # 每个方格的宽度和高度self.total_grids = (self.width() // self.grid_size) * (self.height() // self.grid_size)  # 方格总数self.lit_grids = 0  # 当前已点亮的方格数量self.grid_status = [False] * self.total_grids  # 每个方格是否被点亮def init_grids(self):self.lit_grids = 0  # 当前已点亮的方格数量self.grid_status = [False] * self.total_gridsself.update()  # 更新进度条绘制def update_progress(self,q):"""随机点亮一个未点亮的方格"""while True:percent = q.get()if self.lit_grids < self.total_grids and percent <= 100:# 随机选择一个未点亮的方格unlit_grids = [i for i, lit in enumerate(self.grid_status) if not lit]random_grid = random.choice(unlit_grids)self.grid_status[random_grid] = True  # 点亮该方格self.lit_grids += 1  # 增加已点亮的方格数量self.update()  # 更新进度条绘制if percent == 100:breakelse:breakdef paintEvent(self, event):"""自定义绘制进度条"""painter = QPainter(self)painter.setRenderHint(QPainter.Antialiasing)  # 启用抗锯齿效果,使边角更平滑# 绘制方格for row in range(self.height() // self.grid_size):for col in range(self.width() // self.grid_size):x = col * self.grid_sizey = row * self.grid_size# 计算当前方格的索引index = row * (self.width() // self.grid_size) + colif self.grid_status[index]:color = QColor(144, 203, 251)   # 已点亮的部分,蓝色else:color = QColor(224, 224, 224) # 未点亮的部分,灰色painter.fillRect(x, y, self.grid_size, self.grid_size, color)  # 绘制方格painter.end()

我们来解释一下上面的代码:

  • __init__方法中,设置了一些基础配置,进度条的大小,方格的大小,方格的总数,已点亮的方格数,每个方格的状态(是否被点亮了),值得注意的是,方格的总是是通过进度条的长除以方格的长,进度条的宽除以方格的宽然后相乘的来的,这里直接翻译为20*5 = 100
  • init_grids方法重新初始化方格的基础配置,归零已点亮的方格数量,擦除方格的状态,并重新绘制进度条,即恢复初始状态
  • update_progress方法用以更新进度,可以看到,该函数接收一个q参数,该参数为一个队列对象,用以线程之间的沟通(线程方面我们下篇文章讨论),此处做一个while的死循环,从队列中获取来自另一个线程的消息,这个操作是阻塞的,也就是说,当未从队列中获取新的消息,则线程不会继续进行下一条指令。
  • 如果已经点亮的方格数小于全部方格数,且进度≤100%,则执行以下操作,随机选择一个未点亮的方格,标志为点亮
  • unlit_grids = [i for i, lit in enumerate(self.grid_status) if not lit],解释一下这一段代码:
    • enumerate(self.grid_status)将会返回一个生成器,生成的是每个元素的索引i和对应的值lit,例如:假设self.grid_status = [True, False, True, Flase],那么生成器将会返回,(0,True),(1,False),(2,True),(3,False)
    • for i, lit in enumerate(self.grid_status)是一个for循环,用来遍历enumerate(self.grid_status)返回的每一个(i,lit)元组,i是索引,litself.grid_status中对应的状态值
    • if not lit这个条件判断会检查lit是否为False,如果为False,就会被加入到列表unlit_grids
    • 总的来说,这是整个列表推导式的语法,它会创建一个包含所有符合条件if not lit的元素索引i的新列表
  • random.choice方法在unlit_grids中随机选择一个方格
  • 将选择的的方格状态设置为点亮
  • 增加已点亮的方格数量
  • 更新进度条绘制
  • 如果进度条达到100%,则直接退出该函数,不再循环,也不再接收来自其它线程的消息
  • paintEvent方法是用以绘制进度条的,创建一个在PyQt中可绘制的对象QPainter。
  • 两层for循环,计算现在的位置,确定这个位置的方格是以点亮还是未点亮,确定颜色,绘制方格。
  • painter.end方法结束绘制

总结

进度条的更新实际上是对控件的重新绘制

paintEvent在什么时候被调用?

paintEvent 是一个 Qt 事件处理函数,它在 需要重新绘制组件时 被自动调用。Qt 会在以下几种情况下触发 paintEvent

  1. 窗口或控件首次显示时
    • 当窗口或控件第一次显示时,paintEvent 会被触发,负责绘制控件的初始状态。
  2. 控件大小发生变化时
    • 如果控件的大小发生了变化(例如,窗口调整大小),paintEvent 会被调用来重新绘制控件,以适应新的尺寸。
  3. 调用 update()repaint()
    • 当你调用 update()repaint() 方法时,Qt 会标记该控件为“需要重绘”,并会在下一个事件循环中触发 paintEvent
  4. 其他因素
    • 如果控件的内容发生了变化,或者某些部分被遮挡并随后暴露出来,Qt 会重新触发 paintEvent 来重新绘制这些区域。例如,当窗口被部分遮挡后再显示出来时,Qt 会调用 paintEvent 来刷新被遮挡的部分。

在上面的代码中,每次更新进度条的状态时,调用self.update,重新绘制控件。

如果不适用self.update,而是直接调用paintEvent绘制进度条可以吗?

直接调用 paintEvent 来重绘进度条并不是一种推荐的做法。原因在于,Qt 的事件机制是自动管理绘制过程的,而直接调用 paintEvent 会绕过事件系统,可能导致一些问题。下面我将详细解释原因和影响。

  1. Qt 的绘制机制
  • 在 Qt 中,paintEvent 由事件循环自动管理,通常不需要直接调用。当你调用 self.update() 时,Qt 会将控件标记为“需要重绘”,并在合适的时机调用 paintEvent
  • self.update() 会触发一个绘制事件,但不会立即调用 paintEvent,而是将重绘请求加入事件队列,稍后由 Qt 的事件循环处理。这样做的好处是,Qt 会合理地合并多个绘制请求,避免频繁的重复重绘,提高性能。
  1. 直接调用 paintEvent 的问题
  • 如果你直接调用 paintEvent,就会绕过 Qt 的事件循环和绘制机制。paintEvent 通常是由系统在适当时机(如控件需要重绘时)自动触发的。
  • 直接调用paintEvent可能会导致:
    • 绘制不一致:因为 Qt 的绘制机制已经负责了缓存和重绘的时机,直接调用 paintEvent 可能会与其他重绘请求冲突,导致绘制不稳定。
    • 不符合最佳实践:Qt 推荐使用 update() 来请求重绘,因为它利用了 Qt 内部的绘制优化策略。如果你直接调用 paintEvent,可能会破坏这些优化。

通过消息队列传递更新消息

进度条的更新实际上需要与编解码器的编解码进度相关,因为编解码器吃算力,因此不建议将编解码器放在主线程中运行,所以对编解码器开了子线程运行,消息的互传需要通过消息队列来进行。关于线程问题,我们将在下一期内容时更详细地讲解。

祝你变得更强!

因为语音编解码器功能模块的实现较为复杂,而且也增加了一些新的UI设计,因此知识点与代码都无法在一篇文章中全部呈现,但将代码分散在不同的文章里又让一些基础比较薄弱的同学难以快速上手,因此,如若对此模块感兴趣的人比较多,笔者将在这三篇文章的基础上,单独开一篇新的博文,梳理代码的布局以及如何在自己的机器上跑起来,让新手小白也能复制即用。

相关文章:

PyQt实战——随机涂格子的特色进度条(十一)

系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序入口QMainWindow&#xff08;三&…...

.NET 8.0 项目升级到 .NET 9.0

本文项目从.NETCore3.1开始一直延续到目前&#xff0c;如果您没有升级过&#xff0c;请参考以下文章&#xff1a; .Net Core 2.2 升级到 .Net Core 3.1&#xff1a;https://blog.csdn.net/hefeng_aspnet/article/details/131259537 NetCore3.1或Net6.0项目升级到Net7.0&#x…...

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **打印结果** 完整代码 以下游戏规则&#xff1a; 那么我们要实现的功能&#xff0c;就是…...

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述&#xff1a;2 Data Parallelism 数据并行&#xff08;Data Parallelism&#xff09;的核心在于将模型的数据处理过程并行化。具体来说&#xff0c;面对大规模数据批次时&#xff0c;将其拆分为较小的子批次&#xff0c;并在多个计算设备上同时进行处…...

电商平台能挡住恶意网络爬虫的攻击吗?

爬虫盗取电商数据的步骤 爬虫技术作为一种数据获取工具&#xff0c;正逐渐成为电商平台的一大隐患。网络爬虫不仅能够获取商家关键信息并滋生仿冒网站&#xff0c;还能收集用户敏感信息&#xff0c;对用户的财产安全和隐私造成严重威胁。同时&#xff0c;爬虫攻击还会扰乱正常…...

Jenkins安装方法二

配置环境 和 Jenkins 官方的 yum 源之后进行安装 # 关闭防火墙 $ sudo systemctl stop firewalld $ sudo systemctl disable firewalld# 安装 EPEL 源 $ sudo yum install -y epel-release # 安装 wget $ sudo yum install -y wget# 配置 Jenkins 官方 yum 源 $ sudo wget -O /…...

Nginx性能优化全方案:打造一个高效服务器

提到前面&#xff1a;一个热衷技术&#xff0c;反对八股的资深研发&#xff0c;不卖课不引流&#xff0c;专注分享高质量教学博客。 如果觉得文章还不错的话&#xff0c;可以点赞收藏关注 支持一下&#xff0c;持续分享高质量技术博客。 如果有什么需要改进的地方还请大佬指出❌…...

【每日学点鸿蒙知识】沙箱目录、图片压缩、characteristicsArray、gm-crypto 国密加解密、通知权限

1、HarmonyOS 如何创建应用沙箱目录&#xff1f; 下载文件&#xff0c;想下载到自己新建的应用沙箱目录&#xff0c;有什么方法实现吗&#xff1f; fs.mkdir可以创建目录 参考文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis…...

XMLHttpRequest的基础知识

get请求 const xml new XMLHttpRequest(); xml.open("GET", "https://jsonplaceholder.typicode.com/todos/1", true); xml.onreadystatechange function () {if (xml.readyState 4 && xml.status 200) {console.log(xml.responseText);} }…...

学习笔记(C#基础书籍)-- C#基础篇

&#xff08;12.24&#xff09; C#介绍&#xff1a;《第一章》 特点&#xff1a;语法简洁&#xff0c;面向对象&#xff0c;支持绝大部分的web标准&#xff0c;强大的安全机制&#xff08;垃圾回收器&#xff09;&#xff0c;兼容性好&#xff08;遵循.NET的公共语言规范【CL…...

现在有什么赛道可以干到退休?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;点击跳转到网站 &#xff0c;对人工智能感兴趣的小伙伴可以点进去看看。 最近&#xff0c;一则“90后无论男女都得65岁以后退休”的消息在多个网…...

【VScode】第三方GPT编程工具-CodeMoss安装教程

一、CodeMoss是什么&#xff1f; CodeMoss是一款集编程、学习和办公于一体的高效工具。它兼容多种主流平台&#xff0c;包括VSCode、IDER、Chrome插件、Web和APP等&#xff0c;支持插件安装&#xff0c;尤其在VSCode和IDER上的表现尤为出色。无论你是编程新手还是资深开发者&a…...

选择屏幕的用法

**************************定义控件*********************************** SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002. SELECT-OPTIONS bukrs FOR iloa-bukrs . "公司代码 SELECT-OPTIONS swerk FOR iloa-swerk OBLIGATORY . "工厂 SELECT-O…...

VirtualBox下ubuntu23.04使用主机串口以及使用 minicom 进行串口调试

VirtualBox下ubuntu23.04使用主机串口以及使用 minicom 进行串口调试 一、打开设备管理器看主机&#xff08;Window系统&#xff09;是否识别出串口&#xff0c;我这边显示的串行通信端口是COM3 二、打开VirtualBox&#xff0c;设置串口和USB设备 串口设置&#xff1a; 启用…...

CH340系列芯片驱动电路·CH340系列芯片驱动!!!

目录 CH340基础知识 CH340常见类型 CH340引脚功能讲解 CH340驱动电路 CH340系列芯片数据手册 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-CSDN博客 ME62…...

Unity中使用环形缓冲区平滑抖动值

环形缓冲数据结构&#xff0c;就是如下图一样的一个收尾相接的列表 在index指针指到4时&#xff0c;再往里添加数据&#xff0c;index就会指向0&#xff0c;并覆盖已有数据。 如何绘制Sin函数&#xff0c;请看下面一篇文章 Unity中如何实现绘制Sin函数图像-CSDN博客 接下来要…...

如何通过HTTP API插入或更新Doc

本文介绍如何通过HTTP API向Collection中插入或更新Doc。 说明 若调用本接口时Doc Id已存在&#xff0c;则等同于更新Doc&#xff1b;Doc Id不存在&#xff0c;则等同于插入Doc。 若调用本接口时不指定Doc Id&#xff0c;则等同于插入Doc&#xff0c;DashVector会自动生成Doc …...

RTMW:实时多人2D和3D 全人体姿态估计

单位&#xff1a;上海AI实验室 代码&#xff1a;mmpose/tree/main/projects/rtmpose 系列文章目录 RTMO: 面向高性能单阶段的实时多人姿态估计 目录 系列文章目录摘要一、背景二、相关工作2.1 自上而下的方法。2.2 坐标分类。2.3 3D Pose 3 实验方法3.1.1 任务限制3.1.3训练技…...

《Java源力物语》-3.空值猎手

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” \quad 夜色渐深&#xff0c;在一处偏僻小径上&#xff0c;月光透过浓密的源力云层&#xff0c;在地面上投下斑驳的光影。String正独自练习着刚从…...

macrodroid通过http请求控制手机运行宏

macrodroid adb命令 adb shell pm grant com.arlosoft.macrodroid android.permission.WRITE_SECURE_SETTINGS例:http请求手机播放指定MP3文件 声音素材_电量过低提醒 新建一个宏 添加触发器-连接-http服务器请求 路径随意填,最好不要有特殊符号,不然浏览器识别链接会出错,…...

Redis分片集群+MQ处理高并发

Redis的三大集群模式&#xff1a;主从复制、哨兵模式和Cluster模式。每种模式都有其特点和应用场景&#xff0c;具体如下&#xff1a; 主从复制模式&#xff1a;适用于数据备份和读写分离场景&#xff0c;配置简单&#xff0c;但在主节点故障时需要手动切换。哨兵模式&#xff…...

Linux内核 -- UIO (User-space I/O) 简介与使用笔记

UIO (User-space I/O) 简介 UIO (User-space I/O) 是 Linux 内核提供的一种机制&#xff0c;用于简化设备驱动的开发。它将设备的硬件资源&#xff08;如内存映射、中断等&#xff09;通过简单的接口暴露给用户空间程序&#xff0c;从而使用户可以在用户空间编写复杂的设备逻辑…...

《计算机组成及汇编语言原理》阅读笔记:p86-p115

《计算机组成及汇编语言原理》学习第 6 天&#xff0c;p86-p115 总结&#xff0c;总计 20 页。 一、技术总结 1.if statement 2.loop 在许多编程语言中&#xff0c;有类种循环&#xff1a;一种是在程序开头检测条件(test the condition),另一种是在程序末尾检测条件。 3.C…...

Python爬虫实战(保姆级登网页信息爬取教程)

此blog为爬虫实战教学&#xff0c;代码已附上&#xff0c;可以复制运行。若要直接看实战代码翻到博客后半部分。 本文使用selenium库进行爬虫&#xff0c;实现爬取数据操作&#xff0c;此库是通过模仿用户的操作进行对页面的处理。了解了这个思维模式&#xff0c;可以对代码进…...

探索CSDN博客数据:使用Python爬虫技术

探索CSDN博客数据&#xff1a;使用Python爬虫技术 在数字化的浪潮中&#xff0c;数据的获取与分析变得日益关键。CSDN作为中国领先的IT社区和服务平台&#xff0c;汇聚了海量的技术博客与文章&#xff0c;成为一座蕴藏丰富的数据宝库。本文将引领您穿梭于Python的requests和py…...

PPT画图——如何设置导致图片为600dpi

winr&#xff0c;输入regedit打开注册表 按路径找&#xff0c;HKEY_CURRENT_USER\Software\Microsoft\Office\XX.0\PowerPoint\Options&#xff08;xx为版本号&#xff0c;16.0 or 15.0或则其他&#xff09;。名称命名&#xff1a;ExportBitmapResolution 保存即可&#xff0c;…...

uniapp——APP读取bin文件,解析文件的数据内容(二)

文章目录 读取bin文件内容&#xff0c;发送给蓝牙设备&#xff1b;上传文件返回数据格式通过URL路径获取文件对象&#xff0c;读取文件的数据内容file对象返回数据格式 读取bin文件内容&#xff0c;发送给蓝牙设备&#xff1b; 上传文件&#xff0c;根据返回路径&#xff0c;解…...

Paddler负载均衡器

Paddler负载均衡器 Paddler本身是用Go语言编写的,没有直接的Python接口,但可以通过以下方式在Python中使用: 执行命令行调用 在Python中可以使用 subprocess 模块来调用Paddler的命令行工具,实现负载均衡功能 。例如: import subprocessdef start_paddler_agent():com…...

`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别

文章目录 1、什么是空字符串&#xff1f;2、两个引号之间加上空格 好的&#xff0c;我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别&#xff0c;以及它们在 SQL 查询中的作用&#xff1a; 1. we_chat_union_id IS NOT NULL 含…...

clicbot可立宝编程 易错归纳笔记

1、屏幕播放表情模块和等待时间 易错点1&#xff1a; (1)等待时间&#xff1a; (a)不是等上一个代码执行完&#xff0c;再执行等待时间&#xff0c;这是错误的。 (b)等待时间上面的代码1刚开始执行&#xff0c;上面的代码2也刚开始执行&#xff0c;不是等到代码1执行完&#xf…...

MySQL 数据”丢失”事件之 binlog 解析应用

事件背景 客户反馈在晚间数据跑批后,查询相关表的数据时,发现该表的部分数据在数据库中不存在 从应用跑批的日志来看,跑批未报错,且可查到日志中明确显示当时那批数据已插入到数据库中 需要帮忙分析这批数据丢失的原因。 备注:考虑信息敏感性,以下分析场景测试环境模拟,相关数据…...

基于人工智能时代政务智慧转型的实现前景初探

去年6月&#xff0c;我有幸聆听了由华政公共管理与政治学院精心组织的2019年MPA研究生高端论坛&#xff0c;上午场&#xff1a;由董海军&#xff08;中共上海市委机构编制委员会办公室处长&#xff09;主讲的深化机构改革的探索与实践&#xff0c;以及下午场&#xff1a;由束金…...

【论文笔记】Visual Alignment Pre-training for Sign Language Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Visual Alignment Pre-tra…...

一起学Git【第五节:git版本回退】

git reset 是 Git 版本控制系统中一个非常强大的命令,它可以用来重置当前分支到指定的状态,即执行撤销操作或者回退至之前的某一版本,他可以回退至之前的某一个提交状态。有三种主要的用法:git reset --soft;git reset --hard;git reset --mixed; 对比如图: 1.git res…...

金蝶V10中间件的使用

目录 环境准备搭建过程配置修改应用部署 环境准备 Linux内核服务器JDK1.8安装包&#xff1a;AAS-V10.zip程序包&#xff1a;***.war 搭建过程 将安装包上传至服务器opt目录下&#xff0c;官方给定的默认服务主目录为“/opt/AAS-V10/ApusicAS/aas/”&#xff1b;解压安装包(解…...

hi168大数据离线项目环境搭建

hi168大数据离线项目环境搭建 ## **1. 服务器准备**##### 1.1 创建集群应用节点 集群服务器使用“我的应用“中的Ubuntu22.04集群模版创建三个节点应用&#xff0c;并且进入“我的应用”中去修改一下节点名称&#xff08;node1对应master&#xff0c;node2对应hadoop1&#xf…...

Ubuntu 22.04安装Docker

陈拓 2024/10/19-2024/12/26 0. 概述 docker是容器&#xff08;Container&#xff09;&#xff0c;有点像一个轻量级的虚拟机。 容器是一种轻量级、可移植、并将应用程序进行的打包的技术&#xff0c;使应用程序可以在几乎任何地方以相同的方式运行。Docker将镜像文件运行起…...

穿山甲等广告联盟依据哪些维度给APP、小程序结算广告变现收益

媒体在开展广告变现商业化时&#xff0c;最关心的是变现收益问题&#xff0c;所运营的不同体量的APP、小程序能产生多少广告变现收益。#广告联盟# 广告变现的价格、收益不是一成不变的&#xff0c;广告转化是影响广告收益的重要因素之一。广告平台针对整个变现链路上的各环节&…...

【ES6复习笔记】迭代器(10)

什么是迭代器&#xff1f; 迭代器&#xff08;Iterator&#xff09;是一种对象&#xff0c;它能够遍历并访问一个集合中的元素。在 JavaScript 中&#xff0c;迭代器提供了一种统一的方式来处理各种集合&#xff0c;如数组、字符串、Map、Set 等。通过迭代器&#xff0c;我们可…...

ROS1入门教程6:复杂行为处理

一、新建项目 # 创建工作空间 mkdir -p demo6/src && cd demo6# 创建功能包 catkin_create_pkg demo roscpp rosmsg actionlib_msgs message_generation tf二、创建行为 # 创建行为文件夹 mkdir action && cd action# 创建行为文件 vim Move.action# 定义行为…...

【 Copilot】云开发 Copilot 实战教程:从入门到精通,掌握云开发核心技能

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 引言 云开发 Copilot 作为一款革新性的开发辅助工具&#xff0c;利用先进的人工智能技术&#xff0c;为开发者在云开发的征程中点亮…...

DataCap MongoDB Driver: 全面解析MongoDB在DataCap中的使用指南

在大数据时代&#xff0c;MongoDB作为一款广受欢迎的NoSQL数据库&#xff0c;其灵活的文档存储模型和强大的查询能力使其成为许多现代应用的首选数据存储方案。今天&#xff0c;我们将深入探讨DataCap MongoDB Driver&#xff0c;这是一个强大的工具&#xff0c;它让在DataCap环…...

[x86 ubuntu22.04]双触摸屏的触摸事件都响应在同一个触摸屏上

1 问题描述 CPU&#xff1a;G6900E OS&#xff1a;ubuntu22.04 Kernel&#xff1a;6.8.0-49-generic 系统下有两个一样的 edp 触摸屏&#xff0c;两个触摸屏的触摸事件都响应在同一个 edp 屏幕上。 2 解决过程 使用“xinput”命令查看输入设备&#xff0c;可以看到只有一个 to…...

Linux:SystemV通信

目录 一、System V通信 二、共享内存 代码板块 总结 一、System V通信 System V IPC&#xff08;inter-process communication&#xff09;&#xff0c;是一种进程间通信方式。其实现的方法有共享内存、消息队列、信号量这三种机制。 本文着重介绍共享内存这种方式。 二、共…...

全面Kafka监控方案:从配置到指标

文章目录 1.1.监控配置1.2.监控工具1.3.性能指标系统相关指标GC相关指标JVM相关指标Topic相关指标Broker相关指标 1.4.性能指标说明1.5.重要指标说明 1.1.监控配置 开启JMX服务端口&#xff1a;kafka基本分为broker、producer、consumer三个子项&#xff0c;每一项的启动都需要…...

Springboot项目Druid运行时动态连接多数据源的功能

项目支持多数据库连接是个很常见的需求&#xff0c;这不仅是要在编译前连已经知道的多个数据库&#xff0c;有时还要在程序运行时连后期增加的多个数据源来获得数据。 一、编译前注册数据库连接 1.引入依赖包 <!-- springboot 3.x --><dependency><groupId&g…...

【漏洞复现】F5 BIG-IP Next Central Manager SQL注入漏洞(CVE-2024-26026)

免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…...

中间件xxl-job安装

拉取镜像 docker pull xuxueli/xxl-job-admin:2.4.2 创建xxl-job-admin容器 docker create --name xxl-job-admin -p 9099:8080 -e PARAMS"--spring.datasource.urljdbc:mysql://192.168.96.57:3306/xxl_job2Unicodetrue&characterEncodingUTF-8 --spring.dataso…...

Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集SMI-FGRM介绍SMI-FGRM算法流程 SMI-FGRM代码实现SMI-FGRM算法实现攻击效果 代码汇总smifgrm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CI…...

论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 王志豪&#xff0c;厦门大学博士生 刘诗雨&#xff0c;厦门大学硕士生 内容简介 新数据的不断涌现使版本更新成为大型语言模型&#xff08;LLMs&#xff…...