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

<Python实际应用>做一个简单的签到投屏系统

        公司接了个活,承办一个由团委组织的五四青年节徒步活动,其中一个环节是现场报名,来的人把名字填进去后随机分组,并显示在现场的LED大屏幕上,我自告奋勇用Python来开发这个小程序。这里记录一下

【项目需求】

1、报名录入姓名和赛程,数据传到LED大屏所在的电脑上

2、赛程分半程和全程,半程的又分为ABC三个路线,每个路线下面有若干个分组,全程下面也分6个组,要求签到以后把人员随机分组

3、在大屏幕上显示出来

【分析】

1、用tkinter做一个输入界面,用一个文本框让用户输入名字,然后用一个单选框让用户选择半程还是全程,然后数据用socket传给连接现场LED屏幕的电脑

2、写一个函数处理分组工作,根据接收到的全程还是半程信息,分别进行随机分组

3、写一个服务器端程序在连接LED的电脑上运行,显示界面,并把处理结果及时更新到大屏幕。

这包括三个部分:

a) 用tkinter做一个显示界面,包括全程和半程ABC的区分,这可以用frame来实现,然后下面再细分分组,可以用label和text来实现

b) 搭一个简单的服务器用socket接收来自客户端的信息

c) 写一个随机分组函数,写一个清除函数

【项目代码】

1、客户端代码,负责录入数据,上传到服务器,命名为client.py

import tkinter as tk
from tkinter import *root = Tk()
root.title('报名签到')
root.geometry('300x500')title1=Label(root,fg='blue',text='填入姓名',font=('华文新魏',12))
name=Entry(root,bg='white',width=20,font=('楷体',24))data_list=[]
def mychoice():global data_listval=var.get()if len(data_list)==0:data_list.append(val)else:data_list=[]data_list.append(val)return val
var = StringVar()
zubie_label=Label(root,fg='blue',text='选择赛程',font=('华文新魏',12))
zb1 = Radiobutton(root,text="全程",variable=var,value='q',command=mychoice)zb2 = Radiobutton(root,text="半程",variable=var,value='b',command=mychoice)var.set(0)def tijiao():global data_listif len(data_list)==0:print('未选择赛程')else:if name.get():data_list.append(name.get())print(data_list)data_str=",".join(data_list)msg=data_strprint(msg)# 导入 socket、sys 模块import socket# 创建 socket 对象s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地主机名#host = socket.gethostname()host = '*.*.*.*' #替换成服务器IP地址# 设置端口号port = 9999# 连接服务,指定主机和端口s.connect((host, port))s.send(msg.encode('utf-8'))data = s.recv(1024)print(data.decode("utf8"))s.close()data_list=[]name.delete(0,END)else:print('未填写姓名')btn1=Button(root,fg='blue',text='提交',command=tijiao)title1.place(relx=0.25,rely=0.25,height=30,width=120)
name.place(relx=0.3,rely=0.35,height=30,width=100)
zubie_label.place(relx=0.3,rely=0.45,height=30,width=100)
zb1.place(relx=0.5,rely=0.55,height=30,width=100)
zb2.place(relx=0.7,rely=0.55,height=30,width=100)btn1.place(relx=0.3,rely=0.65,height=30,width=80)root.mainloop()

2、服务器端代码,实现接收信息,处理分组,并在大屏幕显示,命名为server.py


import random,socket
from tkinter import *class FullScreenApp(object):def __init__(self, master, **kwargs):self.master=masterpad=3self._geom='1200x600+0+0'master.geometry("{0}x{1}+0+0".format(master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad))master.bind('<Escape>',self.toggle_geom)            def toggle_geom(self,event):geom=self.master.winfo_geometry()print(geom,self._geom)self.master.geometry(self._geom)self._geom=geomroot = Tk()root.overrideredirect(True)
root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))def toggle_geom():root.geometry('1200x600+0+0')root.bind('<Escape>',toggle_geom) root.title('报名分组情况')
#root.geometry('1200x600')
frame1 = Frame(root,bg='brown')
fenzu_Q = Label(frame1,fg='red',text='全程组')
quancheng_1 = Label(frame1,bg='white',fg='green',text='Q1队',font=('楷体',18))
qctext_1 = Text(frame1,bg='white',fg='red',font=('楷体',18))
quancheng_2 = Label(frame1,bg='white',fg='green',text='Q2队',font=('楷体',18))
qctext_2 = Text(frame1,bg='white',fg='red',font=('楷体',18))
quancheng_3 = Label(frame1,bg='white',fg='green',text='Q3队',font=('楷体',18))
qctext_3 = Text(frame1,bg='white',fg='red',font=('楷体',18))
quancheng_4 = Label(frame1,bg='white',fg='green',text='Q4队',font=('楷体',18))
qctext_4 = Text(frame1,bg='white',fg='red',font=('楷体',18))
quancheng_5 = Label(frame1,bg='white',fg='green',text='Q5队',font=('楷体',18))
qctext_5 = Text(frame1,bg='white',fg='red',font=('楷体',18))frame2 = Frame(root,bg='green')
fenzu_A = Label(frame2,fg='red',text='半程A组')
zu_1 = Label(frame2,bg='white',fg='green',text='B1队',font=('楷体',18))
zutext_1 = Text(frame2,bg='white',fg='red',font=('楷体',18))
zu_2 = Label(frame2,bg='white',fg='green',text='B2队',font=('楷体',18))
zutext_2 = Text(frame2,bg='white',fg='red',font=('楷体',18))
zu_3 = Label(frame2,bg='white',fg='green',text='B3队',font=('楷体',18))
zutext_3 = Text(frame2,bg='white',fg='red',font=('楷体',18))
zu_4 = Label(frame2,bg='white',fg='green',text='B4队',font=('楷体',18))
zutext_4 = Text(frame2,bg='white',fg='red',font=('楷体',18))
zu_5 = Label(frame2,bg='white',fg='green',text='B5队',font=('楷体',18))
zutext_5 = Text(frame2,bg='white',fg='red',font=('楷体',18))
zu_6 = Label(frame2,bg='white',fg='green',text='B6队',font=('楷体',18))
zutext_6 = Text(frame2,bg='white',fg='red',font=('楷体',18))
frame3 = Frame(root,bg='blue')
fenzu_B = Label(frame3,fg='red',text='半程B组')
zu_7 = Label(frame3,bg='white',fg='green',text='B7队',font=('楷体',18))
zutext_7 = Text(frame3,bg='white',fg='red',font=('楷体',18))
zu_8 = Label(frame3,bg='white',fg='green',text='B8队',font=('楷体',18))
zutext_8 = Text(frame3,bg='white',fg='red',font=('楷体',18))
zu_9 = Label(frame3,bg='white',fg='green',text='B9队',font=('楷体',18))
zutext_9 = Text(frame3,bg='white',fg='red',font=('楷体',18))
zu_10 = Label(frame3,bg='white',fg='green',text='B10队',font=('楷体',18))
zutext_10 = Text(frame3,bg='white',fg='red',font=('楷体',18))
zu_11 = Label(frame3,bg='white',fg='green',text='B11队',font=('楷体',18))
zutext_11 = Text(frame3,bg='white',fg='red',font=('楷体',18))
frame4 = Frame(root,bg='orange')
fenzu_C = Label(frame4,fg='red',text='半程C组')
zu_12 = Label(frame4,bg='white',fg='green',text='B12队',font=('楷体',18))
zutext_12 = Text(frame4,bg='white',fg='red',font=('楷体',18))
zu_13 = Label(frame4,bg='white',fg='green',text='B13队',font=('楷体',18))
zutext_13 = Text(frame4,bg='white',fg='red',font=('楷体',18))
zu_14 = Label(frame4,bg='white',fg='green',text='B14队',font=('楷体',18))
zutext_14 = Text(frame4,bg='white',fg='red',font=('楷体',18))
zu_15 = Label(frame4,bg='white',fg='green',text='B15队',font=('楷体',18))
zutext_15 = Text(frame4,bg='white',fg='red',font=('楷体',18))
frame1.place(x=10,rely=0.1,relheight=0.8,relwidth=0.2)
fenzu_Q.place(relx=0.3,rely=0.05,height=30,width=80)
quancheng_1.place(relx=0.05,rely=0.2,relheight=0.12,relwidth=0.2)
quancheng_2.place(relx=0.05,rely=0.33,relheight=0.12,relwidth=0.2)
quancheng_3.place(relx=0.05,rely=0.46,relheight=0.12,relwidth=0.2)
quancheng_4.place(relx=0.05,rely=0.59,relheight=0.12,relwidth=0.2)
quancheng_5.place(relx=0.05,rely=0.72,relheight=0.12,relwidth=0.2)
qctext_1.place(relx=0.3,rely=0.2,relheight=0.12,relwidth=0.5)
qctext_2.place(relx=0.3,rely=0.33,relheight=0.12,relwidth=0.5)
qctext_3.place(relx=0.3,rely=0.46,relheight=0.12,relwidth=0.5)
qctext_4.place(relx=0.3,rely=0.59,relheight=0.12,relwidth=0.5)
qctext_5.place(relx=0.3,rely=0.72,relheight=0.12,relwidth=0.5)frame2.place(relx=0.25,rely=0.1,relheight=0.8,relwidth=0.2)
fenzu_A.place(relx=0.3,rely=0.05,height=30,width=80)
zu_1.place(relx=0.05,rely=0.2,relheight=0.12,relwidth=0.2)
zu_2.place(relx=0.05,rely=0.33,relheight=0.12,relwidth=0.2)
zu_3.place(relx=0.05,rely=0.46,relheight=0.12,relwidth=0.2)
zu_4.place(relx=0.05,rely=0.59,relheight=0.12,relwidth=0.2)
zu_5.place(relx=0.05,rely=0.72,relheight=0.12,relwidth=0.2)
zu_6.place(relx=0.05,rely=0.85,relheight=0.12,relwidth=0.2)
zutext_1.place(relx=0.3,rely=0.2,relheight=0.12,relwidth=0.5)
zutext_2.place(relx=0.3,rely=0.33,relheight=0.12,relwidth=0.5)
zutext_3.place(relx=0.3,rely=0.46,relheight=0.12,relwidth=0.5)
zutext_4.place(relx=0.3,rely=0.59,relheight=0.12,relwidth=0.5)
zutext_5.place(relx=0.3,rely=0.72,relheight=0.12,relwidth=0.5)
zutext_6.place(relx=0.3,rely=0.85,relheight=0.12,relwidth=0.5)
frame3.place(relx=0.5,rely=0.1,relheight=0.8,relwidth=0.2)
fenzu_B.place(relx=0.3,rely=0.05,height=30,width=80)
zu_7.place(relx=0.05,rely=0.2,relheight=0.12,relwidth=0.2)
zu_8.place(relx=0.05,rely=0.33,relheight=0.12,relwidth=0.2)
zu_9.place(relx=0.05,rely=0.46,relheight=0.12,relwidth=0.2)
zu_10.place(relx=0.05,rely=0.59,relheight=0.12,relwidth=0.2)
zu_11.place(relx=0.05,rely=0.72,relheight=0.12,relwidth=0.2)
zutext_7.place(relx=0.3,rely=0.2,relheight=0.12,relwidth=0.5)
zutext_8.place(relx=0.3,rely=0.33,relheight=0.12,relwidth=0.5)
zutext_9.place(relx=0.3,rely=0.46,relheight=0.12,relwidth=0.5)
zutext_10.place(relx=0.3,rely=0.59,relheight=0.12,relwidth=0.5)
zutext_11.place(relx=0.3,rely=0.72,relheight=0.12,relwidth=0.5)frame4.place(relx=0.75,rely=0.1,relheight=0.8,relwidth=0.2)
fenzu_C.place(relx=0.3,rely=0.05,height=30,width=80)
zu_12.place(relx=0.05,rely=0.2,relheight=0.12,relwidth=0.2)
zu_13.place(relx=0.05,rely=0.33,relheight=0.12,relwidth=0.2)
zu_14.place(relx=0.05,rely=0.46,relheight=0.12,relwidth=0.2)
zu_15.place(relx=0.05,rely=0.59,relheight=0.12,relwidth=0.2)
zutext_12.place(relx=0.3,rely=0.2,relheight=0.12,relwidth=0.5)
zutext_13.place(relx=0.3,rely=0.33,relheight=0.12,relwidth=0.5)
zutext_14.place(relx=0.3,rely=0.46,relheight=0.12,relwidth=0.5)
zutext_15.place(relx=0.3,rely=0.59,relheight=0.12,relwidth=0.5)def clear():qctext_1.delete('1.0',END)qctext_2.delete('1.0',END)qctext_3.delete('1.0',END)qctext_4.delete('1.0',END)qctext_5.delete('1.0',END)zutext_1.delete('1.0',END)zutext_2.delete('1.0',END)zutext_3.delete('1.0',END)zutext_4.delete('1.0',END)zutext_5.delete('1.0',END)zutext_6.delete('1.0',END)zutext_7.delete('1.0',END)zutext_8.delete('1.0',END)zutext_9.delete('1.0',END)zutext_10.delete('1.0',END)zutext_11.delete('1.0',END)zutext_12.delete('1.0',END)zutext_13.delete('1.0',END)zutext_14.delete('1.0',END)zutext_15.delete('1.0',END)quancheng_list=[[qctext_1,0],[qctext_2,0],[qctext_3,0],[qctext_4,0],[qctext_5,0]]
zutext_list=[[zutext_1,0],[zutext_2,0],[zutext_3,0],[zutext_4,0],[zutext_5,0],[zutext_6,0],[zutext_7,0],[zutext_8,0],[zutext_9,0],[zutext_10,0],[zutext_11,0],[zutext_12,0],[zutext_13,0],[zutext_14,0],[zutext_15,0]]def contra(data):if data[0] == 'q':if len(quancheng_list)==0:print('全程分组已满')else:z=random.choice(quancheng_list)z[0].insert(INSERT, data[1]+' ')z[1]+=1if z[1]>5:quancheng_list.remove(z)elif data[0] == 'b':if len(zutext_list)==0:print('半程分组已满')else:z=random.choice(zutext_list)z[0].insert(INSERT, data[1]+' ')z[1]+=1if z[1]>5:zutext_list.remove(z)elif data[0] == 'clear':clear()else:print('提交数据有误')server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = '*.*.*.*'     #替换成服务器的IP地址
port = 9999
server.bind((host, port))
server.listen()def handle_sock():print('服务器开始运行。。。')sock, addr = server.accept()while True:print('连接地址是:',addr)data = sock.recv(1024)data = data.decode("utf8")if data:print('接收到信息:',data)re_data = 'OK,你发送的信息已收到' #回复信息sock.send(re_data.encode("utf8"))data_list=data.split(",")contra(data_list)  #执行操作命令breaksock.close()root.after(1000, handle_sock)root.after(1000, handle_sock)root.mainloop()

【运行效果】

在连接LED大屏幕的电脑上启动server.py,大屏幕上界面如下:

 然后在签到电脑上启动client.py,界面如下

 开始使用, 比如我们在文本框中填入 欧阳锋,选择全程,点击提交,然后就会在大屏幕上看到:

 继续,填郭靖,选半程,提交:

OK,实测可用

相关文章:

<Python实际应用>做一个简单的签到投屏系统

公司接了个活&#xff0c;承办一个由团委组织的五四青年节徒步活动&#xff0c;其中一个环节是现场报名&#xff0c;来的人把名字填进去后随机分组&#xff0c;并显示在现场的LED大屏幕上&#xff0c;我自告奋勇用Python来开发这个小程序。这里记录一下 【项目需求】 1、报名…...

时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测

时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 基于贝叶斯(bayes)优化卷积神经网络-门控循环单元(CNN-GR…...

Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用(C++)

Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的Burst模式的技术背景Baumer工业相机使用BGAPISDK将设置Burst模式1.引用合适的类文件2.使用BGAPI SDK初始化相机设置Burs…...

BERT输入以及权重矩阵形状解析

以下用形状来描述矩阵。对于向量&#xff0c;为了方便理解&#xff0c;也写成了类似(1,64)这种形状的表示形式&#xff0c;这个你理解为64维的向量即可。下面讲的矩阵相乘都是默认的叉乘。 词嵌入矩阵形状&#xff1a;以BERT_BASE为例&#xff0c;我们知道其有12层Encoder&…...

3 个令人惊艳的 ChatGPT 项目,开源了!

过去一周&#xff0c;AI 界又发生了天翻地覆的变化&#xff0c;其中&#xff0c;最广为人知的&#xff0c;应该是 OpenAI 正式上线 ChatGPT iOS 客户端&#xff0c;让所有人都可以更方便的在手机上与 ChatGPT 聊天。 此外&#xff0c;Stable Diffusion 母公司 Stability AI 也…...

一、12.C++内存管理

C++内存管理 28.C++的内存管理 和C基本一致 代码区(Code Segment):也称为文本区,存放程序的可执行代码。 全局区(Global/Static Segment):存放全局变量、静态变量和常量。程序在编译后,分配这些数据的空间。 栈区(Stack Segment):存放函数调用时的参数、返回地…...

ensp实践dhcp服务

ensp实践dhcp服务 1、dhcp接口分配模式2、dhcp接口地址池分配模式3、dhcp布拉布拉布拉 1、dhcp接口分配模式 1.1、路由器AR1配置dhcp动态获取 <Huawei>system-view [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthe…...

【王道·计算机网络】第六章 应用层

一、基本概念 1.1 应用层概述 应用层对应用程序的通信提供服务应用层协议定义&#xff1a; 应用进程交换的报文类型&#xff0c;请求还是响应?各种报文类型的语法&#xff0c;如报文中的各个字段及其详细描述字段的语义&#xff0c;即包含在字段中的信息的含义进程何时、如何…...

【论文解读】(如何微调BERT?) How to Fine-Tune BERT for Text Classification?

文章目录 论文信息1. 论文内容2. 论文结论2.1 微调流程2.2 微调策略(Fine-Tuning Strategies)2.3 Further Pretrain 3. 论文实验介绍3.1 实验数据集介绍3.2 实验超参数3.3 Fine-Tuning策略探索3.3.1 处理长文本3.3.2 不同层的特征探索3.3.3 学习率探索&#xff08;灾难性遗忘探…...

工程师是怎样对待开源

工程师如何对待开源 本文是笔者作为一个在知名科技企业内从事开源相关工作超过 20 年的工程师&#xff0c;亲身经历或者亲眼目睹很多工程师对待开源软件的优秀实践&#xff0c;也看到了很多 Bad Cases&#xff0c;所以想把自己的一些心得体会写在这里&#xff0c;供工程师进行…...

Spring Boot日志系统大揭秘:从零开始学习Spring Boot日志:常见问题解答和最佳实践

一. 关于 Spring Boot 日志的使用 Spring Boot 日志机制和工具用于记录应用程序的日志信息和追踪应用程序的执行过程。它集成了常用的日志框架&#xff0c;如 Log4j、logback、Java Util Logging等&#xff0c;并提供简单易用的配置方式&#xff0c;让开发人员可以方便地监控应…...

【06】Nginx之反向代理

Nginx反向代理的配置语法 Nginx反向代理模块的指令是由ngx_http_proxy_module模块进行解析 proxy_pass 该指令用来设置被代理服务器地址&#xff0c;可以是主机名称、IP地址加端口号形式。 语法proxy_pass URL;默认值—位置location URL:为要设置的被代理服务器地址&#xf…...

TCP是面向字节流的协议

TCP字节流 之所以会说 TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff0c;是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方。 为什么 UDP 是面向报文的协议&#xff1f; 当用户消息通过 UDP 协议传输时&#xff0c;…...

读书笔记——《when breath becomes air》《超越自卑》

为啥要两本书一起写读后感&#xff1f; 读完这两本书本来应该分开来写点东西的&#xff0c;不过我认为这两本书应该写不了太多内容。虽然我也看了几本英文原著&#xff08;也写了点东西&#xff09;&#xff0c;但是我明显低估了《when breath becomes air》的难度&#xff0c…...

CMD与DOS脚本编程【第二章】

预计更新 第一章. 简介和基础命令 1.1 介绍cmd/dos脚本语言的概念和基本语法 1.2 讲解常用的基础命令和参数&#xff0c;如echo、dir、cd等 第二章. 变量和运算符 2.1 讲解变量和常量的定义和使用方法 2.2 介绍不同类型的运算符和运算规则 第三章. 控制流程和条件语句 3.1 介…...

面试字节,过关斩将直接干到 3 面,结果被吊打了?

人人都有大厂梦&#xff0c;对于软件测试员来说&#xff0c;BAT 为首的一线互联网公司肯定是自己的心仪对象&#xff0c;毕竟能到这些大厂工作&#xff0c;不仅薪资高待遇好&#xff0c;而且能力技术都能够得到提升&#xff0c;最关键的是还能够给自己镀上一层金&#xff0c;让…...

OpenCV在iOS端的集成及Mat和UIImage互相转化(附源码)

OpenCV是一个非常强大的图形处理框架&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上&#xff0c;在自动驾驶、智能家居、人脸识别、图片处理等方面提供了非常丰富且功能强大的api&#xff0c;在图片处理方便&#xff0c;基本上可以满足对图片处理的所有需求…...

5月跳槽会有风险,不跳也会有?

今天讲讲跳槽。 说实话跳槽是为了寻求更好的发展&#xff0c;但在跳槽前我们也不能确定下家就是更好的归宿&#xff0c;这就更加需要我们审慎地去对待&#xff0c;不能盲目跳槽。 其次&#xff0c;我们离职和跳槽&#xff0c;其中的原因很大一部分是目前薪资不符合预期。 那…...

【小白版】最简单的 goland package 教程包括自定义包的使用

一、Hello World 最简单的教程&#xff0c;就需要从最简单的事情开始说起&#xff1a; mkdir myappcd myappgo mod init myapp // myapp是主项目名 这行命令将生成一个go.mod文件&#xff0c;这个文件会记录所有的包的依赖关系&#xff0c;一个空的go.mod只有项目名称和go版本…...

IMX6ULL的I2C驱动详细分析

IMX6ULL的I2C驱动详细分析 文章目录 IMX6ULL的I2C驱动详细分析i2c_imx_driver 的平台驱动注册i2c_imx_probe注册函数i2c_imx_algoI2C算法结构体i2c_imx_start开始I2Ci2c_imx_stop停止I2Ci2c_imx_isr中断服务函数i2c_imx_dma_writeDMA 进行写操作的 I2C 传输2c_imx_dma_readi2c_…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...