首页
关于
友链
Search
1
ESXI 一些功能调整
443 阅读
2
SoftEther 客户端篇
423 阅读
3
天翼云网关3.0/4.0超管密码
414 阅读
4
SoftEther 服务端篇
308 阅读
5
远程桌面rustdesk使用说明
255 阅读
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
Ai
登录
Search
标签搜索
python
esxi
git
SoftEther
linux
apscheduler
在线
rclone
Ubuntu
list
列表
idm
激活码
Charles
pdf
免安装
鲁大师
图片查看器
蜂蜜浏览器
honeyview
哥特式
累计撰写
98
篇文章
累计收到
16
条评论
首页
栏目
默认分类
代码相关
vue
html
python
系统
数据库
docker
安卓
软件分享
杂七杂八的工具
游戏分享
游戏相关
我的家庭影院
Ai
页面
关于
友链
搜索到
82
篇与
的结果
2025-04-18
docker安装lucky
1. 使用docker-compose安装luckyservices: lucky: image: gdy666/lucky:latest network_mode: host restart: always volumes: - ./data:/goodluck2. 安装后,使用ddns通过指令获取ipv6curl 6.ipw.cn这时候发现没有curl命令,通过下面的方法,给容器安装curl# 在宿主机操作 wget https://github.com/moparisthebest/static-curl/releases/download/v8.4.0/curl-amd64 -O curl-static chmod +x curl-static docker cp curl-static 容器名:/usr/bin/curl docker exec 容器名 curl --version
2025年04月18日
6 阅读
0 评论
0 点赞
2025-03-13
python库 faker
faker,一个非常厉害的 Python 库Github地址:https://github.com/joke2k/faker在软件开发和测试过程中,生成真实可信的测试数据是一项重要但耗时的工作。Python的faker库提供了一个简单而强大的解决方案,它能够生成各种类型的虚拟数据,包括个人信息、地址、公司信息等。这些数据看起来十分真实,非常适合用于开发测试、数据库填充和应用程序演示。安装基础安装使用pip包管理器进行安装:pip install faker基本功能生成个人信息faker库提供了丰富的个人信息生成功能,包括姓名、地址、电话号码等。这些数据可以按照不同的语言和地区格式生成,确保了数据的本地化和真实性。from faker import Faker # 创建Faker实例 fake = Faker('zh_CN') # 使用中文本地化 # 生成个人基本信息 print(f"姓名: {fake.name()}") print(f"地址: {fake.address()}") print(f"手机号: {fake.phone_number()}") print(f"电子邮箱: {fake.email()}") print(f"身份证号: {fake.ssn()}")生成公司信息在企业应用开发中,经常需要模拟公司相关的信息。faker提供了完整的公司信息生成功能,包括公司名称、职位名称、营业执照号等数据。from faker import Faker fake = Faker('zh_CN') # 生成公司相关信息 print(f"公司名称: {fake.company()}") print(f"职位名称: {fake.job()}") print(f"公司口号: {fake.catch_phrase()}") print(f"营业执照号: {fake.company_prefix()}") print(f"公司地址: {fake.company_suffix()}")生成日期和时间faker支持生成各种格式的日期和时间数据,可以指定日期范围,生成过去或未来的随机时间。这对于创建时间序列数据或测试日期相关功能特别有用。from faker import Faker from datetime import datetime, timedelta fake = Faker() # 生成日期时间数据 print(f"当前时间: {fake.date_time_this_month()}") print(f"过去日期: {fake.date_time_between(start_date='-30d', end_date='now')}") print(f"未来日期: {fake.future_date(end_date='+30d')}") print(f"时间戳: {fake.unix_time()}")高级功能自定义数据生成器faker允许创建自定义的数据生成器,可以根据特定需求定义数据的生成规则。这种灵活性使其能够适应各种特殊的数据生成需求。from faker import Faker from faker.providers import BaseProvider class CustomProvider(BaseProvider): def custom_product_code(self): return f"PRD-{self.random_int(min=1000, max=9999)}" def custom_status(self): statuses = ['待处理', '处理中', '已完成', '已取消'] return self.random_element(statuses) fake = Faker('zh_CN') fake.add_provider(CustomProvider) # 使用自定义生成器 print(f"产品编码: {fake.custom_product_code()}") print(f"订单状态: {fake.custom_status()}")多语言支持faker提供了出色的多语言支持,可以根据不同地区的特点生成本地化数据。这对于开发国际化应用或测试多语言功能非常有帮助。from faker import Faker # 创建多语言Faker实例 fake_cn = Faker('zh_CN') # 中文 fake_en = Faker('en_US') # 英文 fake_jp = Faker('ja_JP') # 日文 # 生成不同语言的数据 print("中文姓名:", fake_cn.name()) print("英文姓名:", fake_en.name()) print("日文姓名:", fake_jp.name()) print("中文地址:", fake_cn.address()) print("英文地址:", fake_en.address()) print("日文地址:", fake_jp.address())实际应用场景数据库测试数据生成在开发过程中,经常需要生成大量测试数据来填充数据库。使用faker可以快速生成符合要求的测试数据,帮助开发人员进行功能测试和性能测试。from faker import Faker import sqlite3 class TestDataGenerator: def __init__(self): self.fake = Faker('zh_CN') self.conn = sqlite3.connect('test.db') self.cursor = self.conn.cursor() def create_tables(self): self.cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT, email TEXT, address TEXT, phone TEXT ) ''') def generate_user_data(self, count): for _ in range(count): self.cursor.execute(''' INSERT INTO users (name, email, address, phone) VALUES (?, ?, ?, ?) ''', ( self.fake.name(), self.fake.email(), self.fake.address(), self.fake.phone_number() )) self.conn.commit() # 使用示例 generator = TestDataGenerator() generator.create_tables() generator.generate_user_data(100)API测试数据模拟在进行API测试时,需要模拟各种请求数据。faker可以帮助生成符合API要求的测试数据,提高测试效率和覆盖率。from faker import Faker import json class APITestDataGenerator: def __init__(self): self.fake = Faker('zh_CN') def generate_user_payload(self): return { "user": { "name": self.fake.name(), "email": self.fake.email(), "phone": self.fake.phone_number(), "address": { "street": self.fake.street_address(), "city": self.fake.city(), "postcode": self.fake.postcode() } } } def generate_order_payload(self): return { "order": { "order_id": self.fake.uuid4(), "customer_name": self.fake.name(), "product_name": self.fake.word(), "quantity": self.fake.random_int(min=1, max=10), "order_date": self.fake.date_time_this_month().isoformat() } } # 使用示例 generator = APITestDataGenerator() user_data = generator.generate_user_payload() order_data = generator.generate_order_payload() print(json.dumps(user_data, indent=2, ensure_ascii=False)) print(json.dumps(order_data, indent=2, ensure_ascii=False))总结Python faker库为开发者提供了一个强大而灵活的测试数据生成解决方案。通过其丰富的内置数据生成器和自定义功能,开发者可以轻松创建各种类型的模拟数据。faker的多语言支持和本地化特性使其特别适合国际化应用的开发和测试。在实际应用中,从简单的个人信息生成到复杂的数据库测试数据填充,faker都展现出了优秀的性能和可靠性。
2025年03月13日
26 阅读
0 评论
0 点赞
2025-03-13
Python异步任务调度:任务队列Celery
Python异步任务调度:最牛逼的任务队列神器Celery在现代应用中,异步任务调度无疑是提升性能和响应速度的关键之一。尤其在处理高并发、长时间运行任务时,如何让后台任务异步执行成为了开发者面临的一个重要问题。Python中,Celery 是一个强大且广泛使用的异步任务队列工具,它让你可以轻松处理并发任务、定时任务以及任务调度。那么,今天我们就来深入了解Celery以及如何在Python项目中使用它。什么是Celery?Celery 是一个分布式的任务队列系统,支持异步任务执行和定时任务调度。通过Celery,你可以把一些耗时的操作,比如发送邮件、视频处理、图像处理等从主流程中提取出来,交给Celery去处理,这样就能有效提升系统的响应速度和用户体验。Celery通常与消息代理(如RabbitMQ或Redis)结合使用,负责将任务分配给多个工作进程进行异步执行。它的工作原理就像是一个生产者-消费者模式,生产者将任务放入队列,消费者从队列中取出任务并执行。安装Celery首先,我们需要安装Celery。你可以通过pip命令轻松安装:pip install celery使用Celery调度任务让我们通过一个简单的例子来了解如何使用Celery调度异步任务。假设你正在开发一个网站,并且想要在用户注册后发送一个欢迎邮件,而发送邮件是一个耗时操作。为了避免阻塞用户注册的流程,我们希望将邮件发送任务放到Celery中异步执行。步骤1:创建一个Celery实例首先,我们需要创建一个Celery应用。我们可以将其配置成在一个叫做celery.py的文件中:from celery import Celery # 创建一个Celery实例,配置消息队列为Redis app = Celery('tasks', broker='redis://localhost:6379/0') # 定义任务 @app.task def send_welcome_email(user_email): print(f"Sending welcome email to {user_email}") # 这里可以调用发送邮件的逻辑 return f"Email sent to {user_email}"在上面的代码中:Celery('tasks', broker='redis://localhost:6379/0')这一行代码创建了一个Celery应用,并指定了消息代理使用Redis。send_welcome_email是我们定义的一个简单任务,它会模拟发送邮件。步骤2:启动Celery Worker在开发过程中,你可以启动Celery Worker来处理任务。进入项目根目录,执行以下命令:celery -A celery worker --loglevel=info这个命令会启动Celery的工作进程(worker)。它会从消息队列中取出任务并执行。你会看到类似以下的输出,表示Celery Worker已经准备好接收任务了。[2025-02-14 15:00:00,000: INFO/MainProcess] Connected to redis://localhost:6379/0 [2025-02-14 15:00:01,000: INFO/MainProcess] mingle: searching for neighbors [2025-02-14 15:00:02,000: INFO/MainProcess] mingle: all alone [2025-02-14 15:00:02,000: INFO/MainProcess] celery@hostname ready.步骤3:调用任务接下来,我们可以通过Python脚本来调用这个异步任务:from celery import Celery from tasks import send_welcome_email # 调用异步任务 send_welcome_email.delay('user@example.com')send_welcome_email.delay('user@example.com') 是Celery提供的一个异步调用方法,使用delay方法将任务提交到队列中,而不是直接执行。这时,Celery Worker会从队列中取出任务并执行。当邮件发送完成后,你会看到终端输出了类似:Sending welcome email to user@example.com定时任务调度除了异步任务,Celery 还支持定时任务调度,类似于Linux的cron任务。我们可以利用celery-beat扩展来实现定时任务。让我们来写个简单的定时任务,比如每小时检查一次用户的邮箱是否有效。步骤1:安装celery-beatpip install celery[redis] celery[redis]==5.0.5 pip install celery[beat]步骤2:配置定时任务在celery.py中添加如下配置:from celery import Celery from celery.schedules import crontab app = Celery('tasks', broker='redis://localhost:6379/0') @app.task def check_email_validity(): print("Checking email validity for users...") # 定义定时任务,每小时执行一次 app.conf.beat_schedule = { 'check-email-validity-every-hour': { 'task': 'tasks.check_email_validity', 'schedule': crontab(minute=0, hour='*'), # 每小时的第0分钟执行 }, }步骤3:启动Celery Beat除了启动Worker,我们还需要启动Celery Beat来调度定时任务:celery -A celery beat --loglevel=info这时,check_email_validity任务会每小时自动执行一次。总结Celery是一个非常强大的Python任务队列工具,适合用于处理异步任务和定时任务。在开发现代应用时,Celery帮助我们将耗时任务从主流程中分离出来,从而提升系统性能和响应速度。通过简单的配置和几行代码,你就能在项目中轻松集成Celery,实现异步执行任务和定时任务调度。无论你是开发Web应用、后台任务还是周期性调度任务,Celery都能成为你最牛逼的得力助手!
2025年03月13日
14 阅读
0 评论
0 点赞
2025-01-14
python网络编程:ZeroMQ实战指南
想写分布式应用却被Socket编程折腾得够呛?今天给大家介绍一个超强的网络通信库:ZeroMQ(也叫ØMQ)。它不仅简单易用,性能还贼棒!让我们一起来玩转这个神器!1. 为什么选ZeroMQ?传统Socket编程就像用电报机发消息:又慢又容易出错。而ZeroMQ就像用微信聊天:简单、快速、可靠。它能帮你:轻松实现进程间通信搞定分布式系统处理高并发场景2. 快速入门先安装ZeroMQ的Python绑定:pip install pyzmq2.1 最简单的例子:请求-响应模式服务端代码(server.py):import zmq import time context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") print("服务器已启动,等待客户端连接...") while True: # 等待客户端请求 message = socket.recv_string() print(f"收到请求: {message}") # 模拟处理时间 time.sleep(1) # 发送响应 response = f"收到你的消息:{message}" socket.send_string(response)客户端代码(client.py):import zmq context = zmq.Context() socket = context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") for i in range(3): message = f"Hello {i}" print(f"发送请求: {message}") # 发送请求 socket.send_string(message) # 等待响应 response = socket.recv_string() print(f"收到响应: {response}\n")是不是超简单?运行效果就像微信对话一样:发消息→等回复→收到回复。3. 进阶应用:发布-订阅模式这个模式特别适合做消息推送,比如气象站向多个用户推送天气数据。发布者代码(publisher.py):import zmq import time import random def weather_update(): return { "温度": round(random.uniform(20, 30), 1), "湿度": round(random.uniform(40, 70), 1) } context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5556") print("气象站启动...") while True: data = weather_update() message = f"北京,{data['温度']},{data['湿度']}" socket.send_string(message) print(f"发布天气数据: {message}") time.sleep(2)订阅者代码(subscriber.py):import zmq context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5556") socket.setsockopt_string(zmq.SUBSCRIBE, "北京") print("天气监测站已连接,等待数据...") while True: message = socket.recv_string() city, temp, humidity = message.split(',') print(f"\n{city}实时天气:") print(f"温度: {temp}°C") print(f"湿度: {humidity}%")4. 实战项目:简单的分布式计算系统来个实用的例子:主节点分发任务,工作节点处理任务。任务分发器(dispatcher.py):import zmq import random import time context = zmq.Context() sender = context.socket(zmq.PUSH) sender.bind("tcp://*:5557") collector = context.socket(zmq.PULL) collector.bind("tcp://*:5558") print("任务分发系统启动...") # 发送任务 tasks_sent = 0 while tasks_sent < 10: # 创建一个计算任务 data = random.randint(1, 100) sender.send_json({ "task_id": tasks_sent, "data": data }) print(f"发送任务 {tasks_sent}: 计算{data}的平方") tasks_sent += 1 # 接收结果 results = [] while len(results) < 10: result = collector.recv_json() results.append(result) print(f"收到任务{result['task_id']}的结果: {result['result']}") print("\n所有任务完成!")工作节点(worker.py):import zmq import time import random context = zmq.Context() receiver = context.socket(zmq.PULL) receiver.connect("tcp://localhost:5557") sender = context.socket(zmq.PUSH) sender.connect("tcp://localhost:5558") print("工作节点已启动,等待任务...") while True: task = receiver.recv_json() # 模拟计算过程 time.sleep(random.random()) # 计算结果 result = task['data'] ** 2 # 发送结果 sender.send_json({ "task_id": task['task_id'], "result": result }) print(f"完成任务{task['task_id']}: {task['data']}的平方是{result}")5. 实用技巧5.1 消息模式选择指南REQ/REP:适合客户端-服务器模型PUB/SUB:适合数据广播场景PUSH/PULL:适合任务分发场景5.2 错误处理import zmq import zmq.error try: socket.send_string("消息", zmq.NOBLOCK) except zmq.error.Again: print("发送缓冲区已满,消息未发送")5.3 超时处理import zmq from zmq.error import Again poller = zmq.Poller() poller.register(socket, zmq.POLLIN) # 等待1秒 if poller.poll(1000): message = socket.recv_string() else: print("接收超时")6. 性能优化小贴士使用合适的消息大小:太小:网络开销占比大太大:延迟增加建议:1KB到1MB之间适当的缓冲区设置:socket.setsockopt(zmq.SNDHWM, 1000) # 发送缓冲区大小 socket.setsockopt(zmq.RCVHWM, 1000) # 接收缓冲区大小使用多线程提升性能:from threading import Thread def worker(): context = zmq.Context() socket = context.socket(zmq.REP) socket.connect("inproc://workers") # 处理逻辑... threads = [Thread(target=worker) for _ in range(3)] for thread in threads: thread.start()ZeroMQ就像是给程序装上了"微信":简单:几行代码搞定通信灵活:多种通信模式随意选可靠:自动重连、消息队列高效:性能甩开传统Socket几条街掌握了ZeroMQ,分布式系统不再是噩梦!
2025年01月14日
56 阅读
0 评论
0 点赞
2025-01-02
dify和ollama使用教程
1. 安装docker这一步百度2. 安装difygit clone https://github.com/langgenius/dify.git cd dify cd docker cp .env.example .env docker-compose up -denv里面可以修改映射的端口,默认是80和443,教程先默认{callout color="#f0ad4e"}EXPOSE_NGINX_PORT=4080EXPOSE_NGINX_SSL_PORT=4443{/callout}2.1 之后访问 localhost/install 进行安装3. 安装Ollama然后我们需要去安装Ollama,官网地址https://ollama.com/安装完ollama后去找适合的模型下载https://ollama.com/search下列我举例一下网友比较推荐的模型{callout color="#e1e1db"}yi Yi 1.5 是一个高性能的双语语言模型。 参数大小:6b9b34b 更新时间:7个月前 适合编程的双语(中文和英文)模型。yi-coder Yi-Coder 是一系列开源代码语言模型,提供少于100亿参数的最先进的编码性能。 参数大小:1.5b9b 更新时间:3个月前 适合编程的双语模型。qwen Qwen 1.5 是由阿里云提供的一系列大型语言模型,参数从0.5B到110B不等。 参数大小:0.5b1.8b4b7b14b32b72b110b 更新时间:8个月前 阿里云提供的模型,可能包含对中文的支持。 qwen2 Qwen2 是阿里集团提供的一系列大型语言模型。 参数大小:tools0.5b1.5b7b72b 更新时间:3个月前 同样可能包含对中文的支持。llama2-chinese Llama 2 基于模型,针对提高中文对话能力进行了微调。 参数大小:7b13b 更新时间:14个月前 专门针对中文对话进行了优化的模型。{/callout}这里的几b是代表着多少亿的参数,个人笔记本建议选择10b以内,不然参数太多了可能会很慢。这里我以yi-coder为例子终端运行ollama run yi-coderollama run yi-coder pulling manifestpulling 8169bd33ad13... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 5.0 GB pulling afc128547699... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 527 B pulling 43070e2d4e53... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 11 KB pulling 3dc12ee097e8... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 135 B pulling a60ed831ae4c... 100% ▕██████████████████████████████████████████████████████████████████████████████████████▏ 485 B verifying sha256 digest writing manifest success >>> 你好Hi, how can I assist you? Please provide more specific information about your request.4.然后dify里面配置模型这里URL填写http://host.docker.internal:11434(因为dify是安装在docker里面的,但是ollama是安装在本机的,所以需要让docker访问ollama的api)点击保存,右上角会提示修改成功4.1 回到首页创建空白模板右上角选择yi-code,然后给他提示词就可以了然后上方点击知识库进行知识库配置可以上传自己需要的内容处理的时候可以这样选择添加完成之后回到聊天机器人4.2 给机器人添加知识库左边的提示词下面哟一个上下文,可以添加知识库,之后就可以正常使用了5. 但是上面的yi-coder不好用所以我用了另外的,ollama run llama3.1:8b这个相比于其他会好用很多。5.1 TEXT EMBEDDING 配置知识库那里的添加,我们也可以选择高质量只是需要配置一个TEXT EMBEDDING添加和上面的那个差不多只是需要选择TEXT EMBEDDING5.2 Ollama配置TEXT EMBEDDINGdmeta-embedding-zhollama pull shaw/dmeta-embedding-zh测试:curl http://localhost:11434/api/embeddings -d '{ "model": "shaw/dmeta-embedding-zh", "prompt": "天空是灰色的" }'返回的内容这样就成功了dify里面正常添加这个就行
2025年01月02日
16 阅读
0 评论
0 点赞
2024-12-05
FileCodeBox配置
docker运行name: filecodebox services: filecodebox: restart: always ports: - 123:12345 #左边的8080可以随意更改成服务器上没有用过的端口 volumes: - ./data:/app/data container_name: filecodebox image: lanol/filecodebox:beta networks: default: external: true name: web s3配置文件
2024年12月05日
17 阅读
0 评论
0 点赞
2024-11-29
阿里云CDN使用
1. 阿里云配置一个cdn,一切默认就行新建一个cdn,域名就是,泛域名类型的.cdn.example.com源站,因为家里的80和443是没了的,所以使用的是65000,例如:test.example.com:650001.1 基本设置-->ipv6开关可以根据自己的需求设置是否打开1.2 回源配置-->IPv6回源优先使用IPv6-->已开启回源跟随-->未开启回源IPv4/IPv6轮询-->已开启1.3 性能优化-->忽略参数这里需要修改一下,要不然某些参数会被忽略忽略参数-->否2. 新建一个网站默认就行,监听的端口是65000,不是默认的80,配置一个反向代理反代到frps的端口号,比如650803. 对应的服务器上配置frp3.1 frps的配置bindAddr = "0.0.0.0" # 服务端监听端口 bindPort = 52101 # 服务端监听 KCP 协议端口,用于接收配置了使用 KCP 协议的 frpc 连接。 kcpBindPort = 52101 # 在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过。 auth.token = "token.example" # http端口,不要设置80,否则和宝塔面板的端口号冲突 vhostHTTPPort = 65080 # https端口,不要设置443 vhostHTTPSPort = 65443 # 二级域名后缀 subDomainHost = "cdn.example.com" # 开启frps仪表盘可以检查frp的状态和代理的统计信息。 webServer.addr = "0.0.0.0" webServer.port = 65002 webServer.user = "example" webServer.password = "example" enablePrometheus = true # 日志配置文件 # 日志文件,不指定日志信息默认输出到控制台 log.to = "./logs/cdn-example.log" # 日志等级,可用等级“trace,debug,info,warn,error” log.level = "info" # 日志保存最大时间 log.maxDays = 3 log.disablePrintColor = false # 自定义默认的404页面 custom404Page = "./frp/404.html"3.2 frpc的配置# 用户名,设置此参数后,代理名称会被修改为 {user}.{proxyName},避免代理名称和其他用户冲突。 user = "daimaji" serverAddr = "127.0.0.1" serverPort = 52101 # 登录失败就退出 loginFailExit = true # 控制台日志文件 log.to = "./cdn-example.log" # trace, debug, info, warn, error log.level = "info" log.maxDays = 3 # 当log.to是控制台时禁用日志颜色,默认值为false log.disablePrintColor = false # 认证方式 auth.method = "token" # 令牌 auth.token = "token.example" # 控制面板设置 webServer.addr = "0.0.0.0" webServer.port = 65002 webServer.user = "example" webServer.password = "example" # 将提前建立连接,默认值为零 transport.poolCount = 5 #用于连接到服务器的通信协议 #现在支持tcp、kcp、quic、websocket和wss,默认为tcp transport.protocol = "tcp" #连接服务器时设置客户端绑定ip,默认为空。 #只有当protocol=tcp或websocket时,才会使用该值。 transport.connectServerLocalIP = "0.0.0.0" [[proxies]] name = "测试" type = "http" localIP = "127.0.0.1" localPort = 65003 subdomain = "test"4. 访问测试
2024年11月29日
22 阅读
0 评论
0 点赞
2024-11-28
Idea安装codeium排坑(faild download language server)
1. 插件市场搜索安装codeium2. 重启后右下角有这个图标3. 重启IDEA之后,提示faild download language server4. 前往 github.com 下载对应版本的exe程序,版本与插件版本对应,比如上图中我插件的版本是 1.28.1 我就下载1.28.1的exe。5. 把下载好的 language_server_windows_x64.exe 放到插件目录下的一个很长字符串的目录下。这里有一个小技巧,如果你的插件目录不在这里,你可以用Everything软件全盘搜codeium 。最后一串英文,每个人的可能不一样C:\Users\用户名\AppData\Roaming\JetBrains\PyCharm2024.3\plugins\codeium\f740e5605570f4cf2ef1fdda47389168e7319c796. 重启IDEA后提示登录,登录之后便可使用
2024年11月28日
175 阅读
0 评论
0 点赞
2024-11-12
远程桌面rustdesk使用说明
项目地址:https://github.com/rustdesk/rustdesk/1. 公网服务器上跑docker项目docker-compose.yml文件:networks: rustdesk-net: external: false services: hbbs: container_name: hbbs ports: - 21115:21115 - 21116:21116 - 21116:21116/udp - 21118:21118 image: rustdesk/rustdesk-server:latest command: hbbs -r 你的域名:21117 -k {key值,自己设定} volumes: - ./data:/root networks: - rustdesk-net depends_on: - hbbr restart: unless-stopped hbbr: container_name: hbbr ports: - 21117:21117 - 21119:21119 image: rustdesk/rustdesk-server:latest command: hbbr volumes: - ./data:/root networks: - rustdesk-net restart: unless-stopped默认配置就行2. 配置客户端2.1 直接配置客户端电脑上:手机上:2.2. GitHub配置,自动编译版本{callout color="#80b8f5"}访问rustdesk的项目地址。点击Fork创建分支。(就是把别人的项目拉一份到你的项目库中){/callout}{callout color="#80b8f5"}默认配置就行{/callout}{callout color="#80b8f5"}配置环境变量{/callout}这里,分别创建两个变量RENDEZVOUS_SERVER 服务器IP或域名RS_PUB_KEY key值{callout color="#80b8f5"}点击Actions-General 勾选Allow all actions and reusable workflows后保存。{/callout}在没有变动情况下,默认都是勾选的。{callout color="#80b8f5"}接下来,选择Actions启用工作流。{/callout}刷新页面,便可以看到当前的任务。{callout color="#f0ad4e"}这里的任务需要很久,大概40-50分钟左右{/callout}创建完成后,在Releases中便可以看到对应的包了。{callout color="#80b8f5"}使用{/callout}这里以Windows为例。运行后在网络配置中,无需填写相关服务器信息。在无P2P直连环境,便可以直连了。删除下面代码 位置\rustdesk-master\src\ui\index.tis完成后,重新打包。界面就好看多了
2024年11月12日
255 阅读
1 评论
0 点赞
2024-11-12
pycharm激活说明
2025年3月27日,评论区提到了另外的方法,在语言和区域设置中,把区域改为未指定就好了{dotted startColor="#ff6c6c" endColor="#1989fa"/}现在的激活会验证网址,暂时只想到代理的方式解决设置-->外观与行为-->系统设置-->HTTPdaili选择手动代理-->HTTP主机号:随便一个不存在的都行,127.0.0.1端口号:81(不存在就行)-不为以下项使用代理:downloads.marketplace.jetbrains.com, resources.jetbrains.com, hub.jetbrains.com, plugins.jetbrains.com, *.github.com, *.google.com, *.bing.com, registry.geoway.com, 172.16.*, 10.*, localhost, api.cognitive.microsofttranslator.com, *.microsoft.com
2024年11月12日
88 阅读
3 评论
0 点赞
2024-11-07
misskey的一些使用教程
1. 其他应用使用misskey登录原文api使用地址 要为使用应用程序的用户(以下简称“用户”)获取访问令牌,请按照以下步骤请求颁发。提示下面描述的方法称为 MiAuth,它无需创建应用程序即可立即颁发访问令牌。步骤 1生成 UUID。从现在开始,这将被称为会话 ID。 警告 请每次生成此会话ID,并且不要重复使用。 第 2 步在用户的浏览器中显示应用程序身份验证表单。可以使用以下格式的 URL 打开身份验证表单:https://{host}/miauth/{session}{host}替换为您服务器的主机。主机通常由用户输入。{session}替换为您的会话 ID。您还可以在 URL 中设置一些选项作为查询参数:姓名解释name应用程序名称。icon应用程序图标图像 URL。callback身份验证后重定向到的 URL。 重定向时,session会话 ID 将作为查询参数添加。permission应用程序请求的权限。列出 所请求的权限,以 分隔。您可以在此处,检查权限列表。[](https://misskey-hub.net/cn/docs/for-developers/api/permission/)例子https://misskey.example/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f?name=MyApp&callback=https%3A%2F%2Fmyapp.example.com%2Fcallback&permission=write:notes,write:following,read:drive通过之后,携带的参数就是https://myapp.example.com/callback?session=c1f6d42b-468b-4fd2-8274-e58abdedef6f步骤3用户授予应用程序访问权限后,对以下格式的 URL 的 POST 请求将返回包含访问令牌的 JSON 响应。https://{host}/api/miauth/{session}/check{host} 替换为您服务器的主机。{session} 替换为您的会话 ID。响应中包含的属性有:姓名解释token用户的访问令牌。user用户信息。
2024年11月07日
94 阅读
0 评论
0 点赞
2024-07-31
acme更新ssl证书
acme实用技巧:稳妥的自动更新证书之宝塔面板_acme证书-CSDN博客acme实用技巧:稳妥的自动更新证书之宝塔面板1. 安装 acme.sh安装很简单, 一个命令:curl https://get.acme.sh | sh -s email=my@example.com把 my@example.com 改成自己的邮箱安装成功后,会为你自动创建定时任务, 如果快过期了, 需要更新, 则会自动更新证书。默认情况下,证书将每60天更新一次。切换默认证书目前 acme.sh 支持 Let’s Encrypt、Buypass、ZeroSSL、SSL.com 和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用下面命令:#切换 Let's Encrypt acme.sh --set-default-ca --server letsencrypt #切换 Buypass acme.sh --set-default-ca --server buypass #切换 ZeroSSL acme.sh --set-default-ca --server zerossl #切换 SSL.com acme.sh --set-default-ca --server ssl.com #切换 Google Public CA acme.sh --set-default-ca --server google2. 设置DNS验证文档:https://github.com/acmesh-official/acme.sh/wiki/dnsapi以 CloudFlare为例:使用全局API密钥准备:全局API密钥在 我的个人资料–API令牌–Global API Key 获得设置CloudFlare DNS自动验证使用下面命令:export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4" #API密钥 export CF_Email="123456@qq.com" #登录邮箱3. 生成证书如果之前安装过证书,后面加 --force 参数,acme.sh --issue --dns dns_cf -d xxx.com -d *.xxx.com成功之后,会在 ~/.acme.sh/目录生成以域名为名称的文件夹,里面包含了证书和各种信息不要通配符,可以去掉:-d *.xxx.com ,如果有多个子域名,后面加 -d x.xxx.com--dns dns_cf 表示使用CloudFlare DNS 自动验证4. 安装证书(重点)假设:你网站使用的是nginx,使用以下命令acme.sh --install-cert -d xxx.com -d *.xxx.com \ --key-file /www/server/panel/vhost/cert/xxx.com/privkey.pem \ --fullchain-file /www/server/panel/vhost/cert/xxx.com/fullchain.pem \ --reloadcmd "service nginx force-reload"使用这条命令时先要生成证书(第三步)不要通配符,可以去掉:-d *.xxx.com ,如果有多个子域名,后面加 -d x.xxx.com命令解读--install-cert #安装证书--key-file #指定安装证书密钥路径--fullchain-file #指定安装证书路径--reloadcmd #重新加载nginx生效为什么要使用那么多参数因为acme证书虽然60天更新一次,但是更新的证书路径是:~/.acme.sh/xxx.com你的域名指向的证书路径并不是在 ~/.acme.sh/不能使用~/.acme.sh/文件夹中的证书文件,它们仅供内部使用,文件夹结构将来可能会更改这些参数会被acme保存起来,下次自动更新时就会自动把证书安装到指定的路径,然后帮你重新加载nginx生效宝塔面板安装证书你要先知道你的域名证书指向的路径在哪,以宝塔面板为例:/www/server/panel/vhost/cert/xxx.com/fullchain.pem /www/server/panel/vhost/cert/xxx.com/privkey.pem可以看到宝塔的证书路径是:/www/server/panel/vhost/cert/如果还没有安装过证书,那么此路径是没有域名证书文件夹的,宝塔面板默认的证书路径格式是:/www/server/panel/vhost/cert/{域名}所以,生成证书后,到~/.acme.sh/目录下找到域名文件夹,复制证书fullchain.cer #证书 xx.com.key #密钥复制到配置ssl证书的地方, 再查看证书路径:最后再执行以下命令,记得修改为你的证书路径acme.sh --install-cert -d xxx.com -d *.xxx.com \ --key-file /www/server/panel/vhost/cert/xxx.com/privkey.pem \ --fullchain-file /www/server/panel/vhost/cert/xxx.com/fullchain.pem \ --reloadcmd "service nginx force-reload"不是复制了证书生效了吗,为什么还要执行上面的命令?因为这些参数会被保存起来,之后的自动更新才有效!5. 签发ECC证书使用以下命令 (以nginx为例)acme.sh --install-cert -d xxx.com -d *.xxx.com --keylength ec-256 \ --key-file /www/server/panel/vhost/cert/xxx.com/privkey.pem \ --fullchain-file /www/server/panel/vhost/cert/xxx.com/fullchain.pem \ --reloadcmd "service nginx force-reload"多了 --keylength ec-256 参数6.强制更新证书所有证书将每60天自动更新一次,但你要强制更新的话acme.sh --renew -d xxx.com --force或者,对于ECC证书:acme.sh --renew -d xxx.com --force --ecc如何停止证书续订要停止证书的续订,您可以执行以下操作以从续订列表中删除证书:acme.sh --remove -d xxx.com [--ecc]不会从磁盘中删除证书/密钥文件。您可以自己删除相应的目录 (例如 ~/.acme.sh/xxx.com )。如何升级 acme.sh您可以将acme.sh更新为最新代码:acme.sh --upgrade您还可以启用自动升级:acme.sh --upgrade --auto-upgrade然后acme.sh将自动保持最新。禁用自动升级:acme.sh --upgrade --auto-upgrade 0
2024年07月31日
51 阅读
1 评论
1 点赞
2024-07-03
实现 MySQL8 查询 JSON 字段
步骤 1: 创建表首先,我们需要创建一个包含 JSON 数据类型字段的表。假设我们要创建一个名为 users 的表,其中包含一个名为 info 的 JSON 字段。CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, info JSON );以上代码创建了一个名为 users 的表,其中包含 id 和 info 两个字段。id 字段是主键,info 字段是 JSON 类型。步骤 2: 插入数据接下来,我们需要向表中插入一些包含 JSON 数据的示例数据。INSERT INTO users (info) VALUES ('{"name": "John", "age": 30, "city": "New York"}'), ('{"name": "Alice", "age": 25, "city": "London"}'), ('{"name": "Bob", "age": 35, "city": "Paris"}');以上代码向 users 表中插入了三条数据,每条数据都包含一个 JSON 对象。步骤 3: 查询 JSON 字段现在,我们可以开始查询包含 JSON 字段的数据了。以下是一些常用的查询操作。查询 JSON 字段的所有数据要查询 JSON 字段的所有数据,可以使用简单的 SELECT 语句。SELECT * FROM users;以上代码将返回 users 表中所有数据。查询 JSON 字段的特定属性要查询 JSON 字段的特定属性,可以使用 -> 或 ->> 运算符。SELECT info->'$.name' AS name, info->'$.age' AS age FROM users;以上代码将返回 users 表中每行数据的 name 和 age 属性。查询 JSON 字段的条件要查询满足特定条件的 JSON 字段数据,可以使用 WHERE 子句。SELECT * FROM users WHERE info->'$.age' > 30;以上代码将返回 users 表中 age 大于 30 的数据。查询 JSON 数组中的值如果 JSON 字段是一个数组,可以使用 ->> 运算符和 JSON_TABLE 函数来查询数组中的值。SELECT jt.value FROM users, JSON_TABLE(info, '$.hobbies[*]' COLUMNS (value VARCHAR(255) PATH '$')) AS jt;
2024年07月03日
27 阅读
0 评论
0 点赞
2024-07-02
小米14 pro设置
1. 关闭5G网络进入拨号界面,输入*#*#54638#*#*回到设置-->移动网络-->5G网络点进去关闭就好
2024年07月02日
201 阅读
0 评论
0 点赞
2024-07-02
【Django】执行查询——查询JSONField
JSONField本篇的例子以下面这个模型为基础:from django.db import models class Dog(models.Model): name = models.CharField(max_length=200) data = models.JSONField(null=True) def __str__(self): return self.name 保存和查询None值在使用JSONField时,要注意空值的处理,注意区分SQL NULL和JSON null保存None值我们首先创建两个Dog实例from django.db.models import Value, JSONField Dog.objects.create(name="Max", data=None) # SQL NULL. # <Dog: Max> Dog.objects.create(name="Archie", data=Value(None, JSONField())) # JSON null. # <Dog: Archie>观察两个实例在数据库中的表现,可以发现SQL NULL和JSON null是不一样的。查询None值查询时,None值将被解释为JSON null,要查询SQL NULL,需要使用isnull:Dog.objects.filter(data=None) # <QuerySet [<Dog: Archie>]> Dog.objects.filter(data=Value(None, JSONField())) # <QuerySet [<Dog: Archie>]> Dog.objects.filter(data__isnull=True) # <QuerySet [<Dog: Max>]> Dog.objects.filter(data__isnull=False) # <QuerySet [<Dog: Archie>]> 对比可以发现,data=None在保存时存储为SQL NULL,查询时解释为JSON null根据键值查找根据json数据的键进行查找,用__连接,可以多个键连接一起,如果某个值是一个列表,要进行索引,就用整数代表该列表的索引。例子:Dog.objects.create( ... name="Rufus", ... data={ ... "breed": "labrador", ... "owner": { ... "name": "Bob", ... "other_pets": [ ... { ... "name": "Fishy", ... } ... ], ... }, ... }, ... ) # <Dog: Rufus> Dog.objects.create(name="Meg", data={"breed": "collie", "owner": None}) # <Dog: Meg> # __连接键进行查找 Dog.objects.filter(data__breed="collie") # <QuerySet [<Dog: Meg>]> # 多个键连接进行查找 Dog.objects.filter(data__owner__name="Bob") # <QuerySet [<Dog: Rufus>]> # 某个值是一个列表,要进行索引,就用整数代表该列表的索引 Dog.objects.filter(data__owner__other_pets__0__name="Fishy") # <QuerySet [<Dog: Rufus>]> # 查询缺少的键,使用isnull查找 Dog.objects.create(name="Shep", data={"breed": "collie"}) # <Dog: Shep> Dog.objects.filter(data__owner__isnull=True) # <QuerySet [<Dog: Shep>]> 包含与键查找containscontains 查询返回的对象是那些包含给定键值对的顶层字段的对象。Dog.objects.create(name="Rufus", data={"breed": "labrador", "owner": "Bob"}) # <Dog: Rufus> Dog.objects.create(name="Meg", data={"breed": "collie", "owner": "Bob"}) # <Dog: Meg> Dog.objects.create(name="Fred", data={}) # <Dog: Fred> Dog.objects.filter(data__contains={"owner": "Bob"}) # <QuerySet [<Dog: Rufus>, <Dog: Meg>]> Dog.objects.filter(data__contains={"breed": "collie"}) # <QuerySet [<Dog: Meg>]> contained_by这个可以理解为 contains 查询的反向。 要查询的对象满足这样的条件:其该字段对应的数据是传递的值的子集。Dog.objects.create(name="Rufus", data={"breed": "labrador", "owner": "Bob"}) # <Dog: Rufus> Dog.objects.create(name="Meg", data={"breed": "collie", "owner": "Bob"}) # <Dog: Meg> Dog.objects.create(name="Fred", data={}) # <Dog: Fred> Dog.objects.filter(data__contained_by={"breed": "collie", "owner": "Bob"}) # <QuerySet [<Dog: Meg>, <Dog: Fred>]> Dog.objects.filter(data__contained_by={"breed": "collie"}) # <QuerySet [<Dog: Fred>]> has_key返回数据顶层的键中有给定值的对象。Dog.objects.create(name="Rufus", data={"breed": "labrador"}) # <Dog: Rufus> Dog.objects.create(name="Meg", data={"breed": "collie", "owner": "Bob"}) # <Dog: Meg> Dog.objects.filter(data__has_key="owner") # <QuerySet [<Dog: Meg>]> has_keys返回数据顶层的键都包含在给定列表中的对象。Dog.objects.create(name="Rufus", data={"breed": "labrador"}) # <Dog: Rufus> Dog.objects.create(name="Meg", data={"breed": "collie", "owner": "Bob"}) # <Dog: Meg> Dog.objects.filter(data__has_keys=["breed", "owner"]) # <QuerySet [<Dog: Meg>]> has_any_keys返回数据顶层的键中有至少1个在给定列表中的对象,比has_keys条件更宽松。Dog.objects.create(name="Rufus", data={"breed": "labrador"}) # <Dog: Rufus> Dog.objects.create(name="Meg", data={"owner": "Bob"}) # <Dog: Meg> Dog.objects.filter(data__has_any_keys=["owner", "breed"]) # <QuerySet [<Dog: Rufus>, <Dog: Meg>]>
2024年07月02日
25 阅读
0 评论
0 点赞
1
2
...
6