rime中州韵小狼毫 随机数 随机码 电脑信息 滤镜

在输入法中支持生成GUID,或者随机数,随机字符,获取自身电脑信息,这将是一个非常酷的功能。

先睹为快

本文所分享滤镜,主要用于生成一些动态的信息词条,效果如下👇:
20240109202113

GUID.lua

GUID.lua 脚本用于生成 GUID 字符串,GUID.lua 脚本如下👇:

--[[
Descripttion: 
version: 
Author: douyaoyuan
Date: 2023-06-01 08:48:23
LastEditors: douyaoyuan
LastEditTime: 2023-06-01 11:12:53
--]]
--GUID.lua
--这个模块主要用于处理一些utf8字符串相关的操作

local M={}
local dbgFlg = false

--设置 dbg 开关
local function setDbg(flg)
	dbgFlg = flg
	print('GUID dbgFlg is '..tostring(dbgFlg))
end

--返回一个 GUID 字符串
function guid()
	local seed={'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}
	local tb={}
	for i=1,32 do
		table.insert(tb,seed[math.random(1,16)])
	end
	local sid=table.concat(tb)
	return string.format('%s-%s-%s-%s-%s',
						string.sub(sid,1,8),
						string.sub(sid,9,12),
						string.sub(sid,13,16),
						string.sub(sid,17,20),
						string.sub(sid,21,32)
						)
end

--[[返回一个 guidInfo 结构,结构体如下:
guidInfo.guid:正常的GUID
guidInfo.noPunctuations:只包含字母和数字的GUID
guidInfo.withUnderline:分隔符是下划线的 guid
]]
function guidInfo()
	local id = {}
	local tmpId = guid()

	id.guid = tmpId
	id.noPunctuations = string.gsub(tmpId,"-","")
	id.withUnderline = string.gsub(tmpId,"-","_")

	return id
end

--这是测试函数
function test()
	local s=0
	local start_time=os.clock()
	while s<50000 do
		s=s+1
		print(s,guid())
	end
	print('execute_time='..tostring(os.clock()-start_time))
end

--Module
function M.init(...)
	M.guidInfo = guidInfo
	
	M.setDbg = setDbg
	M.test = test
end

M.init()

return M

sysInfo.lua

sysInfo.lua 脚本用于获取系统相关的信息,例如用户名,例如电脑名,例如环境变量中的一些路径信息等。sysInfo.lua 脚本如下👇:

-- 导入log模块记录日志
local logEnable, log = pcall(require, "runLog")

local M={}
local dbgFlg = false

--设置 dbg 开关
M.setDbg = function(flg)
	dbgFlg = flg
	print('sysInfo dbgFlg is '..tostring(dbgFlg))
end

M.homePath = function()
	local tmpVar = os.getenv("HOMEPATH") or os.getenv("HOME")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.computerName = function()
	local tmpVar = os.getenv("COMPUTERNAME") or os.getenv("HOSTNAME")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.userName = function()
	local tmpVar = os.getenv("USERNAME") or os.getenv("USER")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.osName = function()
	local tmpVar = os.getenv("OS")
	if nil == tmpVar then
		tmpVar = 'UnixLike'
	end
	return tmpVar
end

M.NUMBER_OF_PROCESSORS = function()
	local tmpVar = os.getenv("NUMBER_OF_PROCESSORS")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.pwd = function()
	local tmpVar = os.getenv("PWD")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.oldPwd = function()
	local tmpVar = os.getenv("OLDPWD")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.PROCESSOR_IDENTIFIER = function()
	local tmpVar = os.getenv("PROCESSOR_IDENTIFIER")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.PROGRAMDATA = function()
	local tmpVar = os.getenv("PROGRAMDATA")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.PROGRAMFILES = function()
	local tmpVar = os.getenv("PROGRAMW6432")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end
M.PROGRAMFILESx86 = function()
	local tmpVar = os.getenv("PROGRAMFILES(X86)")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.APPDATA = function()
	local tmpVar = os.getenv("APPDATA(X86)")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.WINDIR = function()
	local tmpVar = os.getenv("WINDIR")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.COMMONPROGRAMFILES = function()
	local tmpVar = os.getenv("COMMONPROGRAMFILES")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.COMMONPROGRAMFILESx86 = function()
	local tmpVar = os.getenv("COMMONPROGRAMFILES(x86)")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.TEMP = function()
	local tmpVar = os.getenv("TEMP")
	if nil == tmpVar or '' == tmpVar then
		tmpVar = os.getenv("TMP")
	end
	
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.SYSTEMDRIVE = function()
	local tmpVar = os.getenv("SYSTEMDRIVE")
	if nil == tmpVar then
		tmpVar = '未知'
	end
	return tmpVar
end

M.currentDir = function()
	local info = debug.getinfo(2) --debug.getinfo(2), 2: 返回调用 currentDir 的函数的信息
	
	--解析info.source所在的路径
	local path = info.source
	path = string.sub(path, 2, -1) -- 去掉开头的"@"
	path = string.gsub(path,'\\','/') -- 路径格式由 c:\\Users\\san.zhang\\ 转换为 c:/Users/san.zhang/
	path = string.match(path, "^(.*)/") -- 捕获最后一个 "/" 之前的部分 就是我们最终要的目录部分
	
	return path
end

M.writeLog = function(printPrefix)
	printPrefix = printPrefix or ''
	
	if logEnable then
		log.writeLog(printPrefix..'homePath: '..M.homePath())
		log.writeLog(printPrefix..'computerName: '..M.computerName())
		log.writeLog(printPrefix..'userName: '..M.userName())
		log.writeLog(printPrefix..'osName: '..M.osName())
		log.writeLog(printPrefix..'pwd: '..M.pwd())
		log.writeLog(printPrefix..'oldPwd: '..M.oldPwd())
		log.writeLog(printPrefix..'numberOfProcessors: '..M.NUMBER_OF_PROCESSORS())
		log.writeLog(printPrefix..'progressorIdentifier: '..M.PROCESSOR_IDENTIFIER())
		log.writeLog(printPrefix..'programData: '..M.PROGRAMDATA())
		log.writeLog(printPrefix..'programFiles: '..M.PROGRAMFILES())
		log.writeLog(printPrefix..'programFilesx86: '..M.PROGRAMFILESx86())
		log.writeLog(printPrefix..'appData: '..M.APPDATA())
		log.writeLog(printPrefix..'winDir: '..M.WINDIR())
		log.writeLog(printPrefix..'commonProgramFiles: '..M.COMMONPROGRAMFILES())
		log.writeLog(printPrefix..'commonProgramFilesx86: '..M.COMMONPROGRAMFILESx86())
		log.writeLog(printPrefix..'temp: '..M.TEMP())
		log.writeLog(printPrefix..'systemDrive: '..M.SYSTEMDRIVE())
		log.writeLog(printPrefix..'currentDir: '..M.currentDir())
	end
end

return M

socket.lua

socket.lua 脚本主要用于加载同路径下的socket.core程序,为socket编程提供支持。socket.lua 脚本如下👇:

-- socket.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
-- 这个模块仅用于导入 socket/core.dll 模块
-- 要求本 socket.lua 文件与 socket 文件夹位于同一路径下,core.dll 文件位于socket文件夹内
-- 使用时请注意 socket/core.dll 的版本 lua程序的版本是否一致
-- 使用时请注意 x86 与 x64 的区别

-- 导入log模块记录日志
local logEnable, log = pcall(require, "runLog")

-- 定义一个模块
local M = {}

-- 获取本 socket.lua文件的路径
local current_path = string.sub(debug.getinfo(1).source, 2, string.len("/socket.lua") * -1)

local pathSpace = "\\"
if string.find(current_path,'/') then
    pathSpace = '/'
end

current_path = current_path:gsub(pathSpace..'$','')

local x86x64 = 'x86'
-- 添加 cpath 路径,以使 lua 可以找到 current_path 路径下的 dll 库
if 'Lua 5.4' == _VERSION then
    local cpath = "\\luaSocket\\x86\\lua5.4\\?.dll"  -- 引入 x86 lua54 版 socket.core
    if 'x64' == x86x64 then
        cpath = "\\luaSocket\\x64\\lua5.4\\?.dll"  -- 引入 x64 lua54 版 socket.core
    end
    
    cpath = string.gsub(cpath,'\\',pathSpace)  -- 调整路径分隔符
    
    package.cpath = package.cpath..';'..current_path..cpath
end

local socketEnable, socket = pcall(require, "socket.core") -- 加载socket库

M.socketEnable = socketEnable
M.socket = socket

if not socketEnable then
    if logEnable then
        log.writeLog('socketEnable is False')
        log.writeLog(socket)
    end
end

return M

dynamicPhrase_Filter.lua

dynamicPhrase_Filter.lua 脚本将以上 GUID.luasysInfo.luasocket.lua 所提供的信息进行了整合,统一成 dynamicPhrase_Filter 滤镜方法。dynamicPhrase_Filter.lua 脚本如下👇:

--[[
Descripttion: 
version: 
Author: douyaoyuan
Date: 2023-06-01 08:48:23
LastEditors: douyaoyuan
LastEditTime: 2023-06-09 13:27:57
--]]
--dynamicPhrase_Filter.lua
--Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
--本脚本主要用于提供一些与运行环境有关的词条信息

--引入支持模块,处理日期和时间信息
local GUIDEnable, GUID = pcall(require, 'GUID')
local sysInfoEnable, sysInfo = pcall(require, 'sysInfo')
local socketEnable, socket = pcall(require, "socket")
local logEnable, log = pcall(require, "runLog")
local utf8StrEnable, utf8Str = pcall(require, 'utf8String')

if socketEnable then
	socketEnable = socket.socketEnable
	socket = socket.socket
end

local cands
local theCands
local candTxt_lower
local thisTxt
local thisComment

local function Filter(input, env)
	cands={}
	
	for cand in input:iter() do
		--抛出原选项
		if nil == cands[cand.text] then
			yield(cand)
			cands[cand.text]=true
		end

		theCands={}
		if true then
			candTxt_lower = cand.text:lower()
			
			if ({['id']=true,['标识']=true})[candTxt_lower] then
				--添加选项
				if GUIDEnable then
					local guidInfo = GUID.guidInfo()

					table.insert(theCands,{guidInfo.noPunctuations,'💡GUID'})
					table.insert(theCands,{guidInfo.guid,'💡GUID'})
					table.insert(theCands,{guidInfo.withUnderline,'💡GUID'})
				end
			elseif ({['电脑']=true,['系统']=true,['本机']=true})[candTxt_lower] then
				if sysInfoEnable then
					--添加选项
					if ({['电脑']=true,['本机']=true})[candTxt_lower] then
						local computerName = sysInfo.computerName()
						if '未知' ~= computerName then
							table.insert(theCands,{computerName,'💡电脑名'})
						end
						
						local cpu = sysInfo.PROCESSOR_IDENTIFIER()
						if '未知' ~= cpu then
							table.insert(theCands,{cpu,'💡CPU'})
						end
						
						local coreCnt = sysInfo.NUMBER_OF_PROCESSORS()
						if '未知' ~= coreCnt then
							table.insert(theCands,{coreCnt..'核','💡Core'})
						end
					end
					table.insert(theCands,{sysInfo.osName(),'💡系统'})
				end
			elseif ({['ip']=true})[candTxt_lower] then
				if socketEnable then
					--添加选项
					local ip = socket.dns.toip(socket.dns.gethostname())
					if ip then
						table.insert(theCands,{ip,'💡ipv4'})
					end
					
					local addrinfo = socket.dns.getaddrinfo(socket.dns.gethostname(), nil, {family = "inet6"})
					if addrinfo then
	 					for _, info in ipairs(addrinfo) do
							if info.family == "inet6" then
								table.insert(theCands,{info.addr,'💡ipv6'})
							end
	 					end
					end
				end
			elseif ({['用户']=true,['路径']=true})[candTxt_lower] then
				if sysInfoEnable then
					--添加选项
					if ({['用户']=true})[candTxt_lower] then
						local userName = sysInfo.userName()
						if '未知' ~= userName then
							table.insert(theCands,{userName,'💡用户名'})
						end
						local homePath = sysInfo.homePath()
						if '未知' ~= homePath then
							table.insert(theCands,{homePath,'💡用户路径'})
						end
					end
					if ({['路径']=true})[candTxt_lower] then
						local WINDIR = sysInfo.WINDIR()
						if '未知' ~= sysInfo.WINDIR() then
							table.insert(theCands,{WINDIR,'💡WINDIR'})
						end
						
						local homePath = sysInfo.homePath()
						if '未知' ~= homePath then
							table.insert(theCands,{homePath,'💡用户路径'})
						end
						
						local pwd = sysInfo.pwd()
						if '未知' ~= pwd then
							table.insert(theCands,{pwd,'💡pwd'})
						end
						
						local oldPwd = sysInfo.oldPwd()
						if '未知' ~= oldPwd then
							table.insert(theCands,{oldPwd,'💡oldPwd'})
						end
						
						local PROGRAMDATA = sysInfo.PROGRAMDATA()
						if '未知' ~= PROGRAMDATA then
							table.insert(theCands,{PROGRAMDATA,'💡PROGRAMDATA'})
						end
						
						local PROGRAMFILES = sysInfo.PROGRAMFILES()
						if '未知' ~= PROGRAMFILES then
							table.insert(theCands,{PROGRAMFILES,'💡PROGRAMFILES'})
						end
						
						local PROGRAMFILESx86 = sysInfo.PROGRAMFILESx86()
						if '未知' ~= PROGRAMFILESx86 then
							table.insert(theCands,{PROGRAMFILESx86,'💡PROGRAMFILES(x86)'})
						end
						
						local COMMONPROGRAMFILESx86 = sysInfo.COMMONPROGRAMFILESx86()
						if '未知' ~= COMMONPROGRAMFILESx86 then
							table.insert(theCands,{COMMONPROGRAMFILESx86,'💡COMMONPROGRAMFILES(x86)'})
						end
						
						local TEMP = sysInfo.TEMP()
						if '未知' ~= TEMP then
							table.insert(theCands,{TEMP,'💡TEMP'})
						end
						
						local APPDATA = sysInfo.APPDATA()
						if '未知' ~= APPDATA then
							table.insert(theCands,{APPDATA,'💡APPDATA'})
						end
					end
				end
			elseif ({['随机']=true, ['密码']=true})[candTxt_lower] then
				if '随机' == candTxt_lower then
					--添加选项,返回一个随机数
					table.insert(theCands,{math.random(),'💡0-1伪随机数'})
				end
				if utf8StrEnable then
					table.insert(theCands, {utf8Str.newPwd(6), '💡6位随机密码'})
					table.insert(theCands, {utf8Str.newPwd(8), '💡8位随机密码'})
					table.insert(theCands, {utf8Str.newPwd(10, false), '💡10位随机密码'})
					table.insert(theCands, {utf8Str.newPwd(14), '💡14位随机密码'})
					table.insert(theCands, {utf8Str.newPwd(16), '💡16位随机密码'})
					table.insert(theCands, {utf8Str.newPwd(18), '💡18位随机密码'})
				end
			end
		end
		
		--抛出选项
		for idx = 1, #theCands do
			thisTxt = theCands[idx][1]
			thisComment = theCands[idx][2]
			
			if nil ~= thisTxt and '' ~= thisTxt then
				if nil == cands[thisTxt] then
					yield(Candidate("word", cand.start, cand._end, thisTxt, thisComment))
					cands[thisTxt] = true
				end
			end
		end
	end
end

return Filter

💣注意:
👆以上所述 dynamicPhrase_Filter.luaGUID.luasysInfo.luasocket.lua 四个脚本文档,应该位于 用户文件夹 下的 lua 文件夹内。如下👇:
20240109203357

rime.lua

rime.lua 脚本中,我们增加以下配置/代码👇:

help_translator = require("help")
inputShow_translator = require("inputShow")
inputShow_Filter = require("inputShow_Filter")
Upper_Filter = require("Upper_Filter")
dic_4w_Filter = require("dic_4w_Filter")
phraseReplace_Filter = require("phraseReplace_Filter")
pinyinAdding_Filter = require("pinyinAdding_Filter")
dateTime_Filter = require("dateTime_filter")
dynamicPhrase_Filter = require("dynamicPhrase_Filter")

注意最后一行中我们增加了 dynamicPhrase_Filter 滤镜。

wubi_pinyin.custom.yaml

此文以 五笔・拼音 输入方案为例,展示如何配置使用 dynamicPhrase_Filter 滤镜。

五笔・拼音 输入方案的方案文档 wubi_pinyin.schema.yaml 的补丁文档 wubi_pinyin.custom.yaml 中,我们增加以下滤镜配置👇:

# encoding:utf-8
patch:
    - lua_filter@dynamicPhrase_Filter				# 动态候选项,用于动态获取与运行环境有关的信息

👆以上配置并没有完全展示 wubi_pinyin.custom.yaml 中的所有配置项,此处仅展示了与 dynamicPhrase_Filter 滤镜有关的一项配置。

文档获取

👆上述所有的lua脚本与yaml配置文档,你也可以从 rime中州韵小狼毫须鼠管 动态信息滤镜 配置.zip 下载取用。

如果你可以访问gitHub,你也可以在 dyyRime 中找到完全版本的配置包。

小结

本文分享了一种在rime中州韵小狼毫须鼠管输入法中配置动态信息的滤镜,滤镜支持生成GUID字符串,支持生成密码密码字符串,支持获取系统信息(例如用户名,系统名等),支持获取常用路径,支持获取本机ip地址等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/305733.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c JPEG编码,但有错误

#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h> //v4l2 头文件 #include <strin…

阿里云 WindowsServer 使用之 配置 SQL Server 允许远程连接

阿里云 WindowsServer 使用之 配置 SQL Server 允许远程连接 第一步&#xff1a;安装 SQL Server 数据库 这是一个很详细的安装教程&#xff0c;可以参考一下 安装SQL Server详细教程 需要注意&#xff1a;安装实例时&#xff0c;建议在‘身份验证模式’直接选择“混合模式”…

MySQL决战:MySQL数据导入导出

目录 前言 一.navact数据导入导出&#xff08;第三方工具&#xff09; 1.导入数据 2.数据导出 二. mysqldump命令导入导出数据 1.mysqldump介绍 2.数据导出 3.数据导入 三.load data file进行数据导入导出&#xff08;只限于单表&#xff09; 1.数据导出 增加导出权…

springboot学生成绩管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

市场复盘总结 20240109

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 66% 二进三&#xff1a; 进级率低 最常用的二种方法&#xff1a; 方法一&#x…

洛谷 P1217 [USACO1.5] 回文质数 Prime Palindromes 刷题笔记

P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 直接枚举 减枝优化判断 优化1 只有偶数才会是质数 优化2 回文数的判断次数要优于检查素数 先判断是否为回文数再检查是否为质数 if( hw(i)&&isprime(i)) 这里…

【自学笔记】01Java基础-07面向对象基础-03常量、枚举类、抽象类、多态详解

记录java基础学习中有关常量、枚举类、抽象类和多态的内容。 1 常量 什么是常量&#xff1f; 常量是使用了public static final修饰的成员变量&#xff0c;必须有初始化值&#xff0c;而且执行的过程中其值不能被改变。 常量名的命名规范&#xff1a;英文单词全部大写&#x…

Balking模式-实例

Balking模式 所谓Balk就是停止并返回的意思。 如果守护条件不成立&#xff0c;则立即中断处理。 因为Guarded Suspension模式是一直等待至可以运行。 当写入的内容与上次写入的内容完全相同时&#xff0c; 再向文件写入就显得多余了&#xff0c; 所以就不再执行写入操作。 也就…

HTML---JQurey的基本使用

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 本章目标 &#xff08;1&#xff09;能够搭建jQuery开发环境 &#xff08;2&#xff09;使用ready( )方法加载页面、掌握jQuery语法 使用addClass( )方法和css( )方法为元素添加CSS样式使用n…

创建一个矩形中有两个三角形

#include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream>float vertices[] {// 第一个三角形0.5f, 0.5f, 0.0f, // 右上0.5f, -0.5f, 0.0f, // 右下-0.5f, -0.5f, 0.0f, // 左下-0.5f, 0.5f, 0.0f, // 左上 };unsigned i…

Qt QProcess进程间调用及交互通信,完整示例

1. 概述 使用Qt进行应用程序开发&#xff0c;主要是通过QProcess类用于启动外部程序并与其进行通信. 1.1. 运行进程 要启动进程&#xff0c;需要运行的程序的名称和命令行参数作为参数传递给start()。参数以QStringList形式提供。 start()方法原型&#xff1a; void start(…

华为为什么要开发鸿蒙系统,这对开发者有什么影响?

华为为什么要开发鸿蒙系统&#xff0c;这个问题有多方位的解答。 1、华为自主可控&#xff0c;摆脱漂亮国的限令 在美国禁令的威胁下&#xff0c;华为面临着被迫使用漂亮国产品和技术的风险。鸿蒙系统的推出&#xff0c;可以让华为摆脱对于漂亮国技术的依赖&#xff0c;实现技…

两种方式实现mysql截取年月日

select date_format(now(), %Y-%m-%d) select substring(now(), 1, 10)

kubernetes入门到进阶(5)

目录 镜像仓库&#xff1a;怎么用好docker hub这个宝藏 什么是镜像仓库&#xff08;Registry&#xff09; 什么是docker hub 如何在docker hub上挑选镜像 docker hub上进行概念股命名规则是什么 该怎么上传自己的镜像 离线环境该怎么办 小结 镜像仓库&#xff1a;怎么用好docke…

【前端素材】bootstrap4实现在线蛋糕甜品店网页Tehzeeb

一、需求分析 在线蛋糕甜品店的网站通常包含以下几个方面的内容和功能&#xff1a; 主页&#xff1a;网站的主页是用户进入网站的第一个页面&#xff0c;通常会展示一些精选蛋糕和甜品的图片和介绍&#xff0c;以吸引用户的注意力。主页还可能包含一些特别促销或最新的产品信息…

开源拖拽表单设计器好用吗?

很多客户朋友会对开源拖拽表单设计器产生浓厚兴趣&#xff0c;因为不知道它是怎么用的&#xff0c;好不好用&#xff0c;所以经常会有粉丝朋友询问我们关于开源拖拽表单设计器的功能、作用以及优势特点。在现代化职场办公中&#xff0c;传统的表单制作存在一定的缺点和遗憾&…

VBA技术资料MF105:添加一系列新的工作表

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

海外社媒运营为什么需要选择优质IP代理?

跨境电商卖家尤其需要关注海外社媒运营&#xff0c;想要更好地运营Instagram、Facebook、TikTok 或 Twitter等&#xff0c;挖掘社媒潜力需要采取战略方法&#xff0c;而社交媒体IP代理在这一活动中发挥着至关重要的作用&#xff0c;下面为你详细介绍。 一、社交媒体代理IP及其运…

基于WebRTC技术的EasyRTC视频云服务系统在线视频客服解决方案

一、需求分析 随着互联网技术的发展&#xff0c;视频客服也成为服务行业的标配体验&#xff0c;基于WebRTC实时通信技术&#xff0c;客服人员与用户可以建立实时双向的视频交互与沟通。借助视频客服功能可以更加直观地了解用户的需求&#xff0c;提高沟通效率&#xff0c;并帮…

Selenium 学习(0.18)——软件测试之基本路径测试

1、基本路径法测试的概念 是一种白盒测试方法&#xff0c;它在程序控制流图的基础上&#xff0c;通过分析控制构造的环行复杂性&#xff0c;导出基本可执行路径集合&#xff0c;从而设计测试用例的方法。 要保证在测试中程序的每一个可执行语句至少执行一次 【这和语句…