github+cloudflare搭建图床并实现加速
前言
当处于小图床容易跑路,云服务商oss储存又不想花钱的尴尬处境上,故想用GitHub作为免费图床托管,cloudflare进行代理加速实现图床搭建。
方案的主要思路是使用 Cloudflare 的 Workers 来代理 github 私有仓库中文件的地址,并绑定自己的域名进行使用。该方案主要优势是:
Github 服务稳定,不会跑路。
使用的是 Github 的私有仓库,存储里的文件列表并不会像公开仓库一样全部对外暴露,有一定的安全性。
使用自己的域名,方便以后可能的服务迁移。
免费:GitHub和Cloudflare都提供免费的基本服务,这意味着你可以使用它们搭建图床而不需要额外的费用。
稳定性和可靠性:GitHub和Cloudflare都是知名的服务提供商,拥有稳定的基础架构和高可用性。GitHub 文件托管服务,在稳定性和可靠性方面表现良好。Cloudflare的CDN服务可以加速图像加载,提高用户体验。
全球分发:通过使用Cloudflare的CDN,你的图片可以在全球范围内快速分发,减少加载时间并提升访问速度。
自定义域名:你可以使用自己的域名来访问图床,这为你的图 ...
smms图床图片导出——Python爬虫
前言
由于最近smms不太稳定,有时候会访问慢、加载慢,故决定迁移图床,但是smms没有提供批量操作的功能,故从开发者文档寻找突破,采用爬虫爬取。
coding
开发者文档,从开发者文档我们拿到了请求头部 headers 、url以及返回的数据,这对于我们编写程序就很容易了。
代码
123456789101112131415161718192021222324252627282930313233import requests# 替换为你的smms图床API Tokenapi_token = "****"# API请求地址api_url = "https://sm.ms/api/v2/upload_history?page=1"# 设置请求头部headers = { "Authorization": f"{api_token}", "Content-Type": "multipart/form-data"}# 发 ...
CMake的一些用法(教程)
CMake
本笔记参照于Youtube博主LearnQtGuide的教程CMake-Episode,源码。
Cmake官方网站
文档
cmake_minimum_required
设置项目最低cmake版本,必须有,官方文档
语法
1cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])
project
用于定义项目的基本信息和属性。官方文档
语法
123456project(<PROJECT-NAME> [<language-name>...])project(<PROJECT-NAME> [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]] [DESCRIPTION <project-description-string>] [HOMEPAGE_URL <url-string>] ...
力扣674.最长连续递增序列
674.最长连续递增序列
力扣题目链接
给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。
示例 1:
1234输入:nums = [1,3,5,4,7]输出:3解释:最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。
示例 2:
123输入:nums = [2,2,2,2,2]输出:1解释:最长连续递增序列是 [2], 长度为1。
提示:
1 <= nums.length <= 10^4
-10^9 <= nums[i] <= 10^9
来源:力扣(LeetCode)
链接:https://leetcode.cn/pro ...
拥抱Windows Terminal-添加右键菜单
Windows Terminal添加右键菜单
添加Terminal到右键菜单将提高开发效率。本教程参考Windows Terminal添加至鼠标右键
步骤
方法一
1.点击图标地址,下载后保存到某路径。
2.新建**.bat文件,执行代码。
12345@echo off reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt" /f /ve /d "Windows Terminal here" reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt" /f /v "Icon" /t REG_EXPAND_SZ /d "%USERPROFILE%\AppData\Local\terminal\terminal.ico" reg.exe add "HKEY_CLASSES_ROOT\Directory\Background\shell\wt\co ...
拥抱Windows Terminal-配置ssh连接替代xshell
Windows Terminal
引言
Windows Terminal设计清爽,正如LearnQt Cmake教程的外国小哥的夸赞“It’s so cool!”
Windows Terminal 是微软推出的一个新一代命令行工具,旨在为用户提供更先进的终端体验。它集成了多个命令行环境,如命令提示符(Command Prompt)、PowerShell、WSL(Windows Subsystem for Linux)等,为开发人员和系统管理员提供更大的灵活性和效率。
1. 多标签和分屏支持: Windows Terminal 支持多个标签页和分屏布局,使用户可以在一个窗口内同时运行多个命令行会话,提高了工作效率。
2. 自定义性强: 用户可以根据自己的偏好自定义外观、配色方案、字体等,使其界面更符合个人审美和工作环境。
3. 支持 Emoji 和图标: Windows Terminal 可以在标签页标题中显示 Emoji 和图标,这不仅可以增加乐趣,还有助于快速识别不同标签页的内容。
4. 支持多种命令行环境: Windows Terminal 集成了多个命令行环境,如传统的命令提 ...
力扣343.整数拆分
343.整数拆分
力扣题目链接
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。
返回 你可以获得的最大乘积 。
示例 1:
123输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。
示例 2:
123输入: n = 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。
提示:
2 <= n <= 58
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/integer-break/description/
思路
方法一:动态规划
dp数组代表iii拆分的最大积,可以把iii拆成jjj和i−ji-ji−j(两个)以及jjj和dp[i−j]dp[i-j]dp[i−j](三个及三个以上)来实现。这里主要记录一种比较容易理解的数学方法,故不作精讲。
方法二:数学
这个方法来自于美版的美版的大佬StefanPochmann:
You’re making it pretty complicated.
If a ...
Windows配置Clash预处理实现ChatGPT设置单独节点
有时我们可能需要单独设置clash的分流规则,比如chatgpt单独使用某节点,这时候可使用此方法。
详细方法
打开setting->Profiles->Parsers->edit:
输入以下代码:
12345678910111213141516171819parsers: # array - url: 订阅链接 yaml: prepend-proxy-groups: # 在proxy-groups最前面增加代理分组 - name: ChatGPT type: select proxies: - 节点 - 美国 02 | 专线 - 美国 03 | 专线 - 美国 04 | 专线 - 日本 01 | 专线 - 日本 02 | 专线 prepend-rules: # 在rules最前面增加规则 - DOMAIN-SUFFIX,openai. ...
《Modern C++ Tutorial》尾返回类型推导笔记
《Modern C++ Tutorial》读书笔记
在线阅读:https://changkun.de/modern-cpp/zh-cn/00-preface/
《Modern C++ Tutorial》:https://changkun.de/modern-cpp
GitHub仓库:https://github.com/changkun/modern-cpp-tutorial
欧长坤:https://github.com/changkun
第二章 语言可用性的强化
尾返回类型推导
你可能会思考,在介绍 auto 时,我们已经提过 auto 不能用于函数形参进行类型推导,那么 auto 能不能用于推导函数的返回类型呢?还是考虑一个加法函数的例子,在传统 C++ 中我们必须这么写:
1234template<typename R, typename T, typename U>R add(T x, U y) { return x+y;}
注意:typename 和 class 在模板参数列表中没有区别,在 typename 这个关键字出现之前, ...
现代C++
C++的不断发展
1C++已经有了长久的历史并且正在不断的发展,为了学习C++新特性我找到了
欧长坤所著的《Modern C++ Tutorial》:
1在线阅读:
https://changkun.de/modern-cpp/zh-cn/00-preface/
1《Modern C++ Tutorial》:
https://changkun.de/modern-cpp
1GitHub仓库:
https://github.com/changkun/modern-cpp-tutorial
1欧长坤:
https://github.com/changkun
813电磁场与波
第1章 矢量分析
1.1 矢量代数
1.1.1 标量和矢量
数学上,任一代数量aaa都可称为标量。在物理学中,任一代数量一旦被赋
予“物理单位”,则称为一个具有物理意义的标量,即所谓的物理量,如电压uuu电
荷量QQQ、质量mmm能量www等都是标量。
一般的三维空间内某一点 PPP处存在的一个既有大小又有方向特性的量称为
矢量。
单位矢量:模为1的矢量称为单位矢量。eAe_AeA表示与矢量AAA同方向的单位矢量,显然:
eA=AA\begin{aligned}
e_A=\frac{\mathbf{A}}{A}
\end{aligned}
eA=AA
常矢量:大小和方向均不变的矢量。 单位矢量不一定是常矢量。
1.1.2 矢量的加法和减法
平行四边形法则:
运算法则:
交换律:A+B=B+AA+B=B+AA+B=B+A
结合律:(A+B)+C=A+(B+C)(A+B)+C=A+(\begin{array}{c}B+C\\\end{array})(A+B)+C=A+(B+C)
1.1.3 矢量的乘法
标量和矢量: ...
Linux配置Clash
Linux配置Clash
下载安装
确定自己的架构下载正确的版本
lscpu
下载地址,下载目录中打开终端。
解压
gunzip clash*.gz
修改权限以及移动目录
123sudo chmod +x clash*sudo mv clash* clashsudo mv clash /usr/local/bin/
配置
准备config.yaml
打开windows Clash选择Show in folder复制配置文件*.yml到某一目录并修改后缀名为config.yaml
修改该配置文件添加管理密码secret: '12345678'
准备Country.mmdb
主页找到home目录:
保存Country.mmdb
将其一起传送到Linux上。
初始化
执行命令查看是否安装正确
1clash --help
执行命令
1clash
将上述准备的Country.mmdb以及config.yaml移动到~/.config/clash
重新开启clash
配置系统设置
设置->网络->网络代理->手动代理
浏览器打开控制台地址:
h ...
力扣151.反转字符串中的单词
151.反转字符串中的单词
1234```[力扣题目链接](https://leetcode.cn/problems/reverse-words-in-a-string/)
给你一个字符串 s ,请你反转字符串中 单词 的顺序。单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
12
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
12
示例 1:
12
输入:s = “the sky is blue”
输出:“blue is sky the”
1
示例 2:
12
输入:s = " hello world "
输出:“world hello”
解释:反转后的字符串中不能存在前导空格和尾随空格。
1
示例 3:
12
输入:s = “a good example”
输出:“example good a”
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。 ...
力扣338.赎金信
338.赎金信
力扣题目链接
给你两个字符串:ransomNote 和 magazine,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
12输入:ransomNote = "a", magazine = "b"输出:false
示例 2:
12输入:ransomNote = "aa", magazine = "ab"输出:false
示例 3:
12输入:ransomNote = "aa", magazine = "aab"输出:true
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote 和 magazine 由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ransom-note
思路
统计magazine中的字母次数,再用ranso ...
力扣19.删除链表的倒数第N个节点
19.删除链表的倒数第N个节点
力扣题目链接
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
12输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]
示例 2:
12输入:head = [1], n = 1输出:[]
示例 3:
12输入:head = [1,2], n = 1输出:[1]
提示:
链表中结点的数目为 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list
思路
可以通过遍历计算链表长度得到LLL然后第二次找到L−n+1L-n+1L−n+1进行删除,也可以通过双指针的方法使快指针领先慢指针nnn,当快指针位于链表尾部时慢指针即处于要删除的节点,还可以通过栈(先进后出)来取得倒数nnn个节点。这里提供一种递归的方法,类似于栈进行处 ...
力扣24.两两交换链表中的节点
24.两两交换链表中的节点
力扣题目链接
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例1:
12输入:head = [1,2,3,4]输出:[2,1,4,3]
示例 2:
12输入:head = []输出:[]
示例 3:
12输入:head = [1]输出:[1]
提示:
链表中节点的数目在范围 [0, 100]内
0 <= Node.val <= 100
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/swap-nodes-in-pairs
思路
保存要交换的上一个节点(第一个),当前节点(第二个)以及下一个节点,下一个是否为空作为判断条件,进行两个节点交换,并判断是否处于头节点,根据奇数和偶数节点的不同采用不同的方式在对next节点进行赋值。
实现代码
123456789101112131415161718192021222324252627282930313233 ...



















