阅读视图
RSS阅读器安利:Fluent Reader
前言
由于之前在网上搜寻到RSS订阅工具都差强人意,今天闲来无事,偶然发现了一款颜值非常高的开源免费RSS订阅器:Fluent Reader , 于是便想写一篇文章安利下
如果想要使用,微软商店直接搜索下载即可,也可以前往 GitHub 上下载,此仓库包含了APP端软件包
至于更多RSS订阅源可跳转相关链接处
RSS 介绍
RSS(Really Simple Syndication,真正简单的分发)是一种用于发布和订阅网站内容的数据格式和协议。它通过简单的 XML 格式来传递网站的文章、新闻、博客等信息,允许用户通过订阅器(RSSReader)获取网站内容的最新更新,而无需直接访问网站。
RSS 最早出现在 1999 年,由 Netscape 公司创立。随后,RSS 标准逐渐发展,演变为不同的版本和格式。常见的 RSS 版本包括 RSS 0.9x、RSS 1.0、RSS 2.0 和 Atom 等。
RSS 的工作原理如下:
- 网站创建并维护 RSS 文件:网站管理员会将网站的文章、新闻、博客等内容整理成 XML 格式的 RSS 文件,并将其发布在网站的特定位置,通常是一个预定义的 RSS Feed URL。
- 用户使用订阅器订阅 RSS Feed:用户可以使用 RSS 订阅器(也称为 RSS Reader 或 Feed Reader)来订阅感兴趣的网站的 RSS Feed。订阅器会定期检查订阅的 RSSFeed,以获取其中的更新。
- 订阅器获取更新:当订阅的网站有新的文章或内容发布时,RSS Feed 文件会被更新。订阅器会检测到这些更新,并将最新的内容显示在用户的订阅列表中。
RSS 的优点包括:
- 方便获取信息:用户可以一站式地收集和查看多个网站的内容更新,无需频繁访问每个网站。
- 自动化更新:订阅器会定期检查更新,用户不需要手动去查看是否有新的内容发布。
- 隐私保护:RSS 订阅不需要提供个人信息,保护用户的隐私。
随着社交媒体和其他内容分发平台的兴起,RSS 的使用逐渐减少。然而,RSS 仍然被许多网站和博客用于提供内容更新,并且一些专门的订阅器应用程序仍然广泛使用,满足了一部分用户对于个性化内容订阅的需求。
软件截图




相关链接
GitHub地址:Fluent Reader
RSS入门指南:高效获取信息,你需要这份 RSS 入门指南 - 少数派 (sspai.com)
使用体验:Windows平台最美RSS阅读器-Fluent Reader上手体验 - 知乎 (zhihu.com)
友情提醒:卸载软件时,记得导出相关订阅源进行备份
推荐一个开源的多线程下载器 — Motrix
关于我用4块钱薅了马斯克130个生成视频的羊毛这件事
主流JavaScript库Axios被投毒 NPM你怎么又出事了?
记一次高速开车险些熄火的经历
Zed 编辑器 — 可以平替VSCode并支持AICoding的编辑器
Github将使用用户数据来训练AI大模型
网站被挂木马了?我进行了分析
Motrix 一款开源且可以平替迅雷的下载器
开源、免费、好用的密码记录工具:倦意密码本 JyPassword 插件版 发布!
自然风景Win10主题安装包 v1.2
2023年终总结
2024
又到了写年终总结的时候了。
每天一记的日记我肯定坚持不下去,但是每年一次的年终总结,我应该能坚持下。
万卷古今消永日,一窗昏晓送流年
在万卷书中消磨自己整日时光,南窗下让自己生命的河流静静地流过。
这首诗句是陆游写的,用来感叹读书对时间的消磨以及对内心的充实。
非常贴合2023年我的校园生活(并不是指读了许多书,hh)
2023年,应该算是大学中最稳定的一年了,也是最充实的一年。
没有初入校园的懵懂,也没有大三后期对人生该驶向何处的迷茫。
我可以拥有一定的时间去探索感兴趣的方向,也可以选择去一些风景名地来开阔自己的内心。
青春没有售价,一切皆在脚下
生活
其实今年并没有去了很多地方,因为实在做不到真正的穷游,哈哈。
唯一的一次远门,也就是做了两小时高铁的南京,体验了下疫情解封后的疯狂。
也就是上面这篇文章里描述的那样,其他时候基本都是在当地以及附近玩玩了。
除了这个外,就是基本的三点一线了,偶尔出去下趟馆子,也就是下面这篇文章所述
没办法,今年发生的能够谈谈的基本都被写出来了,我也没法用来凑字数了。
博客
如今,一到年底,各大APP都会争先推送各种总结报告,既然如此,我也给博客写一份年总报告吧。
在2023年这一年中,小E的小窝一共更新了 27篇文章,其中大部分都是技术文章。
相比文章,碎碎念 达到了惊人的 38条 ,平均每个月吐槽3次。果然,吐槽是人的本质。
不过好在文章数和碎碎念数量一样,说明我更新的也是挺频繁的。
除此之外,访客量达到了 349771,点击量则是 761959,emm,除去友链经常互访的小伙伴们,数据还是不错的,哈哈。
其实一开始也没想到会有这么多人访问,毕竟只是一个私人博客,也没啥营养东西。不过友链和B站教程视频倒是引流了不少,也算是一个不错的礼物——送给自己的博客。
因为博客是一时兴起搭建的,许多地方设置的不是很合理。
一开始我是打算用来记录生活和学习笔记等文章,确实做到了这一步。不过因为各种文章都发布在这一个博客中,导致比较杂乱。因此,我打算后面将学习记录以及教程文章全部搬迁到其他地方,而这个博客单纯当作一个记录和吐槽生活的地方。至于什么时候,应该得明年吧(确实是明年,hh)。
抉择
下面就是最重要的地方了。
每次写年终总结时都会觉得时间过得飞快,现在也一样。
刚搭建博客时候是大一暑假,现在已经到了大三寒假了。工作 or 考研是一个不得不面对的问题。这也是一个使人成长的问题。
友链里面的朋友们已经都开始实习了,而我现在却一点准备也没有,除了一个破简历,总结了大学所学的所有知识。
不过现如今,我的学历已经不够看了,因此,我选择了考研。当然,考研也是面向工作。
至于考公,一直从未出现在我的选择里。因为我也有一个年薪百万的IT梦,哈哈,开个玩笑。
今年考公的人数也在增加,恰巧是考研减少的人数。考公的难度和考研的难度,对我来说,应该是一样的,都很难。
既如此,不如先考研,如果运气好,考上了,到时候再考虑是考公或者工作。如果考不上,那么我估计会二战。如果运气好点,能够找到一个凑活的工作,那么便是边工作边二战了。
既然做了选择,下面就该努努力了。博客也该放一放了,毕竟没啥文章能写。有可能下一篇文章就是2024年的年终总结了,哈哈。希望一战上岸吧(虽然上岸后还有无数个岸)
Git命令汇总
前言
单纯的对一些经常用的 git 命令进行总结,方便以后查询使用,没啥营养
1. 基础
git add # 提交到 暂存区
git commit -m "commnet" # 提交到 版本库
git branch -M main # 重新命名分支
git remote add origin # 添加远程仓库
git pull origin master # 从名为 origin 的远程仓库的 master 分支拉取最新的提交,并将其合并到当前分支
git push origin main # 将本地仓库的文件push到远程仓库(若 push 不成功,可加 -f 进行强推操作)
git diff read.txt # 查看文件变化2. 版本回退
git reset --hard HEAD^ # 恢复到上一个版本
git reset --hard HEAD~10 # 恢复到网上10个版本
git reset --hard commitID # 恢复到指定commit版本3. 撤销修改
git restore # 工作区
git restore --staged # 暂存区,工作区需要执行上一步 add
git reset --hard HEAD^ # 工作区、暂存区、本地仓库都回退 commit4. 删除文件
rm file
git add file
git commit -m ""5. 分支操作
git branch test # 创建分支 test
git branch # 查看当前分支
git switch -c test # 创建test分支,然后切换到test分支 git branch test git checkout test
git switch master # 切换
git merge test # 合并指定分支到当前分支
git merge --no-ff -m "no-ff" test # 禁用快进(fast-forward)合并,强制创建一个新的合并提交
git branch -d test # 删除分支
git branch -D test # 强制删除
git log --graph # 查看分支合并图6. 保存和恢复
git stash save "Your stash message" # 保存工作进度
git stash list # 查看 stash 列表
git stash apply [] # 应用
git stash drop [] # 删除
git stash pop [] # 应用并删除
git cherry-pick # 将一个或多个提交从一个分支应用到另一个分支7. 多人协作
git remote -v # 查看远程库的信息
git switch -c dev origin/dev # 本地创建一个新分支 dev,并将其设置为跟踪远程仓origin/dev 分支
git branch -u origin/dev dev # 本地分支 dev 设置为跟踪远程仓库的 origin/dev 分支
git push origin master # 将本地仓库文件push到远程(若push不成功,可加-f进行强推)
git pull origin master # 从远程仓库origin的master分支拉取最新提交,并将其合并到当前分支
git rebase # 把本地未push的分叉提交历史整理成直线8. 标签
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
git tag v1.0 # 打一个新标签V1.0,默认是打在最新提交的commit上
git log --pretty=oneline --abbrev-commit # 每一行包含了一个提交的简略哈希和提交信息
git tag v0.9 f52c633 # 在特点commit上打标签
git tag -a v0.1 -m "v0.1 released" 1094adb # 创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag # 查看所有标签
git show v0.9 # 查看标签信息,标签不是按时间顺序列出,而是按字母排序
git tag -d v0.1 # 删除标签
git push origin v1.0 # 推送标签到远程
git push origin --tags # 一次性推送全部尚未推送到远程的本地标签
git push origin -d tag tagName # 删除一个远程标签
git ls-remote --tags origin # 查看删除远程tags执行效果 讯飞免费星火大模型部署教程
前言
发现两个多月没写文章了,不过考试月也没啥好写的。
最近大模型这么火,正好有个项目用到,于是便水一篇教程吧。
此篇教程为 科大讯飞的星火大模型 部署教程,部署完成后即可与智能助手进行聊天。
这里是关于部署到服务器端,如果有其他需求可以查看官方文档。
大模型简介
大语言模型 (英语:large language model,LLM) 是一种语言模型,由具有许多参数(通常数十亿个权重或更多)的人工神经网络组成,使用自监督学习或半监督学习对大量未标记文本进行训练[[1]](https://zh.wikipedia.org/wiki/大型语言模型#cite\_note-1)。
大型语言模型在2018年左右出现,并在各种任务中表现出色[[2]](https://zh.wikipedia.org/wiki/大型语言模型#cite\_note-Manning-2022-2)。
尽管这个术语没有正式的定义,但它通常指的是参数数量在数十亿或更多数量级的深度学习模型[[3]](https://zh.wikipedia.org/wiki/大型语言模型#cite\_note-extracting-3)。
大型语言模型是通用的模型,在广泛的任务中表现出色,而不是针对一项特定任务(例如情感分析、命名实体识别或数学推理)进行训练[[2]](https://zh.wikipedia.org/wiki/大型语言模型#cite\_note-Manning-2022-2)。
尽管在预测句子中的下一个单词等简单任务上接受过训练,但发现具有足够训练和参数计数的神经语言模型可以捕获人类语言的大部分句法和语义。
此外大型语言模型展示了相当多的关于世界的常识,并且能够在训练期间“记住”大量事实[[2]](https://zh.wikipedia.org/wiki/大型语言模型#cite\_note-Manning-2022-2)。
参考资料:llm - 搜索 (wikipedia.org)
部署
API领取
首先前往科大讯飞的星火大模型官网 讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞 (xfyun.cn)
进行注册,然后领取大模型的API
这里选择 API免费试用 ,然后进入如下页面
选择第一个 个人免费包免费试用 。等到领取成功后,后台会有如下界面
这里的 APPID 、APISecret 、APIKey 就是接口信息,后面会用到。
Linux SDK 下载
进入上面页面后,点击 Linux SDK 右边的下载按钮。将会下载SDK包,感兴趣的也可以点击文档查看使用教程
下载完成后传到服务器,使用解压命令解压包
unzip Spark3.0\_Linux\_SDK\_v1.1.zip然后进入解压出来的包 Spark3.0\_Linux\_SDK\_v1.1 , 里面应该包含如下文件
root@echofree:/opt# cd Spark3.0\_Linux\_SDK\_v1.1/
root@echofree:/opt/Spark3.0\_Linux\_SDK\_v1.1# ls
build include lib src动态库配置
进入 lib 目录,里面会有一个相关的调用库
root@echofree:/opt/Spark3.0\_Linux\_SDK\_v1.1# cd lib/
root@echofree:/opt/Spark3.0\_Linux\_SDK\_v1.1/lib# ls
libSparkChain.so这里为了方便点,直接采用暴力方法,将库文件 libSparkChain.so 复制到 /usr/lib 下
cp libSparkChain.so /usr/libAPI接口配置
进入 src 目录,会有一个 demo.cpp 文件,进入此文件,修改如下信息
int initSDK()
{
// 全局初始化
SparkChainConfig \*config = SparkChainConfig::builder();
config->appID("appID") // 你的appid
->apiKey("apiKey") // 你的apikey
->apiSecret("apiSecret"); // 你的apisecret
// ->logLevel(0)
// ->logPath("./aikit.log");
int ret = SparkChain::init(config);
printf(RED "\ninit SparkChain result:%d" RESET,ret);
return ret;
}将这里的 三个API配置信息改为自己的即可。
demo测试
配置完成后就要测试连接了,使用 GNU 编译套件进行编译,命令如下
g++ -Iinclude src/demo.cpp -o demo -lSparkChain -lstdc++ -lpthread如果你会 Makefile 的话,也可以复制下面的进行编译
CC = g++
CFLAGS = -Iinclude
LIBS = -lSparkChain -lstdc++ -lpthread
SRC = src/server.cpp
OUTPUT = demo
all: $(OUTPUT)
$(OUTPUT): $(SRC)
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
clean:
rm -f $(OUTPUT)如果一切正常,文件夹下会生成一个可执行文件 demo
root@echofree:/opt/Spark3.0\_Linux\_SDK\_v1.1# ls
build demo files include lib src运行看看
root@echofree:/opt/Spark3.0\_Linux\_SDK\_v1.1# ./demo
######### llm Demo #########
init SparkChain result:0
######### 同步调用 #########
syncOutput: assistant:Hello
syncOutput: assistant:こんにちは
######### 异步调用 #########
0:assistant:Hello:myContext
2:assistant::myContext
tokens:1 + 5 = 6
0:assistant:こ:myContext
1:assistant:んに:myContext
1:assistant:ちは (:myContext
1:assistant:Konnichi:myContext
2:assistant:wa):myContext
tokens:12 + 10 = 22很好,配置完成!
加点互动
下面就要给他加互动功能了,毕竟大模型不能进行交互聊天,那还要他做什么
修改 demo.cpp 文件,内容如下
记得修改下 API信息哦
#include "../include/sparkchain.h"
#include
#include
#include
#include
#include
#define GREEN "\033[32m"
#define YELLOW "\033[33m"
#define RED "\033[31m"
#define RESET "\033[0m"
using namespace SparkChain;
using namespace std;
// async status tag
static atomic\_bool finish(false);
// result cache
string final\_result = "";
class SparkCallbacks : public LLMCallbacks
{
void onLLMResult(LLMResult \*result, void \*usrContext)
{
int status = result->getStatus();
printf(GREEN "%d:%s:%s:%s \n" RESET, status, result->getRole(), result->getContent(), usrContext);
final\_result += string(result->getContent());
if (status == 2)
{
printf(GREEN "tokens:%d + %d = %d\n" RESET, result->getCompletionTokens(), result->getPromptTokens(), result->getTotalTokens());
finish = true;
}
}
void onLLMEvent(LLMEvent \*event, void \*usrContext)
{
printf(YELLOW "onLLMEventCB\n eventID:%d eventMsg:%s\n" RESET, event->getEventID(), event->getEventMsg());
}
void onLLMError(LLMError \*error, void \*usrContext)
{
printf(RED "onLLMErrorCB\n errCode:%d errMsg:%s \n" RESET, error->getErrCode(), error->getErrMsg());
finish = true;
}
};
int initSDK()
{
// 全局初始化
SparkChainConfig \*config = SparkChainConfig::builder();
config->appID("appID") // 你的appid
->apiKey("apiKey") // 你的apikey
->apiSecret("apiSecret"); // 你的apisecret
// ->logLevel(0)
// ->logPath("./aikit.log");
int ret = SparkChain::init(config);
printf(RED "\ninit SparkChain result:%d" RESET,ret);
return ret;
}
void syncLLMTest()
{
cout << "\n######### 同步调用 #########" << endl;
// 配置大模型参数
LLMConfig \*llmConfig = LLMConfig::builder();
llmConfig->domain("generalv3");
llmConfig->url("ws(s)://spark-api.xf-yun.com/v3.1/chat");
Memory\* window\_memory = Memory::WindowMemory(5);
LLM \*syncllm = LLM::create(llmConfig, window\_memory);
// Memory\* token\_memory = Memory::TokenMemory(500);
// LLM \*syncllm = LLM::create(llmConfig,token\_memory);
int i = 0;
//const char\* input = "";
while (1)
{
char input[256]; // 定义一个足够大的字符数组来接收用户输入
printf("请输入问题 (输入 'q' 退出):");
scanf("%s", input);
if (strcmp(input, "q") == 0) {
break; // 如果输入是 'q',则退出循环
}
// 同步请求
LLMSyncOutput \*result = syncllm->run(input);
if (result->getErrCode() != 0)
{
printf(RED "\nsyncOutput: %d:%s\n\n" RESET, result->getErrCode(), result->getErrMsg());
continue;
}
else
{
printf(GREEN "\nsyncOutput: %s:%s\n" RESET, result->getRole(), result->getContent());
}
}
// 垃圾回收
if (syncllm != nullptr)
{
LLM::destroy(syncllm);
}
}
void uninitSDK()
{
// 全局逆初始化
SparkChain::unInit();
}
int main(int argc, char const \*argv[])
{
cout << "\n######### llm Demo #########" << endl;
// 全局初始化
int ret = initSDK();
if (ret != 0)
{
cout << "initSDK failed:" << ret << endl;
return -1;
}
syncLLMTest(); // 同步调用
// 退出
uninitSDK();
return 0;
}如果你仔细观察,会发现少了一部分代码。
星火大模型的接口调用给了两种方式,一种是同步,一种是异步
这里我用的是同步,所有文字都输出完,才会打印在终端。
正常的大模型,应该都是异步调用,即慢慢打印出来,这里留给读者自己修改了。
下面看下运行效果
root@echofree:/opt/Spark3.0\_Linux\_SDK\_v1.1# ./demo
######### llm Demo #########
init SparkChain result:0
######### 同步调用 #########
请输入问题 (输入 'q' 退出):徐州天气怎么样
syncOutput: assistant:今天徐州市的天气是多云,气温在3℃到11℃之间,有点冷。东风4-5级,湿度为53%。空气质量良好,PM2.5指数为60。在这样的天气条件下,适宜旅游、钓鱼和户外运动,但要注意保暖。同时,感冒较易发生,请注意保持干净整洁的环境和清新流通的空气。
请输入问题 (输入 'q' 退出):你是什么
syncOutput: assistant:您好,我是科大讯飞研发的认知智能大模型,我的名字叫讯飞星火认知大模型。我可以和人类进行自然交流,解答问题,高效完成各领域认知智能需求。
请输入问题 (输入 'q' 退出):q
root@echofree:/opt/Spark3.0\_Linux\_SDK\_v1.1#效果还是不错的。
整点花活
既然一切都配置ok了,那肯定得进行应用开发了,这里来个小demo
这里是使用 Qt 开发的一个非常质朴的聊天界面,也就是开头所说的项目中正好用到大模型的地方。由于时间紧张,技术能力有限,就直接搬上去了。
具体原理就是使用 Linux的 socket 和 多线程 与界面进行通信。服务器端负责接收客户端的信息并进行回复。
后续
由于技术有限,并且考试月繁忙,等到有空闲时间了,再写个单独的交互界面。
九月
九月小记
糊弄着,糊弄着,开学已经一个月了。
看着还差两条数量就要追上文章数的 碎碎念 ,我觉得不能摆烂下去了。
不过写文章是真的费时间,除非是学习笔记,直接上传发布,可惜最近没啥笔记,就算有,也没有啥价值。emm,文章也没啥价值,不过最起码以后还能看看,回忆下(如果博客继续存在下去)。
所以,我做了一个......的决定,水篇文章,hh
大三
虽然现在已经大三了,但是还是像打车一样,在生活的旅途中,找不到自己的定位。
开学时踌躇满志,想要好好拼搏下,可惜药效不够,过几天就原形毕现了,实在是不知道做什么。不是事情太少,无事可做,而是事情一大堆,找不清主线了。就像打剧情游戏一样,一堆游戏线路需要去做。不过游戏还好,最起码给你标了主线,给了指引和线索。
好在没过几天,全国计算机等级考试来了,索性报了个三级。明知就业没啥用,但还是报了。还记得之前学院开会,统计二级证书人数,结果寥寥无几,于是便让我们去报名考试。
网上搜寻一番,发现都说网络技术简单,便火速下单了未来教育的习题。之前的二级考试,因为太过简单,直接白嫖学姐用过的。这次好歹是三级,打算认真刷题,好好准备。可惜看了一下,发现基本都是背诵的知识,唯一需要计算的就是ip地址内容了。
这下好了,又没有事情做了,emm,于是买了本《C++ Prime Plus》看看。之前买的《深入理解计算机系统》由于二进制内容对我来说太过枯燥,便舍弃了一会。
于是整个9月都在游戏和书籍中度过。对了,还有实验课。
数电的实验课,线子越插越多,脑子转速越来越慢。好在勉强还能做出来,然后就是万恶的实验报告了。
而且数电老师讲课速度是真的快,短短一个月就讲了一半内容,我是真的赶不上了,还是等考试前突击吧。
实验课下课拍的学长(也可能是学姐)。
除此之外,在连烧了两块开发板后,再次忍痛买了两个ESP32,也终于调库成功,连上了阿里云的物联网平台
把子肉
疫情过去了,两年没走过的南门也正常开放了。于是下午课上完,便和室友走一公里路,去旁边的万达广场吃把子肉,还有隆江猪脚饭~
虽然这个图片里没有猪脚,也没有把子肉。
从室友那偷的学校晚霞图,当时正好下课,准备出去吃一顿,然后走回学校,也是很惬意的。毕竟人生偷得几时闲。
三级考试
在考试的前一晚,学校在操场举行了迎新晚会,哈哈,没办法,太穷了,555
人倒是挺多的,他们拍表演,我只能拍个手机。
第二天考试,梦回我多年未见的母校
之间还有个小插曲。由于学校不开设考试点(狠狠表扬了),于是只能报名矿大了~
矿大,嗯,很大,哈哈。有山有水有树林,风景很美,可惜没吃到矿大的饭。还记得上次蓝桥杯也是在这考的,当时做了好长时间,可惜没出好成绩,考完心情也不咋地。这次三级就不一样了,果然如预料的一样,非常简单,考试前一星期背背题就行了。
也不知道下次四级报不报。想报软考,可惜11月就考了,时间来不及了。至于教资考试,已经过去了,而且也从来没想过。
考完试的晚上,也就是昨晚,顺便买了杯茶百道犒劳下自己(虽然没动啥脑子)
一个小彩蛋。才发现茶百道的包装纸有学校的曲艺团标志,哈哈。突然想起了之前友链里看过的一篇文章,有关奶茶的,在这推荐下:[饮者杂记(Ⅰ) - 庭院一角
(harrypan.cn)](https://www.harrypan.cn/index.php/archives/328/)虽然作为店员的我自然要满足顾客的需求,然而我内心中则是十分认同清玉的那个搞怪广告:“调你妈,黄金比例最好喝!” 都买奶茶了,还要想东想西,瞻前顾后,连片刻的休憩都要充满对身材和健康的焦虑。 ———— 此文摘抄
秋招
离毕业也快了,看了下牛客秋招,发现是诸神之战,hc越来越少,简历越来越多。
连全国城镇调查失业率都暂停发布了,233,还能咋办呢,对吧
国家统计局:8月起,全国青年人等分年龄段的城镇调查失业率将暂停发布*新闻频道*央视网(cctv.com)
这里又想推荐一篇友链的相关文章了:对当下高等教育的一点思考 – Abin的个人博客-爱上小树枝 (xiaoshuzhi.love)
至于考研,只能说缓解就业了,而且还不一定能考上。在这学历贬值的时代,考研的人数已经到达了450万了。
当然了,还有考公,也是千军万马,不容易。
不过也不能这么悲观,还是得发现生活的美好的一面。
外设篇01:那些年用过的键盘
前言
转眼已经大三了,也买了四个键盘,谁让我喜欢电子产品呢。除此之外,天天敲代码,对键盘使用度极高。
换句话说,键盘已经替代了高中的黑笔,成为了我新的实现理想的工具。于是趁着开学之际,便想写篇文章介绍下用过的几种键盘。
1. 达尔优EK815

高中毕业的暑假,对于电脑以及外设还处于一问三不知的状态,在知乎搜了几篇文章,只知道买这些东西走京东自营店比较好,于是便下载了京东(京东快打钱)。
当时在京东的键盘销售榜上,这个键盘,也就是 达尔优EK815机械合金版,好像排在了第一名,而且价格也挺便宜的,149
元,有着可调的RGB灯光,还是机械的,对那时候没有接触过键盘的我来说,十分具有吸引力,于是光速下单买了蓝白色。
与此同时,也买了第一个steam游戏,战地5,整个暑假都在这个游戏中度过。虽然每次都被打成薯条,但也不亦乐乎。
还有一点是,用这个键盘的人太多了,高中同学就有几个撞了。
2. 黑峡谷X3Pro


到了大一暑假,经历一个学年的洗礼,对键盘的知识也增加了不少,于是开始寻找更高配置的键盘。
因为第一个键盘是有线的,有时候使用起来极其不方便,这次便想买个三模的。经过多次搜寻,最终目光落在了两款键盘上:RK98 和 黑峡谷X3Pro。到了最后还是买了黑峡谷的黑森林慕斯色。
没办法,黑白色对我的吸引力还是很大的,还送了个掌托(虽然从来没用过)。选定的轴体为流沙金,价格389,还是很贵的,不过体验感完虐之前的达尔优,果然是一分钱一分货。后来又发现隔壁宿舍两个和我一样的,哈哈,这个键盘销量也挺高的。
不过很气人的是,今年暑假直接降价了100,虽然电子产品是理财产品,但还是很离谱。
3. 华为蓝牙键盘

这款小键盘则是从舍友那收过来的,因为有时候需要便携操作,正好有个平板,缺个小键盘,于是打个折,花费了 111.11 大洋买了下来。
虽然想法很不错,不过用的时间几乎可以不计,一般当个备用键盘或者静音键盘使用。
4. Cherry KC1000

55元 极致性价比,一款非常经典的薄膜键盘。因为之前的黑峡谷声音有点大,所以开学就买了这个,切换着用。
使用手感和学校机房的已经沾满油的薄膜键盘基本一样,声音很小,不过如果快速敲代码声音还是有点大的。
相比于这个,我还是更喜欢没有小数字的87键,打字速度更快,但也失去了双人4399的快乐~
总结
总的来说,黑峡谷的X3Pro是我用的最舒服的一个。
Cherry的薄膜键盘由于刚到,还没有捂热,而且87键机械键盘用惯了,导致手感不是很好。
华为的蓝牙键盘比较小巧,适合平板办公。
至于达尔优那款,如果经费有限,又想体验RGB+机械轴,那么可以一试。
Argon主题博客美化
关于新建页面、菜单图标等操作请跳转目录到教程视频~
搭建博客遇到的99.9%问题已经在文档、相关视频以及评论区中给出,一定要认真看文档及视频讲解,不会可以翻评论区
前言
很开心这篇美化文章能够帮助到大家,如果转载请标注原文地址哦,十分感谢!
常言道:工欲善其事必先利其器,在发表文章前,美化博客,使其利于自己的观看与管理极其重要,所以我四处搜寻,得到了以下美化代码。
但是,有时候我们走得太远,会忘了为什么出发。希望阅览本文章的人不要忘记初心,想想一开始为什么搭建博客。我相信大部分朋友都是为了记录自己学习笔记,生活故事。
所以,有时候博客美化过度会适得其反,望各位仔细斟酌,莫要使自己的博客变成了花架子,好的文章才是博客之本,立足之根。
主题资源
链接:https://pan.baidu.com/s/1yyA-m_h_wku7n3qzK-eYEQ?pwd=echo
提取码:echo

1. 我的博客美化 JSON
注意:可复制一键导入
别忘记在主题设置页面修改头像、背景以及底部信息等设置哦(博客背景url已失效,需自己填写)
建议主题设置全局里 CDN 选择不使用或更换为自己的,否则可能出现CSS样式失效
{"argon_theme_color":"#5e72e4","argon_theme_color_hex_preview":"#5e72e4","argon_show_customize_theme_color_picker":true,"argon_enable_immersion_color":"true","argon_darkmode_autoswitch":"time","argon_enable_amoled_dark":"false","argon_card_radius":"15","argon_card_shadow":"default","argon_page_layout":"double","argon_article_list_waterflow":"2","argon_article_list_layout":"1","argon_font":"serif","argon_assets_path":"jsdelivr_fastly","argon_custom_assets_path":"","argon_wp_path":"/","argon_dateformat":"YMD","argon_enable_headroom":"true","argon_toolbar_title":"Echo","argon_toolbar_icon":"","argon_toolbar_icon_link":" ","argon_toolbar_blur":"true","argon_banner_title":"Echo‘s blog","argon_banner_subtitle":"Banner 副标题","argon_banner_size":"fullscreen","argon_page_background_banner_style":"transparent","argon_show_toolbar_mask":true,"argon_banner_background_url":"--bing--","argon_banner_background_color_type":"shape-primary","argon_banner_background_hide_shapes":true,"argon_enable_banner_title_typing_effect":"true","argon_banner_typing_effect_interval":"100","argon_page_background_url":"https://yy.liveout.cn/background/wallhaven-yxjm57_1920x1080.png","argon_page_background_dark_url":"https://yy.liveout.cn/background/wallhaven-6dqjdl_1920x1080.png","argon_page_background_opacity":"1","argon_sidebar_banner_title":"左侧栏标题","argon_sidebar_banner_subtitle":"左侧栏子标题(格言)","argon_sidebar_auther_name":"Echo","argon_sidebar_auther_image":"https://yy.liveout.cn/photo/photo1.png","argon_sidebar_author_description":"左侧栏作者简介","argon_sidebar_announcement":"","argon_fab_show_settings_button":"false","argon_fab_show_darkmode_button":"true","argon_fab_show_gotocomment_button":"false","argon_seo_description":"网站描述 (Description Meta 标签)","argon_seo_keywords":"搜索引擎关键词(Keywords Meta 标签)","argon_article_meta":"time|categories|views","argon_show_readingtime":"true","argon_reading_speed":"580","argon_reading_speed_en":"80","argon_reading_speed_code":"10","argon_show_thumbnail_in_banner_in_content_page":"false","argon_first_image_as_thumbnail_by_default":"true","argon_reference_list_title":"参考","argon_show_sharebtn":"true","argon_show_headindex_number":"false","argon_donate_qrcode_url":"https://www.liveout.cn/wp-content/uploads/2022/10/wechat1.jpg","argon_additional_content_after_post":"文末附加内容","argon_related_post":"category,tag","argon_related_post_sort_orderby":"meta_value_num","argon_related_post_sort_order":"DESC","argon_related_post_limit":"10","argon_article_header_style":"article-header-style-2","argon_outdated_info_time_type":"createdtime","argon_outdated_info_days":"1","argon_outdated_info_tip_type":"inpost","argon_outdated_info_tip_content":"本文最后更新于%modify_date_delta% 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com","argon_archives_timeline_show_month":"true","argon_archives_timeline_url":"https://www.liveout.cn/pigeonhole/","argon_footer_html":"<style>\n/* 核心样式 */\n.github-badge {\ndisplay: inline-block;\nborder-radius: 4px;\ntext-shadow: none;\nfont-size: 13.1px;\ncolor: #fff;\nline-height: 15px;\nmargin-bottom: 5px;\nfont-family: \"Open Sans\", sans-serif;\n}\n.github-badge .badge-subject {\ndisplay: inline-block;\nbackground-color: #4d4d4d;\npadding: 4px 4px 4px 6px;\nborder-top-left-radius: 4px;\nborder-bottom-left-radius: 4px;\nfont-family: \"Open Sans\", sans-serif;\n}\n.github-badge .badge-value {\ndisplay: inline-block;\npadding: 4px 6px 4px 4px;\nborder-top-right-radius: 4px;\nborder-bottom-right-radius: 4px;\nfont-family: \"Open Sans\", sans-serif;\n}\n.github-badge-big {\ndisplay: inline-block;\nborder-radius: 6px;\ntext-shadow: none;\nfont-size: 14.1px;\ncolor: #fff;\nline-height: 18px;\nmargin-bottom: 7px;\n}\n.github-badge-big .badge-subject {\ndisplay: inline-block;\nbackground-color: #4d4d4d;\npadding: 4px 4px 4px 6px;\nborder-top-left-radius: 4px;\nborder-bottom-left-radius: 4px;\n}\n.github-badge-big .badge-value {\ndisplay: inline-block;\npadding: 4px 6px 4px 4px;\nborder-top-right-radius: 4px;\nborder-bottom-right-radius: 4px;\n}\n.bg-orange {\nbackground-color: #ec8a64 !important;\n}\n.bg-red {\nbackground-color: #cb7574 !important;\n}\n.bg-apricots {\nbackground-color: #f7c280 !important;\n}\n.bg-casein {\nbackground-color: #dfe291 !important;\n}\n.bg-shallots {\nbackground-color: #97c3c6 !important;\n}\n.bg-ogling {\nbackground-color: #95c7e0 !important;\n}\n.bg-haze {\nbackground-color: #9aaec7 !important;\n}\n.bg-mountain-terrier {\nbackground-color: #99a5cd !important;\n}\n</style>\n \n<div class=\"github-badge-big\">\n<span class=\"badge-subject\"><i class=\"fa fa-id-card\"></i> 备案号 </span\n><span class=\"badge-value bg-orange\">\n<a href=\"https://beian.miit.gov.cn/\" target=\"_blank\" one-link-mark=\"yes\"\n>苏ICP备0000000000号</a\n>\n|\n<a\nhref=\"http://www.beian.gov.cn/portal/registerSystemInfo?recordcode= 32072202010255\"\ntarget=\"_blank\"\none-link-mark=\"yes\"\n>苏公网安备 00000000000000号</a\n></span\n>\n</div>\n\n \n<div class=\"github-badge\">\n<span class=\"badge-subject\"><img src=\"https://www.liveout.cn/wp-content/uploads/2022/10/又拍云_logo4.png\" height=\"20\" width=\"20\"/></i> CDN</span\n><span class=\"badge-value bg-shallots\"\n><a href=\"\" target=\"_blank\" one-link-mark=\"yes\"></a\n><a\nhref=\"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\"\ntarget=\"_blank\"\none-link-mark=\"yes\"\n>Upyun</a\n></span\n>\n<span class=\"badge-subject\"><i class=\"fa fa-wordpress\"></i> Powered</span\n><span class=\"badge-value bg-green\"\n><a href=\"https://cn.wordpress.org/\" target=\"_blank\" one-link-mark=\"yes\"\n>WordPress</a\n></span\n>\n</div>\n<div class=\"github-badge-big\">\n<span class=\"badge-subject\">Copyright </span\n><span class=\"badge-value bg-red\">\n2022-2022\n<i class=\"fa fa-copyright\"></i> Echo</span\n>\n</script>\n</div>\n<div class=\"github-badge-big\">\n<span class=\"badge-subject\"><i class=\"fa fa-clock-o\"></i> Running Time</span\n><span class=\"badge-value bg-apricots\"\n><span id=\"blog_running_days\" class=\"odometer odometer-auto-theme\"></span>\ndays\n<span id=\"blog_running_hours\" class=\"odometer odometer-auto-theme\"></span> H\n<span id=\"blog_running_mins\" class=\"odometer odometer-auto-theme\"></span> M\n<span id=\"blog_running_secs\" class=\"odometer odometer-auto-theme\"></span>\nS</span\n>\n <script no-pjax=\"\">\nvar blog_running_days = document.getElementById(\"blog_running_days\");\nvar blog_running_hours = document.getElementById(\"blog_running_hours\");\nvar blog_running_mins = document.getElementById(\"blog_running_mins\");\nvar blog_running_secs = document.getElementById(\"blog_running_secs\");\nfunction refresh_blog_running_time() {\nvar time = new Date() - new Date(2020, 0,0, 0, 0, 0);\nvar d = parseInt(time / 24 / 60 / 60 / 1000);\nvar h = parseInt((time % (24 * 60 * 60 * 1000)) / 60 / 60 / 1000);\nvar m = parseInt((time % (60 * 60 * 1000)) / 60 / 1000);\nvar s = parseInt((time % (60 * 1000)) / 1000);\nblog_running_days.innerHTML = d;\nblog_running_hours.innerHTML = h;\nblog_running_mins.innerHTML = m;\nblog_running_secs.innerHTML = s;\n}\nrefresh_blog_running_time();\nif (typeof bottomTimeIntervalHasSet == \"undefined\") {\nvar bottomTimeIntervalHasSet = true;\nsetInterval(function () {\nrefresh_blog_running_time();\n}, 500);\n}\n</script>\n","argon_enable_code_highlight":"true","argon_code_theme":"vs2015","argon_code_highlight_hide_linenumber":"true","argon_code_highlight_break_line":"false","argon_code_highlight_transparent_linenumber":"false","argon_math_render":"none","argon_mathjax_cdn_url":"//cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js","argon_mathjax_v2_cdn_url":"//cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js?config=TeX-AMS_HTML","argon_katex_cdn_url":"//cdn.jsdelivr.net/npm/katex@0.11.1/dist/","argon_enable_lazyload":"true","argon_lazyload_threshold":"800","argon_lazyload_effect":"fadeIn","argon_lazyload_loading_style":"1","argon_enable_fancybox":"true","argon_enable_zoomify":"false","argon_zoomify_duration":"200","argon_zoomify_easing":"cubic-bezier(0.4,0,0,1)","argon_zoomify_scale":"0.9","argon_enable_pangu":"article","argon_custom_html_head":"","argon_custom_html_foot":"<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css\">\n<script src=\"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js\"></script>\n \n<meting-js \n server=\"netease\" \n type=\"playlist\" \n id=\"7373135320\"\n fixed=\"true\" \n mini=\"true\"\n order=\"list\"\n loop=\"all\"\n preload=\"auto\"\n list-folded=\"true\"\n lrc-type=\"0\"\n>\n</meting-js>\n\n\n","argon_enable_smoothscroll_type":"1_pulse","argon_enable_into_article_animation":"true","argon_disable_pjax_animation":"false","argon_comment_pagination_type":"page","argon_comment_emotion_keyboard":"true","argon_hide_name_email_site_input":"false","argon_comment_need_captcha":"false","argon_get_captcha_by_ajax":"false","argon_comment_allow_markdown":"true","argon_comment_allow_editing":"true","argon_comment_allow_privatemode":"true","argon_comment_allow_mailnotice":"true","argon_comment_mailnotice_checkbox_checked":true,"argon_comment_enable_qq_avatar":"true","argon_comment_avatar_vcenter":"false","argon_who_can_visit_comment_edit_history":"commentsender","argon_enable_comment_pinning":"true","argon_enable_comment_upvote":"true","argon_comment_ua":"platform,browser","argon_show_comment_parent_info":"true","argon_fold_long_comments":"true","argon_gravatar_cdn":"gravatar.pho.ink/avatar/","argon_text_gravatar":"true","argon_enable_search_filters":"true","argon_search_filters_type":"*post,*page,shuoshuo","argon_pjax_disabled":"false","argon_hide_categories":"","argon_enable_login_css":"true","argon_home_show_shuoshuo":"false","argon_fold_long_shuoshuo":"true","argon_enable_timezone_fix":"false","argon_hide_shortcode_in_preview":"true","argon_trim_words_count":"0","argon_enable_mobile_scale":"false","argon_disable_googlefont":"false","argon_disable_codeblock_style":"false","argon_update_source":"github","argon_hide_footer_author":"true"}2. 年度倒计时显示(左侧栏)
在左侧栏里添加工具——简码,复制一下代码粘贴进去
<div class="progress-wrapper" style="padding: 0">
<div class="progress-info">
<div class="progress-label">
<span id="yearprogress_yearname"></span>
</div>
<div id="yearprogress_text_container" class="progress-percentage">
<span id="yearprogress_progresstext"></span>
<span id="yearprogress_progresstext_full"></span>
</div>
</div>
<div class="progress">
<div id="yearprogress_progressbar" class="progress-bar bg-primary"></div>
</div>
</div>
<script no-pjax="">
function yearprogress_refresh() {
let year = new Date().getFullYear();
$("#yearprogress_yearname").text(year);
let from = new Date(year, 0, 1, 0, 0, 0);
let to = new Date(year, 11, 31, 23, 59, 59);
let now = new Date();
let progress = (((now - from) / (to - from + 1)) * 100).toFixed(7);
let progressshort = (((now - from) / (to - from + 1)) * 100).toFixed(2);
$("#yearprogress_progresstext").text(progressshort + "%");
$("#yearprogress_progresstext_full").text(progress + "%");
$("#yearprogress_progressbar").css("width", progress + "%");
}
yearprogress_refresh();
if (typeof yearProgressIntervalHasSet == "undefined") {
var yearProgressIntervalHasSet = true;
setInterval(function () {
yearprogress_refresh();
}, 500);
}
</script>
<style>
#yearprogress_text_container {
width: 100%;
height: 22px;
overflow: hidden;
user-select: none;
}
#yearprogress_text_container > span {
transition: all 0.3s ease;
display: block;
}
#yearprogress_text_container:hover > span {
transform: translateY(-45px);
}
</style>3. 底部音乐播放
下面的调用链接可能会突然失效,如有需要可参考官方文档
[APlayer HTML5音乐播放器 | ACE-BLOG
(ace520.github.io)](https://ace520.github.io/blog/post/2020/05/26/aplayer/)
**server="netease" 指定音乐平台为网易云,type="song"
指单曲类型,id="7373135320" 为音乐的 id(这里的id为打开音乐歌单,网址显示的id)**
开启吸底模式 fixed="true", 开启迷你模式 mini="true", 随机播放order="random", 关闭底部歌词 lrc-type="0"
注意:id需要为自己创建的歌单,不能为我喜欢的音乐;server可以改自己用的音乐平台,如netease(网易云)、tencent(QQ音乐)
具体参数设置点击此链接:https://yy.liveout.cn/article/Learn/front-end/aplayer%E5%8F%82%E6%95%B0.png
Aplayer播放器官网文档:[APlayer HTML5音乐播放器 | ACE-BLOG
(ace520.github.io)](https://ace520.github.io/blog/post/2020/05/26/aplayer/)
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css">
<script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script>
<meting-js
server="netease"
type="playlist"
id="7360465359"
fixed="true"
mini="true"
order="random"
loop="all"
preload="auto"
list-folded="false">
</meting-js>4. 动态背景(视频资源失效)
背景可以通过更改 url 链接设置为自己的动态视频,尽量不要太大,否则别人访问时会刷新许久
注意视频链接已过期,可更换为自己的链接
上传视频到云平台或媒体库,复制资源链接
<video
src="https://new.gcxstudio.cn/wp-content/uploads/2022/03/daymode.mp4" /*白天动态视频链接*/
class="bg-video bg-video-day"
autoplay=""
loop="loop"
muted=""
></video>
<video
src="https://new.gcxstudio.cn/wp-content/uploads/2022/03/darkmode.webm" /*夜间动态视频链接*/
class="bg-video bg-video-night"
autoplay=""
loop="loop"
muted=""
></video>
<style>
video.bg-video {
position: fixed;
z-index: -1;
left: 0;
right: 0;
top: 0;
bottom: 0;
width: 100vw;
height: 100vh;
object-fit: cover;
pointer-events: none;
}
html.darkmode video.bg-video.bg-video-day {
opacity: 0;
}
html.darkmode video.bg-video.bg-video-night {
opacity: 1;
}
video.bg-video.bg-video-day {
opacity: 1;
}
video.bg-video.bg-video-night {
opacity: 0;
}
#banner,
#banner .shape {
background: transparent !important;
}
</style>
<script
src="https://api.gcxstudio.cn/odometer/odometer.min.js"
integrity="sha256-65R1G5irU1VT+k8L4coqgd3saSvO/Wufson/w+v2Idw="
crossorigin="anonymous"
></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css">
<script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
<div id='aplayer'></div>5. 虚拟人物(看板娘)
以下代码选择一项复制即可,效果不同,自行选择
具体文章:[stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ |
Live2D widget for web platform (github.com)](https://github.com/stevenjoezhang/live2d-widget)
<script src="https://fastly.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/autoload.js"></script>- 其中 jsonpath: 后面的链接可按自己爱好更改,选择别的虚拟人物
<script src="https://eqcn.ajz.miesnfu.com/wp-content/plugins/wp-3d-pony/live2dw/lib/L2Dwidget.min.js"></script>
<script>
L2Dwidget.init({
"model": {
//jsonpath控制显示那个小萝莉模型,
//(切换模型需要改动)
// "https://unpkg.com/(live2d-widget-model-koharu)@1.0.5/assets/(koharu).model.json"
jsonPath: "https://unpkg.com/live2d-widget-model-koharu@1.0.5/assets/koharu.model.json",
"scale": 1
},
"display": {
"position": "right", //看板娘的表现位置
"width": 75, //小萝莉的宽度
"height": 150, //小萝莉的高度
"hOffset": 0,
"vOffset": -20
},
"mobile": {
"show": true,
"scale": 0.5
},
"react": {
"opacityDefault": 0.7,
"opacityOnHover": 0.2
}
});
</script>
/* 小帅哥: https://unpkg.com/live2d-widget-model-chitose@1.0.5/assets/chitose.model.json
萌娘:https://unpkg.com/live2d-widget-model-shizuku@1.0.5/assets/shizuku.model.json
白猫:https://unpkg.com/live2d-widget-model-tororo@1.0.5/assets/tororo.model.json
黑猫: https://unpkg.com/live2d-widget-model-hijiki@1.0.5/assets/hijiki.model.json
小可爱(女):https://unpkg.com/live2d-widget-model-koharu@1.0.5/assets/koharu.model.json
小可爱(男):https://unpkg.com/live2d-widget-model-haruto@1.0.5/assets/haruto.model.json
初音:https://unpkg.com/live2d-widget-model-miku@1.0.5/assets/miku.model.json
圣职者妹妹:https://unpkg.com/live2d-widget-model-z16@1.0.5/assets/z16.model.json
茶杯犬:https://cdn.jsdelivr.net/npm/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json
绿毛妹妹:https://unpkg.com/live2d-widget-model-tsumiki@1.0.5/assets/tsumiki.model.json
金龟子妹妹:https://unpkg.com/live2d-widget-model-unitychan@1.0.5/assets/unitychan.model.json
https://unpkg.com/live2d-widget-model-nito@1.0.5/assets/nito.model.json
https://unpkg.com/live2d-widget-model-ni-j@1.0.5/assets/ni-j.model.json
小阿狸: https://unpkg.com/live2d-widget-model-nico@1.0.5/assets/nico.model.json
https://unpkg.com/live2d-widget-model-nietzche@1.0.5/assets/nietzche.model.json
https://unpkg.com/live2d-widget-model-nipsilon@1.0.5/assets/nipsilon.model.json
女学生: https://unpkg.com/live2d-widget-model-hibiki@1.0.5/assets/hibiki.model.json */6. 网站底部信息
CSS(样式表)
<style>
/* 核心样式 */
.github-badge {
display: inline-block;
border-radius: 4px;
text-shadow: none;
font-size: 13.1px;
color: #fff;
line-height: 15px;
margin-bottom: 5px;
font-family: "Open Sans", sans-serif;
}
.github-badge .badge-subject {
display: inline-block;
background-color: #4d4d4d;
padding: 4px 4px 4px 6px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
font-family: "Open Sans", sans-serif;
}
.github-badge .badge-value {
display: inline-block;
padding: 4px 6px 4px 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
font-family: "Open Sans", sans-serif;
}
.github-badge-big {
display: inline-block;
border-radius: 6px;
text-shadow: none;
font-size: 14.1px;
color: #fff;
line-height: 18px;
margin-bottom: 7px;
}
.github-badge-big .badge-subject {
display: inline-block;
background-color: #4d4d4d;
padding: 4px 4px 4px 6px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.github-badge-big .badge-value {
display: inline-block;
padding: 4px 6px 4px 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.bg-orange {
background-color: #ec8a64 !important;
}
.bg-red {
background-color: #cb7574 !important;
}
.bg-apricots {
background-color: #f7c280 !important;
}
.bg-casein {
background-color: #dfe291 !important;
}
.bg-shallots {
background-color: #97c3c6 !important;
}
.bg-ogling {
background-color: #95c7e0 !important;
}
.bg-haze {
background-color: #9aaec7 !important;
}
.bg-mountain-terrier {
background-color: #99a5cd !important;
}
</style>HTML(底部信息)
<div class="github-badge-big">
<span class="badge-subject"><i class="fa fa-id-card"></i> 备案号 </span>
<span class="badge-value bg-orange">
<!-- 备案链接 -->
<a href="https://beian.miit.gov.cn/" target="_blank" one-link-mark="yes">苏ICP备1234567890号</a>|
<a href="https://www.beian.gov.cn/portal/index?token=e547b70c-fbe1-4c80-a4a2-857b17389a71" target="_blank"
one-link-mark="yes">
苏公网安备 32072212344321号</a>
</span>
</div>
<div class="github-badge-big">
<span class="badge-subject"><i class="fa fa-cloud" aria-hidden="true"></i> CDN</span>
<span class="badge-value bg-shallots">
<!-- 又拍云链接 -->
<a href="https://www.upyun.com/" target="_blank" one-link-mark="yes">Upyun</a>
</span>
<span class="badge-subject"><i class="fa fa-wordpress"></i> Powered</span>
<span class="badge-value bg-green">
<!-- wordpress链接 -->
<a href="https://cn.wordpress.org/" target="_blank" one-link-mark="yes">
WordPress</a></span>
</div>
<div class="github-badge-big">
<span class="badge-subject"><i class="fa fa-copyright" aria-hidden="true"></i>Copyright </span>
<span class="badge-value bg-red">2022-2023</i>
<a href="https://www.liveout.cn/" target="_blank" one-link-mark="yes">@ Echo
</span>
</script>
</div>
<!-- 运行时间 -->
<div class="github-badge-big">
<span class="badge-subject"><i class="fa fa-clock-o"></i> Running Time</span><span
class="badge-value bg-apricots"><span id="blog_running_days" class="odometer odometer-auto-theme"></span>
days
<span id="blog_running_hours" class="odometer odometer-auto-theme"></span> H
<span id="blog_running_mins" class="odometer odometer-auto-theme"></span> M
<span id="blog_running_secs" class="odometer odometer-auto-theme"></span>S
</span>JavaScript(网站运行时间脚本)
注意:new Date( year, month, date, hrs, min, sec) 按给定的参数创建 日期对象
其中month的值域为0~11,0代表1月,11表代表12月;所以你输入的月份需要为自己真正月份的前一个月
<script no-pjax="">
var blog_running_days = document.getElementById("blog_running_days");
var blog_running_hours = document.getElementById("blog_running_hours");
var blog_running_mins = document.getElementById("blog_running_mins");
var blog_running_secs = document.getElementById("blog_running_secs");
function refresh_blog_running_time() {
var time = new Date() - new Date(2022, 5, 31, 0, 0, 0); /*此处日期的月份改为自己真正月份的前一个月*/
var d = parseInt(time / 24 / 60 / 60 / 1000);
var h = parseInt((time % (24 * 60 * 60 * 1000)) / 60 / 60 / 1000);
var m = parseInt((time % (60 * 60 * 1000)) / 60 / 1000);
var s = parseInt((time % (60 * 1000)) / 1000);
blog_running_days.innerHTML = d;
blog_running_hours.innerHTML = h;
blog_running_mins.innerHTML = m;
blog_running_secs.innerHTML = s;
}
refresh_blog_running_time();
if (typeof bottomTimeIntervalHasSet == "undefined") {
var bottomTimeIntervalHasSet = true;
setInterval(function () {
refresh_blog_running_time();
}, 500);
}
</script>7. 字体、鼠标等特效
Docker系列 WordPress系列 特效 - Bensz (hwb0307.com)
8. 博客自定义CSS样式
8.1 博主的设置
参考上面友情链接, 以下为我的额外CSS,涉及字体、透明等博客样式
在 外观 --- 自定义 --- 额外CSS 中
ps: 字体链接需要上传到云端调用才能生效(下面字体链接已失效)
/*网站字体*/
/*原则上你可以设置多个字体,然后在不同的部位使用不同的字体。*/
@font-face{
font-family:echo;
src:url(https://fastly.jsdelivr.net/gh/huangwb8/bloghelper@latest/fonts/13.woff2) format('woff2')
}
body{
font-family: 'echo', Georgia, -apple-system, 'Nimbus Roman No9 L', 'PingFang SC', 'Hiragino Sans GB', 'Noto Serif SC', 'Microsoft Yahei', 'WenQuanYi Micro Hei', 'ST Heiti', sans-serif
}
/*横幅字体大小*/
.banner-title {
font-size: 2.5em;
}
.banner-subtitle{
font-size: 28px;
-webkit-text-fill-color: transparent;
background: linear-gradient(94.75deg,rgb(60, 172, 247) 0%,rgb(131, 101, 253) 43.66%, rgb(255, 141, 112) 64.23%,rgb(247, 201, 102) 83.76%,rgb(172, 143, 100) 100%);
-webkit-background-clip: text;
}
/*文章标题字体大小*/
.post-title {
font-size: 25px
}
/*正文字体大小(不包含代码)*/
.post-content p{
font-size: 1.25rem;
}
li{
font-size: 1.2rem;
}
/*评论区字体大小*/
p {
font-size: 1.2rem
}
/*评论发送区字体大小*/
.form-control{
font-size: 1.2rem
}
/*评论勾选项目字体大小*/
.custom-checkbox .custom-control-input~.custom-control-label{
font-size: 1.2rem
}
/*评论区代码的强调色*/
code {
color: rgba(var(--themecolor-rgbstr));
}
/*说说字体大小和颜色设置*/
.shuoshuo-title {
font-size: 25px;
/* color: rgba(var(--themecolor-rgbstr)); */
}
/*尾注字体大小*/
.additional-content-after-post{
font-size: 1.2rem
}
/* 公告居中 */
.leftbar-announcement-title {
font-size: 20px;
/* text-align: center; */
color: #00FFFF
}
.leftbar-announcement-content {
font-size: 15px;
line-height: 1.8;
padding-top: 8px;
opacity: 0.8;
/* text-align: center; */
color:#00FFFF;
}
/* 一言居中 */
.leftbar-banner-title {
font-size: 20px;
display: block;
text-align: center;
opacity: 0.8;
}
/* 个性签名居中 */
.leftbar-banner-subtitle {
margin-top: 15px;
margin-bottom: 8px;
font-size: 13px;
opacity: 0.8;
display: block;
text-align: center;
}
/*========颜色设置===========*/
/*文章或页面的正文颜色*/
body{
color:#364863
}
/*引文属性设置*/
blockquote {
/*添加弱主题色为背景色*/
background: rgba(var(--themecolor-rgbstr), 0.1) !important;
width: 100%
}
/*引文颜色 建议用主题色*/
:root {
/*也可以用类似于--color-border-on-foreground-deeper: #009688;这样的命令*/
--color-border-on-foreground-deeper: rgba(var(--themecolor-rgbstr));
}
/*左侧菜单栏突出颜色修改*/
.leftbar-menu-item > a:hover, .leftbar-menu-item.current > a{
background-color: #f9f9f980;
}
/*站点概览分隔线颜色修改*/
.site-state-item{
border-left: 1px solid #aaa;
}
.site-friend-links-title {
border-top: 1px dotted #aaa;
}
#leftbar_tab_tools ul li {
padding-top: 3px;
padding-bottom: 3px;
border-bottom:none;
}
html.darkmode #leftbar_tab_tools ul li {
border-bottom:none;
}
/*左侧栏搜索框的颜色*/
button#leftbar_search_container {
background-color: transparent;
}
/*========透明设置===========*/
/*白天卡片背景透明*/
.card{
background-color:rgba(255, 255, 255, 0.8) !important;
/*backdrop-filter:blur(6px);*//*毛玻璃效果主要属性*/
-webkit-backdrop-filter:blur(6px);
}
/*小工具栏背景完全透明*/
/*小工具栏是card的子元素,如果用同一个透明度会叠加变色,故改为完全透明*/
.card .widget,.darkmode .card .widget,#post_content > div > div > div.argon-timeline-card.card.bg-gradient-secondary.archive-timeline-title{
background-color:#ffffff00 !important;
backdrop-filter:none;
-webkit-backdrop-filter:none;
}
.emotion-keyboard,#fabtn_blog_settings_popup{
background-color:rgba(255, 255, 255, 0.95) !important;
}
/*分类卡片透明*/
.bg-gradient-secondary{
background:rgba(255, 255, 255, 0.1) !important;
backdrop-filter: blur(10px);
-webkit-backdrop-filter:blur(10px);
}
/*夜间透明*/
html.darkmode.bg-white,html.darkmode .card,html.darkmode #footer{
background:rgba(66, 66, 66, 0.9) !important;
}
html.darkmode #fabtn_blog_settings_popup{
background:rgba(66, 66, 66, 0.95) !important;
}
/*标签背景
.post-meta-detail-tag {
background:rgba(255, 255, 255, 0.5)!important;
}*/
/*========排版设置===========*/
/*左侧栏层级置于上层*/
#leftbar_part1 {
z-index: 1;
}
/*分类卡片文本居中*/
#content > div.page-information-card-container > div > div{
text-align:center;
}
/*子菜单对齐及样式调整*/
.dropdown-menu .dropdown-item>i{
width: 10px;
}
.dropdown-menu>a {
color:var(--themecolor);
}
.dropdown-menu{
min-width:max-content;
}
.dropdown-menu .dropdown-item {
padding: .5rem 1.5rem 0.5rem 1rem;
}
.leftbar-menu-subitem{
min-width:max-content;
}
.leftbar-menu-subitem .leftbar-menu-item>a{
padding: 0rem 1.5rem 0rem 1rem;
}
/*左侧栏边距修改*/
.tab-content{
padding:10px 0px 0px 0px !important;
}
.site-author-links{
padding:0px 0px 0px 10px ;
}
/*目录位置偏移修改*/
#leftbar_catalog{
margin-left: 0px;
}
/*目录条目边距修改*/
#leftbar_catalog .index-link{
padding: 4px 4px 4px 4px;
}
/*左侧栏小工具栏字体缩小*/
#leftbar_tab_tools{
font-size: 14px;
}
/*正文图片边距修改*/
article figure {margin:0;}
/*正文图片居中显示*/
.fancybox-wrapper {
margin: auto;
}
/*正文表格样式修改*/
article table > tbody > tr > td,
article table > tbody > tr > th,
article table > tfoot > tr > td,
article table > tfoot > tr > th,
article table > thead > tr > td,
article table > thead > tr > th{
padding: 8px 10px;
border: 1px solid;
}
/*表格居中样式*/
.wp-block-table.aligncenter{margin:10px auto;}
/*回顶图标放大*/
button#fabtn_back_to_top, button#fabtn_go_to_comment, button#fabtn_toggle_blog_settings_popup, button#fabtn_toggle_sides, button#fabtn_open_sidebar{
font-size: 1.2rem;
}
/*顶栏菜单放大*/
/*这里也可以设置刚刚我们设置的btfFont字体。试试看!*/
.navbar-nav .nav-link {
font-size: 1rem;
font-family: 'echo';
}
.navbar-brand {
font-family: 'echo';
font-size: 1.2rem;
margin-right: 1.0 rem;
padding-bottom: 0.2 rem;
-webkit-text-fill-color: transparent;
background: linear-gradient(94.75deg,rgb(60, 172, 247) 0%,rgb(131, 101, 253) 43.66%, rgb(255, 141, 112) 64.23%,rgb(247, 201, 102) 83.76%,rgb(172, 143, 100) 100%);
-webkit-background-clip: text;
}
/*菜单大小*/
.nav-link-inner--text {
font-size: 1.25em;
}
.navbar-nav .nav-item {
margin-right:0;
}
.mr-lg-5, .mx-lg-5 {
margin-right:1rem !important;
}
.navbar-toggler-icon {
width: 1.8rem;
height: 1.8rem;
}
/*菜单间距*/
.navbar-expand-lg .navbar-nav .nav-link {
padding-right: 1.4em;
padding-left: 1.4em;
}
/*隐藏wp-SEO插件带来的线条阴影(不一定要装)*/
*[style='position: relative; z-index: 99998;'] {
display: none;
}
/* Github卡片样式*/
.github-info-card-header a {
/*Github卡片抬头颜色*/
color: black !important;
font-size: 1.5rem;
}
.github-info-card {
/*Github卡片文字(非链接)*/
font-size: 1rem;
color: black !important;
}
.github-info-card.github-info-card-full.card.shadow-sm {
/*Github卡片背景色*/
background-color: rgba(var(--themecolor-rgbstr), 0.1) !important;
}
/* 左侧栏外观CSS */
/* 头像 */
#leftbar_overview_author_image {
width: 100px;
height: 100px;
margin: auto;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
background-color: rgba(127, 127, 127, 0.1);
overflow: hidden;
transition: transform 0.3s ease;
}
/* 头像亮暗 */
#leftbar_overview_author_image:hover {
transform: scale(1.23);
filter: brightness(150%);
}
/* 名称 */
#leftbar_overview_author_name {
margin-top: 15px;
font-size: 18px;align-content;
color:#00FFFF;
}
/* 简介 */
#leftbar_overview_author_description {
font-size: 14px;
margin-top: -4px;
opacity: 0.8;
color:#c21f30;
}
/* 标题,链接等 */
a, .btn-neutral {
color:#AF7AC5 ;
}
/* 页脚透明 */
#footer {
background: var(--themecolor-gradient);
color: #fff;
width: 100%;
float: right;
margin-bottom: 25px;
text-align: center;
padding: 25px 20px;
line-height: 1.8;
transition: none;
opacity: 0.6;
}8.2 根据主题自动透明
添加到 页尾脚本 里,根据主题色自动透明,透明度可以在op1、op2、op3.....那里设置
<script>
function hexToRgb(hex,op){
let str = hex.slice(1);
let arr;
if (str.length === 3) arr = str.split('').map(d => parseInt(d.repeat(2), 16));
else arr = [parseInt(str.slice(0, 2), 16), parseInt(str.slice(2, 4), 16), parseInt(str.slice(4, 6), 16)];
return `rgb(${arr.join(', ')}, ${op})`;
};
let themeColorHex = getComputedStyle(document.documentElement).getPropertyValue('--themecolor').trim();
let op1 = 0.6
let themeColorRgb = hexToRgb(themeColorHex,op1);
let themecolorGradient = getComputedStyle(document.documentElement).getPropertyValue('--themecolor-gradient')*
document.documentElement.style.setProperty('--themecolor-gradient',themeColorRgb)
let op2 = 0.8
// 方法一:
let colorTint92 = getComputedStyle(document.documentElement).getPropertyValue('--color-tint-92').trim();
colorTint92 += ', '+op2;
document.documentElement.style.setProperty('--color-tint-92',colorTint92)
// 方法二:(无效)
// let colorForegroundHex = getComputedStyle(document.documentElement).getPropertyValue('--color-foreground').trim();
// let colorForeground = hexToRgb(colorForegroundHex,op2)
// 无效的原因是博客里的--color-fpreground是局部变量,不是:root里的全局变量,所以最好的办法是修改--color-tint-92,这个是全局的
// document.documentElement.style.setPrope。rty('--color-fpreground',colorForeground)
// 不要用下面这种cssText这种写法,会导致上面--themecolor-gradient的样式修改失效!
// document.documentElement.style.cssText = '--color-tint-92:'+colorTint92
let op3 = 0.65
let colorShade90 = getComputedStyle(document.documentElement).getPropertyValue('--color-shade-90').trim();
colorShade90 += ', ' + op3;
document.documentElement.style.setProperty('--color-shade-90',colorShade90)
let op4 = 0.8
let colorShade86 = getComputedStyle(document.documentElement).getPropertyValue('--color-shade-86').trim();
colorShade86 += ', ' + op4;
document.documentElement.style.setProperty('--color-shade-86',colorShade86)
</script>来源自友链朋友:北冥红烧鱼 (hongshaoyv.com)
9. 头像缩放或亮暗
鼠标经过头像时自动缩放、高亮/暗
在 外观 --- 自定义 --- 额外CSS 中
#leftbar_overview_author_image {
width: 100px;
height: 100px;
margin: auto;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
background-color: rgba(127, 127, 127, 0.1);
overflow: hidden;
box-shadow: 0 0 5px rgba(116, 8, 204, 0.3);
transition: transform 0.3s ease; /*变化速度*/
}
#leftbar_overview_author_image:hover {
transform: scale(1.2); /*缩放大小*/
filter: brightness(150%); /*调节亮度*/
}10. 头像/姓名跳转相关页
在 外观 --- 主题文件编辑器 中, 选择 边栏文件(sidebar.php)
点击 头像 跳转大概在第 126 行左右,
添加 <a> 标签,即 <a href="https://www.liveout.cn/about/">, 其中链接改为想要跳转的地方
<div class="tab-pane fade text-center<?php if ($nowActiveTab == 1) { echo ' active show'; }?>" id="leftbar_tab_overview" role="tabpanel" aria-labelledby="leftbar_tab_overview_btn">
<a href="https://www.liveout.cn/about/">
<div id="leftbar_overview_author_image" style="background-image: ........
<a/>点击 姓名 跳转则是 130 行左右
添加 <a href="https://www.liveout.cn/about/">.... <a/>
<a href="https://www.liveout.cn/about/">
<h6 id="leftbar_overview_author_name"><?php echo get_option('argon_sidebar_auther_name') == '' ? bloginfo('name') : get_option('argon_sidebar_auther_name'); ?> </h6>
<a/>11. 评论头像显示
在 外观 --- 主题文件编辑器 中的 function 模板函数添加此代码
if ( ! function_exists( 'get_cravatar_url' ) ) {
/**
* 把Gravatar头像服务替换为Cravatar
* @param string $url
* @return string
*/
function get_cravatar_url( $url ) {
$sources = array(
'www.gravatar.com',
'0.gravatar.com',
'1.gravatar.com',
'2.gravatar.com',
'secure.gravatar.com',
'cn.gravatar.com'
);
return str_replace( $sources, 'cravatar.cn', $url );
}
add_filter( 'um_user_avatar_url_filter', 'get_cravatar_url', 1 );
add_filter( 'bp_gravatar_url', 'get_cravatar_url', 1 );
add_filter( 'get_avatar_url', 'get_cravatar_url', 1 );
}来源:网络
12. 插件合集
12.1 网站访问数据(左侧栏)
- 进入Wordpress,点击插件,搜索并且下载 Wp Statistics
- 外观——小工具——站点额外内容——旧版小工具——统计
12.2 评论IP地址
以下根据体验自己选择
WP-UserAgent | kyleabaker.com From 友链大佬:obaby@mars (h4ck.org.cn)
WordPress 展示评论者地理位置插件 Easy Location | 歲月留聲 (0xo.net)
12.3 评论管理
Akismet Anti-Spam: Spam Protection
12.4 邮件发送
WP Mail SMTP
12.5 文章字数统计
WP Word Count
12.6 WP用户个人头像
Simple Local Avatars
教程视频
个人博客网站(Wordpress)基本使用哔哩哔哩bilibili
推荐文章
- 个人博客网站搭建 – Echo (liveout.cn)
- 个人博客主题分享(WordPress) – Echo (liveout.cn)
- 博客图片托管到又拍云教程 – Echo (liveout.cn)
- Wordpress/Typecho博客搬迁教程 – Echo (liveout.cn)
相关链接
本文可能涉及的代码出自以下博客文章,十分感谢下面各位大佬的分享
关于 Argon 主题 更多美化内容文章: [Argon
主题的美化设置 - Gong\_cx (gcxstudio.cn)](https://new.gcxstudio.cn/archives/argon-theme-settings/)
博客透明、鼠标等美化: [Docker系列 WordPress系列
特效 - Bensz (hwb0307.com)](https://blognas.hwb0307.com/linux/docker/744#comment-918)
博客添加音乐插件: https://echeverra.cn/aplayer
Argon主题 GitHub地址:[solstice23/argon-theme: ? Argon
- 一个轻盈、简洁的 WordPress 主题 (github.com)](https://github.com/solstice23/argon-theme)
Argon主题作者博客:solstice23 – Blog
Argon主题使用文档:Argon Theme Docs (solstice23.top)
FAQ
如果遇到问题无法解决,请参考以下途径
- B站视频:博客搭建常见问题汇总哔哩哔哩bilibili
- 翻翻评论区,已经有许多问题提出和解决了,大部分都一样
- 查看官方文档
如果问题还未解决,请评论区留言
一些话
很开心这篇美化文章能够帮助到大家,如果转载请标注原文地址哦,十分感谢!
Argon主题博客美化
前言
常言道:工欲善其事必先利其器,在发表文章前,美化博客,使其利于自己的观看与管理极其重要,所以我四处搜寻,得到了以下美化代码。
但是,有时候我们走得太远,会忘了为什么出发。希望阅览本文章的人不要忘记初心,想想一开始为什么搭建博客。我相信大部分朋友都是为了记录自己学习笔记,生活故事。
所以,有时候博客美化过度会适得其反,望各位仔细斟酌,莫要使自己的博客变成了花架子,好的文章才是博客之本,立足之根。
主题资源
链接:https://pan.baidu.com/s/1hamo74DR40Kx4JmhbSyk_w
提取码:1111
我的博客美化 JSON
注意:可复制一键导入
{"argon_theme_color":"#5e72e4","argon_theme_color_hex_preview":"#5e72e4","argon_show_customize_theme_color_picker":true,"argon_enable_immersion_color":"true","argon_darkmode_autoswitch":"time","argon_enable_amoled_dark":"false","argon_card_radius":"15","argon_card_shadow":"default","argon_page_layout":"double","argon_article_list_waterflow":"2","argon_article_list_layout":"1","argon_font":"serif","argon_assets_path":"sourcegcdn","argon_custom_assets_path":"","argon_wp_path":"/","argon_dateformat":"YMD","argon_enable_headroom":"true","argon_toolbar_title":"Echo","argon_toolbar_icon":"","argon_toolbar_icon_link":" ","argon_toolbar_blur":"true","argon_banner_title":"Echo‘s blog","argon_banner_subtitle":"韶华不为少年留 恨悠悠 几时休","argon_banner_size":"fullscreen","argon_page_background_banner_style":"transparent","argon_show_toolbar_mask":true,"argon_banner_background_url":"--bing--","argon_banner_background_color_type":"shape-primary","argon_banner_background_hide_shapes":true,"argon_enable_banner_title_typing_effect":"true","argon_banner_typing_effect_interval":"100","argon_page_background_url":"https://yy.liveout.cn/background/wallhaven-yxjm57_1920x1080.png","argon_page_background_dark_url":"https://yy.liveout.cn/background/wallhaven-6dqjdl_1920x1080.png","argon_page_background_opacity":"1","argon_sidebar_banner_title":"公告","argon_sidebar_banner_subtitle":"欢迎在小E 的茶馆休憩。相逢何必曾相识,但喜欢闲聊的可以加群:688329809","argon_sidebar_auther_name":"Echo","argon_sidebar_auther_image":"https://yy.liveout.cn/photo/photo1.png","argon_sidebar_author_description":"一个IoT专业混吃等死的小废物","argon_sidebar_announcement":"","argon_fab_show_settings_button":"false","argon_fab_show_darkmode_button":"true","argon_fab_show_gotocomment_button":"false","argon_seo_description":"一个纪录生活以及学习笔记的个人博客","argon_seo_keywords":"博客,Java,Linux,C语言,IoT,物联网","argon_article_meta":"time|categories|views","argon_show_readingtime":"true","argon_reading_speed":"580","argon_reading_speed_en":"80","argon_reading_speed_code":"10","argon_show_thumbnail_in_banner_in_content_page":"false","argon_first_image_as_thumbnail_by_default":"true","argon_reference_list_title":"参考","argon_show_sharebtn":"true","argon_show_headindex_number":"false","argon_donate_qrcode_url":"https://www.liveout.cn/wp-content/uploads/2022/10/wechat1.jpg","argon_additional_content_after_post":"如果觉得本文对您有所帮助,可以支持下博主,一分也是缘😊","argon_related_post":"category,tag","argon_related_post_sort_orderby":"meta_value_num","argon_related_post_sort_order":"DESC","argon_related_post_limit":"10","argon_article_header_style":"article-header-style-2","argon_outdated_info_time_type":"createdtime","argon_outdated_info_days":"1","argon_outdated_info_tip_type":"inpost","argon_outdated_info_tip_content":"本文最后更新于%modify_date_delta% 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com","argon_archives_timeline_show_month":"true","argon_archives_timeline_url":"https://www.liveout.cn/pigeonhole/","argon_footer_html":"<style>\n/* 核心样式 */\n.github-badge {\ndisplay: inline-block;\nborder-radius: 4px;\ntext-shadow: none;\nfont-size: 13.1px;\ncolor: #fff;\nline-height: 15px;\nmargin-bottom: 5px;\nfont-family: \"Open Sans\", sans-serif;\n}\n.github-badge .badge-subject {\ndisplay: inline-block;\nbackground-color: #4d4d4d;\npadding: 4px 4px 4px 6px;\nborder-top-left-radius: 4px;\nborder-bottom-left-radius: 4px;\nfont-family: \"Open Sans\", sans-serif;\n}\n.github-badge .badge-value {\ndisplay: inline-block;\npadding: 4px 6px 4px 4px;\nborder-top-right-radius: 4px;\nborder-bottom-right-radius: 4px;\nfont-family: \"Open Sans\", sans-serif;\n}\n.github-badge-big {\ndisplay: inline-block;\nborder-radius: 6px;\ntext-shadow: none;\nfont-size: 14.1px;\ncolor: #fff;\nline-height: 18px;\nmargin-bottom: 7px;\n}\n.github-badge-big .badge-subject {\ndisplay: inline-block;\nbackground-color: #4d4d4d;\npadding: 4px 4px 4px 6px;\nborder-top-left-radius: 4px;\nborder-bottom-left-radius: 4px;\n}\n.github-badge-big .badge-value {\ndisplay: inline-block;\npadding: 4px 6px 4px 4px;\nborder-top-right-radius: 4px;\nborder-bottom-right-radius: 4px;\n}\n.bg-orange {\nbackground-color: #ec8a64 !important;\n}\n.bg-red {\nbackground-color: #cb7574 !important;\n}\n.bg-apricots {\nbackground-color: #f7c280 !important;\n}\n.bg-casein {\nbackground-color: #dfe291 !important;\n}\n.bg-shallots {\nbackground-color: #97c3c6 !important;\n}\n.bg-ogling {\nbackground-color: #95c7e0 !important;\n}\n.bg-haze {\nbackground-color: #9aaec7 !important;\n}\n.bg-mountain-terrier {\nbackground-color: #99a5cd !important;\n}\n</style>\n \n<div class=\"github-badge-big\">\n<span class=\"badge-subject\"><i class=\"fa fa-id-card\"></i> 备案号 </span\n><span class=\"badge-value bg-orange\">\n<a href=\"https://beian.miit.gov.cn/\" target=\"_blank\" one-link-mark=\"yes\"\n>苏ICP备2022020194号</a\n>\n|\n<a\nhref=\"http://www.beian.gov.cn/portal/registerSystemInfo?recordcode= 32072202010255\"\ntarget=\"_blank\"\none-link-mark=\"yes\"\n>苏公网安备 32072202010255号</a\n></span\n>\n</div>\n\n \n<div class=\"github-badge\">\n<span class=\"badge-subject\"><img src=\"https://www.liveout.cn/wp-content/uploads/2022/10/又拍云_logo4.png\" height=\"20\" width=\"20\"/></i> CDN</span\n><span class=\"badge-value bg-shallots\"\n><a href=\"\" target=\"_blank\" one-link-mark=\"yes\"></a\n><a\nhref=\"https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral\"\ntarget=\"_blank\"\none-link-mark=\"yes\"\n>Upyun</a\n></span\n>\n<span class=\"badge-subject\"><i class=\"fa fa-wordpress\"></i> Powered</span\n><span class=\"badge-value bg-green\"\n><a href=\"https://cn.wordpress.org/\" target=\"_blank\" one-link-mark=\"yes\"\n>WordPress</a\n></span\n>\n</div>\n<div class=\"github-badge-big\">\n<span class=\"badge-subject\">Copyright </span\n><span class=\"badge-value bg-red\">\n2022-2022\n<i class=\"fa fa-copyright\"></i> Echo</span\n>\n</script>\n</div>\n<div class=\"github-badge-big\">\n<span class=\"badge-subject\"><i class=\"fa fa-clock-o\"></i> Running Time</span\n><span class=\"badge-value bg-apricots\"\n><span id=\"blog_running_days\" class=\"odometer odometer-auto-theme\"></span>\ndays\n<span id=\"blog_running_hours\" class=\"odometer odometer-auto-theme\"></span> H\n<span id=\"blog_running_mins\" class=\"odometer odometer-auto-theme\"></span> M\n<span id=\"blog_running_secs\" class=\"odometer odometer-auto-theme\"></span>\nS</span\n>\n <script no-pjax=\"\">\nvar blog_running_days = document.getElementById(\"blog_running_days\");\nvar blog_running_hours = document.getElementById(\"blog_running_hours\");\nvar blog_running_mins = document.getElementById(\"blog_running_mins\");\nvar blog_running_secs = document.getElementById(\"blog_running_secs\");\nfunction refresh_blog_running_time() {\nvar time = new Date() - new Date(2022, 3, 27, 0, 0, 0);\nvar d = parseInt(time / 24 / 60 / 60 / 1000);\nvar h = parseInt((time % (24 * 60 * 60 * 1000)) / 60 / 60 / 1000);\nvar m = parseInt((time % (60 * 60 * 1000)) / 60 / 1000);\nvar s = parseInt((time % (60 * 1000)) / 1000);\nblog_running_days.innerHTML = d;\nblog_running_hours.innerHTML = h;\nblog_running_mins.innerHTML = m;\nblog_running_secs.innerHTML = s;\n}\nrefresh_blog_running_time();\nif (typeof bottomTimeIntervalHasSet == \"undefined\") {\nvar bottomTimeIntervalHasSet = true;\nsetInterval(function () {\nrefresh_blog_running_time();\n}, 500);\n}\n</script>\n","argon_enable_code_highlight":"true","argon_code_theme":"vs2015","argon_code_highlight_hide_linenumber":"true","argon_code_highlight_break_line":"false","argon_code_highlight_transparent_linenumber":"false","argon_math_render":"none","argon_mathjax_cdn_url":"//cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js","argon_mathjax_v2_cdn_url":"//cdn.jsdelivr.net/npm/mathjax@2.7.5/MathJax.js?config=TeX-AMS_HTML","argon_katex_cdn_url":"//cdn.jsdelivr.net/npm/katex@0.11.1/dist/","argon_enable_lazyload":"true","argon_lazyload_threshold":"800","argon_lazyload_effect":"fadeIn","argon_lazyload_loading_style":"1","argon_enable_fancybox":"true","argon_enable_zoomify":"false","argon_zoomify_duration":"200","argon_zoomify_easing":"cubic-bezier(0.4,0,0,1)","argon_zoomify_scale":"0.9","argon_enable_pangu":"article","argon_custom_html_head":"","argon_custom_html_foot":"<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css\">\n<script src=\"https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js\"></script>\n \n<meting-js \n server=\"netease\" \n type=\"playlist\" \n id=\"7373135320\"\n fixed=\"true\" \n mini=\"true\"\n order=\"list\"\n loop=\"all\"\n preload=\"auto\"\n list-folded=\"true\"\n lrc-type=\"0\"\n>\n</meting-js>\n\n\n","argon_enable_smoothscroll_type":"1_pulse","argon_enable_into_article_animation":"true","argon_disable_pjax_animation":"false","argon_comment_pagination_type":"page","argon_comment_emotion_keyboard":"true","argon_hide_name_email_site_input":"false","argon_comment_need_captcha":"false","argon_get_captcha_by_ajax":"false","argon_comment_allow_markdown":"true","argon_comment_allow_editing":"true","argon_comment_allow_privatemode":"true","argon_comment_allow_mailnotice":"true","argon_comment_mailnotice_checkbox_checked":true,"argon_comment_enable_qq_avatar":"true","argon_comment_avatar_vcenter":"false","argon_who_can_visit_comment_edit_history":"commentsender","argon_enable_comment_pinning":"true","argon_enable_comment_upvote":"true","argon_comment_ua":"platform,browser","argon_show_comment_parent_info":"true","argon_fold_long_comments":"true","argon_gravatar_cdn":"gravatar.pho.ink/avatar/","argon_text_gravatar":"true","argon_enable_search_filters":"true","argon_search_filters_type":"*post,*page,shuoshuo","argon_pjax_disabled":"false","argon_hide_categories":"","argon_enable_login_css":"true","argon_home_show_shuoshuo":"false","argon_fold_long_shuoshuo":"true","argon_enable_timezone_fix":"false","argon_hide_shortcode_in_preview":"true","argon_trim_words_count":"0","argon_enable_mobile_scale":"false","argon_disable_googlefont":"false","argon_disable_codeblock_style":"false","argon_update_source":"github","argon_hide_footer_author":"true"}年度倒计时显示(左侧栏)
在左侧栏里添加工具——简码,复制一下代码粘贴进去
<div class="progress-wrapper" style="padding: 0">
<div class="progress-info">
<div class="progress-label">
<span id="yearprogress_yearname"></span>
</div>
<div id="yearprogress_text_container" class="progress-percentage">
<span id="yearprogress_progresstext"></span>
<span id="yearprogress_progresstext_full"></span>
</div>
</div>
<div class="progress">
<div id="yearprogress_progressbar" class="progress-bar bg-primary"></div>
</div>
</div>
<script no-pjax="">
function yearprogress_refresh() {
let year = new Date().getFullYear();
$("#yearprogress_yearname").text(year);
let from = new Date(year, 0, 1, 0, 0, 0);
let to = new Date(year, 11, 31, 23, 59, 59);
let now = new Date();
let progress = (((now - from) / (to - from + 1)) * 100).toFixed(7);
let progressshort = (((now - from) / (to - from + 1)) * 100).toFixed(2);
$("#yearprogress_progresstext").text(progressshort + "%");
$("#yearprogress_progresstext_full").text(progress + "%");
$("#yearprogress_progressbar").css("width", progress + "%");
}
yearprogress_refresh();
if (typeof yearProgressIntervalHasSet == "undefined") {
var yearProgressIntervalHasSet = true;
setInterval(function () {
yearprogress_refresh();
}, 500);
}
</script>
<style>
#yearprogress_text_container {
width: 100%;
height: 22px;
overflow: hidden;
user-select: none;
}
#yearprogress_text_container > span {
transition: all 0.3s ease;
display: block;
}
#yearprogress_text_container:hover > span {
transform: translateY(-20px);
}
</style>音乐播放功能
server="netease" 指定音乐平台为网易云,type="song" 指单曲类型,id="7373135320" 为音乐的 id(这里的id为打开音乐歌单,网址显示的id)
开启吸底模式 fixed="true", 开启迷你模式 mini="true", 随机播放 order="random", 关闭底部歌词 lrc-type="0"
注意:id需要为自己创建的歌单,不能为我喜欢的音乐;server可以改自己用的音乐平台,如netease(网易云)、tencent(QQ音乐)
具体参数设置点击此链接:https://yy.liveout.cn/article/Learn/front-end/aplayer%E5%8F%82%E6%95%B0.png
Aplayer播放器官网文档:APlayer HTML5音乐播放器 | ACE-BLOG (ace520.github.io)
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css">
<script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script>
<meting-js
server="netease"
type="playlist"
id="7360465359"
fixed="true"
mini="true"
order="random"
loop="all"
preload="auto"
list-folded="false">
</meting-js>动态背景
背景可以通过更改 url 链接设置为自己的动态视频,尽量不要太大,否则别人访问时会刷新许久
<video
src="https://new.gcxstudio.cn/wp-content/uploads/2022/03/daymode.mp4" /*白天动态视频链接*/
class="bg-video bg-video-day"
autoplay=""
loop="loop"
muted=""
></video>
<video
src="https://new.gcxstudio.cn/wp-content/uploads/2022/03/darkmode.webm" /*夜间动态视频链接*/
class="bg-video bg-video-night"
autoplay=""
loop="loop"
muted=""
></video>
<style>
video.bg-video {
position: fixed;
z-index: -1;
left: 0;
right: 0;
top: 0;
bottom: 0;
width: 100vw;
height: 100vh;
object-fit: cover;
pointer-events: none;
}
html.darkmode video.bg-video.bg-video-day {
opacity: 0;
}
html.darkmode video.bg-video.bg-video-night {
opacity: 1;
}
video.bg-video.bg-video-day {
opacity: 1;
}
video.bg-video.bg-video-night {
opacity: 0;
}
#banner,
#banner .shape {
background: transparent !important;
}
* {
font-family: "Comfortaa", "Open Sans", -apple-system, system-ui,
BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial,
"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif;
}
</style>
<script
src="https://api.gcxstudio.cn/odometer/odometer.min.js"
integrity="sha256-65R1G5irU1VT+k8L4coqgd3saSvO/Wufson/w+v2Idw="
crossorigin="anonymous"
></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css">
<script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
<div id='aplayer'></div>
虚拟人物(看板娘)
以下代码选择一项复制即可,效果不同,自行选择
具体文章:stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platform (github.com)
<script src="https://fastly.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/autoload.js"></script>- 其中 jsonpath: 后面的链接可按自己爱好更改,选择别的虚拟人物
<script src="https://eqcn.ajz.miesnfu.com/wp-content/plugins/wp-3d-pony/live2dw/lib/L2Dwidget.min.js"></script>
<script>
L2Dwidget.init({
"model": {
//jsonpath控制显示那个小萝莉模型,
//(切换模型需要改动)
// "https://unpkg.com/(live2d-widget-model-koharu)@1.0.5/assets/(koharu).model.json"
jsonPath: "https://unpkg.com/live2d-widget-model-koharu@1.0.5/assets/koharu.model.json",
"scale": 1
},
"display": {
"position": "right", //看板娘的表现位置
"width": 75, //小萝莉的宽度
"height": 150, //小萝莉的高度
"hOffset": 0,
"vOffset": -20
},
"mobile": {
"show": true,
"scale": 0.5
},
"react": {
"opacityDefault": 0.7,
"opacityOnHover": 0.2
}
});
</script>
/* 小帅哥: https://unpkg.com/live2d-widget-model-chitose@1.0.5/assets/chitose.model.json
萌娘:https://unpkg.com/live2d-widget-model-shizuku@1.0.5/assets/shizuku.model.json
白猫:https://unpkg.com/live2d-widget-model-tororo@1.0.5/assets/tororo.model.json
黑猫: https://unpkg.com/live2d-widget-model-hijiki@1.0.5/assets/hijiki.model.json
小可爱(女):https://unpkg.com/live2d-widget-model-koharu@1.0.5/assets/koharu.model.json
小可爱(男):https://unpkg.com/live2d-widget-model-haruto@1.0.5/assets/haruto.model.json
初音:https://unpkg.com/live2d-widget-model-miku@1.0.5/assets/miku.model.json
圣职者妹妹:https://unpkg.com/live2d-widget-model-z16@1.0.5/assets/z16.model.json
茶杯犬:https://cdn.jsdelivr.net/npm/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json
绿毛妹妹:https://unpkg.com/live2d-widget-model-tsumiki@1.0.5/assets/tsumiki.model.json
金龟子妹妹:https://unpkg.com/live2d-widget-model-unitychan@1.0.5/assets/unitychan.model.json
https://unpkg.com/live2d-widget-model-nito@1.0.5/assets/nito.model.json
https://unpkg.com/live2d-widget-model-ni-j@1.0.5/assets/ni-j.model.json
小阿狸: https://unpkg.com/live2d-widget-model-nico@1.0.5/assets/nico.model.json
https://unpkg.com/live2d-widget-model-nietzche@1.0.5/assets/nietzche.model.json
https://unpkg.com/live2d-widget-model-nipsilon@1.0.5/assets/nipsilon.model.json
女学生: https://unpkg.com/live2d-widget-model-hibiki@1.0.5/assets/hibiki.model.json */网站访问数据(左侧栏)
- 进入Wordpress,点击插件,搜索并且下载 Wp Statistics
- 外观——小工具——站点额外内容——旧版小工具——统计

网站底部信息
CSS(样式表)
<style>
/* 核心样式 */
.github-badge {
display: inline-block;
border-radius: 4px;
text-shadow: none;
font-size: 13.1px;
color: #fff;
line-height: 15px;
margin-bottom: 5px;
font-family: "Open Sans", sans-serif;
}
.github-badge .badge-subject {
display: inline-block;
background-color: #4d4d4d;
padding: 4px 4px 4px 6px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
font-family: "Open Sans", sans-serif;
}
.github-badge .badge-value {
display: inline-block;
padding: 4px 6px 4px 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
font-family: "Open Sans", sans-serif;
}
.github-badge-big {
display: inline-block;
border-radius: 6px;
text-shadow: none;
font-size: 14.1px;
color: #fff;
line-height: 18px;
margin-bottom: 7px;
}
.github-badge-big .badge-subject {
display: inline-block;
background-color: #4d4d4d;
padding: 4px 4px 4px 6px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
}
.github-badge-big .badge-value {
display: inline-block;
padding: 4px 6px 4px 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.bg-orange {
background-color: #ec8a64 !important;
}
.bg-red {
background-color: #cb7574 !important;
}
.bg-apricots {
background-color: #f7c280 !important;
}
.bg-casein {
background-color: #dfe291 !important;
}
.bg-shallots {
background-color: #97c3c6 !important;
}
.bg-ogling {
background-color: #95c7e0 !important;
}
.bg-haze {
background-color: #9aaec7 !important;
}
.bg-mountain-terrier {
background-color: #99a5cd !important;
}
</style>
HTML(底部信息)
<div class="github-badge-big">
<span class="badge-subject"><i class="fa fa-id-card"></i> 备案号 </span
><span class="badge-value bg-orange">
<a href="https://beian.miit.gov.cn/" target="_blank" one-link-mark="yes"
>苏ICP备2022020194号</a
>
|
<a
href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode= 32072202010255"
target="_blank"
one-link-mark="yes"
>苏公网安备 32072202010255号</a
></span
>
</div>
<div class="github-badge-big">
<span class="badge-subject">Copyright </span
><span class="badge-value bg-red">
2022-2022
<i class="fa fa-copyright"></i> Echo</span
>
</script>
</div>
<div class="github-badge">
<span class="badge-subject"><i class="fa fa-wordpress"></i> Powered</span
><span class="badge-value bg-green"
><a href="https://cn.wordpress.org/" target="_blank" one-link-mark="yes"
>WordPress</a
></span
>
</div>
<div class="github-badge-big">
<span class="badge-subject"><i class="fa fa-clock-o"></i> Running Time</span
><span class="badge-value bg-apricots"
><span id="blog_running_days" class="odometer odometer-auto-theme"></span>
days
<span id="blog_running_hours" class="odometer odometer-auto-theme"></span> H
<span id="blog_running_mins" class="odometer odometer-auto-theme"></span> M
<span id="blog_running_secs" class="odometer odometer-auto-theme"></span>
S</span
>
JavaScript(网站运行时间脚本)
注意:new Date( year, month, date, hrs, min, sec) 按给定的参数创建 日期对象
其中month的值域为0~11,0代表1月,11表代表12月;所以你输入的月份需要为自己真正月份的前一个月
<script no-pjax="">
var blog_running_days = document.getElementById("blog_running_days");
var blog_running_hours = document.getElementById("blog_running_hours");
var blog_running_mins = document.getElementById("blog_running_mins");
var blog_running_secs = document.getElementById("blog_running_secs");
function refresh_blog_running_time() {
var time = new Date() - new Date(2022, 5, 31, 0, 0, 0); /*此处日期的月份改为自己真正月份的前一个月*/
var d = parseInt(time / 24 / 60 / 60 / 1000);
var h = parseInt((time % (24 * 60 * 60 * 1000)) / 60 / 60 / 1000);
var m = parseInt((time % (60 * 60 * 1000)) / 60 / 1000);
var s = parseInt((time % (60 * 1000)) / 1000);
blog_running_days.innerHTML = d;
blog_running_hours.innerHTML = h;
blog_running_mins.innerHTML = m;
blog_running_secs.innerHTML = s;
}
refresh_blog_running_time();
if (typeof bottomTimeIntervalHasSet == "undefined") {
var bottomTimeIntervalHasSet = true;
setInterval(function () {
refresh_blog_running_time();
}, 500);
}
</script>相关链接
本文所涉及的代码出自以下博客文章,十分感谢下面各位大佬的分享
个人博客:Echo's blog
关于 Argon 主题 更多美化内容文章: Argon 主题的美化设置 - Gong_cx (gcxstudio.cn)
关于博客中添加音乐插件: https://echeverra.cn/aplayer
Argon主题 GitHub地址:solstice23/argon-theme: 📖 Argon - 一个轻盈、简洁的 WordPress 主题 (github.com)
Argon主题制作人博客:solstice23 – Blog
Argon主题使用文档:首页 - Argon Theme Docs (solstice23.top)
Python的函数
本文未完待续
1.定义
1.函数代码以def关键字开头,后接函数标识符名称和圆括号()
2.任何传入的参数和自变量必须放在圆括号内,圆括号中定义参数
3.函数内容以冒号:开始,需要缩进
4.return表达式结束函数,返回一个值给调用方,不带表达式的return相当于返回None
def 函数名(参数列表): 函数体 return 返回值例:
def greet(name, age): print("Hello World")2.类型注解 Type Hints
Python函数参数不需要声明类型,解释器会自动推断,但是会带来难以理解,隐藏BUG,开发效率低下等问题,因此类型注解通过引入可选的类型信息解决这些问题,明确指出函数和返回值的类型,让代码更加健壮可维护。
在实现复杂逻辑和对外提供公共接口时,都应当使用类型注解
例:
func.py
def greet(name: str, age: int) -> str: return f"Hello World {name}, age {age}"但是,调用时仍然可以不遵守
func.py
def greet(name: str, age: int) -> str: return f"Hello World {name}, age {age}"if __name__ == '__main__': print( greet('lzj', 12.6) )此时可以通过mypy工具包,对我们的代码进行检测,会检测出问题
先安装mypy工具 pip install mypy,再进行检测
PS D:\PycharmProjects\python-lang-test> mypy .\func\func.pyfunc\func.py:5: error: Argument 2 to "greet" has incompatible type "float"; expected "int" [arg-type]Found 1 error in 1 file (checked 1 source file)如果要彻底避免,需要进行严格类型检查
def add(a: int, b: int) -> int: if not isinstance(a, int): raise TypeError(f"参数a期望类型int,实际传入{type(a).__name__}") if not isinstance(b, int): raise TypeError(f"参数b期望类型int,实际传入{type(b).__name__}") return a + bresult2 = add('5', 3)print(result2)Traceback (most recent call last): File "D:\PycharmProjects\python-lang-test\func\func.py", line 9, in <module> result2 = add('5', 3) File "D:\PycharmProjects\python-lang-test\func\func.py", line 4, in add raise TypeError(f"参数a期望类型int,实际传入{type(a).__name__}")TypeError: 参数a期望类型int,实际传入str对于参数是复杂数据类型的写法
from typing import List, Dict, Tuple, Set# 只包含整数的列表lst: List[int] = [1, 2, 3, 4, 5] # List<Integer> numbers# 键为字符串、值为整数的字典dic: Dict[str, int] = {"z3": 95, "li4": 88}# 包含整数、字符串、布尔值的元组tup: Tuple[int, str, bool] = (25, "z3", True)# 只包含字符串的集合s: Set[str] = {"z3", "li4", "w5"}在函数返回值是某种特定类型或None时使用Optional
例:dic.get(name)可能返回字典的值,也可能在没有值时返回None
from typing import Optionaldef age(name: str) -> Optional[int]: dic = {'a':16, 'b':17, 'c':18} return dic.get(name)if __name__ == '__main__': print(age('dd')) print(age('a'))None16


