当前位置: 首页 > 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_…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...